Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
47dfcf347c | ||
|
|
e837f7cc89 |
@@ -7,6 +7,14 @@ import Header from '../../partials/Header';
|
|||||||
import ProfileTable from '../../partials/digitalId/ProfileTable';
|
import ProfileTable from '../../partials/digitalId/ProfileTable';
|
||||||
import Image from '../../images/transactions-image-04.svg';
|
import Image from '../../images/transactions-image-04.svg';
|
||||||
|
|
||||||
|
const defaultValues = {
|
||||||
|
label: '',
|
||||||
|
value: '',
|
||||||
|
seed: String(Math.floor(Math.random() * 90000000000000000000), 10)
|
||||||
|
};
|
||||||
|
|
||||||
|
const initialPropertyValues = ['First name', 'Second name', 'Birthdate', 'Gender', 'National doctype', 'National doc ID', 'National doc issue date', 'National doc expiry date'];
|
||||||
|
|
||||||
const Profile = observer (() => {
|
const Profile = observer (() => {
|
||||||
const [sidebarOpen, setSidebarOpen] = useState(false);
|
const [sidebarOpen, setSidebarOpen] = useState(false);
|
||||||
const [buttonPanelOpen, setButtonPanelOpen] = useState(true);
|
const [buttonPanelOpen, setButtonPanelOpen] = useState(true);
|
||||||
@@ -16,14 +24,6 @@ const Profile = observer (() => {
|
|||||||
const [addPanelOpen, setAddPanelOpen] = useState(false);
|
const [addPanelOpen, setAddPanelOpen] = useState(false);
|
||||||
const [updatePanelOpen, setUpdatePanelOpen] = useState(false);
|
const [updatePanelOpen, setUpdatePanelOpen] = useState(false);
|
||||||
const [selectedItems, setSelectedItems] = useState([]);
|
const [selectedItems, setSelectedItems] = useState([]);
|
||||||
|
|
||||||
const defaultValues = {
|
|
||||||
label: '',
|
|
||||||
value: '',
|
|
||||||
seed: Math.floor(Math.random() * 90000000000000000000)
|
|
||||||
};
|
|
||||||
|
|
||||||
const initialPropertyValues = ['First name', 'Second name', 'Birthdate', 'Gender', 'National doctype', 'National doc id', 'National doc issue date', 'National doc expiry date'];
|
|
||||||
const [propertyValues, setPropertyValues] = useState([]);
|
const [propertyValues, setPropertyValues] = useState([]);
|
||||||
const [updatedValues, setUpdatedValues] = useState([defaultValues]);
|
const [updatedValues, setUpdatedValues] = useState([defaultValues]);
|
||||||
const [addedValues, setAddedValues] = useState(defaultValues);
|
const [addedValues, setAddedValues] = useState(defaultValues);
|
||||||
@@ -35,43 +35,41 @@ const Profile = observer (() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const changeAddedValues = (value, field) => {
|
const changeAddedValues = (value, field) => {
|
||||||
setAddedValues((prevState) => (
|
setAddedValues((prevState) => ({
|
||||||
field !== 'seed' ? {
|
|
||||||
...prevState,
|
...prevState,
|
||||||
[field]: value
|
[field]: value
|
||||||
} : {
|
|
||||||
...prevState,
|
|
||||||
[field]: +value,
|
|
||||||
}))
|
}))
|
||||||
};
|
};
|
||||||
|
|
||||||
const changeUpdatedValues = (value, field, key) => {
|
const changeUpdatedValues = (value, field, key) => {
|
||||||
setUpdatedValues((prevState) =>
|
setUpdatedValues((prevState) =>
|
||||||
prevState.map((elem) => (
|
prevState.map((elem) => (
|
||||||
(elem.key === key && field !== 'seed') ? {
|
|
||||||
...elem,
|
|
||||||
[field]: value,
|
|
||||||
} :
|
|
||||||
(elem.key === key) ? {
|
(elem.key === key) ? {
|
||||||
...elem,
|
...elem,
|
||||||
[field]: +value,
|
[field]: value,
|
||||||
} : elem
|
} : elem
|
||||||
))
|
))
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
const closeHint = (element) => {
|
const selectHint = (element) => {
|
||||||
changeAddedValues(element, 'label');
|
changeAddedValues(element, 'label');
|
||||||
setPropertyValues([]);
|
setPropertyValues([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const closeHint = (eventTarget) => {
|
||||||
|
if (!eventTarget || eventTarget.tabIndex !== -1) {
|
||||||
|
setPropertyValues([]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const handleSelectedItems = (selectedItems) => {
|
const handleSelectedItems = (selectedItems) => {
|
||||||
setSelectedItems([...selectedItems]);
|
setSelectedItems([...selectedItems]);
|
||||||
setUpdatedValues(userDataStore.decryptedData.filter(({ key }) => selectedItems.includes(key))
|
setUpdatedValues(userDataStore.decryptedData.filter(({ key }) => selectedItems.includes(key))
|
||||||
.map(elem => (
|
.map(elem => (
|
||||||
(!elem.seed) ? {
|
(!elem.seed) ? {
|
||||||
...elem,
|
...elem,
|
||||||
seed: Math.floor(Math.random() * 90000000000000000000)
|
seed: String(Math.floor(Math.random() * 90000000000000000000), 10)
|
||||||
}: elem)));
|
}: elem)));
|
||||||
if (selectedItems.length > 0) {
|
if (selectedItems.length > 0) {
|
||||||
setButtonPanelOpen(false);
|
setButtonPanelOpen(false);
|
||||||
@@ -95,7 +93,9 @@ const Profile = observer (() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const sendAddedData = () => {
|
const sendAddedData = () => {
|
||||||
if (!userDataStore.decryptedData.some((element) => element.label === addedValues.label) && (addedValues.seed.toString().length === 20)) {
|
const checkingAddedData = !userDataStore.decryptedData
|
||||||
|
.some((element) => element.label === addedValues.label) && (addedValues.seed.length === 20);
|
||||||
|
if (checkingAddedData) {
|
||||||
setAddPanelOpen(false);
|
setAddPanelOpen(false);
|
||||||
setButtonPanelOpen(true);
|
setButtonPanelOpen(true);
|
||||||
setAddedValues(defaultValues);
|
setAddedValues(defaultValues);
|
||||||
@@ -232,9 +232,8 @@ const Profile = observer (() => {
|
|||||||
</div>
|
</div>
|
||||||
<div className="ml-2.5">
|
<div className="ml-2.5">
|
||||||
{/* Add panel */}
|
{/* Add panel */}
|
||||||
<div className={`${!addPanelOpen && 'hidden'} bg-white p-5 shadow-lg rounded-sm border border-slate-200 lg:w-72 xl:w-80 mb-11`}>
|
<div className={`${!addPanelOpen && 'hidden'} relative flex flex-col bg-white p-5 shadow-lg rounded-sm border border-slate-200 lg:w-72 xl:w-80 mb-11`}>
|
||||||
<div className="flex flex-col gap-y-3">
|
<div className='relative z-20'>
|
||||||
<div>
|
|
||||||
<label className="block text-sm font-medium mb-1" htmlFor="mandatory">Property <span className="text-rose-500">*</span></label>
|
<label className="block text-sm font-medium mb-1" htmlFor="mandatory">Property <span className="text-rose-500">*</span></label>
|
||||||
<input
|
<input
|
||||||
autoComplete='off'
|
autoComplete='off'
|
||||||
@@ -245,16 +244,17 @@ const Profile = observer (() => {
|
|||||||
onInput={(e) => handleInput(e.target.value, 'label')}
|
onInput={(e) => handleInput(e.target.value, 'label')}
|
||||||
value={addedValues.label}
|
value={addedValues.label}
|
||||||
onClick={openHint}
|
onClick={openHint}
|
||||||
|
onBlur={(e) => closeHint(e.relatedTarget)}
|
||||||
/>
|
/>
|
||||||
<div className={`flex flex-col gap-y-2 py-2 pl-2 border border-t-0 border-slate-200 rounded ${(propertyValues.length > 0) || 'hidden'}`}>
|
<div tabIndex='-1' className={`absolute w-full box-border bg-white flex flex-col gap-y-2 py-2 pl-2 border border-t-0 border-slate-200 rounded ${(propertyValues.length > 0) || 'hidden'}`}>
|
||||||
<ul>
|
<ul>
|
||||||
{propertyValues.map((element, index) => (
|
{propertyValues.map((element, index) => (
|
||||||
<li key={index} onClick={() => closeHint(element)}>{element}</li>
|
<li className='hover:text-indigo-600 cursor-pointer' key={index} onClick={() => selectHint(element)}>{element}</li>
|
||||||
))}
|
))}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div className='my-3 z-10'>
|
||||||
<label className="block text-sm font-medium mb-1" htmlFor="mandatory">Value <span className="text-rose-500">*</span></label>
|
<label className="block text-sm font-medium mb-1" htmlFor="mandatory">Value <span className="text-rose-500">*</span></label>
|
||||||
<input
|
<input
|
||||||
autoComplete='off'
|
autoComplete='off'
|
||||||
@@ -267,7 +267,7 @@ const Profile = observer (() => {
|
|||||||
value={addedValues.value}
|
value={addedValues.value}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div className='z-10'>
|
||||||
<label className="block text-sm font-medium mb-1" htmlFor="mandatory">Seed <span className="text-rose-500">*</span></label>
|
<label className="block text-sm font-medium mb-1" htmlFor="mandatory">Seed <span className="text-rose-500">*</span></label>
|
||||||
<input
|
<input
|
||||||
autoComplete='off'
|
autoComplete='off'
|
||||||
@@ -280,8 +280,7 @@ const Profile = observer (() => {
|
|||||||
value={addedValues.seed}
|
value={addedValues.seed}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div className="flex flex-row z-10 justify-between pt-[18px] pb-[23px] items-center border-b border-slate-200">
|
||||||
<div className="flex flex-row justify-between pt-[16px] pb-[23px] items-center border-b border-slate-200">
|
|
||||||
<span className="block text-sm font-medium">Store data on blockchain</span>
|
<span className="block text-sm font-medium">Store data on blockchain</span>
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<div className="form-switch">
|
<div className="form-switch">
|
||||||
@@ -293,7 +292,7 @@ const Profile = observer (() => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/* Buttons */}
|
{/* Buttons */}
|
||||||
<div className="flex flex-row justify-end gap-x-2 pt-[18px] pb-[14px] items-end">
|
<div className="flex flex-row z-10 justify-end gap-x-2 pt-[18px] pb-[14px] items-end">
|
||||||
<button
|
<button
|
||||||
className="btn-sm bg-white border-slate-200 hover:bg-slate-50 text-slate-600"
|
className="btn-sm bg-white border-slate-200 hover:bg-slate-50 text-slate-600"
|
||||||
onClick={cancelAddPanel}
|
onClick={cancelAddPanel}
|
||||||
|
|||||||
Reference in New Issue
Block a user