import React, { useContext, useRef } from 'react'; import { useInterpret, useSelector } from '@xstate/react'; import { Pressable } from 'react-native'; import { CheckBox } from 'react-native-elements'; import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; import { ActorRefFrom } from 'xstate'; import { createVcItemMachine, selectVerifiableCredential, selectGeneratedOn, selectId, vcItemMachine, } from '../machines/vcItem'; import { Column, Row, Text } from './ui'; import { Theme } from './ui/styleUtils'; import { RotatingIcon } from './RotatingIcon'; import { GlobalContext } from '../shared/GlobalContext'; import { LocalizedField } from '../types/vc'; export const VidItem: React.FC = (props) => { const { appService } = useContext(GlobalContext); const machine = useRef( createVcItemMachine( appService.getSnapshot().context.serviceRefs, props.vcKey ) ); const service = useInterpret(machine.current); const uin = useSelector(service, selectId); const verifiableCredential = useSelector(service, selectVerifiableCredential); const generatedOn = useSelector(service, selectGeneratedOn); const selectableOrCheck = props.selectable ? ( } uncheckedIcon={} onPress={() => props.onPress(service)} /> ) : ( ); return ( props.onPress(service)} disabled={!verifiableCredential}> {!verifiableCredential ? '' : uin} {!verifiableCredential ? '' : getLocalizedField( verifiableCredential.credentialSubject.fullName ) + ' ยท ' + generatedOn} {verifiableCredential ? ( selectableOrCheck ) : ( )} ); }; interface VcItemProps { vcKey: string; margin?: string; selectable?: boolean; selected?: boolean; onPress?: (vcRef?: ActorRefFrom) => void; } function getLocalizedField(rawField: string | LocalizedField) { if (typeof rawField === 'string') { return rawField; } try { const locales: LocalizedField[] = JSON.parse(JSON.stringify(rawField)); return locales[0].value; } catch (e) { return ''; } }