summaryrefslogtreecommitdiff
path: root/components/form-data/spreadJS-dialog.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'components/form-data/spreadJS-dialog.tsx')
-rw-r--r--components/form-data/spreadJS-dialog.tsx71
1 files changed, 54 insertions, 17 deletions
diff --git a/components/form-data/spreadJS-dialog.tsx b/components/form-data/spreadJS-dialog.tsx
index af1a3dca..375c097c 100644
--- a/components/form-data/spreadJS-dialog.tsx
+++ b/components/form-data/spreadJS-dialog.tsx
@@ -176,13 +176,13 @@ export function TemplateViewDialog({
}, []);
const determineTemplateType = React.useCallback((template: TemplateItem): 'SPREAD_LIST' | 'SPREAD_ITEM' | 'GRD_LIST' | null => {
- if (template.TMPL_TYPE === "SPREAD_LIST" && (template.SPR_LST_SETUP?.CONTENT || template.SPR_ITM_LST_SETUP?.CONTENT)) {
+ if (template?.TMPL_TYPE === "SPREAD_LIST" && (template?.SPR_LST_SETUP?.CONTENT || template?.SPR_ITM_LST_SETUP?.CONTENT)) {
return 'SPREAD_LIST';
}
- if (template.TMPL_TYPE === "SPREAD_ITEM" && (template.SPR_LST_SETUP?.CONTENT || template.SPR_ITM_LST_SETUP?.CONTENT)) {
+ if (template?.TMPL_TYPE === "SPREAD_ITEM" && (template?.SPR_LST_SETUP?.CONTENT || template?.SPR_ITM_LST_SETUP?.CONTENT)) {
return 'SPREAD_ITEM';
}
- if (template.GRD_LST_SETUP && columnsJSON.length > 0) {
+ if (template?.GRD_LST_SETUP && columnsJSON.length > 0) {
return 'GRD_LIST';
}
return null;
@@ -221,10 +221,10 @@ export function TemplateViewDialog({
DATA_SHEETS: []
}
};
-
+
setAvailableTemplates([defaultGrdTemplate]);
- setSelectedTemplateId('DEFAULT_GRD_LIST');
- setTemplateType('GRD_LIST');
+ // setSelectedTemplateId('DEFAULT_GRD_LIST');
+ // setTemplateType('GRD_LIST');
console.log('๐Ÿ“‹ Created default GRD_LIST template');
}
return;
@@ -238,7 +238,7 @@ export function TemplateViewDialog({
}
const validTemplates = templates.filter(isValidTemplate);
-
+
// ์œ ํšจํ•œ ํ…œํ”Œ๋ฆฟ์ด ์—†์ง€๋งŒ columnsJSON์ด ์žˆ์œผ๋ฉด ๊ธฐ๋ณธ GRD_LIST ์ถ”๊ฐ€
if (validTemplates.length === 0 && columnsJSON && columnsJSON.length > 0) {
const defaultGrdTemplate: TemplateItem = {
@@ -261,11 +261,11 @@ export function TemplateViewDialog({
DATA_SHEETS: []
}
};
-
+
validTemplates.push(defaultGrdTemplate);
console.log('๐Ÿ“‹ Added default GRD_LIST template to empty template list');
}
-
+
setAvailableTemplates(validTemplates);
if (validTemplates.length > 0 && !selectedTemplateId) {
@@ -1251,13 +1251,13 @@ export function TemplateViewDialog({
}
});
- // ๐Ÿ”ง ๋งˆ์ง€๋ง‰์— activeSheetName์œผ๋กœ ๋‹ค์‹œ ์ „ํ™˜
- if (activeSheetName && spread.getSheetFromName(activeSheetName)) {
- spread.setActiveSheet(activeSheetName);
- activeSheet = spread.getActiveSheet();
- }
+ // ๐Ÿ”ง ๋งˆ์ง€๋ง‰์— activeSheetName์œผ๋กœ ๋‹ค์‹œ ์ „ํ™˜
+ if (activeSheetName && spread.getSheetFromName(activeSheetName)) {
+ spread.setActiveSheet(activeSheetName);
+ activeSheet = spread.getActiveSheet();
+ }
+
-
});
}
}
@@ -1292,6 +1292,32 @@ export function TemplateViewDialog({
}
}, [selectedTemplate, templateType, selectedRow, tableData, updateProgress, getSafeActiveSheet, createGrdListTableOptimized, setBatchValues, setBatchStyles, setupSheetProtectionAndEvents, setCellMappings, createCellStyle, isFieldEditable, columnsJSON, setupOptimizedListValidation, parseCellAddress, ensureRowCapacity, getCellAddress]);
+ React.useEffect(() => {
+ if (!selectedTemplateId) {
+ const only = availableTemplates[0];
+ const type = determineTemplateType(only);
+
+ // ์„ ํƒ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ž๋™ ์„ ํƒ
+ if (selectedTemplateId !== only.TMPL_ID) {
+ setSelectedTemplateId(only.TMPL_ID);
+ setTemplateType(type);
+ }
+
+ // ์ด๋ฏธ ์Šคํ”„๋ ˆ๋“œ๊ฐ€ ๋งˆ์šดํŠธ๋˜์–ด ์žˆ๋‹ค๋ฉด ์ฆ‰์‹œ ์ดˆ๊ธฐํ™”(์„ ํƒ ๋ณ€๊ฒฝ๋งŒ์œผ๋กœ๋„ ๋ฆฌ๋ Œ๋”๋˜์ง€๋งŒ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ฐ•)
+ if (currentSpread) {
+ initSpread(currentSpread, only);
+ }
+ }
+ }, [
+ availableTemplates,
+ selectedTemplateId,
+ currentSpread,
+ determineTemplateType,
+ initSpread,
+ setTemplateType,
+ setSelectedTemplateId
+ ]);
+
const handleSaveChanges = React.useCallback(async () => {
if (!currentSpread || !hasChanges) {
toast.info("No changes to save");
@@ -1454,6 +1480,8 @@ export function TemplateViewDialog({
const isDataValid = templateType === 'SPREAD_ITEM' ? !!selectedRow : tableData.length > 0;
const dataCount = templateType === 'SPREAD_ITEM' ? 1 : tableData.length;
+
+
return (
<Dialog open={isOpen} onOpenChange={onClose}>
<DialogContent
@@ -1463,7 +1491,8 @@ export function TemplateViewDialog({
<DialogTitle>SEDP Template - {formCode}</DialogTitle>
<DialogDescription>
<div className="space-y-3">
- {availableTemplates.length > 1 && (
+ {availableTemplates.length > 0 ? (
+ // ํ…œํ”Œ๋ฆฟ์ด 2๊ฐœ ์ด์ƒ์ผ ๋•Œ: Select ๋ฐ•์Šค ํ‘œ์‹œ
<div className="flex items-center gap-4">
<span className="text-sm font-medium">Template:</span>
<Select value={selectedTemplateId} onValueChange={handleTemplateChange}>
@@ -1479,7 +1508,15 @@ export function TemplateViewDialog({
</SelectContent>
</Select>
</div>
- )}
+ ) : availableTemplates.length === 1 ? (
+ // ํ…œํ”Œ๋ฆฟ์ด ์ •ํ™•ํžˆ 1๊ฐœ์ผ ๋•Œ: ํ…œํ”Œ๋ฆฟ ์ด๋ฆ„์„ ํ…์ŠคํŠธ๋กœ ํ‘œ์‹œ
+ <div className="flex items-center gap-4">
+ <span className="text-sm font-medium">Template:</span>
+ <span className="text-sm text-blue-600 font-medium">
+ {availableTemplates[0].NAME} ({availableTemplates[0].TMPL_TYPE})
+ </span>
+ </div>
+ ) : null}
{selectedTemplate && (
<div className="flex items-center gap-4 text-sm">