From 61ed8ccda07e6e4e6e2a4589af29b8a14efaa17f Mon Sep 17 00:00:00 2001 From: Nisch1Mv Date: Tue, 9 Dec 2025 16:16:09 +0530 Subject: [PATCH] doctype.data is now being accessed --- src/api.ts | 44 +++++++++++++++++++++++++++++ src/app/screens/home/FormDetail.tsx | 3 +- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/api.ts b/src/api.ts index c77c3e1..a5970b1 100644 --- a/src/api.ts +++ b/src/api.ts @@ -300,6 +300,13 @@ export async function getAllDoctypesFromLocal(): Promise< } const parsed = parseJson(value); if (parsed?.payload) { + // Validate that payload has the expected structure + if (!parsed.payload.data) { + return; + } + if (!parsed.payload.fields) { + return; + } result[normalizeDoctypeName(parsed.name)] = parsed.payload; } }); @@ -352,6 +359,7 @@ const defaultFetcher = async (name: string): Promise => { const response = await getDoctypeByName({ path: { form_name: name }, }); + const data = (response as any)?.data?.data ?? (response as any)?.data ?? @@ -359,6 +367,42 @@ const defaultFetcher = async (name: string): Promise => { if (!data) { throw new Error(`Doctype response missing data for ${name}`); } + + // Validate that we have fields array + if (!data.fields || !Array.isArray(data.fields)) { + throw new Error(`Invalid doctype structure for ${name}: missing fields array`); + } + + // Check if data object exists, if not try to create it from top-level properties + if (!data.data || typeof data.data !== 'object') { + // Look for doctype metadata at the top level + const doctypeMetadata: any = {}; + const metadataFields = [ + 'name', 'creation', 'modified', 'modified_by', 'owner', 'docStatus', + 'idx', 'issingle', 'istable', 'editable_grid', 'track_changes', 'module', + 'autoname', 'name_case', 'sort_field', 'sort_order', 'readonly', 'in_create', + 'allow_copy', 'allow_rename', 'allow_import', 'hide_toolbar', 'track_seen', + 'max_attachments', 'document_type', 'engine', 'is_submittable', + 'show_name_in_global_search', 'custom', 'beta', 'has_web_view', + 'allow_guest_to_view', 'qick_entry', 'is_tree', 'track_views', + 'all_events_in_timeline', 'allow_auto_repeat', 'show_preview_popup', + 'email_append_to', 'index_web_pages_for_search', 'docType' + ]; + + metadataFields.forEach(field => { + if (data[field] !== undefined) { + doctypeMetadata[field] = data[field]; + } + }); + + // If we found metadata, create the nested structure + if (Object.keys(doctypeMetadata).length > 0) { + data.data = doctypeMetadata; + } else { + throw new Error(`Invalid doctype structure for ${name}: missing data object`); + } + } + return data as DocType; }; diff --git a/src/app/screens/home/FormDetail.tsx b/src/app/screens/home/FormDetail.tsx index a374644..46ff8d0 100644 --- a/src/app/screens/home/FormDetail.tsx +++ b/src/app/screens/home/FormDetail.tsx @@ -190,9 +190,8 @@ const FormDetail: React.FC = ({ navigation }) => { data: formData, schemaHash, status: 'pending' as 'pending' | 'submitted' | 'failed', - is_submittable: doctype.data?.is_submittable ?? 0, + is_submittable: doctype.data.is_submittable }; - setLoading(true); setConfirmModalVisible(false); try {