@openg2p/registry-widgets 0.1.5 → 0.1.7
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/assets/index.d.ts +19 -0
- package/dist/assets/index.d.ts.map +1 -0
- package/dist/components/FilePreviewModal.d.ts.map +1 -1
- package/dist/components/SectionBuilder/JSONEditorPanel.d.ts.map +1 -1
- package/dist/components/SectionBuilder/VisualBuilderPanel.d.ts.map +1 -1
- package/dist/components/SectionRenderer.d.ts +21 -2
- package/dist/components/SectionRenderer.d.ts.map +1 -1
- package/dist/components/SectionsContainer.d.ts +22 -2
- package/dist/components/SectionsContainer.d.ts.map +1 -1
- package/dist/hooks/useBaseWidget.d.ts.map +1 -1
- package/dist/index.d.ts +44 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +1592 -1040
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1590 -1038
- package/dist/index.js.map +1 -1
- package/dist/utils/buildSectionChanges.d.ts +11 -0
- package/dist/utils/buildSectionChanges.d.ts.map +1 -0
- package/dist/utils/sectionValidate.d.ts +5 -0
- package/dist/utils/sectionValidate.d.ts.map +1 -0
- package/dist/widgets/FileInputWidget.d.ts.map +1 -1
- package/dist/widgets/ProfileWidget.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createSlice, configureStore } from '@reduxjs/toolkit';
|
|
2
|
-
import React, { useContext,
|
|
3
|
-
import { useDispatch, useSelector,
|
|
2
|
+
import React, { useContext, createContext, useMemo, useEffect, useRef, useCallback, useState } from 'react';
|
|
3
|
+
import { Provider, useDispatch, useSelector, useStore } from 'react-redux';
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { createPortal } from 'react-dom';
|
|
6
6
|
import { JsonEditor } from 'json-edit-react';
|
|
@@ -919,700 +919,6 @@ const useWidgetEventBus = () => {
|
|
|
919
919
|
return useContext(WidgetEventBusContext);
|
|
920
920
|
};
|
|
921
921
|
|
|
922
|
-
// Define stable empty arrays to avoid selector reference issues
|
|
923
|
-
const EMPTY_ERRORS = [];
|
|
924
|
-
const EMPTY_DATA_SOURCE$1 = [];
|
|
925
|
-
const useBaseWidget = (options) => {
|
|
926
|
-
const { config, dataSourceRequestHandler, schemaData, onValueChange } = options;
|
|
927
|
-
const dispatch = useDispatch();
|
|
928
|
-
const eventBus = useWidgetEventBus();
|
|
929
|
-
const widgetId = config['widget-id'];
|
|
930
|
-
// Get state from Redux
|
|
931
|
-
const values = useSelector((state) => state.widget.values);
|
|
932
|
-
const errors = useSelector((state) => state.widget.errors[widgetId] ?? EMPTY_ERRORS);
|
|
933
|
-
const touched = useSelector((state) => state.widget.touched[widgetId] || false);
|
|
934
|
-
const loading = useSelector((state) => state.widget.loading[widgetId] || false);
|
|
935
|
-
const dataSourceOptions = useSelector((state) => state.widget.dataSources[widgetId] ?? EMPTY_DATA_SOURCE$1);
|
|
936
|
-
// Skip value handling for layout widgets (they don't store data values)
|
|
937
|
-
// Infer layout from widget-type
|
|
938
|
-
const isLayoutWidget = config['widget-type'] === 'layout';
|
|
939
|
-
// Track if user has explicitly set a value to prevent default from overwriting
|
|
940
|
-
const userHasSetValueRef = useRef(false);
|
|
941
|
-
// Use ref for values to avoid stale closures in handleChange
|
|
942
|
-
const valuesRef = useRef(values);
|
|
943
|
-
useEffect(() => {
|
|
944
|
-
valuesRef.current = values;
|
|
945
|
-
}, [values]);
|
|
946
|
-
// Track last dispatched value to prevent duplicate dispatches
|
|
947
|
-
const lastDispatchedValueRef = useRef(null);
|
|
948
|
-
// Get current value
|
|
949
|
-
const currentValue = useMemo(() => {
|
|
950
|
-
if (isLayoutWidget) {
|
|
951
|
-
return undefined; // Layout widgets don't have values
|
|
952
|
-
}
|
|
953
|
-
// Helper to extract displayable value from object (especially geo hierarchy objects)
|
|
954
|
-
const extractValueFromObject = (obj) => {
|
|
955
|
-
if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {
|
|
956
|
-
return obj;
|
|
957
|
-
}
|
|
958
|
-
// Check for geo hierarchy structure first
|
|
959
|
-
if ('geo_code_hierarchy_json' in obj || 'geo_lowest_level_value_id' in obj) {
|
|
960
|
-
if ('geo_lowest_level_value_id' in obj) {
|
|
961
|
-
return obj.geo_lowest_level_value_id;
|
|
962
|
-
}
|
|
963
|
-
// If it's a geo hierarchy object but no extractable ID, return undefined to avoid rendering object
|
|
964
|
-
return undefined;
|
|
965
|
-
}
|
|
966
|
-
// Try common value fields
|
|
967
|
-
if ('value' in obj) {
|
|
968
|
-
return obj.value;
|
|
969
|
-
}
|
|
970
|
-
if ('id' in obj) {
|
|
971
|
-
return obj.id;
|
|
972
|
-
}
|
|
973
|
-
if ('label' in obj) {
|
|
974
|
-
return obj.label;
|
|
975
|
-
}
|
|
976
|
-
if ('name' in obj) {
|
|
977
|
-
return obj.name;
|
|
978
|
-
}
|
|
979
|
-
// If no extractable value found, return undefined to avoid rendering object as React child
|
|
980
|
-
// This prevents "Objects are not valid as a React child" errors
|
|
981
|
-
return undefined;
|
|
982
|
-
};
|
|
983
|
-
// Try to get value from widgetId first (this should have the actual selected value)
|
|
984
|
-
// For geo widgets with dataPath, widgetId stores the actual ID, while dataPath stores the hierarchy object
|
|
985
|
-
let value = values[widgetId];
|
|
986
|
-
// Extract value if it's an object (handles geo hierarchy objects stored in widgetId)
|
|
987
|
-
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
988
|
-
value = extractValueFromObject(value);
|
|
989
|
-
}
|
|
990
|
-
// If widgetId doesn't have a value, try dataPath
|
|
991
|
-
if (value === undefined && config['widget-data-path']) {
|
|
992
|
-
value = getWidgetValue(values, config['widget-data-path'], widgetId);
|
|
993
|
-
// Extract value if it's an object (handles geo hierarchy objects from dataPath)
|
|
994
|
-
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
995
|
-
value = extractValueFromObject(value);
|
|
996
|
-
}
|
|
997
|
-
}
|
|
998
|
-
// If value is still undefined and user has set a value, try reading from widgetId as backup
|
|
999
|
-
// This handles cases where dataPath lookup might fail temporarily
|
|
1000
|
-
if (value === undefined && userHasSetValueRef.current && values[widgetId] !== undefined) {
|
|
1001
|
-
value = values[widgetId];
|
|
1002
|
-
// Extract value if it's an object (handles geo hierarchy objects)
|
|
1003
|
-
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
1004
|
-
value = extractValueFromObject(value);
|
|
1005
|
-
}
|
|
1006
|
-
}
|
|
1007
|
-
// Final safety check: if value is still an object, extract displayable value
|
|
1008
|
-
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
1009
|
-
value = extractValueFromObject(value);
|
|
1010
|
-
}
|
|
1011
|
-
// If user has explicitly set a value, always return it (even if undefined/null)
|
|
1012
|
-
// This prevents the default from overwriting user selections
|
|
1013
|
-
if (userHasSetValueRef.current) {
|
|
1014
|
-
return value;
|
|
1015
|
-
}
|
|
1016
|
-
// Only fall back to default if user hasn't set a value yet
|
|
1017
|
-
// But check if value is explicitly null (user cleared it) vs undefined (never set)
|
|
1018
|
-
if (value === null) {
|
|
1019
|
-
return null; // User explicitly cleared it, don't use default
|
|
1020
|
-
}
|
|
1021
|
-
return value !== undefined ? value : config['widget-data-default'];
|
|
1022
|
-
}, [values, config, widgetId, isLayoutWidget]);
|
|
1023
|
-
// Initialize default value only once on mount (skip for layout widgets)
|
|
1024
|
-
useEffect(() => {
|
|
1025
|
-
if (isLayoutWidget) {
|
|
1026
|
-
return;
|
|
1027
|
-
}
|
|
1028
|
-
// Only initialize default if value is undefined and user hasn't set a value yet
|
|
1029
|
-
if (!userHasSetValueRef.current && config['widget-data-default'] !== undefined && currentValue === undefined) {
|
|
1030
|
-
handleChange(config['widget-data-default'], false);
|
|
1031
|
-
}
|
|
1032
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1033
|
-
}, [isLayoutWidget]); // Only run once on mount
|
|
1034
|
-
// Handle value change
|
|
1035
|
-
// CRITICAL: Don't include 'values' in dependency array - it causes the callback to be recreated
|
|
1036
|
-
// every time values change, which can lead to stale closures and double dispatches
|
|
1037
|
-
const handleChange = useCallback((newValue, validate = true) => {
|
|
1038
|
-
// Use valuesRef to get the latest values, not the stale closure value
|
|
1039
|
-
const currentValues = valuesRef.current;
|
|
1040
|
-
const currentValue = currentValues[widgetId] || getWidgetValue(currentValues, config['widget-data-path'], widgetId);
|
|
1041
|
-
// CRITICAL: Prevent setting the same value (avoids unnecessary dispatches and potential loops)
|
|
1042
|
-
if (currentValue === newValue) {
|
|
1043
|
-
return;
|
|
1044
|
-
}
|
|
1045
|
-
// Mark that user has set a value (unless this is the default initialization)
|
|
1046
|
-
if (newValue !== config['widget-data-default'] || userHasSetValueRef.current) {
|
|
1047
|
-
userHasSetValueRef.current = true;
|
|
1048
|
-
}
|
|
1049
|
-
// CRITICAL FIX: If there's no dataPath, just set the value directly
|
|
1050
|
-
// If there's a dataPath, we need to update both the widgetId and the dataPath
|
|
1051
|
-
if (!config['widget-data-path']) {
|
|
1052
|
-
// No dataPath: just set the value directly by widgetId
|
|
1053
|
-
// CRITICAL: Check if we just dispatched this value to prevent duplicate dispatches
|
|
1054
|
-
if (lastDispatchedValueRef.current === newValue) {
|
|
1055
|
-
return;
|
|
1056
|
-
}
|
|
1057
|
-
lastDispatchedValueRef.current = newValue;
|
|
1058
|
-
dispatch(setValue({ widgetId, value: newValue }));
|
|
1059
|
-
}
|
|
1060
|
-
else {
|
|
1061
|
-
// Has dataPath: update both widgetId and dataPath
|
|
1062
|
-
// CRITICAL: Create updated values object with newValue already set
|
|
1063
|
-
// This prevents setWidgetValue from reading stale values
|
|
1064
|
-
const currentValuesWithUpdate = {
|
|
1065
|
-
...valuesRef.current,
|
|
1066
|
-
[widgetId]: newValue, // Ensure widgetId has the new value
|
|
1067
|
-
};
|
|
1068
|
-
const updatedValues = setWidgetValue(currentValuesWithUpdate, config['widget-data-path'], widgetId, newValue);
|
|
1069
|
-
// setWidgetValue returns the complete updated structure with all existing data preserved
|
|
1070
|
-
// Use setValues to update the entire state with deep merge
|
|
1071
|
-
dispatch(setValues(updatedValues));
|
|
1072
|
-
}
|
|
1073
|
-
// Validate if needed
|
|
1074
|
-
if (validate) {
|
|
1075
|
-
const validationErrors = validateWidget(newValue, config['widget-data-validation'], config['widget-required']);
|
|
1076
|
-
dispatch(setError({ widgetId, errors: validationErrors }));
|
|
1077
|
-
}
|
|
1078
|
-
// Call custom onChange if provided
|
|
1079
|
-
if (onValueChange) {
|
|
1080
|
-
onValueChange(widgetId, newValue);
|
|
1081
|
-
}
|
|
1082
|
-
// Publish widget:change event
|
|
1083
|
-
// Skip publishing for last-level geo widgets (no child widgets waiting)
|
|
1084
|
-
const geoConfig = config['widget-geo-config'];
|
|
1085
|
-
const isLastLevelGeo = geoConfig?.isLastLevel === true;
|
|
1086
|
-
if (eventBus && !isLastLevelGeo) {
|
|
1087
|
-
eventBus.publish({
|
|
1088
|
-
type: 'widget:change',
|
|
1089
|
-
widgetId,
|
|
1090
|
-
value: newValue,
|
|
1091
|
-
timestamp: Date.now(),
|
|
1092
|
-
});
|
|
1093
|
-
}
|
|
1094
|
-
}, [config, widgetId, dispatch, onValueChange, eventBus] // Removed 'values' to prevent stale closures
|
|
1095
|
-
);
|
|
1096
|
-
// Handle blur
|
|
1097
|
-
const handleBlur = useCallback(() => {
|
|
1098
|
-
dispatch(setTouched({ widgetId, touched: true }));
|
|
1099
|
-
// Validate on blur
|
|
1100
|
-
const validationErrors = validateWidget(currentValue, config['widget-data-validation'], config['widget-required']);
|
|
1101
|
-
dispatch(setError({ widgetId, errors: validationErrors }));
|
|
1102
|
-
// Publish widget:blur event
|
|
1103
|
-
if (eventBus) {
|
|
1104
|
-
eventBus.publish({
|
|
1105
|
-
type: 'widget:blur',
|
|
1106
|
-
widgetId,
|
|
1107
|
-
value: currentValue,
|
|
1108
|
-
timestamp: Date.now(),
|
|
1109
|
-
});
|
|
1110
|
-
}
|
|
1111
|
-
}, [currentValue, config, widgetId, dispatch, eventBus]);
|
|
1112
|
-
// Get field value helper
|
|
1113
|
-
const getFieldValue = useCallback((path) => {
|
|
1114
|
-
return getWidgetValue(values, path, '');
|
|
1115
|
-
}, [values]);
|
|
1116
|
-
// Conditional visibility and enablement
|
|
1117
|
-
const isVisible = useMemo(() => {
|
|
1118
|
-
// Layout widgets are always visible unless explicitly hidden
|
|
1119
|
-
if (isLayoutWidget && !config['widget-data-options']?.condition) {
|
|
1120
|
-
return true;
|
|
1121
|
-
}
|
|
1122
|
-
return shouldShowWidget(config['widget-data-options'], values);
|
|
1123
|
-
}, [config['widget-data-options'], values, isLayoutWidget]);
|
|
1124
|
-
const isEnabled = useMemo(() => {
|
|
1125
|
-
// Layout widgets are always enabled (they don't have input state)
|
|
1126
|
-
if (isLayoutWidget) {
|
|
1127
|
-
return true;
|
|
1128
|
-
}
|
|
1129
|
-
if (config['widget-readonly']) {
|
|
1130
|
-
return false;
|
|
1131
|
-
}
|
|
1132
|
-
return shouldEnableWidget(config['widget-data-options'], values);
|
|
1133
|
-
}, [config['widget-readonly'], config['widget-data-options'], values, isLayoutWidget]);
|
|
1134
|
-
// Format value for display
|
|
1135
|
-
const formattedValue = useMemo(() => {
|
|
1136
|
-
if (!config['widget-data-format']) {
|
|
1137
|
-
return currentValue;
|
|
1138
|
-
}
|
|
1139
|
-
return formatValue(currentValue, config['widget-data-format'], config.widget);
|
|
1140
|
-
}, [currentValue, config]);
|
|
1141
|
-
// Track readonly state explicitly to detect changes
|
|
1142
|
-
// Use JSON.stringify to create a stable reference for the dependency array
|
|
1143
|
-
const isReadonly = config['widget-readonly'] ?? false;
|
|
1144
|
-
const dataSource = config['widget-data-source'];
|
|
1145
|
-
const geoConfig = config['widget-geo-config'];
|
|
1146
|
-
// Use ref to store handler to avoid stale closures
|
|
1147
|
-
const handlerRef = useRef(dataSourceRequestHandler);
|
|
1148
|
-
useEffect(() => {
|
|
1149
|
-
handlerRef.current = dataSourceRequestHandler;
|
|
1150
|
-
}, [dataSourceRequestHandler]);
|
|
1151
|
-
// Create a stable key for the config to detect changes
|
|
1152
|
-
// This ensures the effect runs when widget-readonly changes
|
|
1153
|
-
const apiService = dataSource?.type === 'api' ? dataSource.service : '';
|
|
1154
|
-
const apiEndpoint = dataSource?.type === 'api' ? dataSource.endpoint : '';
|
|
1155
|
-
const configKey = `${widgetId}-${isReadonly}-${dataSource?.type || 'none'}-${apiService}-${apiEndpoint}`;
|
|
1156
|
-
// Handle data source loading
|
|
1157
|
-
useEffect(() => {
|
|
1158
|
-
if (!dataSource) {
|
|
1159
|
-
return;
|
|
1160
|
-
}
|
|
1161
|
-
// For API data sources, check if widget is readonly
|
|
1162
|
-
// According to PRD: "Level 1 geo widgets load on widget mount or when entering edit mode"
|
|
1163
|
-
// So we should only load API data sources when widget is NOT readonly
|
|
1164
|
-
if (dataSource.type === 'api' && isReadonly) {
|
|
1165
|
-
return;
|
|
1166
|
-
}
|
|
1167
|
-
// For widgets with dependencies, check if dependency value exists
|
|
1168
|
-
if (dataSource.type === 'api' && dataSource.dependsOn) {
|
|
1169
|
-
// Check if dependency value exists
|
|
1170
|
-
let depValue = null;
|
|
1171
|
-
if (dataSource.dependsOn.includes('.')) {
|
|
1172
|
-
depValue = getWidgetValue(values, dataSource.dependsOn, '');
|
|
1173
|
-
}
|
|
1174
|
-
else {
|
|
1175
|
-
depValue = values[dataSource.dependsOn];
|
|
1176
|
-
}
|
|
1177
|
-
// If dependency is empty, don't load (will load when dependency has value)
|
|
1178
|
-
if (depValue === null || depValue === undefined || depValue === '') {
|
|
1179
|
-
return;
|
|
1180
|
-
}
|
|
1181
|
-
}
|
|
1182
|
-
const loadDataSource = async () => {
|
|
1183
|
-
// Get current handler from ref to avoid stale closures
|
|
1184
|
-
// Also check prop directly as fallback (for initial render or when ref not updated yet)
|
|
1185
|
-
const currentHandler = handlerRef.current || dataSourceRequestHandler;
|
|
1186
|
-
// Only check for handler when we actually need it (inside the async function)
|
|
1187
|
-
// This avoids false errors during React Strict Mode double-invocation
|
|
1188
|
-
// If handler isn't available yet, silently skip - React will retry when it's ready
|
|
1189
|
-
try {
|
|
1190
|
-
if (dataSource.type === 'api' && !currentHandler) {
|
|
1191
|
-
// Silently skip if handler isn't available yet (common during React Strict Mode double-invocation)
|
|
1192
|
-
// React will call this effect again when the handler is ready
|
|
1193
|
-
return;
|
|
1194
|
-
}
|
|
1195
|
-
dispatch(setLoading({ widgetId, loading: true }));
|
|
1196
|
-
let data = [];
|
|
1197
|
-
if (dataSource.type === 'static') {
|
|
1198
|
-
data = getStaticDataSource(dataSource);
|
|
1199
|
-
}
|
|
1200
|
-
else if (dataSource.type === 'api') {
|
|
1201
|
-
if (!currentHandler) {
|
|
1202
|
-
// Silently skip if handler isn't available yet
|
|
1203
|
-
dispatch(setLoading({ widgetId, loading: false }));
|
|
1204
|
-
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1205
|
-
return;
|
|
1206
|
-
}
|
|
1207
|
-
// Extract level_id from widget-geo-config.level if available
|
|
1208
|
-
const levelId = geoConfig?.level;
|
|
1209
|
-
data = await getApiDataSource(dataSource, values, currentHandler, levelId);
|
|
1210
|
-
}
|
|
1211
|
-
else if (dataSource.type === 'schema') {
|
|
1212
|
-
data = getSchemaDataSource(dataSource, schemaData || {});
|
|
1213
|
-
}
|
|
1214
|
-
// Transform to { value, label } format
|
|
1215
|
-
// For geo widgets, default to level_value_id and level_value_mnemonic
|
|
1216
|
-
let valueKey;
|
|
1217
|
-
let labelKey;
|
|
1218
|
-
if (dataSource.type === 'static') {
|
|
1219
|
-
valueKey = undefined;
|
|
1220
|
-
labelKey = undefined;
|
|
1221
|
-
}
|
|
1222
|
-
else if (geoConfig) {
|
|
1223
|
-
// Geo widgets: default to level_value_id and level_value_mnemonic
|
|
1224
|
-
valueKey = dataSource.valueKey || 'level_value_id';
|
|
1225
|
-
labelKey = dataSource.labelKey || 'level_value_mnemonic';
|
|
1226
|
-
}
|
|
1227
|
-
else {
|
|
1228
|
-
// Non-geo widgets: use specified keys or undefined
|
|
1229
|
-
valueKey = dataSource.valueKey;
|
|
1230
|
-
labelKey = dataSource.labelKey;
|
|
1231
|
-
}
|
|
1232
|
-
const transformed = transformDataSourceOptions(data, valueKey, labelKey);
|
|
1233
|
-
dispatch(setDataSource({ widgetId, data: transformed }));
|
|
1234
|
-
}
|
|
1235
|
-
catch (error) {
|
|
1236
|
-
console.error(`[useBaseWidget] ERROR loading data source for ${widgetId}:`, error);
|
|
1237
|
-
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1238
|
-
}
|
|
1239
|
-
finally {
|
|
1240
|
-
dispatch(setLoading({ widgetId, loading: false }));
|
|
1241
|
-
}
|
|
1242
|
-
};
|
|
1243
|
-
loadDataSource();
|
|
1244
|
-
// Use configKey to ensure effect runs when readonly state changes
|
|
1245
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1246
|
-
}, [configKey, values, dataSourceRequestHandler, schemaData, widgetId, dispatch]);
|
|
1247
|
-
return {
|
|
1248
|
-
widgetId,
|
|
1249
|
-
value: currentValue,
|
|
1250
|
-
formattedValue,
|
|
1251
|
-
error: errors,
|
|
1252
|
-
touched,
|
|
1253
|
-
loading,
|
|
1254
|
-
isVisible,
|
|
1255
|
-
isEnabled,
|
|
1256
|
-
onChange: handleChange,
|
|
1257
|
-
onBlur: handleBlur,
|
|
1258
|
-
setError: (errors) => dispatch(setError({ widgetId, errors })),
|
|
1259
|
-
getFieldValue,
|
|
1260
|
-
dataSourceOptions,
|
|
1261
|
-
config,
|
|
1262
|
-
};
|
|
1263
|
-
};
|
|
1264
|
-
|
|
1265
|
-
/**
|
|
1266
|
-
* Hook for general widget cascade functionality
|
|
1267
|
-
* Handles listening to parent widget changes and reloading data sources
|
|
1268
|
-
*/
|
|
1269
|
-
const useWidgetCascade = (options) => {
|
|
1270
|
-
const { config, dataSourceRequestHandler, values } = options;
|
|
1271
|
-
const dispatch = useDispatch();
|
|
1272
|
-
const eventBus = useWidgetEventBus();
|
|
1273
|
-
const widgetId = config['widget-id'];
|
|
1274
|
-
const cascadeConfig = config['widget-cascade'];
|
|
1275
|
-
const dataSource = config['widget-data-source'];
|
|
1276
|
-
const valuesRef = useRef(values);
|
|
1277
|
-
const handlerRef = useRef(dataSourceRequestHandler);
|
|
1278
|
-
// Keep refs updated
|
|
1279
|
-
useEffect(() => {
|
|
1280
|
-
valuesRef.current = values;
|
|
1281
|
-
handlerRef.current = dataSourceRequestHandler;
|
|
1282
|
-
}, [values, dataSourceRequestHandler]);
|
|
1283
|
-
useEffect(() => {
|
|
1284
|
-
if (!cascadeConfig || !eventBus || !dataSource || dataSource.type !== 'api') {
|
|
1285
|
-
return;
|
|
1286
|
-
}
|
|
1287
|
-
const { listenTo, onEvent = 'widget:change', clearOnChange = true, reloadOnChange = true, debounce, throttle } = cascadeConfig;
|
|
1288
|
-
if (listenTo.length === 0) {
|
|
1289
|
-
return;
|
|
1290
|
-
}
|
|
1291
|
-
const handleEvent = async (event) => {
|
|
1292
|
-
// Check if this event is from a parent we're listening to
|
|
1293
|
-
if (!listenTo.includes(event.widgetId)) {
|
|
1294
|
-
return;
|
|
1295
|
-
}
|
|
1296
|
-
const currentValues = valuesRef.current;
|
|
1297
|
-
const currentHandler = handlerRef.current;
|
|
1298
|
-
// Clear value if configured
|
|
1299
|
-
if (clearOnChange) {
|
|
1300
|
-
dispatch(setValue({ widgetId, value: undefined }));
|
|
1301
|
-
}
|
|
1302
|
-
// Reload data source if configured
|
|
1303
|
-
if (reloadOnChange && currentHandler) {
|
|
1304
|
-
try {
|
|
1305
|
-
const data = await getApiDataSource(dataSource, currentValues, currentHandler);
|
|
1306
|
-
// Transform to { value, label } format
|
|
1307
|
-
const valueKey = dataSource.valueKey;
|
|
1308
|
-
const labelKey = dataSource.labelKey;
|
|
1309
|
-
const transformed = transformDataSourceOptions(data, valueKey, labelKey);
|
|
1310
|
-
dispatch(setDataSource({ widgetId, data: transformed }));
|
|
1311
|
-
}
|
|
1312
|
-
catch (error) {
|
|
1313
|
-
console.error('Error reloading data source in cascade:', error);
|
|
1314
|
-
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1315
|
-
}
|
|
1316
|
-
}
|
|
1317
|
-
};
|
|
1318
|
-
// Subscribe to events
|
|
1319
|
-
const unsubscribe = eventBus.subscribe(onEvent, handleEvent, { debounce, throttle });
|
|
1320
|
-
return () => {
|
|
1321
|
-
unsubscribe();
|
|
1322
|
-
};
|
|
1323
|
-
}, [cascadeConfig, eventBus, dataSource, widgetId, dispatch]);
|
|
1324
|
-
};
|
|
1325
|
-
|
|
1326
|
-
/**
|
|
1327
|
-
* Geo Hierarchy Builder
|
|
1328
|
-
* Manages geo hierarchy state and builds hierarchy JSON structure
|
|
1329
|
-
*/
|
|
1330
|
-
class GeoHierarchyBuilder {
|
|
1331
|
-
constructor() {
|
|
1332
|
-
this.hierarchies = new Map();
|
|
1333
|
-
}
|
|
1334
|
-
/**
|
|
1335
|
-
* Get or create hierarchy state for a group
|
|
1336
|
-
*/
|
|
1337
|
-
getHierarchy(groupId = 'default') {
|
|
1338
|
-
if (!this.hierarchies.has(groupId)) {
|
|
1339
|
-
this.hierarchies.set(groupId, {
|
|
1340
|
-
levels: new Map(),
|
|
1341
|
-
order: [],
|
|
1342
|
-
});
|
|
1343
|
-
}
|
|
1344
|
-
return this.hierarchies.get(groupId);
|
|
1345
|
-
}
|
|
1346
|
-
/**
|
|
1347
|
-
* Add a level to the hierarchy
|
|
1348
|
-
*/
|
|
1349
|
-
addLevel(level, level_value_id, level_value_mnemonic, groupId = 'default') {
|
|
1350
|
-
const hierarchy = this.getHierarchy(groupId);
|
|
1351
|
-
// If level already exists, remove it and everything after it
|
|
1352
|
-
const existingIndex = hierarchy.order.indexOf(level);
|
|
1353
|
-
if (existingIndex >= 0) {
|
|
1354
|
-
// Remove this level and all subsequent levels
|
|
1355
|
-
const levelsToRemove = hierarchy.order.slice(existingIndex);
|
|
1356
|
-
levelsToRemove.forEach((l) => {
|
|
1357
|
-
hierarchy.levels.delete(l);
|
|
1358
|
-
hierarchy.order = hierarchy.order.filter((o) => o !== l);
|
|
1359
|
-
});
|
|
1360
|
-
}
|
|
1361
|
-
// Add new level
|
|
1362
|
-
hierarchy.levels.set(level, {
|
|
1363
|
-
level,
|
|
1364
|
-
level_value_id,
|
|
1365
|
-
level_value_mnemonic,
|
|
1366
|
-
});
|
|
1367
|
-
hierarchy.order.push(level);
|
|
1368
|
-
}
|
|
1369
|
-
/**
|
|
1370
|
-
* Remove a level and all levels below it
|
|
1371
|
-
*/
|
|
1372
|
-
removeLevelAndBelow(level, groupId = 'default') {
|
|
1373
|
-
const hierarchy = this.getHierarchy(groupId);
|
|
1374
|
-
const index = hierarchy.order.indexOf(level);
|
|
1375
|
-
if (index >= 0) {
|
|
1376
|
-
// Remove this level and all subsequent levels
|
|
1377
|
-
const levelsToRemove = hierarchy.order.slice(index);
|
|
1378
|
-
levelsToRemove.forEach((l) => {
|
|
1379
|
-
hierarchy.levels.delete(l);
|
|
1380
|
-
hierarchy.order = hierarchy.order.filter((o) => o !== l);
|
|
1381
|
-
});
|
|
1382
|
-
}
|
|
1383
|
-
}
|
|
1384
|
-
/**
|
|
1385
|
-
* Build hierarchy JSON structure
|
|
1386
|
-
*/
|
|
1387
|
-
buildHierarchyJson(groupId = 'default') {
|
|
1388
|
-
const hierarchy = this.getHierarchy(groupId);
|
|
1389
|
-
if (hierarchy.order.length === 0) {
|
|
1390
|
-
return null;
|
|
1391
|
-
}
|
|
1392
|
-
const hierarchyArray = hierarchy.order.map((level) => {
|
|
1393
|
-
const data = hierarchy.levels.get(level);
|
|
1394
|
-
return {
|
|
1395
|
-
level: data.level,
|
|
1396
|
-
level_value_id: data.level_value_id,
|
|
1397
|
-
level_value_mnemonic: data.level_value_mnemonic,
|
|
1398
|
-
};
|
|
1399
|
-
});
|
|
1400
|
-
const lowestLevel = hierarchy.order[hierarchy.order.length - 1];
|
|
1401
|
-
const lowestLevelData = hierarchy.levels.get(lowestLevel);
|
|
1402
|
-
return {
|
|
1403
|
-
geo_lowest_level_value_id: lowestLevelData.level_value_id,
|
|
1404
|
-
geo_code_hierarchy_json: {
|
|
1405
|
-
hierarchy: hierarchyArray,
|
|
1406
|
-
lowest_level_value_id: lowestLevelData.level_value_id,
|
|
1407
|
-
},
|
|
1408
|
-
};
|
|
1409
|
-
}
|
|
1410
|
-
/**
|
|
1411
|
-
* Clear hierarchy for a group
|
|
1412
|
-
*/
|
|
1413
|
-
clear(groupId = 'default') {
|
|
1414
|
-
this.hierarchies.delete(groupId);
|
|
1415
|
-
}
|
|
1416
|
-
/**
|
|
1417
|
-
* Clear all hierarchies
|
|
1418
|
-
*/
|
|
1419
|
-
clearAll() {
|
|
1420
|
-
this.hierarchies.clear();
|
|
1421
|
-
}
|
|
1422
|
-
/**
|
|
1423
|
-
* Get current levels for a group
|
|
1424
|
-
*/
|
|
1425
|
-
getLevels(groupId = 'default') {
|
|
1426
|
-
const hierarchy = this.getHierarchy(groupId);
|
|
1427
|
-
return hierarchy.order.map((level) => hierarchy.levels.get(level));
|
|
1428
|
-
}
|
|
1429
|
-
}
|
|
1430
|
-
// Singleton instance
|
|
1431
|
-
const geoHierarchyBuilder = new GeoHierarchyBuilder();
|
|
1432
|
-
|
|
1433
|
-
// Define stable empty array to avoid selector reference issues
|
|
1434
|
-
const EMPTY_DATA_SOURCE = [];
|
|
1435
|
-
/**
|
|
1436
|
-
* Hook for geo widget cascade functionality
|
|
1437
|
-
* Handles geo hierarchy building and cascade behavior
|
|
1438
|
-
*/
|
|
1439
|
-
const useGeoWidgetCascade = (options) => {
|
|
1440
|
-
const { config, dataSourceRequestHandler, values } = options;
|
|
1441
|
-
const dispatch = useDispatch();
|
|
1442
|
-
const eventBus = useWidgetEventBus();
|
|
1443
|
-
const widgetId = config['widget-id'];
|
|
1444
|
-
const geoConfig = config['widget-geo-config'];
|
|
1445
|
-
const dataSource = config['widget-data-source'];
|
|
1446
|
-
const dataPath = config['widget-data-path'];
|
|
1447
|
-
const valuesRef = useRef(values);
|
|
1448
|
-
const handlerRef = useRef(dataSourceRequestHandler);
|
|
1449
|
-
// Keep refs updated
|
|
1450
|
-
useEffect(() => {
|
|
1451
|
-
valuesRef.current = values;
|
|
1452
|
-
handlerRef.current = dataSourceRequestHandler;
|
|
1453
|
-
}, [values, dataSourceRequestHandler]);
|
|
1454
|
-
// Get current value and data source options
|
|
1455
|
-
const currentValue = useSelector((state) => {
|
|
1456
|
-
if (!dataPath) {
|
|
1457
|
-
return state.widget.values[widgetId];
|
|
1458
|
-
}
|
|
1459
|
-
return getWidgetValue(state.widget.values, dataPath, widgetId);
|
|
1460
|
-
});
|
|
1461
|
-
// Memoize selector to avoid returning new array reference
|
|
1462
|
-
const dataSourceOptions = useSelector((state) => state.widget.dataSources[widgetId] ?? EMPTY_DATA_SOURCE);
|
|
1463
|
-
useEffect(() => {
|
|
1464
|
-
if (!geoConfig || !eventBus || !dataSource || dataSource.type !== 'api') {
|
|
1465
|
-
return;
|
|
1466
|
-
}
|
|
1467
|
-
const { level, isLastLevel, parentWidgetId } = geoConfig;
|
|
1468
|
-
// Listen to parent widget changes
|
|
1469
|
-
if (parentWidgetId) {
|
|
1470
|
-
const handleParentChange = async (event) => {
|
|
1471
|
-
if (event.widgetId !== parentWidgetId) {
|
|
1472
|
-
return;
|
|
1473
|
-
}
|
|
1474
|
-
// CRITICAL: Use a small delay to ensure Redux state has been updated
|
|
1475
|
-
// This prevents reading stale values from valuesRef
|
|
1476
|
-
await new Promise(resolve => setTimeout(resolve, 0));
|
|
1477
|
-
const currentValues = valuesRef.current;
|
|
1478
|
-
const currentHandler = handlerRef.current;
|
|
1479
|
-
// CRITICAL: Get the parent value from Redux state, not from the event
|
|
1480
|
-
// The event.value might be stale, but Redux state is always current
|
|
1481
|
-
const parentValue = currentValues[parentWidgetId];
|
|
1482
|
-
// Remove this level and all below from hierarchy
|
|
1483
|
-
geoHierarchyBuilder.removeLevelAndBelow(level);
|
|
1484
|
-
// Clear this widget's value
|
|
1485
|
-
// CRITICAL: Only dispatch setValue for THIS widget, not for parent or other widgets
|
|
1486
|
-
// setWidgetValue returns the entire updated state, but we only want to update this widget
|
|
1487
|
-
if (dataPath) {
|
|
1488
|
-
const updatedValues = setWidgetValue(currentValues, dataPath, widgetId, undefined);
|
|
1489
|
-
// Only dispatch setValue for this widget's widgetId, not for parent or other widgets
|
|
1490
|
-
// This prevents accidentally overwriting the parent widget's value
|
|
1491
|
-
// The setWidgetValue function updates the nested structure, but we only want to
|
|
1492
|
-
// update the top-level widgetId key, not other keys that might be in updatedValues
|
|
1493
|
-
const newWidgetValue = updatedValues[widgetId];
|
|
1494
|
-
if (newWidgetValue !== undefined) {
|
|
1495
|
-
dispatch(setValue({ widgetId, value: newWidgetValue }));
|
|
1496
|
-
}
|
|
1497
|
-
else {
|
|
1498
|
-
// If widgetId is not in updatedValues, the value was set in a nested path
|
|
1499
|
-
// In this case, we need to use setValues to update the entire structure
|
|
1500
|
-
// But we need to be careful not to overwrite the parent widget's value
|
|
1501
|
-
// Only update keys that are related to this widget's dataPath
|
|
1502
|
-
const dataPathStr = typeof dataPath === 'string' ? dataPath : '';
|
|
1503
|
-
if (dataPathStr && !dataPathStr.startsWith(parentWidgetId + '.')) {
|
|
1504
|
-
// Only update if dataPath doesn't start with parentWidgetId
|
|
1505
|
-
// This ensures we don't accidentally overwrite the parent widget's value
|
|
1506
|
-
dispatch(setValue({ widgetId, value: undefined }));
|
|
1507
|
-
}
|
|
1508
|
-
}
|
|
1509
|
-
}
|
|
1510
|
-
else {
|
|
1511
|
-
dispatch(setValue({ widgetId, value: undefined }));
|
|
1512
|
-
}
|
|
1513
|
-
// Reload data source with new parent value
|
|
1514
|
-
// CRITICAL: Use parentValue from Redux, not event.value
|
|
1515
|
-
if (currentHandler && parentValue !== null && parentValue !== undefined) {
|
|
1516
|
-
try {
|
|
1517
|
-
// Merge the new parent value into current values for the API call
|
|
1518
|
-
// This ensures getApiDataSource can find the dependency value
|
|
1519
|
-
const updatedValues = {
|
|
1520
|
-
...currentValues,
|
|
1521
|
-
[parentWidgetId]: parentValue, // Use Redux value, not event.value
|
|
1522
|
-
};
|
|
1523
|
-
// Extract level_id from widget-geo-config.level
|
|
1524
|
-
const levelId = geoConfig.level;
|
|
1525
|
-
const data = await getApiDataSource(dataSource, updatedValues, currentHandler, levelId);
|
|
1526
|
-
// Transform to { value, label } format
|
|
1527
|
-
const valueKey = dataSource.valueKey || 'level_value_id';
|
|
1528
|
-
const labelKey = dataSource.labelKey || 'level_value_mnemonic';
|
|
1529
|
-
const transformed = transformDataSourceOptions(data, valueKey, labelKey);
|
|
1530
|
-
dispatch(setDataSource({ widgetId, data: transformed }));
|
|
1531
|
-
}
|
|
1532
|
-
catch (error) {
|
|
1533
|
-
console.error('Error reloading geo data source:', error);
|
|
1534
|
-
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1535
|
-
}
|
|
1536
|
-
}
|
|
1537
|
-
else {
|
|
1538
|
-
// If parent value is cleared, clear the data source
|
|
1539
|
-
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1540
|
-
}
|
|
1541
|
-
};
|
|
1542
|
-
const unsubscribe = eventBus.subscribe('widget:change', handleParentChange);
|
|
1543
|
-
return () => {
|
|
1544
|
-
unsubscribe();
|
|
1545
|
-
};
|
|
1546
|
-
}
|
|
1547
|
-
}, [geoConfig, eventBus, dataSource, widgetId, dataPath, dispatch]);
|
|
1548
|
-
// Handle value changes to build hierarchy
|
|
1549
|
-
useEffect(() => {
|
|
1550
|
-
if (!geoConfig) {
|
|
1551
|
-
return;
|
|
1552
|
-
}
|
|
1553
|
-
// Skip if value is empty/null (but allow 0 and false)
|
|
1554
|
-
if (currentValue === null || currentValue === undefined || currentValue === '') {
|
|
1555
|
-
// If value was cleared, remove this level and below from hierarchy
|
|
1556
|
-
const { level } = geoConfig;
|
|
1557
|
-
geoHierarchyBuilder.removeLevelAndBelow(level);
|
|
1558
|
-
return;
|
|
1559
|
-
}
|
|
1560
|
-
const { level, isLastLevel } = geoConfig;
|
|
1561
|
-
// For last level, check if hierarchy is already built to prevent endless loops
|
|
1562
|
-
if (isLastLevel && dataPath) {
|
|
1563
|
-
const currentHierarchy = getWidgetValue(valuesRef.current, dataPath, widgetId);
|
|
1564
|
-
// If hierarchy JSON is already set and matches current value, skip rebuilding
|
|
1565
|
-
if (currentHierarchy && typeof currentHierarchy === 'object' && currentHierarchy.geo_code_hierarchy_json) {
|
|
1566
|
-
// Check if the lowest level value matches
|
|
1567
|
-
const currentLevelValue = typeof currentValue === 'object'
|
|
1568
|
-
? (currentValue.level_value_id || currentValue.id || currentValue.value)
|
|
1569
|
-
: currentValue;
|
|
1570
|
-
if (currentHierarchy.geo_lowest_level_value_id === currentLevelValue) {
|
|
1571
|
-
return; // Hierarchy already built for this value, skip
|
|
1572
|
-
}
|
|
1573
|
-
}
|
|
1574
|
-
}
|
|
1575
|
-
// Extract level_value_id and level_value_mnemonic from current value
|
|
1576
|
-
// The value could be the ID itself or an object with id/name
|
|
1577
|
-
let level_value_id;
|
|
1578
|
-
let level_value_mnemonic;
|
|
1579
|
-
if (typeof currentValue === 'string' || typeof currentValue === 'number') {
|
|
1580
|
-
// Value is just the ID, need to find mnemonic from data source
|
|
1581
|
-
level_value_id = String(currentValue);
|
|
1582
|
-
// Try to get mnemonic from data source options
|
|
1583
|
-
const option = dataSourceOptions.find((opt) => opt.value === currentValue);
|
|
1584
|
-
level_value_mnemonic = option?.label || String(currentValue);
|
|
1585
|
-
}
|
|
1586
|
-
else if (currentValue && typeof currentValue === 'object') {
|
|
1587
|
-
level_value_id = currentValue.level_value_id || currentValue.id || currentValue.value;
|
|
1588
|
-
level_value_mnemonic = currentValue.level_value_mnemonic || currentValue.name || currentValue.label;
|
|
1589
|
-
}
|
|
1590
|
-
else {
|
|
1591
|
-
return;
|
|
1592
|
-
}
|
|
1593
|
-
// When a widget's own value changes, remove this level and all below from hierarchy first
|
|
1594
|
-
// This ensures that when level 1 changes, we clear the hierarchy and rebuild from scratch
|
|
1595
|
-
// The addLevel method already handles removing existing levels, but we explicitly clear to be safe
|
|
1596
|
-
geoHierarchyBuilder.removeLevelAndBelow(level);
|
|
1597
|
-
// Add level to hierarchy
|
|
1598
|
-
geoHierarchyBuilder.addLevel(level, level_value_id, level_value_mnemonic);
|
|
1599
|
-
// If this is the last level, build and store hierarchy JSON
|
|
1600
|
-
if (isLastLevel && dataPath) {
|
|
1601
|
-
const hierarchyJson = geoHierarchyBuilder.buildHierarchyJson();
|
|
1602
|
-
if (hierarchyJson) {
|
|
1603
|
-
// Store both geo_lowest_level_value_id and geo_code_hierarchy_json
|
|
1604
|
-
const updatedValues = setWidgetValue(valuesRef.current, dataPath, widgetId, {
|
|
1605
|
-
geo_lowest_level_value_id: hierarchyJson.geo_lowest_level_value_id,
|
|
1606
|
-
geo_code_hierarchy_json: hierarchyJson.geo_code_hierarchy_json,
|
|
1607
|
-
});
|
|
1608
|
-
Object.entries(updatedValues).forEach(([key, value]) => {
|
|
1609
|
-
dispatch(setValue({ widgetId: key, value }));
|
|
1610
|
-
});
|
|
1611
|
-
}
|
|
1612
|
-
}
|
|
1613
|
-
}, [geoConfig, currentValue, widgetId, dataPath, dispatch, dataSourceOptions]);
|
|
1614
|
-
};
|
|
1615
|
-
|
|
1616
922
|
var jsxRuntime = {exports: {}};
|
|
1617
923
|
|
|
1618
924
|
var reactJsxRuntime_production = {};
|
|
@@ -2021,19 +1327,882 @@ function requireReactJsxRuntime_development () {
|
|
|
2021
1327
|
|
|
2022
1328
|
var hasRequiredJsxRuntime;
|
|
2023
1329
|
|
|
2024
|
-
function requireJsxRuntime () {
|
|
2025
|
-
if (hasRequiredJsxRuntime) return jsxRuntime.exports;
|
|
2026
|
-
hasRequiredJsxRuntime = 1;
|
|
1330
|
+
function requireJsxRuntime () {
|
|
1331
|
+
if (hasRequiredJsxRuntime) return jsxRuntime.exports;
|
|
1332
|
+
hasRequiredJsxRuntime = 1;
|
|
1333
|
+
|
|
1334
|
+
if (process.env.NODE_ENV === 'production') {
|
|
1335
|
+
jsxRuntime.exports = requireReactJsxRuntime_production();
|
|
1336
|
+
} else {
|
|
1337
|
+
jsxRuntime.exports = requireReactJsxRuntime_development();
|
|
1338
|
+
}
|
|
1339
|
+
return jsxRuntime.exports;
|
|
1340
|
+
}
|
|
1341
|
+
|
|
1342
|
+
var jsxRuntimeExports = requireJsxRuntime();
|
|
1343
|
+
|
|
1344
|
+
/**
|
|
1345
|
+
* Widget Event Bus
|
|
1346
|
+
* Provides a publish/subscribe mechanism for widget communication
|
|
1347
|
+
* Supports debounce and throttle for performance optimization
|
|
1348
|
+
*/
|
|
1349
|
+
class WidgetEventBus {
|
|
1350
|
+
constructor() {
|
|
1351
|
+
this.subscriptions = new Map();
|
|
1352
|
+
this.throttleTimers = new Map();
|
|
1353
|
+
}
|
|
1354
|
+
/**
|
|
1355
|
+
* Subscribe to an event type
|
|
1356
|
+
* @param eventType The type of event to listen to
|
|
1357
|
+
* @param handler The handler function
|
|
1358
|
+
* @param options Debounce/throttle options
|
|
1359
|
+
* @returns Unsubscribe function
|
|
1360
|
+
*/
|
|
1361
|
+
subscribe(eventType, handler, options) {
|
|
1362
|
+
if (!this.subscriptions.has(eventType)) {
|
|
1363
|
+
this.subscriptions.set(eventType, new Map());
|
|
1364
|
+
}
|
|
1365
|
+
const eventSubscriptions = this.subscriptions.get(eventType);
|
|
1366
|
+
const subscriptionId = `${Date.now()}-${Math.random()}`;
|
|
1367
|
+
const subscription = {
|
|
1368
|
+
handler,
|
|
1369
|
+
debounce: options?.debounce,
|
|
1370
|
+
throttle: options?.throttle,
|
|
1371
|
+
};
|
|
1372
|
+
if (!eventSubscriptions.has(subscriptionId)) {
|
|
1373
|
+
eventSubscriptions.set(subscriptionId, []);
|
|
1374
|
+
}
|
|
1375
|
+
eventSubscriptions.get(subscriptionId).push(subscription);
|
|
1376
|
+
// Return unsubscribe function
|
|
1377
|
+
return () => {
|
|
1378
|
+
const subs = eventSubscriptions.get(subscriptionId);
|
|
1379
|
+
if (subs) {
|
|
1380
|
+
const index = subs.indexOf(subscription);
|
|
1381
|
+
if (index > -1) {
|
|
1382
|
+
subs.splice(index, 1);
|
|
1383
|
+
if (subs.length === 0) {
|
|
1384
|
+
eventSubscriptions.delete(subscriptionId);
|
|
1385
|
+
}
|
|
1386
|
+
}
|
|
1387
|
+
}
|
|
1388
|
+
};
|
|
1389
|
+
}
|
|
1390
|
+
/**
|
|
1391
|
+
* Publish an event
|
|
1392
|
+
* @param event The event to publish
|
|
1393
|
+
*/
|
|
1394
|
+
publish(event) {
|
|
1395
|
+
const eventSubscriptions = this.subscriptions.get(event.type);
|
|
1396
|
+
if (!eventSubscriptions) {
|
|
1397
|
+
return;
|
|
1398
|
+
}
|
|
1399
|
+
eventSubscriptions.forEach((subscriptions) => {
|
|
1400
|
+
subscriptions.forEach((subscription) => {
|
|
1401
|
+
this.executeHandler(subscription, event);
|
|
1402
|
+
});
|
|
1403
|
+
});
|
|
1404
|
+
}
|
|
1405
|
+
/**
|
|
1406
|
+
* Execute handler with debounce/throttle support
|
|
1407
|
+
*/
|
|
1408
|
+
executeHandler(subscription, event) {
|
|
1409
|
+
const { handler, debounce, throttle } = subscription;
|
|
1410
|
+
// Clear existing debounce timer if any
|
|
1411
|
+
if (subscription.debounceTimer) {
|
|
1412
|
+
clearTimeout(subscription.debounceTimer);
|
|
1413
|
+
}
|
|
1414
|
+
// Handle throttle
|
|
1415
|
+
if (throttle && throttle > 0) {
|
|
1416
|
+
const throttleKey = `${event.type}-${event.widgetId}`;
|
|
1417
|
+
const now = Date.now();
|
|
1418
|
+
const lastCallTime = subscription.lastCallTime || 0;
|
|
1419
|
+
if (now - lastCallTime < throttle) {
|
|
1420
|
+
// Still in throttle period, schedule for later
|
|
1421
|
+
if (this.throttleTimers.has(throttleKey)) {
|
|
1422
|
+
return; // Already scheduled
|
|
1423
|
+
}
|
|
1424
|
+
const remainingTime = throttle - (now - lastCallTime);
|
|
1425
|
+
const timer = setTimeout(() => {
|
|
1426
|
+
subscription.lastCallTime = Date.now();
|
|
1427
|
+
handler(event);
|
|
1428
|
+
this.throttleTimers.delete(throttleKey);
|
|
1429
|
+
}, remainingTime);
|
|
1430
|
+
this.throttleTimers.set(throttleKey, timer);
|
|
1431
|
+
return;
|
|
1432
|
+
}
|
|
1433
|
+
subscription.lastCallTime = now;
|
|
1434
|
+
}
|
|
1435
|
+
// Handle debounce
|
|
1436
|
+
if (debounce && debounce > 0) {
|
|
1437
|
+
subscription.debounceTimer = setTimeout(() => {
|
|
1438
|
+
handler(event);
|
|
1439
|
+
subscription.debounceTimer = undefined;
|
|
1440
|
+
}, debounce);
|
|
1441
|
+
return;
|
|
1442
|
+
}
|
|
1443
|
+
// Execute immediately if no debounce/throttle
|
|
1444
|
+
handler(event);
|
|
1445
|
+
}
|
|
1446
|
+
/**
|
|
1447
|
+
* Clear all subscriptions
|
|
1448
|
+
*/
|
|
1449
|
+
clear() {
|
|
1450
|
+
// Clear all timers
|
|
1451
|
+
this.subscriptions.forEach((eventSubscriptions) => {
|
|
1452
|
+
eventSubscriptions.forEach((subscriptions) => {
|
|
1453
|
+
subscriptions.forEach((sub) => {
|
|
1454
|
+
if (sub.debounceTimer) {
|
|
1455
|
+
clearTimeout(sub.debounceTimer);
|
|
1456
|
+
}
|
|
1457
|
+
});
|
|
1458
|
+
});
|
|
1459
|
+
});
|
|
1460
|
+
this.throttleTimers.forEach((timer) => clearTimeout(timer));
|
|
1461
|
+
this.throttleTimers.clear();
|
|
1462
|
+
this.subscriptions.clear();
|
|
1463
|
+
}
|
|
1464
|
+
}
|
|
1465
|
+
|
|
1466
|
+
const WidgetContext = createContext({
|
|
1467
|
+
dataSourceRequestHandler: undefined,
|
|
1468
|
+
schemaData: undefined,
|
|
1469
|
+
translate: undefined,
|
|
1470
|
+
});
|
|
1471
|
+
const useWidgetContext = () => {
|
|
1472
|
+
return useContext(WidgetContext);
|
|
1473
|
+
};
|
|
1474
|
+
const WidgetProvider = ({ store, dataSourceRequestHandler, schemaData, translate, children, }) => {
|
|
1475
|
+
const widgetStore = useMemo(() => store || createWidgetStore(), [store]);
|
|
1476
|
+
// Create event bus instance (one per provider)
|
|
1477
|
+
const eventBus = useMemo(() => new WidgetEventBus(), []);
|
|
1478
|
+
// Memoize context value to prevent unnecessary re-renders
|
|
1479
|
+
const contextValue = useMemo(() => ({
|
|
1480
|
+
dataSourceRequestHandler,
|
|
1481
|
+
schemaData,
|
|
1482
|
+
translate,
|
|
1483
|
+
}), [dataSourceRequestHandler, schemaData, translate]);
|
|
1484
|
+
// Warn if dataSourceRequestHandler is missing (will cause issues with API data sources)
|
|
1485
|
+
useEffect(() => {
|
|
1486
|
+
if (!dataSourceRequestHandler) {
|
|
1487
|
+
console.warn('[WidgetProvider] dataSourceRequestHandler is not provided. ' +
|
|
1488
|
+
'Widgets with API data sources will not be able to load data. ' +
|
|
1489
|
+
'Please provide dataSourceRequestHandler prop to WidgetProvider.');
|
|
1490
|
+
}
|
|
1491
|
+
}, [dataSourceRequestHandler]);
|
|
1492
|
+
// Cleanup event bus on unmount
|
|
1493
|
+
useEffect(() => {
|
|
1494
|
+
return () => {
|
|
1495
|
+
eventBus.clear();
|
|
1496
|
+
};
|
|
1497
|
+
}, [eventBus]);
|
|
1498
|
+
// Initialize schemaData to Redux store (only on mount)
|
|
1499
|
+
// This prevents overwriting user changes when schemaData prop changes
|
|
1500
|
+
useEffect(() => {
|
|
1501
|
+
if (schemaData) {
|
|
1502
|
+
widgetStore.dispatch(setValues(schemaData));
|
|
1503
|
+
}
|
|
1504
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1505
|
+
}, [schemaData, widgetStore]); // Only run on mount
|
|
1506
|
+
const content = (jsxRuntimeExports.jsx(Provider, { store: widgetStore, children: jsxRuntimeExports.jsx(WidgetContext.Provider, { value: contextValue, children: jsxRuntimeExports.jsx(WidgetEventBusContext.Provider, { value: eventBus, children: children }) }) }));
|
|
1507
|
+
return content;
|
|
1508
|
+
};
|
|
1509
|
+
|
|
1510
|
+
// Define stable empty arrays to avoid selector reference issues
|
|
1511
|
+
const EMPTY_ERRORS = [];
|
|
1512
|
+
const EMPTY_DATA_SOURCE$1 = [];
|
|
1513
|
+
const useBaseWidget = (options) => {
|
|
1514
|
+
const { config, dataSourceRequestHandler: propHandler, schemaData, onValueChange } = options;
|
|
1515
|
+
const dispatch = useDispatch();
|
|
1516
|
+
const context = useWidgetContext();
|
|
1517
|
+
const eventBus = useWidgetEventBus();
|
|
1518
|
+
const widgetId = config['widget-id'];
|
|
1519
|
+
// Fall back to WidgetContext for dataSourceRequestHandler
|
|
1520
|
+
const dataSourceRequestHandler = propHandler || context.dataSourceRequestHandler;
|
|
1521
|
+
// Get state from Redux
|
|
1522
|
+
const values = useSelector((state) => state.widget.values);
|
|
1523
|
+
const errors = useSelector((state) => state.widget.errors[widgetId] ?? EMPTY_ERRORS);
|
|
1524
|
+
const touched = useSelector((state) => state.widget.touched[widgetId] || false);
|
|
1525
|
+
const loading = useSelector((state) => state.widget.loading[widgetId] || false);
|
|
1526
|
+
const dataSourceOptions = useSelector((state) => state.widget.dataSources[widgetId] ?? EMPTY_DATA_SOURCE$1);
|
|
1527
|
+
// Skip value handling for layout widgets (they don't store data values)
|
|
1528
|
+
// Infer layout from widget-type
|
|
1529
|
+
const isLayoutWidget = config['widget-type'] === 'layout';
|
|
1530
|
+
// Track if user has explicitly set a value to prevent default from overwriting
|
|
1531
|
+
const userHasSetValueRef = useRef(false);
|
|
1532
|
+
// Use ref for values to avoid stale closures in handleChange
|
|
1533
|
+
const valuesRef = useRef(values);
|
|
1534
|
+
useEffect(() => {
|
|
1535
|
+
valuesRef.current = values;
|
|
1536
|
+
}, [values]);
|
|
1537
|
+
// Track last dispatched value to prevent duplicate dispatches
|
|
1538
|
+
const lastDispatchedValueRef = useRef(null);
|
|
1539
|
+
// Get current value
|
|
1540
|
+
const currentValue = useMemo(() => {
|
|
1541
|
+
if (isLayoutWidget) {
|
|
1542
|
+
return undefined; // Layout widgets don't have values
|
|
1543
|
+
}
|
|
1544
|
+
// Helper to extract displayable value from object (especially geo hierarchy objects)
|
|
1545
|
+
const extractValueFromObject = (obj) => {
|
|
1546
|
+
if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {
|
|
1547
|
+
return obj;
|
|
1548
|
+
}
|
|
1549
|
+
// Check for geo hierarchy structure first
|
|
1550
|
+
if ('geo_code_hierarchy_json' in obj || 'geo_lowest_level_value_id' in obj) {
|
|
1551
|
+
if ('geo_lowest_level_value_id' in obj) {
|
|
1552
|
+
return obj.geo_lowest_level_value_id;
|
|
1553
|
+
}
|
|
1554
|
+
// If it's a geo hierarchy object but no extractable ID, return undefined to avoid rendering object
|
|
1555
|
+
return undefined;
|
|
1556
|
+
}
|
|
1557
|
+
// Try common value fields
|
|
1558
|
+
if ('value' in obj) {
|
|
1559
|
+
return obj.value;
|
|
1560
|
+
}
|
|
1561
|
+
if ('id' in obj) {
|
|
1562
|
+
return obj.id;
|
|
1563
|
+
}
|
|
1564
|
+
if ('label' in obj) {
|
|
1565
|
+
return obj.label;
|
|
1566
|
+
}
|
|
1567
|
+
if ('name' in obj) {
|
|
1568
|
+
return obj.name;
|
|
1569
|
+
}
|
|
1570
|
+
// If no extractable value found, return undefined to avoid rendering object as React child
|
|
1571
|
+
// This prevents "Objects are not valid as a React child" errors
|
|
1572
|
+
return undefined;
|
|
1573
|
+
};
|
|
1574
|
+
// Try to get value from widgetId first (this should have the actual selected value)
|
|
1575
|
+
// For geo widgets with dataPath, widgetId stores the actual ID, while dataPath stores the hierarchy object
|
|
1576
|
+
let value = values[widgetId];
|
|
1577
|
+
// Extract value if it's an object (handles geo hierarchy objects stored in widgetId)
|
|
1578
|
+
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
1579
|
+
value = extractValueFromObject(value);
|
|
1580
|
+
}
|
|
1581
|
+
// If widgetId doesn't have a value, try dataPath
|
|
1582
|
+
if (value === undefined && config['widget-data-path']) {
|
|
1583
|
+
value = getWidgetValue(values, config['widget-data-path'], widgetId);
|
|
1584
|
+
// Extract value if it's an object (handles geo hierarchy objects from dataPath)
|
|
1585
|
+
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
1586
|
+
value = extractValueFromObject(value);
|
|
1587
|
+
}
|
|
1588
|
+
}
|
|
1589
|
+
// If value is still undefined and user has set a value, try reading from widgetId as backup
|
|
1590
|
+
// This handles cases where dataPath lookup might fail temporarily
|
|
1591
|
+
if (value === undefined && userHasSetValueRef.current && values[widgetId] !== undefined) {
|
|
1592
|
+
value = values[widgetId];
|
|
1593
|
+
// Extract value if it's an object (handles geo hierarchy objects)
|
|
1594
|
+
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
1595
|
+
value = extractValueFromObject(value);
|
|
1596
|
+
}
|
|
1597
|
+
}
|
|
1598
|
+
// Final safety check: if value is still an object, extract displayable value
|
|
1599
|
+
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
1600
|
+
value = extractValueFromObject(value);
|
|
1601
|
+
}
|
|
1602
|
+
// If user has explicitly set a value, always return it (even if undefined/null)
|
|
1603
|
+
// This prevents the default from overwriting user selections
|
|
1604
|
+
if (userHasSetValueRef.current) {
|
|
1605
|
+
return value;
|
|
1606
|
+
}
|
|
1607
|
+
// Only fall back to default if user hasn't set a value yet
|
|
1608
|
+
// But check if value is explicitly null (user cleared it) vs undefined (never set)
|
|
1609
|
+
if (value === null) {
|
|
1610
|
+
return null; // User explicitly cleared it, don't use default
|
|
1611
|
+
}
|
|
1612
|
+
return value !== undefined ? value : config['widget-data-default'];
|
|
1613
|
+
}, [values, config, widgetId, isLayoutWidget]);
|
|
1614
|
+
// Initialize default value only once on mount (skip for layout widgets)
|
|
1615
|
+
useEffect(() => {
|
|
1616
|
+
if (isLayoutWidget) {
|
|
1617
|
+
return;
|
|
1618
|
+
}
|
|
1619
|
+
// Only initialize default if value is undefined and user hasn't set a value yet
|
|
1620
|
+
if (!userHasSetValueRef.current && config['widget-data-default'] !== undefined && currentValue === undefined) {
|
|
1621
|
+
handleChange(config['widget-data-default'], false);
|
|
1622
|
+
}
|
|
1623
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1624
|
+
}, [isLayoutWidget]); // Only run once on mount
|
|
1625
|
+
// Handle value change
|
|
1626
|
+
// CRITICAL: Don't include 'values' in dependency array - it causes the callback to be recreated
|
|
1627
|
+
// every time values change, which can lead to stale closures and double dispatches
|
|
1628
|
+
const handleChange = useCallback((newValue, validate = true) => {
|
|
1629
|
+
// Use valuesRef to get the latest values, not the stale closure value
|
|
1630
|
+
const currentValues = valuesRef.current;
|
|
1631
|
+
const currentValue = currentValues[widgetId] || getWidgetValue(currentValues, config['widget-data-path'], widgetId);
|
|
1632
|
+
// CRITICAL: Prevent setting the same value (avoids unnecessary dispatches and potential loops)
|
|
1633
|
+
if (currentValue === newValue) {
|
|
1634
|
+
return;
|
|
1635
|
+
}
|
|
1636
|
+
// Mark that user has set a value (unless this is the default initialization)
|
|
1637
|
+
if (newValue !== config['widget-data-default'] || userHasSetValueRef.current) {
|
|
1638
|
+
userHasSetValueRef.current = true;
|
|
1639
|
+
}
|
|
1640
|
+
// CRITICAL FIX: If there's no dataPath, just set the value directly
|
|
1641
|
+
// If there's a dataPath, we need to update both the widgetId and the dataPath
|
|
1642
|
+
if (!config['widget-data-path']) {
|
|
1643
|
+
// No dataPath: just set the value directly by widgetId
|
|
1644
|
+
// CRITICAL: Check if we just dispatched this value to prevent duplicate dispatches
|
|
1645
|
+
if (lastDispatchedValueRef.current === newValue) {
|
|
1646
|
+
return;
|
|
1647
|
+
}
|
|
1648
|
+
lastDispatchedValueRef.current = newValue;
|
|
1649
|
+
dispatch(setValue({ widgetId, value: newValue }));
|
|
1650
|
+
}
|
|
1651
|
+
else {
|
|
1652
|
+
// Has dataPath: update both widgetId and dataPath
|
|
1653
|
+
// CRITICAL: Create updated values object with newValue already set
|
|
1654
|
+
// This prevents setWidgetValue from reading stale values
|
|
1655
|
+
const currentValuesWithUpdate = {
|
|
1656
|
+
...valuesRef.current,
|
|
1657
|
+
[widgetId]: newValue, // Ensure widgetId has the new value
|
|
1658
|
+
};
|
|
1659
|
+
const updatedValues = setWidgetValue(currentValuesWithUpdate, config['widget-data-path'], widgetId, newValue);
|
|
1660
|
+
// setWidgetValue returns the complete updated structure with all existing data preserved
|
|
1661
|
+
// Use setValues to update the entire state with deep merge
|
|
1662
|
+
dispatch(setValues(updatedValues));
|
|
1663
|
+
}
|
|
1664
|
+
// Validate if needed
|
|
1665
|
+
if (validate) {
|
|
1666
|
+
const validationErrors = validateWidget(newValue, config['widget-data-validation'], config['widget-required']);
|
|
1667
|
+
dispatch(setError({ widgetId, errors: validationErrors }));
|
|
1668
|
+
}
|
|
1669
|
+
// Call custom onChange if provided
|
|
1670
|
+
if (onValueChange) {
|
|
1671
|
+
onValueChange(widgetId, newValue);
|
|
1672
|
+
}
|
|
1673
|
+
// Publish widget:change event
|
|
1674
|
+
// Skip publishing for last-level geo widgets (no child widgets waiting)
|
|
1675
|
+
const geoConfig = config['widget-geo-config'];
|
|
1676
|
+
const isLastLevelGeo = geoConfig?.isLastLevel === true;
|
|
1677
|
+
if (eventBus && !isLastLevelGeo) {
|
|
1678
|
+
eventBus.publish({
|
|
1679
|
+
type: 'widget:change',
|
|
1680
|
+
widgetId,
|
|
1681
|
+
value: newValue,
|
|
1682
|
+
timestamp: Date.now(),
|
|
1683
|
+
});
|
|
1684
|
+
}
|
|
1685
|
+
}, [config, widgetId, dispatch, onValueChange, eventBus] // Removed 'values' to prevent stale closures
|
|
1686
|
+
);
|
|
1687
|
+
// Handle blur
|
|
1688
|
+
const handleBlur = useCallback(() => {
|
|
1689
|
+
dispatch(setTouched({ widgetId, touched: true }));
|
|
1690
|
+
// Validate on blur
|
|
1691
|
+
const validationErrors = validateWidget(currentValue, config['widget-data-validation'], config['widget-required']);
|
|
1692
|
+
dispatch(setError({ widgetId, errors: validationErrors }));
|
|
1693
|
+
// Publish widget:blur event
|
|
1694
|
+
if (eventBus) {
|
|
1695
|
+
eventBus.publish({
|
|
1696
|
+
type: 'widget:blur',
|
|
1697
|
+
widgetId,
|
|
1698
|
+
value: currentValue,
|
|
1699
|
+
timestamp: Date.now(),
|
|
1700
|
+
});
|
|
1701
|
+
}
|
|
1702
|
+
}, [currentValue, config, widgetId, dispatch, eventBus]);
|
|
1703
|
+
// Get field value helper
|
|
1704
|
+
const getFieldValue = useCallback((path) => {
|
|
1705
|
+
return getWidgetValue(values, path, '');
|
|
1706
|
+
}, [values]);
|
|
1707
|
+
// Conditional visibility and enablement
|
|
1708
|
+
const isVisible = useMemo(() => {
|
|
1709
|
+
// Layout widgets are always visible unless explicitly hidden
|
|
1710
|
+
if (isLayoutWidget && !config['widget-data-options']?.condition) {
|
|
1711
|
+
return true;
|
|
1712
|
+
}
|
|
1713
|
+
return shouldShowWidget(config['widget-data-options'], values);
|
|
1714
|
+
}, [config['widget-data-options'], values, isLayoutWidget]);
|
|
1715
|
+
const isEnabled = useMemo(() => {
|
|
1716
|
+
// Layout widgets are always enabled (they don't have input state)
|
|
1717
|
+
if (isLayoutWidget) {
|
|
1718
|
+
return true;
|
|
1719
|
+
}
|
|
1720
|
+
if (config['widget-readonly']) {
|
|
1721
|
+
return false;
|
|
1722
|
+
}
|
|
1723
|
+
return shouldEnableWidget(config['widget-data-options'], values);
|
|
1724
|
+
}, [config['widget-readonly'], config['widget-data-options'], values, isLayoutWidget]);
|
|
1725
|
+
// Format value for display
|
|
1726
|
+
const formattedValue = useMemo(() => {
|
|
1727
|
+
if (!config['widget-data-format']) {
|
|
1728
|
+
return currentValue;
|
|
1729
|
+
}
|
|
1730
|
+
return formatValue(currentValue, config['widget-data-format'], config.widget);
|
|
1731
|
+
}, [currentValue, config]);
|
|
1732
|
+
// Track readonly state explicitly to detect changes
|
|
1733
|
+
// Use JSON.stringify to create a stable reference for the dependency array
|
|
1734
|
+
const isReadonly = config['widget-readonly'] ?? false;
|
|
1735
|
+
const dataSource = config['widget-data-source'];
|
|
1736
|
+
const geoConfig = config['widget-geo-config'];
|
|
1737
|
+
// Use ref to store handler to avoid stale closures
|
|
1738
|
+
const handlerRef = useRef(dataSourceRequestHandler);
|
|
1739
|
+
useEffect(() => {
|
|
1740
|
+
handlerRef.current = dataSourceRequestHandler;
|
|
1741
|
+
}, [dataSourceRequestHandler]);
|
|
1742
|
+
// Create a stable key for the config to detect changes
|
|
1743
|
+
// This ensures the effect runs when widget-readonly changes
|
|
1744
|
+
const apiService = dataSource?.type === 'api' ? dataSource.service : '';
|
|
1745
|
+
const apiEndpoint = dataSource?.type === 'api' ? dataSource.endpoint : '';
|
|
1746
|
+
const configKey = `${widgetId}-${isReadonly}-${dataSource?.type || 'none'}-${apiService}-${apiEndpoint}`;
|
|
1747
|
+
// Handle data source loading
|
|
1748
|
+
useEffect(() => {
|
|
1749
|
+
if (!dataSource) {
|
|
1750
|
+
return;
|
|
1751
|
+
}
|
|
1752
|
+
// For API data sources, check if widget is readonly
|
|
1753
|
+
// According to PRD: "Level 1 geo widgets load on widget mount or when entering edit mode"
|
|
1754
|
+
// So we should only load API data sources when widget is NOT readonly
|
|
1755
|
+
if (dataSource.type === 'api' && isReadonly) {
|
|
1756
|
+
return;
|
|
1757
|
+
}
|
|
1758
|
+
// For widgets with dependencies, check if dependency value exists
|
|
1759
|
+
if (dataSource.type === 'api' && dataSource.dependsOn) {
|
|
1760
|
+
// Check if dependency value exists
|
|
1761
|
+
let depValue = null;
|
|
1762
|
+
if (dataSource.dependsOn.includes('.')) {
|
|
1763
|
+
depValue = getWidgetValue(values, dataSource.dependsOn, '');
|
|
1764
|
+
}
|
|
1765
|
+
else {
|
|
1766
|
+
depValue = values[dataSource.dependsOn];
|
|
1767
|
+
}
|
|
1768
|
+
// If dependency is empty, don't load (will load when dependency has value)
|
|
1769
|
+
if (depValue === null || depValue === undefined || depValue === '') {
|
|
1770
|
+
return;
|
|
1771
|
+
}
|
|
1772
|
+
}
|
|
1773
|
+
const loadDataSource = async () => {
|
|
1774
|
+
// Get current handler from ref to avoid stale closures
|
|
1775
|
+
// Also check prop directly as fallback (for initial render or when ref not updated yet)
|
|
1776
|
+
const currentHandler = handlerRef.current || dataSourceRequestHandler;
|
|
1777
|
+
// Only check for handler when we actually need it (inside the async function)
|
|
1778
|
+
// This avoids false errors during React Strict Mode double-invocation
|
|
1779
|
+
// If handler isn't available yet, silently skip - React will retry when it's ready
|
|
1780
|
+
try {
|
|
1781
|
+
if (dataSource.type === 'api' && !currentHandler) {
|
|
1782
|
+
// Silently skip if handler isn't available yet (common during React Strict Mode double-invocation)
|
|
1783
|
+
// React will call this effect again when the handler is ready
|
|
1784
|
+
return;
|
|
1785
|
+
}
|
|
1786
|
+
dispatch(setLoading({ widgetId, loading: true }));
|
|
1787
|
+
let data = [];
|
|
1788
|
+
if (dataSource.type === 'static') {
|
|
1789
|
+
data = getStaticDataSource(dataSource);
|
|
1790
|
+
}
|
|
1791
|
+
else if (dataSource.type === 'api') {
|
|
1792
|
+
if (!currentHandler) {
|
|
1793
|
+
// Silently skip if handler isn't available yet
|
|
1794
|
+
dispatch(setLoading({ widgetId, loading: false }));
|
|
1795
|
+
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1796
|
+
return;
|
|
1797
|
+
}
|
|
1798
|
+
// Extract level_id from widget-geo-config.level if available
|
|
1799
|
+
const levelId = geoConfig?.level;
|
|
1800
|
+
data = await getApiDataSource(dataSource, values, currentHandler, levelId);
|
|
1801
|
+
}
|
|
1802
|
+
else if (dataSource.type === 'schema') {
|
|
1803
|
+
data = getSchemaDataSource(dataSource, schemaData || {});
|
|
1804
|
+
}
|
|
1805
|
+
// Transform to { value, label } format
|
|
1806
|
+
// For geo widgets, default to level_value_id and level_value_mnemonic
|
|
1807
|
+
let valueKey;
|
|
1808
|
+
let labelKey;
|
|
1809
|
+
if (dataSource.type === 'static') {
|
|
1810
|
+
valueKey = undefined;
|
|
1811
|
+
labelKey = undefined;
|
|
1812
|
+
}
|
|
1813
|
+
else if (geoConfig) {
|
|
1814
|
+
// Geo widgets: default to level_value_id and level_value_mnemonic
|
|
1815
|
+
valueKey = dataSource.valueKey || 'level_value_id';
|
|
1816
|
+
labelKey = dataSource.labelKey || 'level_value_mnemonic';
|
|
1817
|
+
}
|
|
1818
|
+
else {
|
|
1819
|
+
// Non-geo widgets: use specified keys or undefined
|
|
1820
|
+
valueKey = dataSource.valueKey;
|
|
1821
|
+
labelKey = dataSource.labelKey;
|
|
1822
|
+
}
|
|
1823
|
+
const transformed = transformDataSourceOptions(data, valueKey, labelKey);
|
|
1824
|
+
dispatch(setDataSource({ widgetId, data: transformed }));
|
|
1825
|
+
}
|
|
1826
|
+
catch (error) {
|
|
1827
|
+
console.error(`[useBaseWidget] ERROR loading data source for ${widgetId}:`, error);
|
|
1828
|
+
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1829
|
+
}
|
|
1830
|
+
finally {
|
|
1831
|
+
dispatch(setLoading({ widgetId, loading: false }));
|
|
1832
|
+
}
|
|
1833
|
+
};
|
|
1834
|
+
loadDataSource();
|
|
1835
|
+
// Use configKey to ensure effect runs when readonly state changes
|
|
1836
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1837
|
+
}, [configKey, values, dataSourceRequestHandler, schemaData, widgetId, dispatch]);
|
|
1838
|
+
return {
|
|
1839
|
+
widgetId,
|
|
1840
|
+
value: currentValue,
|
|
1841
|
+
formattedValue,
|
|
1842
|
+
error: errors,
|
|
1843
|
+
touched,
|
|
1844
|
+
loading,
|
|
1845
|
+
isVisible,
|
|
1846
|
+
isEnabled,
|
|
1847
|
+
onChange: handleChange,
|
|
1848
|
+
onBlur: handleBlur,
|
|
1849
|
+
setError: (errors) => dispatch(setError({ widgetId, errors })),
|
|
1850
|
+
getFieldValue,
|
|
1851
|
+
dataSourceOptions,
|
|
1852
|
+
config,
|
|
1853
|
+
};
|
|
1854
|
+
};
|
|
1855
|
+
|
|
1856
|
+
/**
|
|
1857
|
+
* Hook for general widget cascade functionality
|
|
1858
|
+
* Handles listening to parent widget changes and reloading data sources
|
|
1859
|
+
*/
|
|
1860
|
+
const useWidgetCascade = (options) => {
|
|
1861
|
+
const { config, dataSourceRequestHandler, values } = options;
|
|
1862
|
+
const dispatch = useDispatch();
|
|
1863
|
+
const eventBus = useWidgetEventBus();
|
|
1864
|
+
const widgetId = config['widget-id'];
|
|
1865
|
+
const cascadeConfig = config['widget-cascade'];
|
|
1866
|
+
const dataSource = config['widget-data-source'];
|
|
1867
|
+
const valuesRef = useRef(values);
|
|
1868
|
+
const handlerRef = useRef(dataSourceRequestHandler);
|
|
1869
|
+
// Keep refs updated
|
|
1870
|
+
useEffect(() => {
|
|
1871
|
+
valuesRef.current = values;
|
|
1872
|
+
handlerRef.current = dataSourceRequestHandler;
|
|
1873
|
+
}, [values, dataSourceRequestHandler]);
|
|
1874
|
+
useEffect(() => {
|
|
1875
|
+
if (!cascadeConfig || !eventBus || !dataSource || dataSource.type !== 'api') {
|
|
1876
|
+
return;
|
|
1877
|
+
}
|
|
1878
|
+
const { listenTo, onEvent = 'widget:change', clearOnChange = true, reloadOnChange = true, debounce, throttle } = cascadeConfig;
|
|
1879
|
+
if (listenTo.length === 0) {
|
|
1880
|
+
return;
|
|
1881
|
+
}
|
|
1882
|
+
const handleEvent = async (event) => {
|
|
1883
|
+
// Check if this event is from a parent we're listening to
|
|
1884
|
+
if (!listenTo.includes(event.widgetId)) {
|
|
1885
|
+
return;
|
|
1886
|
+
}
|
|
1887
|
+
const currentValues = valuesRef.current;
|
|
1888
|
+
const currentHandler = handlerRef.current;
|
|
1889
|
+
// Clear value if configured
|
|
1890
|
+
if (clearOnChange) {
|
|
1891
|
+
dispatch(setValue({ widgetId, value: undefined }));
|
|
1892
|
+
}
|
|
1893
|
+
// Reload data source if configured
|
|
1894
|
+
if (reloadOnChange && currentHandler) {
|
|
1895
|
+
try {
|
|
1896
|
+
const data = await getApiDataSource(dataSource, currentValues, currentHandler);
|
|
1897
|
+
// Transform to { value, label } format
|
|
1898
|
+
const valueKey = dataSource.valueKey;
|
|
1899
|
+
const labelKey = dataSource.labelKey;
|
|
1900
|
+
const transformed = transformDataSourceOptions(data, valueKey, labelKey);
|
|
1901
|
+
dispatch(setDataSource({ widgetId, data: transformed }));
|
|
1902
|
+
}
|
|
1903
|
+
catch (error) {
|
|
1904
|
+
console.error('Error reloading data source in cascade:', error);
|
|
1905
|
+
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1906
|
+
}
|
|
1907
|
+
}
|
|
1908
|
+
};
|
|
1909
|
+
// Subscribe to events
|
|
1910
|
+
const unsubscribe = eventBus.subscribe(onEvent, handleEvent, { debounce, throttle });
|
|
1911
|
+
return () => {
|
|
1912
|
+
unsubscribe();
|
|
1913
|
+
};
|
|
1914
|
+
}, [cascadeConfig, eventBus, dataSource, widgetId, dispatch]);
|
|
1915
|
+
};
|
|
2027
1916
|
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
1917
|
+
/**
|
|
1918
|
+
* Geo Hierarchy Builder
|
|
1919
|
+
* Manages geo hierarchy state and builds hierarchy JSON structure
|
|
1920
|
+
*/
|
|
1921
|
+
class GeoHierarchyBuilder {
|
|
1922
|
+
constructor() {
|
|
1923
|
+
this.hierarchies = new Map();
|
|
1924
|
+
}
|
|
1925
|
+
/**
|
|
1926
|
+
* Get or create hierarchy state for a group
|
|
1927
|
+
*/
|
|
1928
|
+
getHierarchy(groupId = 'default') {
|
|
1929
|
+
if (!this.hierarchies.has(groupId)) {
|
|
1930
|
+
this.hierarchies.set(groupId, {
|
|
1931
|
+
levels: new Map(),
|
|
1932
|
+
order: [],
|
|
1933
|
+
});
|
|
1934
|
+
}
|
|
1935
|
+
return this.hierarchies.get(groupId);
|
|
1936
|
+
}
|
|
1937
|
+
/**
|
|
1938
|
+
* Add a level to the hierarchy
|
|
1939
|
+
*/
|
|
1940
|
+
addLevel(level, level_value_id, level_value_mnemonic, groupId = 'default') {
|
|
1941
|
+
const hierarchy = this.getHierarchy(groupId);
|
|
1942
|
+
// If level already exists, remove it and everything after it
|
|
1943
|
+
const existingIndex = hierarchy.order.indexOf(level);
|
|
1944
|
+
if (existingIndex >= 0) {
|
|
1945
|
+
// Remove this level and all subsequent levels
|
|
1946
|
+
const levelsToRemove = hierarchy.order.slice(existingIndex);
|
|
1947
|
+
levelsToRemove.forEach((l) => {
|
|
1948
|
+
hierarchy.levels.delete(l);
|
|
1949
|
+
hierarchy.order = hierarchy.order.filter((o) => o !== l);
|
|
1950
|
+
});
|
|
1951
|
+
}
|
|
1952
|
+
// Add new level
|
|
1953
|
+
hierarchy.levels.set(level, {
|
|
1954
|
+
level,
|
|
1955
|
+
level_value_id,
|
|
1956
|
+
level_value_mnemonic,
|
|
1957
|
+
});
|
|
1958
|
+
hierarchy.order.push(level);
|
|
1959
|
+
}
|
|
1960
|
+
/**
|
|
1961
|
+
* Remove a level and all levels below it
|
|
1962
|
+
*/
|
|
1963
|
+
removeLevelAndBelow(level, groupId = 'default') {
|
|
1964
|
+
const hierarchy = this.getHierarchy(groupId);
|
|
1965
|
+
const index = hierarchy.order.indexOf(level);
|
|
1966
|
+
if (index >= 0) {
|
|
1967
|
+
// Remove this level and all subsequent levels
|
|
1968
|
+
const levelsToRemove = hierarchy.order.slice(index);
|
|
1969
|
+
levelsToRemove.forEach((l) => {
|
|
1970
|
+
hierarchy.levels.delete(l);
|
|
1971
|
+
hierarchy.order = hierarchy.order.filter((o) => o !== l);
|
|
1972
|
+
});
|
|
1973
|
+
}
|
|
1974
|
+
}
|
|
1975
|
+
/**
|
|
1976
|
+
* Build hierarchy JSON structure
|
|
1977
|
+
*/
|
|
1978
|
+
buildHierarchyJson(groupId = 'default') {
|
|
1979
|
+
const hierarchy = this.getHierarchy(groupId);
|
|
1980
|
+
if (hierarchy.order.length === 0) {
|
|
1981
|
+
return null;
|
|
1982
|
+
}
|
|
1983
|
+
const hierarchyArray = hierarchy.order.map((level) => {
|
|
1984
|
+
const data = hierarchy.levels.get(level);
|
|
1985
|
+
return {
|
|
1986
|
+
level: data.level,
|
|
1987
|
+
level_value_id: data.level_value_id,
|
|
1988
|
+
level_value_mnemonic: data.level_value_mnemonic,
|
|
1989
|
+
};
|
|
1990
|
+
});
|
|
1991
|
+
const lowestLevel = hierarchy.order[hierarchy.order.length - 1];
|
|
1992
|
+
const lowestLevelData = hierarchy.levels.get(lowestLevel);
|
|
1993
|
+
return {
|
|
1994
|
+
geo_lowest_level_value_id: lowestLevelData.level_value_id,
|
|
1995
|
+
geo_code_hierarchy_json: {
|
|
1996
|
+
hierarchy: hierarchyArray,
|
|
1997
|
+
lowest_level_value_id: lowestLevelData.level_value_id,
|
|
1998
|
+
},
|
|
1999
|
+
};
|
|
2000
|
+
}
|
|
2001
|
+
/**
|
|
2002
|
+
* Clear hierarchy for a group
|
|
2003
|
+
*/
|
|
2004
|
+
clear(groupId = 'default') {
|
|
2005
|
+
this.hierarchies.delete(groupId);
|
|
2006
|
+
}
|
|
2007
|
+
/**
|
|
2008
|
+
* Clear all hierarchies
|
|
2009
|
+
*/
|
|
2010
|
+
clearAll() {
|
|
2011
|
+
this.hierarchies.clear();
|
|
2012
|
+
}
|
|
2013
|
+
/**
|
|
2014
|
+
* Get current levels for a group
|
|
2015
|
+
*/
|
|
2016
|
+
getLevels(groupId = 'default') {
|
|
2017
|
+
const hierarchy = this.getHierarchy(groupId);
|
|
2018
|
+
return hierarchy.order.map((level) => hierarchy.levels.get(level));
|
|
2019
|
+
}
|
|
2034
2020
|
}
|
|
2021
|
+
// Singleton instance
|
|
2022
|
+
const geoHierarchyBuilder = new GeoHierarchyBuilder();
|
|
2035
2023
|
|
|
2036
|
-
|
|
2024
|
+
// Define stable empty array to avoid selector reference issues
|
|
2025
|
+
const EMPTY_DATA_SOURCE = [];
|
|
2026
|
+
/**
|
|
2027
|
+
* Hook for geo widget cascade functionality
|
|
2028
|
+
* Handles geo hierarchy building and cascade behavior
|
|
2029
|
+
*/
|
|
2030
|
+
const useGeoWidgetCascade = (options) => {
|
|
2031
|
+
const { config, dataSourceRequestHandler, values } = options;
|
|
2032
|
+
const dispatch = useDispatch();
|
|
2033
|
+
const eventBus = useWidgetEventBus();
|
|
2034
|
+
const widgetId = config['widget-id'];
|
|
2035
|
+
const geoConfig = config['widget-geo-config'];
|
|
2036
|
+
const dataSource = config['widget-data-source'];
|
|
2037
|
+
const dataPath = config['widget-data-path'];
|
|
2038
|
+
const valuesRef = useRef(values);
|
|
2039
|
+
const handlerRef = useRef(dataSourceRequestHandler);
|
|
2040
|
+
// Keep refs updated
|
|
2041
|
+
useEffect(() => {
|
|
2042
|
+
valuesRef.current = values;
|
|
2043
|
+
handlerRef.current = dataSourceRequestHandler;
|
|
2044
|
+
}, [values, dataSourceRequestHandler]);
|
|
2045
|
+
// Get current value and data source options
|
|
2046
|
+
const currentValue = useSelector((state) => {
|
|
2047
|
+
if (!dataPath) {
|
|
2048
|
+
return state.widget.values[widgetId];
|
|
2049
|
+
}
|
|
2050
|
+
return getWidgetValue(state.widget.values, dataPath, widgetId);
|
|
2051
|
+
});
|
|
2052
|
+
// Memoize selector to avoid returning new array reference
|
|
2053
|
+
const dataSourceOptions = useSelector((state) => state.widget.dataSources[widgetId] ?? EMPTY_DATA_SOURCE);
|
|
2054
|
+
useEffect(() => {
|
|
2055
|
+
if (!geoConfig || !eventBus || !dataSource || dataSource.type !== 'api') {
|
|
2056
|
+
return;
|
|
2057
|
+
}
|
|
2058
|
+
const { level, isLastLevel, parentWidgetId } = geoConfig;
|
|
2059
|
+
// Listen to parent widget changes
|
|
2060
|
+
if (parentWidgetId) {
|
|
2061
|
+
const handleParentChange = async (event) => {
|
|
2062
|
+
if (event.widgetId !== parentWidgetId) {
|
|
2063
|
+
return;
|
|
2064
|
+
}
|
|
2065
|
+
// CRITICAL: Use a small delay to ensure Redux state has been updated
|
|
2066
|
+
// This prevents reading stale values from valuesRef
|
|
2067
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
2068
|
+
const currentValues = valuesRef.current;
|
|
2069
|
+
const currentHandler = handlerRef.current;
|
|
2070
|
+
// CRITICAL: Get the parent value from Redux state, not from the event
|
|
2071
|
+
// The event.value might be stale, but Redux state is always current
|
|
2072
|
+
const parentValue = currentValues[parentWidgetId];
|
|
2073
|
+
// Remove this level and all below from hierarchy
|
|
2074
|
+
geoHierarchyBuilder.removeLevelAndBelow(level);
|
|
2075
|
+
// Clear this widget's value
|
|
2076
|
+
// CRITICAL: Only dispatch setValue for THIS widget, not for parent or other widgets
|
|
2077
|
+
// setWidgetValue returns the entire updated state, but we only want to update this widget
|
|
2078
|
+
if (dataPath) {
|
|
2079
|
+
const updatedValues = setWidgetValue(currentValues, dataPath, widgetId, undefined);
|
|
2080
|
+
// Only dispatch setValue for this widget's widgetId, not for parent or other widgets
|
|
2081
|
+
// This prevents accidentally overwriting the parent widget's value
|
|
2082
|
+
// The setWidgetValue function updates the nested structure, but we only want to
|
|
2083
|
+
// update the top-level widgetId key, not other keys that might be in updatedValues
|
|
2084
|
+
const newWidgetValue = updatedValues[widgetId];
|
|
2085
|
+
if (newWidgetValue !== undefined) {
|
|
2086
|
+
dispatch(setValue({ widgetId, value: newWidgetValue }));
|
|
2087
|
+
}
|
|
2088
|
+
else {
|
|
2089
|
+
// If widgetId is not in updatedValues, the value was set in a nested path
|
|
2090
|
+
// In this case, we need to use setValues to update the entire structure
|
|
2091
|
+
// But we need to be careful not to overwrite the parent widget's value
|
|
2092
|
+
// Only update keys that are related to this widget's dataPath
|
|
2093
|
+
const dataPathStr = typeof dataPath === 'string' ? dataPath : '';
|
|
2094
|
+
if (dataPathStr && !dataPathStr.startsWith(parentWidgetId + '.')) {
|
|
2095
|
+
// Only update if dataPath doesn't start with parentWidgetId
|
|
2096
|
+
// This ensures we don't accidentally overwrite the parent widget's value
|
|
2097
|
+
dispatch(setValue({ widgetId, value: undefined }));
|
|
2098
|
+
}
|
|
2099
|
+
}
|
|
2100
|
+
}
|
|
2101
|
+
else {
|
|
2102
|
+
dispatch(setValue({ widgetId, value: undefined }));
|
|
2103
|
+
}
|
|
2104
|
+
// Reload data source with new parent value
|
|
2105
|
+
// CRITICAL: Use parentValue from Redux, not event.value
|
|
2106
|
+
if (currentHandler && parentValue !== null && parentValue !== undefined) {
|
|
2107
|
+
try {
|
|
2108
|
+
// Merge the new parent value into current values for the API call
|
|
2109
|
+
// This ensures getApiDataSource can find the dependency value
|
|
2110
|
+
const updatedValues = {
|
|
2111
|
+
...currentValues,
|
|
2112
|
+
[parentWidgetId]: parentValue, // Use Redux value, not event.value
|
|
2113
|
+
};
|
|
2114
|
+
// Extract level_id from widget-geo-config.level
|
|
2115
|
+
const levelId = geoConfig.level;
|
|
2116
|
+
const data = await getApiDataSource(dataSource, updatedValues, currentHandler, levelId);
|
|
2117
|
+
// Transform to { value, label } format
|
|
2118
|
+
const valueKey = dataSource.valueKey || 'level_value_id';
|
|
2119
|
+
const labelKey = dataSource.labelKey || 'level_value_mnemonic';
|
|
2120
|
+
const transformed = transformDataSourceOptions(data, valueKey, labelKey);
|
|
2121
|
+
dispatch(setDataSource({ widgetId, data: transformed }));
|
|
2122
|
+
}
|
|
2123
|
+
catch (error) {
|
|
2124
|
+
console.error('Error reloading geo data source:', error);
|
|
2125
|
+
dispatch(setDataSource({ widgetId, data: [] }));
|
|
2126
|
+
}
|
|
2127
|
+
}
|
|
2128
|
+
else {
|
|
2129
|
+
// If parent value is cleared, clear the data source
|
|
2130
|
+
dispatch(setDataSource({ widgetId, data: [] }));
|
|
2131
|
+
}
|
|
2132
|
+
};
|
|
2133
|
+
const unsubscribe = eventBus.subscribe('widget:change', handleParentChange);
|
|
2134
|
+
return () => {
|
|
2135
|
+
unsubscribe();
|
|
2136
|
+
};
|
|
2137
|
+
}
|
|
2138
|
+
}, [geoConfig, eventBus, dataSource, widgetId, dataPath, dispatch]);
|
|
2139
|
+
// Handle value changes to build hierarchy
|
|
2140
|
+
useEffect(() => {
|
|
2141
|
+
if (!geoConfig) {
|
|
2142
|
+
return;
|
|
2143
|
+
}
|
|
2144
|
+
// Skip if value is empty/null (but allow 0 and false)
|
|
2145
|
+
if (currentValue === null || currentValue === undefined || currentValue === '') {
|
|
2146
|
+
// If value was cleared, remove this level and below from hierarchy
|
|
2147
|
+
const { level } = geoConfig;
|
|
2148
|
+
geoHierarchyBuilder.removeLevelAndBelow(level);
|
|
2149
|
+
return;
|
|
2150
|
+
}
|
|
2151
|
+
const { level, isLastLevel } = geoConfig;
|
|
2152
|
+
// For last level, check if hierarchy is already built to prevent endless loops
|
|
2153
|
+
if (isLastLevel && dataPath) {
|
|
2154
|
+
const currentHierarchy = getWidgetValue(valuesRef.current, dataPath, widgetId);
|
|
2155
|
+
// If hierarchy JSON is already set and matches current value, skip rebuilding
|
|
2156
|
+
if (currentHierarchy && typeof currentHierarchy === 'object' && currentHierarchy.geo_code_hierarchy_json) {
|
|
2157
|
+
// Check if the lowest level value matches
|
|
2158
|
+
const currentLevelValue = typeof currentValue === 'object'
|
|
2159
|
+
? (currentValue.level_value_id || currentValue.id || currentValue.value)
|
|
2160
|
+
: currentValue;
|
|
2161
|
+
if (currentHierarchy.geo_lowest_level_value_id === currentLevelValue) {
|
|
2162
|
+
return; // Hierarchy already built for this value, skip
|
|
2163
|
+
}
|
|
2164
|
+
}
|
|
2165
|
+
}
|
|
2166
|
+
// Extract level_value_id and level_value_mnemonic from current value
|
|
2167
|
+
// The value could be the ID itself or an object with id/name
|
|
2168
|
+
let level_value_id;
|
|
2169
|
+
let level_value_mnemonic;
|
|
2170
|
+
if (typeof currentValue === 'string' || typeof currentValue === 'number') {
|
|
2171
|
+
// Value is just the ID, need to find mnemonic from data source
|
|
2172
|
+
level_value_id = String(currentValue);
|
|
2173
|
+
// Try to get mnemonic from data source options
|
|
2174
|
+
const option = dataSourceOptions.find((opt) => opt.value === currentValue);
|
|
2175
|
+
level_value_mnemonic = option?.label || String(currentValue);
|
|
2176
|
+
}
|
|
2177
|
+
else if (currentValue && typeof currentValue === 'object') {
|
|
2178
|
+
level_value_id = currentValue.level_value_id || currentValue.id || currentValue.value;
|
|
2179
|
+
level_value_mnemonic = currentValue.level_value_mnemonic || currentValue.name || currentValue.label;
|
|
2180
|
+
}
|
|
2181
|
+
else {
|
|
2182
|
+
return;
|
|
2183
|
+
}
|
|
2184
|
+
// When a widget's own value changes, remove this level and all below from hierarchy first
|
|
2185
|
+
// This ensures that when level 1 changes, we clear the hierarchy and rebuild from scratch
|
|
2186
|
+
// The addLevel method already handles removing existing levels, but we explicitly clear to be safe
|
|
2187
|
+
geoHierarchyBuilder.removeLevelAndBelow(level);
|
|
2188
|
+
// Add level to hierarchy
|
|
2189
|
+
geoHierarchyBuilder.addLevel(level, level_value_id, level_value_mnemonic);
|
|
2190
|
+
// If this is the last level, build and store hierarchy JSON
|
|
2191
|
+
if (isLastLevel && dataPath) {
|
|
2192
|
+
const hierarchyJson = geoHierarchyBuilder.buildHierarchyJson();
|
|
2193
|
+
if (hierarchyJson) {
|
|
2194
|
+
// Store both geo_lowest_level_value_id and geo_code_hierarchy_json
|
|
2195
|
+
const updatedValues = setWidgetValue(valuesRef.current, dataPath, widgetId, {
|
|
2196
|
+
geo_lowest_level_value_id: hierarchyJson.geo_lowest_level_value_id,
|
|
2197
|
+
geo_code_hierarchy_json: hierarchyJson.geo_code_hierarchy_json,
|
|
2198
|
+
});
|
|
2199
|
+
Object.entries(updatedValues).forEach(([key, value]) => {
|
|
2200
|
+
dispatch(setValue({ widgetId: key, value }));
|
|
2201
|
+
});
|
|
2202
|
+
}
|
|
2203
|
+
}
|
|
2204
|
+
}, [geoConfig, currentValue, widgetId, dataPath, dispatch, dataSourceOptions]);
|
|
2205
|
+
};
|
|
2037
2206
|
|
|
2038
2207
|
class WidgetRegistry {
|
|
2039
2208
|
constructor() {
|
|
@@ -2108,178 +2277,12 @@ class WidgetRegistry {
|
|
|
2108
2277
|
return React.createElement(entry.component, {
|
|
2109
2278
|
config,
|
|
2110
2279
|
...context,
|
|
2111
|
-
...entry.defaultProps,
|
|
2112
|
-
});
|
|
2113
|
-
}
|
|
2114
|
-
}
|
|
2115
|
-
// Singleton instance
|
|
2116
|
-
const widgetRegistry = new WidgetRegistry();
|
|
2117
|
-
|
|
2118
|
-
/**
|
|
2119
|
-
* Widget Event Bus
|
|
2120
|
-
* Provides a publish/subscribe mechanism for widget communication
|
|
2121
|
-
* Supports debounce and throttle for performance optimization
|
|
2122
|
-
*/
|
|
2123
|
-
class WidgetEventBus {
|
|
2124
|
-
constructor() {
|
|
2125
|
-
this.subscriptions = new Map();
|
|
2126
|
-
this.throttleTimers = new Map();
|
|
2127
|
-
}
|
|
2128
|
-
/**
|
|
2129
|
-
* Subscribe to an event type
|
|
2130
|
-
* @param eventType The type of event to listen to
|
|
2131
|
-
* @param handler The handler function
|
|
2132
|
-
* @param options Debounce/throttle options
|
|
2133
|
-
* @returns Unsubscribe function
|
|
2134
|
-
*/
|
|
2135
|
-
subscribe(eventType, handler, options) {
|
|
2136
|
-
if (!this.subscriptions.has(eventType)) {
|
|
2137
|
-
this.subscriptions.set(eventType, new Map());
|
|
2138
|
-
}
|
|
2139
|
-
const eventSubscriptions = this.subscriptions.get(eventType);
|
|
2140
|
-
const subscriptionId = `${Date.now()}-${Math.random()}`;
|
|
2141
|
-
const subscription = {
|
|
2142
|
-
handler,
|
|
2143
|
-
debounce: options?.debounce,
|
|
2144
|
-
throttle: options?.throttle,
|
|
2145
|
-
};
|
|
2146
|
-
if (!eventSubscriptions.has(subscriptionId)) {
|
|
2147
|
-
eventSubscriptions.set(subscriptionId, []);
|
|
2148
|
-
}
|
|
2149
|
-
eventSubscriptions.get(subscriptionId).push(subscription);
|
|
2150
|
-
// Return unsubscribe function
|
|
2151
|
-
return () => {
|
|
2152
|
-
const subs = eventSubscriptions.get(subscriptionId);
|
|
2153
|
-
if (subs) {
|
|
2154
|
-
const index = subs.indexOf(subscription);
|
|
2155
|
-
if (index > -1) {
|
|
2156
|
-
subs.splice(index, 1);
|
|
2157
|
-
if (subs.length === 0) {
|
|
2158
|
-
eventSubscriptions.delete(subscriptionId);
|
|
2159
|
-
}
|
|
2160
|
-
}
|
|
2161
|
-
}
|
|
2162
|
-
};
|
|
2163
|
-
}
|
|
2164
|
-
/**
|
|
2165
|
-
* Publish an event
|
|
2166
|
-
* @param event The event to publish
|
|
2167
|
-
*/
|
|
2168
|
-
publish(event) {
|
|
2169
|
-
const eventSubscriptions = this.subscriptions.get(event.type);
|
|
2170
|
-
if (!eventSubscriptions) {
|
|
2171
|
-
return;
|
|
2172
|
-
}
|
|
2173
|
-
eventSubscriptions.forEach((subscriptions) => {
|
|
2174
|
-
subscriptions.forEach((subscription) => {
|
|
2175
|
-
this.executeHandler(subscription, event);
|
|
2176
|
-
});
|
|
2177
|
-
});
|
|
2178
|
-
}
|
|
2179
|
-
/**
|
|
2180
|
-
* Execute handler with debounce/throttle support
|
|
2181
|
-
*/
|
|
2182
|
-
executeHandler(subscription, event) {
|
|
2183
|
-
const { handler, debounce, throttle } = subscription;
|
|
2184
|
-
// Clear existing debounce timer if any
|
|
2185
|
-
if (subscription.debounceTimer) {
|
|
2186
|
-
clearTimeout(subscription.debounceTimer);
|
|
2187
|
-
}
|
|
2188
|
-
// Handle throttle
|
|
2189
|
-
if (throttle && throttle > 0) {
|
|
2190
|
-
const throttleKey = `${event.type}-${event.widgetId}`;
|
|
2191
|
-
const now = Date.now();
|
|
2192
|
-
const lastCallTime = subscription.lastCallTime || 0;
|
|
2193
|
-
if (now - lastCallTime < throttle) {
|
|
2194
|
-
// Still in throttle period, schedule for later
|
|
2195
|
-
if (this.throttleTimers.has(throttleKey)) {
|
|
2196
|
-
return; // Already scheduled
|
|
2197
|
-
}
|
|
2198
|
-
const remainingTime = throttle - (now - lastCallTime);
|
|
2199
|
-
const timer = setTimeout(() => {
|
|
2200
|
-
subscription.lastCallTime = Date.now();
|
|
2201
|
-
handler(event);
|
|
2202
|
-
this.throttleTimers.delete(throttleKey);
|
|
2203
|
-
}, remainingTime);
|
|
2204
|
-
this.throttleTimers.set(throttleKey, timer);
|
|
2205
|
-
return;
|
|
2206
|
-
}
|
|
2207
|
-
subscription.lastCallTime = now;
|
|
2208
|
-
}
|
|
2209
|
-
// Handle debounce
|
|
2210
|
-
if (debounce && debounce > 0) {
|
|
2211
|
-
subscription.debounceTimer = setTimeout(() => {
|
|
2212
|
-
handler(event);
|
|
2213
|
-
subscription.debounceTimer = undefined;
|
|
2214
|
-
}, debounce);
|
|
2215
|
-
return;
|
|
2216
|
-
}
|
|
2217
|
-
// Execute immediately if no debounce/throttle
|
|
2218
|
-
handler(event);
|
|
2219
|
-
}
|
|
2220
|
-
/**
|
|
2221
|
-
* Clear all subscriptions
|
|
2222
|
-
*/
|
|
2223
|
-
clear() {
|
|
2224
|
-
// Clear all timers
|
|
2225
|
-
this.subscriptions.forEach((eventSubscriptions) => {
|
|
2226
|
-
eventSubscriptions.forEach((subscriptions) => {
|
|
2227
|
-
subscriptions.forEach((sub) => {
|
|
2228
|
-
if (sub.debounceTimer) {
|
|
2229
|
-
clearTimeout(sub.debounceTimer);
|
|
2230
|
-
}
|
|
2231
|
-
});
|
|
2232
|
-
});
|
|
2280
|
+
...entry.defaultProps,
|
|
2233
2281
|
});
|
|
2234
|
-
this.throttleTimers.forEach((timer) => clearTimeout(timer));
|
|
2235
|
-
this.throttleTimers.clear();
|
|
2236
|
-
this.subscriptions.clear();
|
|
2237
2282
|
}
|
|
2238
2283
|
}
|
|
2239
|
-
|
|
2240
|
-
const
|
|
2241
|
-
dataSourceRequestHandler: undefined,
|
|
2242
|
-
schemaData: undefined,
|
|
2243
|
-
translate: undefined,
|
|
2244
|
-
});
|
|
2245
|
-
const useWidgetContext = () => {
|
|
2246
|
-
return useContext(WidgetContext);
|
|
2247
|
-
};
|
|
2248
|
-
const WidgetProvider = ({ store, dataSourceRequestHandler, schemaData, translate, children, }) => {
|
|
2249
|
-
const widgetStore = useMemo(() => store || createWidgetStore(), [store]);
|
|
2250
|
-
// Create event bus instance (one per provider)
|
|
2251
|
-
const eventBus = useMemo(() => new WidgetEventBus(), []);
|
|
2252
|
-
// Memoize context value to prevent unnecessary re-renders
|
|
2253
|
-
const contextValue = useMemo(() => ({
|
|
2254
|
-
dataSourceRequestHandler,
|
|
2255
|
-
schemaData,
|
|
2256
|
-
translate,
|
|
2257
|
-
}), [dataSourceRequestHandler, schemaData, translate]);
|
|
2258
|
-
// Warn if dataSourceRequestHandler is missing (will cause issues with API data sources)
|
|
2259
|
-
useEffect(() => {
|
|
2260
|
-
if (!dataSourceRequestHandler) {
|
|
2261
|
-
console.warn('[WidgetProvider] dataSourceRequestHandler is not provided. ' +
|
|
2262
|
-
'Widgets with API data sources will not be able to load data. ' +
|
|
2263
|
-
'Please provide dataSourceRequestHandler prop to WidgetProvider.');
|
|
2264
|
-
}
|
|
2265
|
-
}, [dataSourceRequestHandler]);
|
|
2266
|
-
// Cleanup event bus on unmount
|
|
2267
|
-
useEffect(() => {
|
|
2268
|
-
return () => {
|
|
2269
|
-
eventBus.clear();
|
|
2270
|
-
};
|
|
2271
|
-
}, [eventBus]);
|
|
2272
|
-
// Initialize schemaData to Redux store (only on mount)
|
|
2273
|
-
// This prevents overwriting user changes when schemaData prop changes
|
|
2274
|
-
useEffect(() => {
|
|
2275
|
-
if (schemaData) {
|
|
2276
|
-
widgetStore.dispatch(setValues(schemaData));
|
|
2277
|
-
}
|
|
2278
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
2279
|
-
}, [schemaData, widgetStore]); // Only run on mount
|
|
2280
|
-
const content = (jsxRuntimeExports.jsx(Provider, { store: widgetStore, children: jsxRuntimeExports.jsx(WidgetContext.Provider, { value: contextValue, children: jsxRuntimeExports.jsx(WidgetEventBusContext.Provider, { value: eventBus, children: children }) }) }));
|
|
2281
|
-
return content;
|
|
2282
|
-
};
|
|
2284
|
+
// Singleton instance
|
|
2285
|
+
const widgetRegistry = new WidgetRegistry();
|
|
2283
2286
|
|
|
2284
2287
|
const WidgetRenderer = ({ config, dataSourceRequestHandler: propDataSourceRequestHandler, schemaData: propSchemaData, onValueChange, defaultComponent, }) => {
|
|
2285
2288
|
// Use context values as fallback
|
|
@@ -2576,6 +2579,38 @@ const canPreviewInWeb = (file) => {
|
|
|
2576
2579
|
return previewableExtensions.includes(extension.toLowerCase());
|
|
2577
2580
|
};
|
|
2578
2581
|
|
|
2582
|
+
var img$f = "data:image/png;base64,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";
|
|
2583
|
+
|
|
2584
|
+
var img$e = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAkCAYAAACe0YppAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAHqADAAQAAAABAAAAJAAAAAAh0JciAAACrUlEQVRYCcWXPW8TQRCG31kbpNBChGiiRJQ0tFDggPgBtKGhJgEJUGxDFCmJUBKwDUoV2jRxS2NEhZCgAPELKBAhIPFRpKIwUXIe3vFHFJzbs2zWupHWu7e7M8/OenbuVkDReUzoLjbZvGDP/ysiWJQSlpLsiN7HOBp4rco6oBC+Svicz2QWERYULSjh605Q3dvHnk/B138sg1EV1DrjtPVAC9j1eS6NPD5x8lko3rgKch3FfmvbOY2w1a3n89xxlWdsMuvP3UqDPhO2xPLF9NueL3Tbct0dIZ4jJdTh8iH4Irf9H/hQwLZ4edSCs7ltz/Tc4CvWNhka2IwbXDKYZLMDt4Brep61CUFE8Jt26iwj9KbcKGDW7GrDfnGi+csf8zwqoh7MY1nFjhLYBpziKTl3UIDRDthqp5gJ5zENZsrMCXlscQE3DoMO2sJ8wURFr08GBRtAythgZeWIRAVsSDtZBdvqI5QeHamBE7c6yqPKJND/G0sZvIqXmQpmfI57wVrEGI/CFINhIOGCp3lml/mS+B5nwAuWx/iqs5hnDr8ap9ijT7noF+5JPNR0vWAblAqWWVkJLqkFV2rgxK1mVG8ySC4Oss/NqC5j2qfrBdf5RSERrg8c1cBNvYOHsoYfcXAveISvNHpcZIrLxSkm9rXO8SvngZquF2yDTPolVlaCS2rBlRo4cav56fscgvNJ+8wYqDEt3k6aEzfmBVtU82P/Wq+oZiq/pfdQkqf4Fgfw9XnBFtXM1XeZq73nmGPK68871yfUFuMF2yBz9RorK8ElteDiHY2blYI4/ks7xuUCxofNJ2OizfiZZVTW2GGfKJNMkc9cFlUu5k/QRQiOYx9TfHFcMrtkvhWdw2l2fmDnWFCY39i2XWucrOAXb1A5ruKjf26wkfeEXrE71V+iV9IhdJQEvwAAAABJRU5ErkJggg==";
|
|
2585
|
+
|
|
2586
|
+
var img$d = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGxmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDktMjRUMTI6Mjc6NDArMDU6MzAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjYtMDEtMDJUMTY6NTA6MDQrMDU6MzAiIHhtcDpNb2RpZnlEYXRlPSIyMDI2LTAxLTAyVDE2OjUwOjA0KzA1OjMwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjljMDI0ZTVhLWJiMWItNDBiMi05NThmLTg5YjExMTE5NGI4MSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjMzZDZiMTBiLTQzNjYtYTc0Ny1iOTZlLWI4ZTBhZjQxMTkzOCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI1M2M1ZmRhLTlkYzctNGQ0MC04Y2E3LThmMTQ2MmU4OWMxNSIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjUzYzVmZGEtOWRjNy00ZDQwLThjYTctOGYxNDYyZTg5YzE1IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDQ5N2Y5YmYtMWZiMi00MWJlLTg5ZGItZGFiMDZmMjEwODE4IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWMwMjRlNWEtYmIxYi00MGIyLTk1OGYtODliMTExMTk0YjgxIiBzdEV2dDp3aGVuPSIyMDI2LTAxLTAyVDE2OjUwOjA0KzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7pSLHQ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";
|
|
2587
|
+
|
|
2588
|
+
var img$c = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACAKADAAQAAAABAAACAAAAAAAL+LWFAAAoQklEQVR4Ae3dy49tWV0H8MubEI3GGBFwojwbGmjppsH3pQEnDIz6BzAz4T9QiVPxFZ0ZJ2LigBEDE00g0SADNb7CI4EQE41goBua7r7dPBQEvP52uvftuvU4tc/Ze+21fmt9TrJy6lbts/dan9+q8/3VqbpVN264ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAOAi+Ka7xwh+sUu8Rzip15nxNPBfjhGP8d49Y+l3QVAgQIEBhM4KWx3l+OcTPGfTF+IsYLYky3b8f49xifjPGxGH8RQx4Fwta3V8cJfz3Gx2N8Mcb/xbh9Zkzv+1CM98V4WQw3AgQIECBwqsAD8cAPx/hOjLNZc+jtb8Wxfx7jnhhuGwi8M87xjzEOoZ//2FSED8a4N4YbAQIECBBYKvCDceCUH+e/yDyfM4f+PTUNfxTjJTHcThB4VTzmIzEOIV/3se/F438nRurv1cT83QgQIECgvMBb4hL/GeO6bFn68c/EuV5Tftp9XeGXYjlPxViKfN1xn4hzTd9CcCNAgAABApcJ3Ix3bpk7cy49GuedGgu3BQLvjWO+G2PG2+r+kTjn6xZc3yEECBAgMJbAQ7Hcb8bYKm/On+crce7pVW23AwLTV/4lwn8uhibgAL4PESBAYECB0uE/58+nw/bFA/ouWvLUHZV4+WXGn+81AYvK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cqPi0586sS/E2LoJ+Eqc8/7is3cBAgQIEMgqMP1gYKn8eUtWlL3n/Yq44D/E2KoJ+GSc65V7L8L1CBAgQCCdwNb586kQkD9HboPpZwLeH+ObMU5tBKb/a/nbMV4cw40AAQIECCwReEEc9Fsx1ubPB+Ic8meJ+BXHTN3Y9FOTT8RY2gh8LY794xg/HsONAAECBAicIvBj8aApf6afH1uaP1+PY1Pkz3NiolluL4qJvuuZcV/cTy+pfH+M6TcJTuD/EePTMf42xkdj/E8MNwIECBAgsFZgyp93x3hnjOl3B0w/sP7SGFP+TD9f9kiMz8X4eIyPxJA/geBGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn0I/D/rORE18R9ldgAAAABJRU5ErkJggg==";
|
|
2589
|
+
|
|
2590
|
+
var img$b = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAAilBMVEX////u7u4AAADt7e3v7+/+/v709PT5+fny8vL6+voEBATp6ekTExPZ2dljY2Pc3NzQ0NAqKip7e3vHx8fj4+NYWFiqqqo9PT2cnJy3t7c3NzeMjIxvb29nZ2eDg4M8PDwdHR0XFxdQUFCxsbF0dHRJSUkkJCTAwMCSkpIyMjKRkZEcHByioqJEREQCmFynAAAOcElEQVR4nO2dCX+iOhDAAzkhWrCi1XpsW622u+73/3ovE8IRwKsi4D7mvZ9bdQzzJ/dMEpBTEEJRTqj6jz22CuqwbT1hT9gTtm9bT9gT9oTt29YT9oQ9Yfu29YTXEOL0RRBEQRCKXzz1E/zQKqU8FKgoAj+0CuJMSfZi/8NB2GOrlG4BxU7uJmBHSv7gKkkJNi+UYpKVYQerBPhjq5zJQ0Iw9h5cpfwTUvhJRcl4KJUu29YT9oQ/JaQexloJEyNVDQBOv71SRTV+Hm2ZkEr4WIlWgRbao54lyMP5kcVVKjDyap2QqOyDDDDGEVLOoOTL61U8lAC2WEojh2GZCJYYx+OlnDCZl+tUKOpAHuLZxJanokxKcqnKahu2TYg8+eneVaaU6qlea4Rodk8833Xfp6hdQroFM+5HqBLf6DFze4Sr+xLCywHdkTAvqp+q6KvvSgiZqP6fw4Wkc9aW8+bigjglZlZUIc/Zza4dz0/SPggMTpgztpw390e+tpjQHax06/60WpVafvg4k4tVniZ+ko/u4MCFRdikN/E5tmGXu3G28PLM+gIVynm0y+XllNKWCUdaBYaRRf+WJGp4maVyqYrEwZ80D1VdnKHzttyR0DeEMMgSxBbMssHlFSqMBG/56uhvUIt56LopYeKFzWk45VQuUUkJk4ycxuwdIPxJKmcJFSKMbvR0498k1CV1k7an/yKhEtVpXJvKIxHG/83/IUKHpP1hXqbUtDePTygcMirxxQX1HyEkkv8tZ6FqcOY6RvEPEGLM1hV8prlpjpDcrx4KNi8RxpMp3Wk0FeXGYpsQ1hyfVjcv+tS9REVz44FeI1FuTFhKeETlp/FpB0d8FneDpbIa+26KY787Rbl5Slh3fJpzj44qp9bad8O4x66+UOkWnA8bU7o0hPyYyk/j0xCwCHduVSmFyRSXJXvvEuVGQOhnhOeDz86l8WmuKhKdVuDpgutvOPuBuadvSlXYGPLQz/IwU6FpSEXN9ZzchNAholxaQMXhRJLChTy0GcS56OcJtWNDnCkJNUW5KwhjFY/KxEdBZGSLTL/Kq8hAmrYjlwpC8xfToKZtjn7jukFTcYsjhEi+V7QRp2UtROFC0OLjZ3t86ptZ/7DCm9gkIcWDqwkXopiHXJf2YDb5thD1FYNSrWo4D9nATy0qZEFZ4pr2u1xKue7bEYvG4/lmrmXtmlLaNqHKw+vcxL77VSLMC2ECJB3LBW2XUnYtoSqlpwgTW0RXCJG8Es+tamm6TEi9YWBkGBZlGAW2xCpBqaXpNGFOSc1hRCaEsPKF1VQCqx7/kfLwZCo/se2xCG9R6Ql7wuJPzoaNUULIbgk+X6FykvCOUe6cF8OoEEbitrOi5UTCluMqatrhFGwZG0LScJS76GsTcvG8NrKw5fdiXZKjKs97UrBlbwidlv2lIrh+TFMpM95RQie6flxaFjURnLGOErIomR8mM9bsbQn9qEqXCYkc+JUTxOqMPaKikjiIjhKyoKZFRF9drYciejKrSFer1XKVF/WusLr0qMpkMtkUbekKIeaSEL3ilzBaFHtJ8AkVISTraimFtdqOWSxTdKhQ5hTX0xxRUQOHxAXaPcJMwx5qVK+nOavSZcK6t8D2hD3hlT85EeXOGhJUFEaKclzlDoQ1RblZEAQmEIMdkpviQNwrKsZqjqioNLAo2DI2fn2n3Sg3FsHL668XI39teamQIyqv3wdSsGVvhnWYtxzlxheOys7JIVlQbGzxEsKIN7KX+3iUW1QHZirluIrvTgu2xF4M9YvozD7gu0e5mX88zHQxsB8T5m1JCcFP02qUm10fP6yU6jx0qz1RTUa5kVMT4aFgS2f8pZTOU5kWZTMvylGVadRVwvzleX5RgserfIcnVLyuEqq2xijz/IYl1YHL8i7ZYyqcIq+rhNdduI9b9IQ94Y2Erk14wYVvUbk3IRx1kN9mBqM2vZJu58XTuapleUxNNXJzwdtUYD2NXgydH5fGS9vrIfQo9fIL78RTPFv7k875isvyCC6u3LtJRU7NIr6xyH3LEasxD3+XV9LdaZtstfha7Ct+RHXlIc+8CLnrNQroFum0rPgP87AUNqbokE/f981SwdOIN80Riyq+yUTrm7/CqyvKLe56iMKP5VU6dUW5O0tI6vIm9oQtSU/YE/aE7UtP2BP2hO1LT9gT/luEp8PGks1OhvuqPvTtGaVvFiLudqPdm/1Rkop59zbaDYxCaUpYJqwrys1P5uFgPfsy63zX6/V29fE9KOw4j3m/t5swHA6H4f5r8u6mO+5yN+plOw+HQTDcbyZvMfQZQlxTlJvRk4TvQ5QVFXUrPTz8enULhO5nKBHi3PM8jigPZ25pfelkzhCCzdrgGAoW767vHom4JoSE1xTlBi/GCfHHhOcANa18zocSfffPTGQBWQq+yWBlF/DRDKqUuVVQ2saTI2cPpPLC64tynyQcxIRpAvE6w4WlMmewNdSLVTzt6RTPlsbGg7V8lPKYECrUrzN5+Iuh2qLc5wi92Pq0QaPU4Qez0lllw27MsWeMTzOJ8rU59QIoQtUE8tQcqs/aFZ+VO/MzwlIe/jzKfQEh2m/G+/F4HAllGvKkYBNjvO9uhFBlnVKx364my+cx3HulgleuARwcPO0lo+Hv5WT5e0jj05JLx4BUEdbjLz1PiNCHeesvQwWgfhqOzMEkE+4QrOre9NWoTEIFQCWRrvEsL5nETKLIBETet56urPSjdLHWCFXRnLhJy/A2g4OeJV/EPcIuVKkIzhbJsZa+qpe6BsX9rHobKgWFODLdoOs+M11fN50i/DDnAsBLhCQhYhi/2wplPUbT5NwA+GykehgpyHCk3y2ZAsRkmdwCF475UOKJ71MXbpYwK6UgK64SITJeWTQWROUPyX2tPvwLvmhHrDX1HM7eEdZ5GL+QCPbrt9NtaYuEo6EELF0ud4Eugl9u5qKHF4mwcLim2kWqnhKxzCf6vvzcua7bWUJ3TpjqmTZg4ZMqgsRxPnItPxTEGVLtPBvCnx8cw4XsMxQukFYJfzOsamI40H86QpLwT958BbD1JCwv/XahosKFQmtB1blRd+uEqvkXJD5Bb0pUXpHQtVbnue4TVtyYfcLJEZwIh+2tcXjnCScMktHny01VHcPlM7x+qZonMYGlqnPhSFMlr5K2CeHRDkC4UbBElAjV1EfNc/SCatWUqr7x0QhhFZeICWGvECnnodRPtzCERIgHI3yCmXach1NoKcW++Ku/MGQmeBkTOg47PX6plbAibHzy/g7GThUhkRgD4UENVzAbF3/1QZSCIzUhwVKWa+pZefGOmGvLJVFuctqLMUSqIjHreQkLuFdeMNAdH/wdjbL5rB6YLfVzLDj0Fgu93DKwjmDyY8UzXoyGotxASBxuER703FNn3FbPQ/lTtj5F2z3ThA58sowXib/mE/DXy++U9ChhQ97ECsLBXs/W9RKOb64BZrkJO/wbaB/SGP5+ITDjRdaobScZ3mw/T3aJbRJ+Sj3HneiR2jg+vitBc3UxfeIOpK5H3v4Ypotonh/UbLkgjEorX7tEONMeCxxPBmf6wHXbXzcIBVZQJPZTfGmvhsinEMKQTkTW4dftEmL+Eb8DiydcF8HfcdUbRZChTHxlq8Xe9lzvIZ3GP3iT2kcnB8n00Z3q/aR83Z16mGtL/de1ZES1I9Ev0xquoa1hhB2S2cPHXo0CsPrwzUyKF9onxsGBCDJaMJWEI4LqczBbIYRR1+wAMt1HjEjYerdMXffgllHzRRoclk+Tp+0cqxySjNJ1snjsD7RMiAjVuEw+J4uQ6+3A/Pn0LKrZUiowMdu+FK2asXtonnkTv0PVTUlQgcdEOUwflihgpJT4PXaQo1ASiJSCayMxm76f9iY2m4fKfKK3EcaP8hJoP8hNgV4DVQ/1Hm29W1sNubHg00Fy/KO6FRNVWRl8rKbLUvfUenbcEcKAZtsCsVCMgkWWQ1s3HQycTXAXoAAyNlza3fn7nHqO3oUaP3DugrlGg4T57S+CMTlcf1vmQy597COP6UN6VPbxcPrt2iruYB1ipnpBoTfrh8vze6iaI1xMD7NMFqtv144rmcL2ut6EkSQy2h+WuVFqehPU8O1rH6iaGuynk0tW6DZFWGVIoQaZ2qZuxg5E/1VW0e3q22i0ez+ecDuEfqHFs0+PTYy1tOKAjE3oF39SK+EtUe72pLEod2vSWJS7NWksyt2aNBblbk0ai3K3Jo1FuVuTxvylrUlP2BP2hO1LT9gTdp/wtS5CzystMPMb3gZc7ZJa1kZIKX9+H2TyZgD9/IeWHP3ihyp/TKDN+vZvWNtudQoO7GFOJnE+vqfPBxiWpPzkgFtUkuVG89x3kV7hWNt+fHuIbp5avfP0UwHA91lKxXpywK0qbG/y0H5GiZ481LSXu5DwytVHIscnlsNymdIUxYMlJqncqiLmxslTODVC52EtUe6CHD2x/KpUrlHpyonlV6bS3ZMhe8KesCfsCXvCnvBnhIVYQT3neWcqHSAsHIKMmZcfyd6ssjfxxyYJYQKVEOrHb1kihWencqPK3oxLmyb8TtU4sR+TQ8oD/JtU9ma63Wwp9d1BdPRBcsOgKLeoRLMWCH339GqemsXEyHEzJ5YTcWY11v2ENXJiuSNJa4SimRPLOd+2RRhRdrW5pVtwwYnl3uK8LXeR0bnTrms6sZzS0uaJhmTLGnout8f2n+fNqV1GC+JUHOJ6hxPLEcfwNOK8lFyd4bgot6uEpGKYcJczaBHCxGG55/yJsh8QHm4galZR3UC5kt3nlF1Pwrg/OY4bFs1WXDh2XtapAms3G8pDdWEHVgLjZA5QcWEH4/wgug4VMKYxwodS6bJtPWFP2BO2b1tP2BP+fwmtECu++0O3765yfdj4wVR+5Gt7KJWesOPm94Q9YffN7wl7wu6b3xP2hN03vyf8XxD+B9oXHMG5K4FRAAAAAElFTkSuQmCC";
|
|
2591
|
+
|
|
2592
|
+
var img$a = "data:image/png;base64,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";
|
|
2593
|
+
|
|
2594
|
+
var img$9 = "data:image/png;base64,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";
|
|
2595
|
+
|
|
2596
|
+
var img$8 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAgKADAAQAAAABAAAAgAAAAABIjgR3AAAFPElEQVR4Ae2dzWtdVRTFn5o40EFTraQgFIoOI04cVOdVQZxIoP4DrSSx1o515h9QCgWtrW3UGPsxcKTYjgt+xagdONNBKCRiCEgQCYXWtcFb8l5vYnLevefsc8/vwOJ+vHfP2XutdfZ536/Xo8EADMAADMAADMAADMAADMAADMAADMAADMAADHSfgYe6n2IjGY6ql2eEEWG9kR7pJAsGXlOUC8KGcPc/rGg7J4wLtI4yMKa85oVK9Lrtqm6f7Gj+Raf1mLJfFOpEHzx3R/ebKpqtjiW/G/ErM2CCjpggRHxMgPj3lgoqQcZm+EqxV7N5mC0myNAERxsSvzKOmWA6Qx6KDPkBZb0mVOI1tcUEmdjpqRbEr0yECTIwgb3SVwnW1pblwLERXo1gADMWJnBqggORDIAJnBrAwlrGBI7ViRDa6xENYJVgJkJODLFLBr7Q/dt6EFjXLybYpUBt332PBvgOE7RNs+/+MYFvfaJEhwmi0Ox7EDPB90Ld2t3WOR4TOPNEChO86YyD4sOxzwX+ILQ16+v6xQTObIcJnAmSIhxMkIJ1Z2OaCez7AXVlu61zLAfOTLAXEzhTJEE4KUxwPEGeDLkNA2aCH4W2Sn9dv5hgG0FS3IQJUrDubEwzwU6/QlY3q0POUQmcmWCYbxOFGMCuwQSYABM480DPKsFPQuisDrmOSuDMBSlM8JYzDooP53ExELsSYAJntjMT/CyElPXQazABJuhhAkyACZx5oGfLwS9CaGkPuY5K4MwF+xKY4IQzDooPx0xwUwiZ0aHXYAJntsMEzgRJEY57E1iA7wlfC38KoeWH63xxt6PlYFKC/4HonTX9tiY4gvCdFX5zNX5bOvc1+7n4/cKXwiN9t3DQRQZeVlJ/Cd9WyZkB3hFerE6w7TwDfSZ4UOk+1/mUSXCQgVM68ZKdtB9KXBXsJUtaWQwsKd0JM4A9SKCVycC7tgTQymXgeSpAueJb5stUgLIN0MMAZRtgEQOUbYBv7DHA78LBsnkoMvslZT1hFWCxyPRJ+pgoWDcD3ICL4hg4qYyvVVk/rJ1fhc3vGrHfXT7ue0fQjPCCcBsTdH4S1IpvBrB2SPhNYPZ3k4PaD4TY28FVu6WdWeFv4R9hTHhUoOXPgM380/mnkX8G9rT7fSFmla2d+flTmV8GJv4HiJ+fcE1EjPhNsJhpHyb+WYGyn6mAw4Rt4n8YWXy+HDqMYg1ea+KfQ/wGGc2oK8TPSKymQzXxzwsx13zKftMqBvZn4n+E+IHsZX6ZvbN6AfEzVzEwfBP/YmTx+aHIQLGavgzxm2Y0o/5M/Fkh5gM+Zr4Tg5j4HyO+EzUih2Hif4L4kVl3MhziOxEiRRgm/qcCa34K9hOPaZ+emossPv8dmFj0angT/zPEr+goa4v4Zendl62JPy/EXPMp+30SpDsw8T9H/HQCpBzZxL+E+CklSDd2CvFn0qXLyJsZGNHBZSHmmo/4mxVIuG/iX0H8hAokHBrxE5LvYegzCoKy70GJBDEcRvwErDsa0n4jKdbsn3aUN6GIgScRv2wfvBLJAMx8pz6zv8lpu/wjvlPxLaynWzTAHfWN+May42bf5FkTmq4CiO9Y9MHQ3mjYAIg/yHAGx9cbMoGJP5VBvoQ4wMATOh72v30Rf4DU3A6HMQHi56b2FvGGmADxtyAz19O7MQHi56ry/8Rtf6N3Vdju6aH93Z69kETrMAMm8IKwIVRmWNH+nDAu0AphYFR5PivYm0c0GIABGIABGIABGIABGIABGIABGIABGIABGIABGMiMgX8BIPxPwjb9HfIAAAAASUVORK5CYII=";
|
|
2597
|
+
|
|
2598
|
+
var img$7 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGxmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDktMjRUMTI6Mjc6NDArMDU6MzAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjYtMDMtMTNUMTY6NTE6NDUrMDU6MzAiIHhtcDpNb2RpZnlEYXRlPSIyMDI2LTAzLTEzVDE2OjUxOjQ1KzA1OjMwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjU2M2VkMzE4LTY4YzgtNDBkOC1hODQzLWVhZDY2ZWEzYTEyOSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmE3NzQzN2ExLTY5M2MtY2Y0Yi1hZTRkLTZmMTg3MzgxMzNmMCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI1M2M1ZmRhLTlkYzctNGQ0MC04Y2E3LThmMTQ2MmU4OWMxNSIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjUzYzVmZGEtOWRjNy00ZDQwLThjYTctOGYxNDYyZTg5YzE1IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDQ5N2Y5YmYtMWZiMi00MWJlLTg5ZGItZGFiMDZmMjEwODE4IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NTYzZWQzMTgtNjhjOC00MGQ4LWE4NDMtZWFkNjZlYTNhMTI5IiBzdEV2dDp3aGVuPSIyMDI2LTAzLTEzVDE2OjUxOjQ1KzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4gFIalAAAEcUlEQVR4nO2SwW4aVxhG72SmBQQWDxCrbljZXqHhBbKoVLHAGBt5AxssIVyVtxnLHUUqm2RTpXHTLCJLXvAC0WRnexNcqzwAslESm2GmiworoY4sN4Z/7nzfkf6duf7gHCMMQ0VweSA9gMjCAMBhAOAwAHAYADgMABwGAA4DAIcBgMMAwGEA4DAAcBgAOAwAHAYADgMAhwGAwwDAYQDgMABwGAA4DAAcBgAOAwCHAYDDAMCxpAdI4Pu+dXx8vOJ5nq2UUrZteysrK8eWZfnS2+ZOGIYwd3Z29l2pVHqVTCY/KKXCTy+ZTH4olUqvTk9Pv5feOc8THzCvc123tbCwcD4tfvoymcyF4zjtIAgM6c0M4B5uNBpZW1tbv90mfvrK5fLLy8vLb6X3M4CvlF+tVp/fVf7k1tbW/ox7BOIDoiofJQLxAVGWjxCB+ICoy/80gqurq2+kvx8DEJAf5wjEB+giP64RiA/QSX4cIxAfoJv8yZXL5ZdxiEB8gI7y4xSB+ABd5cclAvEBOsuPQwTiA3SXr3sE4gPiIF/nCMQHxEW+rhGID4iTfB0jEB8QN/m6RSA+II7yJ7e+vv5H1CMQHxBX+bpEID5AUn6tVntWq9WeIUcgPkBSvu/7pu/7JnIE4gMk5U/+L3IE4gOk5aNHID4gCvKRIxAfEBX5qBFQvmAElUplXzoCygePgPLBI6B88AgoHzwCygePgPLBI6B88AgoHzwCyo94BBsbGy9mGQHlg0dA+eARUL5mEYxGIyuSAaDK1z0CygePgPLBI6B88AgoHzwCyo9BBJubm7//3wgoHzwCygePgPLBI6B88AgoHzwCygePgPLBI6B8gAiq1erzL0VA+eARUH4ETjICyo/ISUVwPaDdbjuUjxFBu912Pgug2+0+NgwjoHz5m0cEhmEE3W73cRiGSg2Hw3Qul3tH+dG5eUSQy+XeDYfDtHJdt0X50bt5ROC6bks1m80nlB/Nm3UEzWbziSoUCm8oP7o3ywgKhcIblclkLig/2jerCDKZzIXK5/NvKT/6N4sI8vn8W9VoNDqUr8fddwTb29u/qt3d3Z8pX5+7zwj29vZ+UoPBILu4uPg35etz9xHB0tLSX+fn5wsqDEN1cHDwI+XrdV8bweHh4Q9hGKrrB1utlnvXR+r1+lPKl42gXq8/vau3nZ2dXyZvXD8WBIHhOE47nU4Pb3sgm80OOp1OQ/oH4P17nU6nkc1mB7d5S6fTQ8dx2kEQGP8JYHK9Xu9RsVh8nUgkPk4/kEql3lcqlf1+v/9Q+kvzPr9+v/+wUqnsp1Kp99PeEonEx2Kx+LrX6z2a/pwRhqG6Cd/3raOjo1XP82zTNMe2bXvLy8snpmmOb/wAiQTj8dg8OTlZ9jzPHo/Hpm3b3urq6pFlWf5Nf//FAAgGD6QHEFkYADgMABwGAA4DAIcBgMMAwGEA4DAAcBgAOAwAHAYADgMAhwGAwwDAYQDgMABwGAA4DAAcBgAOAwCHAYDDAMBhAOAwAHAYADj/ANHMVplSsKGCAAAAAElFTkSuQmCC";
|
|
2599
|
+
|
|
2600
|
+
var img$6 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF92lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDktMjRUMTI6Mjc6NDArMDU6MzAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjUtMDktMjRUMTI6Mjc6NDArMDU6MzAiIHhtcDpNb2RpZnlEYXRlPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA0OTdmOWJmLTFmYjItNDFiZS04OWRiLWRhYjA2ZjIxMDgxOCIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjYxMjIwYjI1LWNmZTgtNGM0NC1hOWM5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";
|
|
2601
|
+
|
|
2602
|
+
var img$5 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGxmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDktMjRUMTI6Mjc6MTArMDU6MzAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjUtMTItMjdUMTM6MTE6MTkrMDU6MzAiIHhtcDpNb2RpZnlEYXRlPSIyMDI1LTEyLTI3VDEzOjExOjE5KzA1OjMwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmMyMTU3YzU0LTZhMjEtNDkyZC1hNzczLWM1M2IzZDJmMjg3MSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmQxNzA1Y2Y5LTI0MTAtNzc0Yy1hNTg1LWE3OTdkNjRhZjQxMyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjQ1MzliMGNhLWNiN2EtNDM4OC05MTRkLTg1MjZlNmNlMDY3NyIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NDUzOWIwY2EtY2I3YS00Mzg4LTkxNGQtODUyNmU2Y2UwNjc3IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjEwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Y2EzMTEwYjAtNTU5OS00YjE2LWJiZWUtZmNlNzdmMGMyZjQ3IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjEwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YzIxNTdjNTQtNmEyMS00OTJkLWE3NzMtYzUzYjNkMmYyODcxIiBzdEV2dDp3aGVuPSIyMDI1LTEyLTI3VDEzOjExOjE5KzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4Im3Hl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";
|
|
2603
|
+
|
|
2604
|
+
var img$4 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF92lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDktMjRUMTI6Mjc6MTArMDU6MzAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjUtMDktMjRUMTI6Mjc6MTArMDU6MzAiIHhtcDpNb2RpZnlEYXRlPSIyMDI1LTA5LTI0VDEyOjI3OjEwKzA1OjMwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmNhMzExMGIwLTU1OTktNGIxNi1iYmVlLWZjZTc3ZjBjMmY0NyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmZiM2RiMmI0LWVlYTQtODE0YS04ZTRlLWU1YzM0NTNkYzAxOCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjQ1MzliMGNhLWNiN2EtNDM4OC05MTRkLTg1MjZlNmNlMDY3NyIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NDUzOWIwY2EtY2I3YS00Mzg4LTkxNGQtODUyNmU2Y2UwNjc3IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjEwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Y2EzMTEwYjAtNTU5OS00YjE2LWJiZWUtZmNlNzdmMGMyZjQ3IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjEwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz64vXmkAAAGMUlEQVR4nO2dTUwUZxjH3wGWhCCVdbayBkOi7cUmyLKAgcajdGu8mGYVEBSRL2X7edZDk3rpCcHdLd1+t1ZoJ7GXpuHjqqEf1rI9cJE2IYHwscMua9tsyOK8PVQbipGiOzPP+87z/JNfwol55vn/MpuF2VmFc84oeJMHPQAFNiQA8pAAyEMCIA8JgDwkAPKQAMhDAiAPCYA8JMA2ks1mXfF4vGp+fr4cehazQwJskRs3brxSW1t7e8eOHX/6fL6pvXv3znm93sW2trZrS0tLZdDzmRLOObGJVCpV2tLScp0xxh+Hqqq6pmlB6FlzBXwA0VhZWdlVXV19Z6vyH6IoihGNRi9Az0wCAJTvFAnABxCFpynfCRKADyACuZQvuwTgA4jA0aNHv8ulfJklAB8Amlgs1m1G+RsliEQifdDnRQJsA8MwFLfbnTRTANkkAB8AkpmZmefMLl82CVD/JTAej1dZ9bs550ooFIpEo9E+q45hRlAL4HK5slYfQ3gJoC9BkMzOzlYwi14CNiPqywH4ANB4vd4FzBKADwDN8PBws10CMMZ4OBwOQZ8zCbCJ48ePf4NVAvABRGB1dXXnoUOHfsAoAfgAooBVAvDFiwRGCcCXLhqrq6s76+rqfsQiAfjCRQRCgqtXr75KAghEKpUqra2t/cnpEoAvWmQwSAC+ZNFxugTgC5aBVCpVWlNTc9uJEoAvVxaSyaTbiRKAL1YmICQYHBx8jQQQiGQy6fb7/T87RQLwhcqIkyQAX6asJJNJd66fJRBBAvBFyowZHyiBlgB8ibIjuwTgC3QCKysru3w+3y8ySgC+PKcAIcHAwMDrJIBA6LquyiYB+NKchq7ralVV1ZQsEoAvzInIJAH4spyKLBKAL8rJ6LquHjx4MC6yBOBLcjqJRMJjtwRXrlx5gwQQiEQi4amsrPxVRAnAl4MFUSUAXwwmRJTgkQEvXbr0TiAQGPV4PAk7ByVgJPj3B03Tgrt3716CHpawVwLGOWcjIyNN0AMS1tPf3//mIwIsLCx4VVXVoYcjYCTId7lcFycmJl5iFBQZGxt7ubS0NF1fX/89Y4yxI0eOTDABzCTsZXR0NMA5Z4wu/zipqKiYvXfvXkl+JpN5l1HQJZ1O7ywuLv4rnzH2NvQwFJgUFRVlFPbPJYGCMHv27FlA/aRQCvJHxWKP3++/QwIgTkNDwyTbt2/f70yAtyUEzNvAPL/ff4dR0CUWi/WUlJT8kXf48OGb0MNQ7E1/f/9bgUBgjDHG2NraWuGBAwemmQCXJcJ6Nv8ziHHO2a1bt14sKCjIQg9H2Fv+f24ImZycrN+/f/9v0EMS1rDlDSEPSafTz1y+fPnisWPHvqW7g5zDtm4JI6zHMAzl/Pnz74lSPglgc/m9vb1DIpVPAiAvnwSwqfyenp73RSyfBLCh/O7u7pid5dOHQwXBMAylq6vrA5HLJwGQl08CWFR+Z2fnhzKUTwJYUP65c+c+kqV8EsBE7t+/n9fR0fGxTOWTACaWf/bs2U/sLJ8eFCkIMpdPAphQfnt7+6eylk8C5Fj+mTNnPpO5fBIgh/JPnz79uezlkwDIyycBnqL8tra2L5xSPgnwBKyvr+e3trZes7N8+to4QVhfX88/derUl04rnwRAXj4JsI3yW1parju1fBLgf8pvbm4ednL5JMAW5Tc1NY04vXwSQJDyw+FwCOp8wRcuEtlstuDkyZNfYSmfBNhU/okTJ77GVD4JgLx8EuABoVAojLF8EoBzNj4+3oi1fBKAc1ufkRSJRPqgz5cE2MDc3Fw55vI557ifEzg1NeWz4ziRSCTU19cXteNYTxrUAmQymSKrjyFy+Ywx3C8Bd+/efZ5ZdMlXFMUQ9bK/EfABIDEMQ3G73Ums5aMXgHPOhoaGerGWTwI8oLGxcdys8qPR6AXo8yEBnpDl5eVnc/1GTxnLJwFMkkDW8kkAEySQuXwSIEcJZC+fBHgMuq6rwWBQ26p8VVV1TdOC0LOSABaiaVqwpqbmdmFh4drD4svKyhZbW1uvLS4ulkHPZwYK55xRtk42m3VNT0+/4PF49PLy8nnoecwMCYA8qP8ZRCEB0IcEQB4SAHlIAOQhAZCHBEAeEgB5SADk+RuHo3dOeiRkRQAAAABJRU5ErkJggg==";
|
|
2605
|
+
|
|
2606
|
+
var img$3 = "data:image/png;base64,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";
|
|
2607
|
+
|
|
2608
|
+
var img$2 = "data:image/png;base64,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";
|
|
2609
|
+
|
|
2610
|
+
var img$1 = "data:image/png;base64,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";
|
|
2611
|
+
|
|
2612
|
+
var img = "data:image/png;base64,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";
|
|
2613
|
+
|
|
2579
2614
|
/**
|
|
2580
2615
|
* Gets the MIME type for preview rendering
|
|
2581
2616
|
*/
|
|
@@ -2685,7 +2720,7 @@ const FilePreviewModal = ({ file, isOpen, onClose, }) => {
|
|
|
2685
2720
|
const fileName = file instanceof File ? file.name : file.split('/').pop() || 'file';
|
|
2686
2721
|
const canPreview = canPreviewInWeb(file);
|
|
2687
2722
|
console.log('Modal rendering - fileName:', fileName, 'canPreview:', canPreview, 'previewUrl:', previewUrl, 'previewType:', previewType);
|
|
2688
|
-
const modalContent = (jsxRuntimeExports.jsx("div", { className: "fixed inset-0 z-[9999] flex items-center justify-center bg-black bg-opacity-75", onClick: onClose, style: { position: 'fixed', zIndex: 9999 }, children: jsxRuntimeExports.jsxs("div", { className: "relative bg-white rounded-lg shadow-xl max-w-7xl max-h-[90vh] w-full m-4 flex flex-col", onClick: (e) => e.stopPropagation(), children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between p-4 border-b border-gray-200", children: [jsxRuntimeExports.jsx("h3", { className: "text-lg font-semibold text-gray-900 truncate flex-1 mr-4", children: fileName }), jsxRuntimeExports.jsx("button", { onClick: onClose, className: "text-gray-400 hover:text-gray-600 focus:outline-none focus:ring-2 focus:ring-blue-500 rounded p-1", "aria-label": "Close preview", children: jsxRuntimeExports.jsx("
|
|
2723
|
+
const modalContent = (jsxRuntimeExports.jsx("div", { className: "fixed inset-0 z-[9999] flex items-center justify-center bg-black bg-opacity-75", onClick: onClose, style: { position: 'fixed', zIndex: 9999 }, children: jsxRuntimeExports.jsxs("div", { className: "relative bg-white rounded-lg shadow-xl max-w-7xl max-h-[90vh] w-full m-4 flex flex-col", onClick: (e) => e.stopPropagation(), children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between p-4 border-b border-gray-200", children: [jsxRuntimeExports.jsx("h3", { className: "text-lg font-semibold text-gray-900 truncate flex-1 mr-4", children: fileName }), jsxRuntimeExports.jsx("button", { onClick: onClose, className: "text-gray-400 hover:text-gray-600 focus:outline-none focus:ring-2 focus:ring-blue-500 rounded p-1", "aria-label": "Close preview", children: jsxRuntimeExports.jsx("img", { src: img$c, alt: "Close Preview", className: "w-6 h-6" }) })] }), jsxRuntimeExports.jsx("div", { className: "flex-1 overflow-auto p-4 bg-gray-50", children: !canPreview ? (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full min-h-[400px]", children: jsxRuntimeExports.jsxs("div", { className: "text-center", children: [jsxRuntimeExports.jsx("img", { src: img$b, alt: "Preview not available", className: "w-24 h-24 mx-auto mb-4" }), jsxRuntimeExports.jsx("p", { className: "mt-4 text-sm text-gray-500", children: "Preview not available for this file type" })] }) })) : previewType === 'image' && previewUrl ? (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full min-h-[400px]", children: jsxRuntimeExports.jsx("img", { src: previewUrl, alt: fileName, className: "max-w-full max-h-full object-contain" }) })) : previewType === 'pdf' && previewUrl ? (jsxRuntimeExports.jsx("div", { className: "h-full min-h-[600px]", children: jsxRuntimeExports.jsx("iframe", { src: previewUrl, className: "w-full h-full border-0", title: fileName }) })) : previewType === 'text' && previewUrl ? (jsxRuntimeExports.jsx("div", { className: "bg-white rounded border border-gray-200 p-4 h-full min-h-[400px]", children: jsxRuntimeExports.jsx("pre", { className: "whitespace-pre-wrap break-words text-sm text-gray-800 font-mono overflow-auto h-full", children: jsxRuntimeExports.jsx(TextFilePreview, { url: previewUrl }) }) })) : (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full min-h-[400px]", children: jsxRuntimeExports.jsx("div", { className: "text-center", children: jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-500", children: "Loading preview..." }) }) })) })] }) }));
|
|
2689
2724
|
// Render modal using portal to ensure it's at the document body level
|
|
2690
2725
|
if (typeof document !== 'undefined' && document.body) {
|
|
2691
2726
|
console.log('Rendering modal via portal to document.body');
|
|
@@ -2845,10 +2880,6 @@ const deserializeValue = (value) => {
|
|
|
2845
2880
|
return value;
|
|
2846
2881
|
};
|
|
2847
2882
|
|
|
2848
|
-
var img$1 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGxmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDktMjRUMTI6Mjc6NDArMDU6MzAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjYtMDEtMDJUMTY6NTA6MDQrMDU6MzAiIHhtcDpNb2RpZnlEYXRlPSIyMDI2LTAxLTAyVDE2OjUwOjA0KzA1OjMwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjljMDI0ZTVhLWJiMWItNDBiMi05NThmLTg5YjExMTE5NGI4MSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjMzZDZiMTBiLTQzNjYtYTc0Ny1iOTZlLWI4ZTBhZjQxMTkzOCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI1M2M1ZmRhLTlkYzctNGQ0MC04Y2E3LThmMTQ2MmU4OWMxNSIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjUzYzVmZGEtOWRjNy00ZDQwLThjYTctOGYxNDYyZTg5YzE1IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDQ5N2Y5YmYtMWZiMi00MWJlLTg5ZGItZGFiMDZmMjEwODE4IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWMwMjRlNWEtYmIxYi00MGIyLTk1OGYtODliMTExMTk0YjgxIiBzdEV2dDp3aGVuPSIyMDI2LTAxLTAyVDE2OjUwOjA0KzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7pSLHQ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";
|
|
2849
|
-
|
|
2850
|
-
var img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAkCAYAAACe0YppAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAHqADAAQAAAABAAAAJAAAAAAh0JciAAACrUlEQVRYCcWXPW8TQRCG31kbpNBChGiiRJQ0tFDggPgBtKGhJgEJUGxDFCmJUBKwDUoV2jRxS2NEhZCgAPELKBAhIPFRpKIwUXIe3vFHFJzbs2zWupHWu7e7M8/OenbuVkDReUzoLjbZvGDP/ysiWJQSlpLsiN7HOBp4rco6oBC+Svicz2QWERYULSjh605Q3dvHnk/B138sg1EV1DrjtPVAC9j1eS6NPD5x8lko3rgKch3FfmvbOY2w1a3n89xxlWdsMuvP3UqDPhO2xPLF9NueL3Tbct0dIZ4jJdTh8iH4Irf9H/hQwLZ4edSCs7ltz/Tc4CvWNhka2IwbXDKYZLMDt4Brep61CUFE8Jt26iwj9KbcKGDW7GrDfnGi+csf8zwqoh7MY1nFjhLYBpziKTl3UIDRDthqp5gJ5zENZsrMCXlscQE3DoMO2sJ8wURFr08GBRtAythgZeWIRAVsSDtZBdvqI5QeHamBE7c6yqPKJND/G0sZvIqXmQpmfI57wVrEGI/CFINhIOGCp3lml/mS+B5nwAuWx/iqs5hnDr8ap9ijT7noF+5JPNR0vWAblAqWWVkJLqkFV2rgxK1mVG8ySC4Oss/NqC5j2qfrBdf5RSERrg8c1cBNvYOHsoYfcXAveISvNHpcZIrLxSkm9rXO8SvngZquF2yDTPolVlaCS2rBlRo4cav56fscgvNJ+8wYqDEt3k6aEzfmBVtU82P/Wq+oZiq/pfdQkqf4Fgfw9XnBFtXM1XeZq73nmGPK68871yfUFuMF2yBz9RorK8ElteDiHY2blYI4/ks7xuUCxofNJ2OizfiZZVTW2GGfKJNMkc9cFlUu5k/QRQiOYx9TfHFcMrtkvhWdw2l2fmDnWFCY39i2XWucrOAXb1A5ruKjf26wkfeEXrE71V+iV9IhdJQEvwAAAABJRU5ErkJggg==";
|
|
2851
|
-
|
|
2852
2883
|
const FileInputWidget = ({ config }) => {
|
|
2853
2884
|
const { value, error, touched, isEnabled, onChange, onBlur, config: widgetConfig, } = useBaseWidget({ config });
|
|
2854
2885
|
const { translate, translateConfig } = useWidgetTranslation();
|
|
@@ -3043,7 +3074,7 @@ const FileInputWidget = ({ config }) => {
|
|
|
3043
3074
|
const fileName = file instanceof File ? file.name : file.split('/').pop() || file;
|
|
3044
3075
|
const canPreview = canPreviewInWeb(file);
|
|
3045
3076
|
console.log('Single file:', fileName, 'canPreview:', canPreview);
|
|
3046
|
-
const fileIconElement = (jsxRuntimeExports.jsx("img", { src: img, alt: "File icon", style: {
|
|
3077
|
+
const fileIconElement = (jsxRuntimeExports.jsx("img", { src: img$e, alt: "File icon", style: {
|
|
3047
3078
|
width: '15px',
|
|
3048
3079
|
height: '18px',
|
|
3049
3080
|
aspectRatio: '5/6',
|
|
@@ -3065,7 +3096,7 @@ const FileInputWidget = ({ config }) => {
|
|
|
3065
3096
|
return (jsxRuntimeExports.jsx("div", { className: "flex flex-wrap gap-2", children: files.map((file, index) => {
|
|
3066
3097
|
const fileName = file instanceof File ? file.name : file.split('/').pop() || file;
|
|
3067
3098
|
const canPreview = canPreviewInWeb(file);
|
|
3068
|
-
const fileIconElement = (jsxRuntimeExports.jsx("img", { src: img, alt: "File icon", style: {
|
|
3099
|
+
const fileIconElement = (jsxRuntimeExports.jsx("img", { src: img$e, alt: "File icon", style: {
|
|
3069
3100
|
width: '15px',
|
|
3070
3101
|
height: '18px',
|
|
3071
3102
|
aspectRatio: '5/6',
|
|
@@ -3107,7 +3138,7 @@ const FileInputWidget = ({ config }) => {
|
|
|
3107
3138
|
fontWeight: 400,
|
|
3108
3139
|
lineHeight: '24px',
|
|
3109
3140
|
textAlign: 'left'
|
|
3110
|
-
}, children: translate('common.uploadFile') || 'Upload File' }), jsxRuntimeExports.jsx("img", { src: img$
|
|
3141
|
+
}, children: translate('common.uploadFile') || 'Upload File' }), jsxRuntimeExports.jsx("img", { src: img$d, alt: "Upload", style: {
|
|
3111
3142
|
width: '18px',
|
|
3112
3143
|
height: '18px',
|
|
3113
3144
|
aspectRatio: '1/1',
|
|
@@ -3218,6 +3249,60 @@ const namespaceSectionConfig = (section, namespace) => {
|
|
|
3218
3249
|
return namespaced;
|
|
3219
3250
|
};
|
|
3220
3251
|
|
|
3252
|
+
const collectWidgets = (panels) => {
|
|
3253
|
+
let widgets = [];
|
|
3254
|
+
panels.forEach((panel) => {
|
|
3255
|
+
if (panel.widgets) {
|
|
3256
|
+
widgets = [...widgets, ...panel.widgets];
|
|
3257
|
+
}
|
|
3258
|
+
if (panel.panels) {
|
|
3259
|
+
widgets = [...widgets, ...collectWidgets(panel.panels)];
|
|
3260
|
+
}
|
|
3261
|
+
});
|
|
3262
|
+
return widgets;
|
|
3263
|
+
};
|
|
3264
|
+
const sectionValidate = (section, currentSchemaData, dispatch) => {
|
|
3265
|
+
const allWidgets = collectWidgets(section.panels);
|
|
3266
|
+
let isValid = true;
|
|
3267
|
+
for (const widget of allWidgets) {
|
|
3268
|
+
const isVisible = shouldShowWidget(widget['widget-data-options'], currentSchemaData);
|
|
3269
|
+
if (!isVisible)
|
|
3270
|
+
continue;
|
|
3271
|
+
const widgetId = widget['widget-id'];
|
|
3272
|
+
const value = getWidgetValue(currentSchemaData, widget['widget-data-path'], widgetId);
|
|
3273
|
+
const errors = validateWidget(value, widget['widget-data-validation'], widget['widget-required']);
|
|
3274
|
+
if (errors.length > 0) {
|
|
3275
|
+
isValid = false;
|
|
3276
|
+
dispatch(setTouched({ widgetId, touched: true }));
|
|
3277
|
+
dispatch(setError({ widgetId, errors }));
|
|
3278
|
+
}
|
|
3279
|
+
else {
|
|
3280
|
+
dispatch(setTouched({ widgetId, touched: false }));
|
|
3281
|
+
dispatch(setError({ widgetId, errors: [] }));
|
|
3282
|
+
}
|
|
3283
|
+
}
|
|
3284
|
+
// Supporting Documents
|
|
3285
|
+
section['section-supporting-documents']?.forEach((doc, index) => {
|
|
3286
|
+
const widgetId = `supporting-doc-${section['section-id']}-${index}`;
|
|
3287
|
+
if (doc['document-required']) {
|
|
3288
|
+
const file = getValueByPath(currentSchemaData, doc['document-data-path']);
|
|
3289
|
+
if (!file) {
|
|
3290
|
+
isValid = false;
|
|
3291
|
+
dispatch(setTouched({ widgetId, touched: true }));
|
|
3292
|
+
dispatch(setError({
|
|
3293
|
+
widgetId,
|
|
3294
|
+
errors: ['This document is required'],
|
|
3295
|
+
}));
|
|
3296
|
+
}
|
|
3297
|
+
else {
|
|
3298
|
+
dispatch(setTouched({ widgetId, touched: false }));
|
|
3299
|
+
dispatch(setError({ widgetId, errors: [] }));
|
|
3300
|
+
}
|
|
3301
|
+
}
|
|
3302
|
+
});
|
|
3303
|
+
return isValid;
|
|
3304
|
+
};
|
|
3305
|
+
|
|
3221
3306
|
/**
|
|
3222
3307
|
* Renders a section with its panels
|
|
3223
3308
|
*
|
|
@@ -3226,7 +3311,7 @@ const namespaceSectionConfig = (section, namespace) => {
|
|
|
3226
3311
|
* - Panels wrap when they exceed available width
|
|
3227
3312
|
* - Sections can sit side-by-side if there's space
|
|
3228
3313
|
*/
|
|
3229
|
-
const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequestHandler, schemaData, onValueChange, gridColumnSpan, onSectionSave, hideEditButton = false, mode = 'RegistryView', namespace, changeRequestType, showChangeRequestLabel = true, }) => {
|
|
3314
|
+
const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequestHandler, schemaData, onValueChange, gridColumnSpan, onSectionSave, hideEditButton = false, mode = 'RegistryView', namespace, changeRequestType, showChangeRequestLabel = true, dbSectionId, sectionRegisterId, onSectionDirtyChange, sectionIndex, sectionCount, expandedSectionIndex, onExpandSection, onSectionSaveSuccess, onPreviousSection, isDraft, }) => {
|
|
3230
3315
|
const { translateConfig, translate } = useWidgetTranslation();
|
|
3231
3316
|
const { schemaData: contextSchemaData, dataSourceRequestHandler: contextDataSourceRequestHandler } = useWidgetContext();
|
|
3232
3317
|
const store = useStore();
|
|
@@ -3285,11 +3370,12 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3285
3370
|
// Try to get from schemaData first, then from Redux store
|
|
3286
3371
|
// Merge both sources to ensure we get the data
|
|
3287
3372
|
const dataSource = { ...storeValues, ...currentSchemaData };
|
|
3373
|
+
const recordPath = Object.keys(dataSource)[0];
|
|
3288
3374
|
const result = {
|
|
3289
|
-
createdBy: getValueByPath(dataSource,
|
|
3290
|
-
createdDate: getValueByPath(dataSource,
|
|
3291
|
-
approvedBy: getValueByPath(dataSource,
|
|
3292
|
-
approvedDate: getValueByPath(dataSource,
|
|
3375
|
+
createdBy: getValueByPath(dataSource, `${recordPath}.created_by`),
|
|
3376
|
+
createdDate: getValueByPath(dataSource, `${recordPath}.created_at`),
|
|
3377
|
+
approvedBy: getValueByPath(dataSource, `${recordPath}.last_approved_by`),
|
|
3378
|
+
approvedDate: getValueByPath(dataSource, `${recordPath}.last_approved_at`),
|
|
3293
3379
|
};
|
|
3294
3380
|
return result;
|
|
3295
3381
|
}, [mode, currentSchemaData, storeValues]);
|
|
@@ -3298,6 +3384,21 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3298
3384
|
const sectionId = sectionToRender['section-id'];
|
|
3299
3385
|
const gridId = `section-panels-${sectionId}`;
|
|
3300
3386
|
const sectionClassId = `section-${sectionId}`;
|
|
3387
|
+
// IntakeForm mode: accordion expand/collapse state (supports toggle)
|
|
3388
|
+
const [standaloneExpanded, setStandaloneExpanded] = useState(true); // For sectionIndex undefined (standalone use)
|
|
3389
|
+
const isExpandedFromContainer = typeof sectionIndex === 'number' && expandedSectionIndex === sectionIndex;
|
|
3390
|
+
const isExpandedStandalone = sectionIndex === undefined && standaloneExpanded;
|
|
3391
|
+
const isExpanded = mode === 'IntakeForm' && (isExpandedFromContainer || isExpandedStandalone);
|
|
3392
|
+
const handleAccordionToggle = useCallback(() => {
|
|
3393
|
+
if (mode !== 'IntakeForm')
|
|
3394
|
+
return;
|
|
3395
|
+
if (typeof sectionIndex === 'number' && onExpandSection) {
|
|
3396
|
+
onExpandSection(sectionIndex);
|
|
3397
|
+
}
|
|
3398
|
+
else if (sectionIndex === undefined) {
|
|
3399
|
+
setStandaloneExpanded(prev => !prev);
|
|
3400
|
+
}
|
|
3401
|
+
}, [mode, sectionIndex, onExpandSection]);
|
|
3301
3402
|
// Recursively count all vertical panels, especially those nested inside horizontal panels
|
|
3302
3403
|
// Typically: horizontal panels at first level contain vertical panels at second level
|
|
3303
3404
|
// Accounts for panel-column-span: a panel with column-span 3 counts as 3 columns
|
|
@@ -3432,13 +3533,15 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3432
3533
|
});
|
|
3433
3534
|
};
|
|
3434
3535
|
// Create section with widgets readonly/editable based on edit mode
|
|
3536
|
+
// IntakeForm: editable when isDraft is true or undefined; readonly when isDraft is false. Edit Details never shown.
|
|
3537
|
+
// RegistryView/CRView: use isEditMode (edit overlay flow)
|
|
3538
|
+
const widgetsEditable = mode === 'IntakeForm' ? (isDraft !== false) : isEditMode;
|
|
3435
3539
|
const editableSection = useMemo(() => {
|
|
3436
|
-
// Always apply readonly/editable state based on edit mode
|
|
3437
3540
|
return {
|
|
3438
3541
|
...sectionToRender,
|
|
3439
|
-
panels: makePanelsEditable(sectionToRender.panels,
|
|
3542
|
+
panels: makePanelsEditable(sectionToRender.panels, widgetsEditable),
|
|
3440
3543
|
};
|
|
3441
|
-
}, [sectionToRender,
|
|
3544
|
+
}, [sectionToRender, widgetsEditable]);
|
|
3442
3545
|
// Handle edit button click
|
|
3443
3546
|
const handleEdit = () => {
|
|
3444
3547
|
// Capture height BEFORE entering edit mode to preserve space
|
|
@@ -3449,8 +3552,9 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3449
3552
|
setIsEditMode(true);
|
|
3450
3553
|
};
|
|
3451
3554
|
// Render the edit section (absolutely positioned duplicate via portal)
|
|
3555
|
+
// IntakeForm never uses this overlay - content is shown inline in accordion
|
|
3452
3556
|
const renderEditSection = () => {
|
|
3453
|
-
if (!isEditMode || !editSectionPosition)
|
|
3557
|
+
if (mode === 'IntakeForm' || !isEditMode || !editSectionPosition)
|
|
3454
3558
|
return null;
|
|
3455
3559
|
const editGridId = `${gridId}-edit`;
|
|
3456
3560
|
return createPortal(jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("style", { children: `
|
|
@@ -3508,79 +3612,164 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3508
3612
|
}, children: [sectionToRender['section-title'] && (jsxRuntimeExports.jsx("h2", { className: "text-xl font-semibold mb-4", style: { fontFamily: 'Roboto, sans-serif', marginTop: '35px' }, children: translateConfig(sectionToRender['section-title']) })), jsxRuntimeExports.jsxs("div", { id: editGridId, className: "section-panels", children: [editableSection.panels.map((panel, index) => {
|
|
3509
3613
|
const isLastPanel = index === editableSection.panels.length - 1;
|
|
3510
3614
|
return (jsxRuntimeExports.jsx("div", { className: `panel-wrapper ${isLastPanel ? 'last-panel-wrapper' : ''}`, children: jsxRuntimeExports.jsx(PanelRenderer, { panel: panel, dataSourceRequestHandler: dataSourceRequestHandler, schemaData: namespacedSchemaData, onValueChange: onValueChange, isEditMode: true }) }, panel['panel-id'] || `section-panel-${index}`));
|
|
3511
|
-
}), hasSupportingDocuments && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("hr", { className: "my-4 w-full", style: { height: '1px', backgroundColor: '#F2BA1A', border: 'none' } }), jsxRuntimeExports.jsxs("div", { className: "supporting-documents-container", children: [jsxRuntimeExports.jsxs("button", { type: "button", onClick: () => setIsDocumentsExpanded(!isDocumentsExpanded), className: "supporting-documents-title-button w-full flex items-center text-left", children: [jsxRuntimeExports.jsx("span", { className: "font-semibold", style: { fontFamily: 'Roboto, sans-serif', fontSize: '16px' }, children: translate('common.supportedDocuments') || 'Supported Documents' }), jsxRuntimeExports.jsx("
|
|
3615
|
+
}), hasSupportingDocuments && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("hr", { className: "my-4 w-full", style: { height: '1px', backgroundColor: '#F2BA1A', border: 'none' } }), jsxRuntimeExports.jsxs("div", { className: "supporting-documents-container", children: [jsxRuntimeExports.jsxs("button", { type: "button", onClick: () => setIsDocumentsExpanded(!isDocumentsExpanded), className: "supporting-documents-title-button w-full flex items-center text-left", children: [jsxRuntimeExports.jsx("span", { className: "font-semibold", style: { fontFamily: 'Roboto, sans-serif', fontSize: '16px' }, children: translate('common.supportedDocuments') || 'Supported Documents' }), jsxRuntimeExports.jsx("img", { src: isDocumentsExpanded ? img$7 : img$6, alt: "Toggle Documents", className: "w-4 h-2.25 transition-transform ml-2" })] }), isDocumentsExpanded && (jsxRuntimeExports.jsx("div", { className: "supporting-documents-grid mt-4", children: supportingDocuments.map((doc, index) => {
|
|
3512
3616
|
const docConfig = createDocumentWidgetConfig(doc, sectionId, index);
|
|
3513
3617
|
return (jsxRuntimeExports.jsx("div", { className: "supporting-document-item", children: jsxRuntimeExports.jsx(FileInputWidget, { config: docConfig }) }, `${sectionId}-doc-${index}`));
|
|
3514
|
-
}) }))] })] })), jsxRuntimeExports.jsx("hr", { className: "w-full", style: { height: '1px', backgroundColor: '#F2BA1A', border: 'none', marginTop: hasSupportingDocuments ? '20px' : 0, marginBottom: '20px' } }), jsxRuntimeExports.jsx("div", { className: "edit-controls-container", style: { marginBottom: '20px' }, children: jsxRuntimeExports.jsxs("div", { className: "edit-controls-buttons", children: [jsxRuntimeExports.jsx("button", { onClick: handleCancel, className: "bg-white hover:bg-gray-50 text-gray-900 text-sm font-medium px-6 py-2 transition-colors border border-gray-300", style: { fontFamily: 'Roboto, sans-serif', borderRadius: '10px' }, children: translate('common.cancel') || 'Cancel' }), jsxRuntimeExports.jsx("button", { onClick: handleSave, className: "bg-gray-900 hover:bg-gray-800 text-white text-sm font-medium px-6 py-2 transition-colors", style: { fontFamily: 'Roboto, sans-serif', borderRadius: '10px' }, children: translate('common.save') || 'Save' })] }) })] })] })] }), document.body);
|
|
3618
|
+
}) }))] })] })), jsxRuntimeExports.jsx("hr", { className: "w-full", style: { height: '1px', backgroundColor: '#F2BA1A', border: 'none', marginTop: hasSupportingDocuments ? '20px' : 0, marginBottom: '20px' } }), jsxRuntimeExports.jsx("div", { className: "edit-controls-container", style: { marginBottom: '20px' }, children: jsxRuntimeExports.jsxs("div", { className: "edit-controls-buttons", children: [jsxRuntimeExports.jsx("button", { onClick: handleCancel, className: "bg-white hover:bg-gray-50 text-gray-900 text-sm font-medium px-6 py-2 transition-colors border border-gray-300", style: { fontFamily: 'Roboto, sans-serif', borderRadius: '10px' }, children: translate('common.cancel') || 'Cancel' }), jsxRuntimeExports.jsx("button", { onClick: handleSave, disabled: !isDirty, className: "bg-gray-900 hover:bg-gray-800 text-white text-sm font-medium px-6 py-2 transition-colors disabled:opacity-50 disabled:cursor-not-allowed", style: { fontFamily: 'Roboto, sans-serif', borderRadius: '10px' }, children: translate('common.save') || 'Save' })] }) })] })] })] }), document.body);
|
|
3515
3619
|
};
|
|
3516
|
-
const
|
|
3517
|
-
|
|
3518
|
-
|
|
3519
|
-
if (panel.widgets) {
|
|
3520
|
-
widgets = [...widgets, ...panel.widgets];
|
|
3521
|
-
}
|
|
3522
|
-
if (panel.panels) {
|
|
3523
|
-
widgets = [...widgets, ...collectWidgets(panel.panels)];
|
|
3524
|
-
}
|
|
3525
|
-
});
|
|
3526
|
-
return widgets;
|
|
3527
|
-
};
|
|
3528
|
-
const trackSectionChages = (widgets, sourceData, useNamespacedPaths = false) => {
|
|
3620
|
+
const trackSectionChages = (widgets, sourceData, pathPrefix) => {
|
|
3621
|
+
if (!widgets || widgets.length === 0)
|
|
3622
|
+
return [];
|
|
3529
3623
|
const snapshot = {};
|
|
3530
3624
|
let hasTable = false;
|
|
3531
|
-
|
|
3625
|
+
if (!sectionRegisterId)
|
|
3626
|
+
return [];
|
|
3627
|
+
const resolvePath = (path) => (pathPrefix ? `${pathPrefix}.${path}` : path);
|
|
3532
3628
|
widgets.forEach(widget => {
|
|
3533
|
-
const
|
|
3534
|
-
if (!
|
|
3629
|
+
const widgetPath = widget['widget-data-path'];
|
|
3630
|
+
if (!widgetPath)
|
|
3535
3631
|
return;
|
|
3536
|
-
if (widget['widget-type'] === 'table' ||
|
|
3632
|
+
if (widget['widget-type'] === 'table' ||
|
|
3633
|
+
widget['widget-type'] === 'simple-table' ||
|
|
3634
|
+
widget['widget'] === 'table') {
|
|
3537
3635
|
hasTable = true;
|
|
3538
3636
|
}
|
|
3539
|
-
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
: Object.fromEntries(Object.entries(originalDataPath).map(([key, path]) => [key, `${namespace}.${path}`])))
|
|
3544
|
-
: originalDataPath;
|
|
3545
|
-
// Always store snapshot using original paths (for change tracking)
|
|
3546
|
-
// Handle multi-path (object) or single path (string)
|
|
3547
|
-
if (typeof originalDataPath === 'object') {
|
|
3548
|
-
// Multi-path: store each path separately using original paths
|
|
3549
|
-
Object.entries(originalDataPath).forEach(([key, path]) => {
|
|
3550
|
-
if (typeof path === 'string') {
|
|
3551
|
-
// Read from source using namespaced path if needed
|
|
3552
|
-
const readPath = useNamespacedPaths && namespace ? `${namespace}.${path}` : path;
|
|
3553
|
-
snapshot[path] = getValueByPath(sourceData, readPath);
|
|
3637
|
+
if (typeof widgetPath === 'object') {
|
|
3638
|
+
Object.values(widgetPath).forEach((path) => {
|
|
3639
|
+
if (typeof path === 'string' && path.length > 0) {
|
|
3640
|
+
snapshot[path] = getValueByPath(sourceData, resolvePath(path));
|
|
3554
3641
|
}
|
|
3555
3642
|
});
|
|
3556
3643
|
}
|
|
3557
|
-
else if (typeof
|
|
3558
|
-
|
|
3559
|
-
const readPath = useNamespacedPaths && namespace ? `${namespace}.${originalDataPath}` : originalDataPath;
|
|
3560
|
-
snapshot[originalDataPath] = getValueByPath(sourceData, readPath);
|
|
3644
|
+
else if (typeof widgetPath === 'string') {
|
|
3645
|
+
snapshot[widgetPath] = getValueByPath(sourceData, resolvePath(widgetPath));
|
|
3561
3646
|
}
|
|
3562
3647
|
});
|
|
3563
|
-
if (hasTable
|
|
3648
|
+
if (!hasTable) {
|
|
3564
3649
|
const cleanedSnapshot = {};
|
|
3565
|
-
Object.entries(snapshot).forEach(([
|
|
3566
|
-
const
|
|
3567
|
-
?
|
|
3568
|
-
:
|
|
3569
|
-
cleanedSnapshot[
|
|
3650
|
+
Object.entries(snapshot).forEach(([fullPath, value]) => {
|
|
3651
|
+
const fieldPath = fullPath.includes('.')
|
|
3652
|
+
? fullPath.split('.').slice(1).join('.')
|
|
3653
|
+
: fullPath;
|
|
3654
|
+
cleanedSnapshot[fieldPath] = value;
|
|
3570
3655
|
});
|
|
3656
|
+
const sectionData = pathPrefix
|
|
3657
|
+
? getValueByPath(sourceData, resolvePath(sectionRegisterId))
|
|
3658
|
+
: sourceData[sectionRegisterId];
|
|
3571
3659
|
return [
|
|
3572
|
-
{
|
|
3660
|
+
{
|
|
3661
|
+
...sectionData,
|
|
3573
3662
|
...cleanedSnapshot,
|
|
3574
|
-
edit_action: "UPDATE"
|
|
3575
|
-
}
|
|
3663
|
+
edit_action: "UPDATE",
|
|
3664
|
+
},
|
|
3576
3665
|
];
|
|
3577
3666
|
}
|
|
3578
|
-
const
|
|
3579
|
-
return
|
|
3667
|
+
const tableEntry = Object.entries(snapshot).find(([key, value]) => key.endsWith('.records') && Array.isArray(value));
|
|
3668
|
+
return tableEntry ? tableEntry[1] : [];
|
|
3580
3669
|
};
|
|
3581
3670
|
// Get original section (without namespace) for building snapshots
|
|
3582
3671
|
// This ensures we use the original data paths when saving
|
|
3583
3672
|
const originalSection = section;
|
|
3673
|
+
/** Build a full section snapshot (records + files) for dirty comparison. Works with or without sectionRegisterId (e.g. IntakeForm). */
|
|
3674
|
+
const buildSectionSnapshot = useCallback((sourceData, pathPrefix) => {
|
|
3675
|
+
const sectionWidgets = collectWidgets(originalSection.panels);
|
|
3676
|
+
const resolvePath = (path) => (pathPrefix ? `${pathPrefix}.${path}` : path);
|
|
3677
|
+
let records;
|
|
3678
|
+
const recordsFromTrack = trackSectionChages(sectionWidgets, sourceData, pathPrefix);
|
|
3679
|
+
if (recordsFromTrack.length > 0) {
|
|
3680
|
+
records = recordsFromTrack;
|
|
3681
|
+
}
|
|
3682
|
+
else {
|
|
3683
|
+
// IntakeForm / no sectionRegisterId: build comparable snapshot from widget values
|
|
3684
|
+
const snapshot = {};
|
|
3685
|
+
sectionWidgets.forEach((widget) => {
|
|
3686
|
+
const widgetPath = widget['widget-data-path'];
|
|
3687
|
+
if (!widgetPath)
|
|
3688
|
+
return;
|
|
3689
|
+
if (typeof widgetPath === 'object') {
|
|
3690
|
+
Object.values(widgetPath).forEach((path) => {
|
|
3691
|
+
if (typeof path === 'string' && path.length > 0) {
|
|
3692
|
+
snapshot[path] = getValueByPath(sourceData, resolvePath(path));
|
|
3693
|
+
}
|
|
3694
|
+
});
|
|
3695
|
+
}
|
|
3696
|
+
else if (typeof widgetPath === 'string') {
|
|
3697
|
+
snapshot[widgetPath] = getValueByPath(sourceData, resolvePath(widgetPath));
|
|
3698
|
+
}
|
|
3699
|
+
});
|
|
3700
|
+
records = [{ ...snapshot }];
|
|
3701
|
+
}
|
|
3702
|
+
const files = [];
|
|
3703
|
+
if (hasSupportingDocuments) {
|
|
3704
|
+
const originalSupportingDocuments = originalSection['section-supporting-documents'] || [];
|
|
3705
|
+
originalSupportingDocuments.forEach((doc) => {
|
|
3706
|
+
const originalDataPath = doc['document-data-path'];
|
|
3707
|
+
const storeDataPath = pathPrefix && originalDataPath
|
|
3708
|
+
? `${pathPrefix}.${originalDataPath}`
|
|
3709
|
+
: originalDataPath;
|
|
3710
|
+
files.push(getValueByPath(sourceData, storeDataPath));
|
|
3711
|
+
});
|
|
3712
|
+
}
|
|
3713
|
+
return { records, files };
|
|
3714
|
+
}, [originalSection, hasSupportingDocuments]);
|
|
3715
|
+
// Capture baseline when entering edit mode (used for isDirty comparison)
|
|
3716
|
+
const baselineSnapshotRef = useRef(null);
|
|
3717
|
+
// IntakeForm only: increment when baseline is updated after save - forces badge to update (refs don't trigger re-renders)
|
|
3718
|
+
const [intakeFormBaselineTrigger, setIntakeFormBaselineTrigger] = useState(0);
|
|
3719
|
+
// IntakeForm: treat as edit mode for dirty tracking when isDraft. RegistryView: use isEditMode.
|
|
3720
|
+
const effectiveEditModeForDirty = mode === 'IntakeForm' ? (isDraft !== false) : isEditMode;
|
|
3721
|
+
// Compute isDirty: compare current store state to baseline (only when in edit mode)
|
|
3722
|
+
const isDirty = useMemo(() => {
|
|
3723
|
+
if (!effectiveEditModeForDirty)
|
|
3724
|
+
return false;
|
|
3725
|
+
const baseline = baselineSnapshotRef.current;
|
|
3726
|
+
if (!baseline)
|
|
3727
|
+
return false;
|
|
3728
|
+
const currentSnapshot = buildSectionSnapshot(storeValues, namespace);
|
|
3729
|
+
return JSON.stringify(baseline) !== JSON.stringify(currentSnapshot);
|
|
3730
|
+
}, [effectiveEditModeForDirty, storeValues, namespace, buildSectionSnapshot, intakeFormBaselineTrigger]);
|
|
3731
|
+
// Set baseline when entering edit mode; clear when leaving (baseline captured only on entry)
|
|
3732
|
+
useEffect(() => {
|
|
3733
|
+
if (effectiveEditModeForDirty) {
|
|
3734
|
+
const oldSchemaData = schemaData || contextSchemaData || {};
|
|
3735
|
+
if (namespace) {
|
|
3736
|
+
const namespacedSchema = getValueByPath(oldSchemaData, namespace);
|
|
3737
|
+
baselineSnapshotRef.current = namespacedSchema
|
|
3738
|
+
? buildSectionSnapshot(namespacedSchema)
|
|
3739
|
+
: buildSectionSnapshot(oldSchemaData);
|
|
3740
|
+
}
|
|
3741
|
+
else {
|
|
3742
|
+
baselineSnapshotRef.current = buildSectionSnapshot(oldSchemaData);
|
|
3743
|
+
}
|
|
3744
|
+
}
|
|
3745
|
+
else {
|
|
3746
|
+
baselineSnapshotRef.current = null;
|
|
3747
|
+
onSectionDirtyChange?.(sectionId, false);
|
|
3748
|
+
}
|
|
3749
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- baseline must be captured only when effectiveEditModeForDirty toggles
|
|
3750
|
+
}, [effectiveEditModeForDirty]);
|
|
3751
|
+
// Notify parent when isDirty changes (only while in edit mode)
|
|
3752
|
+
useEffect(() => {
|
|
3753
|
+
if (effectiveEditModeForDirty && onSectionDirtyChange) {
|
|
3754
|
+
onSectionDirtyChange(sectionId, isDirty);
|
|
3755
|
+
}
|
|
3756
|
+
}, [effectiveEditModeForDirty, isDirty, sectionId, onSectionDirtyChange]);
|
|
3757
|
+
// IntakeForm only: section status badge (Saved / Modified and not saved / no badge when pristine)
|
|
3758
|
+
const intakeFormSectionStatus = useMemo(() => {
|
|
3759
|
+
if (mode !== 'IntakeForm')
|
|
3760
|
+
return null;
|
|
3761
|
+
const hasValue = (v) => v !== undefined && v !== null && (typeof v !== 'string' || v.trim().length > 0);
|
|
3762
|
+
const currentSnapshot = buildSectionSnapshot(storeValues, namespace);
|
|
3763
|
+
const record = currentSnapshot.records?.[0];
|
|
3764
|
+
const hasData = record &&
|
|
3765
|
+
typeof record === 'object' &&
|
|
3766
|
+
Object.values(record).some((v) => hasValue(v));
|
|
3767
|
+
if (isDirty)
|
|
3768
|
+
return 'modified';
|
|
3769
|
+
if (hasData)
|
|
3770
|
+
return 'saved';
|
|
3771
|
+
return null;
|
|
3772
|
+
}, [mode, isDirty, storeValues, namespace, buildSectionSnapshot]);
|
|
3584
3773
|
// Handle save button click
|
|
3585
3774
|
const handleSave = async () => {
|
|
3586
3775
|
if (!store || !onSectionSave) {
|
|
@@ -3593,10 +3782,14 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3593
3782
|
const sectionWidgets = collectWidgets(originalSection.panels);
|
|
3594
3783
|
const currentState = store.getState().widget;
|
|
3595
3784
|
const currentSchemaData = currentState.values || {};
|
|
3785
|
+
const isSectionValid = sectionValidate(originalSection, currentSchemaData, dispatch);
|
|
3786
|
+
if (!isSectionValid) {
|
|
3787
|
+
return;
|
|
3788
|
+
}
|
|
3596
3789
|
// schema data before section change
|
|
3597
3790
|
const oldSchemaData = schemaData || contextSchemaData;
|
|
3598
|
-
// schema data after section change
|
|
3599
|
-
const newSchemaData = trackSectionChages(sectionWidgets, currentSchemaData);
|
|
3791
|
+
// schema data after section change (use namespace when store has namespaced paths)
|
|
3792
|
+
const newSchemaData = trackSectionChages(sectionWidgets, currentSchemaData, namespace);
|
|
3600
3793
|
// Include supporting documents in the snapshot if they exist
|
|
3601
3794
|
const sectionFiles = [];
|
|
3602
3795
|
if (hasSupportingDocuments) {
|
|
@@ -3614,7 +3807,8 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3614
3807
|
if (JSON.stringify(oldSchemaData) !== JSON.stringify(newSchemaData)) {
|
|
3615
3808
|
try {
|
|
3616
3809
|
const sectionchanges = {
|
|
3617
|
-
section_id:
|
|
3810
|
+
section_id: dbSectionId,
|
|
3811
|
+
section_register_id: sectionRegisterId,
|
|
3618
3812
|
records: [...newSchemaData],
|
|
3619
3813
|
files: [...sectionFiles]
|
|
3620
3814
|
};
|
|
@@ -3626,6 +3820,51 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3626
3820
|
}
|
|
3627
3821
|
setIsEditMode(false);
|
|
3628
3822
|
};
|
|
3823
|
+
// IntakeForm: save section then collapse current and expand next (or stay on final section)
|
|
3824
|
+
const handleIntakeFormSave = useCallback(async () => {
|
|
3825
|
+
if (!store || !onSectionSave || sectionIndex === undefined)
|
|
3826
|
+
return;
|
|
3827
|
+
const sectionWidgets = collectWidgets(originalSection.panels);
|
|
3828
|
+
const currentState = store.getState().widget;
|
|
3829
|
+
const currentSchemaData = currentState.values || {};
|
|
3830
|
+
const isSectionValid = sectionValidate(originalSection, currentSchemaData, dispatch);
|
|
3831
|
+
if (!isSectionValid)
|
|
3832
|
+
return;
|
|
3833
|
+
const oldSchemaData = schemaData || contextSchemaData;
|
|
3834
|
+
const newSchemaData = trackSectionChages(sectionWidgets, currentSchemaData, namespace);
|
|
3835
|
+
const sectionFiles = [];
|
|
3836
|
+
if (hasSupportingDocuments) {
|
|
3837
|
+
const originalSupportingDocuments = originalSection['section-supporting-documents'] || [];
|
|
3838
|
+
originalSupportingDocuments.forEach((doc) => {
|
|
3839
|
+
const originalDataPath = doc['document-data-path'];
|
|
3840
|
+
const storeDataPath = namespace && originalDataPath
|
|
3841
|
+
? `${namespace}.${originalDataPath}`
|
|
3842
|
+
: originalDataPath;
|
|
3843
|
+
sectionFiles.push(getValueByPath(currentSchemaData, storeDataPath));
|
|
3844
|
+
});
|
|
3845
|
+
}
|
|
3846
|
+
if (JSON.stringify(oldSchemaData) !== JSON.stringify(newSchemaData)) {
|
|
3847
|
+
try {
|
|
3848
|
+
await onSectionSave({
|
|
3849
|
+
section_id: dbSectionId,
|
|
3850
|
+
section_register_id: sectionRegisterId,
|
|
3851
|
+
records: [...newSchemaData],
|
|
3852
|
+
files: [...sectionFiles],
|
|
3853
|
+
});
|
|
3854
|
+
}
|
|
3855
|
+
catch (error) {
|
|
3856
|
+
console.error('Section Changes Save failed', error);
|
|
3857
|
+
return;
|
|
3858
|
+
}
|
|
3859
|
+
}
|
|
3860
|
+
// IntakeForm only: update baseline so section is no longer dirty; trigger re-render so badge updates to "Saved"
|
|
3861
|
+
if (mode === 'IntakeForm') {
|
|
3862
|
+
baselineSnapshotRef.current = buildSectionSnapshot(currentSchemaData, namespace);
|
|
3863
|
+
setIntakeFormBaselineTrigger((prev) => prev + 1);
|
|
3864
|
+
}
|
|
3865
|
+
onSectionDirtyChange?.(sectionId, false);
|
|
3866
|
+
onSectionSaveSuccess?.(sectionIndex);
|
|
3867
|
+
}, [store, onSectionSave, onSectionSaveSuccess, sectionIndex, originalSection, schemaData, contextSchemaData, namespace, hasSupportingDocuments, dbSectionId, sectionRegisterId, dispatch, buildSectionSnapshot, sectionId, onSectionDirtyChange, mode]);
|
|
3629
3868
|
// Handle cancel button click
|
|
3630
3869
|
const handleCancel = () => {
|
|
3631
3870
|
// Revert values in store to original schema data
|
|
@@ -3844,12 +4083,57 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3844
4083
|
align-items: center;
|
|
3845
4084
|
gap: 0.5rem;
|
|
3846
4085
|
}
|
|
3847
|
-
|
|
4086
|
+
|
|
4087
|
+
/* IntakeForm accordion */
|
|
4088
|
+
.${sectionClassId}.intake-form-accordion-item {
|
|
4089
|
+
border-color: #E5E7EB;
|
|
4090
|
+
transition: box-shadow 0.2s ease, border-color 0.2s ease;
|
|
4091
|
+
}
|
|
4092
|
+
.${sectionClassId}.intake-form-accordion-item:hover {
|
|
4093
|
+
border-color: #D1D5DB;
|
|
4094
|
+
}
|
|
4095
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-accordion-header {
|
|
4096
|
+
transition: opacity 0.2s ease, background-color 0.2s ease;
|
|
4097
|
+
}
|
|
4098
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-accordion-header:hover {
|
|
4099
|
+
opacity: 0.85;
|
|
4100
|
+
}
|
|
4101
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-accordion-header:focus-visible {
|
|
4102
|
+
outline: 2px solid #F2BA1A;
|
|
4103
|
+
outline-offset: 2px;
|
|
4104
|
+
}
|
|
4105
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-accordion-content {
|
|
4106
|
+
padding-top: 8px;
|
|
4107
|
+
padding-bottom: 4px;
|
|
4108
|
+
}
|
|
4109
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-edit-controls {
|
|
4110
|
+
justify-content: flex-end;
|
|
4111
|
+
width: 100%;
|
|
4112
|
+
}
|
|
4113
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-prev-btn {
|
|
4114
|
+
color: rgba(0, 0, 0, 0.5) !important;
|
|
4115
|
+
}
|
|
4116
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-prev-btn:disabled {
|
|
4117
|
+
color: rgba(0, 0, 0, 0.3) !important;
|
|
4118
|
+
}
|
|
4119
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-prev-btn:hover:not(:disabled) {
|
|
4120
|
+
background-color: #F3F4F6;
|
|
4121
|
+
border-color: #FD8C3E;
|
|
4122
|
+
}
|
|
4123
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-save-btn:hover:not(:disabled) {
|
|
4124
|
+
background-color: #E5E7EB;
|
|
4125
|
+
}
|
|
4126
|
+
` }), jsxRuntimeExports.jsx("div", { ref: sectionRef, className: `section ${sectionClassId} px-4 sm:px-6 lg:px-8 border-2 border-white ${mode === 'IntakeForm' ? 'intake-form-accordion-item' : ''}`, "data-section-id": sectionId, "data-has-table": hasTableWidget ? 'true' : 'false', "data-has-explicit-span": hasExplicitTableSpan ? 'true' : 'false', "data-edit-mode": isEditMode ? 'true' : 'false', "data-section-dirty": isEditMode && isDirty ? 'true' : 'false', "data-column-span": columnSpan, "data-change-request-type": changeRequestType, "data-intake-form-expanded": mode === 'IntakeForm' ? (isExpanded ? 'true' : 'false') : undefined, style: {
|
|
3848
4127
|
gridColumn: `span ${columnSpan}`,
|
|
3849
4128
|
width: '100%',
|
|
3850
4129
|
borderRadius: '10px',
|
|
3851
|
-
|
|
3852
|
-
|
|
4130
|
+
// IntakeForm expanded: edit-mode colors. Others: normal or faded for old CR
|
|
4131
|
+
...(mode === 'IntakeForm' && isExpanded
|
|
4132
|
+
? { backgroundColor: '#F3E6BC', border: '1px dashed #ED7C22' }
|
|
4133
|
+
: {
|
|
4134
|
+
backgroundColor: changeRequestType === 'old' ? '#F9F9F9' : '#FFFFFF',
|
|
4135
|
+
opacity: changeRequestType === 'old' ? 0.95 : 1,
|
|
4136
|
+
}),
|
|
3853
4137
|
...(isEditMode && sectionHeight ? {
|
|
3854
4138
|
height: `${sectionHeight}px`,
|
|
3855
4139
|
minHeight: `${sectionHeight}px`
|
|
@@ -3858,81 +4142,225 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3858
4142
|
minHeight: 'auto',
|
|
3859
4143
|
height: 'auto'
|
|
3860
4144
|
}),
|
|
3861
|
-
}, children:
|
|
3862
|
-
|
|
3863
|
-
|
|
3864
|
-
|
|
3865
|
-
|
|
3866
|
-
|
|
3867
|
-
|
|
3868
|
-
|
|
3869
|
-
|
|
3870
|
-
|
|
3871
|
-
|
|
3872
|
-
|
|
3873
|
-
|
|
3874
|
-
|
|
3875
|
-
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
|
|
3879
|
-
|
|
3880
|
-
|
|
3881
|
-
|
|
3882
|
-
|
|
3883
|
-
|
|
4145
|
+
}, children: mode === 'IntakeForm' ? (
|
|
4146
|
+
/* IntakeForm: accordion layout - header always visible, content only when expanded */
|
|
4147
|
+
jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsxs("button", { type: "button", id: `intake-form-accordion-header-${sectionId}`, className: "intake-form-accordion-header", onClick: handleAccordionToggle, "aria-expanded": isExpanded, "aria-controls": isExpanded ? `intake-form-accordion-content-${sectionId}` : undefined, style: {
|
|
4148
|
+
width: '100%',
|
|
4149
|
+
display: 'flex',
|
|
4150
|
+
alignItems: 'flex-start',
|
|
4151
|
+
justifyContent: 'space-between',
|
|
4152
|
+
padding: '16px 0',
|
|
4153
|
+
marginTop: '16px',
|
|
4154
|
+
marginBottom: 0,
|
|
4155
|
+
background: 'none',
|
|
4156
|
+
border: 'none',
|
|
4157
|
+
cursor: 'pointer',
|
|
4158
|
+
textAlign: 'left',
|
|
4159
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4160
|
+
}, children: [jsxRuntimeExports.jsxs("div", { style: { flex: 1, display: 'flex', alignItems: 'center', gap: '12px', minWidth: 0 }, children: [jsxRuntimeExports.jsx("h2", { className: "text-xl font-semibold", style: { margin: 0 }, children: sectionToRender['section-title']
|
|
4161
|
+
? translateConfig(sectionToRender['section-title'])
|
|
4162
|
+
: `Section ${(sectionIndex ?? 0) + 1}` }), intakeFormSectionStatus === 'saved' && (jsxRuntimeExports.jsx("span", { style: {
|
|
4163
|
+
display: 'inline-block',
|
|
4164
|
+
padding: '4px 10px',
|
|
4165
|
+
borderRadius: '9999px',
|
|
4166
|
+
fontSize: '12px',
|
|
4167
|
+
fontWeight: 500,
|
|
4168
|
+
backgroundColor: '#D1FAE5',
|
|
4169
|
+
color: '#047857',
|
|
4170
|
+
}, children: translate('common.sectionSaved') || 'Saved' })), intakeFormSectionStatus === 'modified' && (jsxRuntimeExports.jsx("span", { style: {
|
|
4171
|
+
display: 'inline-block',
|
|
4172
|
+
padding: '4px 10px',
|
|
4173
|
+
borderRadius: '9999px',
|
|
4174
|
+
fontSize: '12px',
|
|
4175
|
+
fontWeight: 500,
|
|
4176
|
+
backgroundColor: '#FEE2E2',
|
|
4177
|
+
color: '#B91C1C',
|
|
4178
|
+
}, children: translate('common.sectionModified') || 'Modified and not saved' }))] }), jsxRuntimeExports.jsx("img", { src: isExpanded ? img$7 : img$6, alt: isExpanded ? 'Collapse' : 'Expand', className: "w-5 h-5 transition-transform", style: { flexShrink: 0, marginLeft: '12px' }, "aria-hidden": true })] }), isExpanded && (jsxRuntimeExports.jsx("div", { id: `intake-form-accordion-content-${sectionId}`, className: "intake-form-accordion-content", role: "region", "aria-labelledby": `intake-form-accordion-header-${sectionId}`, children: jsxRuntimeExports.jsxs("div", { id: gridId, className: "section-panels", style: { paddingTop: '8px' }, children: [editableSection.panels.map((panel, index) => (jsxRuntimeExports.jsx("div", { className: "panel-wrapper", children: jsxRuntimeExports.jsx(PanelRenderer, { panel: panel, dataSourceRequestHandler: dataSourceRequestHandler, schemaData: namespacedSchemaData, onValueChange: onValueChange }) }, panel['panel-id'] || `section-panel-${index}`))), hasSupportingDocuments && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("hr", { className: "my-4 w-full", style: { height: '1px', backgroundColor: '#E5E7EB', border: 'none' } }), jsxRuntimeExports.jsxs("div", { className: "supporting-documents-container", children: [jsxRuntimeExports.jsx("span", { className: "font-semibold", style: { fontFamily: 'Roboto, sans-serif', fontSize: '16px' }, children: translate('common.supportedDocuments') || 'Supported Documents' }), jsxRuntimeExports.jsx("div", { className: "supporting-documents-grid mt-4", children: supportingDocuments.map((doc, docIndex) => {
|
|
4179
|
+
const docConfig = createDocumentWidgetConfig(doc, sectionId, docIndex);
|
|
4180
|
+
return (jsxRuntimeExports.jsx("div", { className: "supporting-document-item", children: jsxRuntimeExports.jsx(FileInputWidget, { config: docConfig }) }, `${sectionId}-doc-${docIndex}`));
|
|
4181
|
+
}) })] })] })), jsxRuntimeExports.jsx("hr", { className: "my-4 w-full", style: { height: '1px', backgroundColor: '#E5E7EB', border: 'none' } }), jsxRuntimeExports.jsxs("div", { className: "intake-form-edit-controls", style: {
|
|
3884
4182
|
display: 'flex',
|
|
3885
|
-
justifyContent: '
|
|
4183
|
+
justifyContent: 'flex-end',
|
|
3886
4184
|
alignItems: 'center',
|
|
4185
|
+
gap: '12px',
|
|
4186
|
+
marginBottom: '20px',
|
|
3887
4187
|
width: '100%',
|
|
3888
|
-
}, children: [jsxRuntimeExports.jsxs("
|
|
3889
|
-
|
|
4188
|
+
}, children: [jsxRuntimeExports.jsxs("button", { type: "button", onClick: () => onPreviousSection?.(sectionIndex), disabled: sectionIndex === 0, className: "intake-form-prev-btn", style: {
|
|
4189
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4190
|
+
fontSize: '14px',
|
|
4191
|
+
fontWeight: 400,
|
|
4192
|
+
padding: '8px 24px',
|
|
4193
|
+
borderRadius: '10px',
|
|
4194
|
+
border: '1px solid #FD8C3E',
|
|
4195
|
+
background: '#F3F4F6',
|
|
4196
|
+
color: sectionIndex === 0 ? 'rgba(0, 0, 0, 0.3)' : 'rgba(0, 0, 0, 0.5)',
|
|
4197
|
+
cursor: sectionIndex === 0 ? 'not-allowed' : 'pointer',
|
|
4198
|
+
display: 'inline-flex',
|
|
3890
4199
|
alignItems: 'center',
|
|
3891
|
-
gap: '
|
|
3892
|
-
|
|
3893
|
-
|
|
3894
|
-
|
|
3895
|
-
|
|
3896
|
-
|
|
3897
|
-
|
|
3898
|
-
|
|
3899
|
-
|
|
3900
|
-
|
|
3901
|
-
|
|
3902
|
-
|
|
3903
|
-
}, children: crViewData.createdBy })), jsxRuntimeExports.jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { marginLeft: '6px' }, children: jsxRuntimeExports.jsx("path", { d: "M12.6667 2.66667H12V2C12 1.63181 11.7015 1.33333 11.3333 1.33333C10.9651 1.33333 10.6667 1.63181 10.6667 2V2.66667H5.33333V2C5.33333 1.63181 5.03486 1.33333 4.66667 1.33333C4.29848 1.33333 4 1.63181 4 2V2.66667H3.33333C2.59695 2.66667 2 3.26362 2 4V13.3333C2 14.0697 2.59695 14.6667 3.33333 14.6667H12.6667C13.403 14.6667 14 14.0697 14 13.3333V4C14 3.26362 13.403 2.66667 12.6667 2.66667ZM12.6667 13.3333H3.33333V6.66667H12.6667V13.3333Z", fill: "#ED7C22" }) }), crViewData?.createdDate && (jsxRuntimeExports.jsx("span", { style: {
|
|
3904
|
-
fontFamily: 'Roboto, sans-serif',
|
|
3905
|
-
fontSize: '14px',
|
|
3906
|
-
color: '#000000',
|
|
3907
|
-
fontWeight: 'normal',
|
|
3908
|
-
}, children: crViewData.createdDate }))] }), jsxRuntimeExports.jsxs("div", { className: "approved-by-section", style: {
|
|
3909
|
-
display: 'flex',
|
|
4200
|
+
gap: '8px',
|
|
4201
|
+
}, children: [jsxRuntimeExports.jsx("img", { src: img$5, alt: "", "aria-hidden": true, style: { width: '14px', height: '14px', opacity: sectionIndex === 0 ? 0.5 : 0.5 } }), translate('common.previous') || 'Prev'] }), jsxRuntimeExports.jsxs("button", { type: "button", onClick: handleIntakeFormSave, disabled: isDraft === false, className: "intake-form-save-btn", style: {
|
|
4202
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4203
|
+
fontSize: '14px',
|
|
4204
|
+
fontWeight: 400,
|
|
4205
|
+
padding: '8px 24px',
|
|
4206
|
+
borderRadius: '10px',
|
|
4207
|
+
border: '1px solid #FD8C3E',
|
|
4208
|
+
background: isDraft === false ? '#9CA3AF' : '#F3F4F6',
|
|
4209
|
+
color: isDraft === false ? 'rgba(0, 0, 0, 0.3)' : 'rgba(0, 0, 0, 0.5)',
|
|
4210
|
+
cursor: isDraft === false ? 'not-allowed' : 'pointer',
|
|
4211
|
+
display: 'inline-flex',
|
|
3910
4212
|
alignItems: 'center',
|
|
3911
|
-
gap: '
|
|
3912
|
-
|
|
3913
|
-
|
|
3914
|
-
|
|
3915
|
-
|
|
3916
|
-
|
|
3917
|
-
|
|
3918
|
-
|
|
3919
|
-
|
|
3920
|
-
|
|
3921
|
-
|
|
3922
|
-
|
|
3923
|
-
|
|
3924
|
-
|
|
3925
|
-
|
|
3926
|
-
|
|
3927
|
-
|
|
3928
|
-
|
|
3929
|
-
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
|
|
3933
|
-
|
|
4213
|
+
gap: '8px',
|
|
4214
|
+
}, children: [translate('common.save') || 'Save', jsxRuntimeExports.jsx("img", { src: img$4, alt: "", "aria-hidden": true, style: { width: '14px', height: '14px' } })] })] })] }) }))] })) : (
|
|
4215
|
+
/* RegistryView / CRView: standard layout */
|
|
4216
|
+
jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [sectionToRender['section-title'] && (jsxRuntimeExports.jsxs("div", { style: {
|
|
4217
|
+
marginTop: '35px',
|
|
4218
|
+
marginBottom: '16px',
|
|
4219
|
+
display: 'flex',
|
|
4220
|
+
alignItems: 'center',
|
|
4221
|
+
gap: '12px',
|
|
4222
|
+
flexWrap: 'wrap',
|
|
4223
|
+
}, children: [jsxRuntimeExports.jsx("h2", { className: "text-xl font-semibold", style: { margin: 0 }, children: translateConfig(sectionToRender['section-title']) }), mode === 'CRView' && changeRequestType && showChangeRequestLabel && (jsxRuntimeExports.jsx("span", { style: {
|
|
4224
|
+
display: 'inline-flex',
|
|
4225
|
+
alignItems: 'center',
|
|
4226
|
+
padding: '4px 12px',
|
|
4227
|
+
borderRadius: '4px',
|
|
4228
|
+
fontSize: '12px',
|
|
4229
|
+
fontWeight: 600,
|
|
4230
|
+
textTransform: 'uppercase',
|
|
4231
|
+
letterSpacing: '0.5px',
|
|
4232
|
+
backgroundColor: changeRequestType === 'new' ? '#28a745' : '#ffcccc', // Green for new, faded red for old
|
|
4233
|
+
color: changeRequestType === 'new' ? '#FFFFFF' : '#cc0000',
|
|
4234
|
+
whiteSpace: 'nowrap',
|
|
4235
|
+
boxShadow: changeRequestType === 'new' ? '0 2px 4px rgba(40, 167, 69, 0.3)' : 'none',
|
|
4236
|
+
}, children: changeRequestType === 'new' ? 'New' : 'Old' }))] })), jsxRuntimeExports.jsxs("div", { id: gridId, className: "section-panels", style: mode === 'RegistryView' && hideEditButton ? { paddingBottom: '40px' } : {}, children: [editableSection.panels.map((panel, index) => (jsxRuntimeExports.jsx("div", { className: "panel-wrapper", children: jsxRuntimeExports.jsx(PanelRenderer, { panel: panel, dataSourceRequestHandler: dataSourceRequestHandler, schemaData: namespacedSchemaData, onValueChange: onValueChange }) }, panel['panel-id'] || `section-panel-${index}`))), mode === 'CRView' && crViewData && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("hr", { className: "border-gray-300 w-full", style: { height: '1px', marginTop: '20px', marginBottom: '0px' } }), jsxRuntimeExports.jsxs("div", { className: "cr-view-container", style: {
|
|
4237
|
+
marginTop: '20px',
|
|
4238
|
+
paddingBottom: '30px',
|
|
4239
|
+
display: 'flex',
|
|
4240
|
+
justifyContent: 'space-between',
|
|
4241
|
+
alignItems: 'center',
|
|
4242
|
+
width: '100%',
|
|
4243
|
+
}, children: [jsxRuntimeExports.jsxs("div", { className: "created-by-section", style: {
|
|
4244
|
+
display: 'flex',
|
|
4245
|
+
alignItems: 'center',
|
|
4246
|
+
gap: '6px',
|
|
4247
|
+
flex: 1,
|
|
4248
|
+
}, children: [jsxRuntimeExports.jsx("span", { style: {
|
|
4249
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4250
|
+
fontSize: '14px',
|
|
4251
|
+
color: '#000000',
|
|
4252
|
+
fontWeight: 'normal',
|
|
4253
|
+
}, children: "Created by" }), jsxRuntimeExports.jsx("img", { src: img$a, alt: "Person", width: "16", height: "16", style: { filter: 'brightness(0) saturate(100%) invert(56%) sepia(45%) saturate(5139%) hue-rotate(348deg) brightness(96%) contrast(92%)' } }), crViewData?.createdBy && (jsxRuntimeExports.jsx("span", { style: {
|
|
4254
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4255
|
+
fontSize: '14px',
|
|
4256
|
+
color: '#000000',
|
|
4257
|
+
fontWeight: 'normal',
|
|
4258
|
+
}, children: crViewData.createdBy })), jsxRuntimeExports.jsx("img", { src: img$9, alt: "Calendar", width: "16", height: "16", style: { marginLeft: '6px' } }), crViewData?.createdDate && (jsxRuntimeExports.jsx("span", { style: {
|
|
4259
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4260
|
+
fontSize: '14px',
|
|
4261
|
+
color: '#000000',
|
|
4262
|
+
fontWeight: 'normal',
|
|
4263
|
+
}, children: crViewData.createdDate }))] }), jsxRuntimeExports.jsxs("div", { className: "approved-by-section", style: {
|
|
4264
|
+
display: 'flex',
|
|
4265
|
+
alignItems: 'center',
|
|
4266
|
+
gap: '6px',
|
|
4267
|
+
flex: 1,
|
|
4268
|
+
justifyContent: 'flex-end',
|
|
4269
|
+
}, children: [jsxRuntimeExports.jsx("span", { style: {
|
|
4270
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4271
|
+
fontSize: '14px',
|
|
4272
|
+
color: '#000000',
|
|
4273
|
+
fontWeight: 'normal',
|
|
4274
|
+
}, children: "Approved by" }), jsxRuntimeExports.jsx("img", { src: img$a, alt: "Person", width: "16", height: "16", style: { filter: 'brightness(0) saturate(100%) invert(56%) sepia(45%) saturate(5139%) hue-rotate(348deg) brightness(96%) contrast(92%)' } }), crViewData?.approvedBy && (jsxRuntimeExports.jsx("span", { style: {
|
|
4275
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4276
|
+
fontSize: '14px',
|
|
4277
|
+
color: '#000000',
|
|
4278
|
+
fontWeight: 'normal',
|
|
4279
|
+
}, children: crViewData.approvedBy })), jsxRuntimeExports.jsx("img", { src: img$9, alt: "Calendar", width: "16", height: "16", style: { marginLeft: '6px' } }), crViewData?.approvedDate && (jsxRuntimeExports.jsx("span", { style: {
|
|
4280
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4281
|
+
fontSize: '14px',
|
|
4282
|
+
color: '#000000',
|
|
4283
|
+
fontWeight: 'normal',
|
|
4284
|
+
}, children: crViewData.approvedDate }))] })] })] })), mode === 'RegistryView' && !hideEditButton && (jsxRuntimeExports.jsx("hr", { className: "border-gray-300 w-full", style: { height: '1px', marginTop: !isEditMode ? '20px' : 0, marginBottom: '14px' } })), mode === 'RegistryView' && !isEditMode && !hideEditButton && (jsxRuntimeExports.jsx("div", { className: "flex justify-center items-center", style: { marginBottom: '20px' }, children: jsxRuntimeExports.jsxs("button", { onClick: handleEdit, className: "font-normal inline-flex items-center gap-2 bg-transparent border-0 p-0 cursor-pointer hover:opacity-80", style: {
|
|
4285
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4286
|
+
fontSize: '16px',
|
|
4287
|
+
color: 'rgba(0, 0, 0, 0.50)'
|
|
4288
|
+
}, children: ["Edit Details", jsxRuntimeExports.jsx("img", { src: img$8, alt: "right-arrow", className: "w-3.5 h-3.5 brightness-0 opacity-50" })] }) }))] })] })) })] }));
|
|
3934
4289
|
};
|
|
3935
4290
|
|
|
4291
|
+
/**
|
|
4292
|
+
* Build SectionChanges from section config and current store values.
|
|
4293
|
+
* Works for intake forms (no sectionRegisterId) and edit flows (with sectionRegisterId).
|
|
4294
|
+
*/
|
|
4295
|
+
function buildSectionChanges(section, storeValues, namespace, options) {
|
|
4296
|
+
const sectionWidgets = collectWidgets(section.panels);
|
|
4297
|
+
const resolvePath = (path) => (namespace ? `${namespace}.${path}` : path);
|
|
4298
|
+
const snapshot = {};
|
|
4299
|
+
let hasTable = false;
|
|
4300
|
+
sectionWidgets.forEach((widget) => {
|
|
4301
|
+
const widgetPath = widget['widget-data-path'];
|
|
4302
|
+
if (!widgetPath)
|
|
4303
|
+
return;
|
|
4304
|
+
const widgetType = widget['widget-type'];
|
|
4305
|
+
if (widgetType === 'table' ||
|
|
4306
|
+
widgetType === 'simple-table' ||
|
|
4307
|
+
widget.widget === 'table') {
|
|
4308
|
+
hasTable = true;
|
|
4309
|
+
}
|
|
4310
|
+
if (typeof widgetPath === 'object') {
|
|
4311
|
+
Object.values(widgetPath).forEach((path) => {
|
|
4312
|
+
if (typeof path === 'string' && path.length > 0) {
|
|
4313
|
+
snapshot[path] = getValueByPath(storeValues, resolvePath(path));
|
|
4314
|
+
}
|
|
4315
|
+
});
|
|
4316
|
+
}
|
|
4317
|
+
else if (typeof widgetPath === 'string') {
|
|
4318
|
+
snapshot[widgetPath] = getValueByPath(storeValues, resolvePath(widgetPath));
|
|
4319
|
+
}
|
|
4320
|
+
});
|
|
4321
|
+
let records;
|
|
4322
|
+
if (!hasTable) {
|
|
4323
|
+
const cleanedSnapshot = {};
|
|
4324
|
+
Object.entries(snapshot).forEach(([fullPath, value]) => {
|
|
4325
|
+
const fieldPath = fullPath.includes('.')
|
|
4326
|
+
? fullPath.split('.').slice(1).join('.')
|
|
4327
|
+
: fullPath;
|
|
4328
|
+
cleanedSnapshot[fieldPath] = value;
|
|
4329
|
+
});
|
|
4330
|
+
const { sectionRegisterId } = {};
|
|
4331
|
+
const sectionData = sectionRegisterId && namespace
|
|
4332
|
+
? getValueByPath(storeValues, `${namespace}.${sectionRegisterId}`) || {}
|
|
4333
|
+
: (sectionRegisterId
|
|
4334
|
+
? storeValues[sectionRegisterId]
|
|
4335
|
+
: {}) || {};
|
|
4336
|
+
records = [
|
|
4337
|
+
{
|
|
4338
|
+
...sectionData,
|
|
4339
|
+
...cleanedSnapshot,
|
|
4340
|
+
...(sectionRegisterId ? { edit_action: 'UPDATE' } : {}),
|
|
4341
|
+
},
|
|
4342
|
+
];
|
|
4343
|
+
}
|
|
4344
|
+
else {
|
|
4345
|
+
const tableEntry = Object.entries(snapshot).find(([key, value]) => key.endsWith('.records') && Array.isArray(value));
|
|
4346
|
+
records = tableEntry ? tableEntry[1] : [];
|
|
4347
|
+
}
|
|
4348
|
+
const files = [];
|
|
4349
|
+
const supportingDocs = section['section-supporting-documents'] || [];
|
|
4350
|
+
supportingDocs.forEach((doc) => {
|
|
4351
|
+
const path = doc['document-data-path'];
|
|
4352
|
+
if (path) {
|
|
4353
|
+
files.push(getValueByPath(storeValues, resolvePath(path)));
|
|
4354
|
+
}
|
|
4355
|
+
});
|
|
4356
|
+
return {
|
|
4357
|
+
section_id: options?.dbSectionId ?? section['section-id'],
|
|
4358
|
+
section_register_id: options?.sectionRegisterId,
|
|
4359
|
+
records,
|
|
4360
|
+
files: files.length > 0 ? files : undefined,
|
|
4361
|
+
};
|
|
4362
|
+
}
|
|
4363
|
+
|
|
3936
4364
|
/**
|
|
3937
4365
|
* Recursively check if a panel contains a table widget
|
|
3938
4366
|
*/
|
|
@@ -4014,10 +4442,121 @@ const countVerticalPanels = (panels) => {
|
|
|
4014
4442
|
* - All sections align to the same grid, ensuring right-side alignment
|
|
4015
4443
|
* - Handles nested structure: multiple horizontal panels, each with multiple vertical panels
|
|
4016
4444
|
*/
|
|
4017
|
-
const SectionsContainer = ({ sections, dataSourceRequestHandler: propDataSourceRequestHandler, schemaData, onValueChange, className = '', onSectionSave, hideEditButton = false, mode = 'RegistryView', namespace, }) => {
|
|
4445
|
+
const SectionsContainer = ({ sections, dataSourceRequestHandler: propDataSourceRequestHandler, schemaData, onValueChange, className = '', onSectionSave, hideEditButton = false, mode = 'RegistryView', isDraft, namespace, onSectionDirtyChange, onFormReady, }) => {
|
|
4446
|
+
const store = useStore();
|
|
4447
|
+
const dispatch = useDispatch();
|
|
4448
|
+
useSelector((state) => state.widget?.values || {});
|
|
4018
4449
|
// Get dataSourceRequestHandler from context if not provided as prop
|
|
4019
|
-
const { dataSourceRequestHandler: contextDataSourceRequestHandler } = useWidgetContext();
|
|
4450
|
+
const { dataSourceRequestHandler: contextDataSourceRequestHandler, schemaData: contextSchemaData } = useWidgetContext();
|
|
4020
4451
|
const dataSourceRequestHandler = propDataSourceRequestHandler || contextDataSourceRequestHandler;
|
|
4452
|
+
// IntakeForm mode: accordion state - which section is expanded (null = none; first expanded by default)
|
|
4453
|
+
const [expandedSectionIndex, setExpandedSectionIndex] = useState(0);
|
|
4454
|
+
const safeSections = sections ?? [];
|
|
4455
|
+
const prevSectionsLengthRef = useRef(safeSections.length);
|
|
4456
|
+
// Track dirty (unsaved changes) per section for form handle validation
|
|
4457
|
+
const sectionDirtyMapRef = useRef({});
|
|
4458
|
+
const handleSectionDirtyChange = useCallback((sectionId, isDirty) => {
|
|
4459
|
+
sectionDirtyMapRef.current = { ...sectionDirtyMapRef.current, [sectionId]: isDirty };
|
|
4460
|
+
onSectionDirtyChange?.(sectionId, isDirty);
|
|
4461
|
+
}, [onSectionDirtyChange]);
|
|
4462
|
+
// Toggle: click expanded section to collapse; click collapsed section to expand
|
|
4463
|
+
const handleExpandSection = useCallback((index) => {
|
|
4464
|
+
setExpandedSectionIndex(prev => (prev === index ? null : index));
|
|
4465
|
+
}, []);
|
|
4466
|
+
// IntakeForm mode: called after section save - collapse current, expand next
|
|
4467
|
+
const handleSectionSaveSuccess = useCallback((index) => {
|
|
4468
|
+
if (index + 1 < safeSections.length) {
|
|
4469
|
+
setExpandedSectionIndex(index + 1);
|
|
4470
|
+
}
|
|
4471
|
+
// Last section: stay expanded (no action)
|
|
4472
|
+
}, [safeSections.length]);
|
|
4473
|
+
// IntakeForm mode: called when Previous clicked - collapse current, expand previous
|
|
4474
|
+
const handlePreviousSection = useCallback((index) => {
|
|
4475
|
+
if (index > 0) {
|
|
4476
|
+
setExpandedSectionIndex(index - 1);
|
|
4477
|
+
}
|
|
4478
|
+
}, []);
|
|
4479
|
+
// Reset/init expanded section when sections change or first load (e.g. async form load)
|
|
4480
|
+
useEffect(() => {
|
|
4481
|
+
if (mode !== 'IntakeForm')
|
|
4482
|
+
return;
|
|
4483
|
+
const currentLength = safeSections.length;
|
|
4484
|
+
const prevLength = prevSectionsLengthRef.current;
|
|
4485
|
+
// Clamp when sections shrink or invalid index
|
|
4486
|
+
if (currentLength > 0 && expandedSectionIndex !== null && expandedSectionIndex >= currentLength) {
|
|
4487
|
+
setExpandedSectionIndex(0);
|
|
4488
|
+
}
|
|
4489
|
+
// When sections first load (0 -> N), ensure first section is expanded
|
|
4490
|
+
if (prevLength === 0 && currentLength > 0) {
|
|
4491
|
+
setExpandedSectionIndex(0);
|
|
4492
|
+
}
|
|
4493
|
+
prevSectionsLengthRef.current = currentLength;
|
|
4494
|
+
}, [mode, safeSections.length, expandedSectionIndex]);
|
|
4495
|
+
const UNSAVED_CHANGES_ERROR = 'Unsaved changes detected. Please save all sections before submitting.';
|
|
4496
|
+
// Form handle for onFormReady - allows host to validate and get all section data from its own Submit button
|
|
4497
|
+
const formHandle = useMemo(() => {
|
|
4498
|
+
const getValues = () => store.getState().widget?.values || {};
|
|
4499
|
+
const getNamespace = (section, index) => namespace
|
|
4500
|
+
? typeof namespace === 'string'
|
|
4501
|
+
? namespace
|
|
4502
|
+
: namespace(section['section-id'], index)
|
|
4503
|
+
: undefined;
|
|
4504
|
+
const checkNoUnsavedChanges = () => {
|
|
4505
|
+
const hasDirty = Object.values(sectionDirtyMapRef.current).some(Boolean);
|
|
4506
|
+
if (hasDirty) {
|
|
4507
|
+
throw new Error(UNSAVED_CHANGES_ERROR);
|
|
4508
|
+
}
|
|
4509
|
+
};
|
|
4510
|
+
return {
|
|
4511
|
+
validate: async () => {
|
|
4512
|
+
checkNoUnsavedChanges();
|
|
4513
|
+
const values = getValues();
|
|
4514
|
+
let allValid = true;
|
|
4515
|
+
for (let i = 0; i < safeSections.length; i++) {
|
|
4516
|
+
const section = safeSections[i];
|
|
4517
|
+
const ns = getNamespace(section, i);
|
|
4518
|
+
const sectionToValidate = ns ? namespaceSectionConfig(section, ns) : section;
|
|
4519
|
+
const valid = sectionValidate(sectionToValidate, values, dispatch);
|
|
4520
|
+
if (!valid)
|
|
4521
|
+
allValid = false;
|
|
4522
|
+
}
|
|
4523
|
+
return allValid;
|
|
4524
|
+
},
|
|
4525
|
+
getFormData: () => getValues(),
|
|
4526
|
+
validateAndGetData: async () => {
|
|
4527
|
+
checkNoUnsavedChanges();
|
|
4528
|
+
const values = getValues();
|
|
4529
|
+
const results = [];
|
|
4530
|
+
for (let i = 0; i < safeSections.length; i++) {
|
|
4531
|
+
const section = safeSections[i];
|
|
4532
|
+
const ns = getNamespace(section, i);
|
|
4533
|
+
const sectionToValidate = ns ? namespaceSectionConfig(section, ns) : section;
|
|
4534
|
+
const valid = sectionValidate(sectionToValidate, values, dispatch);
|
|
4535
|
+
if (!valid) {
|
|
4536
|
+
throw new Error('Validation failed');
|
|
4537
|
+
}
|
|
4538
|
+
results.push(buildSectionChanges(section, values, ns));
|
|
4539
|
+
}
|
|
4540
|
+
return results;
|
|
4541
|
+
},
|
|
4542
|
+
getStructuredData: () => {
|
|
4543
|
+
const values = getValues();
|
|
4544
|
+
const results = [];
|
|
4545
|
+
for (let i = 0; i < safeSections.length; i++) {
|
|
4546
|
+
const section = safeSections[i];
|
|
4547
|
+
const ns = getNamespace(section, i);
|
|
4548
|
+
results.push(buildSectionChanges(section, values, ns));
|
|
4549
|
+
}
|
|
4550
|
+
return results;
|
|
4551
|
+
},
|
|
4552
|
+
};
|
|
4553
|
+
}, [store, dispatch, safeSections, namespace]);
|
|
4554
|
+
// Call onFormReady when form is ready (sections loaded)
|
|
4555
|
+
useEffect(() => {
|
|
4556
|
+
if (onFormReady && safeSections.length > 0) {
|
|
4557
|
+
onFormReady(formHandle);
|
|
4558
|
+
}
|
|
4559
|
+
}, [onFormReady, formHandle, safeSections.length]);
|
|
4021
4560
|
// Warn if dataSourceRequestHandler is missing
|
|
4022
4561
|
useEffect(() => {
|
|
4023
4562
|
if (!dataSourceRequestHandler) {
|
|
@@ -4029,7 +4568,7 @@ const SectionsContainer = ({ sections, dataSourceRequestHandler: propDataSourceR
|
|
|
4029
4568
|
// Find the maximum number of vertical panels across all sections
|
|
4030
4569
|
// This determines the grid size (minimum 3 columns)
|
|
4031
4570
|
// Also account for table widgets and their explicit column spans
|
|
4032
|
-
const maxVerticalPanels = Math.max(...
|
|
4571
|
+
const maxVerticalPanels = Math.max(...safeSections.map(section => {
|
|
4033
4572
|
const panelCount = countVerticalPanels(section.panels);
|
|
4034
4573
|
const tableWidgetSpan = getTableWidgetColumnSpan(section.panels);
|
|
4035
4574
|
// Use explicit table widget span if specified, otherwise use default logic
|
|
@@ -4067,14 +4606,38 @@ const SectionsContainer = ({ sections, dataSourceRequestHandler: propDataSourceR
|
|
|
4067
4606
|
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
4068
4607
|
}
|
|
4069
4608
|
}
|
|
4070
|
-
|
|
4609
|
+
|
|
4610
|
+
/* IntakeForm mode: vertical accordion list instead of grid */
|
|
4611
|
+
#${containerId}.sections-container-intake-form {
|
|
4612
|
+
display: flex;
|
|
4613
|
+
flex-direction: column;
|
|
4614
|
+
gap: 0.75rem;
|
|
4615
|
+
grid-template-columns: unset;
|
|
4616
|
+
}
|
|
4617
|
+
#${containerId}.sections-container-intake-form > .section {
|
|
4618
|
+
grid-column: unset;
|
|
4619
|
+
width: 100%;
|
|
4620
|
+
}
|
|
4621
|
+
` }), jsxRuntimeExports.jsx("div", { id: containerId, className: `sections-container ${className}${mode === 'IntakeForm' ? ' sections-container-intake-form' : ''}`, children: safeSections.map((section, index) => {
|
|
4071
4622
|
// Determine namespace for this section
|
|
4072
4623
|
const sectionNamespace = namespace
|
|
4073
4624
|
? (typeof namespace === 'string' ? namespace : namespace(section['section-id'], index))
|
|
4074
4625
|
: undefined;
|
|
4626
|
+
// IntakeForm mode: pass accordion state and handlers
|
|
4627
|
+
const intakeFormProps = mode === 'IntakeForm'
|
|
4628
|
+
? {
|
|
4629
|
+
sectionIndex: index,
|
|
4630
|
+
sectionCount: safeSections.length,
|
|
4631
|
+
expandedSectionIndex,
|
|
4632
|
+
onExpandSection: handleExpandSection,
|
|
4633
|
+
onSectionSaveSuccess: handleSectionSaveSuccess,
|
|
4634
|
+
onPreviousSection: handlePreviousSection,
|
|
4635
|
+
isDraft,
|
|
4636
|
+
}
|
|
4637
|
+
: {};
|
|
4075
4638
|
// Check if section has explicit column span
|
|
4076
4639
|
if (section['section-column-span']) {
|
|
4077
|
-
return (jsxRuntimeExports.jsx(SectionRenderer, { section: section, dataSourceRequestHandler: dataSourceRequestHandler, schemaData: schemaData, onValueChange: onValueChange, gridColumnSpan: section['section-column-span'], onSectionSave: onSectionSave, hideEditButton: hideEditButton, mode: mode, namespace: sectionNamespace }, section['section-id']));
|
|
4640
|
+
return (jsxRuntimeExports.jsx(SectionRenderer, { section: section, dataSourceRequestHandler: dataSourceRequestHandler, schemaData: schemaData, onValueChange: onValueChange, gridColumnSpan: section['section-column-span'], onSectionSave: onSectionSave, hideEditButton: hideEditButton, mode: mode, namespace: sectionNamespace, onSectionDirtyChange: handleSectionDirtyChange, ...intakeFormProps }, section['section-id']));
|
|
4078
4641
|
}
|
|
4079
4642
|
const verticalPanelsCount = countVerticalPanels(section.panels);
|
|
4080
4643
|
const tableWidgetColumnSpan = getTableWidgetColumnSpan(section.panels);
|
|
@@ -4085,7 +4648,7 @@ const SectionsContainer = ({ sections, dataSourceRequestHandler: propDataSourceR
|
|
|
4085
4648
|
const columnSpan = tableWidgetColumnSpan !== null
|
|
4086
4649
|
? tableWidgetColumnSpan
|
|
4087
4650
|
: (containsTable ? Math.max(verticalPanelsCount, 2) : verticalPanelsCount);
|
|
4088
|
-
return (jsxRuntimeExports.jsx(SectionRenderer, { section: section, dataSourceRequestHandler: dataSourceRequestHandler, schemaData: schemaData, onValueChange: onValueChange, gridColumnSpan: columnSpan, onSectionSave: onSectionSave, hideEditButton: hideEditButton, mode: mode, namespace: sectionNamespace }, section['section-id']));
|
|
4651
|
+
return (jsxRuntimeExports.jsx(SectionRenderer, { section: section, dataSourceRequestHandler: dataSourceRequestHandler, schemaData: schemaData, onValueChange: onValueChange, gridColumnSpan: columnSpan, onSectionSave: onSectionSave, hideEditButton: hideEditButton, mode: mode, namespace: sectionNamespace, onSectionDirtyChange: handleSectionDirtyChange, ...intakeFormProps }, section['section-id']));
|
|
4089
4652
|
}) })] }));
|
|
4090
4653
|
};
|
|
4091
4654
|
|
|
@@ -4525,19 +5088,7 @@ const JSONEditorPanel = ({ section, onChange, onReset, context = 'section', }) =
|
|
|
4525
5088
|
}, onMouseLeave: (e) => {
|
|
4526
5089
|
e.currentTarget.style.background = 'white';
|
|
4527
5090
|
e.currentTarget.style.borderColor = '#ddd';
|
|
4528
|
-
}, title: "Reset to original JSON", children: [jsxRuntimeExports.
|
|
4529
|
-
padding: '6px 12px',
|
|
4530
|
-
border: '1px solid #ddd',
|
|
4531
|
-
borderRadius: '10px',
|
|
4532
|
-
background: '#f3f3f3',
|
|
4533
|
-
color: '#666',
|
|
4534
|
-
cursor: 'pointer',
|
|
4535
|
-
display: 'flex',
|
|
4536
|
-
alignItems: 'center',
|
|
4537
|
-
gap: '6px',
|
|
4538
|
-
fontSize: '12px',
|
|
4539
|
-
fontWeight: 500,
|
|
4540
|
-
}, title: "Preview Section", children: [jsxRuntimeExports.jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("path", { d: "M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z" }), jsxRuntimeExports.jsx("circle", { cx: "12", cy: "12", r: "3" })] }), "Preview"] }), jsxRuntimeExports.jsx("span", { style: {
|
|
5091
|
+
}, title: "Reset to original JSON", children: [jsxRuntimeExports.jsx("img", { src: img$3, alt: "Reset", className: "w-3.5 h-3.5 grayscale opacity-70" }), "Reset"] }), jsxRuntimeExports.jsxs("button", { onClick: () => setShowPreview(true), className: "flex items-center gap-2 px-6 py-1.5 bg-[#4A90E2] hover:bg-[#357ABD] text-[#000000] font-bold rounded-full transition-all shadow-sm", title: "Preview Section", children: [jsxRuntimeExports.jsx("span", { className: "text-[14px]", children: "Preview" }), jsxRuntimeExports.jsx("img", { src: img$2, alt: "Preview", className: "w-3 h-3.5" })] }), jsxRuntimeExports.jsx("span", { style: {
|
|
4541
5092
|
fontSize: '12px',
|
|
4542
5093
|
color: !rawJsonView ? '#007bff' : '#6c757d',
|
|
4543
5094
|
fontWeight: !rawJsonView ? 600 : 400,
|
|
@@ -5377,7 +5928,7 @@ const VisualBuilderPanel = ({ section, selectedNode, onSelectNode, onSectionChan
|
|
|
5377
5928
|
justifyContent: 'center',
|
|
5378
5929
|
width: '32px',
|
|
5379
5930
|
height: '32px',
|
|
5380
|
-
}, title: isMaximized ? 'Minimize' : 'Maximize', children: isMaximized ? (jsxRuntimeExports.jsx("
|
|
5931
|
+
}, title: isMaximized ? 'Minimize' : 'Maximize', children: isMaximized ? (jsxRuntimeExports.jsx("img", { src: img, alt: "Minimize", width: "16", height: "16" })) : (jsxRuntimeExports.jsx("img", { src: img$1, alt: "Maximize", width: "16", height: "16" })) }))] })] }), jsxRuntimeExports.jsxs("div", { style: {
|
|
5381
5932
|
flex: 1,
|
|
5382
5933
|
display: 'flex',
|
|
5383
5934
|
overflow: 'hidden',
|
|
@@ -8185,10 +8736,11 @@ const ProfileWidget = ({ config }) => {
|
|
|
8185
8736
|
flex-shrink: 0;
|
|
8186
8737
|
}
|
|
8187
8738
|
|
|
8188
|
-
.${widgetClassId} .profile-avatar-placeholder
|
|
8189
|
-
width:
|
|
8190
|
-
height:
|
|
8191
|
-
|
|
8739
|
+
.${widgetClassId} .profile-avatar-placeholder img {
|
|
8740
|
+
width: 100%;
|
|
8741
|
+
height: 100%;
|
|
8742
|
+
border-radius: 8px;
|
|
8743
|
+
object-fit: cover;
|
|
8192
8744
|
}
|
|
8193
8745
|
|
|
8194
8746
|
.${widgetClassId} .profile-info {
|
|
@@ -8234,7 +8786,7 @@ const ProfileWidget = ({ config }) => {
|
|
|
8234
8786
|
if (placeholder) {
|
|
8235
8787
|
placeholder.style.display = 'flex';
|
|
8236
8788
|
}
|
|
8237
|
-
} })) : null, jsxRuntimeExports.jsx("div", { className: "profile-avatar-placeholder", style: { display: imageUrl ? 'none' : 'flex' }, children: jsxRuntimeExports.jsx("
|
|
8789
|
+
} })) : null, jsxRuntimeExports.jsx("div", { className: "profile-avatar-placeholder", style: { display: imageUrl ? 'none' : 'flex' }, children: jsxRuntimeExports.jsx("img", { src: img$f, alt: "Profile Placeholder" }) })] }), jsxRuntimeExports.jsxs("div", { className: "profile-info", children: [displayName && (jsxRuntimeExports.jsx("div", { className: "profile-name", children: displayName })), idValue && (jsxRuntimeExports.jsxs("div", { className: "profile-id", children: [showIdLabel && (jsxRuntimeExports.jsx("span", { className: "profile-id-label", children: "ID :" })), jsxRuntimeExports.jsx("span", { className: "profile-id-value", children: idValue })] }))] })] })] }));
|
|
8238
8790
|
};
|
|
8239
8791
|
|
|
8240
8792
|
const TextAreaWidget = ({ config }) => {
|