From 24a8be727c6c72e361dd5a09256d08e63b422339 Mon Sep 17 00:00:00 2001 From: Sosthene Date: Fri, 13 Jun 2025 16:13:59 +0200 Subject: [PATCH] Update Profile and Folder with FileBlob --- src/components/ProfileModal.tsx | 27 ++++++---- src/sdk/models/FolderData.ts | 13 ++++- src/sdk/models/ProfileData.ts | 88 ++++++++++++++++++++++++++++++++- 3 files changed, 115 insertions(+), 13 deletions(-) diff --git a/src/components/ProfileModal.tsx b/src/components/ProfileModal.tsx index e8fbe27..7d2d5f8 100644 --- a/src/components/ProfileModal.tsx +++ b/src/components/ProfileModal.tsx @@ -20,15 +20,26 @@ function ProfileModal({ isOpen, onClose, onSubmit, initialData = {} }: ProfileMo postalCode: initialData.postalCode || '', city: initialData.city || '', country: initialData.country || '', - idDocument: initialData.idDocument || '', + idDocument: initialData.idDocument || null, + idCertified: false, }); const handleChange = (e: React.ChangeEvent) => { - const { name, value } = e.target; - setProfileData(prev => ({ - ...prev, - [name]: value - })); + const { name, type, files, value } = e.target; + + if (type === 'file' && files) { + // Assuming you want to handle a single file + const file = files[0]; + setProfileData(prev => ({ + ...prev, + [name]: file + })); + } else { + setProfileData(prev => ({ + ...prev, + [name]: value + })); + } }; const handleSubmit = (e: React.FormEvent) => { @@ -157,12 +168,10 @@ function ProfileModal({ isOpen, onClose, onSubmit, initialData = {} }: ProfileMo
diff --git a/src/sdk/models/FolderData.ts b/src/sdk/models/FolderData.ts index 475772b..19e91d0 100644 --- a/src/sdk/models/FolderData.ts +++ b/src/sdk/models/FolderData.ts @@ -1,3 +1,4 @@ +import { isFileBlob, type FileBlob } from "./Data"; import type { RoleDefinition } from "./Roles"; export interface FolderData { @@ -10,7 +11,7 @@ export interface FolderData { created_at: string; updated_at: string; customers: string[]; - documents: string[]; + documents: FileBlob[]; motes: string[]; stakeholders: string[]; } @@ -35,7 +36,6 @@ export function isFolderData(data: any): data is FolderData { const requiredArrayFields = [ 'customers', - 'documents', 'motes', 'stakeholders' ]; @@ -46,6 +46,15 @@ export function isFolderData(data: any): data is FolderData { } } + const requiredFileBlobArrayFields = [ + 'documents', + ]; + + for (const field of requiredFileBlobArrayFields) { + if (!Array.isArray(data[field])) return false; + if (data[field].length > 0 && !data[field].every(isFileBlob)) return false; + } + return true; } diff --git a/src/sdk/models/ProfileData.ts b/src/sdk/models/ProfileData.ts index efb0e74..053d30e 100644 --- a/src/sdk/models/ProfileData.ts +++ b/src/sdk/models/ProfileData.ts @@ -1,3 +1,6 @@ +import type { FileBlob } from "./Data"; +import type { RoleDefinition } from "./Roles"; + export interface ProfileData { name: string; surname: string; @@ -7,11 +10,92 @@ export interface ProfileData { postalCode: string; city: string; country: string; - idDocument?: string; + idDocument: FileBlob | null; + idCertified: boolean; } +export function isProfileData(data: any): data is ProfileData{ + if (typeof data !== 'object' || data === null) return false; + + const requiredStringFields = [ + 'folderNumber', + 'name', + 'deedType', + 'description', + 'archived_description', + 'status', + 'created_at', + 'updated_at' + ]; + + for (const field of requiredStringFields) { + if (typeof data[field] !== 'string') return false; + } + + return true; +} + +const emptyProfileData: ProfileData = { + name: '', + surname: '', + email: '', + phone: '', + address: '', + postalCode: '', + city: '', + country: '', + idDocument: null, + idCertified: false, +}; + +const profileDataFields: string[] = Object.keys(emptyProfileData); + +const ProfilePublicFields: string[] = ['idCertified']; + +export const ProfilePrivateFields = [ + ...profileDataFields.filter(key => !ProfilePublicFields.includes(key)) +]; + export interface ProfileCreated { processId: string, - process: any, // Actually Process + process: any, // Process profileData: ProfileData, } + +export function setDefaultProfileRoles(ownerId: string[], validatorId: string): Record { + return { + owner: { + members: ownerId, + validation_rules: [ + { + quorum: 0.5, + fields: [...ProfilePrivateFields, 'roles'], + min_sig_member: 1, + }, + ], + storages: [] + }, + validator: { + members: [validatorId], + validation_rules: [ + { + quorum: 0.5, + fields: ['idCertified', 'roles'], + min_sig_member: 1, + }, + { + quorum: 0.0, + fields: [...profileDataFields], + min_sig_member: 0, + }, + ], + storages: [] + }, + apophis: { + members: ownerId, + validation_rules: [], + storages: [] + } + } +}; +