@solidxai/core-ui 0.1.9-beta.16 → 0.1.9-beta.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/core/chatter/SolidChatterMessageBox.js +1 -1
- package/dist/components/core/chatter/SolidChatterMessageBox.js.map +1 -1
- package/dist/components/core/chatter/SolidChatterMessageBox.tsx +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.js +77 -42
- package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.tsx +43 -5
- package/dist/components/core/model/CreateModel.d.ts.map +1 -1
- package/dist/components/core/model/CreateModel.js +11 -24
- package/dist/components/core/model/CreateModel.js.map +1 -1
- package/dist/components/core/model/CreateModel.tsx +10 -22
- package/dist/components/core/model/FieldMetaDataForm.js +1 -1
- package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
- package/dist/components/core/model/FieldMetaDataForm.tsx +1 -1
- package/dist/components/core/model/ModelMetaData.d.ts.map +1 -1
- package/dist/components/core/model/ModelMetaData.js +6 -18
- package/dist/components/core/model/ModelMetaData.js.map +1 -1
- package/dist/components/core/model/ModelMetaData.tsx +8 -21
- package/dist/resources/globals.css +9 -7
- package/package.json +1 -1
|
@@ -542,7 +542,9 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
|
|
|
542
542
|
type OverlayOption =
|
|
543
543
|
| { id: string; kind: "field"; field: any }
|
|
544
544
|
| { id: string; kind: "predefined"; predefined: any }
|
|
545
|
-
| { id: string; kind: "saved"; saved: any }
|
|
545
|
+
| { id: string; kind: "saved"; saved: any }
|
|
546
|
+
| { id: string; kind: "custom" }
|
|
547
|
+
| { id: string; kind: "grouping" };
|
|
546
548
|
type ManagedChipItem = {
|
|
547
549
|
id: string;
|
|
548
550
|
type: "saved" | "search" | "predefined" | "custom" | "grouping";
|
|
@@ -657,10 +659,17 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
|
|
|
657
659
|
const [savedFilterQueryString, setSavedFilterQueryString] = useState<string>();
|
|
658
660
|
const [showOverlay, setShowOverlay] = useState(false);
|
|
659
661
|
const overlayRef = useRef<HTMLDivElement | null>(null);
|
|
662
|
+
const searchInputRef = useRef<HTMLInputElement | null>(null);
|
|
660
663
|
const [showChipManager, setShowChipManager] = useState(false);
|
|
661
664
|
const chipManagerRef = useRef<HTMLDivElement | null>(null);
|
|
662
665
|
const chipManagerTriggerRef = useRef<HTMLButtonElement | null>(null);
|
|
663
666
|
|
|
667
|
+
const focusSearchInput = () => {
|
|
668
|
+
requestAnimationFrame(() => {
|
|
669
|
+
searchInputRef.current?.focus();
|
|
670
|
+
});
|
|
671
|
+
};
|
|
672
|
+
|
|
664
673
|
useEffect(() => {
|
|
665
674
|
if (focusedIndex >= 0 && showOverlay) {
|
|
666
675
|
const activeElement = document.querySelector(`.solid-search-overlay-option-active`);
|
|
@@ -1602,9 +1611,20 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
|
|
|
1602
1611
|
kind: "saved" as const,
|
|
1603
1612
|
saved: s,
|
|
1604
1613
|
}));
|
|
1614
|
+
const custom: OverlayOption[] = [{
|
|
1615
|
+
id: "footer:custom",
|
|
1616
|
+
kind: "custom" as const,
|
|
1617
|
+
}];
|
|
1618
|
+
const grouping: OverlayOption[] =
|
|
1619
|
+
viewType === "tree"
|
|
1620
|
+
? [{
|
|
1621
|
+
id: "footer:grouping",
|
|
1622
|
+
kind: "grouping" as const,
|
|
1623
|
+
}]
|
|
1624
|
+
: [];
|
|
1605
1625
|
|
|
1606
|
-
return [...fields, ...predefined, ...saved];
|
|
1607
|
-
}, [inputValue, searchableFields, predefinedSearches, savedFilters]);
|
|
1626
|
+
return [...fields, ...predefined, ...saved, ...custom, ...grouping];
|
|
1627
|
+
}, [inputValue, searchableFields, predefinedSearches, savedFilters, viewType]);
|
|
1608
1628
|
|
|
1609
1629
|
const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {
|
|
1610
1630
|
const currentValue = inputValue?.trim() || "";
|
|
@@ -1649,6 +1669,10 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
|
|
|
1649
1669
|
handlePredefinedSearch(activeOption.predefined);
|
|
1650
1670
|
} else if (activeOption?.kind === "saved") {
|
|
1651
1671
|
applySavedFilter(activeOption.saved);
|
|
1672
|
+
} else if (activeOption?.kind === "custom") {
|
|
1673
|
+
openCustomFilterDialog();
|
|
1674
|
+
} else if (activeOption?.kind === "grouping") {
|
|
1675
|
+
openGroupingDialog();
|
|
1652
1676
|
} else if (currentValue) {
|
|
1653
1677
|
handleAddChip();
|
|
1654
1678
|
setShowOverlay(false);
|
|
@@ -1831,6 +1855,7 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
|
|
|
1831
1855
|
<li ref={chipsRef} className="solid-global-search-input-item">
|
|
1832
1856
|
<div className="relative solid-global-search-element-wrapper">
|
|
1833
1857
|
<SolidInput
|
|
1858
|
+
ref={searchInputRef}
|
|
1834
1859
|
className="solid-global-search-input"
|
|
1835
1860
|
value={inputValue || ""}
|
|
1836
1861
|
placeholder="Search."
|
|
@@ -1854,9 +1879,14 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
|
|
|
1854
1879
|
<SolidButton
|
|
1855
1880
|
variant="outline"
|
|
1856
1881
|
size="sm"
|
|
1882
|
+
onMouseDown={(e) => {
|
|
1883
|
+
// Preserve input focus so overlay keyboard navigation continues to work.
|
|
1884
|
+
e.preventDefault();
|
|
1885
|
+
}}
|
|
1857
1886
|
onClick={() => {
|
|
1858
1887
|
setShowChipManager(false);
|
|
1859
1888
|
setShowOverlay(true);
|
|
1889
|
+
focusSearchInput();
|
|
1860
1890
|
}}
|
|
1861
1891
|
className="custom-filter-button solid-global-search-trigger"
|
|
1862
1892
|
>
|
|
@@ -2044,8 +2074,12 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
|
|
|
2044
2074
|
<div className="solid-search-overlay-footer">
|
|
2045
2075
|
<button
|
|
2046
2076
|
type="button"
|
|
2047
|
-
className=
|
|
2077
|
+
className={`px-3 py-2 flex flex-column solid-search-overlay-footer-action ${overlayOptions[focusedIndex]?.id === "footer:custom" ? "solid-search-overlay-option-active" : ""}`}
|
|
2048
2078
|
onClick={openCustomFilterDialog}
|
|
2079
|
+
onMouseEnter={() => {
|
|
2080
|
+
const optIndex = overlayOptions.findIndex((o) => o.id === "footer:custom");
|
|
2081
|
+
if (optIndex !== -1) setFocusedIndex(optIndex);
|
|
2082
|
+
}}
|
|
2049
2083
|
>
|
|
2050
2084
|
<div className="solid-search-overlay-footer-action-main">
|
|
2051
2085
|
<div className="solid-search-overlay-panel-callout-icon">
|
|
@@ -2064,8 +2098,12 @@ export const SolidGlobalSearchElement = forwardRef(({ viewData, viewType, handle
|
|
|
2064
2098
|
{viewType === "tree" && (
|
|
2065
2099
|
<button
|
|
2066
2100
|
type="button"
|
|
2067
|
-
className=
|
|
2101
|
+
className={`px-3 py-2 flex flex-column solid-search-overlay-footer-action solid-search-overlay-footer-action-secondary ${overlayOptions[focusedIndex]?.id === "footer:grouping" ? "solid-search-overlay-option-active" : ""}`}
|
|
2068
2102
|
onClick={openGroupingDialog}
|
|
2103
|
+
onMouseEnter={() => {
|
|
2104
|
+
const optIndex = overlayOptions.findIndex((o) => o.id === "footer:grouping");
|
|
2105
|
+
if (optIndex !== -1) setFocusedIndex(optIndex);
|
|
2106
|
+
}}
|
|
2069
2107
|
>
|
|
2070
2108
|
<div className="solid-search-overlay-footer-action-main">
|
|
2071
2109
|
<div className="solid-search-overlay-panel-callout-icon">
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateModel.d.ts","sourceRoot":"","sources":["../../../../src/components/core/model/CreateModel.tsx"],"names":[],"mappings":"AAmCA,QAAA,MAAM,WAAW,qBAAsB,GAAG,
|
|
1
|
+
{"version":3,"file":"CreateModel.d.ts","sourceRoot":"","sources":["../../../../src/components/core/model/CreateModel.tsx"],"names":[],"mappings":"AAmCA,QAAA,MAAM,WAAW,qBAAsB,GAAG,4CAgbzC,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -114,9 +114,9 @@ var CreateModel = function (_a) {
|
|
|
114
114
|
useEffect(function () {
|
|
115
115
|
var _a;
|
|
116
116
|
if (data) {
|
|
117
|
-
var isLegacyTable = data.
|
|
118
|
-
var
|
|
119
|
-
var modelData = __assign(__assign({}, data), { moduleId: (_a = data === null || data === void 0 ? void 0 : data.module) === null || _a === void 0 ? void 0 : _a.id, parentModelId: data === null || data === void 0 ? void 0 : data.parentModel, isLegacyTable: isLegacyTable,
|
|
117
|
+
var isLegacyTable = data.legacyTableType !== 'none';
|
|
118
|
+
var hasExistingId = data.legacyTableType === 'existing_id';
|
|
119
|
+
var modelData = __assign(__assign({}, data), { moduleId: (_a = data === null || data === void 0 ? void 0 : data.module) === null || _a === void 0 ? void 0 : _a.id, parentModelId: data === null || data === void 0 ? void 0 : data.parentModel, isLegacyTable: isLegacyTable, hasExistingId: hasExistingId });
|
|
120
120
|
setIsLoadingData(false);
|
|
121
121
|
setModelMetaData(modelData);
|
|
122
122
|
var fieldData = data.fields.map(function (f) {
|
|
@@ -207,31 +207,18 @@ var CreateModel = function (_a) {
|
|
|
207
207
|
});
|
|
208
208
|
}); };
|
|
209
209
|
var handleFormSubmit = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
210
|
-
var legacyTableConfig, hasPrimaryKey, fieldData, module_1, parentModel, createdAt, updatedAt, id, deletedAt, modelData, updateData, fieldData, module_2, parentModel, modelData, data_1;
|
|
210
|
+
var legacyTableConfig, legacyTableType, hasPrimaryKey, fieldData, module_1, parentModel, createdAt, updatedAt, id, deletedAt, modelData, updateData, fieldData, module_2, parentModel, modelData, data_1;
|
|
211
211
|
return __generator(this, function (_a) {
|
|
212
212
|
legacyTableConfig = {};
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
isLegacyTable: true,
|
|
217
|
-
isLegacyTableWithId: false
|
|
218
|
-
};
|
|
213
|
+
legacyTableType = 'none';
|
|
214
|
+
if ((modelMetaData === null || modelMetaData === void 0 ? void 0 : modelMetaData.isLegacyTable) && (modelMetaData === null || modelMetaData === void 0 ? void 0 : modelMetaData.hasExistingId)) {
|
|
215
|
+
legacyTableType = 'existing_id';
|
|
219
216
|
}
|
|
220
|
-
else if (
|
|
221
|
-
|
|
222
|
-
legacyTableConfig = {
|
|
223
|
-
isLegacyTable: false,
|
|
224
|
-
isLegacyTableWithId: true
|
|
225
|
-
};
|
|
217
|
+
else if (modelMetaData === null || modelMetaData === void 0 ? void 0 : modelMetaData.isLegacyTable) {
|
|
218
|
+
legacyTableType = 'generated_id';
|
|
226
219
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
legacyTableConfig = {
|
|
230
|
-
isLegacyTable: false,
|
|
231
|
-
isLegacyTableWithId: false
|
|
232
|
-
};
|
|
233
|
-
}
|
|
234
|
-
if ((modelMetaData === null || modelMetaData === void 0 ? void 0 : modelMetaData.isLegacyTable) || (modelMetaData === null || modelMetaData === void 0 ? void 0 : modelMetaData.isLegacyTableWithId)) {
|
|
220
|
+
legacyTableConfig = { legacyTableType: legacyTableType };
|
|
221
|
+
if (modelMetaData === null || modelMetaData === void 0 ? void 0 : modelMetaData.isLegacyTable) {
|
|
235
222
|
hasPrimaryKey = fieldMetaData.some(function (field) { return field.isPrimaryKey === true; });
|
|
236
223
|
if (!hasPrimaryKey) {
|
|
237
224
|
dispatch(showToast({ severity: "error", summary: "Primary Key Required", detail: "Legacy tables set at least one field marked as Primary Key. Please mark a field as Primary Key before proceeding.", life: 5000 }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateModel.js","sourceRoot":"","sources":["../../../../src/components/core/model/CreateModel.tsx"],"names":[],"mappings":"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","sourcesContent":["\n\nimport { useGetFieldDefaultMetaDataQuery } from \"../../../redux/api/fieldApi\";\nimport { useCreatemodelMutation, useDeletemodelMutation, useLazyGetModelsQuery, useUpdatemodelMutation } from \"../../../redux/api/modelApi\";\nimport { FetchBaseQueryError } from \"@reduxjs/toolkit/dist/query\";\nimport { usePathname } from \"../../../hooks/usePathname\";\nimport { useRouter } from \"../../../hooks/useRouter\";\nimport qs from \"qs\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { showToast } from \"../../../redux/features/toastSlice\";\nimport FieldMetaData from \"./FieldMetaData\";\nimport ModelMetaData from \"./ModelMetaData\";\nimport { SolidFormStepper } from \"../../../components/common/SolidFormStepper\";\nimport { SolidBreadcrumb } from \"../../../components/common/SolidBreadcrumb\";\nimport { SolidFormHeader } from \"../../../components/common/SolidFormHeader\";\nimport { ERROR_MESSAGES } from \"../../../constants/error-messages\";\nimport { SolidButton, SolidDialog, SolidDivider, SolidPopover, SolidPopoverContent, SolidPopoverTrigger, SolidTabGroup } from \"../../shad-cn-ui\";\nimport { Settings, Trash2 } from \"lucide-react\";\nimport { SolidFormFooter } from \"../form/SolidFormFooter\";\n\ninterface ErrorResponseData {\n message: string;\n statusCode: number;\n error: string;\n}\n\nconst TABS = [\"model\", \"fields\"] as const;\ntype TabValue = typeof TABS[number];\n\nconst getTabErrorState = (tab?: TabValue): Record<TabValue, boolean> => ({\n model: tab === \"model\",\n fields: tab === \"fields\",\n});\n\nconst CreateModel = ({ data, params }: any) => {\n\n const dispatch = useDispatch();\n const router = useRouter();\n const pathname = usePathname();\n const [deleteEntity, setDeleteEntity] = useState(false);\n const [isLoadingData, setIsLoadingData] = useState(data ? true : false);\n const formikModelMetadataRef = useRef<any>();\n const formikFieldsMetadataRef = useRef();\n\n const [modelMetaData, setModelMetaData] = useState<any>();\n const [fieldMetaData, setFieldMetaData] = useState<any>([]);\n\n const { data: fieldDefaultMetaData, refetch } = useGetFieldDefaultMetaDataQuery(null);\n const [allModelsNames, setAllModelsNames] = useState([]);\n\n const [triggerGetModels, { data: allmodels, isLoading: isAllModelsLoaded, error: allModelsError }] =\n useLazyGetModelsQuery();\n\n\n const [\n createModel,\n { isLoading: isCreateModelLoading, isSuccess: isCreateModelSuccess, isError: isCreateModelError, error: createModelError, data: newModel },\n ] = useCreatemodelMutation();\n\n const [\n updateModel,\n { isLoading: isUpdatedModelUpdating, isSuccess: isUpdatedModelSuceess, isError: isUpdateModelError, error: updateModelError, data: updatedModel },\n ] = useUpdatemodelMutation();\n const [\n deleteModel,\n { isLoading: isModelDeleted, isSuccess: isDeleteModelSuceess, isError: isDeleteModelError, error: deleteModelError, data: DeletedModel },\n ] = useDeletemodelMutation();\n\n const [activeTab, setActiveTab] = useState<TabValue>(\"model\");\n const [tabErrors, setTabErrors] = useState<Record<TabValue, boolean>>(getTabErrorState());\n const [formErrors, setFormErrors] = useState<Record<string, string>>({});\n\n const nextTab = () => {\n const currentIndex = TABS.indexOf(activeTab);\n const nextValue = TABS[Math.min(currentIndex + 1, TABS.length - 1)];\n setActiveTab(nextValue);\n };\n\n const handleTabChange = (nextValue: TabValue) => {\n if (nextValue === activeTab) {\n return;\n }\n if (activeTab === \"model\") {\n formikModelMetadataRef.current?.handleSubmit();\n }\n setActiveTab(nextValue);\n };\n\n useEffect(() => {\n if (data) {\n const isLegacyTable = data.isLegacyTableWithId || data.isLegacyTable\n const isLegacyTableWithId = data.isLegacyTable;\n const modelData = {\n ...data, moduleId: data?.module?.id, parentModelId: data?.parentModel, isLegacyTable, isLegacyTableWithId\n }\n\n setIsLoadingData(false);\n setModelMetaData(modelData);\n const fieldData = data.fields.map((f: any) => {\n const fieldCopy = { ...f }; // Create a shallow copy of the field object\n fieldCopy.identifier = f.id; // Add the identifier property\n if (fieldCopy.type == \"mediaSingle\" || fieldCopy.type == \"mediaMultiple\") {\n fieldCopy.mediaMaxSizeKb = f.mediaMaxSizeKb / 1024; // Add the identifier property\n\n }\n return fieldCopy;\n })\n setFieldMetaData(fieldData.sort((a: any, b: any) => b.id - a.id))\n }\n }, [data])\n\n\n useEffect(() => {\n const queryData = {\n offset: 0,\n limit: 1000,\n };\n const queryString = qs.stringify(queryData, {\n encodeValuesOnly: true\n });\n triggerGetModels(queryString);\n }, [isDeleteModelSuceess]);\n\n useEffect(() => {\n if (allmodels) {\n if (data) {\n setAllModelsNames(allmodels?.records.filter((i: any) => i.id !== data.id).map((e: any) => e.singularName));\n\n } else {\n\n setAllModelsNames(allmodels?.records.map((e: any) => e.singularName));\n }\n }\n }, [allmodels, data]);\n\n\n const handleSubmit = async () => {\n\n if (formikModelMetadataRef.current) {\n await formikModelMetadataRef.current.submitForm(); // Call the handleSubmit function from the formik instance\n\n // @ts-ignore\n // formikModelMetadataRef.current.validateForm().then(() => {\n // if (Object.keys(formikModelMetadataRef?.current?.errors).length === 0) {\n\n // if (fieldMetaData.length > 0) {\n // handleFormSubmit();\n // } else {\n // if (activeIndex === 0) {\n // nextTab();\n // // showError({ error: \"Please add Atleast one field\" });\n // handleError([\"Please add Atleast one field\"])\n // } else {\n // handleError([\"Please add Atleast one field\"])\n // // showError({ error: \"Please add Atleast one field\" });\n // }\n // }\n // }\n // });\n\n formikModelMetadataRef.current.validateForm().then((errors: any) => {\n let firstErrorTab: TabValue | undefined;\n if (Object.keys(errors).length > 0) {\n setFormErrors(errors);\n const errorMessages = Object.values(errors);\n errorMessages.forEach((error) => {\n dispatch(showToast({ severity: 'error', summary: 'Error', detail: Array.isArray(error) ? error.join(', ') : String(error) }));\n });\n\n firstErrorTab = \"model\"; // Model Metadata tab has errors\n } else {\n setFormErrors({});\n }\n\n if (fieldMetaData.length === 0) {\n dispatch(showToast({ severity: 'error', summary: 'Error', detail: ERROR_MESSAGES.ADD_ATLEAST_ONE_FIELD }));\n firstErrorTab = firstErrorTab ?? \"fields\"; // If no prior error, set to Field tab\n }\n\n if (firstErrorTab !== undefined) {\n setTabErrors(getTabErrorState(firstErrorTab)); // Set error only on the first tab with an issue\n setActiveTab(firstErrorTab); // Switch to the tab with an error\n } else {\n setTabErrors(getTabErrorState());\n handleFormSubmit();\n }\n });\n }\n };\n\n\n const handleFormSubmit = async () => {\n\n let legacyTableConfig = {};\n\n if (modelMetaData?.isLegacyTable && modelMetaData?.isLegacyTableWithId) {\n // UI: Both checked → Backend: both true\n legacyTableConfig = {\n isLegacyTable: true,\n isLegacyTableWithId: false\n };\n } else if (modelMetaData?.isLegacyTable && !modelMetaData?.isLegacyTableWithId) {\n // UI: Only isLegacyTable checked → Backend: only isLegacyTableWithId true\n legacyTableConfig = {\n isLegacyTable: false,\n isLegacyTableWithId: true\n };\n } else {\n // UI: Neither checked → Backend: both false\n legacyTableConfig = {\n isLegacyTable: false,\n isLegacyTableWithId: false\n };\n }\n\n if (modelMetaData?.isLegacyTable || modelMetaData?.isLegacyTableWithId) {\n const hasPrimaryKey = fieldMetaData.some(\n (field: any) => field.isPrimaryKey === true\n );\n\n if (!hasPrimaryKey) {\n dispatch(showToast({ severity: \"error\", summary: \"Primary Key Required\", detail: \"Legacy tables set at least one field marked as Primary Key. Please mark a field as Primary Key before proceeding.\", life: 5000 }));\n return;\n }\n }\n\n if (data) {\n const fieldData = fieldMetaData.map(({ createdAt, updatedAt, deletedAt, mediaStorageProvider, identifier, ...rest }: any) => {\n if (rest.mediaMaxSizeKb) {\n rest.mediaMaxSizeKb = rest.mediaMaxSizeKb ? rest.mediaMaxSizeKb * 1024 : 0\n }\n return rest\n });\n const { module, parentModel, createdAt, updatedAt, id, deletedAt, ...modelData } = modelMetaData;\n const updateData = { ...modelData, displayName: modelData.displayName.trim(), fields: fieldData, ...legacyTableConfig };\n updateModel({ id: data.id, data: updateData });\n }\n else {\n if (modelMetaData) {\n const fieldData = fieldMetaData.map(({ mediaStorageProvider, identifier, ...rest }: any) => {\n if (rest.mediaMaxSizeKb) {\n rest.mediaMaxSizeKb = rest.mediaMaxSizeKb ? rest.mediaMaxSizeKb * 1024 : 0\n }\n return rest\n });\n const { module, parentModel, ...modelData } = modelMetaData;\n const data = { ...modelData, displayName: modelData.displayName.trim(), fields: fieldData, ...legacyTableConfig };\n createModel(data);\n if (isCreateModelSuccess) {\n\n }\n }\n }\n };\n\n const deleteModelFunction = async () => {\n deleteModel(data?.id);\n }\n\n useEffect(() => {\n if (isCreateModelSuccess == true || isUpdatedModelSuceess == true || isDeleteModelSuceess == true) {\n // router.push(`/admin/app-builder/model/all`);\n router.back();\n }\n }, [isCreateModelSuccess, isUpdatedModelSuceess, isDeleteModelSuceess])\n\n const showError = async (errors: any) => {\n const errorMessages = Object.values(errors);\n\n if (errorMessages.length > 0) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.SEND_REPORT, detail: errorMessages.map(String).join(', '), life: 3000 }));\n }\n };\n\n const isFetchBaseQueryErrorWithErrorResponse = (error: any): error is FetchBaseQueryError & { data: ErrorResponseData } => {\n return error && typeof error === 'object' && 'data' in error && 'message' in error.data;\n }\n\n // const handleError = (errorToast: any) => {\n // let errorMessage: any = ['An error occurred'];\n\n // if (isFetchBaseQueryErrorWithErrorResponse(errorToast)) {\n // errorMessage = errorToast.data.message;\n // } else {\n // errorMessage = ['Something went wrong'];\n // }\n\n // toast?.current?.show({\n // severity: 'error',\n // summary: 'Error',\n // detail: errorMessage,\n // life: 3000,\n // //@ts-ignore\n // content: (props) => (\n // <div className=\"flex flex-column align-items-left\" style={{ flex: \"1\" }}>\n // {Array.isArray(errorMessage) ? (\n // errorMessage.map((message, index) => (\n // <div className=\"flex align-items-center gap-2\" key={index}>\n // <span className=\"font-bold text-900\">{message.trim()}</span>\n // </div>\n // ))\n // ) : (\n // <div className=\"flex align-items-center gap-2\">\n // <span className=\"font-bold text-900\">{errorMessage?.trim()}</span>\n // </div>\n // )}\n // </div>\n // ),\n // });\n // };\n\n\n // Error Handler \n // Added useEffect to remove active tab class border color if error is there.\n\n useEffect(() => {\n const errors = [\n { isError: isCreateModelError, error: createModelError },\n { isError: isDeleteModelError, error: deleteModelError },\n { isError: isUpdateModelError, error: updateModelError },\n ];\n if (errors.length > 0) {\n // Handle any error\n errors.forEach(({ isError, error }) => {\n if (isError && error) {\n const errorMessage = error && typeof error === 'object' && 'data' in error && 'message' in (error as any).data\n ? (error as any).data.message\n : 'Something went wrong';\n const detail = Array.isArray(errorMessage) ? errorMessage.join(', ') : String(errorMessage);\n dispatch(showToast({ severity: 'error', summary: 'Error', detail }));\n }\n });\n }\n\n }, [isCreateModelError, isDeleteModelError, isUpdateModelError])\n const [formActionsMenuOpen, setFormActionsMenuOpen] = useState(false);\n const formActionDropdown = () => (\n <SolidPopover open={formActionsMenuOpen} onOpenChange={setFormActionsMenuOpen}>\n <SolidPopoverTrigger asChild>\n <SolidButton\n variant=\"ghost\"\n size=\"sm\"\n className=\"solid-icon-button\"\n aria-label=\"Model actions\"\n >\n <Settings size={16} />\n </SolidButton>\n </SolidPopoverTrigger>\n <SolidPopoverContent\n side=\"bottom\"\n align=\"end\"\n className=\"solid-form-actions-popover\"\n onClick={(event) => event.stopPropagation()}\n >\n <button\n type=\"button\"\n className=\"solid-row-action-button solid-row-action-button-danger\"\n onClick={() => {\n setFormActionsMenuOpen(false);\n setDeleteEntity(true);\n }}\n >\n <Trash2 size={14} className=\"solid-row-action-button-icon\" />\n <span className=\"solid-row-action-button-label\">Delete</span>\n </button>\n </SolidPopoverContent>\n </SolidPopover>\n );\n\n const [isDirty, setIsDirty] = useState(false);\n const isCreateMode = params.id === \"new\";\n const headerTitleBase = isCreateMode ? \"Create Model\" : \"Edit Model\";\n const headerTitle = `${headerTitleBase}${modelMetaData?.displayName ? ` - ${modelMetaData.displayName}` : \"\"}`;\n const canShowActionsMenu = !isCreateMode && data?.isSystem !== true;\n const handleCancel = () => router.back();\n\n\n return (\n <div className=\"solid-form-wrapper\">\n <div className=\"solid-form-section\" style={{ borderRight: params.embeded !== true ? '1px solid var(--primary-light-color)' : '' }} >\n <div>\n <div className=\"solid-form-header flex align-items-center justify-content-between gap-3 flex-wrap\">\n <div className=\"flex flex-column gap-1\">\n {/* <span className=\"text-sm text-color-secondary uppercase tracking-wider\">Model</span>\n <div className=\"form-wrapper-title solid-long-text-wrapper m-0\">{headerTitle}</div> */}\n </div>\n <div className=\"flex align-items-center gap-2\">\n <SolidButton\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n onClick={handleCancel}\n className=\"bg-primary-reverse\"\n >\n Cancel\n </SolidButton>\n {isDirty && (\n <SolidButton size=\"sm\" type=\"button\" onClick={handleSubmit}>\n Save\n </SolidButton>\n )}\n {canShowActionsMenu && formActionDropdown()}\n </div>\n </div>\n {/* <SolidFormHeader /> */}\n <div className=\"px-4 py-3 md:p-4 solid-form-content\">\n <SolidTabGroup\n className=\"relative\"\n panelClassName=\"px-0\"\n tabs={[\n {\n value: \"model\",\n label: <span className={tabErrors.model ? \"tab-error-heading\" : \"\"}>Model</span>,\n content: (\n <ModelMetaData\n modelMetaData={modelMetaData}\n setModelMetaData={setModelMetaData}\n allModelsNames={allModelsNames}\n deleteModelFunction={deleteModelFunction}\n nextTab={nextTab}\n formikModelMetadataRef={formikModelMetadataRef}\n params={params}\n formErrors={formErrors}\n setIsDirty={setIsDirty}\n ></ModelMetaData>\n ),\n },\n {\n value: \"fields\",\n label: <span className={tabErrors.fields ? \"tab-error-heading\" : \"\"}>Fields</span>,\n content: (\n <FieldMetaData\n modelMetaData={modelMetaData}\n fieldMetaData={fieldMetaData}\n setFieldMetaData={setFieldMetaData}\n deleteModelFunction={deleteModelFunction}\n nextTab={nextTab}\n formikFieldsMetadataRef={formikFieldsMetadataRef}\n params={params}\n setIsDirty={setIsDirty}\n ></FieldMetaData>\n ),\n },\n ]}\n value={activeTab}\n onValueChange={(value) => {\n const next = TABS.find((tab) => tab === value);\n if (next) {\n handleTabChange(next);\n }\n }}\n />\n </div>\n </div>\n <SolidFormFooter params={params}></SolidFormFooter>\n\n </div>\n {/* <div style={{ width: '22.5%' }}></div> */}\n <SolidDialog header=\"Delete Model\" headerClassName=\"py-2\" className=\"solid-confirm-dialog\" contentClassName=\"px-0 pb-0\" visible={deleteEntity} style={{ width: '20vw' }} onHide={() => { if (!deleteEntity) return; setDeleteEntity(false); }}>\n <SolidDivider className=\"m-0\" />\n <div className=\"p-4\">\n <p className=\"m-0 solid-primary-title\" style={{ fontSize: 16 }}>\n Are you sure you want to delete this Model?\n </p>\n <p className=\"\" style={{ color: 'var{--solid-grey-500}' }}>{modelMetaData?.singularName}</p>\n <div className=\"flex align-items-center gap-2 mt-3\">\n <SolidButton size=\"sm\" onClick={deleteModelFunction}>\n Delete\n </SolidButton>\n <SolidButton size=\"sm\" variant=\"outline\" onClick={() => setDeleteEntity(false)}>\n Cancel\n </SolidButton>\n </div>\n </div>\n </SolidDialog>\n\n </div>\n );\n};\n\nexport default CreateModel;\n"]}
|
|
1
|
+
{"version":3,"file":"CreateModel.js","sourceRoot":"","sources":["../../../../src/components/core/model/CreateModel.tsx"],"names":[],"mappings":"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","sourcesContent":["\n\nimport { useGetFieldDefaultMetaDataQuery } from \"../../../redux/api/fieldApi\";\nimport { useCreatemodelMutation, useDeletemodelMutation, useLazyGetModelsQuery, useUpdatemodelMutation } from \"../../../redux/api/modelApi\";\nimport { FetchBaseQueryError } from \"@reduxjs/toolkit/dist/query\";\nimport { usePathname } from \"../../../hooks/usePathname\";\nimport { useRouter } from \"../../../hooks/useRouter\";\nimport qs from \"qs\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { showToast } from \"../../../redux/features/toastSlice\";\nimport FieldMetaData from \"./FieldMetaData\";\nimport ModelMetaData from \"./ModelMetaData\";\nimport { SolidFormStepper } from \"../../../components/common/SolidFormStepper\";\nimport { SolidBreadcrumb } from \"../../../components/common/SolidBreadcrumb\";\nimport { SolidFormHeader } from \"../../../components/common/SolidFormHeader\";\nimport { ERROR_MESSAGES } from \"../../../constants/error-messages\";\nimport { SolidButton, SolidDialog, SolidDivider, SolidPopover, SolidPopoverContent, SolidPopoverTrigger, SolidTabGroup } from \"../../shad-cn-ui\";\nimport { Settings, Trash2 } from \"lucide-react\";\nimport { SolidFormFooter } from \"../form/SolidFormFooter\";\n\ninterface ErrorResponseData {\n message: string;\n statusCode: number;\n error: string;\n}\n\nconst TABS = [\"model\", \"fields\"] as const;\ntype TabValue = typeof TABS[number];\n\nconst getTabErrorState = (tab?: TabValue): Record<TabValue, boolean> => ({\n model: tab === \"model\",\n fields: tab === \"fields\",\n});\n\nconst CreateModel = ({ data, params }: any) => {\n\n const dispatch = useDispatch();\n const router = useRouter();\n const pathname = usePathname();\n const [deleteEntity, setDeleteEntity] = useState(false);\n const [isLoadingData, setIsLoadingData] = useState(data ? true : false);\n const formikModelMetadataRef = useRef<any>();\n const formikFieldsMetadataRef = useRef();\n\n const [modelMetaData, setModelMetaData] = useState<any>();\n const [fieldMetaData, setFieldMetaData] = useState<any>([]);\n\n const { data: fieldDefaultMetaData, refetch } = useGetFieldDefaultMetaDataQuery(null);\n const [allModelsNames, setAllModelsNames] = useState([]);\n\n const [triggerGetModels, { data: allmodels, isLoading: isAllModelsLoaded, error: allModelsError }] =\n useLazyGetModelsQuery();\n\n\n const [\n createModel,\n { isLoading: isCreateModelLoading, isSuccess: isCreateModelSuccess, isError: isCreateModelError, error: createModelError, data: newModel },\n ] = useCreatemodelMutation();\n\n const [\n updateModel,\n { isLoading: isUpdatedModelUpdating, isSuccess: isUpdatedModelSuceess, isError: isUpdateModelError, error: updateModelError, data: updatedModel },\n ] = useUpdatemodelMutation();\n const [\n deleteModel,\n { isLoading: isModelDeleted, isSuccess: isDeleteModelSuceess, isError: isDeleteModelError, error: deleteModelError, data: DeletedModel },\n ] = useDeletemodelMutation();\n\n const [activeTab, setActiveTab] = useState<TabValue>(\"model\");\n const [tabErrors, setTabErrors] = useState<Record<TabValue, boolean>>(getTabErrorState());\n const [formErrors, setFormErrors] = useState<Record<string, string>>({});\n\n const nextTab = () => {\n const currentIndex = TABS.indexOf(activeTab);\n const nextValue = TABS[Math.min(currentIndex + 1, TABS.length - 1)];\n setActiveTab(nextValue);\n };\n\n const handleTabChange = (nextValue: TabValue) => {\n if (nextValue === activeTab) {\n return;\n }\n if (activeTab === \"model\") {\n formikModelMetadataRef.current?.handleSubmit();\n }\n setActiveTab(nextValue);\n };\n\n useEffect(() => {\n if (data) {\n const isLegacyTable = data.legacyTableType !== 'none'\n const hasExistingId = data.legacyTableType === 'existing_id'\n const modelData = {\n ...data, moduleId: data?.module?.id, parentModelId: data?.parentModel, isLegacyTable, hasExistingId\n }\n\n setIsLoadingData(false);\n setModelMetaData(modelData);\n const fieldData = data.fields.map((f: any) => {\n const fieldCopy = { ...f }; // Create a shallow copy of the field object\n fieldCopy.identifier = f.id; // Add the identifier property\n if (fieldCopy.type == \"mediaSingle\" || fieldCopy.type == \"mediaMultiple\") {\n fieldCopy.mediaMaxSizeKb = f.mediaMaxSizeKb / 1024; // Add the identifier property\n\n }\n return fieldCopy;\n })\n setFieldMetaData(fieldData.sort((a: any, b: any) => b.id - a.id))\n }\n }, [data])\n\n\n useEffect(() => {\n const queryData = {\n offset: 0,\n limit: 1000,\n };\n const queryString = qs.stringify(queryData, {\n encodeValuesOnly: true\n });\n triggerGetModels(queryString);\n }, [isDeleteModelSuceess]);\n\n useEffect(() => {\n if (allmodels) {\n if (data) {\n setAllModelsNames(allmodels?.records.filter((i: any) => i.id !== data.id).map((e: any) => e.singularName));\n\n } else {\n\n setAllModelsNames(allmodels?.records.map((e: any) => e.singularName));\n }\n }\n }, [allmodels, data]);\n\n\n const handleSubmit = async () => {\n\n if (formikModelMetadataRef.current) {\n await formikModelMetadataRef.current.submitForm(); // Call the handleSubmit function from the formik instance\n\n // @ts-ignore\n // formikModelMetadataRef.current.validateForm().then(() => {\n // if (Object.keys(formikModelMetadataRef?.current?.errors).length === 0) {\n\n // if (fieldMetaData.length > 0) {\n // handleFormSubmit();\n // } else {\n // if (activeIndex === 0) {\n // nextTab();\n // // showError({ error: \"Please add Atleast one field\" });\n // handleError([\"Please add Atleast one field\"])\n // } else {\n // handleError([\"Please add Atleast one field\"])\n // // showError({ error: \"Please add Atleast one field\" });\n // }\n // }\n // }\n // });\n\n formikModelMetadataRef.current.validateForm().then((errors: any) => {\n let firstErrorTab: TabValue | undefined;\n if (Object.keys(errors).length > 0) {\n setFormErrors(errors);\n const errorMessages = Object.values(errors);\n errorMessages.forEach((error) => {\n dispatch(showToast({ severity: 'error', summary: 'Error', detail: Array.isArray(error) ? error.join(', ') : String(error) }));\n });\n\n firstErrorTab = \"model\"; // Model Metadata tab has errors\n } else {\n setFormErrors({});\n }\n\n if (fieldMetaData.length === 0) {\n dispatch(showToast({ severity: 'error', summary: 'Error', detail: ERROR_MESSAGES.ADD_ATLEAST_ONE_FIELD }));\n firstErrorTab = firstErrorTab ?? \"fields\"; // If no prior error, set to Field tab\n }\n\n if (firstErrorTab !== undefined) {\n setTabErrors(getTabErrorState(firstErrorTab)); // Set error only on the first tab with an issue\n setActiveTab(firstErrorTab); // Switch to the tab with an error\n } else {\n setTabErrors(getTabErrorState());\n handleFormSubmit();\n }\n });\n }\n };\n\n\n const handleFormSubmit = async () => {\n\n let legacyTableConfig = {};\n\n let legacyTableType = 'none';\n if (modelMetaData?.isLegacyTable && modelMetaData?.hasExistingId) {\n legacyTableType = 'existing_id';\n } else if (modelMetaData?.isLegacyTable) {\n legacyTableType = 'generated_id';\n }\n legacyTableConfig = { legacyTableType };\n\n if (modelMetaData?.isLegacyTable) {\n const hasPrimaryKey = fieldMetaData.some(\n (field: any) => field.isPrimaryKey === true\n );\n\n if (!hasPrimaryKey) {\n dispatch(showToast({ severity: \"error\", summary: \"Primary Key Required\", detail: \"Legacy tables set at least one field marked as Primary Key. Please mark a field as Primary Key before proceeding.\", life: 5000 }));\n return;\n }\n }\n\n if (data) {\n const fieldData = fieldMetaData.map(({ createdAt, updatedAt, deletedAt, mediaStorageProvider, identifier, ...rest }: any) => {\n if (rest.mediaMaxSizeKb) {\n rest.mediaMaxSizeKb = rest.mediaMaxSizeKb ? rest.mediaMaxSizeKb * 1024 : 0\n }\n return rest\n });\n const { module, parentModel, createdAt, updatedAt, id, deletedAt, ...modelData } = modelMetaData;\n const updateData = { ...modelData, displayName: modelData.displayName.trim(), fields: fieldData, ...legacyTableConfig };\n updateModel({ id: data.id, data: updateData });\n }\n else {\n if (modelMetaData) {\n const fieldData = fieldMetaData.map(({ mediaStorageProvider, identifier, ...rest }: any) => {\n if (rest.mediaMaxSizeKb) {\n rest.mediaMaxSizeKb = rest.mediaMaxSizeKb ? rest.mediaMaxSizeKb * 1024 : 0\n }\n return rest\n });\n const { module, parentModel, ...modelData } = modelMetaData;\n const data = { ...modelData, displayName: modelData.displayName.trim(), fields: fieldData, ...legacyTableConfig };\n createModel(data);\n if (isCreateModelSuccess) {\n\n }\n }\n }\n };\n\n const deleteModelFunction = async () => {\n deleteModel(data?.id);\n }\n\n useEffect(() => {\n if (isCreateModelSuccess == true || isUpdatedModelSuceess == true || isDeleteModelSuceess == true) {\n // router.push(`/admin/app-builder/model/all`);\n router.back();\n }\n }, [isCreateModelSuccess, isUpdatedModelSuceess, isDeleteModelSuceess])\n\n const showError = async (errors: any) => {\n const errorMessages = Object.values(errors);\n\n if (errorMessages.length > 0) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.SEND_REPORT, detail: errorMessages.map(String).join(', '), life: 3000 }));\n }\n };\n\n const isFetchBaseQueryErrorWithErrorResponse = (error: any): error is FetchBaseQueryError & { data: ErrorResponseData } => {\n return error && typeof error === 'object' && 'data' in error && 'message' in error.data;\n }\n\n // const handleError = (errorToast: any) => {\n // let errorMessage: any = ['An error occurred'];\n\n // if (isFetchBaseQueryErrorWithErrorResponse(errorToast)) {\n // errorMessage = errorToast.data.message;\n // } else {\n // errorMessage = ['Something went wrong'];\n // }\n\n // toast?.current?.show({\n // severity: 'error',\n // summary: 'Error',\n // detail: errorMessage,\n // life: 3000,\n // //@ts-ignore\n // content: (props) => (\n // <div className=\"flex flex-column align-items-left\" style={{ flex: \"1\" }}>\n // {Array.isArray(errorMessage) ? (\n // errorMessage.map((message, index) => (\n // <div className=\"flex align-items-center gap-2\" key={index}>\n // <span className=\"font-bold text-900\">{message.trim()}</span>\n // </div>\n // ))\n // ) : (\n // <div className=\"flex align-items-center gap-2\">\n // <span className=\"font-bold text-900\">{errorMessage?.trim()}</span>\n // </div>\n // )}\n // </div>\n // ),\n // });\n // };\n\n\n // Error Handler \n // Added useEffect to remove active tab class border color if error is there.\n\n useEffect(() => {\n const errors = [\n { isError: isCreateModelError, error: createModelError },\n { isError: isDeleteModelError, error: deleteModelError },\n { isError: isUpdateModelError, error: updateModelError },\n ];\n if (errors.length > 0) {\n // Handle any error\n errors.forEach(({ isError, error }) => {\n if (isError && error) {\n const errorMessage = error && typeof error === 'object' && 'data' in error && 'message' in (error as any).data\n ? (error as any).data.message\n : 'Something went wrong';\n const detail = Array.isArray(errorMessage) ? errorMessage.join(', ') : String(errorMessage);\n dispatch(showToast({ severity: 'error', summary: 'Error', detail }));\n }\n });\n }\n\n }, [isCreateModelError, isDeleteModelError, isUpdateModelError])\n const [formActionsMenuOpen, setFormActionsMenuOpen] = useState(false);\n const formActionDropdown = () => (\n <SolidPopover open={formActionsMenuOpen} onOpenChange={setFormActionsMenuOpen}>\n <SolidPopoverTrigger asChild>\n <SolidButton\n variant=\"ghost\"\n size=\"sm\"\n className=\"solid-icon-button\"\n aria-label=\"Model actions\"\n >\n <Settings size={16} />\n </SolidButton>\n </SolidPopoverTrigger>\n <SolidPopoverContent\n side=\"bottom\"\n align=\"end\"\n className=\"solid-form-actions-popover\"\n onClick={(event) => event.stopPropagation()}\n >\n <button\n type=\"button\"\n className=\"solid-row-action-button solid-row-action-button-danger\"\n onClick={() => {\n setFormActionsMenuOpen(false);\n setDeleteEntity(true);\n }}\n >\n <Trash2 size={14} className=\"solid-row-action-button-icon\" />\n <span className=\"solid-row-action-button-label\">Delete</span>\n </button>\n </SolidPopoverContent>\n </SolidPopover>\n );\n\n const [isDirty, setIsDirty] = useState(false);\n const isCreateMode = params.id === \"new\";\n const headerTitleBase = isCreateMode ? \"Create Model\" : \"Edit Model\";\n const headerTitle = `${headerTitleBase}${modelMetaData?.displayName ? ` - ${modelMetaData.displayName}` : \"\"}`;\n const canShowActionsMenu = !isCreateMode && data?.isSystem !== true;\n const handleCancel = () => router.back();\n\n\n return (\n <div className=\"solid-form-wrapper\">\n <div className=\"solid-form-section\" style={{ borderRight: params.embeded !== true ? '1px solid var(--primary-light-color)' : '' }} >\n <div>\n <div className=\"solid-form-header flex align-items-center justify-content-between gap-3 flex-wrap\">\n <div className=\"flex flex-column gap-1\">\n {/* <span className=\"text-sm text-color-secondary uppercase tracking-wider\">Model</span>\n <div className=\"form-wrapper-title solid-long-text-wrapper m-0\">{headerTitle}</div> */}\n </div>\n <div className=\"flex align-items-center gap-2\">\n <SolidButton\n variant=\"outline\"\n size=\"sm\"\n type=\"button\"\n onClick={handleCancel}\n className=\"bg-primary-reverse\"\n >\n Cancel\n </SolidButton>\n {isDirty && (\n <SolidButton size=\"sm\" type=\"button\" onClick={handleSubmit}>\n Save\n </SolidButton>\n )}\n {canShowActionsMenu && formActionDropdown()}\n </div>\n </div>\n {/* <SolidFormHeader /> */}\n <div className=\"px-4 py-3 md:p-4 solid-form-content\">\n <SolidTabGroup\n className=\"relative\"\n panelClassName=\"px-0\"\n tabs={[\n {\n value: \"model\",\n label: <span className={tabErrors.model ? \"tab-error-heading\" : \"\"}>Model</span>,\n content: (\n <ModelMetaData\n modelMetaData={modelMetaData}\n setModelMetaData={setModelMetaData}\n allModelsNames={allModelsNames}\n deleteModelFunction={deleteModelFunction}\n nextTab={nextTab}\n formikModelMetadataRef={formikModelMetadataRef}\n params={params}\n formErrors={formErrors}\n setIsDirty={setIsDirty}\n ></ModelMetaData>\n ),\n },\n {\n value: \"fields\",\n label: <span className={tabErrors.fields ? \"tab-error-heading\" : \"\"}>Fields</span>,\n content: (\n <FieldMetaData\n modelMetaData={modelMetaData}\n fieldMetaData={fieldMetaData}\n setFieldMetaData={setFieldMetaData}\n deleteModelFunction={deleteModelFunction}\n nextTab={nextTab}\n formikFieldsMetadataRef={formikFieldsMetadataRef}\n params={params}\n setIsDirty={setIsDirty}\n ></FieldMetaData>\n ),\n },\n ]}\n value={activeTab}\n onValueChange={(value) => {\n const next = TABS.find((tab) => tab === value);\n if (next) {\n handleTabChange(next);\n }\n }}\n />\n </div>\n </div>\n <SolidFormFooter params={params}></SolidFormFooter>\n\n </div>\n {/* <div style={{ width: '22.5%' }}></div> */}\n <SolidDialog header=\"Delete Model\" headerClassName=\"py-2\" className=\"solid-confirm-dialog\" contentClassName=\"px-0 pb-0\" visible={deleteEntity} style={{ width: '20vw' }} onHide={() => { if (!deleteEntity) return; setDeleteEntity(false); }}>\n <SolidDivider className=\"m-0\" />\n <div className=\"p-4\">\n <p className=\"m-0 solid-primary-title\" style={{ fontSize: 16 }}>\n Are you sure you want to delete this Model?\n </p>\n <p className=\"\" style={{ color: 'var{--solid-grey-500}' }}>{modelMetaData?.singularName}</p>\n <div className=\"flex align-items-center gap-2 mt-3\">\n <SolidButton size=\"sm\" onClick={deleteModelFunction}>\n Delete\n </SolidButton>\n <SolidButton size=\"sm\" variant=\"outline\" onClick={() => setDeleteEntity(false)}>\n Cancel\n </SolidButton>\n </div>\n </div>\n </SolidDialog>\n\n </div>\n );\n};\n\nexport default CreateModel;\n"]}
|
|
@@ -89,10 +89,10 @@ const CreateModel = ({ data, params }: any) => {
|
|
|
89
89
|
|
|
90
90
|
useEffect(() => {
|
|
91
91
|
if (data) {
|
|
92
|
-
const isLegacyTable = data.
|
|
93
|
-
const
|
|
92
|
+
const isLegacyTable = data.legacyTableType !== 'none'
|
|
93
|
+
const hasExistingId = data.legacyTableType === 'existing_id'
|
|
94
94
|
const modelData = {
|
|
95
|
-
...data, moduleId: data?.module?.id, parentModelId: data?.parentModel, isLegacyTable,
|
|
95
|
+
...data, moduleId: data?.module?.id, parentModelId: data?.parentModel, isLegacyTable, hasExistingId
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
setIsLoadingData(false);
|
|
@@ -194,27 +194,15 @@ const CreateModel = ({ data, params }: any) => {
|
|
|
194
194
|
|
|
195
195
|
let legacyTableConfig = {};
|
|
196
196
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
};
|
|
203
|
-
} else if (modelMetaData?.isLegacyTable && !modelMetaData?.isLegacyTableWithId) {
|
|
204
|
-
// UI: Only isLegacyTable checked → Backend: only isLegacyTableWithId true
|
|
205
|
-
legacyTableConfig = {
|
|
206
|
-
isLegacyTable: false,
|
|
207
|
-
isLegacyTableWithId: true
|
|
208
|
-
};
|
|
209
|
-
} else {
|
|
210
|
-
// UI: Neither checked → Backend: both false
|
|
211
|
-
legacyTableConfig = {
|
|
212
|
-
isLegacyTable: false,
|
|
213
|
-
isLegacyTableWithId: false
|
|
214
|
-
};
|
|
197
|
+
let legacyTableType = 'none';
|
|
198
|
+
if (modelMetaData?.isLegacyTable && modelMetaData?.hasExistingId) {
|
|
199
|
+
legacyTableType = 'existing_id';
|
|
200
|
+
} else if (modelMetaData?.isLegacyTable) {
|
|
201
|
+
legacyTableType = 'generated_id';
|
|
215
202
|
}
|
|
203
|
+
legacyTableConfig = { legacyTableType };
|
|
216
204
|
|
|
217
|
-
if (modelMetaData?.isLegacyTable
|
|
205
|
+
if (modelMetaData?.isLegacyTable) {
|
|
218
206
|
const hasPrimaryKey = fieldMetaData.some(
|
|
219
207
|
(field: any) => field.isPrimaryKey === true
|
|
220
208
|
);
|
|
@@ -1622,7 +1622,7 @@ var FieldMetaDataForm = function (_a) {
|
|
|
1622
1622
|
formik.setFieldValue("enableAuditTracking", event.currentTarget.checked);
|
|
1623
1623
|
}, checked: formik.values.enableAuditTracking }), _jsx("label", { htmlFor: "enableAuditTracking", className: classNames("form-field-label", styles.fieldLabel), children: "Enable Audit Tracking" })] }), _jsx("p", { className: "fieldSubTitle", children: "By selecting this option, you are setting audit trail for this field." }), isFormFieldValid(formik, "enableAuditTracking") && (_jsx("p", { className: styles.fieldError, children: (_74 = (_73 = formik === null || formik === void 0 ? void 0 : formik.errors) === null || _73 === void 0 ? void 0 : _73.enableAuditTracking) === null || _74 === void 0 ? void 0 : _74.toString() }))] })), currentFields.includes("isUserKey") && formik.values.unique && (_jsxs("div", { className: "field col-6 flex-flex-column gap-2 mt-2", children: [_jsxs("div", { className: "flex align-items-center gap-2", children: [_jsx(SolidCheckbox, { id: "isUserKey", name: "isUserKey", onChange: function (event) {
|
|
1624
1624
|
formik.setFieldValue("isUserKey", event.currentTarget.checked);
|
|
1625
|
-
}, checked: formik.values.isUserKey }), _jsx("label", { htmlFor: "isUserKey", className: classNames("form-field-label", styles.fieldLabel), children: "Is Userkey" })] }), _jsx("p", { className: "fieldSubTitle", children: "By selecting this option, you are setting this field as the model's user key. Any existing user key configuration will be overwritten" }), isFormFieldValid(formik, "isUserKey") && (_jsx("p", { className: styles.fieldError, children: (_76 = (_75 = formik === null || formik === void 0 ? void 0 : formik.errors) === null || _75 === void 0 ? void 0 : _75.isUserKey) === null || _76 === void 0 ? void 0 : _76.toString() }))] })), currentFields.includes("isPrimaryKey") && (
|
|
1625
|
+
}, checked: formik.values.isUserKey }), _jsx("label", { htmlFor: "isUserKey", className: classNames("form-field-label", styles.fieldLabel), children: "Is Userkey" })] }), _jsx("p", { className: "fieldSubTitle", children: "By selecting this option, you are setting this field as the model's user key. Any existing user key configuration will be overwritten" }), isFormFieldValid(formik, "isUserKey") && (_jsx("p", { className: styles.fieldError, children: (_76 = (_75 = formik === null || formik === void 0 ? void 0 : formik.errors) === null || _75 === void 0 ? void 0 : _75.isUserKey) === null || _76 === void 0 ? void 0 : _76.toString() }))] })), currentFields.includes("isPrimaryKey") && (modelMetaData === null || modelMetaData === void 0 ? void 0 : modelMetaData.isLegacyTable) && (_jsxs("div", { className: "field col-6 flex-flex-column gap-2 mt-2", children: [_jsxs("div", { className: "flex align-items-center gap-2", children: [_jsx(SolidCheckbox, { id: "isPrimaryKey", name: "isPrimaryKey", onChange: function (event) {
|
|
1626
1626
|
var checked = event.currentTarget.checked;
|
|
1627
1627
|
formik.setFieldValue("isPrimaryKey", checked);
|
|
1628
1628
|
// Auto-set required and unique when isPrimaryKey is checked
|