Files
inji-wallet/screens/Home/HomeScreen.tsx
KiruthikaJeyashankar 55c666b121 feat: download credentials from Esignet using openId4VCI (#851)
* feat(INJI-245): dowload and view card via issuers

Co-authored-by: Harsh Vardhan <harsh59v@gmail.com>

* fix(INJI-245): remove vc from wallet

Co-authored-by: Harsh Vardhan <harsh59v@gmail.com>

* feat(INJI-245): pin card downloaded via eSignet

* refactor(INJI-245): remove debug logs

* refactor(INJI-245): rename vcItem related component to ExistingVcItem

* refactor(INJI-245): add lock file modifications

* refactor(INJI-245): add styles in purple theme for issuer related components

* refactor(INJI-245): update VID for wallet binding usecase and issuer logo display in vc

* refactor(INJI-245): remove duplicate loader component

* refactor(INJI-245): remove unused props in vc details container

---------

Co-authored-by: Harsh Vardhan <harsh59v@gmail.com>
Co-authored-by: Vijay <94220135+vijay151096@users.noreply.github.com>
2023-09-22 17:22:59 +05:30

114 lines
3.3 KiB
TypeScript

import React, {useEffect} from 'react';
import {Icon, Tab} from 'react-native-elements';
import {Button, Column, Text} from '../../components/ui';
import {Theme} from '../../components/ui/styleUtils';
import {HomeRouteProps} from '../../routes/main';
import {MyVcsTab} from './MyVcsTab';
import {ReceivedVcsTab} from './ReceivedVcsTab';
import {ViewVcModal} from './ViewVcModal';
import {useHomeScreen} from './HomeScreenController';
import {TabRef} from './HomeScreenMachine';
import {useTranslation} from 'react-i18next';
import {ActorRefFrom} from 'xstate';
import {ExistingMosipVCItemMachine} from '../../machines/VCItemMachine/ExistingMosipVCItem/ExistingMosipVCItemMachine';
import {isOpenId4VCIEnabled} from '../../shared/openId4VCI/Utils';
import LinearGradient from 'react-native-linear-gradient';
import {EsignetMosipVCItemMachine} from '../../machines/VCItemMachine/EsignetMosipVCItem/EsignetMosipVCItemMachine';
export const HomeScreen: React.FC<HomeRouteProps> = props => {
const {t} = useTranslation('HomeScreen');
const controller = useHomeScreen(props);
useEffect(() => {
if (controller.IssuersService) {
navigateToIssuers();
}
}, [controller.IssuersService]);
const navigateToIssuers = () => {
props.navigation.navigate('IssuersScreen', {
service: controller.IssuersService,
});
};
const DownloadFABIcon: React.FC = () => {
const plusIcon = (
<Icon
name={'plus'}
type={'entypo'}
size={36}
color={Theme.Colors.whiteText}
/>
);
return (
<LinearGradient
colors={Theme.Colors.gradientBtn}
style={Theme.Styles.downloadFabIcon}>
<Button
testID="downloadIcon"
icon={plusIcon}
onPress={() => {
controller.GOTO_ISSUERS();
}}
type={'clearAddIdBtnBg'}
fill
/>
</LinearGradient>
);
};
return (
<React.Fragment>
<Column fill backgroundColor={Theme.Colors.lightGreyBackgroundColor}>
{controller.haveTabsLoaded && (
<Column fill>
<MyVcsTab
isVisible={controller.activeTab === 0}
service={controller.tabRefs.myVcs}
vcItemActor={controller.selectedVc}
/>
<ReceivedVcsTab
isVisible={controller.activeTab === 1}
service={controller.tabRefs.receivedVcs}
vcItemActor={controller.selectedVc}
/>
</Column>
)}
</Column>
{isOpenId4VCIEnabled() && <DownloadFABIcon />}
{controller.selectedVc && (
<ViewVcModal
isVisible={controller.isViewingVc}
onDismiss={controller.DISMISS_MODAL}
vcItemActor={controller.selectedVc}
onRevokeDelete={() => {
controller.REVOKE();
}}
activeTab={controller.activeTab}
/>
)}
</React.Fragment>
);
};
function TabItem(title: string) {
return (
<Tab.Item
containerStyle={Theme.Styles.tabContainer}
title={
<Text align="center" color={Theme.Colors.TabItemText}>
{title}
</Text>
}
/>
);
}
export interface HomeScreenTabProps {
isVisible: boolean;
service: TabRef;
vcItemActor:
| ActorRefFrom<typeof ExistingMosipVCItemMachine>
| ActorRefFrom<typeof EsignetMosipVCItemMachine>;
}