import React, { useMemo, useState } from "react"; import { Linking, Pressable, Text, View } from "react-native"; import type { PublicConfig } from "../types"; import { Button, styles } from "../ui"; import { colors, radii, spacing } from "../theme"; type ConsentKey = "personal_data" | "user_agreement" | "marketing"; type ConsentLink = { label: string; url: string; }; type ConsentBlock = { key: ConsentKey; text: string; required: boolean; links: ConsentLink[]; }; type ConsentConfigItem = PublicConfig["consents"][string]; type Props = { consents: PublicConfig["consents"] | undefined; onAccept: (accepted: Record) => void; onCancel: () => void; }; const LABELS: Record string | null | undefined }>; }> = { personal_data: { text: "Я ознакомлен с Политикой обработки персональных данных ООО «ХАН» и даю своё Согласие на обработку моих персональных данных", links: [ { label: "Согласие на обработку ПД", readUrl: (item) => item.document_url }, { label: "Политика обработки ПД", readUrl: (item) => item.privacy_policy_document_url }, ], }, user_agreement: { text: "Я прочитал и соглашаюсь с Пользовательским соглашением", links: [{ label: "Пользовательское соглашение", readUrl: (item) => item.document_url }], }, marketing: { text: "Я даю своё согласие на получение рекламных и маркетинговых коммуникаций", links: [{ label: "Условия получения коммуникаций", readUrl: (item) => item.document_url }], }, }; export function ConsentModal({ consents, onAccept, onCancel }: Props) { const blocks = useMemo(() => buildBlocks(consents), [consents]); const [checked, setChecked] = useState>({ personal_data: false, user_agreement: false, marketing: false, }); const requiredDone = blocks.length > 0 && blocks.filter((block) => block.required).every((block) => checked[block.key]); const toggle = (key: ConsentKey) => { setChecked((prev) => ({ ...prev, [key]: !prev[key] })); }; return ( Перед началом работы Для использования приложения ознакомьтесь со следующими документами и предоставьте необходимые согласия {blocks.map((block) => { const isChecked = checked[block.key]; return ( toggle(block.key)} style={[ consentStyles.card, isChecked ? consentStyles.cardChecked : null, ]} > {isChecked ? : null} {block.text} {block.required ? * : null} {block.links.length > 0 ? ( {block.links.map((link) => ( { event?.stopPropagation?.(); void Linking.openURL(link.url); }} > ↗ {link.label} ))} ) : null} ); })} * {" — обязательные согласия"}