diff --git a/src/pages/digitalId/ProfileId.jsx b/src/pages/digitalId/ProfileId.jsx index 04cc9ce..7819184 100644 --- a/src/pages/digitalId/ProfileId.jsx +++ b/src/pages/digitalId/ProfileId.jsx @@ -1,14 +1,12 @@ import React, { useState } from 'react'; +import { userDataStore } from '../../store/userDataStore'; import Sidebar from '../../partials/Sidebar'; +import { observer } from 'mobx-react-lite'; import Header from '../../partials/Header'; import ProfileTable from '../../partials/digitalId/ProfileTable'; import Image from '../../images/transactions-image-04.svg'; -import ProfileIcon from '../../images/profile-icon.svg'; -import Avatar01 from '../../images/avatar-01.jpg'; -import Avatar02 from '../../images/avatar-02.jpg'; -import Avatar03 from '../../images/avatar-03.jpg'; -function Profile () { +const Profile = observer (() => { const [sidebarOpen, setSidebarOpen] = useState(false); const [buttonPanelOpen, setButtonPanelOpen] = useState(true); const [removePanelOpen, setRemovePanelOpen] = useState(false); @@ -68,7 +66,7 @@ function Profile () { } const sendValues = () => { - if (!userData.some((element) => element.property === currentValues.property) && (currentValues.seed.toString().length === 20)) { + if (!userDataStore.decryptedData.some((element) => element.property === currentValues.property) && (currentValues.seed.toString().length === 20)) { setAddPanelOpen(false); setButtonPanelOpen(true); setCurrentValues(defaultValues); @@ -100,141 +98,6 @@ function Profile () { } }; - const userData = [ - { - id: '0', - category: 'General', - validated: true, - blockchained: true, - image: ProfileIcon, - value: 'Dominik', - property: 'First name', - status: 'Completed', - transactions: ['0x7234ABC342342352345', '0x5745DEF342342352345'], - avatars: [Avatar01, Avatar02, Avatar03] - }, - { - id: '1', - category: 'General', - validated: true, - blockchained: true, - image: ProfileIcon, - value: 'Lamakani', - property: 'Second name', - status: 'Progress', - transactions: ['0x7234ABC342342352345', '0x5745DEF342342352345'], - avatars: null - }, - { - id: '2', - category: 'General', - validated: true, - blockchained: true, - image: ProfileIcon, - value: '05.10.1983', - property: 'Birthdate', - status: 'Incorrect', - transactions: ['0x7234ABC342342352345', '0x5745DEF342342352345'], - avatars: null - }, - { - id: '3', - category: 'General', - validated: true, - blockchained: true, - image: ProfileIcon, - value: 'Male', - property: 'Gender', - status: 'Stored', - transactions: ['0x7234ABC342342352345', '0x5745DEF342342352345'], - avatars: null - }, - { - id: '4', - category: 'Nationality', - validated: true, - blockchained: true, - image: ProfileIcon, - value: 'United Kindom', - property: 'Residence', - status: 'Completed', - transactions: ['0x7234ABC342342352345', '0x5745DEF342342352345'], - avatars: [Avatar01, Avatar02, Avatar03] - }, - { - id: '5', - category: 'Nationality', - validated: true, - blockchained: true, - image: ProfileIcon, - value: 'Passport', - property: 'Document type', - status: 'Progress', - transactions: ['0x7234ABC342342352345', '0x5745DEF342342352345'], - avatars: [Avatar01, Avatar02, Avatar03] - }, - { - id: '6', - category: 'Nationality', - validated: true, - blockchained: true, - image: ProfileIcon, - value: 'A123B3143', - property: 'Document ID', - status: 'Incorrect', - transactions: ['0x7234ABC342342352345', '0x5745DEF342342352345'], - avatars: null - }, - { - id: '7', - category: 'Nationality', - validated: true, - blockchained: true, - image: ProfileIcon, - value: '05.10.2012', - property: 'Issue date', - status: 'Stored', - transactions: ['0x7234ABC342342352345', '0x5745DEF342342352345'], - avatars: null - }, - { - id: '8', - category: 'Nationality', - validated: true, - blockchained: true, - image: ProfileIcon, - value: '05.10.2032', - property: 'Expiry date', - status: 'Stored', - transactions: ['0x7234ABC342342352345', '0x5745DEF342342352345'], - avatars: null - }, - { - id: '9', - category: 'Social', - validated: true, - blockchained: true, - image: ProfileIcon, - value: '@lamakani', - property: 'Telegram', - status: 'Completed', - transactions: ['0x7234ABC342342352345', '0x5745DEF342342352345'], - avatars: null - }, - { - id: '10', - category: 'Social', - validated: true, - blockchained: true, - image: ProfileIcon, - value: '@lamakani', - property: 'Telegram', - status: 'Progress', - transactions: ['0x7234ABC342342352345', '0x5745DEF342342352345'], - avatars: [Avatar01, Avatar02, Avatar03] - }, - ] - return (
{/* Sidebar */} @@ -268,7 +131,7 @@ function Profile () {
{/* Table */} - + {/* Left sidebar */}
@@ -368,8 +231,8 @@ function Profile () {

Summary

- {userData.filter(({ id }) => selectedItems.includes(id)).map(item => ( - {item.property} + {userDataStore.decryptedData.filter(({ label }) => selectedItems.includes(label)).map(item => ( + {item.label} ))}
@@ -470,6 +333,6 @@ function Profile () {
) -} +}) -export default Profile; \ No newline at end of file +export default Profile \ No newline at end of file diff --git a/src/partials/digitalId/ProfileTable.jsx b/src/partials/digitalId/ProfileTable.jsx index cadad05..b65797b 100644 --- a/src/partials/digitalId/ProfileTable.jsx +++ b/src/partials/digitalId/ProfileTable.jsx @@ -1,5 +1,6 @@ import React, {useState, useEffect} from 'react'; import ProfileTableItem from './ProfileTableItem'; +import ProfileIcon from '../../images/profile-icon.svg'; function ProfileTable({ selectedItems, @@ -8,6 +9,13 @@ function ProfileTable({ const [isCheck, setIsCheck] = useState([]); + const defaultData = { + image: ProfileIcon, + status: 'Stored', + transactions: ['0x7234ABC342342352345', '0x5745DEF342342352345'], + avatars: null + } + useEffect(() => { selectedItems(isCheck); // eslint-disable-next-line react-hooks/exhaustive-deps @@ -21,85 +29,123 @@ function ProfileTable({ } }; + const data = { + general:["First name","Second name", "Gender", "Birthdate", "Place of birth"], + nationality:["Nationality", "National id", "National doctype", "National doc id", "National doc issue date", "National doc expiry date"], + social:["Telephone", "Twitter", "Facebook", "Instagram", "Youtube", "Wechat", "Tiktok", "Linkedin", "Vk", "Github", "Telegram", "Qq", "Snapchat", "Reddit"] + } + + const generalData = userData.filter(elem => data.general.includes(elem.label)), + nationalityData = userData.filter(elem => data.nationality.includes(elem.label)), + sosialData = userData.filter(elem => data.nationality.includes(elem.label)), + otherData = userData.filter((elem) => + !data.general.includes(elem.label) && !data.nationality.includes(elem.label) && !data.social.includes(elem.label)); + return ( <> {/* General */} -

General 🖋️

-
- - - {userData.filter(data => data.category === 'General') - .map(data => { +
0 || 'hidden'}`}> +

General 🖋️

+
+
+ + {generalData.map((data) => { return ( ) - }) - } - -
+ })} + + +
{/* Nationality */} -

Nationality 🖋️

-
- - - {userData.filter(data => data.category === 'Nationality') - .map(data => { +
0 || 'hidden'}`}> +

Nationality 🖋️

+
+
+ + {nationalityData.map(data => { return ( ) - }) - } - -
+ })} + + +
{/* Social */} -

Social 🖋️

-
- - - {userData.filter(data => data.category === 'Social') - .map(data => { - return ( - - ) - }) - } - -
+
0 || 'hidden'}`}> +

Social 🖋️

+
+ + + {sosialData.map(data => { + return ( + + ) + })} + +
+
+
+ {/* Other */} +
0 || 'hidden'}`}> +

Other 🖋️

+
+ + + {otherData.map(data => { + return ( + + ) + })} + +
+
) diff --git a/src/store/store.js b/src/store/store.js index 80ebc8b..390588c 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -10,6 +10,8 @@ class Store { _nodeInfo = {} + _userData = {} + constructor() { makeAutoObservable(this); @@ -18,15 +20,18 @@ class Store { reaction(() => this.tokenKey, () => fetchWrapper.getAuth('http://3.125.47.101/api/data/account', { networkIdentifier: this.nodeInfo.networkIdentifier, lastBlockID: this.nodeInfo.lastBlockID - })) + }).then((res) => this.userDataFetchChange(res))) }; fetchCreateNewAccount() { fetchWrapper.postAuth('http://3.125.47.101/api/data/account', { networkIdentifier: this.nodeInfo.networkIdentifier, lastBlockID: this.nodeInfo.lastBlockID - }, [...this.encryptAccountData]) - .catch(()=>{}) + }, [...this.encryptAccountData]).catch(()=>{}) + }; + + userDataFetchChange(res) { + this._userData = res; } savePassPhrase(phrase) { @@ -51,6 +56,10 @@ class Store { console.log(err) } + get userData() { + return this._userData; + } + get passPhrase() { return 'rocket north inform swift improve fringe sweet crew client canyon bean autumn' } diff --git a/src/store/userDataStore.js b/src/store/userDataStore.js new file mode 100644 index 0000000..2dd65ab --- /dev/null +++ b/src/store/userDataStore.js @@ -0,0 +1,53 @@ +import { cryptography } from "@liskhq/lisk-client"; +import { makeAutoObservable, reaction } from "mobx"; +import { registrationStore } from './store'; + +const labelMap = { + first_name: 'First name', + second_name: 'Second name', + gender: "Gender", + birthdate: "Birthdate", + place_of_birth: "Place of birth", + nationality: "Nationality", + national_id: "National id", + national_doctype: "National doctype", + national_doc_id: "National doc id", + national_doc_issue_date: "National doc issue date", + national_doc_expiry_date: "National doc expiry date", + telephone: "Telephone", + twitter: "Twitter", + facebook: "Facebook", + instagram: "Instagram", + youtube: "Youtube", + wechat: "Wechat", + tiktok: "Tiktok", + linkedin: "Linkedin", + vk: "Vk", + github: "Github", + telegram: "Telegram", + qq: "Qq", + snapchat: "Snapchat", + reddit: "Reddit" +}; + +class UserDataStore{ + _data = []; + + constructor() { + makeAutoObservable(this); + + reaction(() => ({data: registrationStore.userData}), ({data}) => { + this._data = data.data; + }) + } + + get decryptedData(){ + return this._data.map((elem) => ({ + ...elem, + label: labelMap[elem.label], + value: cryptography.decryptMessageWithPassphrase(elem.value, elem.value_nonce, registrationStore.passPhrase, registrationStore.pubKey).split(':')[1] + })) + } +} + +export const userDataStore = new UserDataStore(); \ No newline at end of file