diff options
Diffstat (limited to 'src/screens/Signup/StepInfo/Policies.tsx')
-rw-r--r-- | src/screens/Signup/StepInfo/Policies.tsx | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/src/screens/Signup/StepInfo/Policies.tsx b/src/screens/Signup/StepInfo/Policies.tsx new file mode 100644 index 000000000..8a656203f --- /dev/null +++ b/src/screens/Signup/StepInfo/Policies.tsx @@ -0,0 +1,97 @@ +import React from 'react' +import {View} from 'react-native' +import {ComAtprotoServerDescribeServer} from '@atproto/api' +import {msg, Trans} from '@lingui/macro' +import {useLingui} from '@lingui/react' + +import {atoms as a, useTheme} from '#/alf' +import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo' +import {InlineLink} from '#/components/Link' +import {Text} from '#/components/Typography' + +export const Policies = ({ + serviceDescription, + needsGuardian, + under13, +}: { + serviceDescription: ComAtprotoServerDescribeServer.OutputSchema + needsGuardian: boolean + under13: boolean +}) => { + const t = useTheme() + const {_} = useLingui() + + if (!serviceDescription) { + return <View /> + } + + const tos = validWebLink(serviceDescription.links?.termsOfService) + const pp = validWebLink(serviceDescription.links?.privacyPolicy) + + if (!tos && !pp) { + return ( + <View style={[a.flex_row, a.align_center, a.gap_xs]}> + <CircleInfo size="md" fill={t.atoms.text_contrast_low.color} /> + + <Text style={[t.atoms.text_contrast_medium]}> + <Trans> + This service has not provided terms of service or a privacy policy. + </Trans> + </Text> + </View> + ) + } + + const els = [] + if (tos) { + els.push( + <InlineLink key="tos" to={tos}> + {_(msg`Terms of Service`)} + </InlineLink>, + ) + } + if (pp) { + els.push( + <InlineLink key="pp" to={pp}> + {_(msg`Privacy Policy`)} + </InlineLink>, + ) + } + if (els.length === 2) { + els.splice( + 1, + 0, + <Text key="and" style={[t.atoms.text_contrast_medium]}> + {' '} + and{' '} + </Text>, + ) + } + + return ( + <View style={[a.gap_sm]}> + <Text style={[a.leading_snug, t.atoms.text_contrast_medium]}> + <Trans>By creating an account you agree to the {els}.</Trans> + </Text> + + {under13 ? ( + <Text style={[a.font_bold, a.leading_snug, t.atoms.text_contrast_high]}> + You must be 13 years of age or older to sign up. + </Text> + ) : needsGuardian ? ( + <Text style={[a.font_bold, a.leading_snug, t.atoms.text_contrast_high]}> + <Trans> + If you are not yet an adult according to the laws of your country, + your parent or legal guardian must read these Terms on your behalf. + </Trans> + </Text> + ) : undefined} + </View> + ) +} + +function validWebLink(url?: string): string | undefined { + return url && (url.startsWith('http://') || url.startsWith('https://')) + ? url + : undefined +} |