Add option to preserve spoilers text when replying

Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
environments/review-preserve-s-7ctcia/deployments/3625
marcin mikołajczak 2023-07-19 00:34:06 +02:00
rodzic 7944de8305
commit 74155432cd
5 zmienionych plików z 20 dodań i 0 usunięć

Wyświetl plik

@ -144,6 +144,7 @@ interface ComposeReplyAction {
status: Status
account: Account
explicitAddressing: boolean
preserveSpoilers: boolean
}
const replyCompose = (status: Status) =>
@ -151,6 +152,7 @@ const replyCompose = (status: Status) =>
const state = getState();
const instance = state.instance;
const { explicitAddressing } = getFeatures(instance);
const preserveSpoilers = !!getSettings(state).get('preserveSpoilers');
const action: ComposeReplyAction = {
type: COMPOSE_REPLY,
@ -158,6 +160,7 @@ const replyCompose = (status: Status) =>
status: status,
account: state.accounts.get(state.me)!,
explicitAddressing,
preserveSpoilers,
};
dispatch(action);

Wyświetl plik

@ -44,6 +44,7 @@ const defaultSettings = ImmutableMap({
explanationBox: true,
autoloadTimelines: true,
autoloadMore: true,
preserveSpoilers: false,
systemFont: false,
demetricator: false,

Wyświetl plik

@ -118,6 +118,7 @@ export const Checkbox: React.FC<ICheckbox> = (props) => (
);
interface ISelectDropdown {
className?: string
label?: React.ReactNode
hint?: React.ReactNode
items: Record<string, string>

Wyświetl plik

@ -136,6 +136,7 @@ const Preferences = () => {
<ListItem label={<FormattedMessage id='preferences.fields.language_label' defaultMessage='Language' />}>
<SelectDropdown
className='max-w-[200px]'
items={languages}
defaultValue={settings.get('locale') as string | undefined}
onChange={(event: React.ChangeEvent<HTMLSelectElement>) => onSelectChange(event, ['locale'])}
@ -144,6 +145,7 @@ const Preferences = () => {
<ListItem label={<FormattedMessage id='preferences.fields.media_display_label' defaultMessage='Sensitive content' />}>
<SelectDropdown
className='max-w-[200px]'
items={displayMediaOptions}
defaultValue={settings.get('displayMedia') as string | undefined}
onChange={(event: React.ChangeEvent<HTMLSelectElement>) => onSelectChange(event, ['displayMedia'])}
@ -153,6 +155,7 @@ const Preferences = () => {
{features.privacyScopes && (
<ListItem label={<FormattedMessage id='preferences.fields.privacy_label' defaultMessage='Default post privacy' />}>
<SelectDropdown
className='max-w-[200px]'
items={defaultPrivacyOptions}
defaultValue={settings.get('defaultPrivacy') as string | undefined}
onChange={(event: React.ChangeEvent<HTMLSelectElement>) => onSelectChange(event, ['defaultPrivacy'])}
@ -163,12 +166,19 @@ const Preferences = () => {
{features.richText && (
<ListItem label={<FormattedMessage id='preferences.fields.content_type_label' defaultMessage='Default post format' />}>
<SelectDropdown
className='max-w-[200px]'
items={defaultContentTypeOptions}
defaultValue={settings.get('defaultContentType') as string | undefined}
onChange={(event: React.ChangeEvent<HTMLSelectElement>) => onSelectChange(event, ['defaultContentType'])}
/>
</ListItem>
)}
{features.spoilers && (
<ListItem label={<FormattedMessage id='preferences.fields.preserve_spoilers_label' defaultMessage='Preserve content warning when replying' />}>
<SettingToggle settings={settings} settingPath={['preserveSpoilers']} onChange={onToggleChange} />
</ListItem>
)}
</List>
<List>

Wyświetl plik

@ -312,6 +312,11 @@ export default function compose(state = initialState, action: ComposeAction | Me
map.set('caretPosition', null);
map.set('idempotencyKey', uuid());
map.set('content_type', defaultCompose.content_type);
if (action.preserveSpoilers && action.status.spoiler_text) {
map.set('spoiler', true);
map.set('sensitive', true);
map.set('spoiler_text', action.status.spoiler_text);
}
}));
case COMPOSE_EVENT_REPLY:
return updateCompose(state, action.id, compose => compose.withMutations(map => {