@solidxai/core-ui 0.1.13-beta.3 → 0.1.13-beta.5
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/auth/AuthTabs.d.ts.map +1 -1
- package/dist/components/auth/AuthTabs.js +1 -1
- package/dist/components/auth/AuthTabs.js.map +1 -1
- package/dist/components/auth/AuthTabs.tsx +1 -0
- package/dist/components/auth/SolidChangeForcePassword.d.ts.map +1 -1
- package/dist/components/auth/SolidChangeForcePassword.js +2 -2
- package/dist/components/auth/SolidChangeForcePassword.js.map +1 -1
- package/dist/components/auth/SolidChangeForcePassword.tsx +9 -8
- package/dist/components/common/SettingsComponent.d.ts.map +1 -1
- package/dist/components/common/SettingsComponent.js +1 -1
- package/dist/components/common/SettingsComponent.js.map +1 -1
- package/dist/components/common/SettingsComponent.tsx +1 -0
- package/dist/components/common/SolidFieldTooltip.d.ts.map +1 -1
- package/dist/components/common/SolidFieldTooltip.js +1 -33
- package/dist/components/common/SolidFieldTooltip.js.map +1 -1
- package/dist/components/common/SolidFieldTooltip.tsx +8 -64
- package/dist/components/common/SolidMaterialSymbol.d.ts +1 -1
- package/dist/components/common/SolidMaterialSymbol.d.ts.map +1 -1
- package/dist/components/common/SolidMaterialSymbol.js +6 -37
- package/dist/components/common/SolidMaterialSymbol.js.map +1 -1
- package/dist/components/common/SolidMaterialSymbol.tsx +6 -54
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.d.ts.map +1 -1
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js +2 -2
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.js.map +1 -1
- package/dist/components/common/SolidSettings/LlmSettings/AiModelConfigTab.tsx +2 -0
- package/dist/components/core/card/CardItem.d.ts.map +1 -1
- package/dist/components/core/card/CardItem.js +1 -1
- package/dist/components/core/card/CardItem.js.map +1 -1
- package/dist/components/core/card/CardItem.tsx +16 -14
- package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
- package/dist/components/core/card/SolidCardView.js +75 -51
- package/dist/components/core/card/SolidCardView.js.map +1 -1
- package/dist/components/core/card/SolidCardView.tsx +61 -35
- package/dist/components/core/card/SolidCardViewConfigure.d.ts.map +1 -1
- package/dist/components/core/card/SolidCardViewConfigure.js +3 -7
- package/dist/components/core/card/SolidCardViewConfigure.js.map +1 -1
- package/dist/components/core/card/SolidCardViewConfigure.tsx +3 -9
- package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.module.css +99 -0
- package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.d.ts.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.js +76 -5
- package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.js.map +1 -1
- package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.tsx +39 -4
- package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.js +172 -124
- package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
- package/dist/components/core/common/SolidGlobalSearchElement.tsx +73 -84
- package/dist/components/core/common/globalSearchPersistence.d.ts +3 -0
- package/dist/components/core/common/globalSearchPersistence.d.ts.map +1 -1
- package/dist/components/core/common/globalSearchPersistence.js +33 -24
- package/dist/components/core/common/globalSearchPersistence.js.map +1 -1
- package/dist/components/core/common/globalSearchPersistence.ts +34 -27
- package/dist/components/core/filter/fields/SolidMediaMultipleField.js +2 -2
- package/dist/components/core/filter/fields/SolidMediaMultipleField.js.map +1 -1
- package/dist/components/core/filter/fields/SolidMediaMultipleField.tsx +2 -2
- package/dist/components/core/filter/fields/SolidMediaSingleField.js +2 -2
- package/dist/components/core/filter/fields/SolidMediaSingleField.js.map +1 -1
- package/dist/components/core/filter/fields/SolidMediaSingleField.tsx +2 -2
- package/dist/components/core/filter/fields/SolidShortTextField.js +2 -2
- package/dist/components/core/filter/fields/SolidShortTextField.js.map +1 -1
- package/dist/components/core/filter/fields/SolidShortTextField.tsx +2 -2
- package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
- package/dist/components/core/form/SolidFormView.js +2 -10
- package/dist/components/core/form/SolidFormView.js.map +1 -1
- package/dist/components/core/form/SolidFormView.tsx +2 -10
- package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
- package/dist/components/core/kanban/KanbanCard.js +1 -1
- package/dist/components/core/kanban/KanbanCard.js.map +1 -1
- package/dist/components/core/kanban/KanbanCard.tsx +18 -16
- package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.js +73 -59
- package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanView.tsx +57 -22
- package/dist/components/core/kanban/SolidKanbanViewConfigure.d.ts +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.d.ts.map +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.js +14 -9
- package/dist/components/core/kanban/SolidKanbanViewConfigure.js.map +1 -1
- package/dist/components/core/kanban/SolidKanbanViewConfigure.tsx +38 -9
- package/dist/components/core/list/SolidEmptyListViewPlaceholder.d.ts.map +1 -1
- package/dist/components/core/list/SolidEmptyListViewPlaceholder.js +2 -3
- package/dist/components/core/list/SolidEmptyListViewPlaceholder.js.map +1 -1
- package/dist/components/core/list/SolidEmptyListViewPlaceholder.tsx +2 -3
- package/dist/components/core/list/SolidListView.d.ts.map +1 -1
- package/dist/components/core/list/SolidListView.js +8 -16
- package/dist/components/core/list/SolidListView.js.map +1 -1
- package/dist/components/core/list/SolidListView.tsx +9 -15
- package/dist/components/core/list/SolidListViewConfigure.d.ts.map +1 -1
- package/dist/components/core/list/SolidListViewConfigure.js +22 -16
- package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
- package/dist/components/core/list/SolidListViewConfigure.tsx +32 -11
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.d.ts +1 -1
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.d.ts.map +1 -1
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js +3 -1
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.js.map +1 -1
- package/dist/components/core/list/SolidListViewHeaderContextMenuButton.tsx +3 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.js +7 -0
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidMediaMultipleColumn.tsx +5 -0
- package/dist/components/core/list/columns/SolidMediaSingleColumn.d.ts.map +1 -1
- package/dist/components/core/list/columns/SolidMediaSingleColumn.js +3 -0
- package/dist/components/core/list/columns/SolidMediaSingleColumn.js.map +1 -1
- package/dist/components/core/list/columns/SolidMediaSingleColumn.tsx +2 -0
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.d.ts.map +1 -1
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.js +3 -0
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.js.map +1 -1
- package/dist/components/core/list/widgets/SolidShortTextFieldImageRenderModeWidget.tsx +2 -0
- package/dist/components/core/model/CreateModel.css +10 -0
- package/dist/components/core/model/FieldMetaDataForm.css +10 -0
- package/dist/components/core/model/FieldMetaDataForm.js +8 -8
- package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
- package/dist/components/core/model/FieldMetaDataForm.tsx +13 -13
- package/dist/components/core/module/ModuleMetadataExplorer.css +23 -0
- package/dist/components/core/module/ModuleMetadataExplorer.d.ts.map +1 -1
- package/dist/components/core/module/ModuleMetadataExplorer.js +1 -1
- package/dist/components/core/module/ModuleMetadataExplorer.js.map +1 -1
- package/dist/components/core/module/ModuleMetadataExplorer.tsx +9 -0
- package/dist/components/core/tree/SolidTreeView.d.ts.map +1 -1
- package/dist/components/core/tree/SolidTreeView.js +251 -152
- package/dist/components/core/tree/SolidTreeView.js.map +1 -1
- package/dist/components/core/tree/SolidTreeView.tsx +222 -106
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.d.ts.map +1 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js +1 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js.map +1 -1
- package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.tsx +1 -0
- package/dist/components/layout/AdminHeaderActions.js +6 -13
- package/dist/components/layout/AdminHeaderActions.js.map +1 -1
- package/dist/components/layout/AdminHeaderActions.tsx +11 -11
- package/dist/components/layout/AdminLayout.d.ts.map +1 -1
- package/dist/components/layout/AdminLayout.js +2 -2
- package/dist/components/layout/AdminLayout.js.map +1 -1
- package/dist/components/layout/AdminLayout.tsx +5 -4
- package/dist/components/layout/AppSidebar.d.ts.map +1 -1
- package/dist/components/layout/AppSidebar.js +17 -2
- package/dist/components/layout/AppSidebar.js.map +1 -1
- package/dist/components/layout/AppSidebar.tsx +21 -2
- package/dist/components/shad-cn-ui/SolidDatePicker.d.ts +1 -1
- package/dist/components/shad-cn-ui/SolidDatePicker.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidDatePicker.js +35 -3
- package/dist/components/shad-cn-ui/SolidDatePicker.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidDatePicker.tsx +84 -0
- package/dist/components/shad-cn-ui/SolidTooltip.d.ts.map +1 -1
- package/dist/components/shad-cn-ui/SolidTooltip.js +55 -2
- package/dist/components/shad-cn-ui/SolidTooltip.js.map +1 -1
- package/dist/components/shad-cn-ui/SolidTooltip.tsx +95 -1
- package/dist/helpers/permissions.d.ts +13 -0
- package/dist/helpers/permissions.d.ts.map +1 -1
- package/dist/helpers/permissions.js +79 -0
- package/dist/helpers/permissions.js.map +1 -1
- package/dist/helpers/permissions.ts +92 -1
- package/dist/resources/globals.css +109 -1
- package/dist/resources/solid-custom.css +53 -3
- package/dist/resources/solid-tailwind-generated.css +1 -1
- package/dist/routes/pages/admin/core/DashboardPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/DashboardPage.js +2 -2
- package/dist/routes/pages/admin/core/DashboardPage.js.map +1 -1
- package/dist/routes/pages/admin/core/DashboardPage.tsx +2 -0
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.d.ts.map +1 -1
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js +1 -1
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.js.map +1 -1
- package/dist/routes/pages/admin/core/DatasourceIntrospectionPage.tsx +1 -0
- package/dist/types/css-modules.d.ts +2 -0
- package/package.json +1 -1
|
@@ -3198,7 +3198,7 @@ const FieldMetaDataForm = ({
|
|
|
3198
3198
|
<div className="mt-1 flex flex-wrap -mx-2 -mt-2 md:mt-0">
|
|
3199
3199
|
{currentFields.includes("required") && (formik.values.relationType !== "many-to-many" && formik.values.relationType !== "one-to-many") && (
|
|
3200
3200
|
<div className="field mt-2 flex w-1/2 flex-col gap-2 px-2 pt-2">
|
|
3201
|
-
<div className="
|
|
3201
|
+
<div className="solid-field-checkbox-row">
|
|
3202
3202
|
<SolidCheckbox
|
|
3203
3203
|
id="required"
|
|
3204
3204
|
name="required"
|
|
@@ -3210,7 +3210,7 @@ const FieldMetaDataForm = ({
|
|
|
3210
3210
|
checked={formik.values.required}
|
|
3211
3211
|
disabled={formik.values.isPrimaryKey || formik.values.unique}
|
|
3212
3212
|
/>
|
|
3213
|
-
<label htmlFor="required" className={classNames("form-field-label", styles.fieldLabel
|
|
3213
|
+
<label htmlFor="required" className={classNames("form-field-label", styles.fieldLabel)}>
|
|
3214
3214
|
Required {formik.values.isPrimaryKey && "(Auto-enabled for Primary Key)"}
|
|
3215
3215
|
{!formik.values.isPrimaryKey && formik.values.unique && "(Auto-enabled for Unique)"}
|
|
3216
3216
|
</label>
|
|
@@ -3224,7 +3224,7 @@ const FieldMetaDataForm = ({
|
|
|
3224
3224
|
)}
|
|
3225
3225
|
{currentFields.includes("unique") && selectedTypeValue !== 'relation' && (
|
|
3226
3226
|
<div className="field flex w-1/2 flex-col gap-2 px-2 pt-2">
|
|
3227
|
-
<div className="
|
|
3227
|
+
<div className="solid-field-checkbox-row">
|
|
3228
3228
|
<SolidCheckbox
|
|
3229
3229
|
id="unique"
|
|
3230
3230
|
name="unique"
|
|
@@ -3245,7 +3245,7 @@ const FieldMetaDataForm = ({
|
|
|
3245
3245
|
checked={formik.values.unique}
|
|
3246
3246
|
disabled={formik.values.isPrimaryKey}
|
|
3247
3247
|
/>
|
|
3248
|
-
<label htmlFor="unique" className={classNames("form-field-label", styles.fieldLabel
|
|
3248
|
+
<label htmlFor="unique" className={classNames("form-field-label", styles.fieldLabel)}>
|
|
3249
3249
|
Unique {formik.values.isPrimaryKey && "(Auto-enabled for Primary Key)"}
|
|
3250
3250
|
</label>
|
|
3251
3251
|
</div>
|
|
@@ -3258,7 +3258,7 @@ const FieldMetaDataForm = ({
|
|
|
3258
3258
|
)}
|
|
3259
3259
|
{currentFields.includes("index") && selectedTypeValue !== 'relation' && (
|
|
3260
3260
|
<div className="field mt-2 flex w-1/2 flex-col gap-2 px-2 pt-2">
|
|
3261
|
-
<div className="
|
|
3261
|
+
<div className="solid-field-checkbox-row">
|
|
3262
3262
|
<SolidCheckbox
|
|
3263
3263
|
id="index"
|
|
3264
3264
|
name="index"
|
|
@@ -3267,7 +3267,7 @@ const FieldMetaDataForm = ({
|
|
|
3267
3267
|
}}
|
|
3268
3268
|
checked={formik.values.index}
|
|
3269
3269
|
/>
|
|
3270
|
-
<label htmlFor="index" className={classNames("form-field-label", styles.fieldLabel
|
|
3270
|
+
<label htmlFor="index" className={classNames("form-field-label", styles.fieldLabel)}>
|
|
3271
3271
|
Index
|
|
3272
3272
|
</label>
|
|
3273
3273
|
</div>
|
|
@@ -3278,7 +3278,7 @@ const FieldMetaDataForm = ({
|
|
|
3278
3278
|
)}
|
|
3279
3279
|
{currentFields.includes("private") && selectedTypeValue !== 'relation' && (
|
|
3280
3280
|
<div className="field mt-2 flex w-1/2 flex-col gap-2 px-2 pt-2">
|
|
3281
|
-
<div className="
|
|
3281
|
+
<div className="solid-field-checkbox-row">
|
|
3282
3282
|
<SolidCheckbox
|
|
3283
3283
|
id="private"
|
|
3284
3284
|
name="private"
|
|
@@ -3287,7 +3287,7 @@ const FieldMetaDataForm = ({
|
|
|
3287
3287
|
}}
|
|
3288
3288
|
checked={formik.values.private}
|
|
3289
3289
|
/>
|
|
3290
|
-
<label htmlFor="private" className={classNames("form-field-label", styles.fieldLabel
|
|
3290
|
+
<label htmlFor="private" className={classNames("form-field-label", styles.fieldLabel)}>
|
|
3291
3291
|
Private
|
|
3292
3292
|
</label>
|
|
3293
3293
|
</div>
|
|
@@ -3301,7 +3301,7 @@ const FieldMetaDataForm = ({
|
|
|
3301
3301
|
)}
|
|
3302
3302
|
{currentFields.includes("encrypt") && selectedTypeValue !== 'relation' && (
|
|
3303
3303
|
<div className="field mt-2 flex w-1/2 flex-col gap-2 px-2 pt-2">
|
|
3304
|
-
<div className="
|
|
3304
|
+
<div className="solid-field-checkbox-row">
|
|
3305
3305
|
<SolidCheckbox
|
|
3306
3306
|
id="encrypt"
|
|
3307
3307
|
name="encrypt"
|
|
@@ -3322,7 +3322,7 @@ const FieldMetaDataForm = ({
|
|
|
3322
3322
|
)}
|
|
3323
3323
|
{currentFields.includes("isMultiSelect") && (
|
|
3324
3324
|
<div className="field mt-2 flex w-1/2 flex-col gap-2 px-2 pt-2">
|
|
3325
|
-
<div className="
|
|
3325
|
+
<div className="solid-field-checkbox-row">
|
|
3326
3326
|
<SolidCheckbox
|
|
3327
3327
|
id="isMultiSelect"
|
|
3328
3328
|
name="isMultiSelect"
|
|
@@ -3331,7 +3331,7 @@ const FieldMetaDataForm = ({
|
|
|
3331
3331
|
}}
|
|
3332
3332
|
checked={formik.values.isMultiSelect}
|
|
3333
3333
|
/>
|
|
3334
|
-
<label htmlFor="isMultiSelect" className={classNames("form-field-label", styles.fieldLabel
|
|
3334
|
+
<label htmlFor="isMultiSelect" className={classNames("form-field-label", styles.fieldLabel)}>
|
|
3335
3335
|
Is MultiSelect
|
|
3336
3336
|
</label>
|
|
3337
3337
|
</div>
|
|
@@ -3342,7 +3342,7 @@ const FieldMetaDataForm = ({
|
|
|
3342
3342
|
)}
|
|
3343
3343
|
{currentFields.includes("enableAuditTracking") && formik.values.relationType !== "one-to-many" && (
|
|
3344
3344
|
<div className="field mt-2 flex w-1/2 flex-col gap-2 px-2 pt-2">
|
|
3345
|
-
<div className="
|
|
3345
|
+
<div className="solid-field-checkbox-row">
|
|
3346
3346
|
<SolidCheckbox
|
|
3347
3347
|
id="enableAuditTracking"
|
|
3348
3348
|
name="enableAuditTracking"
|
|
@@ -3364,7 +3364,7 @@ const FieldMetaDataForm = ({
|
|
|
3364
3364
|
)}
|
|
3365
3365
|
{currentFields.includes("isUserKey") && formik.values.unique && (
|
|
3366
3366
|
<div className="field mt-2 flex w-1/2 flex-col gap-2 px-2 pt-2">
|
|
3367
|
-
<div className="
|
|
3367
|
+
<div className="solid-field-checkbox-row">
|
|
3368
3368
|
<SolidCheckbox
|
|
3369
3369
|
id="isUserKey"
|
|
3370
3370
|
name="isUserKey"
|
|
@@ -258,6 +258,7 @@
|
|
|
258
258
|
gap: 1rem;
|
|
259
259
|
padding: 0.65rem 0.9rem 0.55rem;
|
|
260
260
|
border-bottom: 1px solid color-mix(in srgb, var(--border) 76%, transparent);
|
|
261
|
+
flex-wrap: wrap;
|
|
261
262
|
}
|
|
262
263
|
|
|
263
264
|
.solid-module-explorer-main-title {
|
|
@@ -324,6 +325,21 @@
|
|
|
324
325
|
justify-content: flex-end;
|
|
325
326
|
}
|
|
326
327
|
|
|
328
|
+
.solid-module-explorer-field-name-note {
|
|
329
|
+
margin: 0.75rem 0.9rem 0;
|
|
330
|
+
padding: 0.65rem 0.75rem;
|
|
331
|
+
border: 1px solid color-mix(in srgb, #d97706 28%, transparent);
|
|
332
|
+
border-radius: 0.7rem;
|
|
333
|
+
background: color-mix(in srgb, #f59e0b 9%, var(--surface-card, #fff));
|
|
334
|
+
color: color-mix(in srgb, #b45309 82%, var(--foreground));
|
|
335
|
+
font-size: 0.8rem;
|
|
336
|
+
line-height: 1.45;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.solid-module-explorer-field-name-note strong {
|
|
340
|
+
font-weight: 700;
|
|
341
|
+
}
|
|
342
|
+
|
|
327
343
|
.solid-module-explorer-actions-menu {
|
|
328
344
|
min-width: 11rem;
|
|
329
345
|
}
|
|
@@ -663,3 +679,10 @@
|
|
|
663
679
|
display: none;
|
|
664
680
|
}
|
|
665
681
|
}
|
|
682
|
+
|
|
683
|
+
|
|
684
|
+
@media (max-width: 640px) {
|
|
685
|
+
.solid-module-explorer-main-actions{
|
|
686
|
+
gap: 0;
|
|
687
|
+
}
|
|
688
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModuleMetadataExplorer.d.ts","sourceRoot":"","sources":["../../../../src/components/core/module/ModuleMetadataExplorer.tsx"],"names":[],"mappings":"AA2BA,OAAO,gCAAgC,CAAC;AACxC,OAAO,8BAA8B,CAAC;AAEtC,KAAK,2BAA2B,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AA4YF,wBAAgB,sBAAsB,CAAC,EACrC,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,QAAgB,EAChB,SAAgB,GACjB,EAAE,2BAA2B,
|
|
1
|
+
{"version":3,"file":"ModuleMetadataExplorer.d.ts","sourceRoot":"","sources":["../../../../src/components/core/module/ModuleMetadataExplorer.tsx"],"names":[],"mappings":"AA2BA,OAAO,gCAAgC,CAAC;AACxC,OAAO,8BAA8B,CAAC;AAEtC,KAAK,2BAA2B,GAAG;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AA4YF,wBAAgB,sBAAsB,CAAC,EACrC,UAAU,EACV,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,eAAe,EACf,QAAgB,EAChB,SAAgB,GACjB,EAAE,2BAA2B,kDAqjB7B"}
|
|
@@ -661,6 +661,6 @@ export function ModuleMetadataExplorer(_a) {
|
|
|
661
661
|
if (!moduleName) {
|
|
662
662
|
return null;
|
|
663
663
|
}
|
|
664
|
-
return (_jsxs("div", { className: "solid-module-explorer", children: [_jsxs("div", { className: "solid-module-explorer-panel", children: [loadError && (_jsx("div", { className: "solid-module-explorer-alert", children: _jsx(SolidMessage, { severity: "error", text: "Unable to load metadata explorer: ".concat(extractApiErrorMessage(loadError)), className: "justify-start" }) })), _jsxs("div", { ref: explorerRef, className: "solid-module-explorer-workspace", style: { gridTemplateColumns: "".concat(sidebarWidth, "px 8px minmax(0, 1fr)") }, children: [_jsx("aside", { className: "solid-module-explorer-sidebar", children: _jsxs("div", { className: "solid-module-explorer-sidebar-section solid-module-explorer-sidebar-sections", children: [_jsxs("div", { className: "solid-module-explorer-sidebar-heading", children: [_jsxs("div", { className: "solid-module-explorer-sidebar-heading-main", children: [_jsx("div", { className: "solid-module-explorer-sidebar-title", children: modelSingularName ? "Explorer" : "Sections" }), _jsx(SolidTag, { tone: "info", children: modelSingularName ? scopedTreeNodes.length : sections.length })] }), _jsx("button", { type: "button", className: "solid-module-explorer-sidebar-action", onClick: handleCollapseAll, children: "Collapse all" })] }), _jsxs("div", { className: "solid-module-explorer-sidebar-search", children: [_jsx(SolidInput, { value: treeFilter, onChange: function (event) { return setTreeFilter(event.target.value); }, placeholder: "Search metadata tree" }), _jsx("div", { className: "solid-module-explorer-sidebar-search-icon", children: _jsx(Search, { size: 14 }) })] }), _jsx("div", { className: "solid-module-explorer-section-list solid-module-explorer-tree-list", children: _jsx(MetadataTree, { nodes: filteredTreeNodes, activePath: activePath, expandedPaths: visibleExpandedPaths, onToggle: toggleExpandedPath, onSelect: selectPath }) })] }) }), _jsx("div", { className: "solid-module-explorer-resizer", role: "separator", "aria-orientation": "vertical", "aria-label": "Resize metadata navigation panel", onPointerDown: handleSidebarResizeStart }), _jsxs("section", { className: "solid-module-explorer-main", children: [_jsxs("div", { className: "solid-module-explorer-main-header", children: [_jsxs("div", { className: "solid-module-explorer-main-title", children: [_jsxs("div", { className: "solid-module-explorer-main-heading-row", children: [_jsx("h4", { children: (_j = (_h = activeNode === null || activeNode === void 0 ? void 0 : activeNode.label) !== null && _h !== void 0 ? _h : activeSection === null || activeSection === void 0 ? void 0 : activeSection.title) !== null && _j !== void 0 ? _j : "Metadata" }), _jsx("p", { children: activePath || "Choose a metadata node from the tree." })] }), hasValidationFailure && (_jsx("div", { className: "solid-module-explorer-inline-validation", title: validationSummary, children: validationSummary })), isReadOnlyExplorer && (_jsx("div", { className: "solid-module-explorer-readonly-note", children: "This metadata is browse-only in the explorer." }))] }), _jsxs("div", { className: "solid-module-explorer-main-actions", children: [_jsxs("div", { className: "solid-module-explorer-main-meta", children: [hasMutableChanges && _jsx(SolidTag, { tone: "warn", children: "Unsaved changes" }), editorError && _jsx(SolidTag, { tone: "danger", children: "Invalid JSON" }), isReadOnlyExplorer && _jsx(SolidTag, { tone: "info", children: "Read only" })] }), !isReadOnlyExplorer && (_jsx(SolidButton, { size: "sm", leftIcon: _jsx(Save, { size: 14 }), onClick: handleSave, loading: isSavingSection, disabled: !canSave, children: "Save Section" })), _jsxs(SolidDropdownMenu, { children: [_jsx(SolidDropdownMenuTrigger, { asChild: true, children: _jsx(SolidButton, { variant: "ghost", size: "sm", className: "solid-icon-button", "aria-label": "Explorer actions", children: _jsx(Settings, { size: 16 }) }) }), _jsxs(SolidDropdownMenuContent, { className: "solid-module-explorer-actions-menu", children: [!isReadOnlyExplorer && (_jsx(SolidDropdownMenuItem, { onSelect: handleFormat, children: _jsxs("div", { className: "solid-module-explorer-actions-item", children: [_jsx(Wand2, { size: 14 }), _jsx("span", { children: "Format" })] }) })), _jsx(SolidDropdownMenuItem, { onSelect: handleValidate, disabled: isValidatingSection, children: _jsxs("div", { className: "solid-module-explorer-actions-item", children: [_jsx(FileSearch, { size: 14 }), _jsx("span", { children: isValidatingSection ? "Validating..." : "Validate" })] }) }), _jsx(SolidDropdownMenuItem, { onSelect: function () { return setIsContextDialogOpen(true); }, children: _jsxs("div", { className: "solid-module-explorer-actions-item", children: [_jsx(Settings, { size: 14 }), _jsx("span", { children: "Context" })] }) }), allowSeed && (_jsx(SolidDropdownMenuItem, { onSelect: function () { return setIsSeedDialogOpen(true); }, disabled: !moduleId || isSeedingModule, children: _jsxs("div", { className: "solid-module-explorer-actions-item", children: [_jsx(DatabaseZap, { size: 14 }), _jsx("span", { children: isSeedingModule ? "Seeding..." : "Seed" })] }) }))] })] })] })] }), _jsx("div", { className: "solid-module-explorer-editor-wrap", children: _jsx("div", { className: "solid-module-explorer-editor-shell", children: isDocumentLoading ? (_jsx("div", { style: { padding: "1rem" }, className: "solid-module-explorer-empty", children: "Loading metadata JSON..." })) : (_jsx(JsonEditorSurface, { ref: editorRef, value: savedValue, resetToken: editorResetToken, readOnly: isReadOnlyExplorer, onValueChange: setEditorValue, onErrorChange: setEditorError })) }) })] })] })] }), _jsxs(SolidDialog, { open: isContextDialogOpen, onOpenChange: setIsContextDialogOpen, header: "Context", contentClassName: "solid-module-explorer-context-dialog", children: [_jsx(SolidDialogSeparator, {}), _jsx(SolidDialogBody, { children: _jsxs("div", { className: "solid-module-explorer-context-dialog-body", children: [_jsxs("div", { className: "solid-module-explorer-context-dialog-header", children: [_jsx("div", { className: "solid-module-explorer-context-dialog-title", children: (_k = activeNode === null || activeNode === void 0 ? void 0 : activeNode.label) !== null && _k !== void 0 ? _k : "Metadata node" }), _jsx("div", { className: "solid-module-explorer-context-dialog-meta", children: (activeNode === null || activeNode === void 0 ? void 0 : activeNode.sectionTitle) && _jsx(SolidTag, { tone: "info", children: activeNode.sectionTitle }) })] }), _jsxs("div", { className: "solid-module-explorer-context-grid", children: [_jsxs("div", { className: "solid-module-explorer-context-row", children: [_jsx("div", { className: "solid-module-explorer-context-label", children: "JSON Path" }), _jsx("div", { className: "solid-module-explorer-context-value", children: activePath || "-" })] }), _jsxs("div", { className: "solid-module-explorer-context-row", children: [_jsx("div", { className: "solid-module-explorer-context-label", children: "File" }), _jsx("div", { className: "solid-module-explorer-context-value", children: (_l = manifestData === null || manifestData === void 0 ? void 0 : manifestData.filePath) !== null && _l !== void 0 ? _l : "-" })] }), localActionSummary && (_jsxs("div", { className: "solid-module-explorer-context-row", children: [_jsx("div", { className: "solid-module-explorer-context-label", children: "Last Action" }), _jsx("div", { className: "solid-module-explorer-context-value", children: localActionSummary })] }))] }), _jsx("div", { className: "solid-module-explorer-context-note", children: "Clicking any branch or leaf in the tree opens that exact JSON fragment on the right." })] }) })] }), _jsxs(SolidDialog, { open: isSeedDialogOpen, onOpenChange: setIsSeedDialogOpen, contentClassName: "solid-module-explorer-seed-dialog", children: [_jsx(SolidDialogHeader, { children: _jsx(SolidDialogTitle, { children: "Seed Module Metadata" }) }), _jsx(SolidDialogSeparator, {}), _jsx(SolidDialogBody, { children: _jsxs("div", { className: "solid-module-explorer-seed-dialog-body", children: [_jsxs("p", { children: ["Re-seed metadata for ", _jsx("strong", { children: moduleName }), " from its JSON file?"] }), _jsx("p", { className: "solid-module-explorer-seed-dialog-note", children: "This only re-runs metadata seeding for the current module and refreshes database metadata from the module JSON." })] }) }), _jsxs(SolidDialogFooter, { children: [_jsx(SolidButton, { variant: "outline", size: "sm", onClick: function () { return setIsSeedDialogOpen(false); }, disabled: isSeedingModule, children: "Cancel" }), _jsx(SolidButton, { size: "sm", onClick: handleSeedModule, loading: isSeedingModule, disabled: !moduleId, children: "Seed" })] })] })] }));
|
|
664
|
+
return (_jsxs("div", { className: "solid-module-explorer", children: [_jsxs("div", { className: "solid-module-explorer-panel", children: [loadError && (_jsx("div", { className: "solid-module-explorer-alert", children: _jsx(SolidMessage, { severity: "error", text: "Unable to load metadata explorer: ".concat(extractApiErrorMessage(loadError)), className: "justify-start" }) })), _jsxs("div", { ref: explorerRef, className: "solid-module-explorer-workspace", style: { gridTemplateColumns: "".concat(sidebarWidth, "px 8px minmax(0, 1fr)") }, children: [_jsx("aside", { className: "solid-module-explorer-sidebar", children: _jsxs("div", { className: "solid-module-explorer-sidebar-section solid-module-explorer-sidebar-sections", children: [_jsxs("div", { className: "solid-module-explorer-sidebar-heading", children: [_jsxs("div", { className: "solid-module-explorer-sidebar-heading-main", children: [_jsx("div", { className: "solid-module-explorer-sidebar-title", children: modelSingularName ? "Explorer" : "Sections" }), _jsx(SolidTag, { tone: "info", children: modelSingularName ? scopedTreeNodes.length : sections.length })] }), _jsx("button", { type: "button", className: "solid-module-explorer-sidebar-action", onClick: handleCollapseAll, children: "Collapse all" })] }), _jsxs("div", { className: "solid-module-explorer-sidebar-search", children: [_jsx(SolidInput, { value: treeFilter, onChange: function (event) { return setTreeFilter(event.target.value); }, placeholder: "Search metadata tree" }), _jsx("div", { className: "solid-module-explorer-sidebar-search-icon", children: _jsx(Search, { size: 14 }) })] }), _jsx("div", { className: "solid-module-explorer-section-list solid-module-explorer-tree-list", children: _jsx(MetadataTree, { nodes: filteredTreeNodes, activePath: activePath, expandedPaths: visibleExpandedPaths, onToggle: toggleExpandedPath, onSelect: selectPath }) })] }) }), _jsx("div", { className: "solid-module-explorer-resizer", role: "separator", "aria-orientation": "vertical", "aria-label": "Resize metadata navigation panel", onPointerDown: handleSidebarResizeStart }), _jsxs("section", { className: "solid-module-explorer-main", children: [_jsxs("div", { className: "solid-module-explorer-main-header", children: [_jsxs("div", { className: "solid-module-explorer-main-title", children: [_jsxs("div", { className: "solid-module-explorer-main-heading-row", children: [_jsx("h4", { children: (_j = (_h = activeNode === null || activeNode === void 0 ? void 0 : activeNode.label) !== null && _h !== void 0 ? _h : activeSection === null || activeSection === void 0 ? void 0 : activeSection.title) !== null && _j !== void 0 ? _j : "Metadata" }), _jsx("p", { children: activePath || "Choose a metadata node from the tree." })] }), hasValidationFailure && (_jsx("div", { className: "solid-module-explorer-inline-validation", title: validationSummary, children: validationSummary })), isReadOnlyExplorer && (_jsx("div", { className: "solid-module-explorer-readonly-note", children: "This metadata is browse-only in the explorer." }))] }), _jsxs("div", { className: "solid-module-explorer-main-actions", children: [_jsxs("div", { className: "solid-module-explorer-main-meta", children: [hasMutableChanges && _jsx(SolidTag, { tone: "warn", children: "Unsaved changes" }), editorError && _jsx(SolidTag, { tone: "danger", children: "Invalid JSON" }), isReadOnlyExplorer && _jsx(SolidTag, { tone: "info", children: "Read only" })] }), !isReadOnlyExplorer && (_jsx(SolidButton, { size: "sm", leftIcon: _jsx(Save, { size: 14 }), onClick: handleSave, loading: isSavingSection, disabled: !canSave, children: "Save Section" })), _jsxs(SolidDropdownMenu, { children: [_jsx(SolidDropdownMenuTrigger, { asChild: true, children: _jsx(SolidButton, { variant: "ghost", size: "sm", className: "solid-icon-button", "aria-label": "Explorer actions", children: _jsx(Settings, { size: 16 }) }) }), _jsxs(SolidDropdownMenuContent, { className: "solid-module-explorer-actions-menu", children: [!isReadOnlyExplorer && (_jsx(SolidDropdownMenuItem, { onSelect: handleFormat, children: _jsxs("div", { className: "solid-module-explorer-actions-item", children: [_jsx(Wand2, { size: 14 }), _jsx("span", { children: "Format" })] }) })), _jsx(SolidDropdownMenuItem, { onSelect: handleValidate, disabled: isValidatingSection, children: _jsxs("div", { className: "solid-module-explorer-actions-item", children: [_jsx(FileSearch, { size: 14 }), _jsx("span", { children: isValidatingSection ? "Validating..." : "Validate" })] }) }), _jsx(SolidDropdownMenuItem, { onSelect: function () { return setIsContextDialogOpen(true); }, children: _jsxs("div", { className: "solid-module-explorer-actions-item", children: [_jsx(Settings, { size: 14 }), _jsx("span", { children: "Context" })] }) }), allowSeed && (_jsx(SolidDropdownMenuItem, { onSelect: function () { return setIsSeedDialogOpen(true); }, disabled: !moduleId || isSeedingModule, children: _jsxs("div", { className: "solid-module-explorer-actions-item", children: [_jsx(DatabaseZap, { size: 14 }), _jsx("span", { children: isSeedingModule ? "Seeding..." : "Seed" })] }) }))] })] })] })] }), _jsxs("div", { className: "solid-module-explorer-field-name-note", role: "note", children: [_jsx("strong", { children: "Important:" }), " ", "Do not rename a field directly. To change a field name, delete the existing field, save the section, validate the generated code, and then create a new field with the required name. Direct renaming can cause serious metadata and code generation issues."] }), _jsx("div", { className: "solid-module-explorer-editor-wrap", children: _jsx("div", { className: "solid-module-explorer-editor-shell", children: isDocumentLoading ? (_jsx("div", { style: { padding: "1rem" }, className: "solid-module-explorer-empty", children: "Loading metadata JSON..." })) : (_jsx(JsonEditorSurface, { ref: editorRef, value: savedValue, resetToken: editorResetToken, readOnly: isReadOnlyExplorer, onValueChange: setEditorValue, onErrorChange: setEditorError })) }) })] })] })] }), _jsxs(SolidDialog, { open: isContextDialogOpen, onOpenChange: setIsContextDialogOpen, header: "Context", contentClassName: "solid-module-explorer-context-dialog", children: [_jsx(SolidDialogSeparator, {}), _jsx(SolidDialogBody, { children: _jsxs("div", { className: "solid-module-explorer-context-dialog-body", children: [_jsxs("div", { className: "solid-module-explorer-context-dialog-header", children: [_jsx("div", { className: "solid-module-explorer-context-dialog-title", children: (_k = activeNode === null || activeNode === void 0 ? void 0 : activeNode.label) !== null && _k !== void 0 ? _k : "Metadata node" }), _jsx("div", { className: "solid-module-explorer-context-dialog-meta", children: (activeNode === null || activeNode === void 0 ? void 0 : activeNode.sectionTitle) && _jsx(SolidTag, { tone: "info", children: activeNode.sectionTitle }) })] }), _jsxs("div", { className: "solid-module-explorer-context-grid", children: [_jsxs("div", { className: "solid-module-explorer-context-row", children: [_jsx("div", { className: "solid-module-explorer-context-label", children: "JSON Path" }), _jsx("div", { className: "solid-module-explorer-context-value", children: activePath || "-" })] }), _jsxs("div", { className: "solid-module-explorer-context-row", children: [_jsx("div", { className: "solid-module-explorer-context-label", children: "File" }), _jsx("div", { className: "solid-module-explorer-context-value", children: (_l = manifestData === null || manifestData === void 0 ? void 0 : manifestData.filePath) !== null && _l !== void 0 ? _l : "-" })] }), localActionSummary && (_jsxs("div", { className: "solid-module-explorer-context-row", children: [_jsx("div", { className: "solid-module-explorer-context-label", children: "Last Action" }), _jsx("div", { className: "solid-module-explorer-context-value", children: localActionSummary })] }))] }), _jsx("div", { className: "solid-module-explorer-context-note", children: "Clicking any branch or leaf in the tree opens that exact JSON fragment on the right." })] }) })] }), _jsxs(SolidDialog, { open: isSeedDialogOpen, onOpenChange: setIsSeedDialogOpen, contentClassName: "solid-module-explorer-seed-dialog", children: [_jsx(SolidDialogHeader, { children: _jsx(SolidDialogTitle, { children: "Seed Module Metadata" }) }), _jsx(SolidDialogSeparator, {}), _jsx(SolidDialogBody, { children: _jsxs("div", { className: "solid-module-explorer-seed-dialog-body", children: [_jsxs("p", { children: ["Re-seed metadata for ", _jsx("strong", { children: moduleName }), " from its JSON file?"] }), _jsx("p", { className: "solid-module-explorer-seed-dialog-note", children: "This only re-runs metadata seeding for the current module and refreshes database metadata from the module JSON." })] }) }), _jsxs(SolidDialogFooter, { children: [_jsx(SolidButton, { variant: "outline", size: "sm", onClick: function () { return setIsSeedDialogOpen(false); }, disabled: isSeedingModule, children: "Cancel" }), _jsx(SolidButton, { size: "sm", onClick: handleSeedModule, loading: isSeedingModule, disabled: !moduleId, children: "Seed" })] })] })] }));
|
|
665
665
|
}
|
|
666
666
|
//# sourceMappingURL=ModuleMetadataExplorer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModuleMetadataExplorer.js","sourceRoot":"","sources":["../../../../src/components/core/module/ModuleMetadataExplorer.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ChevronDown, ChevronRight, DatabaseZap, FileSearch, Save, Search, Settings, Wand2 } from \"lucide-react\";\nimport React, { useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport {\n useGetModuleMetadataExplorerDocumentQuery,\n useGetModuleMetadataExplorerManifestQuery,\n useSeedModuleMetadataMutation,\n useUpdateModuleMetadataExplorerSectionMutation,\n useValidateModuleMetadataExplorerSectionMutation,\n} from \"../../../redux/api/moduleApi\";\nimport { showToast } from \"../../../redux/features/toastSlice\";\nimport {\n SolidButton,\n SolidDialog,\n SolidDialogBody,\n SolidDialogFooter,\n SolidDialogHeader,\n SolidDialogSeparator,\n SolidDialogTitle,\n SolidDropdownMenu,\n SolidDropdownMenuContent,\n SolidDropdownMenuItem,\n SolidDropdownMenuTrigger,\n SolidInput,\n SolidMessage,\n SolidTag,\n} from \"../../shad-cn-ui\";\nimport \"jsoneditor/dist/jsoneditor.css\";\nimport \"./ModuleMetadataExplorer.css\";\n\ntype ModuleMetadataExplorerProps = {\n moduleName?: string;\n moduleId?: number;\n modelSingularName?: string;\n scopedArrayPath?: string;\n scopedItemValue?: string;\n scopedItemField?: string;\n readOnly?: boolean;\n allowSeed?: boolean;\n};\n\ntype MetadataIssue = {\n path: string;\n message: string;\n severity: \"error\" | \"warning\";\n};\n\ntype ExplorerSectionDefinition = {\n key: string;\n title: string;\n jsonPath: string;\n type: \"object\" | \"array\";\n description: string;\n};\n\ntype ExplorerTreeNode = {\n id: string;\n label: string;\n path: string;\n parentPath: string | null;\n sectionKey: string;\n sectionTitle: string;\n children: ExplorerTreeNode[];\n};\n\ntype JsonEditorHandle = {\n format: () => void;\n};\n\nfunction extractApiErrorMessage(error: any) {\n const message = error?.data?.message ?? error?.message ?? \"Something went wrong\";\n return Array.isArray(message) ? message.join(\", \") : String(message);\n}\n\nfunction serializeJson(value: any) {\n try {\n return JSON.stringify(value);\n } catch (_error) {\n return \"\";\n }\n}\n\nfunction deepCloneJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value));\n}\n\nfunction humanizeKey(value: string) {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .replace(/^./, (char) => char.toUpperCase());\n}\n\nfunction tokenizePath(path: string) {\n const tokens: Array<string | number> = [];\n const regex = /([^[.\\]]+)|\\[(\\d+)\\]/g;\n let match: RegExpExecArray | null;\n while ((match = regex.exec(path)) !== null) {\n if (match[1] !== undefined) {\n tokens.push(match[1]);\n } else if (match[2] !== undefined) {\n tokens.push(Number(match[2]));\n }\n }\n return tokens;\n}\n\nfunction getValueAtJsonPath(source: any, path: string) {\n if (!path) return source;\n return tokenizePath(path).reduce((current, token) => {\n if (current === undefined || current === null) return undefined;\n return current[token as keyof typeof current];\n }, source);\n}\n\nfunction setValueAtJsonPath(target: any, path: string, value: any) {\n const tokens = tokenizePath(path);\n if (!tokens.length) return;\n\n let current = target;\n for (let index = 0; index < tokens.length - 1; index += 1) {\n current = current[tokens[index] as keyof typeof current];\n }\n\n current[tokens[tokens.length - 1] as keyof typeof current] = value;\n}\n\nfunction appendPath(basePath: string, key: string) {\n return basePath ? `${basePath}.${key}` : key;\n}\n\nfunction getArrayItemLabel(item: any, index: number, parentKey: string) {\n const labelCandidates = [\n \"singularName\",\n \"name\",\n \"displayName\",\n \"pluralName\",\n \"label\",\n \"key\",\n \"title\",\n \"id\",\n ];\n\n for (const candidate of labelCandidates) {\n const nextValue = item?.[candidate];\n if (nextValue !== undefined && nextValue !== null && `${nextValue}`.trim()) {\n return `${nextValue}`;\n }\n }\n\n return `${humanizeKey(parentKey || \"Item\")} ${index + 1}`;\n}\n\nfunction buildTreeNode(\n value: any,\n options: {\n label: string;\n path: string;\n parentPath: string | null;\n sectionKey: string;\n sectionTitle: string;\n hintKey: string;\n },\n): ExplorerTreeNode {\n const { label, path, parentPath, sectionKey, sectionTitle, hintKey } = options;\n\n let children: ExplorerTreeNode[] = [];\n\n if (Array.isArray(value)) {\n children = value\n .filter((item) => item !== null && typeof item === \"object\")\n .map((item, index) => buildTreeNode(item, {\n label: getArrayItemLabel(item, index, hintKey),\n path: `${path}[${index}]`,\n parentPath: path,\n sectionKey,\n sectionTitle,\n hintKey,\n }));\n } else if (value && typeof value === \"object\") {\n children = Object.entries(value)\n .filter(([, nextValue]) => nextValue !== null && typeof nextValue === \"object\")\n .map(([key, nextValue]) => buildTreeNode(nextValue, {\n label: humanizeKey(key),\n path: appendPath(path, key),\n parentPath: path,\n sectionKey,\n sectionTitle,\n hintKey: key,\n }));\n }\n\n return {\n id: path,\n label,\n path,\n parentPath,\n sectionKey,\n sectionTitle,\n children,\n };\n}\n\nfunction buildTreeFromDocument(sections: ExplorerSectionDefinition[], documentValue: any) {\n const nodes = sections\n .map((section) => {\n const sectionValue = getValueAtJsonPath(documentValue, section.jsonPath);\n if (sectionValue === undefined) return null;\n return buildTreeNode(sectionValue, {\n label: section.title,\n path: section.jsonPath,\n parentPath: null,\n sectionKey: section.key,\n sectionTitle: section.title,\n hintKey: section.key,\n });\n })\n .filter(Boolean) as ExplorerTreeNode[];\n\n const nodeMap = new Map<string, ExplorerTreeNode>();\n const visit = (nextNodes: ExplorerTreeNode[]) => {\n nextNodes.forEach((node) => {\n nodeMap.set(node.path, node);\n if (node.children.length) visit(node.children);\n });\n };\n visit(nodes);\n\n return { nodes, nodeMap };\n}\n\nfunction filterTreeNodes(nodes: ExplorerTreeNode[], query: string): ExplorerTreeNode[] {\n const needle = query.trim().toLowerCase();\n if (!needle) return nodes;\n\n const visit = (node: ExplorerTreeNode): ExplorerTreeNode | null => {\n const filteredChildren = node.children\n .map(visit)\n .filter(Boolean) as ExplorerTreeNode[];\n const matches = node.label.toLowerCase().includes(needle) || node.path.toLowerCase().includes(needle);\n\n if (matches || filteredChildren.length) {\n return { ...node, children: filteredChildren };\n }\n\n return null;\n };\n\n return nodes.map(visit).filter(Boolean) as ExplorerTreeNode[];\n}\n\nfunction getAncestorPaths(nodeMap: Map<string, ExplorerTreeNode>, path: string) {\n const paths: string[] = [];\n let current = nodeMap.get(path);\n\n while (current?.parentPath) {\n paths.push(current.parentPath);\n current = nodeMap.get(current.parentPath);\n }\n\n return paths;\n}\n\nfunction getSectionForPath(sections: ExplorerSectionDefinition[], path: string) {\n return sections\n .filter((section) => path === section.jsonPath || path.startsWith(`${section.jsonPath}.`) || path.startsWith(`${section.jsonPath}[`))\n .sort((left, right) => right.jsonPath.length - left.jsonPath.length)[0] ?? null;\n}\n\nfunction filterIssuesForPath(issues: MetadataIssue[], path: string) {\n return issues.filter((issue) => {\n if (!issue.path) return false;\n return issue.path === path || issue.path.startsWith(`${path}.`) || issue.path.startsWith(`${path}[`);\n });\n}\n\nconst JsonEditorSurface = React.forwardRef<JsonEditorHandle, {\n value: any;\n resetToken: string;\n readOnly?: boolean;\n onValueChange: (value: any) => void;\n onErrorChange: (message: string | null) => void;\n}>(function JsonEditorSurface({ value, resetToken, readOnly = false, onValueChange, onErrorChange }, ref) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const editorRef = useRef<any>(null);\n // Keep a ref to the latest value so the async init can seed the editor correctly\n const latestValueRef = useRef<any>(value);\n\n // Sync latest value into ref so async editor init can use it\n useEffect(() => { latestValueRef.current = value; }, [value]);\n\n const emitState = () => {\n const editor = editorRef.current;\n if (!editor) return;\n\n try {\n const nextValue = editor.get();\n onValueChange(nextValue);\n onErrorChange(null);\n } catch (error: any) {\n onErrorChange(error?.message ? String(error.message) : \"The JSON is currently invalid.\");\n }\n };\n\n useImperativeHandle(ref, () => ({\n format() {\n try {\n editorRef.current?.format?.();\n } catch (_error) {\n // jsoneditor already surfaces parse states through onErrorChange\n }\n emitState();\n },\n }), []);\n\n useEffect(() => {\n if (!containerRef.current || editorRef.current) return;\n\n let destroyed = false;\n\n // @ts-ignore\n void import(\"jsoneditor\").then((jsonEditorModule: any) => {\n if (destroyed || !containerRef.current || editorRef.current) {\n return;\n }\n\n const JSONEditor = jsonEditorModule?.default ?? jsonEditorModule;\n editorRef.current = new JSONEditor(containerRef.current, {\n mode: \"code\",\n modes: [\"code\"],\n mainMenuBar: true,\n navigationBar: true,\n statusBar: true,\n search: true,\n enableSort: false,\n enableTransform: false,\n onChange: () => emitState(),\n });\n\n // Seed editor with current value (which may already be set before async init resolved)\n try { editorRef.current.set(latestValueRef.current); } catch (_e) {}\n emitState();\n\n if (editorRef.current?.aceEditor?.setReadOnly) {\n editorRef.current.aceEditor.setReadOnly(readOnly);\n }\n });\n\n return () => {\n destroyed = true;\n editorRef.current?.destroy?.();\n editorRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (!editorRef.current) return;\n editorRef.current.set(value);\n emitState();\n }, [resetToken, value]);\n\n useEffect(() => {\n if (!editorRef.current?.aceEditor?.setReadOnly) return;\n editorRef.current.aceEditor.setReadOnly(readOnly);\n }, [readOnly]);\n\n return <div ref={containerRef} className={`solid-module-explorer-editor-host solid-module-explorer-jsoneditor ${readOnly ? \"is-readonly\" : \"\"}`} />;\n});\n\nfunction MetadataTree({\n nodes,\n activePath,\n expandedPaths,\n onToggle,\n onSelect,\n depth = 0,\n}: {\n nodes: ExplorerTreeNode[];\n activePath: string;\n expandedPaths: Set<string>;\n onToggle: (path: string) => void;\n onSelect: (path: string) => void;\n depth?: number;\n}) {\n return (\n <>\n {nodes.map((node) => {\n const isExpanded = expandedPaths.has(node.path);\n const hasChildren = node.children.length > 0;\n const isActive = activePath === node.path;\n\n return (\n <div key={node.id} className=\"solid-module-explorer-tree-node\">\n <div\n className={`solid-module-explorer-tree-row ${isActive ? \"is-active\" : \"\"}`}\n style={{ paddingLeft: `${depth * 0.9}rem` }}\n >\n <button\n type=\"button\"\n className=\"solid-module-explorer-tree-toggle\"\n onClick={() => hasChildren && onToggle(node.path)}\n aria-label={hasChildren ? (isExpanded ? \"Collapse node\" : \"Expand node\") : \"Leaf node\"}\n disabled={!hasChildren}\n >\n {hasChildren ? (isExpanded ? <ChevronDown size={14} /> : <ChevronRight size={14} />) : <span className=\"solid-module-explorer-tree-dot\" />}\n </button>\n <button\n type=\"button\"\n className=\"solid-module-explorer-tree-label\"\n onClick={() => onSelect(node.path)}\n title={node.path}\n >\n {node.label}\n </button>\n </div>\n\n {hasChildren && isExpanded && (\n <MetadataTree\n nodes={node.children}\n activePath={activePath}\n expandedPaths={expandedPaths}\n onToggle={onToggle}\n onSelect={onSelect}\n depth={depth + 1}\n />\n )}\n </div>\n );\n })}\n </>\n );\n}\n\nexport function ModuleMetadataExplorer({\n moduleName,\n moduleId,\n modelSingularName,\n scopedArrayPath,\n scopedItemValue,\n scopedItemField,\n readOnly = false,\n allowSeed = true,\n}: ModuleMetadataExplorerProps) {\n const dispatch = useDispatch();\n const editorRef = useRef<JsonEditorHandle | null>(null);\n const explorerRef = useRef<HTMLDivElement | null>(null);\n const isResizingRef = useRef(false);\n const [activePath, setActivePath] = useState(\"\");\n const [expandedPaths, setExpandedPaths] = useState<Set<string>>(new Set());\n const [treeFilter, setTreeFilter] = useState(\"\");\n const [sidebarWidth, setSidebarWidth] = useState(280);\n const [editorValue, setEditorValue] = useState<any>({});\n const [savedValue, setSavedValue] = useState<any>({});\n const [editorError, setEditorError] = useState<string | null>(null);\n const [editorResetToken, setEditorResetToken] = useState(\"initial\");\n const [validationIssues, setValidationIssues] = useState<MetadataIssue[] | null>(null);\n const [localActionSummary, setLocalActionSummary] = useState(\"\");\n const [isContextDialogOpen, setIsContextDialogOpen] = useState(false);\n const [isSeedDialogOpen, setIsSeedDialogOpen] = useState(false);\n\n const {\n data: manifestData,\n error: manifestError,\n refetch: refetchManifest,\n } = useGetModuleMetadataExplorerManifestQuery(moduleName as string, {\n skip: !moduleName,\n });\n\n const {\n data: documentData,\n isLoading: isDocumentLoading,\n error: documentError,\n refetch: refetchDocument,\n } = useGetModuleMetadataExplorerDocumentQuery(moduleName as string, {\n skip: !moduleName,\n });\n\n const [updateSection, { isLoading: isSavingSection }] = useUpdateModuleMetadataExplorerSectionMutation();\n const [validateSection, { isLoading: isValidatingSection }] = useValidateModuleMetadataExplorerSectionMutation();\n const [seedModuleMetadata, { isLoading: isSeedingModule }] = useSeedModuleMetadataMutation();\n const isReadOnlyExplorer = readOnly || moduleName?.toLowerCase() === \"solid-core\";\n\n const sections = (manifestData?.sections ?? []) as ExplorerSectionDefinition[];\n const fullDocument = documentData?.value ?? {};\n const loadError = !manifestData || !documentData ? (manifestError ?? documentError) : null;\n\n const { nodes: treeNodes, nodeMap } = useMemo(\n () => buildTreeFromDocument(sections, fullDocument),\n [sections, fullDocument],\n );\n\n const scopedRootPath = useMemo(() => {\n // Scope to a specific model definition\n if (modelSingularName) {\n const models = getValueAtJsonPath(fullDocument, \"moduleMetadata.models\");\n if (!Array.isArray(models)) return \"\";\n const modelIndex = models.findIndex((model) => model?.singularName === modelSingularName);\n return modelIndex >= 0 ? `moduleMetadata.models[${modelIndex}]` : \"\";\n }\n // Scope to a specific item in a root-level array (e.g. views, actions, menus)\n if (scopedArrayPath && scopedItemValue) {\n const arr = getValueAtJsonPath(fullDocument, scopedArrayPath);\n if (!Array.isArray(arr)) return \"\";\n const matchField = scopedItemField ?? \"name\";\n const itemIndex = arr.findIndex((item) => item?.[matchField] === scopedItemValue);\n return itemIndex >= 0 ? `${scopedArrayPath}[${itemIndex}]` : \"\";\n }\n return \"\";\n }, [fullDocument, modelSingularName, scopedArrayPath, scopedItemValue, scopedItemField]);\n\n const scopedTreeNodes = useMemo(() => {\n if (!scopedRootPath) return treeNodes;\n const scopedNode = nodeMap.get(scopedRootPath);\n return scopedNode ? [scopedNode] : [];\n }, [nodeMap, scopedRootPath, treeNodes]);\n\n const filteredTreeNodes = useMemo(\n () => filterTreeNodes(scopedTreeNodes, treeFilter),\n [scopedTreeNodes, treeFilter],\n );\n\n const visibleExpandedPaths = useMemo(() => {\n if (!treeFilter.trim()) return expandedPaths;\n const nextExpanded = new Set<string>();\n const visit = (nodesToVisit: ExplorerTreeNode[]) => {\n nodesToVisit.forEach((node) => {\n if (node.children.length) {\n nextExpanded.add(node.path);\n visit(node.children);\n }\n });\n };\n visit(filteredTreeNodes);\n return nextExpanded;\n }, [expandedPaths, filteredTreeNodes, treeFilter]);\n\n const activeNode = activePath ? nodeMap.get(activePath) ?? null : null;\n const activeSection = activePath ? getSectionForPath(sections, activePath) : null;\n const activeValidationIssues = filterIssuesForPath(validationIssues ?? [], activePath);\n const savedSerialized = serializeJson(savedValue);\n const editorSerialized = serializeJson(editorValue);\n const isDirty = editorError ? true : savedSerialized !== editorSerialized;\n const hasMutableChanges = !isReadOnlyExplorer && isDirty;\n const canSave = !isReadOnlyExplorer && isDirty && !editorError;\n const hasValidationFailure = Boolean(editorError) || activeValidationIssues.length > 0;\n const validationSummary = editorError\n ? editorError\n : activeValidationIssues.length\n ? `${activeValidationIssues.length} validation issue${activeValidationIssues.length === 1 ? \"\" : \"s\"}: ${activeValidationIssues[0]?.message ?? \"Review this JSON before saving.\"}`\n : \"\";\n\n useEffect(() => {\n setValidationIssues(documentData?.validation?.issues ?? []);\n }, [documentData?.lastModifiedAt]);\n\n useEffect(() => {\n const handlePointerMove = (event: PointerEvent) => {\n if (!isResizingRef.current || !explorerRef.current) return;\n const bounds = explorerRef.current.getBoundingClientRect();\n const nextWidth = Math.min(Math.max(event.clientX - bounds.left, 220), 520);\n setSidebarWidth(nextWidth);\n };\n\n const handlePointerUp = () => {\n isResizingRef.current = false;\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n };\n\n window.addEventListener(\"pointermove\", handlePointerMove);\n window.addEventListener(\"pointerup\", handlePointerUp);\n\n return () => {\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", handlePointerUp);\n };\n }, []);\n\n useEffect(() => {\n if (!scopedTreeNodes.length) return;\n\n const isPathInsideScope =\n !scopedRootPath ||\n activePath === scopedRootPath ||\n activePath.startsWith(`${scopedRootPath}.`) ||\n activePath.startsWith(`${scopedRootPath}[`);\n\n if (!activePath || !nodeMap.has(activePath) || !isPathInsideScope) {\n const defaultPath = scopedTreeNodes[0].path;\n setActivePath(defaultPath);\n setExpandedPaths(new Set([defaultPath]));\n }\n }, [activePath, nodeMap, scopedRootPath, scopedTreeNodes]);\n\n useEffect(() => {\n if (!activePath) return;\n const nextValue = getValueAtJsonPath(fullDocument, activePath);\n if (nextValue === undefined) return;\n setSavedValue(nextValue);\n setEditorValue(nextValue);\n setEditorError(null);\n setEditorResetToken(`${activePath}:${documentData?.lastModifiedAt ?? \"\"}`);\n }, [activePath, documentData?.lastModifiedAt, fullDocument]);\n\n const showErrorToast = (error: any) => {\n dispatch(showToast({\n severity: \"error\",\n summary: \"Metadata Explorer\",\n detail: extractApiErrorMessage(error),\n life: 4000,\n }));\n };\n\n const toggleExpandedPath = (path: string) => {\n setExpandedPaths((current) => {\n const next = new Set(current);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n });\n };\n\n const selectPath = (path: string) => {\n if (path === activePath) return;\n if (!isReadOnlyExplorer && isDirty) {\n const shouldProceed = window.confirm(\"You have unsaved metadata changes. Switch nodes and discard them?\");\n if (!shouldProceed) return;\n }\n\n const ancestorPaths = getAncestorPaths(nodeMap, path);\n setExpandedPaths((current) => {\n const next = new Set(current);\n ancestorPaths.forEach((ancestorPath) => next.add(ancestorPath));\n return next;\n });\n setActivePath(path);\n };\n\n const handleSidebarResizeStart = () => {\n isResizingRef.current = true;\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n };\n\n const handleCollapseAll = () => {\n setExpandedPaths(new Set());\n };\n\n const handleFormat = () => {\n editorRef.current?.format();\n };\n\n const buildPatchedDocument = () => {\n const nextDocument = deepCloneJson(fullDocument);\n setValueAtJsonPath(nextDocument, activePath, editorValue);\n return nextDocument;\n };\n\n const buildPatchedSectionValue = () => {\n if (!activeSection) return undefined;\n return getValueAtJsonPath(buildPatchedDocument(), activeSection.jsonPath);\n };\n\n const handleValidate = async () => {\n if (!moduleName || !activePath || !activeSection) return;\n\n if (editorError) {\n setLocalActionSummary(\"Validation blocked because the JSON is currently invalid.\");\n dispatch(showToast({\n severity: \"error\",\n summary: \"Metadata Explorer\",\n detail: \"Fix the invalid JSON before validating.\",\n life: 3500,\n }));\n return;\n }\n\n try {\n const response: any = await validateSection({\n moduleName,\n sectionKey: activeSection.key,\n value: buildPatchedSectionValue(),\n }).unwrap();\n\n setValidationIssues(response?.issues ?? []);\n setLocalActionSummary(response?.valid ? \"Validation passed for the current JSON fragment.\" : \"Validation reported issues for the current JSON fragment.\");\n dispatch(showToast({\n severity: response?.valid ? \"success\" : \"warn\",\n summary: \"Metadata Explorer\",\n detail: response?.valid ? \"Validation passed.\" : \"Validation reported issues.\",\n life: 3000,\n }));\n } catch (error) {\n showErrorToast(error);\n }\n };\n\n const handleSave = async () => {\n if (!moduleName || !activePath || !activeSection) return;\n\n if (editorError) {\n dispatch(showToast({\n severity: \"error\",\n summary: \"Metadata Explorer\",\n detail: \"Fix the invalid JSON before saving.\",\n life: 3500,\n }));\n return;\n }\n\n try {\n const response: any = await updateSection({\n moduleName,\n sectionKey: activeSection.key,\n value: buildPatchedSectionValue(),\n }).unwrap();\n\n setValidationIssues(response?.validation?.issues ?? []);\n setLocalActionSummary(\"JSON fragment saved to the metadata file.\");\n dispatch(showToast({\n severity: \"success\",\n summary: \"Metadata Explorer\",\n detail: \"Metadata saved successfully.\",\n life: 3000,\n }));\n refetchManifest();\n refetchDocument();\n } catch (error) {\n showErrorToast(error);\n }\n };\n\n const handleSeedModule = async () => {\n if (!moduleId) return;\n\n try {\n const response: any = await seedModuleMetadata({ id: moduleId }).unwrap();\n setIsSeedDialogOpen(false);\n setLocalActionSummary(response?.message ?? `Seeded metadata for module ${moduleName}.`);\n dispatch(showToast({\n severity: \"success\",\n summary: \"Metadata Explorer\",\n detail: response?.message ?? \"Module metadata seeded successfully.\",\n life: 3000,\n }));\n refetchManifest();\n refetchDocument();\n } catch (error) {\n showErrorToast(error);\n }\n };\n\n if (!moduleName) {\n return null;\n }\n\n return (\n <div className=\"solid-module-explorer\">\n <div className=\"solid-module-explorer-panel\">\n {loadError && (\n <div className=\"solid-module-explorer-alert\">\n <SolidMessage\n severity=\"error\"\n text={`Unable to load metadata explorer: ${extractApiErrorMessage(loadError)}`}\n className=\"justify-start\"\n />\n </div>\n )}\n\n <div\n ref={explorerRef}\n className=\"solid-module-explorer-workspace\"\n style={{ gridTemplateColumns: `${sidebarWidth}px 8px minmax(0, 1fr)` }}\n >\n <aside className=\"solid-module-explorer-sidebar\">\n <div className=\"solid-module-explorer-sidebar-section solid-module-explorer-sidebar-sections\">\n <div className=\"solid-module-explorer-sidebar-heading\">\n <div className=\"solid-module-explorer-sidebar-heading-main\">\n <div className=\"solid-module-explorer-sidebar-title\">{modelSingularName ? \"Explorer\" : \"Sections\"}</div>\n <SolidTag tone=\"info\">{modelSingularName ? scopedTreeNodes.length : sections.length}</SolidTag>\n </div>\n <button\n type=\"button\"\n className=\"solid-module-explorer-sidebar-action\"\n onClick={handleCollapseAll}\n >\n Collapse all\n </button>\n </div>\n\n <div className=\"solid-module-explorer-sidebar-search\">\n <SolidInput\n value={treeFilter}\n onChange={(event) => setTreeFilter(event.target.value)}\n placeholder=\"Search metadata tree\"\n />\n <div className=\"solid-module-explorer-sidebar-search-icon\">\n <Search size={14} />\n </div>\n </div>\n\n <div className=\"solid-module-explorer-section-list solid-module-explorer-tree-list\">\n <MetadataTree\n nodes={filteredTreeNodes}\n activePath={activePath}\n expandedPaths={visibleExpandedPaths}\n onToggle={toggleExpandedPath}\n onSelect={selectPath}\n />\n </div>\n </div>\n </aside>\n\n <div\n className=\"solid-module-explorer-resizer\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize metadata navigation panel\"\n onPointerDown={handleSidebarResizeStart}\n />\n\n <section className=\"solid-module-explorer-main\">\n <div className=\"solid-module-explorer-main-header\">\n <div className=\"solid-module-explorer-main-title\">\n <div className=\"solid-module-explorer-main-heading-row\">\n <h4>{activeNode?.label ?? activeSection?.title ?? \"Metadata\"}</h4>\n <p>{activePath || \"Choose a metadata node from the tree.\"}</p>\n </div>\n {hasValidationFailure && (\n <div className=\"solid-module-explorer-inline-validation\" title={validationSummary}>\n {validationSummary}\n </div>\n )}\n {isReadOnlyExplorer && (\n <div className=\"solid-module-explorer-readonly-note\">\n This metadata is browse-only in the explorer.\n </div>\n )}\n </div>\n <div className=\"solid-module-explorer-main-actions\">\n <div className=\"solid-module-explorer-main-meta\">\n {hasMutableChanges && <SolidTag tone=\"warn\">Unsaved changes</SolidTag>}\n {editorError && <SolidTag tone=\"danger\">Invalid JSON</SolidTag>}\n {isReadOnlyExplorer && <SolidTag tone=\"info\">Read only</SolidTag>}\n </div>\n {!isReadOnlyExplorer && (\n <SolidButton\n size=\"sm\"\n leftIcon={<Save size={14} />}\n onClick={handleSave}\n loading={isSavingSection}\n disabled={!canSave}\n >\n Save Section\n </SolidButton>\n )}\n <SolidDropdownMenu>\n <SolidDropdownMenuTrigger asChild>\n <SolidButton\n variant=\"ghost\"\n size=\"sm\"\n className=\"solid-icon-button\"\n aria-label=\"Explorer actions\"\n >\n <Settings size={16} />\n </SolidButton>\n </SolidDropdownMenuTrigger>\n <SolidDropdownMenuContent className=\"solid-module-explorer-actions-menu\">\n {!isReadOnlyExplorer && (\n <SolidDropdownMenuItem onSelect={handleFormat}>\n <div className=\"solid-module-explorer-actions-item\">\n <Wand2 size={14} />\n <span>Format</span>\n </div>\n </SolidDropdownMenuItem>\n )}\n <SolidDropdownMenuItem onSelect={handleValidate} disabled={isValidatingSection}>\n <div className=\"solid-module-explorer-actions-item\">\n <FileSearch size={14} />\n <span>{isValidatingSection ? \"Validating...\" : \"Validate\"}</span>\n </div>\n </SolidDropdownMenuItem>\n <SolidDropdownMenuItem onSelect={() => setIsContextDialogOpen(true)}>\n <div className=\"solid-module-explorer-actions-item\">\n <Settings size={14} />\n <span>Context</span>\n </div>\n </SolidDropdownMenuItem>\n {allowSeed && (\n <SolidDropdownMenuItem onSelect={() => setIsSeedDialogOpen(true)} disabled={!moduleId || isSeedingModule}>\n <div className=\"solid-module-explorer-actions-item\">\n <DatabaseZap size={14} />\n <span>{isSeedingModule ? \"Seeding...\" : \"Seed\"}</span>\n </div>\n </SolidDropdownMenuItem>\n )}\n </SolidDropdownMenuContent>\n </SolidDropdownMenu>\n </div>\n </div>\n\n <div className=\"solid-module-explorer-editor-wrap\">\n <div className=\"solid-module-explorer-editor-shell\">\n {isDocumentLoading ? (\n <div style={{ padding: \"1rem\" }} className=\"solid-module-explorer-empty\">\n Loading metadata JSON...\n </div>\n ) : (\n <JsonEditorSurface\n ref={editorRef}\n value={savedValue}\n resetToken={editorResetToken}\n readOnly={isReadOnlyExplorer}\n onValueChange={setEditorValue}\n onErrorChange={setEditorError}\n />\n )}\n </div>\n </div>\n </section>\n </div>\n </div>\n\n <SolidDialog\n open={isContextDialogOpen}\n onOpenChange={setIsContextDialogOpen}\n header=\"Context\"\n contentClassName=\"solid-module-explorer-context-dialog\"\n >\n <SolidDialogSeparator />\n <SolidDialogBody>\n <div className=\"solid-module-explorer-context-dialog-body\">\n <div className=\"solid-module-explorer-context-dialog-header\">\n <div className=\"solid-module-explorer-context-dialog-title\">\n {activeNode?.label ?? \"Metadata node\"}\n </div>\n <div className=\"solid-module-explorer-context-dialog-meta\">\n {activeNode?.sectionTitle && <SolidTag tone=\"info\">{activeNode.sectionTitle}</SolidTag>}\n </div>\n </div>\n\n <div className=\"solid-module-explorer-context-grid\">\n <div className=\"solid-module-explorer-context-row\">\n <div className=\"solid-module-explorer-context-label\">JSON Path</div>\n <div className=\"solid-module-explorer-context-value\">{activePath || \"-\"}</div>\n </div>\n <div className=\"solid-module-explorer-context-row\">\n <div className=\"solid-module-explorer-context-label\">File</div>\n <div className=\"solid-module-explorer-context-value\">{manifestData?.filePath ?? \"-\"}</div>\n </div>\n {localActionSummary && (\n <div className=\"solid-module-explorer-context-row\">\n <div className=\"solid-module-explorer-context-label\">Last Action</div>\n <div className=\"solid-module-explorer-context-value\">{localActionSummary}</div>\n </div>\n )}\n </div>\n\n <div className=\"solid-module-explorer-context-note\">\n Clicking any branch or leaf in the tree opens that exact JSON fragment on the right.\n </div>\n </div>\n </SolidDialogBody>\n </SolidDialog>\n\n <SolidDialog\n open={isSeedDialogOpen}\n onOpenChange={setIsSeedDialogOpen}\n contentClassName=\"solid-module-explorer-seed-dialog\"\n >\n <SolidDialogHeader>\n <SolidDialogTitle>Seed Module Metadata</SolidDialogTitle>\n </SolidDialogHeader>\n <SolidDialogSeparator />\n <SolidDialogBody>\n <div className=\"solid-module-explorer-seed-dialog-body\">\n <p>\n Re-seed metadata for <strong>{moduleName}</strong> from its JSON file?\n </p>\n <p className=\"solid-module-explorer-seed-dialog-note\">\n This only re-runs metadata seeding for the current module and refreshes database metadata from the module JSON.\n </p>\n </div>\n </SolidDialogBody>\n <SolidDialogFooter>\n <SolidButton variant=\"outline\" size=\"sm\" onClick={() => setIsSeedDialogOpen(false)} disabled={isSeedingModule}>\n Cancel\n </SolidButton>\n <SolidButton size=\"sm\" onClick={handleSeedModule} loading={isSeedingModule} disabled={!moduleId}>\n Seed\n </SolidButton>\n </SolidDialogFooter>\n </SolidDialog>\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ModuleMetadataExplorer.js","sourceRoot":"","sources":["../../../../src/components/core/module/ModuleMetadataExplorer.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ChevronDown, ChevronRight, DatabaseZap, FileSearch, Save, Search, Settings, Wand2 } from \"lucide-react\";\nimport React, { useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport {\n useGetModuleMetadataExplorerDocumentQuery,\n useGetModuleMetadataExplorerManifestQuery,\n useSeedModuleMetadataMutation,\n useUpdateModuleMetadataExplorerSectionMutation,\n useValidateModuleMetadataExplorerSectionMutation,\n} from \"../../../redux/api/moduleApi\";\nimport { showToast } from \"../../../redux/features/toastSlice\";\nimport {\n SolidButton,\n SolidDialog,\n SolidDialogBody,\n SolidDialogFooter,\n SolidDialogHeader,\n SolidDialogSeparator,\n SolidDialogTitle,\n SolidDropdownMenu,\n SolidDropdownMenuContent,\n SolidDropdownMenuItem,\n SolidDropdownMenuTrigger,\n SolidInput,\n SolidMessage,\n SolidTag,\n} from \"../../shad-cn-ui\";\nimport \"jsoneditor/dist/jsoneditor.css\";\nimport \"./ModuleMetadataExplorer.css\";\n\ntype ModuleMetadataExplorerProps = {\n moduleName?: string;\n moduleId?: number;\n modelSingularName?: string;\n scopedArrayPath?: string;\n scopedItemValue?: string;\n scopedItemField?: string;\n readOnly?: boolean;\n allowSeed?: boolean;\n};\n\ntype MetadataIssue = {\n path: string;\n message: string;\n severity: \"error\" | \"warning\";\n};\n\ntype ExplorerSectionDefinition = {\n key: string;\n title: string;\n jsonPath: string;\n type: \"object\" | \"array\";\n description: string;\n};\n\ntype ExplorerTreeNode = {\n id: string;\n label: string;\n path: string;\n parentPath: string | null;\n sectionKey: string;\n sectionTitle: string;\n children: ExplorerTreeNode[];\n};\n\ntype JsonEditorHandle = {\n format: () => void;\n};\n\nfunction extractApiErrorMessage(error: any) {\n const message = error?.data?.message ?? error?.message ?? \"Something went wrong\";\n return Array.isArray(message) ? message.join(\", \") : String(message);\n}\n\nfunction serializeJson(value: any) {\n try {\n return JSON.stringify(value);\n } catch (_error) {\n return \"\";\n }\n}\n\nfunction deepCloneJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value));\n}\n\nfunction humanizeKey(value: string) {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .replace(/^./, (char) => char.toUpperCase());\n}\n\nfunction tokenizePath(path: string) {\n const tokens: Array<string | number> = [];\n const regex = /([^[.\\]]+)|\\[(\\d+)\\]/g;\n let match: RegExpExecArray | null;\n while ((match = regex.exec(path)) !== null) {\n if (match[1] !== undefined) {\n tokens.push(match[1]);\n } else if (match[2] !== undefined) {\n tokens.push(Number(match[2]));\n }\n }\n return tokens;\n}\n\nfunction getValueAtJsonPath(source: any, path: string) {\n if (!path) return source;\n return tokenizePath(path).reduce((current, token) => {\n if (current === undefined || current === null) return undefined;\n return current[token as keyof typeof current];\n }, source);\n}\n\nfunction setValueAtJsonPath(target: any, path: string, value: any) {\n const tokens = tokenizePath(path);\n if (!tokens.length) return;\n\n let current = target;\n for (let index = 0; index < tokens.length - 1; index += 1) {\n current = current[tokens[index] as keyof typeof current];\n }\n\n current[tokens[tokens.length - 1] as keyof typeof current] = value;\n}\n\nfunction appendPath(basePath: string, key: string) {\n return basePath ? `${basePath}.${key}` : key;\n}\n\nfunction getArrayItemLabel(item: any, index: number, parentKey: string) {\n const labelCandidates = [\n \"singularName\",\n \"name\",\n \"displayName\",\n \"pluralName\",\n \"label\",\n \"key\",\n \"title\",\n \"id\",\n ];\n\n for (const candidate of labelCandidates) {\n const nextValue = item?.[candidate];\n if (nextValue !== undefined && nextValue !== null && `${nextValue}`.trim()) {\n return `${nextValue}`;\n }\n }\n\n return `${humanizeKey(parentKey || \"Item\")} ${index + 1}`;\n}\n\nfunction buildTreeNode(\n value: any,\n options: {\n label: string;\n path: string;\n parentPath: string | null;\n sectionKey: string;\n sectionTitle: string;\n hintKey: string;\n },\n): ExplorerTreeNode {\n const { label, path, parentPath, sectionKey, sectionTitle, hintKey } = options;\n\n let children: ExplorerTreeNode[] = [];\n\n if (Array.isArray(value)) {\n children = value\n .filter((item) => item !== null && typeof item === \"object\")\n .map((item, index) => buildTreeNode(item, {\n label: getArrayItemLabel(item, index, hintKey),\n path: `${path}[${index}]`,\n parentPath: path,\n sectionKey,\n sectionTitle,\n hintKey,\n }));\n } else if (value && typeof value === \"object\") {\n children = Object.entries(value)\n .filter(([, nextValue]) => nextValue !== null && typeof nextValue === \"object\")\n .map(([key, nextValue]) => buildTreeNode(nextValue, {\n label: humanizeKey(key),\n path: appendPath(path, key),\n parentPath: path,\n sectionKey,\n sectionTitle,\n hintKey: key,\n }));\n }\n\n return {\n id: path,\n label,\n path,\n parentPath,\n sectionKey,\n sectionTitle,\n children,\n };\n}\n\nfunction buildTreeFromDocument(sections: ExplorerSectionDefinition[], documentValue: any) {\n const nodes = sections\n .map((section) => {\n const sectionValue = getValueAtJsonPath(documentValue, section.jsonPath);\n if (sectionValue === undefined) return null;\n return buildTreeNode(sectionValue, {\n label: section.title,\n path: section.jsonPath,\n parentPath: null,\n sectionKey: section.key,\n sectionTitle: section.title,\n hintKey: section.key,\n });\n })\n .filter(Boolean) as ExplorerTreeNode[];\n\n const nodeMap = new Map<string, ExplorerTreeNode>();\n const visit = (nextNodes: ExplorerTreeNode[]) => {\n nextNodes.forEach((node) => {\n nodeMap.set(node.path, node);\n if (node.children.length) visit(node.children);\n });\n };\n visit(nodes);\n\n return { nodes, nodeMap };\n}\n\nfunction filterTreeNodes(nodes: ExplorerTreeNode[], query: string): ExplorerTreeNode[] {\n const needle = query.trim().toLowerCase();\n if (!needle) return nodes;\n\n const visit = (node: ExplorerTreeNode): ExplorerTreeNode | null => {\n const filteredChildren = node.children\n .map(visit)\n .filter(Boolean) as ExplorerTreeNode[];\n const matches = node.label.toLowerCase().includes(needle) || node.path.toLowerCase().includes(needle);\n\n if (matches || filteredChildren.length) {\n return { ...node, children: filteredChildren };\n }\n\n return null;\n };\n\n return nodes.map(visit).filter(Boolean) as ExplorerTreeNode[];\n}\n\nfunction getAncestorPaths(nodeMap: Map<string, ExplorerTreeNode>, path: string) {\n const paths: string[] = [];\n let current = nodeMap.get(path);\n\n while (current?.parentPath) {\n paths.push(current.parentPath);\n current = nodeMap.get(current.parentPath);\n }\n\n return paths;\n}\n\nfunction getSectionForPath(sections: ExplorerSectionDefinition[], path: string) {\n return sections\n .filter((section) => path === section.jsonPath || path.startsWith(`${section.jsonPath}.`) || path.startsWith(`${section.jsonPath}[`))\n .sort((left, right) => right.jsonPath.length - left.jsonPath.length)[0] ?? null;\n}\n\nfunction filterIssuesForPath(issues: MetadataIssue[], path: string) {\n return issues.filter((issue) => {\n if (!issue.path) return false;\n return issue.path === path || issue.path.startsWith(`${path}.`) || issue.path.startsWith(`${path}[`);\n });\n}\n\nconst JsonEditorSurface = React.forwardRef<JsonEditorHandle, {\n value: any;\n resetToken: string;\n readOnly?: boolean;\n onValueChange: (value: any) => void;\n onErrorChange: (message: string | null) => void;\n}>(function JsonEditorSurface({ value, resetToken, readOnly = false, onValueChange, onErrorChange }, ref) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const editorRef = useRef<any>(null);\n // Keep a ref to the latest value so the async init can seed the editor correctly\n const latestValueRef = useRef<any>(value);\n\n // Sync latest value into ref so async editor init can use it\n useEffect(() => { latestValueRef.current = value; }, [value]);\n\n const emitState = () => {\n const editor = editorRef.current;\n if (!editor) return;\n\n try {\n const nextValue = editor.get();\n onValueChange(nextValue);\n onErrorChange(null);\n } catch (error: any) {\n onErrorChange(error?.message ? String(error.message) : \"The JSON is currently invalid.\");\n }\n };\n\n useImperativeHandle(ref, () => ({\n format() {\n try {\n editorRef.current?.format?.();\n } catch (_error) {\n // jsoneditor already surfaces parse states through onErrorChange\n }\n emitState();\n },\n }), []);\n\n useEffect(() => {\n if (!containerRef.current || editorRef.current) return;\n\n let destroyed = false;\n\n // @ts-ignore\n void import(\"jsoneditor\").then((jsonEditorModule: any) => {\n if (destroyed || !containerRef.current || editorRef.current) {\n return;\n }\n\n const JSONEditor = jsonEditorModule?.default ?? jsonEditorModule;\n editorRef.current = new JSONEditor(containerRef.current, {\n mode: \"code\",\n modes: [\"code\"],\n mainMenuBar: true,\n navigationBar: true,\n statusBar: true,\n search: true,\n enableSort: false,\n enableTransform: false,\n onChange: () => emitState(),\n });\n\n // Seed editor with current value (which may already be set before async init resolved)\n try { editorRef.current.set(latestValueRef.current); } catch (_e) {}\n emitState();\n\n if (editorRef.current?.aceEditor?.setReadOnly) {\n editorRef.current.aceEditor.setReadOnly(readOnly);\n }\n });\n\n return () => {\n destroyed = true;\n editorRef.current?.destroy?.();\n editorRef.current = null;\n };\n }, []);\n\n useEffect(() => {\n if (!editorRef.current) return;\n editorRef.current.set(value);\n emitState();\n }, [resetToken, value]);\n\n useEffect(() => {\n if (!editorRef.current?.aceEditor?.setReadOnly) return;\n editorRef.current.aceEditor.setReadOnly(readOnly);\n }, [readOnly]);\n\n return <div ref={containerRef} className={`solid-module-explorer-editor-host solid-module-explorer-jsoneditor ${readOnly ? \"is-readonly\" : \"\"}`} />;\n});\n\nfunction MetadataTree({\n nodes,\n activePath,\n expandedPaths,\n onToggle,\n onSelect,\n depth = 0,\n}: {\n nodes: ExplorerTreeNode[];\n activePath: string;\n expandedPaths: Set<string>;\n onToggle: (path: string) => void;\n onSelect: (path: string) => void;\n depth?: number;\n}) {\n return (\n <>\n {nodes.map((node) => {\n const isExpanded = expandedPaths.has(node.path);\n const hasChildren = node.children.length > 0;\n const isActive = activePath === node.path;\n\n return (\n <div key={node.id} className=\"solid-module-explorer-tree-node\">\n <div\n className={`solid-module-explorer-tree-row ${isActive ? \"is-active\" : \"\"}`}\n style={{ paddingLeft: `${depth * 0.9}rem` }}\n >\n <button\n type=\"button\"\n className=\"solid-module-explorer-tree-toggle\"\n onClick={() => hasChildren && onToggle(node.path)}\n aria-label={hasChildren ? (isExpanded ? \"Collapse node\" : \"Expand node\") : \"Leaf node\"}\n disabled={!hasChildren}\n >\n {hasChildren ? (isExpanded ? <ChevronDown size={14} /> : <ChevronRight size={14} />) : <span className=\"solid-module-explorer-tree-dot\" />}\n </button>\n <button\n type=\"button\"\n className=\"solid-module-explorer-tree-label\"\n onClick={() => onSelect(node.path)}\n title={node.path}\n >\n {node.label}\n </button>\n </div>\n\n {hasChildren && isExpanded && (\n <MetadataTree\n nodes={node.children}\n activePath={activePath}\n expandedPaths={expandedPaths}\n onToggle={onToggle}\n onSelect={onSelect}\n depth={depth + 1}\n />\n )}\n </div>\n );\n })}\n </>\n );\n}\n\nexport function ModuleMetadataExplorer({\n moduleName,\n moduleId,\n modelSingularName,\n scopedArrayPath,\n scopedItemValue,\n scopedItemField,\n readOnly = false,\n allowSeed = true,\n}: ModuleMetadataExplorerProps) {\n const dispatch = useDispatch();\n const editorRef = useRef<JsonEditorHandle | null>(null);\n const explorerRef = useRef<HTMLDivElement | null>(null);\n const isResizingRef = useRef(false);\n const [activePath, setActivePath] = useState(\"\");\n const [expandedPaths, setExpandedPaths] = useState<Set<string>>(new Set());\n const [treeFilter, setTreeFilter] = useState(\"\");\n const [sidebarWidth, setSidebarWidth] = useState(280);\n const [editorValue, setEditorValue] = useState<any>({});\n const [savedValue, setSavedValue] = useState<any>({});\n const [editorError, setEditorError] = useState<string | null>(null);\n const [editorResetToken, setEditorResetToken] = useState(\"initial\");\n const [validationIssues, setValidationIssues] = useState<MetadataIssue[] | null>(null);\n const [localActionSummary, setLocalActionSummary] = useState(\"\");\n const [isContextDialogOpen, setIsContextDialogOpen] = useState(false);\n const [isSeedDialogOpen, setIsSeedDialogOpen] = useState(false);\n\n const {\n data: manifestData,\n error: manifestError,\n refetch: refetchManifest,\n } = useGetModuleMetadataExplorerManifestQuery(moduleName as string, {\n skip: !moduleName,\n });\n\n const {\n data: documentData,\n isLoading: isDocumentLoading,\n error: documentError,\n refetch: refetchDocument,\n } = useGetModuleMetadataExplorerDocumentQuery(moduleName as string, {\n skip: !moduleName,\n });\n\n const [updateSection, { isLoading: isSavingSection }] = useUpdateModuleMetadataExplorerSectionMutation();\n const [validateSection, { isLoading: isValidatingSection }] = useValidateModuleMetadataExplorerSectionMutation();\n const [seedModuleMetadata, { isLoading: isSeedingModule }] = useSeedModuleMetadataMutation();\n const isReadOnlyExplorer = readOnly || moduleName?.toLowerCase() === \"solid-core\";\n\n const sections = (manifestData?.sections ?? []) as ExplorerSectionDefinition[];\n const fullDocument = documentData?.value ?? {};\n const loadError = !manifestData || !documentData ? (manifestError ?? documentError) : null;\n\n const { nodes: treeNodes, nodeMap } = useMemo(\n () => buildTreeFromDocument(sections, fullDocument),\n [sections, fullDocument],\n );\n\n const scopedRootPath = useMemo(() => {\n // Scope to a specific model definition\n if (modelSingularName) {\n const models = getValueAtJsonPath(fullDocument, \"moduleMetadata.models\");\n if (!Array.isArray(models)) return \"\";\n const modelIndex = models.findIndex((model) => model?.singularName === modelSingularName);\n return modelIndex >= 0 ? `moduleMetadata.models[${modelIndex}]` : \"\";\n }\n // Scope to a specific item in a root-level array (e.g. views, actions, menus)\n if (scopedArrayPath && scopedItemValue) {\n const arr = getValueAtJsonPath(fullDocument, scopedArrayPath);\n if (!Array.isArray(arr)) return \"\";\n const matchField = scopedItemField ?? \"name\";\n const itemIndex = arr.findIndex((item) => item?.[matchField] === scopedItemValue);\n return itemIndex >= 0 ? `${scopedArrayPath}[${itemIndex}]` : \"\";\n }\n return \"\";\n }, [fullDocument, modelSingularName, scopedArrayPath, scopedItemValue, scopedItemField]);\n\n const scopedTreeNodes = useMemo(() => {\n if (!scopedRootPath) return treeNodes;\n const scopedNode = nodeMap.get(scopedRootPath);\n return scopedNode ? [scopedNode] : [];\n }, [nodeMap, scopedRootPath, treeNodes]);\n\n const filteredTreeNodes = useMemo(\n () => filterTreeNodes(scopedTreeNodes, treeFilter),\n [scopedTreeNodes, treeFilter],\n );\n\n const visibleExpandedPaths = useMemo(() => {\n if (!treeFilter.trim()) return expandedPaths;\n const nextExpanded = new Set<string>();\n const visit = (nodesToVisit: ExplorerTreeNode[]) => {\n nodesToVisit.forEach((node) => {\n if (node.children.length) {\n nextExpanded.add(node.path);\n visit(node.children);\n }\n });\n };\n visit(filteredTreeNodes);\n return nextExpanded;\n }, [expandedPaths, filteredTreeNodes, treeFilter]);\n\n const activeNode = activePath ? nodeMap.get(activePath) ?? null : null;\n const activeSection = activePath ? getSectionForPath(sections, activePath) : null;\n const activeValidationIssues = filterIssuesForPath(validationIssues ?? [], activePath);\n const savedSerialized = serializeJson(savedValue);\n const editorSerialized = serializeJson(editorValue);\n const isDirty = editorError ? true : savedSerialized !== editorSerialized;\n const hasMutableChanges = !isReadOnlyExplorer && isDirty;\n const canSave = !isReadOnlyExplorer && isDirty && !editorError;\n const hasValidationFailure = Boolean(editorError) || activeValidationIssues.length > 0;\n const validationSummary = editorError\n ? editorError\n : activeValidationIssues.length\n ? `${activeValidationIssues.length} validation issue${activeValidationIssues.length === 1 ? \"\" : \"s\"}: ${activeValidationIssues[0]?.message ?? \"Review this JSON before saving.\"}`\n : \"\";\n\n useEffect(() => {\n setValidationIssues(documentData?.validation?.issues ?? []);\n }, [documentData?.lastModifiedAt]);\n\n useEffect(() => {\n const handlePointerMove = (event: PointerEvent) => {\n if (!isResizingRef.current || !explorerRef.current) return;\n const bounds = explorerRef.current.getBoundingClientRect();\n const nextWidth = Math.min(Math.max(event.clientX - bounds.left, 220), 520);\n setSidebarWidth(nextWidth);\n };\n\n const handlePointerUp = () => {\n isResizingRef.current = false;\n document.body.style.cursor = \"\";\n document.body.style.userSelect = \"\";\n };\n\n window.addEventListener(\"pointermove\", handlePointerMove);\n window.addEventListener(\"pointerup\", handlePointerUp);\n\n return () => {\n window.removeEventListener(\"pointermove\", handlePointerMove);\n window.removeEventListener(\"pointerup\", handlePointerUp);\n };\n }, []);\n\n useEffect(() => {\n if (!scopedTreeNodes.length) return;\n\n const isPathInsideScope =\n !scopedRootPath ||\n activePath === scopedRootPath ||\n activePath.startsWith(`${scopedRootPath}.`) ||\n activePath.startsWith(`${scopedRootPath}[`);\n\n if (!activePath || !nodeMap.has(activePath) || !isPathInsideScope) {\n const defaultPath = scopedTreeNodes[0].path;\n setActivePath(defaultPath);\n setExpandedPaths(new Set([defaultPath]));\n }\n }, [activePath, nodeMap, scopedRootPath, scopedTreeNodes]);\n\n useEffect(() => {\n if (!activePath) return;\n const nextValue = getValueAtJsonPath(fullDocument, activePath);\n if (nextValue === undefined) return;\n setSavedValue(nextValue);\n setEditorValue(nextValue);\n setEditorError(null);\n setEditorResetToken(`${activePath}:${documentData?.lastModifiedAt ?? \"\"}`);\n }, [activePath, documentData?.lastModifiedAt, fullDocument]);\n\n const showErrorToast = (error: any) => {\n dispatch(showToast({\n severity: \"error\",\n summary: \"Metadata Explorer\",\n detail: extractApiErrorMessage(error),\n life: 4000,\n }));\n };\n\n const toggleExpandedPath = (path: string) => {\n setExpandedPaths((current) => {\n const next = new Set(current);\n if (next.has(path)) {\n next.delete(path);\n } else {\n next.add(path);\n }\n return next;\n });\n };\n\n const selectPath = (path: string) => {\n if (path === activePath) return;\n if (!isReadOnlyExplorer && isDirty) {\n const shouldProceed = window.confirm(\"You have unsaved metadata changes. Switch nodes and discard them?\");\n if (!shouldProceed) return;\n }\n\n const ancestorPaths = getAncestorPaths(nodeMap, path);\n setExpandedPaths((current) => {\n const next = new Set(current);\n ancestorPaths.forEach((ancestorPath) => next.add(ancestorPath));\n return next;\n });\n setActivePath(path);\n };\n\n const handleSidebarResizeStart = () => {\n isResizingRef.current = true;\n document.body.style.cursor = \"col-resize\";\n document.body.style.userSelect = \"none\";\n };\n\n const handleCollapseAll = () => {\n setExpandedPaths(new Set());\n };\n\n const handleFormat = () => {\n editorRef.current?.format();\n };\n\n const buildPatchedDocument = () => {\n const nextDocument = deepCloneJson(fullDocument);\n setValueAtJsonPath(nextDocument, activePath, editorValue);\n return nextDocument;\n };\n\n const buildPatchedSectionValue = () => {\n if (!activeSection) return undefined;\n return getValueAtJsonPath(buildPatchedDocument(), activeSection.jsonPath);\n };\n\n const handleValidate = async () => {\n if (!moduleName || !activePath || !activeSection) return;\n\n if (editorError) {\n setLocalActionSummary(\"Validation blocked because the JSON is currently invalid.\");\n dispatch(showToast({\n severity: \"error\",\n summary: \"Metadata Explorer\",\n detail: \"Fix the invalid JSON before validating.\",\n life: 3500,\n }));\n return;\n }\n\n try {\n const response: any = await validateSection({\n moduleName,\n sectionKey: activeSection.key,\n value: buildPatchedSectionValue(),\n }).unwrap();\n\n setValidationIssues(response?.issues ?? []);\n setLocalActionSummary(response?.valid ? \"Validation passed for the current JSON fragment.\" : \"Validation reported issues for the current JSON fragment.\");\n dispatch(showToast({\n severity: response?.valid ? \"success\" : \"warn\",\n summary: \"Metadata Explorer\",\n detail: response?.valid ? \"Validation passed.\" : \"Validation reported issues.\",\n life: 3000,\n }));\n } catch (error) {\n showErrorToast(error);\n }\n };\n\n const handleSave = async () => {\n if (!moduleName || !activePath || !activeSection) return;\n\n if (editorError) {\n dispatch(showToast({\n severity: \"error\",\n summary: \"Metadata Explorer\",\n detail: \"Fix the invalid JSON before saving.\",\n life: 3500,\n }));\n return;\n }\n\n try {\n const response: any = await updateSection({\n moduleName,\n sectionKey: activeSection.key,\n value: buildPatchedSectionValue(),\n }).unwrap();\n\n setValidationIssues(response?.validation?.issues ?? []);\n setLocalActionSummary(\"JSON fragment saved to the metadata file.\");\n dispatch(showToast({\n severity: \"success\",\n summary: \"Metadata Explorer\",\n detail: \"Metadata saved successfully.\",\n life: 3000,\n }));\n refetchManifest();\n refetchDocument();\n } catch (error) {\n showErrorToast(error);\n }\n };\n\n const handleSeedModule = async () => {\n if (!moduleId) return;\n\n try {\n const response: any = await seedModuleMetadata({ id: moduleId }).unwrap();\n setIsSeedDialogOpen(false);\n setLocalActionSummary(response?.message ?? `Seeded metadata for module ${moduleName}.`);\n dispatch(showToast({\n severity: \"success\",\n summary: \"Metadata Explorer\",\n detail: response?.message ?? \"Module metadata seeded successfully.\",\n life: 3000,\n }));\n refetchManifest();\n refetchDocument();\n } catch (error) {\n showErrorToast(error);\n }\n };\n\n if (!moduleName) {\n return null;\n }\n\n return (\n <div className=\"solid-module-explorer\">\n <div className=\"solid-module-explorer-panel\">\n {loadError && (\n <div className=\"solid-module-explorer-alert\">\n <SolidMessage\n severity=\"error\"\n text={`Unable to load metadata explorer: ${extractApiErrorMessage(loadError)}`}\n className=\"justify-start\"\n />\n </div>\n )}\n\n <div\n ref={explorerRef}\n className=\"solid-module-explorer-workspace\"\n style={{ gridTemplateColumns: `${sidebarWidth}px 8px minmax(0, 1fr)` }}\n >\n <aside className=\"solid-module-explorer-sidebar\">\n <div className=\"solid-module-explorer-sidebar-section solid-module-explorer-sidebar-sections\">\n <div className=\"solid-module-explorer-sidebar-heading\">\n <div className=\"solid-module-explorer-sidebar-heading-main\">\n <div className=\"solid-module-explorer-sidebar-title\">{modelSingularName ? \"Explorer\" : \"Sections\"}</div>\n <SolidTag tone=\"info\">{modelSingularName ? scopedTreeNodes.length : sections.length}</SolidTag>\n </div>\n <button\n type=\"button\"\n className=\"solid-module-explorer-sidebar-action\"\n onClick={handleCollapseAll}\n >\n Collapse all\n </button>\n </div>\n\n <div className=\"solid-module-explorer-sidebar-search\">\n <SolidInput\n value={treeFilter}\n onChange={(event) => setTreeFilter(event.target.value)}\n placeholder=\"Search metadata tree\"\n />\n <div className=\"solid-module-explorer-sidebar-search-icon\">\n <Search size={14} />\n </div>\n </div>\n\n <div className=\"solid-module-explorer-section-list solid-module-explorer-tree-list\">\n <MetadataTree\n nodes={filteredTreeNodes}\n activePath={activePath}\n expandedPaths={visibleExpandedPaths}\n onToggle={toggleExpandedPath}\n onSelect={selectPath}\n />\n </div>\n </div>\n </aside>\n\n <div\n className=\"solid-module-explorer-resizer\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n aria-label=\"Resize metadata navigation panel\"\n onPointerDown={handleSidebarResizeStart}\n />\n\n <section className=\"solid-module-explorer-main\">\n <div className=\"solid-module-explorer-main-header\">\n <div className=\"solid-module-explorer-main-title\">\n <div className=\"solid-module-explorer-main-heading-row\">\n <h4>{activeNode?.label ?? activeSection?.title ?? \"Metadata\"}</h4>\n <p>{activePath || \"Choose a metadata node from the tree.\"}</p>\n </div>\n {hasValidationFailure && (\n <div className=\"solid-module-explorer-inline-validation\" title={validationSummary}>\n {validationSummary}\n </div>\n )}\n {isReadOnlyExplorer && (\n <div className=\"solid-module-explorer-readonly-note\">\n This metadata is browse-only in the explorer.\n </div>\n )}\n </div>\n <div className=\"solid-module-explorer-main-actions\">\n <div className=\"solid-module-explorer-main-meta\">\n {hasMutableChanges && <SolidTag tone=\"warn\">Unsaved changes</SolidTag>}\n {editorError && <SolidTag tone=\"danger\">Invalid JSON</SolidTag>}\n {isReadOnlyExplorer && <SolidTag tone=\"info\">Read only</SolidTag>}\n </div>\n {!isReadOnlyExplorer && (\n <SolidButton\n size=\"sm\"\n leftIcon={<Save size={14} />}\n onClick={handleSave}\n loading={isSavingSection}\n disabled={!canSave}\n >\n Save Section\n </SolidButton>\n )}\n <SolidDropdownMenu>\n <SolidDropdownMenuTrigger asChild>\n <SolidButton\n variant=\"ghost\"\n size=\"sm\"\n className=\"solid-icon-button\"\n aria-label=\"Explorer actions\"\n >\n <Settings size={16} />\n </SolidButton>\n </SolidDropdownMenuTrigger>\n <SolidDropdownMenuContent className=\"solid-module-explorer-actions-menu\">\n {!isReadOnlyExplorer && (\n <SolidDropdownMenuItem onSelect={handleFormat}>\n <div className=\"solid-module-explorer-actions-item\">\n <Wand2 size={14} />\n <span>Format</span>\n </div>\n </SolidDropdownMenuItem>\n )}\n <SolidDropdownMenuItem onSelect={handleValidate} disabled={isValidatingSection}>\n <div className=\"solid-module-explorer-actions-item\">\n <FileSearch size={14} />\n <span>{isValidatingSection ? \"Validating...\" : \"Validate\"}</span>\n </div>\n </SolidDropdownMenuItem>\n <SolidDropdownMenuItem onSelect={() => setIsContextDialogOpen(true)}>\n <div className=\"solid-module-explorer-actions-item\">\n <Settings size={14} />\n <span>Context</span>\n </div>\n </SolidDropdownMenuItem>\n {allowSeed && (\n <SolidDropdownMenuItem onSelect={() => setIsSeedDialogOpen(true)} disabled={!moduleId || isSeedingModule}>\n <div className=\"solid-module-explorer-actions-item\">\n <DatabaseZap size={14} />\n <span>{isSeedingModule ? \"Seeding...\" : \"Seed\"}</span>\n </div>\n </SolidDropdownMenuItem>\n )}\n </SolidDropdownMenuContent>\n </SolidDropdownMenu>\n </div>\n </div>\n\n {/* {!scopedArrayPath && ( */}\n <div className=\"solid-module-explorer-field-name-note\" role=\"note\">\n <strong>Important:</strong>{\" \"}\n Do not rename a field directly. To change a field name, delete the existing field, save the section,\n validate the generated code, and then create a new field with the required name. Direct renaming can\n cause serious metadata and code generation issues.\n </div>\n {/* )} */}\n\n <div className=\"solid-module-explorer-editor-wrap\">\n <div className=\"solid-module-explorer-editor-shell\">\n {isDocumentLoading ? (\n <div style={{ padding: \"1rem\" }} className=\"solid-module-explorer-empty\">\n Loading metadata JSON...\n </div>\n ) : (\n <JsonEditorSurface\n ref={editorRef}\n value={savedValue}\n resetToken={editorResetToken}\n readOnly={isReadOnlyExplorer}\n onValueChange={setEditorValue}\n onErrorChange={setEditorError}\n />\n )}\n </div>\n </div>\n </section>\n </div>\n </div>\n\n <SolidDialog\n open={isContextDialogOpen}\n onOpenChange={setIsContextDialogOpen}\n header=\"Context\"\n contentClassName=\"solid-module-explorer-context-dialog\"\n >\n <SolidDialogSeparator />\n <SolidDialogBody>\n <div className=\"solid-module-explorer-context-dialog-body\">\n <div className=\"solid-module-explorer-context-dialog-header\">\n <div className=\"solid-module-explorer-context-dialog-title\">\n {activeNode?.label ?? \"Metadata node\"}\n </div>\n <div className=\"solid-module-explorer-context-dialog-meta\">\n {activeNode?.sectionTitle && <SolidTag tone=\"info\">{activeNode.sectionTitle}</SolidTag>}\n </div>\n </div>\n\n <div className=\"solid-module-explorer-context-grid\">\n <div className=\"solid-module-explorer-context-row\">\n <div className=\"solid-module-explorer-context-label\">JSON Path</div>\n <div className=\"solid-module-explorer-context-value\">{activePath || \"-\"}</div>\n </div>\n <div className=\"solid-module-explorer-context-row\">\n <div className=\"solid-module-explorer-context-label\">File</div>\n <div className=\"solid-module-explorer-context-value\">{manifestData?.filePath ?? \"-\"}</div>\n </div>\n {localActionSummary && (\n <div className=\"solid-module-explorer-context-row\">\n <div className=\"solid-module-explorer-context-label\">Last Action</div>\n <div className=\"solid-module-explorer-context-value\">{localActionSummary}</div>\n </div>\n )}\n </div>\n\n <div className=\"solid-module-explorer-context-note\">\n Clicking any branch or leaf in the tree opens that exact JSON fragment on the right.\n </div>\n </div>\n </SolidDialogBody>\n </SolidDialog>\n\n <SolidDialog\n open={isSeedDialogOpen}\n onOpenChange={setIsSeedDialogOpen}\n contentClassName=\"solid-module-explorer-seed-dialog\"\n >\n <SolidDialogHeader>\n <SolidDialogTitle>Seed Module Metadata</SolidDialogTitle>\n </SolidDialogHeader>\n <SolidDialogSeparator />\n <SolidDialogBody>\n <div className=\"solid-module-explorer-seed-dialog-body\">\n <p>\n Re-seed metadata for <strong>{moduleName}</strong> from its JSON file?\n </p>\n <p className=\"solid-module-explorer-seed-dialog-note\">\n This only re-runs metadata seeding for the current module and refreshes database metadata from the module JSON.\n </p>\n </div>\n </SolidDialogBody>\n <SolidDialogFooter>\n <SolidButton variant=\"outline\" size=\"sm\" onClick={() => setIsSeedDialogOpen(false)} disabled={isSeedingModule}>\n Cancel\n </SolidButton>\n <SolidButton size=\"sm\" onClick={handleSeedModule} loading={isSeedingModule} disabled={!moduleId}>\n Seed\n </SolidButton>\n </SolidDialogFooter>\n </SolidDialog>\n </div>\n );\n}\n"]}
|
|
@@ -904,6 +904,15 @@ export function ModuleMetadataExplorer({
|
|
|
904
904
|
</div>
|
|
905
905
|
</div>
|
|
906
906
|
|
|
907
|
+
{/* {!scopedArrayPath && ( */}
|
|
908
|
+
<div className="solid-module-explorer-field-name-note" role="note">
|
|
909
|
+
<strong>Important:</strong>{" "}
|
|
910
|
+
Do not rename a field directly. To change a field name, delete the existing field, save the section,
|
|
911
|
+
validate the generated code, and then create a new field with the required name. Direct renaming can
|
|
912
|
+
cause serious metadata and code generation issues.
|
|
913
|
+
</div>
|
|
914
|
+
{/* )} */}
|
|
915
|
+
|
|
907
916
|
<div className="solid-module-explorer-editor-wrap">
|
|
908
917
|
<div className="solid-module-explorer-editor-shell">
|
|
909
918
|
{isDocumentLoading ? (
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolidTreeView.d.ts","sourceRoot":"","sources":["../../../../src/components/core/tree/SolidTreeView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SolidTreeView.d.ts","sourceRoot":"","sources":["../../../../src/components/core/tree/SolidTreeView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAC;AA2Cf,KAAK,mBAAmB,GAAG;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,YAAY,CAAC,EAAE,GAAG,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,CAAC,MAAM,EAAE;QACpB,uBAAuB,CAAC,EAAE,GAAG,CAAC;QAC9B,gBAAgB,CAAC,EAAE,GAAG,CAAC;QACvB,sBAAsB,CAAC,EAAE,GAAG,CAAC;QAC7B,2BAA2B,CAAC,EAAE,GAAG,CAAC;KACnC,KAAK,IAAI,CAAC;IACX,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7D,OAAO,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IACpE,eAAe,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,MAAM;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC;QACtB,OAAO,EAAE,GAAG,CAAC;QACb,gBAAgB,EAAE,GAAG,CAAC;QACtB,QAAQ,EAAE,GAAG,EAAE,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH,CAAC;AA0CF,eAAO,MAAM,aAAa,iGA+kExB,CAAC"}
|