add basic settings screen
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"><path fill="#000" d="M7 4a1 1 0 0 0-1 1v12.05q.243-.05.5-.05H18V4H7Zm5 7c.894 0 1.57.188 2.068.513a2.1 2.1 0 0 1 .806.937l.046.12c.285.836-.43 1.43-1.03 1.43h-3.78c-.6 0-1.315-.594-1.03-1.43l.046-.12a2.1 2.1 0 0 1 .806-.937C10.43 11.188 11.106 11 12 11Zm0-4a1.75 1.75 0 1 1 0 3.5A1.75 1.75 0 0 1 12 7Zm8 11a1 1 0 0 1-1 1H6.5a.5.5 0 0 0 0 1H19a1 1 0 1 1 0 2H6.5A2.5 2.5 0 0 1 4 19.5V5a3 3 0 0 1 3-3h11a2 2 0 0 1 2 2v14Z"/></svg>
|
||||||
|
After Width: | Height: | Size: 500 B |
@@ -291,6 +291,7 @@ func serve(cctx *cli.Context) error {
|
|||||||
e.GET("/settings/notifications/reposts-on-reposts", server.WebGeneric)
|
e.GET("/settings/notifications/reposts-on-reposts", server.WebGeneric)
|
||||||
e.GET("/settings/notifications/activity", server.WebGeneric)
|
e.GET("/settings/notifications/activity", server.WebGeneric)
|
||||||
e.GET("/settings/notifications/miscellaneous", server.WebGeneric)
|
e.GET("/settings/notifications/miscellaneous", server.WebGeneric)
|
||||||
|
e.GET("/settings/sync-contacts", server.WebGeneric)
|
||||||
e.GET("/settings/app-icon", server.WebGeneric)
|
e.GET("/settings/app-icon", server.WebGeneric)
|
||||||
e.GET("/sys/debug", server.WebGeneric)
|
e.GET("/sys/debug", server.WebGeneric)
|
||||||
e.GET("/sys/debug-mod", server.WebGeneric)
|
e.GET("/sys/debug-mod", server.WebGeneric)
|
||||||
|
|||||||
+13
-4
@@ -18,7 +18,9 @@ import {
|
|||||||
} from '@react-navigation/native'
|
} from '@react-navigation/native'
|
||||||
|
|
||||||
import {timeout} from '#/lib/async/timeout'
|
import {timeout} from '#/lib/async/timeout'
|
||||||
|
import {useAccountSwitcher} from '#/lib/hooks/useAccountSwitcher'
|
||||||
import {useColorSchemeStyle} from '#/lib/hooks/useColorSchemeStyle'
|
import {useColorSchemeStyle} from '#/lib/hooks/useColorSchemeStyle'
|
||||||
|
import {useNonReactiveCallback} from '#/lib/hooks/useNonReactiveCallback'
|
||||||
import {
|
import {
|
||||||
getNotificationPayload,
|
getNotificationPayload,
|
||||||
type NotificationPayload,
|
type NotificationPayload,
|
||||||
@@ -45,10 +47,12 @@ import {logger} from '#/logger'
|
|||||||
import {isNative, isWeb} from '#/platform/detection'
|
import {isNative, isWeb} from '#/platform/detection'
|
||||||
import {useUnreadNotifications} from '#/state/queries/notifications/unread'
|
import {useUnreadNotifications} from '#/state/queries/notifications/unread'
|
||||||
import {useSession} from '#/state/session'
|
import {useSession} from '#/state/session'
|
||||||
|
import {useLoggedOutViewControls} from '#/state/shell/logged-out'
|
||||||
import {
|
import {
|
||||||
shouldRequestEmailConfirmation,
|
shouldRequestEmailConfirmation,
|
||||||
snoozeEmailConfirmationPrompt,
|
snoozeEmailConfirmationPrompt,
|
||||||
} from '#/state/shell/reminders'
|
} from '#/state/shell/reminders'
|
||||||
|
import {useCloseAllActiveElements} from '#/state/util'
|
||||||
import {CommunityGuidelinesScreen} from '#/view/screens/CommunityGuidelines'
|
import {CommunityGuidelinesScreen} from '#/view/screens/CommunityGuidelines'
|
||||||
import {CopyrightPolicyScreen} from '#/view/screens/CopyrightPolicy'
|
import {CopyrightPolicyScreen} from '#/view/screens/CopyrightPolicy'
|
||||||
import {DebugModScreen} from '#/view/screens/DebugMod'
|
import {DebugModScreen} from '#/view/screens/DebugMod'
|
||||||
@@ -119,6 +123,7 @@ import {RepostNotificationSettingsScreen} from '#/screens/Settings/NotificationS
|
|||||||
import {RepostsOnRepostsNotificationSettingsScreen} from '#/screens/Settings/NotificationSettings/RepostsOnRepostsNotificationSettings'
|
import {RepostsOnRepostsNotificationSettingsScreen} from '#/screens/Settings/NotificationSettings/RepostsOnRepostsNotificationSettings'
|
||||||
import {PrivacyAndSecuritySettingsScreen} from '#/screens/Settings/PrivacyAndSecuritySettings'
|
import {PrivacyAndSecuritySettingsScreen} from '#/screens/Settings/PrivacyAndSecuritySettings'
|
||||||
import {SettingsScreen} from '#/screens/Settings/Settings'
|
import {SettingsScreen} from '#/screens/Settings/Settings'
|
||||||
|
import {SyncContactsSettingsScreen} from '#/screens/Settings/SyncContactsSettings'
|
||||||
import {ThreadPreferencesScreen} from '#/screens/Settings/ThreadPreferences'
|
import {ThreadPreferencesScreen} from '#/screens/Settings/ThreadPreferences'
|
||||||
import {
|
import {
|
||||||
StarterPackScreen,
|
StarterPackScreen,
|
||||||
@@ -134,10 +139,6 @@ import {
|
|||||||
} from '#/components/dialogs/EmailDialog'
|
} from '#/components/dialogs/EmailDialog'
|
||||||
import {router} from '#/routes'
|
import {router} from '#/routes'
|
||||||
import {Referrer} from '../modules/expo-bluesky-swiss-army'
|
import {Referrer} from '../modules/expo-bluesky-swiss-army'
|
||||||
import {useAccountSwitcher} from './lib/hooks/useAccountSwitcher'
|
|
||||||
import {useNonReactiveCallback} from './lib/hooks/useNonReactiveCallback'
|
|
||||||
import {useLoggedOutViewControls} from './state/shell/logged-out'
|
|
||||||
import {useCloseAllActiveElements} from './state/util'
|
|
||||||
|
|
||||||
const navigationRef = createNavigationContainerRef<AllNavigatorParams>()
|
const navigationRef = createNavigationContainerRef<AllNavigatorParams>()
|
||||||
|
|
||||||
@@ -416,6 +417,14 @@ function commonScreens(Stack: typeof Flat, unreadCountLabel?: string) {
|
|||||||
requireAuth: true,
|
requireAuth: true,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
<Stack.Screen
|
||||||
|
name="SyncContactsSettings"
|
||||||
|
getComponent={() => SyncContactsSettingsScreen}
|
||||||
|
options={{
|
||||||
|
title: title(msg`Sync contacts`),
|
||||||
|
requireAuth: true,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
<Stack.Screen
|
<Stack.Screen
|
||||||
name="NotificationSettings"
|
name="NotificationSettings"
|
||||||
getComponent={() => NotificationSettingsScreen}
|
getComponent={() => NotificationSettingsScreen}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import {createSinglePathSVG} from './TEMPLATE'
|
||||||
|
|
||||||
|
export const Contacts_Stroke2_Corner2_Rounded = createSinglePathSVG({
|
||||||
|
path: 'M7 4a1 1 0 0 0-1 1v12.05q.243-.05.5-.05H18V4H7Zm5 7c.894 0 1.57.188 2.068.513.445.29.683.647.806.937l.046.12c.285.836-.43 1.43-1.03 1.43h-3.78c-.6 0-1.315-.594-1.03-1.43l.046-.12c.123-.29.361-.647.806-.937C10.43 11.188 11.106 11 12 11Zm0-4a1.75 1.75 0 1 1 0 3.5A1.75 1.75 0 0 1 12 7Zm8 11a1 1 0 0 1-1 1H6.5a.5.5 0 0 0 0 1H19a1 1 0 1 1 0 2H6.5A2.5 2.5 0 0 1 4 19.5V5a3 3 0 0 1 3-3h11a2 2 0 0 1 2 2v14Z',
|
||||||
|
})
|
||||||
@@ -67,6 +67,7 @@ export type CommonNavigatorParams = {
|
|||||||
InterestsSettings: undefined
|
InterestsSettings: undefined
|
||||||
AboutSettings: undefined
|
AboutSettings: undefined
|
||||||
AppIconSettings: undefined
|
AppIconSettings: undefined
|
||||||
|
SyncContactsSettings: undefined
|
||||||
Search: {q?: string; tab?: 'user' | 'profile' | 'feed'}
|
Search: {q?: string; tab?: 'user' | 'profile' | 'feed'}
|
||||||
Hashtag: {tag: string; author?: string}
|
Hashtag: {tag: string; author?: string}
|
||||||
Topic: {topic: string}
|
Topic: {topic: string}
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ export const router = new Router<AllNavigatableRoutes>({
|
|||||||
'/settings/notifications/reposts-on-reposts',
|
'/settings/notifications/reposts-on-reposts',
|
||||||
ActivityNotificationSettings: '/settings/notifications/activity',
|
ActivityNotificationSettings: '/settings/notifications/activity',
|
||||||
MiscellaneousNotificationSettings: '/settings/notifications/miscellaneous',
|
MiscellaneousNotificationSettings: '/settings/notifications/miscellaneous',
|
||||||
|
SyncContactsSettings: '/settings/sync-contacts',
|
||||||
// support
|
// support
|
||||||
Support: '/support',
|
Support: '/support',
|
||||||
PrivacyPolicy: '/support/privacy',
|
PrivacyPolicy: '/support/privacy',
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ import {BubbleInfo_Stroke2_Corner2_Rounded as BubbleInfoIcon} from '#/components
|
|||||||
import {ChevronTop_Stroke2_Corner0_Rounded as ChevronUpIcon} from '#/components/icons/Chevron'
|
import {ChevronTop_Stroke2_Corner0_Rounded as ChevronUpIcon} from '#/components/icons/Chevron'
|
||||||
import {CircleQuestion_Stroke2_Corner2_Rounded as CircleQuestionIcon} from '#/components/icons/CircleQuestion'
|
import {CircleQuestion_Stroke2_Corner2_Rounded as CircleQuestionIcon} from '#/components/icons/CircleQuestion'
|
||||||
import {CodeBrackets_Stroke2_Corner2_Rounded as CodeBracketsIcon} from '#/components/icons/CodeBrackets'
|
import {CodeBrackets_Stroke2_Corner2_Rounded as CodeBracketsIcon} from '#/components/icons/CodeBrackets'
|
||||||
|
import {Contacts_Stroke2_Corner2_Rounded as ContactsIcon} from '#/components/icons/Contacts'
|
||||||
import {DotGrid_Stroke2_Corner0_Rounded as DotsHorizontal} from '#/components/icons/DotGrid'
|
import {DotGrid_Stroke2_Corner0_Rounded as DotsHorizontal} from '#/components/icons/DotGrid'
|
||||||
import {Earth_Stroke2_Corner2_Rounded as EarthIcon} from '#/components/icons/Globe'
|
import {Earth_Stroke2_Corner2_Rounded as EarthIcon} from '#/components/icons/Globe'
|
||||||
import {Lock_Stroke2_Corner2_Rounded as LockIcon} from '#/components/icons/Lock'
|
import {Lock_Stroke2_Corner2_Rounded as LockIcon} from '#/components/icons/Lock'
|
||||||
@@ -207,6 +208,14 @@ export function SettingsScreen({}: Props) {
|
|||||||
<Trans>Content and media</Trans>
|
<Trans>Content and media</Trans>
|
||||||
</SettingsList.ItemText>
|
</SettingsList.ItemText>
|
||||||
</SettingsList.LinkItem>
|
</SettingsList.LinkItem>
|
||||||
|
<SettingsList.LinkItem
|
||||||
|
to="/settings/sync-contacts"
|
||||||
|
label={_(msg`Sync contacts`)}>
|
||||||
|
<SettingsList.ItemIcon icon={ContactsIcon} />
|
||||||
|
<SettingsList.ItemText>
|
||||||
|
<Trans>Sync contacts</Trans>
|
||||||
|
</SettingsList.ItemText>
|
||||||
|
</SettingsList.LinkItem>
|
||||||
<SettingsList.LinkItem
|
<SettingsList.LinkItem
|
||||||
to="/settings/appearance"
|
to="/settings/appearance"
|
||||||
label={_(msg`Appearance`)}>
|
label={_(msg`Appearance`)}>
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
import {Trans} from '@lingui/macro'
|
||||||
|
|
||||||
|
import {
|
||||||
|
type AllNavigatorParams,
|
||||||
|
type NativeStackScreenProps,
|
||||||
|
} from '#/lib/routes/types'
|
||||||
|
import {atoms as a, useTheme} from '#/alf'
|
||||||
|
import {Contacts_Stroke2_Corner2_Rounded as SyncContactsIcon} from '#/components/icons/Contacts'
|
||||||
|
import * as Layout from '#/components/Layout'
|
||||||
|
import {InlineLinkText} from '#/components/Link'
|
||||||
|
import {Text} from '#/components/Typography'
|
||||||
|
import * as SettingsList from './components/SettingsList'
|
||||||
|
|
||||||
|
type Props = NativeStackScreenProps<AllNavigatorParams, 'SyncContactsSettings'>
|
||||||
|
export function SyncContactsSettingsScreen({}: Props) {
|
||||||
|
const t = useTheme()
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Layout.Screen>
|
||||||
|
<Layout.Header.Outer>
|
||||||
|
<Layout.Header.BackButton />
|
||||||
|
<Layout.Header.Content>
|
||||||
|
<Layout.Header.TitleText>
|
||||||
|
<Trans>Sync contacts</Trans>
|
||||||
|
</Layout.Header.TitleText>
|
||||||
|
</Layout.Header.Content>
|
||||||
|
<Layout.Header.Slot />
|
||||||
|
</Layout.Header.Outer>
|
||||||
|
<Layout.Content>
|
||||||
|
<SettingsList.Container>
|
||||||
|
<SettingsList.Item>
|
||||||
|
<SettingsList.ItemIcon icon={SyncContactsIcon} />
|
||||||
|
<SettingsList.ItemText>
|
||||||
|
<Trans>Sync Contacts</Trans>
|
||||||
|
</SettingsList.ItemText>
|
||||||
|
</SettingsList.Item>
|
||||||
|
<SettingsList.Item style={[a.pt_0]}>
|
||||||
|
<Text
|
||||||
|
style={[a.text_sm, t.atoms.text_contrast_medium, a.leading_snug]}>
|
||||||
|
<Trans>
|
||||||
|
Contacts from your address book will be uploaded to Bluesky on
|
||||||
|
an ongoing basis to help connect you with your friends and
|
||||||
|
personalize content, such as making suggestions for you and
|
||||||
|
others. Turning off syncing will not remove previously uploaded
|
||||||
|
contacts.{' '}
|
||||||
|
<InlineLinkText to="#" label="todo">
|
||||||
|
TODO: Add learn more link
|
||||||
|
</InlineLinkText>
|
||||||
|
</Trans>
|
||||||
|
</Text>
|
||||||
|
</SettingsList.Item>
|
||||||
|
</SettingsList.Container>
|
||||||
|
</Layout.Content>
|
||||||
|
</Layout.Screen>
|
||||||
|
)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user