diff --git a/app/src/components/react-native-accordion-list-view/animations/toggleAnimation.tsx b/app/src/components/react-native-accordion-list-view/animations/toggleAnimation.tsx new file mode 100644 index 00000000..5b176222 --- /dev/null +++ b/app/src/components/react-native-accordion-list-view/animations/toggleAnimation.tsx @@ -0,0 +1,22 @@ +import { LayoutAnimation, LayoutAnimationConfig } from 'react-native' + +/** + * Toggle animation config + * @param animationDuration + * @return LayoutAnimationConfig + */ +export const toggleAnimation = (animationDuration = 300): LayoutAnimationConfig => { + return { + duration: animationDuration, + update: { + duration: animationDuration, + property: LayoutAnimation.Properties.scaleXY, + type: LayoutAnimation.Types.easeInEaseOut, + }, + delete: { + duration: animationDuration, + property: LayoutAnimation.Properties.opacity, + type: LayoutAnimation.Types.easeInEaseOut, + }, + } +} diff --git a/app/src/components/react-native-accordion-list-view/components/AccordionItem/index.tsx b/app/src/components/react-native-accordion-list-view/components/AccordionItem/index.tsx new file mode 100644 index 00000000..af8a6f1b --- /dev/null +++ b/app/src/components/react-native-accordion-list-view/components/AccordionItem/index.tsx @@ -0,0 +1,65 @@ +import React, { useEffect, useRef, useState } from 'react' +import { View, Animated, LayoutAnimation, I18nManager, Pressable } from 'react-native' +import MaterialIcons from 'react-native-vector-icons/MaterialIcons' + +import { toggleAnimation } from '../../animations/toggleAnimation' +import { AccordionItemProps } from '../../models/AccordionItem' + +import { styles } from './styles' + +const AccordionItem = ({ + customBody, + customTitle, + customIcon = undefined, + containerStyle = {}, + animationDuration = 300, + isRTL = false, + isOpen = false, + onPress = undefined, + testID, +}: AccordionItemProps) => { + const [showContent, setShowContent] = useState(isOpen) + const animationController = useRef(new Animated.Value(isOpen ? 1 : 0)).current + + const toggleListItem = () => { + const config = { + duration: animationDuration, + toValue: showContent ? 0 : 1, + useNativeDriver: true, + } + Animated.timing(animationController, config).start() + LayoutAnimation.configureNext(toggleAnimation(animationDuration)) + if (onPress) onPress(!showContent) + setShowContent(!showContent) + } + + useEffect(() => { + if (showContent && !isOpen) { + toggleListItem() + } + }, [isOpen]) + + const arrowTransform = animationController.interpolate({ + inputRange: [0, 1], + outputRange: ['0deg', isRTL ? '-90deg' : '90deg'], + }) + return ( + + toggleListItem()} testID={testID}> + + {(!isRTL || I18nManager.isRTL) && customTitle()} + + {!customIcon ? ( + + ) : ( + customIcon() + )} + + {isRTL && !I18nManager.isRTL && customTitle()} + + + {showContent && customBody()} + + ) +} +export default AccordionItem diff --git a/app/src/components/react-native-accordion-list-view/components/AccordionItem/styles.tsx b/app/src/components/react-native-accordion-list-view/components/AccordionItem/styles.tsx new file mode 100644 index 00000000..810069dd --- /dev/null +++ b/app/src/components/react-native-accordion-list-view/components/AccordionItem/styles.tsx @@ -0,0 +1,33 @@ +import { useTheme } from 'aries-bifold' +import { StyleSheet } from 'react-native' + +const { ColorPallet } = useTheme() +export const styles = StyleSheet.create({ + container: { + width: '100%', + borderRadius: 2, + marginBottom: '2%', + overflow: 'hidden', + + borderStyle: 'solid', + borderWidth: 1, + borderColor: ColorPallet.grayscale.lightGrey, + }, + title: { + fontSize: 16, + color: '#2d2d2d', + fontWeight: 'bold', + }, + body: { + padding: '4%', + paddingHorizontal: '2%', + paddingVertical: '3%', + }, + titleContainer: { + padding: '4%', + backgroundColor: ColorPallet.grayscale.lightGrey, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + }, +}) diff --git a/app/src/components/react-native-accordion-list-view/components/AccordionList/index.tsx b/app/src/components/react-native-accordion-list-view/components/AccordionList/index.tsx new file mode 100644 index 00000000..1137dbf6 --- /dev/null +++ b/app/src/components/react-native-accordion-list-view/components/AccordionList/index.tsx @@ -0,0 +1,40 @@ +import { testIdWithKey } from 'aries-bifold' +import React, { useState } from 'react' +import { FlatList } from 'react-native' + +import { AccordionListProps } from '../../models/AccordionList' +import AccordionItem from '../AccordionItem' + +const AccordionList = ({ + data, + customTitle, + customBody, + customIcon = undefined, + containerItemStyle = {}, + animationDuration = 300, + isRTL = false, + expandMultiple = false, + ...props +}: AccordionListProps) => { + const [currentlyOpen, setCurrentlyOpen] = useState(null) + const renderItem = ({ item, index }: { item: any, index: number }) => ( + customTitle(item)} + customBody={() => customBody(item)} + customIcon={customIcon} + animationDuration={animationDuration} + isRTL={isRTL} + isOpen={JSON.stringify(currentlyOpen) === JSON.stringify(item)} + onPress={(status) => { + if (status && !expandMultiple) { + setCurrentlyOpen(item) + } + }} + testID={testIdWithKey('AccordionItem'+index)} + /> + ) + return index.toString()} {...props} /> +} + +export default AccordionList diff --git a/app/src/components/react-native-accordion-list-view/index.tsx b/app/src/components/react-native-accordion-list-view/index.tsx new file mode 100644 index 00000000..14d0aca4 --- /dev/null +++ b/app/src/components/react-native-accordion-list-view/index.tsx @@ -0,0 +1,5 @@ +import AccordionItem from './components/AccordionItem' +import AccordionList from './components/AccordionList' + +// default export +export { AccordionItem, AccordionList } diff --git a/app/src/components/react-native-accordion-list-view/models/AccordionItem.tsx b/app/src/components/react-native-accordion-list-view/models/AccordionItem.tsx new file mode 100644 index 00000000..4e1b156d --- /dev/null +++ b/app/src/components/react-native-accordion-list-view/models/AccordionItem.tsx @@ -0,0 +1,47 @@ +import { ViewStyle } from 'react-native' + +export interface AccordionItemProps { + /** + * Function that returns a React element to display as Accordion title + */ + customTitle: () => JSX.Element + /** + * Function that returns a React element to display as Accordion body + */ + customBody: () => JSX.Element + /** + * An optional Function that returns a React element to display as Accordion icon + * default icon keyboard-arrow-left + */ + customIcon?: () => JSX.Element + /** + * An optional param to add custom container style + */ + containerStyle?: ViewStyle + /** + * An optional param to control Accordion animation duration + * default value is 300 + */ + animationDuration?: number + /** + * An optional param to support RTL layout + * default value is false + */ + isRTL?: boolean + /** + * An optional param to make accordion item already open + * default value is false + */ + isOpen?: boolean + /** + * An optional param to call a function when a click happen to accordion item + * default value is undefined + * @param {boolean} isOpen the current state of the accordion item + */ + onPress?: (isOpen: boolean) => void + /** + * An optional param to support test ID + * default value is '' + */ + testID?: string +} diff --git a/app/src/components/react-native-accordion-list-view/models/AccordionList.tsx b/app/src/components/react-native-accordion-list-view/models/AccordionList.tsx new file mode 100644 index 00000000..9630798d --- /dev/null +++ b/app/src/components/react-native-accordion-list-view/models/AccordionList.tsx @@ -0,0 +1,42 @@ +import { FlatListProps, ViewStyle } from 'react-native' + +export interface AccordionListProps extends Omit, 'data' | 'renderItem'> { + /** + * For simplicity, data is a plain array. + * If you want to use something else, like an immutable list + */ + data: any[] + /** + * Function that returns a React element to display as Accordion title + */ + customTitle: (item: any) => JSX.Element + /** + * Function that returns a React element to display as Accordion body + */ + customBody: (item: any) => JSX.Element + /** + * An optional Function that returns a React element to display as Accordion icon + * default icon keyboard-arrow-left + */ + customIcon?: () => JSX.Element + /** + * An optional param to add custom container item style + */ + containerItemStyle?: ViewStyle + /** + * An optional param to control Accordion animation duration + * default value is 300 + */ + animationDuration?: number + /** + * An optional param to support RTL layout + * default value is false + */ + isRTL?: boolean + + /** + * Allow more than one section to be expanded. + * default value is false + */ + expandMultiple?: boolean +} diff --git a/app/src/index.ts b/app/src/index.ts index e3477221..05a3f55a 100644 --- a/app/src/index.ts +++ b/app/src/index.ts @@ -19,11 +19,11 @@ import { PINValidationRules } from './constants' import { useNotifications } from './hooks/notifications' import en from './localization/en' import fr from './localization/fr' +import TermsStack from './navigators/TermsStack' import Developer from './screens/Developer' import { pages } from './screens/OnboardingPages' import PersonCredentialScreen from './screens/PersonCredential' import Splash from './screens/Splash' -import Terms from './screens/Terms' import { BCDispatchAction } from './store' import { defaultTheme as theme } from './theme' @@ -38,7 +38,7 @@ const configuration: ConfigurationContext = { ...defaultConfiguration, pages, splash: Splash, - terms: Terms, + terms: TermsStack, useBiometry: UseBiometry, credentialListHeaderRight: AddCredentialButton, credentialListOptions: AddCredentialSlider, diff --git a/app/src/localization/en/index.ts b/app/src/localization/en/index.ts index ee5dab12..80abefc9 100644 --- a/app/src/localization/en/index.ts +++ b/app/src/localization/en/index.ts @@ -110,12 +110,84 @@ const translation = { StatusMessages: { InitAgent: 'Initializing agent ..', }, - Terms: { - TermsOfService: 'Terms of Service', - TermsOfServiceText: - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus vel consectetur diam. Nunc sit amet elit est. Praesent libero elit, consectetur dapibus diam non, facilisis euismod velit. Etiam a ligula eget leo elementum tincidunt. Fusce et lorem turpis. Nunc tempus nisl consectetur eros vehicula venenatis. Suspendisse potenti. Aenean vitae aliquet augue. Maecenas lacinia nunc vitae blandit hendrerit. Sed congue risus quis magna convallis sollicitudin. Integer in ante vel orci ornare porta quis id libero. Proin mollis urna nec lectus fringilla, sit amet aliquam urna fringilla. Praesent pellentesque non augue et gravida. Donec congue urna ac massa consequat, lacinia condimentum dolor blandit. Nam ultrices tellus at risus dignissim, quis cursus mauris pellentesque. Donec at scelerisque ipsum. Praesent eu massa at tellus cursus ornare. Fusce vel faucibus dolor. Etiam blandit velit sed velit tempus feugiat. Donec condimentum pretium suscipit. Sed suscipit, leo molestie tempus maximus, turpis enim hendrerit nibh, semper sagittis turpis velit sed nisl. Aliquam eu ultrices velit. Aenean tristique mauris justo, eu commodo quam semper non. Curabitur ultricies auctor mi eu tempus. Sed bibendum eros sed neque semper fermentum. Nullam porta tortor ut ante congue molestie. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur sit amet aliquam nunc, malesuada auctor quam. Pellentesque vel lobortis risus, volutpat suscipit velit. Aenean ut erat sed metus interdum mattis. Nam consectetur ante eu felis rhoncus, et volutpat dolor tincidunt. Vivamus sit amet feugiat mi. Proin in dui ac metus vehicula fringilla eget id mauris. Maecenas et elit venenatis dolor pulvinar pulvinar in et leo. Aliquam scelerisque viverra sapien at bibendum. Curabitur et libero nec enim convallis porttitor sed a libero. In hac habitasse platea dictumst. Integer dignissim velit eu pharetra ultricies. Vestibulum at velit hendrerit, pretium purus eget, lobortis tellus. Maecenas non erat ut lacus scelerisque luctus et et tellus.', - IAgree: 'I Agree', - Attestation: 'I have read, understand and accept the terms of this EULA.', + TermsV2: { + Consent: { + title: 'Consent', + body: 'Please read the general conditions for the use of the digital portfolio of the Government of Quebec.', + PersonalUse: { + title: 'Exclusive Personal Use', + body: + 'You are responsible for the confidentiality of your digital portfolio. You must use it exclusively for your own purposes. Do not divulge your access code to anyone and protect your mobile phone adequately.\n' + + 'You will find recommendations in the Security section.', + subsection: { + title: 'Acceptable Use', + body: + 'In connection with your use of the Licensed Application, you shall not take any action that may jeopardise the security, integrity and/or availability of the Licensed Application, including, without limitation: \n' + + '\n' + + 'Using the Licensed Application for illegal or improper purposes; \n' + + '\n' + + 'Tampering with any part of the Licensed Application; \n' + + '\n' + + 'Using the Licensed Application to transmit any virus or other harmful or destructive computer code, files or programs, or to conduct hacking and/or intrusive activities; \n' + + '\n' + + 'Attempt to circumvent or subvert any security measures associated with the Licensed Application; \n' + + '\n' + + 'Take any action that could reasonably be construed to adversely affect other users of the Licensed Application; \n' + + '\n' + + 'Where \n' + + '\n' + + 'Remove or alter any proprietary symbols or notices, including any copyright, trademark or logo notices, displayed in connection with the Licensed Application. ', + }, + }, + IdentityTheft: { + title: 'In case of identity theft', + body: 'If you suspect that the security of your wallet and its contents has been compromised, you must contact *the Identity Quebec Customer Relations Centre* immediately. You will not be held responsible for identity theft as long as you comply with these terms and conditions', + subsection: { + title: 'Indemnification', + body: + 'You agree to indemnify, defend and hold harmless the Province and all of its respective officers, employees and agents from and against any and all claims, demands, obligations, losses, liabilities, costs or debts and expenses (including, without limitation, reasonable legal fees).\n' + + '\n' + + ' Arising out of:\n' + + '\n' + + ' (a) your use of the Licensed Application;\n' + + '\n' + + ' Where\n' + + '\n' + + ' (b) your breach of any provision of this EULA', + }, + }, + Privacy: { + title: 'Protection and privacy', + body: "The Government of Quebec is concerned about the protection of your privacy and the personal and confidential information contained in this application. You are responsible for consulting the 'Privacy Policy' to learn about the Government of Quebec's practices in this regard", + subsection: { + title: 'Personal Information Protection', + body: + 'If you visit the website of the application licensed to\n' + + '\n' + + 'https://www.quebec.ca/gouvernement/ministere/cybersecurite-numerique,\n' + + '\n' + + 'including accessing the Help Function for the licensed application or related content at https://www.quebec.ca/gouvernement/ministere/cybersecurite-numerique, certain information will be provided to you in accordance with the Province\'s Privacy Statement for Government Websites. Certain information is also collected as part of the licence application as set out in the Quebec Wallet App Privacy Policy (the "Privacy Policy"), which is incorporated by reference into and forms part of this EULA. You consent to the collection by the Licensed App of such information which, together with your Content, is stored locally on your device and is not accessible to the Province, except in cases where you choose to provide information to the Province as set forth in the Privacy Policy. Any information you provide to the Province that is "personal information", as defined in the Quebec Freedom of Information and Protection of Privacy Act ("the Act"), is collected by the Province pursuant to section 26c of the Act, for the purposes set out in the Privacy Policy. Any questions regarding the collection of this information may be directed to the contact person identified in Section 11. The consents you have provided pursuant to this section will continue until you revoke them in writing to the contact person identified in section 11, at which time this EULA will terminate immediately in accordance with section 9.', + }, + }, + AppAccess: { + title: 'Right of access to the application', + body: 'The Government of Quebec may suspend access to this application if you fail to comply with these terms of use. It may also do so for these terms of use. It may also do so for security or administrative purposes', + subsection: { + title: 'Limitation of liability', + body: + 'To the extent permitted by applicable law, in no event shall the Province be liable to any person or entity for any direct, indirect, special, incidental or consequential loss, claim, injury or damage, or for any other loss, claim, injury or damage. \n' + + '\n' + + 'If foreseeable or unforeseeable (including claims for limitation of damages for loss of profits or business opportunities, use or misuse of, or inability to use, the Licensed Application, interruptions, deletion or corruption of files, loss of programs or information, errors, defects or delays) arising out of or in any way connected with your use of the Licensed Application, whether based on contract, tort, strict liability or any other legal theory. The preceding sentence shall apply even if the Province has been expressly advised of the possibility of such loss, claim, injury or damage. The parties acknowledge that Apple is not responsible for: \n' + + '\n' + + '(a) dealing with any claim you or any third party may have in connection with the Authorized Application; \n' + + '\n' + + 'b) your possession and/or use of the Permitted Application.', + }, + }, + More: { + body: 'Learn more about *these terms and conditions(*)*', + }, + }, }, PinCreate: { UserAuthenticationPin: 'User authentication pin', diff --git a/app/src/localization/fr/index.ts b/app/src/localization/fr/index.ts index 6966eac0..8514bb52 100644 --- a/app/src/localization/fr/index.ts +++ b/app/src/localization/fr/index.ts @@ -123,13 +123,84 @@ const translation = { StatusMessages: { InitAgent: "Initialisation de l'agent ...", }, - Terms: { - TermsOfService: "Conditions d'utilisation", - TermsOfServiceText: - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus vel consectetur diam. Nunc sit amet elit est. Praesent libero elit, consectetur dapibus diam non, facilisis euismod velit. Etiam a ligula eget leo elementum tincidunt. Fusce et lorem turpis. Nunc tempus nisl consectetur eros vehicula venenatis. Suspendisse potenti. Aenean vitae aliquet augue. Maecenas lacinia nunc vitae blandit hendrerit. Sed congue risus quis magna convallis sollicitudin. Integer in ante vel orci ornare porta quis id libero. Proin mollis urna nec lectus fringilla, sit amet aliquam urna fringilla. Praesent pellentesque non augue et gravida. Donec congue urna ac massa consequat, lacinia condimentum dolor blandit. Nam ultrices tellus at risus dignissim, quis cursus mauris pellentesque. Donec at scelerisque ipsum. Praesent eu massa at tellus cursus ornare. Fusce vel faucibus dolor. Etiam blandit velit sed velit tempus feugiat. Donec condimentum pretium suscipit. Sed suscipit, leo molestie tempus maximus, turpis enim hendrerit nibh, semper sagittis turpis velit sed nisl. Aliquam eu ultrices velit. Aenean tristique mauris justo, eu commodo quam semper non. Curabitur ultricies auctor mi eu tempus. Sed bibendum eros sed neque semper fermentum. Nullam porta tortor ut ante congue molestie. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur sit amet aliquam nunc, malesuada auctor quam. Pellentesque vel lobortis risus, volutpat suscipit velit. Aenean ut erat sed metus interdum mattis. Nam consectetur ante eu felis rhoncus, et volutpat dolor tincidunt. Vivamus sit amet feugiat mi. Proin in dui ac metus vehicula fringilla eget id mauris. Maecenas et elit venenatis dolor pulvinar pulvinar in et leo. Aliquam scelerisque viverra sapien at bibendum. Curabitur et libero nec enim convallis porttitor sed a libero. In hac habitasse platea dictumst. Integer dignissim velit eu pharetra ultricies. Vestibulum at velit hendrerit, pretium purus eget, lobortis tellus. Maecenas non erat ut lacus scelerisque luctus et et tellus.', - IAgree: "J'accepte", - Attestation: "J'ai lu, je comprends et j'accepte les conditions.", + TermsV2: { + Consent: { + title: 'Consentement', + body: "Veuillez prendre connaissance des conditions générales liées à l'utilisation du portefeuille numérique du gouvernement du Québec.", + PersonalUse: { + title: 'Usage personnel exclusif', + body: "Vous êtes responsable de la confidentialité de votre portefeuille numérique. Vous devez le réaliser à votre usage exclusif. Ne divulguez à personne votre code d'accès et protégez adéquatement votre téléphone mobile. Des recommandations vous sont présentées dans la rubrique *Sécurité* .", + subsection: { + title: 'Utilisation acceptable', + body: + "Dans le cadre de votre utilisation de l'Application sous Licence, vous ne devez prendre aucune mesure susceptible de mettre en péril la sécurité, l'intégrité et/ou la disponibilité de l'Application sous Licence, y compris, sans s'y limiter :\n" + + '\n' + + "L’utilisation de l'Application sous Licence à des fins illégales ou inappropriées ;\n" + + '\n' + + "L’altération de toute partie de l'Application sous Licence ;\n" + + '\n' + + "L’utilisation de l'Application sous Licence pour transmettre tout virus ou tout autre code informatique, fichier ou programme nuisible ou destructeur, ou pour mener des activités de piratage et/ou d'intrusion ;\n" + + '\n' + + "Tenter de contourner ou de subvertir toute mesure de sécurité associée à l'Application sous Licence ;\n" + + '\n' + + "Entreprendre toute action qui pourrait raisonnablement être interprétée comme susceptible d'affecter négativement les autres utilisateurs de l'Application sous Licence ;\n" + + '\n' + + 'Où\n' + + '\n' + + "Supprimer ou modifier tout symbole ou avis de propriété, y compris tout avis de droit d'auteur, marque ou logo, affiché en relation avec l'Application sous Licence.", + }, + }, + IdentityTheft: { + title: "En cas de vol d'identité", + body: "Si vous soupçonnez que la Sécurité de votre portefeuille et de son contenu a été compromise , vous devez communiquer immédiatement avec *le Centre de relations de la clientèle d'identité Québec*. Vous ne serez pas tenu responsable en cas de vol d'identité dans la mesure ou vous respectez les présentes conditions.", + subsection: { + title: 'Indemnisation', + body: + 'Vous acceptez d’indemniser, de défendre et de dégager de toute responsabilité la province et tous ses fonctionnaires, employés et agents respectifs à l’égard de toutes les réclamations, demandes, obligations, pertes, passifs, coûts ou dettes et dépenses (y compris, sans s’y limiter, les frais juridiques raisonnables).\n' + + '\n' + + ' Découlant :\n' + + '\n' + + ' (a) de votre utilisation de l’Application sous licence ;\n' + + '\n' + + ' Où\n' + + '\n' + + ' (b) de votre violation de toute disposition du présent CLUF', + }, + }, + Privacy: { + title: 'Protection et vie privée', + body: 'Le gouvernement du Québec se préoccupe de la protection de votre vie privée et des renseignements personnels et confidentiels qui sont contenus dans cette application. Vous avez la responsabilité de consulter *la Politique de confidentialité pour connaitre les pratiques du gouvernements du Québec à ce sujet.*', + subsection: { + title: 'Protection of personal information', + body: + 'Si vous visitez le site Web de l’application sous licence à\n' + + '\n' + + 'https://www.quebec.ca/gouvernement/ministere/cybersecurite-numerique,\n' + + '\n' + + "Y compris pour accéder au Fonction d’aide pour l’application sous licence ou le contenu connexe à https://www.quebec.ca/gouvernement/ministere/cybersecurite-numerique, certaines informations vous seront fournies conformément à la Déclaration de confidentialité de la province pour les sites Web du gouvernement. Certains renseignements sont également recueillis dans le cadre de la demande de permis, comme il est indiqué dans la Politique de confidentialité de Quebec Wallet App (la « Politique de confidentialité »), qui est incorporée par renvoi dans le présent CLUF et en fait partie. Vous consentez à la collecte par l’Application sous licence de ces informations qui, avec votre Contenu, sont stockées localement sur votre appareil et n’est pas accessible à la province, sauf dans les cas où vous choisissez de fournir des renseignements à la province, comme il est indiqué dans la politique de confidentialité. Tous les renseignements que vous fournissez à la province qui sont des « renseignements personnels », au sens de la Loi sur l’accès à l’information et la protection de la vie privée du Québec (« la Loi »), sont recueillis par la province en vertu de l’alinéa 26c la Loi, aux fins énoncées dans la Politique de confidentialité. Toute question concernant la collecte de ces renseignements peut être adressée à la personne-ressource indiquée à l'article 11. Les consentements que vous avez fournis conformément au présent article seront maintenus jusqu'à ce que vous les révoquiez par écrit à la personne-ressource mentionnée à l'article 11, auquel cas le présent ALUF prendra fin immédiatement, conformément à l'article 9.", + }, + }, + AppAccess: { + title: "Droit d'accès à l'application", + body: "Le gouvernement du Québec peut suspendre l'accès à cette application si vous ne respectez pas les présentes conditions d'utilisation . Il peut également le faire pour les présentes conditions d'utilisation. Il peut également le faire pour des motifs de sécurité ou à des fins administratives.", + subsection: { + title: 'Limitations', + body: + 'Dans la mesure où la loi applicable le permet, la Province ne sera en aucun cas en aucun cas, la Province ne sera responsable envers toute personne ou entité de toute perte, réclamation, blessure ou dommage direct, indirect, spécial, accessoire ou consécutif, ou de toute autre perte, réclamation, blessure ou dommage.\n' + + '\n' + + 'Si prévisible ou imprévisible (y compris les demandes de limitation de dommages-intérêts pour perte de profits ou occasions d’affaires, l’utilisation ou l’utilisation abusive ou l’impossibilité d’utiliser , l’application sous licence , les interruptions , la suppression ou la corruption de fichiers , la perte de programmes ou d’informations , les erreurs, les défauts ou les retards ) découlant de votre utilisation de l’application sous licence ou y étant lié de quelque façon que ce soit, qu’il soit fondé sur un contrat, un délit, une responsabilité stricte ou toute autre théorie juridique. La phrase précédente s’appliquera même si la province a été expressément informée de la possibilité d’une telle perte, réclamation, blessure ou dommage. Les parties reconnaissent qu’Apple n’est pas responsable :\n' + + '\n' + + 'a) traiter toute réclamation que vous ou un tiers de quelque nature que ce soit relativement à la demande autorisée;\n' + + '\n' + + 'b) votre possession et/ou utilisation de la demande de permis.', + }, + }, + More: { + body: 'En savoir plus sur *ces conditions générales(*)*', + }, + }, }, + PinCreate: { UserAuthenticationPin: "NIP d'authentification de l'utilisateur", PinMustBe6DigitsInLength: 'Le NIP doit comporter 6 chiffres', diff --git a/app/src/navigators/TermsStack.tsx b/app/src/navigators/TermsStack.tsx new file mode 100644 index 00000000..fcceb87e --- /dev/null +++ b/app/src/navigators/TermsStack.tsx @@ -0,0 +1,25 @@ +import { createStackNavigator } from '@react-navigation/stack' +import { useTheme } from 'aries-bifold/App/contexts/theme' +import { createDefaultStackOptions } from 'aries-bifold/App/navigators/defaultStackOptions' +import React from 'react' + +import Terms from '../screens/Terms' + +import { Screens, TermsStackParams } from './navigators' + +const TermsStack: React.FC = () => { + const StackTerms = createStackNavigator() + const theme = useTheme() + const defaultStackOptions = createDefaultStackOptions(theme) + + return ( + + + + ) +} + +export default TermsStack diff --git a/app/src/navigators/navigators.ts b/app/src/navigators/navigators.ts new file mode 100644 index 00000000..fd0d9467 --- /dev/null +++ b/app/src/navigators/navigators.ts @@ -0,0 +1,9 @@ +export enum Screens { + TermsAndConditions = 'TermsAndConditions', + Legal = 'Legal', +} + +export type TermsStackParams = { + [Screens.TermsAndConditions]: undefined + [Screens.Legal]: undefined +} diff --git a/app/src/screens/Terms.tsx b/app/src/screens/Terms.tsx index f30e520f..e2cdb34c 100644 --- a/app/src/screens/Terms.tsx +++ b/app/src/screens/Terms.tsx @@ -15,7 +15,8 @@ import { import React, { useCallback, useState } from 'react' import { useTranslation } from 'react-i18next' import { ScrollView, StyleSheet, Text, View, Linking } from 'react-native' -import { SafeAreaView } from 'react-native-safe-area-context' + +import { AccordionItem } from '../components/react-native-accordion-list-view' const appleTermsUrl = 'https://www.apple.com/legal/internet-services/itunes/us/terms.html' const bcWalletHomeUrl = 'https://www2.gov.bc.ca/gov/content/governments/government-id/bc-wallet' @@ -32,7 +33,7 @@ const Terms: React.FC = () => { const style = StyleSheet.create({ container: { backgroundColor: ColorPallet.brand.primaryBackground, - padding: 20, + paddingHorizontal: 20, }, bodyText: { ...TextTheme.normal, @@ -42,6 +43,9 @@ const Terms: React.FC = () => { ...TextTheme.normal, textDecorationLine: 'underline', }, + title: { + ...TextTheme.title, + }, controlsContainer: { marginTop: 'auto', marginBottom: 20, @@ -94,370 +98,46 @@ const Terms: React.FC = () => { } return ( - - - - Veuillez accepter les termes et conditions ci-dessous avant d'utiliser cette application. - - - L'application du portefeuille québécois ("application sous licence") vous permet de stocker vos justificatifs - vérifiables, qui sont des justificatifs numériques émis par des émetteurs tiers que vous pouvez utiliser pour - prouver votre identité. numériques émis par des émetteurs tiers que vous pouvez utiliser pour prouver quelque - chose quelque chose à votre sujet en présentant ces justificatifs à une autre partie qui partie qui a besoin - de vérifier ces justificatifs. Le présent contrat de licence de l'utilisateur final utilisateur final ("CLUF") - définit les termes et conditions qui s'appliquent à vous lorsque vous téléchargez et/ou utilisez le BC - Walters. lorsque vous téléchargez et/ou utilisez l'application QC Wallet. Ce CLUF est un accord légal accord - légal entre vous, en tant qu'utilisateur final de l'application sous licence (" vous " ou " vous ") et Sa - Majesté la Reine du chef de la province de la Colombie-Britannique (la " province "). de la - Colombie-Britannique (la "Province"). Vous pouvez accéder à l'application sous licence licence sur un appareil - mobile Google ou Apple. Certains des termes qui suivent font référence à Google ou à Apple, selon le cas, et - ces références ne s'appliquent que dans la mesure où vous accédez à l'Application sous l'Application sous - Licence par le biais de cette plate-forme particulière. En indiquant que vous acceptez ce CLUF, et en - contrepartie de l'utilisation de l'Application sous l'Application sous licence, vous acceptez ce qui suit. + + + {t('TermsV2.Consent.body')} + {t('TermsV2.Consent.title')} + {t('TermsV2.Consent.body')} + + {t('TermsV2.Consent.PersonalUse.title')} + + {t('TermsV2.Consent.PersonalUse.body')} - - 1 - - Parties. -  Les parties de l'EULA sont vous et la Province (collectivement, les " Parties "). Les parties - reconnaissent que : (a) le présent EULA est conclu entre les parties seulement, et non avec Apple Inc. Inc. - (" Apple ") ; et (b) que la Province, et non Apple, est uniquement responsable de l'application sous licence - et de son contenu. - - - - - 2 - - Capacité d'acceptation de l'EULA. -  Pour accepter les termes et conditions du présent EULA et pour télécharger et/ou utiliser - l'Application sous licence, vous devez être, et vous déclarez et garantissez que vous êtes : (a) avoir au - moins dix-neuf (19) ans ; ou (a) au moins dix-neuf (19) ans ; ou (b) si vous avez moins de 19 ans, vous avez - obtenu l'accord de vos votre parent ou tuteur d'accepter le présent accord en votre nom, auquel cas votre - parent ou tuteur est responsable de l'acceptation du présent accord. auquel cas votre parent ou tuteur est - responsable de votre utilisation de l'Application sous licence. Si vous ne remplissez pas ces conditions, - vous ne devez pas accéder à l'Application sous licence ni l'utiliser. - - - - - 3 - - Protection d'appareil. -  Vous êtes responsable de la sécurité de tout dispositif que vous utilisez en en relation avec - l'Application sous licence, y compris, sans l'utilisation d'un dispositif de protection approprié (par - exemple, un mot de passe/code complexe ou des informations biométriques) et de préserver la confidentialité - de la protection de votre appareil. protection de votre appareil, ainsi que pour l'utilisation de - protections de sécurité protections de sécurité appropriées (par exemple, l'utilisation d'un logiciel - antivirus/anti-spyware anti-virus/anti-spyware à jour et la dernière version du système d'exploitation, - limiter les mot de passe et le verrouillage de l'appareil après une courte période d'inactivité) en relation - avec votre appareil. - - - - 4 - - Accès au dispositif mobile. -  Vous ne devez pas autoriser un autre individu ou une autre entité à accéder à à votre appareil dans le - but de permettre à cet individu ou à cette entité d'accéder ou d'utiliser l'Application sous licence en - votre nom. - - - - 5 - - Propriété de l'application. -  L'Application sous Licence, y compris, sans limitation les marques, noms commerciaux, logos, noms de - domaine, images, graphiques, éléments d'interface utilisateur graphique et les dessins, sous quelque forme - ou support que ce soit sous quelque forme ou support que ce soit, appartiennent à la Province ou à ses - concédants de licence et sont licence et sont protégés par des droits d'auteur, des brevets, des marques de - commerce et d'autres les droits de propriété intellectuelle. - - - - 6 - - Propriété du contenu. -  Les informations et travaux mis à disposition, affichés ou transmis par Vous en relation avec - l'Application sous Licence, y compris vos informations d'identification vérifiables (collectivement, le - "Contenu") sont votre propriété et sont protégés par les droits d'auteur, les brevets, les marques de - commerce et autres lois protégeant les droits de propriété intellectuelle. - - - - 7 - - Tiers bénéficiaire. -  Les Parties reconnaissent et acceptent que : (a) Apple, et les filiales d'Apple filiales d'Apple, sont - des tiers bénéficiaires du présent CLUF ; et (b) dès que vous aurez accepté les termes et conditions du - présent CLUF, Apple Apple aura le droit (et sera réputée avoir accepté le droit) de faire appliquer le CLUF - à votre encontre en tant que tiers bénéficiaire thereof. - - - - 8 - - Licence. -   La Province vous accorde par la présente une licence non exclusive, libre de droits, non transférable - et, sous réserve de l'article 9 du présent contrat de licence perpétuelle pour exécuter, utiliser et - afficher l'application sous licence application sous licence sur des produits de marque Google ou Apple, à - condition que que l'utilisation sur des produits de marque Apple doit être des produits que vous que vous - possédez ou contrôlez, et dans le respect des règles d'utilisation énoncées dans les dans les conditions - générales d'Apple Media Services situées à l'adresse suivante - openLink(appleTermsUrl)}> - https://www.apple.com/legal/internet-services/itunes/us/terms.html - - {'\n'} - (ou toute autre URL désignée par Apple) (les "Conditions de l'App Store"), telles qu'elles peuvent être - modifiées par Apple de temps à autre (la " Licence "). Sauf dans les cas prévus par les Conditions de l'App - Store (qui permettent aux l'accès, l'acquisition et l'utilisation des Applications sous Licence par d'autres - comptes d'autres comptes associés à l'acheteur par le biais du partage de la famille ou de d'achat en - volume), vous n'êtes pas autorisé à distribuer ou à rendre l'application sous licence licence sur un réseau - où elle pourrait être utilisée par plusieurs appareils en même temps. en même temps. Si vous vendez votre - produit de marque Apple à un tiers, vous devez tiers, vous devez d'abord retirer l'Application sous Licence - de ce produit de produit de marque Apple. Pour plus de certitude, vous ne pouvez pas : (a) transférer, - redistribuer ou concéder en sous-licence l'Application sous Licence ; ou (b) copier (sauf dans les cas - autorisés par la présente Licence et les Règles d'Utilisation), faire de l'ingénierie inverse, désassembler, - tenter de dériver le code source, modifier, ou créer des œuvres dérivées de l'Application sous Licence, de - ses l'Application sous Licence, de ses mises à jour, de ses mises à niveau ou de toute partie de - l'Application sous Licence (à l'exception de ce qui suit et uniquement dans la mesure où toute restriction - précédente est interdite par la loi applicable ou dans la mesure où cela peut être autorisé par les - conditions de licence régissant l'utilisation de tout composant à source ouverte inclus dans l'Application - sous Licence). - - - - 9 - - Terminaison. -  La licence sera automatiquement résiliée dans le cas où vous ne respectez pas l'un des termes et - conditions du présent CLUF ou si l'une quelconque de vos déclarations ou garanties est ou devient inexactes - ou mensongères. La Province se réserve également le droit de résilier la présente licence pour quelque - raison que ce soit, à sa seule discrétion. À l'adresse En cas de résiliation du présent permis, vous devez : - (a) cesser immédiatement cesser immédiatement d'utiliser l'application sous licence ; et (b) supprimer ou - détruire toutes les copies de l'Application sous Licence en votre possession ou sous votre contrôle. - contrôle. - - - - - 10 - - - Utilisation acceptable. -  Vous ne devez prendre aucune mesure en relation avec votre utilisation de l'Application sous licence - qui mettrait en péril la sécurité, l'intégrité intégrité et/ou la disponibilité de l'Application sous - Licence, y compris, sans limitation : - - - - (a) l'utilisation de l'Application sous Licence à des fins illégales ou inappropriées. ou inapproprié; - - - (b) l'altération de toute partie de l'Application sous licence ; - - - (c) l'utilisation de l'Application sous Licence pour transmettre tout virus ou autre code informatique, - fichier ou programme nuisible ou destructeur ou pour mener des activités de piratage et/ou d'intrusion ; - - - (d) tenter de contourner ou de subvertir toute mesure de sécurité associée à l'application sous licence ; - - - (e) prendre toute mesure qui pourrait raisonnablement être interprétée comme susceptible de d'affecter - négativement les autres utilisateurs de l'Application sous Licence ; ou - - - (f) la suppression ou l'altération de tout symbole ou avis de propriété, y compris tout avis de droit - d'auteur, marque de commerce ou logo, affiché en en relation avec l'Application sous licence. - - - - - 11 - - Maintenance et soutien. -  Les parties reconnaissent que : (a) le gouvernement provincial peut, a ? son à sa seule discrétion, - assurer la maintenance et le soutien de l'application licence, y compris le dépannage, les mises à jour et - les modifications (les " services de soutien "). (les " Services de soutien ") ; (b) la Province est seule - responsable de la fourniture des (b) la Province est seule responsable de la fourniture des Services de - support, le cas échéant ; et (c) Apple n'a aucune obligation de fournir des services d'entretien et de - d'entretien et de soutien en ce qui concerne l'application sous licence. Toutes les questions concernant les - Services d'assistance, et toutes les questions d'ordre général générales concernant l'Application sous - Licence, doivent être adressées à : Produit Propriétaire du produit, QC Wallet. - - - - 12 - - - Pas de garantie. -  L'Application sous licence vous est fournie " telle quelle ", et la Province décline toute - représentation, garantie, condition, obligations et responsabilités de toute nature, qu'elles soient - expresses ou expresse ou implicite, en relation avec l'application sous licence, notamment sans - limitation, les garanties implicites en ce qui concerne la qualité marchande, la qualité satisfaisante, - l'aptitude à un usage particulier particulier et de non-violation. Sans limiter la nature générale - générale de la phrase précédente, la Province ne déclare ni ne garantit que garantie que : - - (a) l'application sous licence sera disponible ; - - (b) votre utilisation de l'Application sous licence sera opportune, ininterrompue ou sans erreur ; - - - (c) toute erreur dans l'application sous licence sera corrigée ; ou - - - (d) l'Application sous licence répondra à vos attentes et à vos exigences. - - - Les Parties reconnaissent qu'Apple n'a aucune obligation de garantie en ce qui concerne l'Application sous - Licence. - - - + {t('TermsV2.Consent.PersonalUse.subsection.title')}} + customBody={() => ( + {t('TermsV2.Consent.PersonalUse.subsection.body')} + )} + > - - 13 - - - Limitation de la responsabilité. -  Dans la mesure maximale permise par la loi applicable, en aucun cas en aucun cas, la Province ne - sera responsable envers toute personne ou entité pour les pertes, réclamations, blessures ou dommages - directs, indirects, spéciaux d'autres pertes, réclamations, blessures ou dommages, qu'ils soient - prévisibles ou prévisibles ou imprévisibles (y compris, sans s'y limiter, les demandes de dommages et - intérêts pour perte de profits ou d'opportunités commerciales, l'utilisation ou la mauvaise l'incapacité - d'utiliser l'Application sous licence, les interruptions, suppression ou corruption de fichiers, perte de - programmes ou d'informations, d'informations, d'erreurs, de défauts ou de retards) découlant de ou liés de - quelque manière que ce soit l'utilisation de l'Application sous Licence et qu'elle soit fondée sur un - contrat contrat, un délit, une responsabilité stricte ou toute autre théorie juridique. La phrase - précédente La phrase précédente s'appliquera même si la Province a été spécifiquement informée de la - possibilité de telles pertes, réclamations, blessures ou dommages, préjudice ou dommage. - - - Les Parties reconnaissent qu'Apple n'est pas responsable de : (a) de traiter toute réclamation de votre - part ou de celle d'un tiers de quelque nature que ce soit de quelque nature que ce soit, relatives à - l'Application sous Licence ; ou (b) votre possession et/ou l'utilisation de l'Application sous Licence. - - - - - 14 - - Revendications en matière de propriété intellectuelle. -  L?application sous licence est la propri?t ? de la province ou est utilis?e par la province sous - licence. la province sous licence. Les parties reconnaissent que, dans le cas tiers qui prétendrait que - l'Application sous licence ou votre possession et/ou l'Application sous licence ou votre possession et/ou - utilisation de l'Application sous droits de propriété intellectuelle de ce tiers, la Province, et non pas - Apple, est seule responsable de l'enquête, de la défense, du règlement et de l'acquittement d'une telle - réclamation, défense, du règlement et de l'acquittement d'une telle réclamation. Dans le cas d'une telle - réclamation, la Province se réserve le droit de remplacer toute partie de l'application sous l'application - sous licence qui violerait les droits de propriété intellectuelle d'un tiers. droits de propriété - intellectuelle d'un tiers. - - - - 15 - - Indemnisation. -  YVous acceptez d'indemniser, de défendre et de dégager de toute responsabilité la Province et tous ses - préposés, employés et mandataires respectifs contre de toutes les réclamations, demandes, obligations, - pertes, responsabilités, coûts ou coûts, dettes et dépenses (y compris, mais sans s'y limiter, les frais - juridiques frais juridiques raisonnables) découlant : (a) de votre utilisation de l'application sous licence - ; ou (b) de votre violation de toute disposition du présent accord. de votre violation de toute disposition - du présent EULA. - - - - 16 - - Vie privée. -  Vous consentez à la collecte par l'Application sous licence d'une confirmation par votre appareil - qu'il a été déverrouillé en utilisant les fonctions de sécurité spécifiques à votre appareil. Cette - information, ainsi que votre contenu, sont stockées localement sur votre appareil et ne sont pas accessibles - à la province par le biais de l'application sous licence. la Province par l'intermédiaire de l'Application - sous licence. Les consentements fournis Les consentements que vous donnez dans le présent article seront - maintenus jusqu'à ce que vous les que vous ne les révoquiez par écrit aux coordonnées indiquées à l'article - 11. l'article 11, auquel cas le présent contrat de licence d'utilisateur prendra fin immédiatement - conformément à l'article 9. - - + {t('TermsV2.Consent.IdentityTheft.title')} + + {t('TermsV2.Consent.IdentityTheft.body')} + + {t('TermsV2.Consent.IdentityTheft.subsection.title')}} + customBody={() => ( + {t('TermsV2.Consent.IdentityTheft.subsection.body')} + )} + > - - 17 - - Sites Web de tiers. -  Vous reconnaissez que : (a) l'Application sous licence peut inclure liens vers des sites web de tiers - ; (b) lorsque vous vous connectez à un site web de tiers site web d'un tiers, vous pouvez être soumis aux - conditions d'utilisation et/ou à la politique de conditions d'utilisation et/ou à la politique de - confidentialité, le cas échéant, de ce site web tiers ; et (c) la Province ne cautionne pas le contenu des - sites Web de tiers et n'est pas et n'est pas responsable des conditions d'utilisation, des politiques de - confidentialité, des pratiques ou du contenu du site Web d'un tiers. - - + {t('TermsV2.Consent.Privacy.title')} + + {t('TermsV2.Consent.Privacy.body')} + + {t('TermsV2.Consent.Privacy.subsection.title')}} + customBody={() => ( + {t('TermsV2.Consent.Privacy.subsection.body')} + )} + > - - 18 - - Conditions d'accord avec des tiers. -  Vous pouvez avoir besoin de l'utilisation de services tiers pour d'utiliser l'Application sous licence - (y compris les services de données sans fil), et vous acceptez de vous conformer à toutes les conditions de - service applicables aux tiers tiers qui s'appliquent à vous lorsque vous utilisez l'Application sous - licence. - - - - 19 - - Conformité légale. -  Vous déclarez et garantissez que : (a) vous n'êtes pas situé dans une région qui fait l'objet d'un - embargo du gouvernement américain ou qui a été ou qui a été désignée par le gouvernement américain comme une - région " soutenant le terrorisme " ; et (b) que vous ne figurez pas sur une liste de parties interdites ou - restreintes du parties interdites ou restreintes. - - - - 20 - - Modifications de l'application sous licence et/ou des conditions. -  La Province peut à tout moment, à sa seule discrétion et sans préavis direct sans préavis direct : (a) - interrompre l'application sous licence ; ou licence ; ou (b) apporter des modifications à l'application sous - licence et/ou au présent CLUF. le présent CLUF. En continuant à utiliser l'Application sous Licence, vous - serez licence, vous serez considéré comme ayant accepté toutes les modifications apportées au EULA. - - - - 21 - - Général. -  Le présent EULA et, le cas échéant, les conditions supplémentaires référencées dans les présentes - conditions, constituent l'intégralité de l'entente entre vous et la Province en ce qui concerne l'objet du - présent ALUF. Les titres de Les titres des présentes conditions sont insérés à des fins de commodité - uniquement et ne seront pas utilisés pour interpréter une disposition du présent contrat de CLUF. Si une - disposition du présent EULA est invalide, illégale ou inapplicable, elle illégale ou inapplicable, cette - disposition sera supprimée du présent EULA et toutes les autres dispositions resteront pleinement en - vigueur. et toutes les autres dispositions resteront en vigueur et de plein effet. Le présent EULA sera régi - et interprété conformément aux lois de la province de la Colombie province de la Colombie-Britannique et aux - lois applicables du Canada. En En utilisant l'Application sous licence, vous consentez à la juridiction - exclusive des tribunaux de la province de Colombie-Britannique, siégeant à Victoria Colombie-Britannique, - siégeant à Victoria, pour l'audition de tout différend litige découlant de ou lié au présent CLUF et à son - objet. - - {!(store.onboarding.didAgreeToTerms && store.authentication.didAuthenticate) && ( <> @@ -491,7 +171,7 @@ const Terms: React.FC = () => { )} - + ) }