Карточка, которую агент показывает перед рискованным действием: иконка и бейдж уровня риска, описание, команда моноширинным шрифтом или дифф правки. Кнопки — «Разрешить», «Всегда разрешать» и «Отклонить». При отказе карточка коротко встряхивается.
После решения карточка растворяется и сворачивается в однострочную квитанцию «Разрешено» или «Отклонено». Если задан таймер автоодобрения, на кнопке «Разрешить» убывает кольцо, а в вебе наведение ставит его на паузу. При «Уменьшении движения» встряхивания нет, а карточка сменяется квитанцией без анимации. Работает на iOS, Android и в вебе.
Поставьте зависимости:
npm install @react-native-masked-view/masked-view expo-linear-gradient react-native-reanimated react-native-svgpnpm add @react-native-masked-view/masked-view expo-linear-gradient react-native-reanimated react-native-svgyarn add @react-native-masked-view/masked-view expo-linear-gradient react-native-reanimated react-native-svgbun add @react-native-masked-view/masked-view expo-linear-gradient react-native-reanimated react-native-svgСкопируйте эти файлы в src/shared/components/organisms/approval-card/:
Код доступен по подпискеPro
Исходник «Карточка подтверждения» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Он импортирует ещё один модуль — astra-rn add кладёт их рядом сам, вручную скопируйте и их:
Проверьте алиас путей. Импорты в коде выше записаны так, как их пишет astra-rn add: @/shared/components, @/shared/utils и @/shared/hooks. Нужен алиас "@/*": ["./src/*"] в tsconfig.json — или поправьте импорты под свои пути.
Код доступен по подпискеPro
Исходник «Карточка подтверждения» открывается с подпиской Pro. Уже оформили? Войдите в аккаунт.
Дифф или вызов инструмента передаются через children; с decision решением можно управлять снаружи.
titleТип string
description?Тип string
command?Тип string
risk?Тип TApprovalRisk
icon?Тип TApprovalIconSlot
autoApproveIn?Тип number
allowAlways?Тип boolean
allowLabel?Тип string
alwaysLabel?Тип string
denyLabel?Тип string
decision?Тип TApprovalDecision | null
collapseOnDecide?Тип boolean
children?Тип ReactNode
onDecide?Тип (decision: TApprovalDecision) => void
theme?Тип TApprovalTheme
style?Тип StyleProp<ViewStyle>