diff options
| -rw-r--r-- | components/form-data/form-data-table.tsx | 13 | ||||
| -rw-r--r-- | components/form-data/spreadJS-dialog.tsx | 49 | ||||
| -rw-r--r-- | lib/forms/sedp-actions.ts | 79 |
3 files changed, 136 insertions, 5 deletions
diff --git a/components/form-data/form-data-table.tsx b/components/form-data/form-data-table.tsx index 09745bb0..d5d79735 100644 --- a/components/form-data/form-data-table.tsx +++ b/components/form-data/form-data-table.tsx @@ -304,6 +304,19 @@ export default function DynamicTable({ const templateResult = await fetchTemplateFromSEDP(projectCode, formCode); + // ๐ ์ ๋ฌ๋๋ ํ
ํ๋ฆฟ ๋ฐ์ดํฐ ๋ก๊น
+ console.log('๐ Template data received from SEDP:', { + count: Array.isArray(templateResult) ? templateResult.length : 'not array', + isArray: Array.isArray(templateResult), + data: templateResult + }); + + if (Array.isArray(templateResult)) { + templateResult.forEach((tmpl, idx) => { + console.log(` [${idx}] TMPL_ID: ${tmpl?.TMPL_ID || 'MISSING'}, NAME: ${tmpl?.NAME || 'N/A'}, TYPE: ${tmpl?.TMPL_TYPE || 'N/A'}`); + }); + } + setTemplateData(templateResult); setTemplateDialogOpen(true); diff --git a/components/form-data/spreadJS-dialog.tsx b/components/form-data/spreadJS-dialog.tsx index 272d99be..8243566a 100644 --- a/components/form-data/spreadJS-dialog.tsx +++ b/components/form-data/spreadJS-dialog.tsx @@ -202,6 +202,15 @@ export function TemplateViewDialog({ }, []); React.useEffect(() => { + // ๐ ๋ฐ์ templateData ๋ก๊น
(๋๋ฒ๊น
์ฉ) + console.log('๐จ TemplateViewDialog received templateData:', { + isNull: templateData === null, + isUndefined: templateData === undefined, + isArray: Array.isArray(templateData), + length: Array.isArray(templateData) ? templateData.length : 'N/A', + data: templateData + }); + // ํ
ํ๋ฆฟ ๋ฐ์ดํฐ๊ฐ ์๊ฑฐ๋ ๋น ๋ฐฐ์ด์ธ ๊ฒฝ์ฐ ๊ธฐ๋ณธ GRD_LIST ํ
ํ๋ฆฟ ์์ฑ if (!templateData || (Array.isArray(templateData) && templateData.length === 0)) { // columnsJSON์ด ์์ผ๋ฉด ๊ธฐ๋ณธ GRD_LIST ํ
ํ๋ฆฟ ์์ฑ @@ -242,7 +251,17 @@ export function TemplateViewDialog({ templates = [templateData as TemplateItem]; } + // ๐ ๊ฐ ํ
ํ๋ฆฟ์ TMPL_ID ํ์ธ + console.log('๐ Processing templates:', templates.length); + templates.forEach((tmpl, idx) => { + console.log(` [${idx}] TMPL_ID: ${tmpl?.TMPL_ID || 'โ MISSING'}, NAME: ${tmpl?.NAME || 'N/A'}, TYPE: ${tmpl?.TMPL_TYPE || 'N/A'}`); + if (!tmpl?.TMPL_ID) { + console.error(`โ Template at index ${idx} is missing TMPL_ID:`, tmpl); + } + }); + const validTemplates = templates.filter(isValidTemplate); + console.log(`โ
Valid templates after filtering: ${validTemplates.length}`); // ์ ํจํ ํ
ํ๋ฆฟ์ด ์์ง๋ง columnsJSON์ด ์์ผ๋ฉด ๊ธฐ๋ณธ GRD_LIST ์ถ๊ฐ if (validTemplates.length === 0 && columnsJSON && columnsJSON.length > 0) { @@ -272,17 +291,27 @@ export function TemplateViewDialog({ } setAvailableTemplates(validTemplates); + + // ๐ ์ต์ข
availableTemplates ๋ก๊น
+ console.log('๐ availableTemplates set:', validTemplates.map(t => ({ + TMPL_ID: t.TMPL_ID, + NAME: t.NAME, + TYPE: t.TMPL_TYPE + }))); if (validTemplates.length > 0 && !selectedTemplateId) { const firstTemplate = validTemplates[0]; // ๐ TMPL_ID ๊ฒ์ฆ (isValidTemplate๋ก ํํฐ๋งํ์ผ๋ฏ๋ก ์กด์ฌํด์ผ ํ์ง๋ง ์์ ์ฅ์น) if (firstTemplate?.TMPL_ID) { const templateTypeToSet = determineTemplateType(firstTemplate); + console.log(`๐ฏ Auto-selecting first template: ${firstTemplate.TMPL_ID} (${templateTypeToSet})`); setSelectedTemplateId(firstTemplate.TMPL_ID); setTemplateType(templateTypeToSet); } else { console.error('โ First valid template has no TMPL_ID:', firstTemplate); } + } else if (selectedTemplateId) { + console.log(`โน๏ธ Template already selected: ${selectedTemplateId}`); } }, [templateData, selectedTemplateId, isValidTemplate, determineTemplateType, columnsJSON]); @@ -307,10 +336,28 @@ export function TemplateViewDialog({ }; const selectedTemplate = React.useMemo(() => { + console.log('๐ Finding template:', { + selectedTemplateId, + availableCount: availableTemplates.length, + availableIds: availableTemplates.map(t => t?.TMPL_ID) + }); + const found = availableTemplates.find(t => t?.TMPL_ID === selectedTemplateId); + if (!found && selectedTemplateId) { - console.warn('โ ๏ธ Selected template not found:', selectedTemplateId); + console.warn('โ ๏ธ Selected template not found:', { + searching: selectedTemplateId, + available: availableTemplates.map(t => t?.TMPL_ID), + availableTemplates: availableTemplates + }); + } else if (found) { + console.log('โ
Template found:', { + TMPL_ID: found.TMPL_ID, + NAME: found.NAME, + TYPE: found.TMPL_TYPE + }); } + return found; }, [availableTemplates, selectedTemplateId]); diff --git a/lib/forms/sedp-actions.ts b/lib/forms/sedp-actions.ts index d20fb9fc..4883a33f 100644 --- a/lib/forms/sedp-actions.ts +++ b/lib/forms/sedp-actions.ts @@ -21,6 +21,45 @@ interface SEDPTemplateData { [key: string]: any; } +// ๐ ์ค์ SEDP API ์๋ต ๊ตฌ์กฐ (๋๋ฌธ์) +interface SEDPTemplateResponse { + TMPL_ID: string; + NAME: string; + TMPL_TYPE: string; + SPR_LST_SETUP?: { + ACT_SHEET: string; + HIDN_SHEETS: string[]; + CONTENT?: string; + DATA_SHEETS: Array<{ + SHEET_NAME: string; + REG_TYPE_ID: string; + MAP_CELL_ATT: Array<{ + ATT_ID: string; + IN: string; + }>; + }>; + }; + GRD_LST_SETUP?: { + REG_TYPE_ID: string; + SPR_ITM_IDS: string[]; + ATTS: any[]; + }; + SPR_ITM_LST_SETUP?: { + ACT_SHEET: string; + HIDN_SHEETS: string[]; + CONTENT?: string; + DATA_SHEETS: Array<{ + SHEET_NAME: string; + REG_TYPE_ID: string; + MAP_CELL_ATT: Array<{ + ATT_ID: string; + IN: string; + }>; + }>; + }; + [key: string]: any; +} + /** * SEDP์์ ํ๊ทธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์๋ฒ ์ก์
*/ @@ -74,7 +113,7 @@ export async function fetchTagDataFromSEDP( export async function fetchTemplateFromSEDP( projectCode: string, formCode: string -): Promise<SEDPTemplateData[]> { +): Promise<SEDPTemplateResponse[]> { try { // Get the token const apiKey = await getSEDPToken(); @@ -132,14 +171,46 @@ export async function fetchTemplateFromSEDP( } const data = await response.json(); - return data as SEDPTemplateData; + + // ๐ API ์๋ต ๋ฐ์ดํฐ ๊ตฌ์กฐ ํ์ธ ๋ฐ ๋ก๊น
+ console.log('๐ SEDP Template API Response for', tmplId, ':', { + hasTMPL_ID: !!data.TMPL_ID, + hasTemplateId: !!(data as any).templateId, + keys: Object.keys(data), + sample: data + }); + + // ๐ TMPL_ID ํ๋ ๊ฒ์ฆ + if (!data.TMPL_ID) { + console.error('โ Missing TMPL_ID in API response:', data); + // templateId๊ฐ ์๋ค๋ฉด ๋ณํ ์๋ + if ((data as any).templateId) { + console.warn('โ ๏ธ Found templateId instead of TMPL_ID, converting...'); + data.TMPL_ID = (data as any).templateId; + } + } + + return data as SEDPTemplateResponse; }); // ๋ชจ๋ API ํธ์ถ์ ๋ณ๋ ฌ๋ก ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์์ง const templates = await Promise.all(templatePromises); - // null์ด๋ undefined๊ฐ ์๋ ๊ฐ๋ค๋ง ํํฐ๋ง (์๋ต์ด ์๋ ๊ฒฝ์ฐ ์ ์ธ) - const validTemplates = templates.filter(template => template != null); + // ๐ null์ด๋ undefined๊ฐ ์๋ ๊ฐ๋ค๋ง ํํฐ๋งํ๊ณ TMPL_ID ๊ฒ์ฆ + const validTemplates = templates.filter(template => { + if (!template) { + console.warn('โ ๏ธ Null or undefined template received'); + return false; + } + if (!template.TMPL_ID) { + console.error('โ Template missing TMPL_ID:', template); + return false; + } + return true; + }); + + console.log(`โ
fetchTemplateFromSEDP completed: ${validTemplates.length} valid templates`); + validTemplates.forEach(t => console.log(` - ${t.TMPL_ID}: ${t.NAME} (${t.TMPL_TYPE})`)); return validTemplates; |
