From 27a7f44b71a931d6a0ad98219d1681cd295f8648 Mon Sep 17 00:00:00 2001 From: Danica Erediano Date: Mon, 28 Mar 2022 11:37:00 +0800 Subject: [PATCH] updated --- components/{VidDetails.tsx => VcDetails.tsx} | 30 +-- components/{VidItem.tsx => VcItem.tsx} | 18 +- machines/activityLog.ts | 4 +- machines/app.ts | 6 +- machines/request.ts | 114 ++++----- machines/scan.ts | 76 +++--- machines/settings.ts | 22 +- machines/vc.ts | 217 ++++++++++++++++++ machines/{vidItem.ts => vcItem.ts} | 76 +++--- screens/Home/HistoryTab.tsx | 2 +- screens/Home/HomeScreen.tsx | 26 +-- screens/Home/HomeScreenController.ts | 16 +- screens/Home/HomeScreenMachine.ts | 78 +++---- .../AddVidModal.tsx => MyVcs/AddVcModal.tsx} | 6 +- .../AddVcModalController.ts} | 16 +- .../AddVcModalMachine.ts} | 12 +- .../DownloadingVcModal.tsx} | 10 +- .../DownloadingVcModalController.ts} | 6 +- .../Home/{MyVids => MyVcs}/IdInputModal.tsx | 4 +- .../IdInputModalController.ts | 24 +- .../OtpVerificationModal.tsx | 0 screens/Home/{MyVidsTab.tsx => MyVcsTab.tsx} | 54 ++--- screens/Home/MyVcsTabController.ts | 50 ++++ ...MyVidsTabMachine.ts => MyVcsTabMachine.ts} | 78 +++---- screens/Home/MyVidsTabController.ts | 50 ---- screens/Home/OnboardingOverlay.tsx | 18 +- ...ReceivedVidsTab.tsx => ReceivedVcsTab.tsx} | 26 +-- screens/Home/ReceivedVcsTabController.ts | 33 +++ ...TabMachine.ts => ReceivedVcsTabMachine.ts} | 34 +-- screens/Home/ReceivedVidsTabController.ts | 33 --- .../{ViewVidModal.tsx => ViewVcModal.tsx} | 14 +- screens/Home/ViewVcModalController.ts | 25 ++ screens/Home/ViewVidModalController.ts | 25 -- screens/Profile/ProfileScreen.tsx | 4 +- screens/Profile/ProfileScreenController.ts | 8 +- ...ReceiveVidModal.tsx => ReceiveVcModal.tsx} | 16 +- ...troller.ts => ReceiveVcModalController.ts} | 10 +- screens/Request/RequestScreen.tsx | 14 +- screens/Request/RequestScreenController.ts | 16 +- screens/Scan/ScanScreen.tsx | 8 +- screens/Scan/ScanScreenController.ts | 12 +- ...lectVidOverlay.tsx => SelectVcOverlay.tsx} | 26 +-- screens/Scan/SelectVcOverlayController.ts | 42 ++++ screens/Scan/SelectVidOverlayController.ts | 42 ---- .../{SendVidModal.tsx => SendVcModal.tsx} | 28 +-- ...Controller.ts => SendVcModalController.ts} | 30 +-- shared/GlobalContext.ts | 4 +- shared/ModelEvents.ts | 8 +- shared/constants.ts | 6 +- shared/request.ts | 4 +- types/vc.ts | 2 +- 51 files changed, 850 insertions(+), 633 deletions(-) rename components/{VidDetails.tsx => VcDetails.tsx} (81%) rename components/{VidItem.tsx => VcItem.tsx} (91%) create mode 100644 machines/vc.ts rename machines/{vidItem.ts => vcItem.ts} (81%) rename screens/Home/{MyVids/AddVidModal.tsx => MyVcs/AddVcModal.tsx} (79%) rename screens/Home/{MyVids/AddVidModalController.ts => MyVcs/AddVcModalController.ts} (57%) rename screens/Home/{MyVids/AddVidModalMachine.ts => MyVcs/AddVcModalMachine.ts} (96%) rename screens/Home/{MyVids/DownloadingVidModal.tsx => MyVcs/DownloadingVcModal.tsx} (68%) rename screens/Home/{MyVids/DownloadingVidModalController.ts => MyVcs/DownloadingVcModalController.ts} (62%) rename screens/Home/{MyVids => MyVcs}/IdInputModal.tsx (95%) rename screens/Home/{MyVids => MyVcs}/IdInputModalController.ts (64%) rename screens/Home/{MyVids => MyVcs}/OtpVerificationModal.tsx (100%) rename screens/Home/{MyVidsTab.tsx => MyVcsTab.tsx} (57%) create mode 100644 screens/Home/MyVcsTabController.ts rename screens/Home/{MyVidsTabMachine.ts => MyVcsTabMachine.ts} (60%) delete mode 100644 screens/Home/MyVidsTabController.ts rename screens/Home/{ReceivedVidsTab.tsx => ReceivedVcsTab.tsx} (62%) create mode 100644 screens/Home/ReceivedVcsTabController.ts rename screens/Home/{ReceivedVidsTabMachine.ts => ReceivedVcsTabMachine.ts} (51%) delete mode 100644 screens/Home/ReceivedVidsTabController.ts rename screens/Home/{ViewVidModal.tsx => ViewVcModal.tsx} (67%) create mode 100644 screens/Home/ViewVcModalController.ts delete mode 100644 screens/Home/ViewVidModalController.ts rename screens/Request/{ReceiveVidModal.tsx => ReceiveVcModal.tsx} (67%) rename screens/Request/{ReceiveVidModalController.ts => ReceiveVcModalController.ts} (57%) rename screens/Scan/{SelectVidOverlay.tsx => SelectVcOverlay.tsx} (71%) create mode 100644 screens/Scan/SelectVcOverlayController.ts delete mode 100644 screens/Scan/SelectVidOverlayController.ts rename screens/Scan/{SendVidModal.tsx => SendVcModal.tsx} (69%) rename screens/Scan/{SendVidModalController.ts => SendVcModalController.ts} (57%) diff --git a/components/VidDetails.tsx b/components/VcDetails.tsx similarity index 81% rename from components/VidDetails.tsx rename to components/VcDetails.tsx index 2023dfb3..d9b180b0 100644 --- a/components/VidDetails.tsx +++ b/components/VcDetails.tsx @@ -5,7 +5,7 @@ import { VC, CredentialSubject } from '../types/vc'; import { Column, Row, Text } from './ui'; import { Colors } from './ui/styleUtils'; -export const VidDetails: React.FC = (props) => { +export const VcDetails: React.FC = (props) => { return ( @@ -14,7 +14,7 @@ export const VidDetails: React.FC = (props) => { Generated - {new Date(props.vid?.generatedOn).toLocaleDateString()} + {new Date(props.vc?.generatedOn).toLocaleDateString()} @@ -22,7 +22,7 @@ export const VidDetails: React.FC = (props) => { {props.vid?.idType} - {props.vid?.id} + {props.vc?.id} @@ -40,8 +40,8 @@ export const VidDetails: React.FC = (props) => { = (props) => { Full name - {props.vid?.verifiableCredential.credentialSubject.fullName} + {props.vc?.verifiableCredential.credentialSubject.fullName} @@ -67,7 +67,7 @@ export const VidDetails: React.FC = (props) => { Gender {getLocalizedField( - props.vid?.verifiableCredential.credentialSubject.gender + props.vc?.verifiableCredential.credentialSubject.gender )} @@ -76,7 +76,7 @@ export const VidDetails: React.FC = (props) => { Date of birth - {props.vid?.verifiableCredential.credentialSubject.dateOfBirth} + {props.vc?.verifiableCredential.credentialSubject.dateOfBirth} @@ -84,7 +84,7 @@ export const VidDetails: React.FC = (props) => { Phone number - {props.vid?.verifiableCredential.credentialSubject.phone} + {props.vc?.verifiableCredential.credentialSubject.phone} @@ -92,7 +92,7 @@ export const VidDetails: React.FC = (props) => { Email - {props.vid?.verifiableCredential.credentialSubject.email} + {props.vc?.verifiableCredential.credentialSubject.email} @@ -100,15 +100,15 @@ export const VidDetails: React.FC = (props) => { Address - {getFullAddress(props.vid?.verifiableCredential.credentialSubject)} + {getFullAddress(props.vc?.verifiableCredential.credentialSubject)} - {Boolean(props.vid?.reason) && ( + {Boolean(props.vc?.reason) && ( Reason for sharing - {props.vid?.reason} + {props.vc?.reason} )} @@ -116,8 +116,8 @@ export const VidDetails: React.FC = (props) => { ); }; -interface VidDetailsProps { - vid: VC; +interface VcDetailsProps { + vc: VC; } interface LocalizedField { diff --git a/components/VidItem.tsx b/components/VcItem.tsx similarity index 91% rename from components/VidItem.tsx rename to components/VcItem.tsx index 0336f34f..9645ee25 100644 --- a/components/VidItem.tsx +++ b/components/VcItem.tsx @@ -4,13 +4,13 @@ import { Pressable, StyleSheet } from 'react-native'; import { CheckBox, Icon } from 'react-native-elements'; import { ActorRefFrom } from 'xstate'; import { - createVidItemMachine, + createVcItemMachine, selectVerifiableCredential, selectGeneratedOn, selectTag, selectId, - vidItemMachine, -} from '../machines/vidItem'; + vcItemMachine, +} from '../machines/vcItem'; import { Column, Row, Text } from './ui'; import { Colors } from './ui/styleUtils'; import { RotatingIcon } from './RotatingIcon'; @@ -42,12 +42,12 @@ const styles = StyleSheet.create({ }, }); -export const VidItem: React.FC = (props) => { +export const VcItem: React.FC = (props) => { const { appService } = useContext(GlobalContext); const machine = useRef( - createVidItemMachine( + createVcItemMachine( appService.getSnapshot().context.serviceRefs, - props.vidKey + props.vcKey ) ); const service = useInterpret(machine.current); @@ -103,10 +103,10 @@ export const VidItem: React.FC = (props) => { ); }; -interface VidItemProps { - vidKey: string; +interface VcItemProps { + vcKey: string; margin?: string; selectable?: boolean; selected?: boolean; - onPress?: (vidRef?: ActorRefFrom) => void; + onPress?: (vcRef?: ActorRefFrom) => void; } diff --git a/machines/activityLog.ts b/machines/activityLog.ts index 5e781ed9..c2991431 100644 --- a/machines/activityLog.ts +++ b/machines/activityLog.ts @@ -103,10 +103,10 @@ export function createActivityLogMachine(serviceRefs: AppServices) { } export interface ActivityLog { - _vidKey: string; + _vcKey: string; timestamp: number; deviceName: string; - vidLabel: string; + VCLabel: string; action: ActivityLogAction; } diff --git a/machines/app.ts b/machines/app.ts index 7dc0a243..21f67259 100644 --- a/machines/app.ts +++ b/machines/app.ts @@ -10,7 +10,7 @@ import { createModel } from 'xstate/lib/model'; import { authMachine, createAuthMachine } from './auth'; import { createSettingsMachine, settingsMachine } from './settings'; import { storeMachine } from './store'; -import { createVidMachine, vidMachine } from './vid'; +import { createVcMachine, vcMachine } from './vc'; import { createActivityLogMachine, activityLogMachine } from './activityLog'; import { createRequestMachine, requestMachine } from './request'; import { createScanMachine, scanMachine } from './scan'; @@ -166,7 +166,7 @@ export const appMachine = model.createMachine( createAuthMachine(serviceRefs), authMachine.id ); - serviceRefs.vid = spawn(createVidMachine(serviceRefs), vidMachine.id); + serviceRefs.vc = spawn(createVcMachine(serviceRefs), vcMachine.id); serviceRefs.settings = spawn( createSettingsMachine(serviceRefs), settingsMachine.id @@ -190,7 +190,7 @@ export const appMachine = model.createMachine( logServiceEvents: (context) => { if (__DEV__) { context.serviceRefs.auth.subscribe(logState); - context.serviceRefs.vid.subscribe(logState); + context.serviceRefs.vc.subscribe(logState); context.serviceRefs.settings.subscribe(logState); context.serviceRefs.activityLog.subscribe(logState); context.serviceRefs.scan.subscribe(logState); diff --git a/machines/request.ts b/machines/request.ts index 4505391c..95da8091 100644 --- a/machines/request.ts +++ b/machines/request.ts @@ -10,18 +10,18 @@ import { StoreEvents } from './store'; import { VC } from '../types/vc'; import { AppServices } from '../shared/GlobalContext'; import { - RECEIVED_VIDS_STORE_KEY, - VID_ITEM_STORE_KEY, + RECEIVED_VCS_STORE_KEY, + VC_ITEM_STORE_KEY, } from '../shared/constants'; import { ActivityLogEvents } from './activityLog'; -import { VidEvents } from './vid'; +import { VcEvents } from './vc'; const model = createModel( { serviceRefs: {} as AppServices, senderInfo: {} as DeviceInfo, receiverInfo: {} as DeviceInfo, - incomingVid: {} as VC, + incomingVc: {} as VC, connectionParams: '', loggers: [] as EmitterSubscription[], }, @@ -31,7 +31,7 @@ const model = createModel( REJECT: () => ({}), CANCEL: () => ({}), DISMISS: () => ({}), - VID_RECEIVED: (vid: VC) => ({ vid }), + VC_RECEIVED: (vc: VC) => ({ vc }), RESPONSE_SENT: () => ({}), CONNECTED: () => ({}), DISCONNECT: () => ({}), @@ -43,8 +43,8 @@ const model = createModel( STORE_READY: () => ({}), STORE_RESPONSE: (response: any) => ({ response }), RECEIVE_DEVICE_INFO: (info: DeviceInfo) => ({ info }), - RECEIVED_VIDS_UPDATED: () => ({}), - VID_RESPONSE: (response: any) => ({ response }), + RECEIVED_VCS_UPDATED: () => ({}), + VC_RESPONSE: (response: any) => ({ response }), }, } ); @@ -52,10 +52,10 @@ const model = createModel( export const RequestEvents = model.events; type ExchangeDoneEvent = EventFrom; -type VidReceivedEvent = EventFrom; +type VcReceivedEvent = EventFrom; type ReceiveDeviceInfoEvent = EventFrom; type StoreResponseEvent = EventFrom; -type VidResponseEvent = EventFrom; +type VcResponseEvent = EventFrom; export const requestMachine = model.createMachine( { @@ -132,20 +132,20 @@ export const requestMachine = model.createMachine( }, on: { EXCHANGE_DONE: { - target: 'waitingForVid', + target: 'waitingForVc', actions: ['setSenderInfo'], }, }, }, - waitingForVid: { + waitingForVc: { invoke: { - src: 'receiveVid', + src: 'receiveVc', }, on: { DISCONNECT: 'disconnected', - VID_RECEIVED: { + VC_RECEIVED: { target: 'reviewing', - actions: ['setIncomingVid'], + actions: ['setIncomingVc'], }, }, }, @@ -159,34 +159,34 @@ export const requestMachine = model.createMachine( states: { idle: {}, accepting: { - initial: 'requestingReceivedVids', + initial: 'requestingReceivedVcs', states: { - requestingReceivedVids: { - entry: ['requestReceivedVids'], + requestingReceivedVcs: { + entry: ['requestReceivedVcs'], on: { - VID_RESPONSE: [ + VC_RESPONSE: [ { - cond: 'hasExistingVid', + cond: 'hasExistingVc', target: '#accepted', }, { - target: 'prependingReceivedVid', + target: 'prependingReceivedVc', }, ], }, }, - prependingReceivedVid: { - entry: ['prependReceivedVid'], + prependingReceivedVc: { + entry: ['prependReceivedVc'], on: { - STORE_RESPONSE: 'storingVid', + STORE_RESPONSE: 'storingVc', }, }, - storingVid: { - entry: ['storeVid'], + storingVc: { + entry: ['storeVc'], on: { STORE_RESPONSE: { target: '#accepted', - actions: ['sendVidReceived'], + actions: ['sendVcReceived'], }, }, }, @@ -197,7 +197,7 @@ export const requestMachine = model.createMachine( id: 'accepted', invoke: { src: { - type: 'sendVidResponse', + type: 'sendVcResponse', status: 'accepted', }, }, @@ -208,7 +208,7 @@ export const requestMachine = model.createMachine( rejected: { invoke: { src: { - type: 'sendVidResponse', + type: 'sendVcResponse', status: 'rejected', }, }, @@ -229,8 +229,8 @@ export const requestMachine = model.createMachine( }, { actions: { - requestReceivedVids: send(VidEvents.GET_RECEIVED_VIDS(), { - to: (context) => context.serviceRefs.vid, + requestReceivedVcs: send(VcEvents.GET_RECEIVED_VCS(), { + to: (context) => context.serviceRefs.vc, }), requestReceiverInfo: sendParent('REQUEST_DEVICE_INFO'), @@ -255,8 +255,8 @@ export const requestMachine = model.createMachine( senderInfo: (_, event: ExchangeDoneEvent) => event.senderInfo, }), - setIncomingVid: model.assign({ - incomingVid: (_, event: VidReceivedEvent) => event.vid, + setIncomingVc: model.assign({ + incomingVc: (_, event: VcReceivedEvent) => event.vc, }), registerLoggers: model.assign({ @@ -291,20 +291,20 @@ export const requestMachine = model.createMachine( }, }), - prependReceivedVid: send( + prependReceivedVc: send( (context) => StoreEvents.PREPEND( - RECEIVED_VIDS_STORE_KEY, - VID_ITEM_STORE_KEY(context.incomingVid) + RECEIVED_VCS_STORE_KEY, + VC_ITEM_STORE_KEY(context.incomingVc) ), { to: (context) => context.serviceRefs.store } ), - storeVid: send( + storeVc: send( (context) => StoreEvents.SET( - VID_ITEM_STORE_KEY(context.incomingVid), - context.incomingVid + VC_ITEM_STORE_KEY(context.incomingVc), + context.incomingVc ), { to: (context) => context.serviceRefs.store } ), @@ -312,23 +312,23 @@ export const requestMachine = model.createMachine( logReceived: send( (context) => ActivityLogEvents.LOG_ACTIVITY({ - _vidKey: VID_ITEM_STORE_KEY(context.incomingVid), + _vcKey: VC_ITEM_STORE_KEY(context.incomingVc), action: 'received', timestamp: Date.now(), deviceName: context.senderInfo.name || context.senderInfo.deviceName, - vidLabel: context.incomingVid.tag || context.incomingVid.id, + VCLabel: context.incomingVc.tag || context.incomingVc.id, }), { to: (context) => context.serviceRefs.activityLog } ), - sendVidReceived: send( + sendVcReceived: send( (context) => { - return VidEvents.VID_RECEIVED( - VID_ITEM_STORE_KEY(context.incomingVid) + return VcEvents.VC_RECEIVED( + VC_ITEM_STORE_KEY(context.incomingVc) ); }, - { to: (context) => context.serviceRefs.vid } + { to: (context) => context.serviceRefs.vc } ), }, @@ -380,7 +380,7 @@ export const requestMachine = model.createMachine( return () => subscription.remove(); }, - receiveVid: () => (callback) => { + receiveVc: () => (callback) => { const subscription = SmartShare.handleNearbyEvents((event) => { if (event.type === 'onDisconnected') { callback({ type: 'DISCONNECT' }); @@ -389,8 +389,8 @@ export const requestMachine = model.createMachine( if (event.type !== 'msg') return; const message = Message.fromString(event.data); - if (message.type === 'send:vid') { - callback({ type: 'VID_RECEIVED', vid: message.data }); + if (message.type === 'send:vc') { + callback({ type: 'VC_RECEIVED', vc: message.data }); } }); @@ -398,8 +398,8 @@ export const requestMachine = model.createMachine( }, // tslint:disable-next-line - sendVidResponse: (context, event, meta) => (callback) => { - const response = new Message('send:vid:response', { + sendVcResponse: (context, event, meta) => (callback) => { + const response = new Message('send:vc:response', { status: meta.src.status, }); @@ -410,10 +410,10 @@ export const requestMachine = model.createMachine( }, guards: { - hasExistingVid: (context, event: VidResponseEvent) => { - const receivedVids: string[] = event.response; - const vidKey = VID_ITEM_STORE_KEY(context.incomingVid); - return receivedVids.includes(vidKey); + hasExistingVc: (context, event: VcResponseEvent) => { + const receivedVcs: string[] = event.response; + const vcKey = VC_ITEM_STORE_KEY(context.incomingVc); + return receivedVcs.includes(vcKey); }, }, } @@ -436,8 +436,8 @@ export function selectConnectionParams(state: State) { return state.context.connectionParams; } -export function selectIncomingVid(state: State) { - return state.context.incomingVid; +export function selectIncomingVc(state: State) { + return state.context.incomingVc; } export function selectIsReviewing(state: State) { @@ -468,6 +468,6 @@ export function selectIsExchangingDeviceInfo(state: State) { return state.matches('exchangingDeviceInfo'); } -export function selectIsWaitingForVid(state: State) { - return state.matches('waitingForVid'); +export function selectIsWaitingForVc(state: State) { + return state.matches('waitingForVc'); } diff --git a/machines/scan.ts b/machines/scan.ts index f174a341..47581424 100644 --- a/machines/scan.ts +++ b/machines/scan.ts @@ -10,14 +10,14 @@ import { getDeviceNameSync } from 'react-native-device-info'; import { VC } from '../types/vc'; import { AppServices } from '../shared/GlobalContext'; import { ActivityLogEvents } from './activityLog'; -import { VID_ITEM_STORE_KEY } from '../shared/constants'; +import { VC_ITEM_STORE_KEY } from '../shared/constants'; const model = createModel( { serviceRefs: {} as AppServices, senderInfo: {} as DeviceInfo, receiverInfo: {} as DeviceInfo, - selectedVid: {} as VC, + selectedVc: {} as VC, reason: '', loggers: [] as EmitterSubscription[], locationConfig: { @@ -25,17 +25,17 @@ const model = createModel( alwaysShow: false, needBle: true, }, - vidName: '', + vcName: '', }, { events: { EXCHANGE_DONE: (receiverInfo: DeviceInfo) => ({ receiverInfo }), RECEIVE_DEVICE_INFO: (info: DeviceInfo) => ({ info }), - SELECT_VID: (vid: VC) => ({ vid }), + SELECT_VC: (vc: VC) => ({ vc }), SCAN: (params: string) => ({ params }), ACCEPT_REQUEST: () => ({}), - VID_ACCEPTED: () => ({}), - VID_REJECTED: () => ({}), + VC_ACCEPTED: () => ({}), + VC_REJECTED: () => ({}), CANCEL: () => ({}), DISMISS: () => ({}), CONNECTED: () => ({}), @@ -49,7 +49,7 @@ const model = createModel( FLIGHT_DISABLED: () => ({}), FLIGHT_REQUEST: () => ({}), LOCATION_REQUEST: () => ({}), - UPDATE_VID_NAME: (vidName: string) => ({ vidName }), + UPDATE_VC_NAME: (vcName: string) => ({ vcName }), STORE_RESPONSE: (response: any) => ({ response }), APP_ACTIVE: () => ({}), }, @@ -60,7 +60,7 @@ export const ScanEvents = model.events; type ExchangeDoneEvent = EventFrom; type ScanEvent = EventFrom; -type SelectVidEvent = EventFrom; +type selectVcEvent = EventFrom; type UpdateReasonEvent = EventFrom; type ReceiveDeviceInfoEvent = EventFrom; @@ -206,7 +206,7 @@ export const scanMachine = model.createMachine( on: { CANCEL: 'findingConnection', DISMISS: 'findingConnection', - ACCEPT_REQUEST: '.selectingVid', + ACCEPT_REQUEST: '.selectingVc', UPDATE_REASON: { actions: ['setReason'], }, @@ -215,26 +215,26 @@ export const scanMachine = model.createMachine( states: { idle: { on: { - ACCEPT_REQUEST: 'selectingVid', + ACCEPT_REQUEST: 'selectingVc', }, }, - selectingVid: { + selectingVc: { on: { - SELECT_VID: { - target: 'sendingVid', - actions: ['setSelectedVid'], + SELECT_VC: { + target: 'sendingVc', + actions: ['setSelectedVc'], }, CANCEL: 'idle', }, }, - sendingVid: { + sendingVc: { invoke: { - src: 'sendVid', + src: 'sendVc', }, on: { DISCONNECT: '#scan.disconnected', - VID_ACCEPTED: 'accepted', - VID_REJECTED: 'rejected', + VC_ACCEPTED: 'accepted', + VC_REJECTED: 'rejected', }, }, accepted: { @@ -302,10 +302,10 @@ export const scanMachine = model.createMachine( clearReason: model.assign({ reason: '' }), - setSelectedVid: model.assign({ - selectedVid: (context, event: SelectVidEvent) => { + setSelectedVc: model.assign({ + selectedVc: (context, event: selectVcEvent) => { return { - ...event.vid, + ...event.vc, reason: context.reason, }; }, @@ -346,12 +346,12 @@ export const scanMachine = model.createMachine( logShared: send( (context) => ActivityLogEvents.LOG_ACTIVITY({ - _vidKey: VID_ITEM_STORE_KEY(context.selectedVid), + _vcKey: VC_ITEM_STORE_KEY(context.selectedVc), action: 'shared', timestamp: Date.now(), deviceName: context.receiverInfo.name || context.receiverInfo.deviceName, - vidLabel: context.selectedVid.tag || context.selectedVid.id, + VCLabel: context.selectedVc.tag || context.selectedVc.id, }), { to: (context) => context.serviceRefs.activityLog } ), @@ -442,15 +442,15 @@ export const scanMachine = model.createMachine( return () => subscription?.remove(); }, - sendVid: (context) => (callback) => { + sendVc: (context) => (callback) => { let subscription: EmitterSubscription; - const vid = { - ...context.selectedVid, + const vc = { + ...context.selectedVc, tag: '', }; - const message = new Message('send:vid', vid); + const message = new Message('send:vc', vc); SmartShare.send(message.toString(), () => { subscription = SmartShare.handleNearbyEvents((event) => { @@ -460,13 +460,13 @@ export const scanMachine = model.createMachine( if (event.type !== 'msg') return; - const response = Message.fromString(event.data); - if (response.type === 'send:vid:response') { + const response = Message.fromString(event.data); + if (response.type === 'send:vc:response') { callback({ type: response.data.status === 'accepted' - ? 'VID_ACCEPTED' - : 'VID_REJECTED', + ? 'VC_ACCEPTED' + : 'VC_REJECTED', }); } }); @@ -499,7 +499,7 @@ export function createScanMachine(serviceRefs: AppServices) { }); } -interface SendVidStatus { +interface SendVcStatus { status: 'accepted' | 'rejected'; } @@ -513,8 +513,8 @@ export function selectReason(state: State) { return state.context.reason; } -export function selectVidName(state: State) { - return state.context.vidName; +export function selectVcName(state: State) { + return state.context.vcName; } export function selectStatusMessage(state: State) { @@ -533,12 +533,12 @@ export function selectReviewing(state: State) { return state.matches('reviewing'); } -export function selectSelectingVid(state: State) { - return state.matches('reviewing.selectingVid'); +export function selectSelectingVc(state: State) { + return state.matches('reviewing.selectingVc'); } -export function selectSendingVid(state: State) { - return state.matches('reviewing.sendingVid'); +export function selectSendingVc(state: State) { + return state.matches('reviewing.sendingVc'); } export function selectAccepted(state: State) { diff --git a/machines/settings.ts b/machines/settings.ts index 7281e32e..44210c39 100644 --- a/machines/settings.ts +++ b/machines/settings.ts @@ -2,23 +2,23 @@ import { ContextFrom, EventFrom, send, StateFrom } from 'xstate'; import { createModel } from 'xstate/lib/model'; import { AppServices } from '../shared/GlobalContext'; import { SETTINGS_STORE_KEY } from '../shared/constants'; -import { VIDLabel } from '../types/vc'; +import { VCLabel } from '../types/vc'; import { StoreEvents } from './store'; const model = createModel( { serviceRefs: {} as AppServices, name: '', - vidLabel: { + VCLabel: { singular: 'ID', plural: 'IDs', - } as VIDLabel, + } as VCLabel, isBiometricUnlockEnabled: false, }, { events: { UPDATE_NAME: (name: string) => ({ name }), - UPDATE_VID_LABEL: (label: string) => ({ label }), + UPDATE_VC_LABEL: (label: string) => ({ label }), TOGGLE_BIOMETRIC_UNLOCK: () => ({}), STORE_RESPONSE: (response: any) => ({ response }), }, @@ -30,7 +30,7 @@ export const SettingsEvents = model.events; type Context = ContextFrom; type UpdateNameEvent = EventFrom; -type UpdateVidLabelEvent = EventFrom; +type UpdateVCLabelEvent = EventFrom; type StoreResponseEvent = EventFrom; export const settingsMachine = model.createMachine( @@ -62,8 +62,8 @@ export const settingsMachine = model.createMachine( UPDATE_NAME: { actions: ['updateName', 'storeContext'], }, - UPDATE_VID_LABEL: { - actions: ['updateVidLabel', 'storeContext'], + UPDATE_VC_LABEL: { + actions: ['updateVCLabel', 'storeContext'], }, }, }, @@ -95,8 +95,8 @@ export const settingsMachine = model.createMachine( name: (_, event: UpdateNameEvent) => event.name, }), - updateVidLabel: model.assign({ - vidLabel: (_, event: UpdateVidLabelEvent) => ({ + updateVCLabel: model.assign({ + VCLabel: (_, event: UpdateVCLabelEvent) => ({ singular: event.label, plural: event.label + 's', }), @@ -124,8 +124,8 @@ export function selectName(state: State) { return state.context.name; } -export function selectVidLabel(state: State) { - return state.context.vidLabel; +export function selectVCLabel(state: State) { + return state.context.VCLabel; } export function selectBiometricUnlockEnabled(state: State) { diff --git a/machines/vc.ts b/machines/vc.ts new file mode 100644 index 00000000..17a6842a --- /dev/null +++ b/machines/vc.ts @@ -0,0 +1,217 @@ +import { EventFrom, StateFrom } from 'xstate'; +import { send, sendParent } from 'xstate'; +import { createModel } from 'xstate/lib/model'; +import { StoreEvents } from './store'; +import { VC } from '../types/vc'; +import { AppServices } from '../shared/GlobalContext'; +import { log, respond } from 'xstate/lib/actions'; +import { VcItemEvents } from './vcItem'; +import { + MY_VCS_STORE_KEY, + RECEIVED_VCS_STORE_KEY, + VC_ITEM_STORE_KEY, +} from '../shared/constants'; + +const model = createModel( + { + serviceRefs: {} as AppServices, + myVcs: [] as string[], + receivedVcs: [] as string[], + vcs: {} as Record, + }, + { + events: { + VIEW_VC: (vc: VC) => ({ vc }), + GET_VC_ITEM: (vcKey: string) => ({ vcKey }), + STORE_RESPONSE: (response: any) => ({ response }), + STORE_ERROR: (error: Error) => ({ error }), + VC_ADDED: (vcKey: string) => ({ vcKey }), + VC_RECEIVED: (vcKey: string) => ({ vcKey }), + VC_DOWNLOADED: (vc: VC) => ({ vc }), + REFRESH_MY_VCS: () => ({}), + REFRESH_RECEIVED_VCS: () => ({}), + GET_RECEIVED_VCS: () => ({}), + }, + } +); + +export const VcEvents = model.events; + +type GetVcItemEvent = EventFrom; +type StoreResponseEvent = EventFrom; +type VcDownloadedEvent = EventFrom; +type VcAddedEvent = EventFrom; +type VcReceivedEvent = EventFrom; + +export const vcMachine = model.createMachine( + { + id: 'vc', + context: model.initialContext, + initial: 'init', + states: { + init: { + initial: 'myVcs', + states: { + myVcs: { + entry: ['loadMyVcs'], + on: { + STORE_RESPONSE: { + target: 'receivedVcs', + actions: ['setMyVcs'], + }, + }, + }, + receivedVcs: { + entry: ['loadReceivedVcs'], + on: { + STORE_RESPONSE: { + target: '#ready', + actions: ['setReceivedVcs'], + }, + }, + }, + }, + }, + ready: { + id: 'ready', + entry: [sendParent('READY')], + on: { + GET_RECEIVED_VCS: { + actions: ['getReceivedVcsResponse'], + }, + GET_VC_ITEM: { + actions: ['getVcItemResponse'], + }, + VC_ADDED: { + actions: ['prependToMyVcs'], + }, + VC_DOWNLOADED: { + actions: ['setDownloadedVc'], + }, + VC_RECEIVED: { + actions: ['prependToReceivedVcs'], + }, + }, + type: 'parallel', + states: { + myVcs: { + initial: 'idle', + states: { + idle: { + on: { + REFRESH_MY_VCS: 'refreshing', + }, + }, + refreshing: { + entry: ['loadMyVcs'], + on: { + STORE_RESPONSE: { + target: 'idle', + actions: ['setMyVcs'], + }, + }, + }, + }, + }, + receivedVcs: { + initial: 'idle', + states: { + idle: { + on: { + REFRESH_RECEIVED_VCS: 'refreshing', + }, + }, + refreshing: { + entry: ['loadReceivedVcs'], + on: { + STORE_RESPONSE: { + target: 'idle', + actions: ['setReceivedVcs'], + }, + }, + }, + }, + }, + }, + }, + }, + }, + { + actions: { + getReceivedVcsResponse: respond((context) => ({ + type: 'VC_RESPONSE', + response: context.receivedVcs, + })), + + getVcItemResponse: respond((context, event: GetVcItemEvent) => { + const vc = context.vcs[event.vcKey]; + return VcItemEvents.GET_VC_RESPONSE(vc); + }), + + loadMyVcs: send(StoreEvents.GET(MY_VCS_STORE_KEY), { + to: (context) => context.serviceRefs.store, + }), + + loadReceivedVcs: send(StoreEvents.GET(RECEIVED_VCS_STORE_KEY), { + to: (context) => context.serviceRefs.store, + }), + + setMyVcs: model.assign({ + myVcs: (_, event: StoreResponseEvent) => event.response || [], + }), + + setReceivedVcs: model.assign({ + receivedVcs: (_, event: StoreResponseEvent) => event.response || [], + }), + + setDownloadedVc: (context, event: VcDownloadedEvent) => { + context.vcs[VC_ITEM_STORE_KEY(event.vc)] = event.vc; + }, + + prependToMyVcs: model.assign({ + myVcs: (context, event: VcAddedEvent) => [ + event.vcKey, + ...context.myVcs, + ], + }), + + prependToReceivedVcs: model.assign({ + receivedVcs: (context, event: VcReceivedEvent) => [ + event.vcKey, + ...context.receivedVcs, + ], + }), + }, + } +); + +export function createVcMachine(serviceRefs: AppServices) { + return vcMachine.withContext({ + ...vcMachine.context, + serviceRefs, + }); +} + +type State = StateFrom; + +export function selectMyVcs(state: State) { + return state.context.myVcs; +} + +export function selectShareableVcs(state: State) { + return state.context.myVcs.filter( + (vcKey) => state.context.vcs[vcKey]?.credential != null + ); +} + +export function selectReceivedVcs(state: State) { + return state.context.receivedVcs; +} + +export function selectIsRefreshingMyVcs(state: State) { + return state.matches('ready.myVcs.refreshing'); +} + +export function selectIsRefreshingReceivedVcs(state: State) { + return state.matches('ready.receivedVcs.refreshing'); +} diff --git a/machines/vidItem.ts b/machines/vcItem.ts similarity index 81% rename from machines/vidItem.ts rename to machines/vcItem.ts index 92866c64..bf62f667 100644 --- a/machines/vidItem.ts +++ b/machines/vcItem.ts @@ -1,6 +1,6 @@ import { EventFrom, send, StateFrom } from 'xstate'; import { createModel } from 'xstate/lib/model'; -import { VID_ITEM_STORE_KEY } from '../shared/constants'; +import { VC_ITEM_STORE_KEY } from '../shared/constants'; import { AppServices } from '../shared/GlobalContext'; import { CredentialDownloadResponse, request } from '../shared/request'; import { @@ -29,40 +29,40 @@ const model = createModel( SAVE_TAG: (tag: string) => ({ tag }), STORE_READY: () => ({}), DISMISS: () => ({}), - CREDENTIAL_DOWNLOADED: (vid: VC) => ({ vid }), + CREDENTIAL_DOWNLOADED: (vc: VC) => ({ vc }), STORE_RESPONSE: (response: VC) => ({ response }), POLL: () => ({}), DOWNLOAD_READY: () => ({}), - GET_VID_RESPONSE: (vid: VC) => ({ vid }), + GET_VC_RESPONSE: (vc: VC) => ({ vc }), }, } ); -export const VidItemEvents = model.events; +export const VcItemEvents = model.events; type SaveTagEvent = EventFrom; -type GetVidResponseEvent = EventFrom; +type GetVcResponseEvent = EventFrom; type StoreResponseEvent = EventFrom; type CredentialDownloadedEvent = EventFrom< typeof model, 'CREDENTIAL_DOWNLOADED' >; -type RequestVidDataEvent = +type RequestVcDataEvent = | StoreResponseEvent | CredentialDownloadedEvent - | GetVidResponseEvent; + | GetVcResponseEvent; -export const vidItemMachine = model.createMachine( +export const vcItemMachine = model.createMachine( { - id: 'vid-item', + id: 'vc-item', context: model.initialContext, - initial: 'checkingVid', + initial: 'checkingVc', states: { - checkingVid: { - entry: ['requestVidContext'], + checkingVc: { + entry: ['requestVcContext'], on: { - GET_VID_RESPONSE: [ + GET_VC_RESPONSE: [ { cond: 'hasCredential', target: 'idle', @@ -81,7 +81,7 @@ export const vidItemMachine = model.createMachine( { cond: 'hasCredential', target: 'idle', - actions: ['setCredential', 'updateVid'], + actions: ['setCredential', 'updateVc'], }, { target: 'checkingServerData', @@ -118,7 +118,7 @@ export const vidItemMachine = model.createMachine( actions: [ 'setCredential', 'storeContext', - 'updateVid', + 'updateVc', 'logDownloaded', ], }, @@ -151,26 +151,26 @@ export const vidItemMachine = model.createMachine( }, { actions: { - updateVid: send( + updateVc: send( (context) => { - const { serviceRefs, ...vid } = context; - return { type: 'VID_DOWNLOADED', vid }; + const { serviceRefs, ...vc } = context; + return { type: 'VC_DOWNLOADED', vc }; }, - { to: (context) => context.serviceRefs.vid } + { to: (context) => context.serviceRefs.vc } ), - requestVidContext: send( + requestVcContext: send( (context) => ({ - type: 'GET_VID_ITEM', - vidKey: VID_ITEM_STORE_KEY(context), + type: 'GET_VC_ITEM', + vcKey: VC_ITEM_STORE_KEY(context), }), { - to: (context) => context.serviceRefs.vid, + to: (context) => context.serviceRefs.vc, } ), requestStoredContext: send( - (context) => StoreEvents.GET(VID_ITEM_STORE_KEY(context)), + (context) => StoreEvents.GET(VC_ITEM_STORE_KEY(context)), { to: (context) => context.serviceRefs.store, } @@ -179,7 +179,7 @@ export const vidItemMachine = model.createMachine( storeContext: send( (context) => { const { serviceRefs, ...data } = context; - return StoreEvents.SET(VID_ITEM_STORE_KEY(context), data); + return StoreEvents.SET(VC_ITEM_STORE_KEY(context), data); }, { to: (context) => context.serviceRefs.store, @@ -193,29 +193,29 @@ export const vidItemMachine = model.createMachine( storeTag: send( (context) => { const { serviceRefs, ...data } = context; - return StoreEvents.SET(VID_ITEM_STORE_KEY(context), data); + return StoreEvents.SET(VC_ITEM_STORE_KEY(context), data); }, { to: (context) => context.serviceRefs.store } ), - setCredential: model.assign((_, event: RequestVidDataEvent) => { + setCredential: model.assign((_, event: RequestVcDataEvent) => { switch (event.type) { case 'STORE_RESPONSE': return event.response; - case 'GET_VID_RESPONSE': + case 'GET_VC_RESPONSE': case 'CREDENTIAL_DOWNLOADED': - return event.vid; + return event.vc; } }), logDownloaded: send( (_, event: CredentialDownloadedEvent) => ActivityLogEvents.LOG_ACTIVITY({ - _vidKey: VID_ITEM_STORE_KEY(event.vid), + _vcKey: VC_ITEM_STORE_KEY(event.vc), action: 'downloaded', timestamp: Date.now(), deviceName: '', - vidLabel: event.vid.tag || event.vid.id, + VCLabel: event.vc.tag || event.vc.id, }), { to: (context) => context.serviceRefs.activityLog } ), @@ -294,13 +294,13 @@ export const vidItemMachine = model.createMachine( } ); -export const createVidItemMachine = ( +export const createVcItemMachine = ( serviceRefs: AppServices, - vidKey: string + vcKey: string ) => { - const [_, idType, id, requestId] = vidKey.split(':'); - return vidItemMachine.withContext({ - ...vidItemMachine.context, + const [_, idType, id, requestId] = vcKey.split(':'); + return vcItemMachine.withContext({ + ...vcItemMachine.context, serviceRefs, id, idType: idType as VcIdType, @@ -308,9 +308,9 @@ export const createVidItemMachine = ( }); }; -type State = StateFrom; +type State = StateFrom; -export function selectVid(state: State) { +export function selectVc(state: State) { const { serviceRefs, ...data } = state.context; return data; } diff --git a/screens/Home/HistoryTab.tsx b/screens/Home/HistoryTab.tsx index 27512876..d36ae58f 100644 --- a/screens/Home/HistoryTab.tsx +++ b/screens/Home/HistoryTab.tsx @@ -34,7 +34,7 @@ export const HistoryTab: React.FC = (props) => { ))} {controller.activities.length === 0 && ( diff --git a/screens/Home/HomeScreen.tsx b/screens/Home/HomeScreen.tsx index 20dca647..20a83dce 100644 --- a/screens/Home/HomeScreen.tsx +++ b/screens/Home/HomeScreen.tsx @@ -5,9 +5,9 @@ import { Column, Text } from '../../components/ui'; import { Colors } from '../../components/ui/styleUtils'; import { HomeRouteProps } from '../../routes/main'; import { HistoryTab } from './HistoryTab'; -import { MyVidsTab } from './MyVidsTab'; -import { ReceivedVidsTab } from './ReceivedVidsTab'; -import { ViewVidModal } from './ViewVidModal'; +import { MyVcsTab } from './MyVcsTab'; +import { ReceivedVcsTab } from './ReceivedVcsTab'; +import { ViewVcModal } from './ViewVcModal'; import { ActorRefFrom } from 'xstate'; import { useHomeScreen } from './HomeScreenController'; @@ -34,19 +34,19 @@ export const HomeScreen: React.FC = (props) => { value={controller.activeTab} onChange={controller.SELECT_TAB} indicatorStyle={styles.tabIndicator}> - {TabItem(`My\n${controller.vidLabel.plural}`)} - {TabItem(`Received\n${controller.vidLabel.plural}`)} + {TabItem(`My\n${controller.VCLabel.plural}`)} + {TabItem(`Received\n${controller.VCLabel.plural}`)} {TabItem('History')} {controller.haveTabsLoaded && ( - - = (props) => { )} - {controller.selectedVid && ( - )} diff --git a/screens/Home/HomeScreenController.ts b/screens/Home/HomeScreenController.ts index a33cae12..833721cf 100644 --- a/screens/Home/HomeScreenController.ts +++ b/screens/Home/HomeScreenController.ts @@ -1,15 +1,15 @@ import { useInterpret, useSelector } from '@xstate/react'; import { useContext, useEffect, useRef } from 'react'; -import { selectVidLabel } from '../../machines/settings'; +import { selectVCLabel } from '../../machines/settings'; import { HomeRouteProps } from '../../routes/main'; import { GlobalContext } from '../../shared/GlobalContext'; import { HomeScreenEvents, HomeScreenMachine, selectActiveTab, - selectSelectedVid, + selectSelectedVc, selectTabsLoaded, - selectViewingVid, + selectViewingVc, } from './HomeScreenMachine'; export function useHomeScreen(props: HomeRouteProps) { @@ -33,10 +33,10 @@ export function useHomeScreen(props: HomeRouteProps) { service, activeTab: useSelector(service, selectActiveTab), - vidLabel: useSelector(settingsService, selectVidLabel), - selectedVid: useSelector(service, selectSelectedVid), + VCLabel: useSelector(settingsService, selectVCLabel), + selectedVc: useSelector(service, selectSelectedVc), - isViewingVid: useSelector(service, selectViewingVid), + isViewingVc: useSelector(service, selectViewingVc), haveTabsLoaded: useSelector(service, selectTabsLoaded), SELECT_TAB, @@ -45,8 +45,8 @@ export function useHomeScreen(props: HomeRouteProps) { function SELECT_TAB(index: number) { const tabs = [ - HomeScreenEvents.SELECT_MY_VIDS, - HomeScreenEvents.SELECT_RECEIVED_VIDS, + HomeScreenEvents.SELECT_MY_VCS, + HomeScreenEvents.SELECT_RECEIVED_VCS, HomeScreenEvents.SELECT_HISTORY, ]; service.send(tabs[index]()); diff --git a/screens/Home/HomeScreenMachine.ts b/screens/Home/HomeScreenMachine.ts index 3929164f..e98f830a 100644 --- a/screens/Home/HomeScreenMachine.ts +++ b/screens/Home/HomeScreenMachine.ts @@ -1,35 +1,35 @@ import { ActorRefFrom, EventFrom, send, spawn, StateFrom } from 'xstate'; import { createModel } from 'xstate/lib/model'; -import { vidItemMachine } from '../../machines/vidItem'; +import { vcItemMachine } from '../../machines/vcItem'; import { AppServices } from '../../shared/GlobalContext'; import { createHistoryTabMachine, HistoryTabMachine, } from './HistoryTabMachine'; -import { createMyVidsTabMachine, MyVidsTabMachine } from './MyVidsTabMachine'; +import { createMyVcsTabMachine, MyVcsTabMachine } from './MyVcsTabMachine'; import { - createReceivedVidsTabMachine, - ReceivedVidsTabMachine, -} from './ReceivedVidsTabMachine'; + createReceivedVcsTabMachine, + ReceivedVcsTabMachine, +} from './ReceivedVcsTabMachine'; const model = createModel( { serviceRefs: {} as AppServices, tabRefs: { - myVids: {} as ActorRefFrom, - receivedVids: {} as ActorRefFrom, + myVcs: {} as ActorRefFrom, + receivedVcs: {} as ActorRefFrom, history: {} as ActorRefFrom, }, - selectedVid: null as ActorRefFrom, + selectedVc: null as ActorRefFrom, activeTab: 0, }, { events: { - SELECT_MY_VIDS: () => ({}), - SELECT_RECEIVED_VIDS: () => ({}), + SELECT_MY_VCS: () => ({}), + SELECT_RECEIVED_VCS: () => ({}), SELECT_HISTORY: () => ({}), - VIEW_VID: (vidItemActor: ActorRefFrom) => ({ - vidItemActor, + VIEW_VC: (vcItemActor: ActorRefFrom) => ({ + vcItemActor, }), DISMISS_MODAL: () => ({}), }, @@ -38,7 +38,7 @@ const model = createModel( export const HomeScreenEvents = model.events; -type ViewVidEvent = EventFrom; +type ViewVcEvent = EventFrom; export const HomeScreenMachine = model.createMachine( { @@ -50,36 +50,36 @@ export const HomeScreenMachine = model.createMachine( id: 'tabs', initial: 'init', on: { - SELECT_MY_VIDS: '.myVids', - SELECT_RECEIVED_VIDS: '.receivedVids', + SELECT_MY_VCS: '.myVcs', + SELECT_RECEIVED_VCS: '.receivedVcs', SELECT_HISTORY: '.history', }, states: { init: { entry: ['spawnTabActors'], after: { - 100: 'myVids', + 100: 'myVcs', }, }, - myVids: { + myVcs: { entry: [setActiveTab(0)], on: { DISMISS_MODAL: { actions: [ send('DISMISS', { - to: (context) => context.tabRefs.myVids, + to: (context) => context.tabRefs.myVcs, }), ], }, }, }, - receivedVids: { + receivedVcs: { entry: [setActiveTab(1)], on: { DISMISS_MODAL: { actions: [ send('DISMISS', { - to: (context) => context.tabRefs.receivedVids, + to: (context) => context.tabRefs.receivedVcs, }), ], }, @@ -94,15 +94,15 @@ export const HomeScreenMachine = model.createMachine( initial: 'none', states: { none: { - entry: ['resetSelectedVid'], + entry: ['resetSelectedVc'], on: { - VIEW_VID: { - target: 'viewingVid', - actions: ['setSelectedVid'], + VIEW_VC: { + target: 'viewingVc', + actions: ['setSelectedVc'], }, }, }, - viewingVid: { + viewingVc: { on: { DISMISS_MODAL: 'none', }, @@ -115,13 +115,13 @@ export const HomeScreenMachine = model.createMachine( actions: { spawnTabActors: model.assign({ tabRefs: (context) => ({ - myVids: spawn( - createMyVidsTabMachine(context.serviceRefs), - 'myVidsTab' + myVcs: spawn( + createMyVcsTabMachine(context.serviceRefs), + 'MyVcsTab' ), - receivedVids: spawn( - createReceivedVidsTabMachine(context.serviceRefs), - 'receivedVidsTab' + receivedVcs: spawn( + createReceivedVcsTabMachine(context.serviceRefs), + 'receivedVcsTab' ), history: spawn( createHistoryTabMachine(context.serviceRefs), @@ -130,12 +130,12 @@ export const HomeScreenMachine = model.createMachine( }), }), - setSelectedVid: model.assign({ - selectedVid: (_, event: ViewVidEvent) => event.vidItemActor, + setSelectedVc: model.assign({ + selectedVc: (_, event: ViewVcEvent) => event.vcItemActor, }), - resetSelectedVid: model.assign({ - selectedVid: null, + resetSelectedVc: model.assign({ + selectedVc: null, }), }, } @@ -151,12 +151,12 @@ export function selectActiveTab(state: State) { return state.context.activeTab; } -export function selectSelectedVid(state: State) { - return state.context.selectedVid; +export function selectSelectedVc(state: State) { + return state.context.selectedVc; } -export function selectViewingVid(state: State) { - return state.matches('modals.viewingVid'); +export function selectViewingVc(state: State) { + return state.matches('modals.viewingVc'); } export function selectTabsLoaded(state: State) { diff --git a/screens/Home/MyVids/AddVidModal.tsx b/screens/Home/MyVcs/AddVcModal.tsx similarity index 79% rename from screens/Home/MyVids/AddVidModal.tsx rename to screens/Home/MyVcs/AddVcModal.tsx index f12e1f85..4cb52077 100644 --- a/screens/Home/MyVids/AddVidModal.tsx +++ b/screens/Home/MyVcs/AddVcModal.tsx @@ -1,11 +1,11 @@ import React from 'react'; import { MessageOverlay } from '../../../components/MessageOverlay'; -import { AddVidModalProps, useAddVidModal } from './AddVidModalController'; +import { AddVcModalProps, useAddVcModal } from './AddVcModalController'; import { OtpVerificationModal } from './OtpVerificationModal'; import { IdInputModal } from './IdInputModal'; -export const AddVidModal: React.FC = (props) => { - const controller = useAddVidModal(props); +export const AddVcModal: React.FC = (props) => { + const controller = useAddVcModal(props); return ( diff --git a/screens/Home/MyVids/AddVidModalController.ts b/screens/Home/MyVcs/AddVcModalController.ts similarity index 57% rename from screens/Home/MyVids/AddVidModalController.ts rename to screens/Home/MyVcs/AddVcModalController.ts index 464a884e..feec13e2 100644 --- a/screens/Home/MyVids/AddVidModalController.ts +++ b/screens/Home/MyVcs/AddVcModalController.ts @@ -1,15 +1,15 @@ import { useSelector } from '@xstate/react'; import { ActorRefFrom } from 'xstate'; import { - AddVidModalEvents, - AddVidModalMachine, + AddVcModalEvents, + AddVcModalMachine, selectIsAcceptingOtpInput, selectIsRequestingCredential, selectOtpError, selectIsAcceptingIdInput, -} from './AddVidModalMachine'; +} from './AddVcModalMachine'; -export function useAddVidModal({ service }: AddVidModalProps) { +export function useAddVcModal({ service }: AddVcModalProps) { return { isRequestingCredential: useSelector(service, selectIsRequestingCredential), @@ -18,12 +18,12 @@ export function useAddVidModal({ service }: AddVidModalProps) { isAcceptingUinInput: useSelector(service, selectIsAcceptingIdInput), isAcceptingOtpInput: useSelector(service, selectIsAcceptingOtpInput), - INPUT_OTP: (otp: string) => service.send(AddVidModalEvents.INPUT_OTP(otp)), + INPUT_OTP: (otp: string) => service.send(AddVcModalEvents.INPUT_OTP(otp)), - DISMISS: () => service.send(AddVidModalEvents.DISMISS()), + DISMISS: () => service.send(AddVcModalEvents.DISMISS()), }; } -export interface AddVidModalProps { - service: ActorRefFrom; +export interface AddVcModalProps { + service: ActorRefFrom; } diff --git a/screens/Home/MyVids/AddVidModalMachine.ts b/screens/Home/MyVcs/AddVcModalMachine.ts similarity index 96% rename from screens/Home/MyVids/AddVidModalMachine.ts rename to screens/Home/MyVcs/AddVcModalMachine.ts index 8f0c9feb..2315b908 100644 --- a/screens/Home/MyVids/AddVidModalMachine.ts +++ b/screens/Home/MyVcs/AddVcModalMachine.ts @@ -9,7 +9,7 @@ import { } from 'xstate'; import { createModel } from 'xstate/lib/model'; import { BackendResponseError, request } from '../../../shared/request'; -import { VID_ITEM_STORE_KEY } from '../../../shared/constants'; +import { VC_ITEM_STORE_KEY } from '../../../shared/constants'; import { VcIdType } from '../../../types/vc'; const model = createModel( @@ -35,16 +35,16 @@ const model = createModel( } ); -export const AddVidModalEvents = model.events; +export const AddVcModalEvents = model.events; type ReadyEvent = EventFrom; type InputIdEvent = EventFrom; type InputOtpEvent = EventFrom; type SelectIdTypeEvent = EventFrom; -export const AddVidModalMachine = model.createMachine( +export const AddVcModalMachine = model.createMachine( { - id: 'AddVidModal', + id: 'AddVcModal', context: model.initialContext, initial: 'acceptingIdInput', states: { @@ -162,7 +162,7 @@ export const AddVidModalMachine = model.createMachine( }, done: { type: 'final', - data: (context) => VID_ITEM_STORE_KEY(context), + data: (context) => VC_ITEM_STORE_KEY(context), }, }, }, @@ -254,7 +254,7 @@ export const AddVidModalMachine = model.createMachine( } ); -type State = StateFrom; +type State = StateFrom; export function selectId(state: State) { return state.context.id; diff --git a/screens/Home/MyVids/DownloadingVidModal.tsx b/screens/Home/MyVcs/DownloadingVcModal.tsx similarity index 68% rename from screens/Home/MyVids/DownloadingVidModal.tsx rename to screens/Home/MyVcs/DownloadingVcModal.tsx index 7b7ff211..9cf2548f 100644 --- a/screens/Home/MyVids/DownloadingVidModal.tsx +++ b/screens/Home/MyVcs/DownloadingVcModal.tsx @@ -1,21 +1,21 @@ import React from 'react'; import { Button, Column, Text } from '../../../components/ui'; import { Modal, ModalProps } from '../../../components/ui/Modal'; -import { useDownloadingvidModal } from './DownloadingVidModalController'; +import { useDownloadingvcModal } from './DownloadingVcModalController'; -export const DownloadingVidModal: React.FC = (props) => { - const controller = useDownloadingvidModal(); +export const DownloadingVcModal: React.FC = (props) => { + const controller = useDownloadingvcModal(); return ( - Downloading your {controller.vidLabel.singular} + Downloading your {controller.VCLabel.singular} This may take some time, we will{'\n'}notify you when your{' '} - {controller.vidLabel.singular} has been{'\n'}downloaded and is + {controller.VCLabel.singular} has been{'\n'}downloaded and is available diff --git a/screens/Home/MyVids/DownloadingVidModalController.ts b/screens/Home/MyVcs/DownloadingVcModalController.ts similarity index 62% rename from screens/Home/MyVids/DownloadingVidModalController.ts rename to screens/Home/MyVcs/DownloadingVcModalController.ts index 1d0e464f..fa474793 100644 --- a/screens/Home/MyVids/DownloadingVidModalController.ts +++ b/screens/Home/MyVcs/DownloadingVcModalController.ts @@ -1,13 +1,13 @@ import { useSelector } from '@xstate/react'; import { useContext } from 'react'; -import { selectVidLabel } from '../../../machines/settings'; +import { selectVCLabel } from '../../../machines/settings'; import { GlobalContext } from '../../../shared/GlobalContext'; -export function useDownloadingvidModal() { +export function useDownloadingvcModal() { const { appService } = useContext(GlobalContext); const settingsService = appService.children.get('settings'); return { - vidLabel: useSelector(settingsService, selectVidLabel), + VCLabel: useSelector(settingsService, selectVCLabel), }; } diff --git a/screens/Home/MyVids/IdInputModal.tsx b/screens/Home/MyVcs/IdInputModal.tsx similarity index 95% rename from screens/Home/MyVids/IdInputModal.tsx rename to screens/Home/MyVcs/IdInputModal.tsx index 611abb63..2f58f248 100644 --- a/screens/Home/MyVids/IdInputModal.tsx +++ b/screens/Home/MyVcs/IdInputModal.tsx @@ -15,7 +15,7 @@ export const IdInputModal: React.FC = (props) => { Enter the MOSIP-provided UIN or VID{'\n'}of the{' '} - {controller.vidLabel.singular} you wish to retrieve + {controller.VCLabel.singular} you wish to retrieve @@ -55,7 +55,7 @@ export const IdInputModal: React.FC = (props) => {