From 4eea2bf58c14bb6aa6beb9eef4484bfeea29414a Mon Sep 17 00:00:00 2001 From: Zhiyuan Zheng Date: Sat, 27 Feb 2021 17:25:01 +0100 Subject: [PATCH] When replying to CW content, CW will be added --- src/Screens.tsx | 34 ++++++++++++------------- src/components/Header/Center.tsx | 3 ++- src/screens/Announcements.tsx | 8 +++--- src/screens/Compose.tsx | 17 +++++++++++++ src/screens/Compose/utils/parseState.ts | 5 +++- src/utils/slices/instancesSlice.ts | 2 +- 6 files changed, 45 insertions(+), 24 deletions(-) diff --git a/src/Screens.tsx b/src/Screens.tsx index 48a676c3..fa3bc2bf 100644 --- a/src/Screens.tsx +++ b/src/Screens.tsx @@ -1,4 +1,3 @@ -import apiInstance from '@api/instance' import { toast, toastConfig } from '@components/toast' import { NavigationContainer, @@ -9,6 +8,7 @@ import ScreenAnnouncements from '@screens/Announcements' import ScreenCompose from '@screens/Compose' import ScreenImagesViewer from '@screens/ImagesViewer' import ScreenTabs from '@screens/Tabs' +import { useAnnouncementQuery } from '@utils/queryHooks/announcement' import { updatePreviousTab } from '@utils/slices/contextsSlice' import { updateAccountPreferences } from '@utils/slices/instances/updateAccountPreferences' import { getInstanceActive } from '@utils/slices/instancesSlice' @@ -117,28 +117,28 @@ const Screens: React.FC = ({ localCorrupt }) => { }, [localCorrupt]) // On launch check if there is any unread announcements - useEffect(() => { - instanceActive !== -1 && - apiInstance({ - method: 'get', - url: `announcements` - }) - .then(res => { - if (res.body.filter(announcement => !announcement.read).length) { - navigationRef.current?.navigate('Screen-Announcements', { - showAll: false - }) - } - }) - .catch(() => {}) - }, []) + useAnnouncementQuery({ + showAll: false, + options: { + notifyOnChangeProps: [], + select: announcements => + announcements.filter(announcement => !announcement.read), + onSuccess: data => { + if (data.length) { + navigationRef.current?.navigate('Screen-Announcements', { + showAll: false + }) + } + } + } + }) // Lazily update users's preferences, for e.g. composing default visibility useEffect(() => { if (instanceActive !== -1) { dispatch(updateAccountPreferences()) } - }, []) + }, [instanceActive]) // Callbacks const navigationContainerOnReady = useCallback( diff --git a/src/components/Header/Center.tsx b/src/components/Header/Center.tsx index 0715e8de..cbd1424e 100644 --- a/src/components/Header/Center.tsx +++ b/src/components/Header/Center.tsx @@ -28,7 +28,8 @@ const HeaderCenter = React.memo( const styles = StyleSheet.create({ text: { - ...StyleConstants.FontStyle.M + fontSize: 18, + fontWeight: StyleConstants.Font.Weight.Bold } }) diff --git a/src/screens/Announcements.tsx b/src/screens/Announcements.tsx index c4603dfc..3b89674b 100644 --- a/src/screens/Announcements.tsx +++ b/src/screens/Announcements.tsx @@ -204,13 +204,13 @@ const ScreenAnnouncements: React.FC = ({ style={styles.base} reducedTransparencyFallbackColor={theme.background} > - + = ({ onMomentumScrollEnd={onMomentumScrollEnd} ListEmptyComponent={ListEmptyComponent} /> - + {query.data && query.data.length > 1 ? ( <> {query.data.map((d, i) => ( diff --git a/src/screens/Compose.tsx b/src/screens/Compose.tsx index 4872f769..07c4e2c3 100644 --- a/src/screens/Compose.tsx +++ b/src/screens/Compose.tsx @@ -145,6 +145,23 @@ const ScreenCompose: React.FC = ({ }) break case 'reply': + const actualStatus = + params.incomingStatus.reblog || params.incomingStatus + if (actualStatus.spoiler_text) { + formatText({ + textInput: 'spoiler', + composeDispatch, + content: actualStatus.spoiler_text, + disableDebounce: true + }) + } + formatText({ + textInput: 'text', + composeDispatch, + content: params.accts.map(acct => `@${acct}`).join(' ') + ' ', + disableDebounce: true + }) + break case 'conversation': formatText({ textInput: 'text', diff --git a/src/screens/Compose/utils/parseState.ts b/src/screens/Compose/utils/parseState.ts index aaae4aff..4377185f 100644 --- a/src/screens/Compose/utils/parseState.ts +++ b/src/screens/Compose/utils/parseState.ts @@ -39,7 +39,7 @@ const composeParseState = ( }), visibility: params.incomingStatus.visibility || - getInstanceAccount(store.getState()).preferences[ + getInstanceAccount(store.getState())?.preferences[ 'posting:default:visibility' ] || 'public', @@ -53,6 +53,9 @@ const composeParseState = ( ...composeInitialState, dirty: true, timestamp: Date.now(), + ...(actualStatus.spoiler_text && { + spoiler: { ...composeInitialState.spoiler, active: true } + }), visibility: actualStatus.visibility, visibilityLock: actualStatus.visibility === 'direct', replyToStatus: actualStatus diff --git a/src/utils/slices/instancesSlice.ts b/src/utils/slices/instancesSlice.ts index 60fd3c6e..89606835 100644 --- a/src/utils/slices/instancesSlice.ts +++ b/src/utils/slices/instancesSlice.ts @@ -302,7 +302,7 @@ export const getInstanceMaxTootChar = ({ instances: { instances } }: RootState) => { const instanceActive = findInstanceActive(instances) - return instanceActive !== -1 ? instances[instanceActive].max_toot_chars : null + return instanceActive !== -1 ? instances[instanceActive].max_toot_chars : 500 } export const getInstanceAccount = ({ instances: { instances } }: RootState) => {