diff options
Diffstat (limited to 'src/view/screens')
-rw-r--r-- | src/view/screens/Home.tsx | 6 | ||||
-rw-r--r-- | src/view/screens/ProfileList.tsx | 26 | ||||
-rw-r--r-- | src/view/screens/Search/Search.tsx | 18 | ||||
-rw-r--r-- | src/view/screens/Settings.tsx | 65 | ||||
-rw-r--r-- | src/view/screens/Storybook/index.tsx | 24 |
5 files changed, 112 insertions, 27 deletions
diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx index 7d6a40f02..1da276488 100644 --- a/src/view/screens/Home.tsx +++ b/src/view/screens/Home.tsx @@ -184,8 +184,7 @@ function HomeScreenReady({ initialPage={clamp(selectedPageIndex, 0, customFeeds.length)} onPageSelected={onPageSelected} onPageScrollStateChanged={onPageScrollStateChanged} - renderTabBar={renderTabBar} - tabBarPosition="top"> + renderTabBar={renderTabBar}> <FeedPage key="1" testID="followingFeedPage" @@ -212,8 +211,7 @@ function HomeScreenReady({ testID="homeScreen" onPageSelected={onPageSelected} onPageScrollStateChanged={onPageScrollStateChanged} - renderTabBar={renderTabBar} - tabBarPosition="top"> + renderTabBar={renderTabBar}> <HomeLoggedOutCTA /> </Pager> ) diff --git a/src/view/screens/ProfileList.tsx b/src/view/screens/ProfileList.tsx index 17c93b037..796464883 100644 --- a/src/view/screens/ProfileList.tsx +++ b/src/view/screens/ProfileList.tsx @@ -55,6 +55,7 @@ import { usePreferencesQuery, usePinFeedMutation, useUnpinFeedMutation, + useSetSaveFeedsMutation, } from '#/state/queries/preferences' import {logger} from '#/logger' import {useAnalytics} from '#/lib/analytics/analytics' @@ -246,9 +247,11 @@ function Header({rkey, list}: {rkey: string; list: AppBskyGraphDefs.ListView}) { useUnpinFeedMutation() const isPending = isPinPending || isUnpinPending const {data: preferences} = usePreferencesQuery() + const {mutate: setSavedFeeds} = useSetSaveFeedsMutation() const {track} = useAnalytics() const isPinned = preferences?.feeds?.pinned?.includes(list.uri) + const isSaved = preferences?.feeds?.saved?.includes(list.uri) const onTogglePinned = React.useCallback(async () => { Haptics.default() @@ -361,6 +364,16 @@ function Header({rkey, list}: {rkey: string; list: AppBskyGraphDefs.ListView}) { message: _(msg`Are you sure?`), async onPressConfirm() { await listDeleteMutation.mutateAsync({uri: list.uri}) + + if (isSaved || isPinned) { + const {saved, pinned} = preferences!.feeds + + setSavedFeeds({ + saved: isSaved ? saved.filter(uri => uri !== list.uri) : saved, + pinned: isPinned ? pinned.filter(uri => uri !== list.uri) : pinned, + }) + } + Toast.show(_(msg`List deleted`)) track('Lists:Delete') if (navigation.canGoBack()) { @@ -370,7 +383,18 @@ function Header({rkey, list}: {rkey: string; list: AppBskyGraphDefs.ListView}) { } }, }) - }, [openModal, list, listDeleteMutation, navigation, track, _]) + }, [ + openModal, + list, + listDeleteMutation, + navigation, + track, + _, + preferences, + isPinned, + isSaved, + setSavedFeeds, + ]) const onPressReport = useCallback(() => { openModal({ diff --git a/src/view/screens/Search/Search.tsx b/src/view/screens/Search/Search.tsx index 4703899a2..142726701 100644 --- a/src/view/screens/Search/Search.tsx +++ b/src/view/screens/Search/Search.tsx @@ -190,7 +190,13 @@ type SearchResultSlice = function SearchScreenPostResults({query}: {query: string}) { const {_} = useLingui() + const {currentAccount} = useSession() const [isPTR, setIsPTR] = React.useState(false) + + const augmentedQuery = React.useMemo(() => { + return augmentSearchQuery(query || '', {did: currentAccount?.did}) + }, [query, currentAccount]) + const { isFetched, data: results, @@ -200,7 +206,7 @@ function SearchScreenPostResults({query}: {query: string}) { fetchNextPage, isFetchingNextPage, hasNextPage, - } = useSearchPostsQuery({query}) + } = useSearchPostsQuery({query: augmentedQuery}) const onPullToRefresh = React.useCallback(async () => { setIsPTR(true) @@ -319,13 +325,9 @@ export function SearchScreenInner({ const pal = usePalette('default') const setMinimalShellMode = useSetMinimalShellMode() const setDrawerSwipeDisabled = useSetDrawerSwipeDisabled() - const {hasSession, currentAccount} = useSession() + const {hasSession} = useSession() const {isDesktop} = useWebMediaQueries() - const augmentedQuery = React.useMemo(() => { - return augmentSearchQuery(query || '', {did: currentAccount?.did}) - }, [query, currentAccount]) - const onPageSelected = React.useCallback( (index: number) => { setMinimalShellMode(false) @@ -337,7 +339,6 @@ export function SearchScreenInner({ if (hasSession) { return query ? ( <Pager - tabBarPosition="top" onPageSelected={onPageSelected} renderTabBar={props => ( <CenteredView @@ -348,7 +349,7 @@ export function SearchScreenInner({ )} initialPage={0}> <View> - <SearchScreenPostResults query={augmentedQuery} /> + <SearchScreenPostResults query={query} /> </View> <View> <SearchScreenUserResults query={query} /> @@ -380,7 +381,6 @@ export function SearchScreenInner({ return query ? ( <Pager - tabBarPosition="top" onPageSelected={onPageSelected} renderTabBar={props => ( <CenteredView diff --git a/src/view/screens/Settings.tsx b/src/view/screens/Settings.tsx index 3b50c5449..104506576 100644 --- a/src/view/screens/Settings.tsx +++ b/src/view/screens/Settings.tsx @@ -40,8 +40,8 @@ import {RQKEY as RQKEY_PROFILE} from '#/state/queries/profile' import {useModalControls} from '#/state/modals' import { useSetMinimalShellMode, - useColorMode, - useSetColorMode, + useThemePrefs, + useSetThemePrefs, useOnboardingDispatch, } from '#/state/shell' import { @@ -144,8 +144,8 @@ function SettingsAccountCard({account}: {account: SessionAccount}) { type Props = NativeStackScreenProps<CommonNavigatorParams, 'Settings'> export function SettingsScreen({}: Props) { const queryClient = useQueryClient() - const colorMode = useColorMode() - const setColorMode = useSetColorMode() + const {colorMode, darkTheme} = useThemePrefs() + const {setColorMode, setDarkTheme} = useSetThemePrefs() const pal = usePalette('default') const {_} = useLingui() const setMinimalShellMode = useSetMinimalShellMode() @@ -483,8 +483,36 @@ export function SettingsScreen({}: Props) { /> </View> </View> + <View style={styles.spacer20} /> + {colorMode !== 'light' && ( + <> + <Text type="xl-bold" style={[pal.text, styles.heading]}> + <Trans>Dark Theme</Trans> + </Text> + <View> + <View style={[styles.linkCard, pal.view, styles.selectableBtns]}> + <SelectableBtn + selected={!darkTheme || darkTheme === 'dim'} + label={_(msg`Dim`)} + left + onSelect={() => setDarkTheme('dim')} + accessibilityHint={_(msg`Set dark theme to the dim theme`)} + /> + <SelectableBtn + selected={darkTheme === 'dark'} + label={_(msg`Dark`)} + right + onSelect={() => setDarkTheme('dark')} + accessibilityHint={_(msg`Set dark theme to the dark theme`)} + /> + </View> + </View> + <View style={styles.spacer20} /> + </> + )} + <Text type="xl-bold" style={[pal.text, styles.heading]}> <Trans>Basics</Trans> </Text> @@ -647,7 +675,7 @@ export function SettingsScreen({}: Props) { /> </View> <Text type="lg" style={pal.text}> - <Trans>App passwords</Trans> + <Trans>App Passwords</Trans> </Text> </TouchableOpacity> <TouchableOpacity @@ -668,7 +696,7 @@ export function SettingsScreen({}: Props) { /> </View> <Text type="lg" style={pal.text} numberOfLines={1}> - <Trans>Change handle</Trans> + <Trans>Change Handle</Trans> </Text> </TouchableOpacity> {isNative && ( @@ -684,9 +712,30 @@ export function SettingsScreen({}: Props) { )} <View style={styles.spacer20} /> <Text type="xl-bold" style={[pal.text, styles.heading]}> - <Trans>Danger Zone</Trans> + <Trans>Account</Trans> </Text> <TouchableOpacity + testID="changePasswordBtn" + style={[ + styles.linkCard, + pal.view, + isSwitchingAccounts && styles.dimmed, + ]} + onPress={() => openModal({name: 'change-password'})} + accessibilityRole="button" + accessibilityLabel={_(msg`Change password`)} + accessibilityHint={_(msg`Change your Bluesky password`)}> + <View style={[styles.iconContainer, pal.btn]}> + <FontAwesomeIcon + icon="lock" + style={pal.text as FontAwesomeIconStyle} + /> + </View> + <Text type="lg" style={pal.text} numberOfLines={1}> + <Trans>Change Password</Trans> + </Text> + </TouchableOpacity> + <TouchableOpacity style={[pal.view, styles.linkCard]} onPress={onPressDeleteAccount} accessible={true} @@ -703,7 +752,7 @@ export function SettingsScreen({}: Props) { /> </View> <Text type="lg" style={dangerText}> - <Trans>Delete my account…</Trans> + <Trans>Delete My Account…</Trans> </Text> </TouchableOpacity> <View style={styles.spacer20} /> diff --git a/src/view/screens/Storybook/index.tsx b/src/view/screens/Storybook/index.tsx index d8898f20e..40929555e 100644 --- a/src/view/screens/Storybook/index.tsx +++ b/src/view/screens/Storybook/index.tsx @@ -3,7 +3,7 @@ import {View} from 'react-native' import {CenteredView, ScrollView} from '#/view/com/util/Views' import {atoms as a, useTheme, ThemeProvider} from '#/alf' -import {useSetColorMode} from '#/state/shell' +import {useSetThemePrefs} from '#/state/shell' import {Button} from '#/components/Button' import {Theming} from './Theming' @@ -19,7 +19,7 @@ import {Icons} from './Icons' export function Storybook() { const t = useTheme() - const setColorMode = useSetColorMode() + const {setColorMode, setDarkTheme} = useSetThemePrefs() return ( <ScrollView> @@ -38,7 +38,7 @@ export function Storybook() { variant="solid" color="secondary" size="small" - label='Set theme to "system"' + label='Set theme to "light"' onPress={() => setColorMode('light')}> Light </Button> @@ -46,8 +46,22 @@ export function Storybook() { variant="solid" color="secondary" size="small" - label='Set theme to "system"' - onPress={() => setColorMode('dark')}> + label='Set theme to "dim"' + onPress={() => { + setColorMode('dark') + setDarkTheme('dim') + }}> + Dim + </Button> + <Button + variant="solid" + color="secondary" + size="small" + label='Set theme to "dark"' + onPress={() => { + setColorMode('dark') + setDarkTheme('dark') + }}> Dark </Button> </View> |