@open-mercato/ui 0.6.6-develop.6465.1.019f0fb26f → 0.6.6-develop.6471.1.9ab5bdd79a
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/ai/AiChat.js +3 -3
- package/dist/ai/AiChat.js.map +2 -2
- package/dist/backend/CrudForm.js +19 -17
- package/dist/backend/CrudForm.js.map +2 -2
- package/dist/backend/DataTable.js +5 -5
- package/dist/backend/DataTable.js.map +2 -2
- package/dist/backend/JsonDisplay.js +3 -1
- package/dist/backend/JsonDisplay.js.map +2 -2
- package/dist/backend/confirm-dialog/useConfirmDialog.js +3 -3
- package/dist/backend/confirm-dialog/useConfirmDialog.js.map +2 -2
- package/dist/backend/dashboard/DashboardScreen.js +8 -6
- package/dist/backend/dashboard/DashboardScreen.js.map +2 -2
- package/dist/backend/dashboard/widgetRegistry.js +3 -1
- package/dist/backend/dashboard/widgetRegistry.js.map +2 -2
- package/dist/backend/detail/CustomDataSection.js +4 -2
- package/dist/backend/detail/CustomDataSection.js.map +2 -2
- package/dist/backend/detail/InlineEditors.js +3 -1
- package/dist/backend/detail/InlineEditors.js.map +2 -2
- package/dist/backend/detail/TagsSection.js +3 -1
- package/dist/backend/detail/TagsSection.js.map +2 -2
- package/dist/backend/injection/InjectionSpot.js +10 -8
- package/dist/backend/injection/InjectionSpot.js.map +2 -2
- package/dist/backend/injection/eventBridge.js +3 -1
- package/dist/backend/injection/eventBridge.js.map +2 -2
- package/dist/backend/injection/useGuardedMutation.js +3 -1
- package/dist/backend/injection/useGuardedMutation.js.map +2 -2
- package/dist/backend/injection/useInjectionDataWidgets.js +3 -1
- package/dist/backend/injection/useInjectionDataWidgets.js.map +2 -2
- package/dist/backend/injection/useRegisteredComponent.js +6 -9
- package/dist/backend/injection/useRegisteredComponent.js.map +2 -2
- package/dist/backend/injection/widgetRegistry.js +3 -1
- package/dist/backend/injection/widgetRegistry.js.map +2 -2
- package/dist/backend/inputs/LookupSelect.js +3 -1
- package/dist/backend/inputs/LookupSelect.js.map +2 -2
- package/dist/backend/notifications/NotificationDispatcher.js +4 -2
- package/dist/backend/notifications/NotificationDispatcher.js.map +2 -2
- package/dist/backend/sidebar/SidebarCustomizationEditor.js +7 -5
- package/dist/backend/sidebar/SidebarCustomizationEditor.js.map +2 -2
- package/dist/backend/utils/api.js +3 -1
- package/dist/backend/utils/api.js.map +2 -2
- package/dist/backend/utils/bulkDelete.js +4 -2
- package/dist/backend/utils/bulkDelete.js.map +2 -2
- package/dist/backend/version-history/VersionHistoryPanel.js +4 -2
- package/dist/backend/version-history/VersionHistoryPanel.js.map +2 -2
- package/dist/portal/hooks/usePortalDashboardWidgets.js +3 -1
- package/dist/portal/hooks/usePortalDashboardWidgets.js.map +2 -2
- package/dist/portal/hooks/usePortalEventBridge.js +3 -1
- package/dist/portal/hooks/usePortalEventBridge.js.map +2 -2
- package/dist/primitives/Notice.js +3 -3
- package/dist/primitives/Notice.js.map +2 -2
- package/dist/theme/ThemeProvider.js +4 -2
- package/dist/theme/ThemeProvider.js.map +2 -2
- package/package.json +3 -3
- package/src/ai/AiChat.tsx +4 -4
- package/src/backend/CrudForm.tsx +20 -17
- package/src/backend/DataTable.tsx +6 -9
- package/src/backend/JsonDisplay.tsx +4 -1
- package/src/backend/__tests__/component-replacement.test.tsx +1 -1
- package/src/backend/confirm-dialog/useConfirmDialog.tsx +4 -3
- package/src/backend/dashboard/DashboardScreen.tsx +9 -6
- package/src/backend/dashboard/widgetRegistry.ts +4 -1
- package/src/backend/detail/CustomDataSection.tsx +5 -2
- package/src/backend/detail/InlineEditors.tsx +4 -1
- package/src/backend/detail/TagsSection.tsx +4 -1
- package/src/backend/injection/InjectionSpot.tsx +11 -8
- package/src/backend/injection/eventBridge.ts +4 -1
- package/src/backend/injection/useGuardedMutation.ts +4 -1
- package/src/backend/injection/useInjectionDataWidgets.ts +4 -1
- package/src/backend/injection/useRegisteredComponent.tsx +7 -9
- package/src/backend/injection/widgetRegistry.ts +4 -1
- package/src/backend/inputs/LookupSelect.tsx +4 -1
- package/src/backend/notifications/NotificationDispatcher.ts +5 -2
- package/src/backend/sidebar/SidebarCustomizationEditor.tsx +8 -5
- package/src/backend/utils/__tests__/bulkDelete.test.ts +29 -23
- package/src/backend/utils/api.ts +4 -2
- package/src/backend/utils/bulkDelete.ts +5 -2
- package/src/backend/version-history/VersionHistoryPanel.tsx +5 -2
- package/src/portal/hooks/usePortalDashboardWidgets.ts +4 -1
- package/src/portal/hooks/usePortalEventBridge.ts +4 -1
- package/src/primitives/Notice.tsx +4 -4
- package/src/theme/ThemeProvider.tsx +5 -2
package/dist/backend/CrudForm.js
CHANGED
|
@@ -91,6 +91,7 @@ import { dispatchBackendMutationError } from "./injection/mutationEvents.js";
|
|
|
91
91
|
import { VersionHistoryAction } from "./version-history/VersionHistoryAction.js";
|
|
92
92
|
import { parseBooleanWithDefault } from "@open-mercato/shared/lib/boolean";
|
|
93
93
|
import { cn } from "@open-mercato/shared/lib/utils";
|
|
94
|
+
import { createLogger } from "@open-mercato/shared/lib/logger";
|
|
94
95
|
import { useInjectionDataWidgets } from "./injection/useInjectionDataWidgets.js";
|
|
95
96
|
import { CollapsibleGroup } from "./crud/CollapsibleGroup.js";
|
|
96
97
|
import { SortableGroupHandleProvider } from "./crud/SortableGroupHandle.js";
|
|
@@ -101,6 +102,7 @@ import { evaluateInjectedVisibility } from "./injection/visibility-utils.js";
|
|
|
101
102
|
import { ComponentReplacementHandles } from "@open-mercato/shared/modules/widgets/component-registry";
|
|
102
103
|
import { RichEditor } from "../primitives/rich-editor.js";
|
|
103
104
|
import MarkdownField from "./inputs/MarkdownField.js";
|
|
105
|
+
const logger = createLogger("ui").child({ component: "CrudForm" });
|
|
104
106
|
const EMPTY_OPTIONS = [];
|
|
105
107
|
const SELECT_CLEAR_SENTINEL = "__crudform_select_clear__";
|
|
106
108
|
const FOCUSABLE_SELECTOR = '[data-crud-focus-target], input:not([type="hidden"]):not([disabled]), textarea:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
|
|
@@ -705,7 +707,7 @@ function CrudForm({
|
|
|
705
707
|
Object.entries(transformed).map(([key, value]) => [key, String(value)])
|
|
706
708
|
);
|
|
707
709
|
} catch (err) {
|
|
708
|
-
|
|
710
|
+
logger.error("Error in transformValidation", { err });
|
|
709
711
|
return fieldErrors;
|
|
710
712
|
}
|
|
711
713
|
},
|
|
@@ -777,7 +779,7 @@ function CrudForm({
|
|
|
777
779
|
void triggerInjectionEvent("onAppEvent", valuesRef.current, injectionContextRef.current, {
|
|
778
780
|
appEvent: customEvent.detail
|
|
779
781
|
}).catch((err) => {
|
|
780
|
-
|
|
782
|
+
logger.error("Error in onAppEvent", { err });
|
|
781
783
|
});
|
|
782
784
|
};
|
|
783
785
|
window.addEventListener("om:event", handleEvent);
|
|
@@ -791,7 +793,7 @@ function CrudForm({
|
|
|
791
793
|
void triggerInjectionEvent("onVisibilityChange", valuesRef.current, injectionContextRef.current, {
|
|
792
794
|
visible: document.visibilityState === "visible"
|
|
793
795
|
}).catch((err) => {
|
|
794
|
-
|
|
796
|
+
logger.error("Error in onVisibilityChange", { err });
|
|
795
797
|
});
|
|
796
798
|
};
|
|
797
799
|
document.addEventListener("visibilitychange", emitVisibility);
|
|
@@ -899,7 +901,7 @@ function CrudForm({
|
|
|
899
901
|
}
|
|
900
902
|
injectionRequestHeaders = result.requestHeaders;
|
|
901
903
|
} catch (err) {
|
|
902
|
-
|
|
904
|
+
logger.error("Error in onBeforeDelete", { err });
|
|
903
905
|
flash(t("ui.forms.flash.saveBlocked", "Save blocked by validation"), "error");
|
|
904
906
|
return;
|
|
905
907
|
}
|
|
@@ -909,7 +911,7 @@ function CrudForm({
|
|
|
909
911
|
try {
|
|
910
912
|
await triggerInjectionEvent("onDelete", deletePayload, injectionContext);
|
|
911
913
|
} catch (err) {
|
|
912
|
-
|
|
914
|
+
logger.error("Error in onDelete", { err });
|
|
913
915
|
flash(t("ui.forms.flash.saveBlocked", "Save blocked by validation"), "error");
|
|
914
916
|
return;
|
|
915
917
|
}
|
|
@@ -930,7 +932,7 @@ function CrudForm({
|
|
|
930
932
|
try {
|
|
931
933
|
await triggerInjectionEvent("onAfterDelete", deletePayload, injectionContext);
|
|
932
934
|
} catch (err) {
|
|
933
|
-
|
|
935
|
+
logger.error("Error in onAfterDelete", { err });
|
|
934
936
|
}
|
|
935
937
|
}
|
|
936
938
|
try {
|
|
@@ -945,7 +947,7 @@ function CrudForm({
|
|
|
945
947
|
try {
|
|
946
948
|
await triggerInjectionEvent("onDeleteError", deletePayload, injectionContext, { error: err });
|
|
947
949
|
} catch (hookError) {
|
|
948
|
-
|
|
950
|
+
logger.error("Error in onDeleteError", { err: hookError });
|
|
949
951
|
}
|
|
950
952
|
}
|
|
951
953
|
try {
|
|
@@ -1480,7 +1482,7 @@ function CrudForm({
|
|
|
1480
1482
|
const targetIndex = cloned.findIndex((group) => group.id === definition.group);
|
|
1481
1483
|
const index = targetIndex >= 0 ? targetIndex : fallbackIndex;
|
|
1482
1484
|
if (targetIndex < 0 && process.env.NODE_ENV !== "production") {
|
|
1483
|
-
|
|
1485
|
+
logger.warn("Injected field targets a group that does not exist; appended to last group", { fieldId: definition.id, group: definition.group });
|
|
1484
1486
|
}
|
|
1485
1487
|
if (index < 0) continue;
|
|
1486
1488
|
const fieldEntries = cloned[index].fields ?? [];
|
|
@@ -1787,7 +1789,7 @@ function CrudForm({
|
|
|
1787
1789
|
flash(message.text, message.severity);
|
|
1788
1790
|
}
|
|
1789
1791
|
}).catch((err) => {
|
|
1790
|
-
|
|
1792
|
+
logger.error("Error in onFieldChange", { err });
|
|
1791
1793
|
});
|
|
1792
1794
|
}, [embedded, extendedInjectionEventsEnabled, flash, t, trackDirtyWhenEmbedded, translateValidationMessage, triggerInjectionEvent, updateEditedFieldMarker]);
|
|
1793
1795
|
const onBlurRequest = React.useCallback((fieldId) => {
|
|
@@ -1886,7 +1888,7 @@ function CrudForm({
|
|
|
1886
1888
|
dirtyBaselineValuesRef.current = { ...transformed };
|
|
1887
1889
|
setValues(transformed);
|
|
1888
1890
|
} catch (err) {
|
|
1889
|
-
|
|
1891
|
+
logger.error("Error in transformDisplayData", { err });
|
|
1890
1892
|
}
|
|
1891
1893
|
};
|
|
1892
1894
|
void run();
|
|
@@ -1999,7 +2001,7 @@ function CrudForm({
|
|
|
1999
2001
|
}
|
|
2000
2002
|
if (Object.keys(requiredErrors).length) {
|
|
2001
2003
|
if (process.env.NODE_ENV !== "production") {
|
|
2002
|
-
|
|
2004
|
+
logger.debug("Required field errors prevented submit", { requiredErrors });
|
|
2003
2005
|
}
|
|
2004
2006
|
const transformedErrors = await transformValidationErrors(requiredErrors);
|
|
2005
2007
|
setErrors(transformedErrors);
|
|
@@ -2068,7 +2070,7 @@ function CrudForm({
|
|
|
2068
2070
|
if (path) fieldErrors[path] = issue.message;
|
|
2069
2071
|
});
|
|
2070
2072
|
if (process.env.NODE_ENV !== "production") {
|
|
2071
|
-
|
|
2073
|
+
logger.debug("Schema validation failed", { issues: res.error.issues });
|
|
2072
2074
|
}
|
|
2073
2075
|
const transformedErrors = await transformValidationErrors(fieldErrors);
|
|
2074
2076
|
setErrors(translateValidationErrors(transformedErrors));
|
|
@@ -2102,7 +2104,7 @@ function CrudForm({
|
|
|
2102
2104
|
}
|
|
2103
2105
|
}
|
|
2104
2106
|
} catch (err) {
|
|
2105
|
-
|
|
2107
|
+
logger.error("Error in transformFormData", { err });
|
|
2106
2108
|
}
|
|
2107
2109
|
}
|
|
2108
2110
|
let injectionRequestHeaders;
|
|
@@ -2138,7 +2140,7 @@ function CrudForm({
|
|
|
2138
2140
|
}
|
|
2139
2141
|
injectionRequestHeaders = result.requestHeaders;
|
|
2140
2142
|
} catch (err) {
|
|
2141
|
-
|
|
2143
|
+
logger.error("Error in onBeforeSave", { err });
|
|
2142
2144
|
flash(t("ui.forms.flash.saveBlocked", "Save blocked by validation"), "error");
|
|
2143
2145
|
setPending(false);
|
|
2144
2146
|
return;
|
|
@@ -2160,7 +2162,7 @@ function CrudForm({
|
|
|
2160
2162
|
try {
|
|
2161
2163
|
await triggerInjectionEvent("onSave", submitValues, injectionContext);
|
|
2162
2164
|
} catch (err) {
|
|
2163
|
-
|
|
2165
|
+
logger.error("Error in onSave", { err });
|
|
2164
2166
|
flash(t("ui.forms.flash.saveBlocked", "Save blocked by validation"), "error");
|
|
2165
2167
|
setPending(false);
|
|
2166
2168
|
return;
|
|
@@ -2184,7 +2186,7 @@ function CrudForm({
|
|
|
2184
2186
|
try {
|
|
2185
2187
|
await triggerInjectionEvent("onAfterSave", submitValues, injectionContext);
|
|
2186
2188
|
} catch (err) {
|
|
2187
|
-
|
|
2189
|
+
logger.error("Error in onAfterSave", { err });
|
|
2188
2190
|
}
|
|
2189
2191
|
}
|
|
2190
2192
|
markFormAsClean(valuesRef.current);
|
|
@@ -2222,7 +2224,7 @@ function CrudForm({
|
|
|
2222
2224
|
const transformedErrors = await transformValidationErrors(combinedFieldErrors);
|
|
2223
2225
|
setErrors(translateValidationErrors(transformedErrors));
|
|
2224
2226
|
if (process.env.NODE_ENV !== "production") {
|
|
2225
|
-
|
|
2227
|
+
logger.debug("Submission failed with field errors", { fieldErrors: transformedErrors });
|
|
2226
2228
|
}
|
|
2227
2229
|
}
|
|
2228
2230
|
const optimisticLockConflict = extractOptimisticLockConflict(err);
|