@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.js
CHANGED
|
@@ -920,700 +920,6 @@ const useWidgetEventBus = () => {
|
|
|
920
920
|
return React.useContext(WidgetEventBusContext);
|
|
921
921
|
};
|
|
922
922
|
|
|
923
|
-
// Define stable empty arrays to avoid selector reference issues
|
|
924
|
-
const EMPTY_ERRORS = [];
|
|
925
|
-
const EMPTY_DATA_SOURCE$1 = [];
|
|
926
|
-
const useBaseWidget = (options) => {
|
|
927
|
-
const { config, dataSourceRequestHandler, schemaData, onValueChange } = options;
|
|
928
|
-
const dispatch = reactRedux.useDispatch();
|
|
929
|
-
const eventBus = useWidgetEventBus();
|
|
930
|
-
const widgetId = config['widget-id'];
|
|
931
|
-
// Get state from Redux
|
|
932
|
-
const values = reactRedux.useSelector((state) => state.widget.values);
|
|
933
|
-
const errors = reactRedux.useSelector((state) => state.widget.errors[widgetId] ?? EMPTY_ERRORS);
|
|
934
|
-
const touched = reactRedux.useSelector((state) => state.widget.touched[widgetId] || false);
|
|
935
|
-
const loading = reactRedux.useSelector((state) => state.widget.loading[widgetId] || false);
|
|
936
|
-
const dataSourceOptions = reactRedux.useSelector((state) => state.widget.dataSources[widgetId] ?? EMPTY_DATA_SOURCE$1);
|
|
937
|
-
// Skip value handling for layout widgets (they don't store data values)
|
|
938
|
-
// Infer layout from widget-type
|
|
939
|
-
const isLayoutWidget = config['widget-type'] === 'layout';
|
|
940
|
-
// Track if user has explicitly set a value to prevent default from overwriting
|
|
941
|
-
const userHasSetValueRef = React.useRef(false);
|
|
942
|
-
// Use ref for values to avoid stale closures in handleChange
|
|
943
|
-
const valuesRef = React.useRef(values);
|
|
944
|
-
React.useEffect(() => {
|
|
945
|
-
valuesRef.current = values;
|
|
946
|
-
}, [values]);
|
|
947
|
-
// Track last dispatched value to prevent duplicate dispatches
|
|
948
|
-
const lastDispatchedValueRef = React.useRef(null);
|
|
949
|
-
// Get current value
|
|
950
|
-
const currentValue = React.useMemo(() => {
|
|
951
|
-
if (isLayoutWidget) {
|
|
952
|
-
return undefined; // Layout widgets don't have values
|
|
953
|
-
}
|
|
954
|
-
// Helper to extract displayable value from object (especially geo hierarchy objects)
|
|
955
|
-
const extractValueFromObject = (obj) => {
|
|
956
|
-
if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {
|
|
957
|
-
return obj;
|
|
958
|
-
}
|
|
959
|
-
// Check for geo hierarchy structure first
|
|
960
|
-
if ('geo_code_hierarchy_json' in obj || 'geo_lowest_level_value_id' in obj) {
|
|
961
|
-
if ('geo_lowest_level_value_id' in obj) {
|
|
962
|
-
return obj.geo_lowest_level_value_id;
|
|
963
|
-
}
|
|
964
|
-
// If it's a geo hierarchy object but no extractable ID, return undefined to avoid rendering object
|
|
965
|
-
return undefined;
|
|
966
|
-
}
|
|
967
|
-
// Try common value fields
|
|
968
|
-
if ('value' in obj) {
|
|
969
|
-
return obj.value;
|
|
970
|
-
}
|
|
971
|
-
if ('id' in obj) {
|
|
972
|
-
return obj.id;
|
|
973
|
-
}
|
|
974
|
-
if ('label' in obj) {
|
|
975
|
-
return obj.label;
|
|
976
|
-
}
|
|
977
|
-
if ('name' in obj) {
|
|
978
|
-
return obj.name;
|
|
979
|
-
}
|
|
980
|
-
// If no extractable value found, return undefined to avoid rendering object as React child
|
|
981
|
-
// This prevents "Objects are not valid as a React child" errors
|
|
982
|
-
return undefined;
|
|
983
|
-
};
|
|
984
|
-
// Try to get value from widgetId first (this should have the actual selected value)
|
|
985
|
-
// For geo widgets with dataPath, widgetId stores the actual ID, while dataPath stores the hierarchy object
|
|
986
|
-
let value = values[widgetId];
|
|
987
|
-
// Extract value if it's an object (handles geo hierarchy objects stored in widgetId)
|
|
988
|
-
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
989
|
-
value = extractValueFromObject(value);
|
|
990
|
-
}
|
|
991
|
-
// If widgetId doesn't have a value, try dataPath
|
|
992
|
-
if (value === undefined && config['widget-data-path']) {
|
|
993
|
-
value = getWidgetValue(values, config['widget-data-path'], widgetId);
|
|
994
|
-
// Extract value if it's an object (handles geo hierarchy objects from dataPath)
|
|
995
|
-
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
996
|
-
value = extractValueFromObject(value);
|
|
997
|
-
}
|
|
998
|
-
}
|
|
999
|
-
// If value is still undefined and user has set a value, try reading from widgetId as backup
|
|
1000
|
-
// This handles cases where dataPath lookup might fail temporarily
|
|
1001
|
-
if (value === undefined && userHasSetValueRef.current && values[widgetId] !== undefined) {
|
|
1002
|
-
value = values[widgetId];
|
|
1003
|
-
// Extract value if it's an object (handles geo hierarchy objects)
|
|
1004
|
-
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
1005
|
-
value = extractValueFromObject(value);
|
|
1006
|
-
}
|
|
1007
|
-
}
|
|
1008
|
-
// Final safety check: if value is still an object, extract displayable value
|
|
1009
|
-
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
1010
|
-
value = extractValueFromObject(value);
|
|
1011
|
-
}
|
|
1012
|
-
// If user has explicitly set a value, always return it (even if undefined/null)
|
|
1013
|
-
// This prevents the default from overwriting user selections
|
|
1014
|
-
if (userHasSetValueRef.current) {
|
|
1015
|
-
return value;
|
|
1016
|
-
}
|
|
1017
|
-
// Only fall back to default if user hasn't set a value yet
|
|
1018
|
-
// But check if value is explicitly null (user cleared it) vs undefined (never set)
|
|
1019
|
-
if (value === null) {
|
|
1020
|
-
return null; // User explicitly cleared it, don't use default
|
|
1021
|
-
}
|
|
1022
|
-
return value !== undefined ? value : config['widget-data-default'];
|
|
1023
|
-
}, [values, config, widgetId, isLayoutWidget]);
|
|
1024
|
-
// Initialize default value only once on mount (skip for layout widgets)
|
|
1025
|
-
React.useEffect(() => {
|
|
1026
|
-
if (isLayoutWidget) {
|
|
1027
|
-
return;
|
|
1028
|
-
}
|
|
1029
|
-
// Only initialize default if value is undefined and user hasn't set a value yet
|
|
1030
|
-
if (!userHasSetValueRef.current && config['widget-data-default'] !== undefined && currentValue === undefined) {
|
|
1031
|
-
handleChange(config['widget-data-default'], false);
|
|
1032
|
-
}
|
|
1033
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1034
|
-
}, [isLayoutWidget]); // Only run once on mount
|
|
1035
|
-
// Handle value change
|
|
1036
|
-
// CRITICAL: Don't include 'values' in dependency array - it causes the callback to be recreated
|
|
1037
|
-
// every time values change, which can lead to stale closures and double dispatches
|
|
1038
|
-
const handleChange = React.useCallback((newValue, validate = true) => {
|
|
1039
|
-
// Use valuesRef to get the latest values, not the stale closure value
|
|
1040
|
-
const currentValues = valuesRef.current;
|
|
1041
|
-
const currentValue = currentValues[widgetId] || getWidgetValue(currentValues, config['widget-data-path'], widgetId);
|
|
1042
|
-
// CRITICAL: Prevent setting the same value (avoids unnecessary dispatches and potential loops)
|
|
1043
|
-
if (currentValue === newValue) {
|
|
1044
|
-
return;
|
|
1045
|
-
}
|
|
1046
|
-
// Mark that user has set a value (unless this is the default initialization)
|
|
1047
|
-
if (newValue !== config['widget-data-default'] || userHasSetValueRef.current) {
|
|
1048
|
-
userHasSetValueRef.current = true;
|
|
1049
|
-
}
|
|
1050
|
-
// CRITICAL FIX: If there's no dataPath, just set the value directly
|
|
1051
|
-
// If there's a dataPath, we need to update both the widgetId and the dataPath
|
|
1052
|
-
if (!config['widget-data-path']) {
|
|
1053
|
-
// No dataPath: just set the value directly by widgetId
|
|
1054
|
-
// CRITICAL: Check if we just dispatched this value to prevent duplicate dispatches
|
|
1055
|
-
if (lastDispatchedValueRef.current === newValue) {
|
|
1056
|
-
return;
|
|
1057
|
-
}
|
|
1058
|
-
lastDispatchedValueRef.current = newValue;
|
|
1059
|
-
dispatch(setValue({ widgetId, value: newValue }));
|
|
1060
|
-
}
|
|
1061
|
-
else {
|
|
1062
|
-
// Has dataPath: update both widgetId and dataPath
|
|
1063
|
-
// CRITICAL: Create updated values object with newValue already set
|
|
1064
|
-
// This prevents setWidgetValue from reading stale values
|
|
1065
|
-
const currentValuesWithUpdate = {
|
|
1066
|
-
...valuesRef.current,
|
|
1067
|
-
[widgetId]: newValue, // Ensure widgetId has the new value
|
|
1068
|
-
};
|
|
1069
|
-
const updatedValues = setWidgetValue(currentValuesWithUpdate, config['widget-data-path'], widgetId, newValue);
|
|
1070
|
-
// setWidgetValue returns the complete updated structure with all existing data preserved
|
|
1071
|
-
// Use setValues to update the entire state with deep merge
|
|
1072
|
-
dispatch(setValues(updatedValues));
|
|
1073
|
-
}
|
|
1074
|
-
// Validate if needed
|
|
1075
|
-
if (validate) {
|
|
1076
|
-
const validationErrors = validateWidget(newValue, config['widget-data-validation'], config['widget-required']);
|
|
1077
|
-
dispatch(setError({ widgetId, errors: validationErrors }));
|
|
1078
|
-
}
|
|
1079
|
-
// Call custom onChange if provided
|
|
1080
|
-
if (onValueChange) {
|
|
1081
|
-
onValueChange(widgetId, newValue);
|
|
1082
|
-
}
|
|
1083
|
-
// Publish widget:change event
|
|
1084
|
-
// Skip publishing for last-level geo widgets (no child widgets waiting)
|
|
1085
|
-
const geoConfig = config['widget-geo-config'];
|
|
1086
|
-
const isLastLevelGeo = geoConfig?.isLastLevel === true;
|
|
1087
|
-
if (eventBus && !isLastLevelGeo) {
|
|
1088
|
-
eventBus.publish({
|
|
1089
|
-
type: 'widget:change',
|
|
1090
|
-
widgetId,
|
|
1091
|
-
value: newValue,
|
|
1092
|
-
timestamp: Date.now(),
|
|
1093
|
-
});
|
|
1094
|
-
}
|
|
1095
|
-
}, [config, widgetId, dispatch, onValueChange, eventBus] // Removed 'values' to prevent stale closures
|
|
1096
|
-
);
|
|
1097
|
-
// Handle blur
|
|
1098
|
-
const handleBlur = React.useCallback(() => {
|
|
1099
|
-
dispatch(setTouched({ widgetId, touched: true }));
|
|
1100
|
-
// Validate on blur
|
|
1101
|
-
const validationErrors = validateWidget(currentValue, config['widget-data-validation'], config['widget-required']);
|
|
1102
|
-
dispatch(setError({ widgetId, errors: validationErrors }));
|
|
1103
|
-
// Publish widget:blur event
|
|
1104
|
-
if (eventBus) {
|
|
1105
|
-
eventBus.publish({
|
|
1106
|
-
type: 'widget:blur',
|
|
1107
|
-
widgetId,
|
|
1108
|
-
value: currentValue,
|
|
1109
|
-
timestamp: Date.now(),
|
|
1110
|
-
});
|
|
1111
|
-
}
|
|
1112
|
-
}, [currentValue, config, widgetId, dispatch, eventBus]);
|
|
1113
|
-
// Get field value helper
|
|
1114
|
-
const getFieldValue = React.useCallback((path) => {
|
|
1115
|
-
return getWidgetValue(values, path, '');
|
|
1116
|
-
}, [values]);
|
|
1117
|
-
// Conditional visibility and enablement
|
|
1118
|
-
const isVisible = React.useMemo(() => {
|
|
1119
|
-
// Layout widgets are always visible unless explicitly hidden
|
|
1120
|
-
if (isLayoutWidget && !config['widget-data-options']?.condition) {
|
|
1121
|
-
return true;
|
|
1122
|
-
}
|
|
1123
|
-
return shouldShowWidget(config['widget-data-options'], values);
|
|
1124
|
-
}, [config['widget-data-options'], values, isLayoutWidget]);
|
|
1125
|
-
const isEnabled = React.useMemo(() => {
|
|
1126
|
-
// Layout widgets are always enabled (they don't have input state)
|
|
1127
|
-
if (isLayoutWidget) {
|
|
1128
|
-
return true;
|
|
1129
|
-
}
|
|
1130
|
-
if (config['widget-readonly']) {
|
|
1131
|
-
return false;
|
|
1132
|
-
}
|
|
1133
|
-
return shouldEnableWidget(config['widget-data-options'], values);
|
|
1134
|
-
}, [config['widget-readonly'], config['widget-data-options'], values, isLayoutWidget]);
|
|
1135
|
-
// Format value for display
|
|
1136
|
-
const formattedValue = React.useMemo(() => {
|
|
1137
|
-
if (!config['widget-data-format']) {
|
|
1138
|
-
return currentValue;
|
|
1139
|
-
}
|
|
1140
|
-
return formatValue(currentValue, config['widget-data-format'], config.widget);
|
|
1141
|
-
}, [currentValue, config]);
|
|
1142
|
-
// Track readonly state explicitly to detect changes
|
|
1143
|
-
// Use JSON.stringify to create a stable reference for the dependency array
|
|
1144
|
-
const isReadonly = config['widget-readonly'] ?? false;
|
|
1145
|
-
const dataSource = config['widget-data-source'];
|
|
1146
|
-
const geoConfig = config['widget-geo-config'];
|
|
1147
|
-
// Use ref to store handler to avoid stale closures
|
|
1148
|
-
const handlerRef = React.useRef(dataSourceRequestHandler);
|
|
1149
|
-
React.useEffect(() => {
|
|
1150
|
-
handlerRef.current = dataSourceRequestHandler;
|
|
1151
|
-
}, [dataSourceRequestHandler]);
|
|
1152
|
-
// Create a stable key for the config to detect changes
|
|
1153
|
-
// This ensures the effect runs when widget-readonly changes
|
|
1154
|
-
const apiService = dataSource?.type === 'api' ? dataSource.service : '';
|
|
1155
|
-
const apiEndpoint = dataSource?.type === 'api' ? dataSource.endpoint : '';
|
|
1156
|
-
const configKey = `${widgetId}-${isReadonly}-${dataSource?.type || 'none'}-${apiService}-${apiEndpoint}`;
|
|
1157
|
-
// Handle data source loading
|
|
1158
|
-
React.useEffect(() => {
|
|
1159
|
-
if (!dataSource) {
|
|
1160
|
-
return;
|
|
1161
|
-
}
|
|
1162
|
-
// For API data sources, check if widget is readonly
|
|
1163
|
-
// According to PRD: "Level 1 geo widgets load on widget mount or when entering edit mode"
|
|
1164
|
-
// So we should only load API data sources when widget is NOT readonly
|
|
1165
|
-
if (dataSource.type === 'api' && isReadonly) {
|
|
1166
|
-
return;
|
|
1167
|
-
}
|
|
1168
|
-
// For widgets with dependencies, check if dependency value exists
|
|
1169
|
-
if (dataSource.type === 'api' && dataSource.dependsOn) {
|
|
1170
|
-
// Check if dependency value exists
|
|
1171
|
-
let depValue = null;
|
|
1172
|
-
if (dataSource.dependsOn.includes('.')) {
|
|
1173
|
-
depValue = getWidgetValue(values, dataSource.dependsOn, '');
|
|
1174
|
-
}
|
|
1175
|
-
else {
|
|
1176
|
-
depValue = values[dataSource.dependsOn];
|
|
1177
|
-
}
|
|
1178
|
-
// If dependency is empty, don't load (will load when dependency has value)
|
|
1179
|
-
if (depValue === null || depValue === undefined || depValue === '') {
|
|
1180
|
-
return;
|
|
1181
|
-
}
|
|
1182
|
-
}
|
|
1183
|
-
const loadDataSource = async () => {
|
|
1184
|
-
// Get current handler from ref to avoid stale closures
|
|
1185
|
-
// Also check prop directly as fallback (for initial render or when ref not updated yet)
|
|
1186
|
-
const currentHandler = handlerRef.current || dataSourceRequestHandler;
|
|
1187
|
-
// Only check for handler when we actually need it (inside the async function)
|
|
1188
|
-
// This avoids false errors during React Strict Mode double-invocation
|
|
1189
|
-
// If handler isn't available yet, silently skip - React will retry when it's ready
|
|
1190
|
-
try {
|
|
1191
|
-
if (dataSource.type === 'api' && !currentHandler) {
|
|
1192
|
-
// Silently skip if handler isn't available yet (common during React Strict Mode double-invocation)
|
|
1193
|
-
// React will call this effect again when the handler is ready
|
|
1194
|
-
return;
|
|
1195
|
-
}
|
|
1196
|
-
dispatch(setLoading({ widgetId, loading: true }));
|
|
1197
|
-
let data = [];
|
|
1198
|
-
if (dataSource.type === 'static') {
|
|
1199
|
-
data = getStaticDataSource(dataSource);
|
|
1200
|
-
}
|
|
1201
|
-
else if (dataSource.type === 'api') {
|
|
1202
|
-
if (!currentHandler) {
|
|
1203
|
-
// Silently skip if handler isn't available yet
|
|
1204
|
-
dispatch(setLoading({ widgetId, loading: false }));
|
|
1205
|
-
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1206
|
-
return;
|
|
1207
|
-
}
|
|
1208
|
-
// Extract level_id from widget-geo-config.level if available
|
|
1209
|
-
const levelId = geoConfig?.level;
|
|
1210
|
-
data = await getApiDataSource(dataSource, values, currentHandler, levelId);
|
|
1211
|
-
}
|
|
1212
|
-
else if (dataSource.type === 'schema') {
|
|
1213
|
-
data = getSchemaDataSource(dataSource, schemaData || {});
|
|
1214
|
-
}
|
|
1215
|
-
// Transform to { value, label } format
|
|
1216
|
-
// For geo widgets, default to level_value_id and level_value_mnemonic
|
|
1217
|
-
let valueKey;
|
|
1218
|
-
let labelKey;
|
|
1219
|
-
if (dataSource.type === 'static') {
|
|
1220
|
-
valueKey = undefined;
|
|
1221
|
-
labelKey = undefined;
|
|
1222
|
-
}
|
|
1223
|
-
else if (geoConfig) {
|
|
1224
|
-
// Geo widgets: default to level_value_id and level_value_mnemonic
|
|
1225
|
-
valueKey = dataSource.valueKey || 'level_value_id';
|
|
1226
|
-
labelKey = dataSource.labelKey || 'level_value_mnemonic';
|
|
1227
|
-
}
|
|
1228
|
-
else {
|
|
1229
|
-
// Non-geo widgets: use specified keys or undefined
|
|
1230
|
-
valueKey = dataSource.valueKey;
|
|
1231
|
-
labelKey = dataSource.labelKey;
|
|
1232
|
-
}
|
|
1233
|
-
const transformed = transformDataSourceOptions(data, valueKey, labelKey);
|
|
1234
|
-
dispatch(setDataSource({ widgetId, data: transformed }));
|
|
1235
|
-
}
|
|
1236
|
-
catch (error) {
|
|
1237
|
-
console.error(`[useBaseWidget] ERROR loading data source for ${widgetId}:`, error);
|
|
1238
|
-
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1239
|
-
}
|
|
1240
|
-
finally {
|
|
1241
|
-
dispatch(setLoading({ widgetId, loading: false }));
|
|
1242
|
-
}
|
|
1243
|
-
};
|
|
1244
|
-
loadDataSource();
|
|
1245
|
-
// Use configKey to ensure effect runs when readonly state changes
|
|
1246
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1247
|
-
}, [configKey, values, dataSourceRequestHandler, schemaData, widgetId, dispatch]);
|
|
1248
|
-
return {
|
|
1249
|
-
widgetId,
|
|
1250
|
-
value: currentValue,
|
|
1251
|
-
formattedValue,
|
|
1252
|
-
error: errors,
|
|
1253
|
-
touched,
|
|
1254
|
-
loading,
|
|
1255
|
-
isVisible,
|
|
1256
|
-
isEnabled,
|
|
1257
|
-
onChange: handleChange,
|
|
1258
|
-
onBlur: handleBlur,
|
|
1259
|
-
setError: (errors) => dispatch(setError({ widgetId, errors })),
|
|
1260
|
-
getFieldValue,
|
|
1261
|
-
dataSourceOptions,
|
|
1262
|
-
config,
|
|
1263
|
-
};
|
|
1264
|
-
};
|
|
1265
|
-
|
|
1266
|
-
/**
|
|
1267
|
-
* Hook for general widget cascade functionality
|
|
1268
|
-
* Handles listening to parent widget changes and reloading data sources
|
|
1269
|
-
*/
|
|
1270
|
-
const useWidgetCascade = (options) => {
|
|
1271
|
-
const { config, dataSourceRequestHandler, values } = options;
|
|
1272
|
-
const dispatch = reactRedux.useDispatch();
|
|
1273
|
-
const eventBus = useWidgetEventBus();
|
|
1274
|
-
const widgetId = config['widget-id'];
|
|
1275
|
-
const cascadeConfig = config['widget-cascade'];
|
|
1276
|
-
const dataSource = config['widget-data-source'];
|
|
1277
|
-
const valuesRef = React.useRef(values);
|
|
1278
|
-
const handlerRef = React.useRef(dataSourceRequestHandler);
|
|
1279
|
-
// Keep refs updated
|
|
1280
|
-
React.useEffect(() => {
|
|
1281
|
-
valuesRef.current = values;
|
|
1282
|
-
handlerRef.current = dataSourceRequestHandler;
|
|
1283
|
-
}, [values, dataSourceRequestHandler]);
|
|
1284
|
-
React.useEffect(() => {
|
|
1285
|
-
if (!cascadeConfig || !eventBus || !dataSource || dataSource.type !== 'api') {
|
|
1286
|
-
return;
|
|
1287
|
-
}
|
|
1288
|
-
const { listenTo, onEvent = 'widget:change', clearOnChange = true, reloadOnChange = true, debounce, throttle } = cascadeConfig;
|
|
1289
|
-
if (listenTo.length === 0) {
|
|
1290
|
-
return;
|
|
1291
|
-
}
|
|
1292
|
-
const handleEvent = async (event) => {
|
|
1293
|
-
// Check if this event is from a parent we're listening to
|
|
1294
|
-
if (!listenTo.includes(event.widgetId)) {
|
|
1295
|
-
return;
|
|
1296
|
-
}
|
|
1297
|
-
const currentValues = valuesRef.current;
|
|
1298
|
-
const currentHandler = handlerRef.current;
|
|
1299
|
-
// Clear value if configured
|
|
1300
|
-
if (clearOnChange) {
|
|
1301
|
-
dispatch(setValue({ widgetId, value: undefined }));
|
|
1302
|
-
}
|
|
1303
|
-
// Reload data source if configured
|
|
1304
|
-
if (reloadOnChange && currentHandler) {
|
|
1305
|
-
try {
|
|
1306
|
-
const data = await getApiDataSource(dataSource, currentValues, currentHandler);
|
|
1307
|
-
// Transform to { value, label } format
|
|
1308
|
-
const valueKey = dataSource.valueKey;
|
|
1309
|
-
const labelKey = dataSource.labelKey;
|
|
1310
|
-
const transformed = transformDataSourceOptions(data, valueKey, labelKey);
|
|
1311
|
-
dispatch(setDataSource({ widgetId, data: transformed }));
|
|
1312
|
-
}
|
|
1313
|
-
catch (error) {
|
|
1314
|
-
console.error('Error reloading data source in cascade:', error);
|
|
1315
|
-
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1316
|
-
}
|
|
1317
|
-
}
|
|
1318
|
-
};
|
|
1319
|
-
// Subscribe to events
|
|
1320
|
-
const unsubscribe = eventBus.subscribe(onEvent, handleEvent, { debounce, throttle });
|
|
1321
|
-
return () => {
|
|
1322
|
-
unsubscribe();
|
|
1323
|
-
};
|
|
1324
|
-
}, [cascadeConfig, eventBus, dataSource, widgetId, dispatch]);
|
|
1325
|
-
};
|
|
1326
|
-
|
|
1327
|
-
/**
|
|
1328
|
-
* Geo Hierarchy Builder
|
|
1329
|
-
* Manages geo hierarchy state and builds hierarchy JSON structure
|
|
1330
|
-
*/
|
|
1331
|
-
class GeoHierarchyBuilder {
|
|
1332
|
-
constructor() {
|
|
1333
|
-
this.hierarchies = new Map();
|
|
1334
|
-
}
|
|
1335
|
-
/**
|
|
1336
|
-
* Get or create hierarchy state for a group
|
|
1337
|
-
*/
|
|
1338
|
-
getHierarchy(groupId = 'default') {
|
|
1339
|
-
if (!this.hierarchies.has(groupId)) {
|
|
1340
|
-
this.hierarchies.set(groupId, {
|
|
1341
|
-
levels: new Map(),
|
|
1342
|
-
order: [],
|
|
1343
|
-
});
|
|
1344
|
-
}
|
|
1345
|
-
return this.hierarchies.get(groupId);
|
|
1346
|
-
}
|
|
1347
|
-
/**
|
|
1348
|
-
* Add a level to the hierarchy
|
|
1349
|
-
*/
|
|
1350
|
-
addLevel(level, level_value_id, level_value_mnemonic, groupId = 'default') {
|
|
1351
|
-
const hierarchy = this.getHierarchy(groupId);
|
|
1352
|
-
// If level already exists, remove it and everything after it
|
|
1353
|
-
const existingIndex = hierarchy.order.indexOf(level);
|
|
1354
|
-
if (existingIndex >= 0) {
|
|
1355
|
-
// Remove this level and all subsequent levels
|
|
1356
|
-
const levelsToRemove = hierarchy.order.slice(existingIndex);
|
|
1357
|
-
levelsToRemove.forEach((l) => {
|
|
1358
|
-
hierarchy.levels.delete(l);
|
|
1359
|
-
hierarchy.order = hierarchy.order.filter((o) => o !== l);
|
|
1360
|
-
});
|
|
1361
|
-
}
|
|
1362
|
-
// Add new level
|
|
1363
|
-
hierarchy.levels.set(level, {
|
|
1364
|
-
level,
|
|
1365
|
-
level_value_id,
|
|
1366
|
-
level_value_mnemonic,
|
|
1367
|
-
});
|
|
1368
|
-
hierarchy.order.push(level);
|
|
1369
|
-
}
|
|
1370
|
-
/**
|
|
1371
|
-
* Remove a level and all levels below it
|
|
1372
|
-
*/
|
|
1373
|
-
removeLevelAndBelow(level, groupId = 'default') {
|
|
1374
|
-
const hierarchy = this.getHierarchy(groupId);
|
|
1375
|
-
const index = hierarchy.order.indexOf(level);
|
|
1376
|
-
if (index >= 0) {
|
|
1377
|
-
// Remove this level and all subsequent levels
|
|
1378
|
-
const levelsToRemove = hierarchy.order.slice(index);
|
|
1379
|
-
levelsToRemove.forEach((l) => {
|
|
1380
|
-
hierarchy.levels.delete(l);
|
|
1381
|
-
hierarchy.order = hierarchy.order.filter((o) => o !== l);
|
|
1382
|
-
});
|
|
1383
|
-
}
|
|
1384
|
-
}
|
|
1385
|
-
/**
|
|
1386
|
-
* Build hierarchy JSON structure
|
|
1387
|
-
*/
|
|
1388
|
-
buildHierarchyJson(groupId = 'default') {
|
|
1389
|
-
const hierarchy = this.getHierarchy(groupId);
|
|
1390
|
-
if (hierarchy.order.length === 0) {
|
|
1391
|
-
return null;
|
|
1392
|
-
}
|
|
1393
|
-
const hierarchyArray = hierarchy.order.map((level) => {
|
|
1394
|
-
const data = hierarchy.levels.get(level);
|
|
1395
|
-
return {
|
|
1396
|
-
level: data.level,
|
|
1397
|
-
level_value_id: data.level_value_id,
|
|
1398
|
-
level_value_mnemonic: data.level_value_mnemonic,
|
|
1399
|
-
};
|
|
1400
|
-
});
|
|
1401
|
-
const lowestLevel = hierarchy.order[hierarchy.order.length - 1];
|
|
1402
|
-
const lowestLevelData = hierarchy.levels.get(lowestLevel);
|
|
1403
|
-
return {
|
|
1404
|
-
geo_lowest_level_value_id: lowestLevelData.level_value_id,
|
|
1405
|
-
geo_code_hierarchy_json: {
|
|
1406
|
-
hierarchy: hierarchyArray,
|
|
1407
|
-
lowest_level_value_id: lowestLevelData.level_value_id,
|
|
1408
|
-
},
|
|
1409
|
-
};
|
|
1410
|
-
}
|
|
1411
|
-
/**
|
|
1412
|
-
* Clear hierarchy for a group
|
|
1413
|
-
*/
|
|
1414
|
-
clear(groupId = 'default') {
|
|
1415
|
-
this.hierarchies.delete(groupId);
|
|
1416
|
-
}
|
|
1417
|
-
/**
|
|
1418
|
-
* Clear all hierarchies
|
|
1419
|
-
*/
|
|
1420
|
-
clearAll() {
|
|
1421
|
-
this.hierarchies.clear();
|
|
1422
|
-
}
|
|
1423
|
-
/**
|
|
1424
|
-
* Get current levels for a group
|
|
1425
|
-
*/
|
|
1426
|
-
getLevels(groupId = 'default') {
|
|
1427
|
-
const hierarchy = this.getHierarchy(groupId);
|
|
1428
|
-
return hierarchy.order.map((level) => hierarchy.levels.get(level));
|
|
1429
|
-
}
|
|
1430
|
-
}
|
|
1431
|
-
// Singleton instance
|
|
1432
|
-
const geoHierarchyBuilder = new GeoHierarchyBuilder();
|
|
1433
|
-
|
|
1434
|
-
// Define stable empty array to avoid selector reference issues
|
|
1435
|
-
const EMPTY_DATA_SOURCE = [];
|
|
1436
|
-
/**
|
|
1437
|
-
* Hook for geo widget cascade functionality
|
|
1438
|
-
* Handles geo hierarchy building and cascade behavior
|
|
1439
|
-
*/
|
|
1440
|
-
const useGeoWidgetCascade = (options) => {
|
|
1441
|
-
const { config, dataSourceRequestHandler, values } = options;
|
|
1442
|
-
const dispatch = reactRedux.useDispatch();
|
|
1443
|
-
const eventBus = useWidgetEventBus();
|
|
1444
|
-
const widgetId = config['widget-id'];
|
|
1445
|
-
const geoConfig = config['widget-geo-config'];
|
|
1446
|
-
const dataSource = config['widget-data-source'];
|
|
1447
|
-
const dataPath = config['widget-data-path'];
|
|
1448
|
-
const valuesRef = React.useRef(values);
|
|
1449
|
-
const handlerRef = React.useRef(dataSourceRequestHandler);
|
|
1450
|
-
// Keep refs updated
|
|
1451
|
-
React.useEffect(() => {
|
|
1452
|
-
valuesRef.current = values;
|
|
1453
|
-
handlerRef.current = dataSourceRequestHandler;
|
|
1454
|
-
}, [values, dataSourceRequestHandler]);
|
|
1455
|
-
// Get current value and data source options
|
|
1456
|
-
const currentValue = reactRedux.useSelector((state) => {
|
|
1457
|
-
if (!dataPath) {
|
|
1458
|
-
return state.widget.values[widgetId];
|
|
1459
|
-
}
|
|
1460
|
-
return getWidgetValue(state.widget.values, dataPath, widgetId);
|
|
1461
|
-
});
|
|
1462
|
-
// Memoize selector to avoid returning new array reference
|
|
1463
|
-
const dataSourceOptions = reactRedux.useSelector((state) => state.widget.dataSources[widgetId] ?? EMPTY_DATA_SOURCE);
|
|
1464
|
-
React.useEffect(() => {
|
|
1465
|
-
if (!geoConfig || !eventBus || !dataSource || dataSource.type !== 'api') {
|
|
1466
|
-
return;
|
|
1467
|
-
}
|
|
1468
|
-
const { level, isLastLevel, parentWidgetId } = geoConfig;
|
|
1469
|
-
// Listen to parent widget changes
|
|
1470
|
-
if (parentWidgetId) {
|
|
1471
|
-
const handleParentChange = async (event) => {
|
|
1472
|
-
if (event.widgetId !== parentWidgetId) {
|
|
1473
|
-
return;
|
|
1474
|
-
}
|
|
1475
|
-
// CRITICAL: Use a small delay to ensure Redux state has been updated
|
|
1476
|
-
// This prevents reading stale values from valuesRef
|
|
1477
|
-
await new Promise(resolve => setTimeout(resolve, 0));
|
|
1478
|
-
const currentValues = valuesRef.current;
|
|
1479
|
-
const currentHandler = handlerRef.current;
|
|
1480
|
-
// CRITICAL: Get the parent value from Redux state, not from the event
|
|
1481
|
-
// The event.value might be stale, but Redux state is always current
|
|
1482
|
-
const parentValue = currentValues[parentWidgetId];
|
|
1483
|
-
// Remove this level and all below from hierarchy
|
|
1484
|
-
geoHierarchyBuilder.removeLevelAndBelow(level);
|
|
1485
|
-
// Clear this widget's value
|
|
1486
|
-
// CRITICAL: Only dispatch setValue for THIS widget, not for parent or other widgets
|
|
1487
|
-
// setWidgetValue returns the entire updated state, but we only want to update this widget
|
|
1488
|
-
if (dataPath) {
|
|
1489
|
-
const updatedValues = setWidgetValue(currentValues, dataPath, widgetId, undefined);
|
|
1490
|
-
// Only dispatch setValue for this widget's widgetId, not for parent or other widgets
|
|
1491
|
-
// This prevents accidentally overwriting the parent widget's value
|
|
1492
|
-
// The setWidgetValue function updates the nested structure, but we only want to
|
|
1493
|
-
// update the top-level widgetId key, not other keys that might be in updatedValues
|
|
1494
|
-
const newWidgetValue = updatedValues[widgetId];
|
|
1495
|
-
if (newWidgetValue !== undefined) {
|
|
1496
|
-
dispatch(setValue({ widgetId, value: newWidgetValue }));
|
|
1497
|
-
}
|
|
1498
|
-
else {
|
|
1499
|
-
// If widgetId is not in updatedValues, the value was set in a nested path
|
|
1500
|
-
// In this case, we need to use setValues to update the entire structure
|
|
1501
|
-
// But we need to be careful not to overwrite the parent widget's value
|
|
1502
|
-
// Only update keys that are related to this widget's dataPath
|
|
1503
|
-
const dataPathStr = typeof dataPath === 'string' ? dataPath : '';
|
|
1504
|
-
if (dataPathStr && !dataPathStr.startsWith(parentWidgetId + '.')) {
|
|
1505
|
-
// Only update if dataPath doesn't start with parentWidgetId
|
|
1506
|
-
// This ensures we don't accidentally overwrite the parent widget's value
|
|
1507
|
-
dispatch(setValue({ widgetId, value: undefined }));
|
|
1508
|
-
}
|
|
1509
|
-
}
|
|
1510
|
-
}
|
|
1511
|
-
else {
|
|
1512
|
-
dispatch(setValue({ widgetId, value: undefined }));
|
|
1513
|
-
}
|
|
1514
|
-
// Reload data source with new parent value
|
|
1515
|
-
// CRITICAL: Use parentValue from Redux, not event.value
|
|
1516
|
-
if (currentHandler && parentValue !== null && parentValue !== undefined) {
|
|
1517
|
-
try {
|
|
1518
|
-
// Merge the new parent value into current values for the API call
|
|
1519
|
-
// This ensures getApiDataSource can find the dependency value
|
|
1520
|
-
const updatedValues = {
|
|
1521
|
-
...currentValues,
|
|
1522
|
-
[parentWidgetId]: parentValue, // Use Redux value, not event.value
|
|
1523
|
-
};
|
|
1524
|
-
// Extract level_id from widget-geo-config.level
|
|
1525
|
-
const levelId = geoConfig.level;
|
|
1526
|
-
const data = await getApiDataSource(dataSource, updatedValues, currentHandler, levelId);
|
|
1527
|
-
// Transform to { value, label } format
|
|
1528
|
-
const valueKey = dataSource.valueKey || 'level_value_id';
|
|
1529
|
-
const labelKey = dataSource.labelKey || 'level_value_mnemonic';
|
|
1530
|
-
const transformed = transformDataSourceOptions(data, valueKey, labelKey);
|
|
1531
|
-
dispatch(setDataSource({ widgetId, data: transformed }));
|
|
1532
|
-
}
|
|
1533
|
-
catch (error) {
|
|
1534
|
-
console.error('Error reloading geo data source:', error);
|
|
1535
|
-
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1536
|
-
}
|
|
1537
|
-
}
|
|
1538
|
-
else {
|
|
1539
|
-
// If parent value is cleared, clear the data source
|
|
1540
|
-
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1541
|
-
}
|
|
1542
|
-
};
|
|
1543
|
-
const unsubscribe = eventBus.subscribe('widget:change', handleParentChange);
|
|
1544
|
-
return () => {
|
|
1545
|
-
unsubscribe();
|
|
1546
|
-
};
|
|
1547
|
-
}
|
|
1548
|
-
}, [geoConfig, eventBus, dataSource, widgetId, dataPath, dispatch]);
|
|
1549
|
-
// Handle value changes to build hierarchy
|
|
1550
|
-
React.useEffect(() => {
|
|
1551
|
-
if (!geoConfig) {
|
|
1552
|
-
return;
|
|
1553
|
-
}
|
|
1554
|
-
// Skip if value is empty/null (but allow 0 and false)
|
|
1555
|
-
if (currentValue === null || currentValue === undefined || currentValue === '') {
|
|
1556
|
-
// If value was cleared, remove this level and below from hierarchy
|
|
1557
|
-
const { level } = geoConfig;
|
|
1558
|
-
geoHierarchyBuilder.removeLevelAndBelow(level);
|
|
1559
|
-
return;
|
|
1560
|
-
}
|
|
1561
|
-
const { level, isLastLevel } = geoConfig;
|
|
1562
|
-
// For last level, check if hierarchy is already built to prevent endless loops
|
|
1563
|
-
if (isLastLevel && dataPath) {
|
|
1564
|
-
const currentHierarchy = getWidgetValue(valuesRef.current, dataPath, widgetId);
|
|
1565
|
-
// If hierarchy JSON is already set and matches current value, skip rebuilding
|
|
1566
|
-
if (currentHierarchy && typeof currentHierarchy === 'object' && currentHierarchy.geo_code_hierarchy_json) {
|
|
1567
|
-
// Check if the lowest level value matches
|
|
1568
|
-
const currentLevelValue = typeof currentValue === 'object'
|
|
1569
|
-
? (currentValue.level_value_id || currentValue.id || currentValue.value)
|
|
1570
|
-
: currentValue;
|
|
1571
|
-
if (currentHierarchy.geo_lowest_level_value_id === currentLevelValue) {
|
|
1572
|
-
return; // Hierarchy already built for this value, skip
|
|
1573
|
-
}
|
|
1574
|
-
}
|
|
1575
|
-
}
|
|
1576
|
-
// Extract level_value_id and level_value_mnemonic from current value
|
|
1577
|
-
// The value could be the ID itself or an object with id/name
|
|
1578
|
-
let level_value_id;
|
|
1579
|
-
let level_value_mnemonic;
|
|
1580
|
-
if (typeof currentValue === 'string' || typeof currentValue === 'number') {
|
|
1581
|
-
// Value is just the ID, need to find mnemonic from data source
|
|
1582
|
-
level_value_id = String(currentValue);
|
|
1583
|
-
// Try to get mnemonic from data source options
|
|
1584
|
-
const option = dataSourceOptions.find((opt) => opt.value === currentValue);
|
|
1585
|
-
level_value_mnemonic = option?.label || String(currentValue);
|
|
1586
|
-
}
|
|
1587
|
-
else if (currentValue && typeof currentValue === 'object') {
|
|
1588
|
-
level_value_id = currentValue.level_value_id || currentValue.id || currentValue.value;
|
|
1589
|
-
level_value_mnemonic = currentValue.level_value_mnemonic || currentValue.name || currentValue.label;
|
|
1590
|
-
}
|
|
1591
|
-
else {
|
|
1592
|
-
return;
|
|
1593
|
-
}
|
|
1594
|
-
// When a widget's own value changes, remove this level and all below from hierarchy first
|
|
1595
|
-
// This ensures that when level 1 changes, we clear the hierarchy and rebuild from scratch
|
|
1596
|
-
// The addLevel method already handles removing existing levels, but we explicitly clear to be safe
|
|
1597
|
-
geoHierarchyBuilder.removeLevelAndBelow(level);
|
|
1598
|
-
// Add level to hierarchy
|
|
1599
|
-
geoHierarchyBuilder.addLevel(level, level_value_id, level_value_mnemonic);
|
|
1600
|
-
// If this is the last level, build and store hierarchy JSON
|
|
1601
|
-
if (isLastLevel && dataPath) {
|
|
1602
|
-
const hierarchyJson = geoHierarchyBuilder.buildHierarchyJson();
|
|
1603
|
-
if (hierarchyJson) {
|
|
1604
|
-
// Store both geo_lowest_level_value_id and geo_code_hierarchy_json
|
|
1605
|
-
const updatedValues = setWidgetValue(valuesRef.current, dataPath, widgetId, {
|
|
1606
|
-
geo_lowest_level_value_id: hierarchyJson.geo_lowest_level_value_id,
|
|
1607
|
-
geo_code_hierarchy_json: hierarchyJson.geo_code_hierarchy_json,
|
|
1608
|
-
});
|
|
1609
|
-
Object.entries(updatedValues).forEach(([key, value]) => {
|
|
1610
|
-
dispatch(setValue({ widgetId: key, value }));
|
|
1611
|
-
});
|
|
1612
|
-
}
|
|
1613
|
-
}
|
|
1614
|
-
}, [geoConfig, currentValue, widgetId, dataPath, dispatch, dataSourceOptions]);
|
|
1615
|
-
};
|
|
1616
|
-
|
|
1617
923
|
var jsxRuntime = {exports: {}};
|
|
1618
924
|
|
|
1619
925
|
var reactJsxRuntime_production = {};
|
|
@@ -2022,19 +1328,882 @@ function requireReactJsxRuntime_development () {
|
|
|
2022
1328
|
|
|
2023
1329
|
var hasRequiredJsxRuntime;
|
|
2024
1330
|
|
|
2025
|
-
function requireJsxRuntime () {
|
|
2026
|
-
if (hasRequiredJsxRuntime) return jsxRuntime.exports;
|
|
2027
|
-
hasRequiredJsxRuntime = 1;
|
|
1331
|
+
function requireJsxRuntime () {
|
|
1332
|
+
if (hasRequiredJsxRuntime) return jsxRuntime.exports;
|
|
1333
|
+
hasRequiredJsxRuntime = 1;
|
|
1334
|
+
|
|
1335
|
+
if (process.env.NODE_ENV === 'production') {
|
|
1336
|
+
jsxRuntime.exports = requireReactJsxRuntime_production();
|
|
1337
|
+
} else {
|
|
1338
|
+
jsxRuntime.exports = requireReactJsxRuntime_development();
|
|
1339
|
+
}
|
|
1340
|
+
return jsxRuntime.exports;
|
|
1341
|
+
}
|
|
1342
|
+
|
|
1343
|
+
var jsxRuntimeExports = requireJsxRuntime();
|
|
1344
|
+
|
|
1345
|
+
/**
|
|
1346
|
+
* Widget Event Bus
|
|
1347
|
+
* Provides a publish/subscribe mechanism for widget communication
|
|
1348
|
+
* Supports debounce and throttle for performance optimization
|
|
1349
|
+
*/
|
|
1350
|
+
class WidgetEventBus {
|
|
1351
|
+
constructor() {
|
|
1352
|
+
this.subscriptions = new Map();
|
|
1353
|
+
this.throttleTimers = new Map();
|
|
1354
|
+
}
|
|
1355
|
+
/**
|
|
1356
|
+
* Subscribe to an event type
|
|
1357
|
+
* @param eventType The type of event to listen to
|
|
1358
|
+
* @param handler The handler function
|
|
1359
|
+
* @param options Debounce/throttle options
|
|
1360
|
+
* @returns Unsubscribe function
|
|
1361
|
+
*/
|
|
1362
|
+
subscribe(eventType, handler, options) {
|
|
1363
|
+
if (!this.subscriptions.has(eventType)) {
|
|
1364
|
+
this.subscriptions.set(eventType, new Map());
|
|
1365
|
+
}
|
|
1366
|
+
const eventSubscriptions = this.subscriptions.get(eventType);
|
|
1367
|
+
const subscriptionId = `${Date.now()}-${Math.random()}`;
|
|
1368
|
+
const subscription = {
|
|
1369
|
+
handler,
|
|
1370
|
+
debounce: options?.debounce,
|
|
1371
|
+
throttle: options?.throttle,
|
|
1372
|
+
};
|
|
1373
|
+
if (!eventSubscriptions.has(subscriptionId)) {
|
|
1374
|
+
eventSubscriptions.set(subscriptionId, []);
|
|
1375
|
+
}
|
|
1376
|
+
eventSubscriptions.get(subscriptionId).push(subscription);
|
|
1377
|
+
// Return unsubscribe function
|
|
1378
|
+
return () => {
|
|
1379
|
+
const subs = eventSubscriptions.get(subscriptionId);
|
|
1380
|
+
if (subs) {
|
|
1381
|
+
const index = subs.indexOf(subscription);
|
|
1382
|
+
if (index > -1) {
|
|
1383
|
+
subs.splice(index, 1);
|
|
1384
|
+
if (subs.length === 0) {
|
|
1385
|
+
eventSubscriptions.delete(subscriptionId);
|
|
1386
|
+
}
|
|
1387
|
+
}
|
|
1388
|
+
}
|
|
1389
|
+
};
|
|
1390
|
+
}
|
|
1391
|
+
/**
|
|
1392
|
+
* Publish an event
|
|
1393
|
+
* @param event The event to publish
|
|
1394
|
+
*/
|
|
1395
|
+
publish(event) {
|
|
1396
|
+
const eventSubscriptions = this.subscriptions.get(event.type);
|
|
1397
|
+
if (!eventSubscriptions) {
|
|
1398
|
+
return;
|
|
1399
|
+
}
|
|
1400
|
+
eventSubscriptions.forEach((subscriptions) => {
|
|
1401
|
+
subscriptions.forEach((subscription) => {
|
|
1402
|
+
this.executeHandler(subscription, event);
|
|
1403
|
+
});
|
|
1404
|
+
});
|
|
1405
|
+
}
|
|
1406
|
+
/**
|
|
1407
|
+
* Execute handler with debounce/throttle support
|
|
1408
|
+
*/
|
|
1409
|
+
executeHandler(subscription, event) {
|
|
1410
|
+
const { handler, debounce, throttle } = subscription;
|
|
1411
|
+
// Clear existing debounce timer if any
|
|
1412
|
+
if (subscription.debounceTimer) {
|
|
1413
|
+
clearTimeout(subscription.debounceTimer);
|
|
1414
|
+
}
|
|
1415
|
+
// Handle throttle
|
|
1416
|
+
if (throttle && throttle > 0) {
|
|
1417
|
+
const throttleKey = `${event.type}-${event.widgetId}`;
|
|
1418
|
+
const now = Date.now();
|
|
1419
|
+
const lastCallTime = subscription.lastCallTime || 0;
|
|
1420
|
+
if (now - lastCallTime < throttle) {
|
|
1421
|
+
// Still in throttle period, schedule for later
|
|
1422
|
+
if (this.throttleTimers.has(throttleKey)) {
|
|
1423
|
+
return; // Already scheduled
|
|
1424
|
+
}
|
|
1425
|
+
const remainingTime = throttle - (now - lastCallTime);
|
|
1426
|
+
const timer = setTimeout(() => {
|
|
1427
|
+
subscription.lastCallTime = Date.now();
|
|
1428
|
+
handler(event);
|
|
1429
|
+
this.throttleTimers.delete(throttleKey);
|
|
1430
|
+
}, remainingTime);
|
|
1431
|
+
this.throttleTimers.set(throttleKey, timer);
|
|
1432
|
+
return;
|
|
1433
|
+
}
|
|
1434
|
+
subscription.lastCallTime = now;
|
|
1435
|
+
}
|
|
1436
|
+
// Handle debounce
|
|
1437
|
+
if (debounce && debounce > 0) {
|
|
1438
|
+
subscription.debounceTimer = setTimeout(() => {
|
|
1439
|
+
handler(event);
|
|
1440
|
+
subscription.debounceTimer = undefined;
|
|
1441
|
+
}, debounce);
|
|
1442
|
+
return;
|
|
1443
|
+
}
|
|
1444
|
+
// Execute immediately if no debounce/throttle
|
|
1445
|
+
handler(event);
|
|
1446
|
+
}
|
|
1447
|
+
/**
|
|
1448
|
+
* Clear all subscriptions
|
|
1449
|
+
*/
|
|
1450
|
+
clear() {
|
|
1451
|
+
// Clear all timers
|
|
1452
|
+
this.subscriptions.forEach((eventSubscriptions) => {
|
|
1453
|
+
eventSubscriptions.forEach((subscriptions) => {
|
|
1454
|
+
subscriptions.forEach((sub) => {
|
|
1455
|
+
if (sub.debounceTimer) {
|
|
1456
|
+
clearTimeout(sub.debounceTimer);
|
|
1457
|
+
}
|
|
1458
|
+
});
|
|
1459
|
+
});
|
|
1460
|
+
});
|
|
1461
|
+
this.throttleTimers.forEach((timer) => clearTimeout(timer));
|
|
1462
|
+
this.throttleTimers.clear();
|
|
1463
|
+
this.subscriptions.clear();
|
|
1464
|
+
}
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1467
|
+
const WidgetContext = React.createContext({
|
|
1468
|
+
dataSourceRequestHandler: undefined,
|
|
1469
|
+
schemaData: undefined,
|
|
1470
|
+
translate: undefined,
|
|
1471
|
+
});
|
|
1472
|
+
const useWidgetContext = () => {
|
|
1473
|
+
return React.useContext(WidgetContext);
|
|
1474
|
+
};
|
|
1475
|
+
const WidgetProvider = ({ store, dataSourceRequestHandler, schemaData, translate, children, }) => {
|
|
1476
|
+
const widgetStore = React.useMemo(() => store || createWidgetStore(), [store]);
|
|
1477
|
+
// Create event bus instance (one per provider)
|
|
1478
|
+
const eventBus = React.useMemo(() => new WidgetEventBus(), []);
|
|
1479
|
+
// Memoize context value to prevent unnecessary re-renders
|
|
1480
|
+
const contextValue = React.useMemo(() => ({
|
|
1481
|
+
dataSourceRequestHandler,
|
|
1482
|
+
schemaData,
|
|
1483
|
+
translate,
|
|
1484
|
+
}), [dataSourceRequestHandler, schemaData, translate]);
|
|
1485
|
+
// Warn if dataSourceRequestHandler is missing (will cause issues with API data sources)
|
|
1486
|
+
React.useEffect(() => {
|
|
1487
|
+
if (!dataSourceRequestHandler) {
|
|
1488
|
+
console.warn('[WidgetProvider] dataSourceRequestHandler is not provided. ' +
|
|
1489
|
+
'Widgets with API data sources will not be able to load data. ' +
|
|
1490
|
+
'Please provide dataSourceRequestHandler prop to WidgetProvider.');
|
|
1491
|
+
}
|
|
1492
|
+
}, [dataSourceRequestHandler]);
|
|
1493
|
+
// Cleanup event bus on unmount
|
|
1494
|
+
React.useEffect(() => {
|
|
1495
|
+
return () => {
|
|
1496
|
+
eventBus.clear();
|
|
1497
|
+
};
|
|
1498
|
+
}, [eventBus]);
|
|
1499
|
+
// Initialize schemaData to Redux store (only on mount)
|
|
1500
|
+
// This prevents overwriting user changes when schemaData prop changes
|
|
1501
|
+
React.useEffect(() => {
|
|
1502
|
+
if (schemaData) {
|
|
1503
|
+
widgetStore.dispatch(setValues(schemaData));
|
|
1504
|
+
}
|
|
1505
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1506
|
+
}, [schemaData, widgetStore]); // Only run on mount
|
|
1507
|
+
const content = (jsxRuntimeExports.jsx(reactRedux.Provider, { store: widgetStore, children: jsxRuntimeExports.jsx(WidgetContext.Provider, { value: contextValue, children: jsxRuntimeExports.jsx(WidgetEventBusContext.Provider, { value: eventBus, children: children }) }) }));
|
|
1508
|
+
return content;
|
|
1509
|
+
};
|
|
1510
|
+
|
|
1511
|
+
// Define stable empty arrays to avoid selector reference issues
|
|
1512
|
+
const EMPTY_ERRORS = [];
|
|
1513
|
+
const EMPTY_DATA_SOURCE$1 = [];
|
|
1514
|
+
const useBaseWidget = (options) => {
|
|
1515
|
+
const { config, dataSourceRequestHandler: propHandler, schemaData, onValueChange } = options;
|
|
1516
|
+
const dispatch = reactRedux.useDispatch();
|
|
1517
|
+
const context = useWidgetContext();
|
|
1518
|
+
const eventBus = useWidgetEventBus();
|
|
1519
|
+
const widgetId = config['widget-id'];
|
|
1520
|
+
// Fall back to WidgetContext for dataSourceRequestHandler
|
|
1521
|
+
const dataSourceRequestHandler = propHandler || context.dataSourceRequestHandler;
|
|
1522
|
+
// Get state from Redux
|
|
1523
|
+
const values = reactRedux.useSelector((state) => state.widget.values);
|
|
1524
|
+
const errors = reactRedux.useSelector((state) => state.widget.errors[widgetId] ?? EMPTY_ERRORS);
|
|
1525
|
+
const touched = reactRedux.useSelector((state) => state.widget.touched[widgetId] || false);
|
|
1526
|
+
const loading = reactRedux.useSelector((state) => state.widget.loading[widgetId] || false);
|
|
1527
|
+
const dataSourceOptions = reactRedux.useSelector((state) => state.widget.dataSources[widgetId] ?? EMPTY_DATA_SOURCE$1);
|
|
1528
|
+
// Skip value handling for layout widgets (they don't store data values)
|
|
1529
|
+
// Infer layout from widget-type
|
|
1530
|
+
const isLayoutWidget = config['widget-type'] === 'layout';
|
|
1531
|
+
// Track if user has explicitly set a value to prevent default from overwriting
|
|
1532
|
+
const userHasSetValueRef = React.useRef(false);
|
|
1533
|
+
// Use ref for values to avoid stale closures in handleChange
|
|
1534
|
+
const valuesRef = React.useRef(values);
|
|
1535
|
+
React.useEffect(() => {
|
|
1536
|
+
valuesRef.current = values;
|
|
1537
|
+
}, [values]);
|
|
1538
|
+
// Track last dispatched value to prevent duplicate dispatches
|
|
1539
|
+
const lastDispatchedValueRef = React.useRef(null);
|
|
1540
|
+
// Get current value
|
|
1541
|
+
const currentValue = React.useMemo(() => {
|
|
1542
|
+
if (isLayoutWidget) {
|
|
1543
|
+
return undefined; // Layout widgets don't have values
|
|
1544
|
+
}
|
|
1545
|
+
// Helper to extract displayable value from object (especially geo hierarchy objects)
|
|
1546
|
+
const extractValueFromObject = (obj) => {
|
|
1547
|
+
if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {
|
|
1548
|
+
return obj;
|
|
1549
|
+
}
|
|
1550
|
+
// Check for geo hierarchy structure first
|
|
1551
|
+
if ('geo_code_hierarchy_json' in obj || 'geo_lowest_level_value_id' in obj) {
|
|
1552
|
+
if ('geo_lowest_level_value_id' in obj) {
|
|
1553
|
+
return obj.geo_lowest_level_value_id;
|
|
1554
|
+
}
|
|
1555
|
+
// If it's a geo hierarchy object but no extractable ID, return undefined to avoid rendering object
|
|
1556
|
+
return undefined;
|
|
1557
|
+
}
|
|
1558
|
+
// Try common value fields
|
|
1559
|
+
if ('value' in obj) {
|
|
1560
|
+
return obj.value;
|
|
1561
|
+
}
|
|
1562
|
+
if ('id' in obj) {
|
|
1563
|
+
return obj.id;
|
|
1564
|
+
}
|
|
1565
|
+
if ('label' in obj) {
|
|
1566
|
+
return obj.label;
|
|
1567
|
+
}
|
|
1568
|
+
if ('name' in obj) {
|
|
1569
|
+
return obj.name;
|
|
1570
|
+
}
|
|
1571
|
+
// If no extractable value found, return undefined to avoid rendering object as React child
|
|
1572
|
+
// This prevents "Objects are not valid as a React child" errors
|
|
1573
|
+
return undefined;
|
|
1574
|
+
};
|
|
1575
|
+
// Try to get value from widgetId first (this should have the actual selected value)
|
|
1576
|
+
// For geo widgets with dataPath, widgetId stores the actual ID, while dataPath stores the hierarchy object
|
|
1577
|
+
let value = values[widgetId];
|
|
1578
|
+
// Extract value if it's an object (handles geo hierarchy objects stored in widgetId)
|
|
1579
|
+
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
1580
|
+
value = extractValueFromObject(value);
|
|
1581
|
+
}
|
|
1582
|
+
// If widgetId doesn't have a value, try dataPath
|
|
1583
|
+
if (value === undefined && config['widget-data-path']) {
|
|
1584
|
+
value = getWidgetValue(values, config['widget-data-path'], widgetId);
|
|
1585
|
+
// Extract value if it's an object (handles geo hierarchy objects from dataPath)
|
|
1586
|
+
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
1587
|
+
value = extractValueFromObject(value);
|
|
1588
|
+
}
|
|
1589
|
+
}
|
|
1590
|
+
// If value is still undefined and user has set a value, try reading from widgetId as backup
|
|
1591
|
+
// This handles cases where dataPath lookup might fail temporarily
|
|
1592
|
+
if (value === undefined && userHasSetValueRef.current && values[widgetId] !== undefined) {
|
|
1593
|
+
value = values[widgetId];
|
|
1594
|
+
// Extract value if it's an object (handles geo hierarchy objects)
|
|
1595
|
+
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
1596
|
+
value = extractValueFromObject(value);
|
|
1597
|
+
}
|
|
1598
|
+
}
|
|
1599
|
+
// Final safety check: if value is still an object, extract displayable value
|
|
1600
|
+
if (value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value)) {
|
|
1601
|
+
value = extractValueFromObject(value);
|
|
1602
|
+
}
|
|
1603
|
+
// If user has explicitly set a value, always return it (even if undefined/null)
|
|
1604
|
+
// This prevents the default from overwriting user selections
|
|
1605
|
+
if (userHasSetValueRef.current) {
|
|
1606
|
+
return value;
|
|
1607
|
+
}
|
|
1608
|
+
// Only fall back to default if user hasn't set a value yet
|
|
1609
|
+
// But check if value is explicitly null (user cleared it) vs undefined (never set)
|
|
1610
|
+
if (value === null) {
|
|
1611
|
+
return null; // User explicitly cleared it, don't use default
|
|
1612
|
+
}
|
|
1613
|
+
return value !== undefined ? value : config['widget-data-default'];
|
|
1614
|
+
}, [values, config, widgetId, isLayoutWidget]);
|
|
1615
|
+
// Initialize default value only once on mount (skip for layout widgets)
|
|
1616
|
+
React.useEffect(() => {
|
|
1617
|
+
if (isLayoutWidget) {
|
|
1618
|
+
return;
|
|
1619
|
+
}
|
|
1620
|
+
// Only initialize default if value is undefined and user hasn't set a value yet
|
|
1621
|
+
if (!userHasSetValueRef.current && config['widget-data-default'] !== undefined && currentValue === undefined) {
|
|
1622
|
+
handleChange(config['widget-data-default'], false);
|
|
1623
|
+
}
|
|
1624
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1625
|
+
}, [isLayoutWidget]); // Only run once on mount
|
|
1626
|
+
// Handle value change
|
|
1627
|
+
// CRITICAL: Don't include 'values' in dependency array - it causes the callback to be recreated
|
|
1628
|
+
// every time values change, which can lead to stale closures and double dispatches
|
|
1629
|
+
const handleChange = React.useCallback((newValue, validate = true) => {
|
|
1630
|
+
// Use valuesRef to get the latest values, not the stale closure value
|
|
1631
|
+
const currentValues = valuesRef.current;
|
|
1632
|
+
const currentValue = currentValues[widgetId] || getWidgetValue(currentValues, config['widget-data-path'], widgetId);
|
|
1633
|
+
// CRITICAL: Prevent setting the same value (avoids unnecessary dispatches and potential loops)
|
|
1634
|
+
if (currentValue === newValue) {
|
|
1635
|
+
return;
|
|
1636
|
+
}
|
|
1637
|
+
// Mark that user has set a value (unless this is the default initialization)
|
|
1638
|
+
if (newValue !== config['widget-data-default'] || userHasSetValueRef.current) {
|
|
1639
|
+
userHasSetValueRef.current = true;
|
|
1640
|
+
}
|
|
1641
|
+
// CRITICAL FIX: If there's no dataPath, just set the value directly
|
|
1642
|
+
// If there's a dataPath, we need to update both the widgetId and the dataPath
|
|
1643
|
+
if (!config['widget-data-path']) {
|
|
1644
|
+
// No dataPath: just set the value directly by widgetId
|
|
1645
|
+
// CRITICAL: Check if we just dispatched this value to prevent duplicate dispatches
|
|
1646
|
+
if (lastDispatchedValueRef.current === newValue) {
|
|
1647
|
+
return;
|
|
1648
|
+
}
|
|
1649
|
+
lastDispatchedValueRef.current = newValue;
|
|
1650
|
+
dispatch(setValue({ widgetId, value: newValue }));
|
|
1651
|
+
}
|
|
1652
|
+
else {
|
|
1653
|
+
// Has dataPath: update both widgetId and dataPath
|
|
1654
|
+
// CRITICAL: Create updated values object with newValue already set
|
|
1655
|
+
// This prevents setWidgetValue from reading stale values
|
|
1656
|
+
const currentValuesWithUpdate = {
|
|
1657
|
+
...valuesRef.current,
|
|
1658
|
+
[widgetId]: newValue, // Ensure widgetId has the new value
|
|
1659
|
+
};
|
|
1660
|
+
const updatedValues = setWidgetValue(currentValuesWithUpdate, config['widget-data-path'], widgetId, newValue);
|
|
1661
|
+
// setWidgetValue returns the complete updated structure with all existing data preserved
|
|
1662
|
+
// Use setValues to update the entire state with deep merge
|
|
1663
|
+
dispatch(setValues(updatedValues));
|
|
1664
|
+
}
|
|
1665
|
+
// Validate if needed
|
|
1666
|
+
if (validate) {
|
|
1667
|
+
const validationErrors = validateWidget(newValue, config['widget-data-validation'], config['widget-required']);
|
|
1668
|
+
dispatch(setError({ widgetId, errors: validationErrors }));
|
|
1669
|
+
}
|
|
1670
|
+
// Call custom onChange if provided
|
|
1671
|
+
if (onValueChange) {
|
|
1672
|
+
onValueChange(widgetId, newValue);
|
|
1673
|
+
}
|
|
1674
|
+
// Publish widget:change event
|
|
1675
|
+
// Skip publishing for last-level geo widgets (no child widgets waiting)
|
|
1676
|
+
const geoConfig = config['widget-geo-config'];
|
|
1677
|
+
const isLastLevelGeo = geoConfig?.isLastLevel === true;
|
|
1678
|
+
if (eventBus && !isLastLevelGeo) {
|
|
1679
|
+
eventBus.publish({
|
|
1680
|
+
type: 'widget:change',
|
|
1681
|
+
widgetId,
|
|
1682
|
+
value: newValue,
|
|
1683
|
+
timestamp: Date.now(),
|
|
1684
|
+
});
|
|
1685
|
+
}
|
|
1686
|
+
}, [config, widgetId, dispatch, onValueChange, eventBus] // Removed 'values' to prevent stale closures
|
|
1687
|
+
);
|
|
1688
|
+
// Handle blur
|
|
1689
|
+
const handleBlur = React.useCallback(() => {
|
|
1690
|
+
dispatch(setTouched({ widgetId, touched: true }));
|
|
1691
|
+
// Validate on blur
|
|
1692
|
+
const validationErrors = validateWidget(currentValue, config['widget-data-validation'], config['widget-required']);
|
|
1693
|
+
dispatch(setError({ widgetId, errors: validationErrors }));
|
|
1694
|
+
// Publish widget:blur event
|
|
1695
|
+
if (eventBus) {
|
|
1696
|
+
eventBus.publish({
|
|
1697
|
+
type: 'widget:blur',
|
|
1698
|
+
widgetId,
|
|
1699
|
+
value: currentValue,
|
|
1700
|
+
timestamp: Date.now(),
|
|
1701
|
+
});
|
|
1702
|
+
}
|
|
1703
|
+
}, [currentValue, config, widgetId, dispatch, eventBus]);
|
|
1704
|
+
// Get field value helper
|
|
1705
|
+
const getFieldValue = React.useCallback((path) => {
|
|
1706
|
+
return getWidgetValue(values, path, '');
|
|
1707
|
+
}, [values]);
|
|
1708
|
+
// Conditional visibility and enablement
|
|
1709
|
+
const isVisible = React.useMemo(() => {
|
|
1710
|
+
// Layout widgets are always visible unless explicitly hidden
|
|
1711
|
+
if (isLayoutWidget && !config['widget-data-options']?.condition) {
|
|
1712
|
+
return true;
|
|
1713
|
+
}
|
|
1714
|
+
return shouldShowWidget(config['widget-data-options'], values);
|
|
1715
|
+
}, [config['widget-data-options'], values, isLayoutWidget]);
|
|
1716
|
+
const isEnabled = React.useMemo(() => {
|
|
1717
|
+
// Layout widgets are always enabled (they don't have input state)
|
|
1718
|
+
if (isLayoutWidget) {
|
|
1719
|
+
return true;
|
|
1720
|
+
}
|
|
1721
|
+
if (config['widget-readonly']) {
|
|
1722
|
+
return false;
|
|
1723
|
+
}
|
|
1724
|
+
return shouldEnableWidget(config['widget-data-options'], values);
|
|
1725
|
+
}, [config['widget-readonly'], config['widget-data-options'], values, isLayoutWidget]);
|
|
1726
|
+
// Format value for display
|
|
1727
|
+
const formattedValue = React.useMemo(() => {
|
|
1728
|
+
if (!config['widget-data-format']) {
|
|
1729
|
+
return currentValue;
|
|
1730
|
+
}
|
|
1731
|
+
return formatValue(currentValue, config['widget-data-format'], config.widget);
|
|
1732
|
+
}, [currentValue, config]);
|
|
1733
|
+
// Track readonly state explicitly to detect changes
|
|
1734
|
+
// Use JSON.stringify to create a stable reference for the dependency array
|
|
1735
|
+
const isReadonly = config['widget-readonly'] ?? false;
|
|
1736
|
+
const dataSource = config['widget-data-source'];
|
|
1737
|
+
const geoConfig = config['widget-geo-config'];
|
|
1738
|
+
// Use ref to store handler to avoid stale closures
|
|
1739
|
+
const handlerRef = React.useRef(dataSourceRequestHandler);
|
|
1740
|
+
React.useEffect(() => {
|
|
1741
|
+
handlerRef.current = dataSourceRequestHandler;
|
|
1742
|
+
}, [dataSourceRequestHandler]);
|
|
1743
|
+
// Create a stable key for the config to detect changes
|
|
1744
|
+
// This ensures the effect runs when widget-readonly changes
|
|
1745
|
+
const apiService = dataSource?.type === 'api' ? dataSource.service : '';
|
|
1746
|
+
const apiEndpoint = dataSource?.type === 'api' ? dataSource.endpoint : '';
|
|
1747
|
+
const configKey = `${widgetId}-${isReadonly}-${dataSource?.type || 'none'}-${apiService}-${apiEndpoint}`;
|
|
1748
|
+
// Handle data source loading
|
|
1749
|
+
React.useEffect(() => {
|
|
1750
|
+
if (!dataSource) {
|
|
1751
|
+
return;
|
|
1752
|
+
}
|
|
1753
|
+
// For API data sources, check if widget is readonly
|
|
1754
|
+
// According to PRD: "Level 1 geo widgets load on widget mount or when entering edit mode"
|
|
1755
|
+
// So we should only load API data sources when widget is NOT readonly
|
|
1756
|
+
if (dataSource.type === 'api' && isReadonly) {
|
|
1757
|
+
return;
|
|
1758
|
+
}
|
|
1759
|
+
// For widgets with dependencies, check if dependency value exists
|
|
1760
|
+
if (dataSource.type === 'api' && dataSource.dependsOn) {
|
|
1761
|
+
// Check if dependency value exists
|
|
1762
|
+
let depValue = null;
|
|
1763
|
+
if (dataSource.dependsOn.includes('.')) {
|
|
1764
|
+
depValue = getWidgetValue(values, dataSource.dependsOn, '');
|
|
1765
|
+
}
|
|
1766
|
+
else {
|
|
1767
|
+
depValue = values[dataSource.dependsOn];
|
|
1768
|
+
}
|
|
1769
|
+
// If dependency is empty, don't load (will load when dependency has value)
|
|
1770
|
+
if (depValue === null || depValue === undefined || depValue === '') {
|
|
1771
|
+
return;
|
|
1772
|
+
}
|
|
1773
|
+
}
|
|
1774
|
+
const loadDataSource = async () => {
|
|
1775
|
+
// Get current handler from ref to avoid stale closures
|
|
1776
|
+
// Also check prop directly as fallback (for initial render or when ref not updated yet)
|
|
1777
|
+
const currentHandler = handlerRef.current || dataSourceRequestHandler;
|
|
1778
|
+
// Only check for handler when we actually need it (inside the async function)
|
|
1779
|
+
// This avoids false errors during React Strict Mode double-invocation
|
|
1780
|
+
// If handler isn't available yet, silently skip - React will retry when it's ready
|
|
1781
|
+
try {
|
|
1782
|
+
if (dataSource.type === 'api' && !currentHandler) {
|
|
1783
|
+
// Silently skip if handler isn't available yet (common during React Strict Mode double-invocation)
|
|
1784
|
+
// React will call this effect again when the handler is ready
|
|
1785
|
+
return;
|
|
1786
|
+
}
|
|
1787
|
+
dispatch(setLoading({ widgetId, loading: true }));
|
|
1788
|
+
let data = [];
|
|
1789
|
+
if (dataSource.type === 'static') {
|
|
1790
|
+
data = getStaticDataSource(dataSource);
|
|
1791
|
+
}
|
|
1792
|
+
else if (dataSource.type === 'api') {
|
|
1793
|
+
if (!currentHandler) {
|
|
1794
|
+
// Silently skip if handler isn't available yet
|
|
1795
|
+
dispatch(setLoading({ widgetId, loading: false }));
|
|
1796
|
+
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1797
|
+
return;
|
|
1798
|
+
}
|
|
1799
|
+
// Extract level_id from widget-geo-config.level if available
|
|
1800
|
+
const levelId = geoConfig?.level;
|
|
1801
|
+
data = await getApiDataSource(dataSource, values, currentHandler, levelId);
|
|
1802
|
+
}
|
|
1803
|
+
else if (dataSource.type === 'schema') {
|
|
1804
|
+
data = getSchemaDataSource(dataSource, schemaData || {});
|
|
1805
|
+
}
|
|
1806
|
+
// Transform to { value, label } format
|
|
1807
|
+
// For geo widgets, default to level_value_id and level_value_mnemonic
|
|
1808
|
+
let valueKey;
|
|
1809
|
+
let labelKey;
|
|
1810
|
+
if (dataSource.type === 'static') {
|
|
1811
|
+
valueKey = undefined;
|
|
1812
|
+
labelKey = undefined;
|
|
1813
|
+
}
|
|
1814
|
+
else if (geoConfig) {
|
|
1815
|
+
// Geo widgets: default to level_value_id and level_value_mnemonic
|
|
1816
|
+
valueKey = dataSource.valueKey || 'level_value_id';
|
|
1817
|
+
labelKey = dataSource.labelKey || 'level_value_mnemonic';
|
|
1818
|
+
}
|
|
1819
|
+
else {
|
|
1820
|
+
// Non-geo widgets: use specified keys or undefined
|
|
1821
|
+
valueKey = dataSource.valueKey;
|
|
1822
|
+
labelKey = dataSource.labelKey;
|
|
1823
|
+
}
|
|
1824
|
+
const transformed = transformDataSourceOptions(data, valueKey, labelKey);
|
|
1825
|
+
dispatch(setDataSource({ widgetId, data: transformed }));
|
|
1826
|
+
}
|
|
1827
|
+
catch (error) {
|
|
1828
|
+
console.error(`[useBaseWidget] ERROR loading data source for ${widgetId}:`, error);
|
|
1829
|
+
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1830
|
+
}
|
|
1831
|
+
finally {
|
|
1832
|
+
dispatch(setLoading({ widgetId, loading: false }));
|
|
1833
|
+
}
|
|
1834
|
+
};
|
|
1835
|
+
loadDataSource();
|
|
1836
|
+
// Use configKey to ensure effect runs when readonly state changes
|
|
1837
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1838
|
+
}, [configKey, values, dataSourceRequestHandler, schemaData, widgetId, dispatch]);
|
|
1839
|
+
return {
|
|
1840
|
+
widgetId,
|
|
1841
|
+
value: currentValue,
|
|
1842
|
+
formattedValue,
|
|
1843
|
+
error: errors,
|
|
1844
|
+
touched,
|
|
1845
|
+
loading,
|
|
1846
|
+
isVisible,
|
|
1847
|
+
isEnabled,
|
|
1848
|
+
onChange: handleChange,
|
|
1849
|
+
onBlur: handleBlur,
|
|
1850
|
+
setError: (errors) => dispatch(setError({ widgetId, errors })),
|
|
1851
|
+
getFieldValue,
|
|
1852
|
+
dataSourceOptions,
|
|
1853
|
+
config,
|
|
1854
|
+
};
|
|
1855
|
+
};
|
|
1856
|
+
|
|
1857
|
+
/**
|
|
1858
|
+
* Hook for general widget cascade functionality
|
|
1859
|
+
* Handles listening to parent widget changes and reloading data sources
|
|
1860
|
+
*/
|
|
1861
|
+
const useWidgetCascade = (options) => {
|
|
1862
|
+
const { config, dataSourceRequestHandler, values } = options;
|
|
1863
|
+
const dispatch = reactRedux.useDispatch();
|
|
1864
|
+
const eventBus = useWidgetEventBus();
|
|
1865
|
+
const widgetId = config['widget-id'];
|
|
1866
|
+
const cascadeConfig = config['widget-cascade'];
|
|
1867
|
+
const dataSource = config['widget-data-source'];
|
|
1868
|
+
const valuesRef = React.useRef(values);
|
|
1869
|
+
const handlerRef = React.useRef(dataSourceRequestHandler);
|
|
1870
|
+
// Keep refs updated
|
|
1871
|
+
React.useEffect(() => {
|
|
1872
|
+
valuesRef.current = values;
|
|
1873
|
+
handlerRef.current = dataSourceRequestHandler;
|
|
1874
|
+
}, [values, dataSourceRequestHandler]);
|
|
1875
|
+
React.useEffect(() => {
|
|
1876
|
+
if (!cascadeConfig || !eventBus || !dataSource || dataSource.type !== 'api') {
|
|
1877
|
+
return;
|
|
1878
|
+
}
|
|
1879
|
+
const { listenTo, onEvent = 'widget:change', clearOnChange = true, reloadOnChange = true, debounce, throttle } = cascadeConfig;
|
|
1880
|
+
if (listenTo.length === 0) {
|
|
1881
|
+
return;
|
|
1882
|
+
}
|
|
1883
|
+
const handleEvent = async (event) => {
|
|
1884
|
+
// Check if this event is from a parent we're listening to
|
|
1885
|
+
if (!listenTo.includes(event.widgetId)) {
|
|
1886
|
+
return;
|
|
1887
|
+
}
|
|
1888
|
+
const currentValues = valuesRef.current;
|
|
1889
|
+
const currentHandler = handlerRef.current;
|
|
1890
|
+
// Clear value if configured
|
|
1891
|
+
if (clearOnChange) {
|
|
1892
|
+
dispatch(setValue({ widgetId, value: undefined }));
|
|
1893
|
+
}
|
|
1894
|
+
// Reload data source if configured
|
|
1895
|
+
if (reloadOnChange && currentHandler) {
|
|
1896
|
+
try {
|
|
1897
|
+
const data = await getApiDataSource(dataSource, currentValues, currentHandler);
|
|
1898
|
+
// Transform to { value, label } format
|
|
1899
|
+
const valueKey = dataSource.valueKey;
|
|
1900
|
+
const labelKey = dataSource.labelKey;
|
|
1901
|
+
const transformed = transformDataSourceOptions(data, valueKey, labelKey);
|
|
1902
|
+
dispatch(setDataSource({ widgetId, data: transformed }));
|
|
1903
|
+
}
|
|
1904
|
+
catch (error) {
|
|
1905
|
+
console.error('Error reloading data source in cascade:', error);
|
|
1906
|
+
dispatch(setDataSource({ widgetId, data: [] }));
|
|
1907
|
+
}
|
|
1908
|
+
}
|
|
1909
|
+
};
|
|
1910
|
+
// Subscribe to events
|
|
1911
|
+
const unsubscribe = eventBus.subscribe(onEvent, handleEvent, { debounce, throttle });
|
|
1912
|
+
return () => {
|
|
1913
|
+
unsubscribe();
|
|
1914
|
+
};
|
|
1915
|
+
}, [cascadeConfig, eventBus, dataSource, widgetId, dispatch]);
|
|
1916
|
+
};
|
|
2028
1917
|
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
1918
|
+
/**
|
|
1919
|
+
* Geo Hierarchy Builder
|
|
1920
|
+
* Manages geo hierarchy state and builds hierarchy JSON structure
|
|
1921
|
+
*/
|
|
1922
|
+
class GeoHierarchyBuilder {
|
|
1923
|
+
constructor() {
|
|
1924
|
+
this.hierarchies = new Map();
|
|
1925
|
+
}
|
|
1926
|
+
/**
|
|
1927
|
+
* Get or create hierarchy state for a group
|
|
1928
|
+
*/
|
|
1929
|
+
getHierarchy(groupId = 'default') {
|
|
1930
|
+
if (!this.hierarchies.has(groupId)) {
|
|
1931
|
+
this.hierarchies.set(groupId, {
|
|
1932
|
+
levels: new Map(),
|
|
1933
|
+
order: [],
|
|
1934
|
+
});
|
|
1935
|
+
}
|
|
1936
|
+
return this.hierarchies.get(groupId);
|
|
1937
|
+
}
|
|
1938
|
+
/**
|
|
1939
|
+
* Add a level to the hierarchy
|
|
1940
|
+
*/
|
|
1941
|
+
addLevel(level, level_value_id, level_value_mnemonic, groupId = 'default') {
|
|
1942
|
+
const hierarchy = this.getHierarchy(groupId);
|
|
1943
|
+
// If level already exists, remove it and everything after it
|
|
1944
|
+
const existingIndex = hierarchy.order.indexOf(level);
|
|
1945
|
+
if (existingIndex >= 0) {
|
|
1946
|
+
// Remove this level and all subsequent levels
|
|
1947
|
+
const levelsToRemove = hierarchy.order.slice(existingIndex);
|
|
1948
|
+
levelsToRemove.forEach((l) => {
|
|
1949
|
+
hierarchy.levels.delete(l);
|
|
1950
|
+
hierarchy.order = hierarchy.order.filter((o) => o !== l);
|
|
1951
|
+
});
|
|
1952
|
+
}
|
|
1953
|
+
// Add new level
|
|
1954
|
+
hierarchy.levels.set(level, {
|
|
1955
|
+
level,
|
|
1956
|
+
level_value_id,
|
|
1957
|
+
level_value_mnemonic,
|
|
1958
|
+
});
|
|
1959
|
+
hierarchy.order.push(level);
|
|
1960
|
+
}
|
|
1961
|
+
/**
|
|
1962
|
+
* Remove a level and all levels below it
|
|
1963
|
+
*/
|
|
1964
|
+
removeLevelAndBelow(level, groupId = 'default') {
|
|
1965
|
+
const hierarchy = this.getHierarchy(groupId);
|
|
1966
|
+
const index = hierarchy.order.indexOf(level);
|
|
1967
|
+
if (index >= 0) {
|
|
1968
|
+
// Remove this level and all subsequent levels
|
|
1969
|
+
const levelsToRemove = hierarchy.order.slice(index);
|
|
1970
|
+
levelsToRemove.forEach((l) => {
|
|
1971
|
+
hierarchy.levels.delete(l);
|
|
1972
|
+
hierarchy.order = hierarchy.order.filter((o) => o !== l);
|
|
1973
|
+
});
|
|
1974
|
+
}
|
|
1975
|
+
}
|
|
1976
|
+
/**
|
|
1977
|
+
* Build hierarchy JSON structure
|
|
1978
|
+
*/
|
|
1979
|
+
buildHierarchyJson(groupId = 'default') {
|
|
1980
|
+
const hierarchy = this.getHierarchy(groupId);
|
|
1981
|
+
if (hierarchy.order.length === 0) {
|
|
1982
|
+
return null;
|
|
1983
|
+
}
|
|
1984
|
+
const hierarchyArray = hierarchy.order.map((level) => {
|
|
1985
|
+
const data = hierarchy.levels.get(level);
|
|
1986
|
+
return {
|
|
1987
|
+
level: data.level,
|
|
1988
|
+
level_value_id: data.level_value_id,
|
|
1989
|
+
level_value_mnemonic: data.level_value_mnemonic,
|
|
1990
|
+
};
|
|
1991
|
+
});
|
|
1992
|
+
const lowestLevel = hierarchy.order[hierarchy.order.length - 1];
|
|
1993
|
+
const lowestLevelData = hierarchy.levels.get(lowestLevel);
|
|
1994
|
+
return {
|
|
1995
|
+
geo_lowest_level_value_id: lowestLevelData.level_value_id,
|
|
1996
|
+
geo_code_hierarchy_json: {
|
|
1997
|
+
hierarchy: hierarchyArray,
|
|
1998
|
+
lowest_level_value_id: lowestLevelData.level_value_id,
|
|
1999
|
+
},
|
|
2000
|
+
};
|
|
2001
|
+
}
|
|
2002
|
+
/**
|
|
2003
|
+
* Clear hierarchy for a group
|
|
2004
|
+
*/
|
|
2005
|
+
clear(groupId = 'default') {
|
|
2006
|
+
this.hierarchies.delete(groupId);
|
|
2007
|
+
}
|
|
2008
|
+
/**
|
|
2009
|
+
* Clear all hierarchies
|
|
2010
|
+
*/
|
|
2011
|
+
clearAll() {
|
|
2012
|
+
this.hierarchies.clear();
|
|
2013
|
+
}
|
|
2014
|
+
/**
|
|
2015
|
+
* Get current levels for a group
|
|
2016
|
+
*/
|
|
2017
|
+
getLevels(groupId = 'default') {
|
|
2018
|
+
const hierarchy = this.getHierarchy(groupId);
|
|
2019
|
+
return hierarchy.order.map((level) => hierarchy.levels.get(level));
|
|
2020
|
+
}
|
|
2035
2021
|
}
|
|
2022
|
+
// Singleton instance
|
|
2023
|
+
const geoHierarchyBuilder = new GeoHierarchyBuilder();
|
|
2036
2024
|
|
|
2037
|
-
|
|
2025
|
+
// Define stable empty array to avoid selector reference issues
|
|
2026
|
+
const EMPTY_DATA_SOURCE = [];
|
|
2027
|
+
/**
|
|
2028
|
+
* Hook for geo widget cascade functionality
|
|
2029
|
+
* Handles geo hierarchy building and cascade behavior
|
|
2030
|
+
*/
|
|
2031
|
+
const useGeoWidgetCascade = (options) => {
|
|
2032
|
+
const { config, dataSourceRequestHandler, values } = options;
|
|
2033
|
+
const dispatch = reactRedux.useDispatch();
|
|
2034
|
+
const eventBus = useWidgetEventBus();
|
|
2035
|
+
const widgetId = config['widget-id'];
|
|
2036
|
+
const geoConfig = config['widget-geo-config'];
|
|
2037
|
+
const dataSource = config['widget-data-source'];
|
|
2038
|
+
const dataPath = config['widget-data-path'];
|
|
2039
|
+
const valuesRef = React.useRef(values);
|
|
2040
|
+
const handlerRef = React.useRef(dataSourceRequestHandler);
|
|
2041
|
+
// Keep refs updated
|
|
2042
|
+
React.useEffect(() => {
|
|
2043
|
+
valuesRef.current = values;
|
|
2044
|
+
handlerRef.current = dataSourceRequestHandler;
|
|
2045
|
+
}, [values, dataSourceRequestHandler]);
|
|
2046
|
+
// Get current value and data source options
|
|
2047
|
+
const currentValue = reactRedux.useSelector((state) => {
|
|
2048
|
+
if (!dataPath) {
|
|
2049
|
+
return state.widget.values[widgetId];
|
|
2050
|
+
}
|
|
2051
|
+
return getWidgetValue(state.widget.values, dataPath, widgetId);
|
|
2052
|
+
});
|
|
2053
|
+
// Memoize selector to avoid returning new array reference
|
|
2054
|
+
const dataSourceOptions = reactRedux.useSelector((state) => state.widget.dataSources[widgetId] ?? EMPTY_DATA_SOURCE);
|
|
2055
|
+
React.useEffect(() => {
|
|
2056
|
+
if (!geoConfig || !eventBus || !dataSource || dataSource.type !== 'api') {
|
|
2057
|
+
return;
|
|
2058
|
+
}
|
|
2059
|
+
const { level, isLastLevel, parentWidgetId } = geoConfig;
|
|
2060
|
+
// Listen to parent widget changes
|
|
2061
|
+
if (parentWidgetId) {
|
|
2062
|
+
const handleParentChange = async (event) => {
|
|
2063
|
+
if (event.widgetId !== parentWidgetId) {
|
|
2064
|
+
return;
|
|
2065
|
+
}
|
|
2066
|
+
// CRITICAL: Use a small delay to ensure Redux state has been updated
|
|
2067
|
+
// This prevents reading stale values from valuesRef
|
|
2068
|
+
await new Promise(resolve => setTimeout(resolve, 0));
|
|
2069
|
+
const currentValues = valuesRef.current;
|
|
2070
|
+
const currentHandler = handlerRef.current;
|
|
2071
|
+
// CRITICAL: Get the parent value from Redux state, not from the event
|
|
2072
|
+
// The event.value might be stale, but Redux state is always current
|
|
2073
|
+
const parentValue = currentValues[parentWidgetId];
|
|
2074
|
+
// Remove this level and all below from hierarchy
|
|
2075
|
+
geoHierarchyBuilder.removeLevelAndBelow(level);
|
|
2076
|
+
// Clear this widget's value
|
|
2077
|
+
// CRITICAL: Only dispatch setValue for THIS widget, not for parent or other widgets
|
|
2078
|
+
// setWidgetValue returns the entire updated state, but we only want to update this widget
|
|
2079
|
+
if (dataPath) {
|
|
2080
|
+
const updatedValues = setWidgetValue(currentValues, dataPath, widgetId, undefined);
|
|
2081
|
+
// Only dispatch setValue for this widget's widgetId, not for parent or other widgets
|
|
2082
|
+
// This prevents accidentally overwriting the parent widget's value
|
|
2083
|
+
// The setWidgetValue function updates the nested structure, but we only want to
|
|
2084
|
+
// update the top-level widgetId key, not other keys that might be in updatedValues
|
|
2085
|
+
const newWidgetValue = updatedValues[widgetId];
|
|
2086
|
+
if (newWidgetValue !== undefined) {
|
|
2087
|
+
dispatch(setValue({ widgetId, value: newWidgetValue }));
|
|
2088
|
+
}
|
|
2089
|
+
else {
|
|
2090
|
+
// If widgetId is not in updatedValues, the value was set in a nested path
|
|
2091
|
+
// In this case, we need to use setValues to update the entire structure
|
|
2092
|
+
// But we need to be careful not to overwrite the parent widget's value
|
|
2093
|
+
// Only update keys that are related to this widget's dataPath
|
|
2094
|
+
const dataPathStr = typeof dataPath === 'string' ? dataPath : '';
|
|
2095
|
+
if (dataPathStr && !dataPathStr.startsWith(parentWidgetId + '.')) {
|
|
2096
|
+
// Only update if dataPath doesn't start with parentWidgetId
|
|
2097
|
+
// This ensures we don't accidentally overwrite the parent widget's value
|
|
2098
|
+
dispatch(setValue({ widgetId, value: undefined }));
|
|
2099
|
+
}
|
|
2100
|
+
}
|
|
2101
|
+
}
|
|
2102
|
+
else {
|
|
2103
|
+
dispatch(setValue({ widgetId, value: undefined }));
|
|
2104
|
+
}
|
|
2105
|
+
// Reload data source with new parent value
|
|
2106
|
+
// CRITICAL: Use parentValue from Redux, not event.value
|
|
2107
|
+
if (currentHandler && parentValue !== null && parentValue !== undefined) {
|
|
2108
|
+
try {
|
|
2109
|
+
// Merge the new parent value into current values for the API call
|
|
2110
|
+
// This ensures getApiDataSource can find the dependency value
|
|
2111
|
+
const updatedValues = {
|
|
2112
|
+
...currentValues,
|
|
2113
|
+
[parentWidgetId]: parentValue, // Use Redux value, not event.value
|
|
2114
|
+
};
|
|
2115
|
+
// Extract level_id from widget-geo-config.level
|
|
2116
|
+
const levelId = geoConfig.level;
|
|
2117
|
+
const data = await getApiDataSource(dataSource, updatedValues, currentHandler, levelId);
|
|
2118
|
+
// Transform to { value, label } format
|
|
2119
|
+
const valueKey = dataSource.valueKey || 'level_value_id';
|
|
2120
|
+
const labelKey = dataSource.labelKey || 'level_value_mnemonic';
|
|
2121
|
+
const transformed = transformDataSourceOptions(data, valueKey, labelKey);
|
|
2122
|
+
dispatch(setDataSource({ widgetId, data: transformed }));
|
|
2123
|
+
}
|
|
2124
|
+
catch (error) {
|
|
2125
|
+
console.error('Error reloading geo data source:', error);
|
|
2126
|
+
dispatch(setDataSource({ widgetId, data: [] }));
|
|
2127
|
+
}
|
|
2128
|
+
}
|
|
2129
|
+
else {
|
|
2130
|
+
// If parent value is cleared, clear the data source
|
|
2131
|
+
dispatch(setDataSource({ widgetId, data: [] }));
|
|
2132
|
+
}
|
|
2133
|
+
};
|
|
2134
|
+
const unsubscribe = eventBus.subscribe('widget:change', handleParentChange);
|
|
2135
|
+
return () => {
|
|
2136
|
+
unsubscribe();
|
|
2137
|
+
};
|
|
2138
|
+
}
|
|
2139
|
+
}, [geoConfig, eventBus, dataSource, widgetId, dataPath, dispatch]);
|
|
2140
|
+
// Handle value changes to build hierarchy
|
|
2141
|
+
React.useEffect(() => {
|
|
2142
|
+
if (!geoConfig) {
|
|
2143
|
+
return;
|
|
2144
|
+
}
|
|
2145
|
+
// Skip if value is empty/null (but allow 0 and false)
|
|
2146
|
+
if (currentValue === null || currentValue === undefined || currentValue === '') {
|
|
2147
|
+
// If value was cleared, remove this level and below from hierarchy
|
|
2148
|
+
const { level } = geoConfig;
|
|
2149
|
+
geoHierarchyBuilder.removeLevelAndBelow(level);
|
|
2150
|
+
return;
|
|
2151
|
+
}
|
|
2152
|
+
const { level, isLastLevel } = geoConfig;
|
|
2153
|
+
// For last level, check if hierarchy is already built to prevent endless loops
|
|
2154
|
+
if (isLastLevel && dataPath) {
|
|
2155
|
+
const currentHierarchy = getWidgetValue(valuesRef.current, dataPath, widgetId);
|
|
2156
|
+
// If hierarchy JSON is already set and matches current value, skip rebuilding
|
|
2157
|
+
if (currentHierarchy && typeof currentHierarchy === 'object' && currentHierarchy.geo_code_hierarchy_json) {
|
|
2158
|
+
// Check if the lowest level value matches
|
|
2159
|
+
const currentLevelValue = typeof currentValue === 'object'
|
|
2160
|
+
? (currentValue.level_value_id || currentValue.id || currentValue.value)
|
|
2161
|
+
: currentValue;
|
|
2162
|
+
if (currentHierarchy.geo_lowest_level_value_id === currentLevelValue) {
|
|
2163
|
+
return; // Hierarchy already built for this value, skip
|
|
2164
|
+
}
|
|
2165
|
+
}
|
|
2166
|
+
}
|
|
2167
|
+
// Extract level_value_id and level_value_mnemonic from current value
|
|
2168
|
+
// The value could be the ID itself or an object with id/name
|
|
2169
|
+
let level_value_id;
|
|
2170
|
+
let level_value_mnemonic;
|
|
2171
|
+
if (typeof currentValue === 'string' || typeof currentValue === 'number') {
|
|
2172
|
+
// Value is just the ID, need to find mnemonic from data source
|
|
2173
|
+
level_value_id = String(currentValue);
|
|
2174
|
+
// Try to get mnemonic from data source options
|
|
2175
|
+
const option = dataSourceOptions.find((opt) => opt.value === currentValue);
|
|
2176
|
+
level_value_mnemonic = option?.label || String(currentValue);
|
|
2177
|
+
}
|
|
2178
|
+
else if (currentValue && typeof currentValue === 'object') {
|
|
2179
|
+
level_value_id = currentValue.level_value_id || currentValue.id || currentValue.value;
|
|
2180
|
+
level_value_mnemonic = currentValue.level_value_mnemonic || currentValue.name || currentValue.label;
|
|
2181
|
+
}
|
|
2182
|
+
else {
|
|
2183
|
+
return;
|
|
2184
|
+
}
|
|
2185
|
+
// When a widget's own value changes, remove this level and all below from hierarchy first
|
|
2186
|
+
// This ensures that when level 1 changes, we clear the hierarchy and rebuild from scratch
|
|
2187
|
+
// The addLevel method already handles removing existing levels, but we explicitly clear to be safe
|
|
2188
|
+
geoHierarchyBuilder.removeLevelAndBelow(level);
|
|
2189
|
+
// Add level to hierarchy
|
|
2190
|
+
geoHierarchyBuilder.addLevel(level, level_value_id, level_value_mnemonic);
|
|
2191
|
+
// If this is the last level, build and store hierarchy JSON
|
|
2192
|
+
if (isLastLevel && dataPath) {
|
|
2193
|
+
const hierarchyJson = geoHierarchyBuilder.buildHierarchyJson();
|
|
2194
|
+
if (hierarchyJson) {
|
|
2195
|
+
// Store both geo_lowest_level_value_id and geo_code_hierarchy_json
|
|
2196
|
+
const updatedValues = setWidgetValue(valuesRef.current, dataPath, widgetId, {
|
|
2197
|
+
geo_lowest_level_value_id: hierarchyJson.geo_lowest_level_value_id,
|
|
2198
|
+
geo_code_hierarchy_json: hierarchyJson.geo_code_hierarchy_json,
|
|
2199
|
+
});
|
|
2200
|
+
Object.entries(updatedValues).forEach(([key, value]) => {
|
|
2201
|
+
dispatch(setValue({ widgetId: key, value }));
|
|
2202
|
+
});
|
|
2203
|
+
}
|
|
2204
|
+
}
|
|
2205
|
+
}, [geoConfig, currentValue, widgetId, dataPath, dispatch, dataSourceOptions]);
|
|
2206
|
+
};
|
|
2038
2207
|
|
|
2039
2208
|
class WidgetRegistry {
|
|
2040
2209
|
constructor() {
|
|
@@ -2109,178 +2278,12 @@ class WidgetRegistry {
|
|
|
2109
2278
|
return React.createElement(entry.component, {
|
|
2110
2279
|
config,
|
|
2111
2280
|
...context,
|
|
2112
|
-
...entry.defaultProps,
|
|
2113
|
-
});
|
|
2114
|
-
}
|
|
2115
|
-
}
|
|
2116
|
-
// Singleton instance
|
|
2117
|
-
const widgetRegistry = new WidgetRegistry();
|
|
2118
|
-
|
|
2119
|
-
/**
|
|
2120
|
-
* Widget Event Bus
|
|
2121
|
-
* Provides a publish/subscribe mechanism for widget communication
|
|
2122
|
-
* Supports debounce and throttle for performance optimization
|
|
2123
|
-
*/
|
|
2124
|
-
class WidgetEventBus {
|
|
2125
|
-
constructor() {
|
|
2126
|
-
this.subscriptions = new Map();
|
|
2127
|
-
this.throttleTimers = new Map();
|
|
2128
|
-
}
|
|
2129
|
-
/**
|
|
2130
|
-
* Subscribe to an event type
|
|
2131
|
-
* @param eventType The type of event to listen to
|
|
2132
|
-
* @param handler The handler function
|
|
2133
|
-
* @param options Debounce/throttle options
|
|
2134
|
-
* @returns Unsubscribe function
|
|
2135
|
-
*/
|
|
2136
|
-
subscribe(eventType, handler, options) {
|
|
2137
|
-
if (!this.subscriptions.has(eventType)) {
|
|
2138
|
-
this.subscriptions.set(eventType, new Map());
|
|
2139
|
-
}
|
|
2140
|
-
const eventSubscriptions = this.subscriptions.get(eventType);
|
|
2141
|
-
const subscriptionId = `${Date.now()}-${Math.random()}`;
|
|
2142
|
-
const subscription = {
|
|
2143
|
-
handler,
|
|
2144
|
-
debounce: options?.debounce,
|
|
2145
|
-
throttle: options?.throttle,
|
|
2146
|
-
};
|
|
2147
|
-
if (!eventSubscriptions.has(subscriptionId)) {
|
|
2148
|
-
eventSubscriptions.set(subscriptionId, []);
|
|
2149
|
-
}
|
|
2150
|
-
eventSubscriptions.get(subscriptionId).push(subscription);
|
|
2151
|
-
// Return unsubscribe function
|
|
2152
|
-
return () => {
|
|
2153
|
-
const subs = eventSubscriptions.get(subscriptionId);
|
|
2154
|
-
if (subs) {
|
|
2155
|
-
const index = subs.indexOf(subscription);
|
|
2156
|
-
if (index > -1) {
|
|
2157
|
-
subs.splice(index, 1);
|
|
2158
|
-
if (subs.length === 0) {
|
|
2159
|
-
eventSubscriptions.delete(subscriptionId);
|
|
2160
|
-
}
|
|
2161
|
-
}
|
|
2162
|
-
}
|
|
2163
|
-
};
|
|
2164
|
-
}
|
|
2165
|
-
/**
|
|
2166
|
-
* Publish an event
|
|
2167
|
-
* @param event The event to publish
|
|
2168
|
-
*/
|
|
2169
|
-
publish(event) {
|
|
2170
|
-
const eventSubscriptions = this.subscriptions.get(event.type);
|
|
2171
|
-
if (!eventSubscriptions) {
|
|
2172
|
-
return;
|
|
2173
|
-
}
|
|
2174
|
-
eventSubscriptions.forEach((subscriptions) => {
|
|
2175
|
-
subscriptions.forEach((subscription) => {
|
|
2176
|
-
this.executeHandler(subscription, event);
|
|
2177
|
-
});
|
|
2178
|
-
});
|
|
2179
|
-
}
|
|
2180
|
-
/**
|
|
2181
|
-
* Execute handler with debounce/throttle support
|
|
2182
|
-
*/
|
|
2183
|
-
executeHandler(subscription, event) {
|
|
2184
|
-
const { handler, debounce, throttle } = subscription;
|
|
2185
|
-
// Clear existing debounce timer if any
|
|
2186
|
-
if (subscription.debounceTimer) {
|
|
2187
|
-
clearTimeout(subscription.debounceTimer);
|
|
2188
|
-
}
|
|
2189
|
-
// Handle throttle
|
|
2190
|
-
if (throttle && throttle > 0) {
|
|
2191
|
-
const throttleKey = `${event.type}-${event.widgetId}`;
|
|
2192
|
-
const now = Date.now();
|
|
2193
|
-
const lastCallTime = subscription.lastCallTime || 0;
|
|
2194
|
-
if (now - lastCallTime < throttle) {
|
|
2195
|
-
// Still in throttle period, schedule for later
|
|
2196
|
-
if (this.throttleTimers.has(throttleKey)) {
|
|
2197
|
-
return; // Already scheduled
|
|
2198
|
-
}
|
|
2199
|
-
const remainingTime = throttle - (now - lastCallTime);
|
|
2200
|
-
const timer = setTimeout(() => {
|
|
2201
|
-
subscription.lastCallTime = Date.now();
|
|
2202
|
-
handler(event);
|
|
2203
|
-
this.throttleTimers.delete(throttleKey);
|
|
2204
|
-
}, remainingTime);
|
|
2205
|
-
this.throttleTimers.set(throttleKey, timer);
|
|
2206
|
-
return;
|
|
2207
|
-
}
|
|
2208
|
-
subscription.lastCallTime = now;
|
|
2209
|
-
}
|
|
2210
|
-
// Handle debounce
|
|
2211
|
-
if (debounce && debounce > 0) {
|
|
2212
|
-
subscription.debounceTimer = setTimeout(() => {
|
|
2213
|
-
handler(event);
|
|
2214
|
-
subscription.debounceTimer = undefined;
|
|
2215
|
-
}, debounce);
|
|
2216
|
-
return;
|
|
2217
|
-
}
|
|
2218
|
-
// Execute immediately if no debounce/throttle
|
|
2219
|
-
handler(event);
|
|
2220
|
-
}
|
|
2221
|
-
/**
|
|
2222
|
-
* Clear all subscriptions
|
|
2223
|
-
*/
|
|
2224
|
-
clear() {
|
|
2225
|
-
// Clear all timers
|
|
2226
|
-
this.subscriptions.forEach((eventSubscriptions) => {
|
|
2227
|
-
eventSubscriptions.forEach((subscriptions) => {
|
|
2228
|
-
subscriptions.forEach((sub) => {
|
|
2229
|
-
if (sub.debounceTimer) {
|
|
2230
|
-
clearTimeout(sub.debounceTimer);
|
|
2231
|
-
}
|
|
2232
|
-
});
|
|
2233
|
-
});
|
|
2281
|
+
...entry.defaultProps,
|
|
2234
2282
|
});
|
|
2235
|
-
this.throttleTimers.forEach((timer) => clearTimeout(timer));
|
|
2236
|
-
this.throttleTimers.clear();
|
|
2237
|
-
this.subscriptions.clear();
|
|
2238
2283
|
}
|
|
2239
2284
|
}
|
|
2240
|
-
|
|
2241
|
-
const
|
|
2242
|
-
dataSourceRequestHandler: undefined,
|
|
2243
|
-
schemaData: undefined,
|
|
2244
|
-
translate: undefined,
|
|
2245
|
-
});
|
|
2246
|
-
const useWidgetContext = () => {
|
|
2247
|
-
return React.useContext(WidgetContext);
|
|
2248
|
-
};
|
|
2249
|
-
const WidgetProvider = ({ store, dataSourceRequestHandler, schemaData, translate, children, }) => {
|
|
2250
|
-
const widgetStore = React.useMemo(() => store || createWidgetStore(), [store]);
|
|
2251
|
-
// Create event bus instance (one per provider)
|
|
2252
|
-
const eventBus = React.useMemo(() => new WidgetEventBus(), []);
|
|
2253
|
-
// Memoize context value to prevent unnecessary re-renders
|
|
2254
|
-
const contextValue = React.useMemo(() => ({
|
|
2255
|
-
dataSourceRequestHandler,
|
|
2256
|
-
schemaData,
|
|
2257
|
-
translate,
|
|
2258
|
-
}), [dataSourceRequestHandler, schemaData, translate]);
|
|
2259
|
-
// Warn if dataSourceRequestHandler is missing (will cause issues with API data sources)
|
|
2260
|
-
React.useEffect(() => {
|
|
2261
|
-
if (!dataSourceRequestHandler) {
|
|
2262
|
-
console.warn('[WidgetProvider] dataSourceRequestHandler is not provided. ' +
|
|
2263
|
-
'Widgets with API data sources will not be able to load data. ' +
|
|
2264
|
-
'Please provide dataSourceRequestHandler prop to WidgetProvider.');
|
|
2265
|
-
}
|
|
2266
|
-
}, [dataSourceRequestHandler]);
|
|
2267
|
-
// Cleanup event bus on unmount
|
|
2268
|
-
React.useEffect(() => {
|
|
2269
|
-
return () => {
|
|
2270
|
-
eventBus.clear();
|
|
2271
|
-
};
|
|
2272
|
-
}, [eventBus]);
|
|
2273
|
-
// Initialize schemaData to Redux store (only on mount)
|
|
2274
|
-
// This prevents overwriting user changes when schemaData prop changes
|
|
2275
|
-
React.useEffect(() => {
|
|
2276
|
-
if (schemaData) {
|
|
2277
|
-
widgetStore.dispatch(setValues(schemaData));
|
|
2278
|
-
}
|
|
2279
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
2280
|
-
}, [schemaData, widgetStore]); // Only run on mount
|
|
2281
|
-
const content = (jsxRuntimeExports.jsx(reactRedux.Provider, { store: widgetStore, children: jsxRuntimeExports.jsx(WidgetContext.Provider, { value: contextValue, children: jsxRuntimeExports.jsx(WidgetEventBusContext.Provider, { value: eventBus, children: children }) }) }));
|
|
2282
|
-
return content;
|
|
2283
|
-
};
|
|
2285
|
+
// Singleton instance
|
|
2286
|
+
const widgetRegistry = new WidgetRegistry();
|
|
2284
2287
|
|
|
2285
2288
|
const WidgetRenderer = ({ config, dataSourceRequestHandler: propDataSourceRequestHandler, schemaData: propSchemaData, onValueChange, defaultComponent, }) => {
|
|
2286
2289
|
// Use context values as fallback
|
|
@@ -2577,6 +2580,38 @@ const canPreviewInWeb = (file) => {
|
|
|
2577
2580
|
return previewableExtensions.includes(extension.toLowerCase());
|
|
2578
2581
|
};
|
|
2579
2582
|
|
|
2583
|
+
var img$f = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQQAAAEECAIAAABBat1dAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAABBKADAAQAAAABAAABBAAAAADhYptGAABAAElEQVR4Ae3dh5cbx7Ug/MmJHGaRoiIpybKPfd6x95zd9///D971+z7b+2SZkpg5DJPj/m5doDmZwADdAGZQGoHV1dVVN99boasn//p//vfEOI0pMKbAxMTUmAhjCowpkBQYK8NYEsYUaFFgrAxjURhTYKwMYxkYU+AoBcae4Sg9xldXmAJjZbjCzB+jfpQCY2U4So/x1RWmwFgZrjDzx6gfpcBYGY7SY3x1hSkwVoYrzPwx6kcpMFaGo/QYX11hCoyV4Qozf4z6UQqMleEoPcZXV5gCY2W4wswfo36UAmNlOEqP8dUVpsBYGa4w88eoH6XAWBmO0mN8dYUpMFaGK8z8MepHKTBWhqP0GF9dYQqMleEKM3+M+lEKzBy9HF91S4GDiQl/x9P+/r6iyXbK/MHBQZbL5AMy0uzsrIqZz3KXMgcH8TtOjVFgrAy1kJp8a5d8k/5M8kRcuYxbKe6pA1kh4VCSqTyeZePfhigwVoZaCL23t5ftpmRPTU3JEPqtrS0ZtyqJr7o/WVLdGmeaocBYGXqi8+Tk6YOunZ2dFG6Snxn+YHp61t/J/ihJ+g018256j1MDsJOPj0v6RYGxMvSLkkfamZlB2CLZ5LqdCD0XoZ4Cvy4jv38wPTMtpSa068a/lW4caXp8URsFxsrQE2lDqk8b5hZJDmGejPgoEjXgAHZ3w2PQBqoyVbzKwZSBxcTewUGJpOhPuXtASfYnp3uCbfxwtxQYK0O3FOuofol3yDPp3+UBDCGKH2DswzOQ+6mp6SL9oSvq+OUcZmYUhgZ43N1xmNQRrftXaawMXdAyjHoJcjKGcUm49/cY+gz6c5wcv9vbRg3bGxuba2trm5ubW1ubqRXUI3VgepoaRE0NXr9+fX5+gSbMzs7Nzc0KsdyQJibFUbpKCMOZ6D/+j9L4KZkIqGRSzUrGT6ZQJzfLE61H2g9GI+2m4nHduczIrfX01ftnrAyd8pxYFRGdItYsPdGZnZ0hWyL/ItZT5JswbW7Sg+1Xr15RgY2NdZqQM0sp4iltbYlsdf327QfyyjNQhfn5+WvXri0sLMgvXYv1hxhPlBFFSH15MoWYMBdZbw0tWjoSgh1yf/iy1IyS8ni2ET5KO9Fiu00Qbm9vd0qOy1hvcnwKd+dsJT2VABHrCPbJ8JQ5ohj+kqR37969fPlyZWUl7HpJKWqf7KLIZBr4kH6P+72+vEA3+A3qwWmQ5tKpaqEG2izgtCIuGqowgAo35WY06Z8ylI/+tVkKUk9az7bqtR+Ielc4jT1Dp8wnnRnqpKS6JJozM3MH+1MrK28owIcPHywjqKPFnFpVR3IZElrklPge68+tXKHjQCSX+axqq2srdICXoAxUYmlpiW7wGORba1K2zBF5SjntoIMcWHahUHcqy6jst2gvjYpyF21dagVIek9oj0F4dS7HytApr4swfbTHHiNbb9++ffdu9cP79zShxBgHhsG0RSJqfku1eEpSkpljvynWCvMptWIAIHDaPyCgWn7//j01SGW4efMmxSDiVMivR1LQs/EUcb9VF201iBKyntU0q9yvS4UJ51ngVU1d+sxYGTplMZNPblJ0GG8yurr64dXLlQ/v10Lqp6bIK4EnY+4K/imL0CVVKFWDtFVyX/WqsEQ4rYJi2qMihUhZz6doWlG2CS6Io6AYy8vLMhyCCnoxUk8R10WOarJr7YKN5qgJQkkmscgKfj2iEdUqqK5mZqwMnfI9ZYWcEUqmmlD63dmxjja9uxdD6r29CPRJFcFjeSlDJfq5gEbsTu1My9l43i0yGn5ndXV1hvWfDieQIqvBohTb6+vr7s7Nz02XqVh3TVi5KwQCR1sZ4lKbGqcAwq3FkujD4qLRSAxIQKuyJAP4syA8FezLVzgeQEf08kkhUGdxYWFza/Pdu/c5RDY8IPnT0wuTB1NiDi2kQBNA4sioe0QiMW5Jyl1EUH8iRXmJjQ7XLw/u7Bujhzz7P6Z/ootoymxRKcumMi+4apW6zqTbyJT+Y4Tg8eJtJq8vL9+5c9sfDdnaiukvN83qFh1uPXwF/7m6noFwSIxiiGk7haBNRgytgBSFkE8chPWdnHz+8rURgrHy+vpGBPQzc6ywiGRqcjZkmUZ5JMVPPuW3CGMRyBDmVuaElEVlvkPlojwussrk1OxkABCapiSqgFTfFKoUgU15abdSgNSJohdulYa0XPA42DuY2NuJYffO7rs1w/OVd/fu3rt95/b1aze3d7Y3Nza5No/EJHGBBGWk6LCsh5TGLvPP1VWGttyGHJN+QQI+l9hZ2LMv7hehCLMJknDcAPn169fra2viE5UFGH63togK3WmJZkuItSbe0FZ2UAlPEa+WmFeFhzL5yKECuliqx4LAx+JSzWVb6D/eKZrhMlQk1eTQvaj/sRlwb2xsxcpgLA7u3LlzB0ZLS9fkOQdBX1lSoRLT9pqcbOtwu5cpf6WVQTxDB0TkJJvoSqEZmYowExbSbwVNEheRoY9qU/wJeQnpG7UExanpSejzdRuWBtfXP//881u3bhU8dgxLWqQoNiL8ykT4k0ufrq4yYC3JlkgGKScZRdYjWjE9SkOIyLNnz968eZMTNeRDwE15PBJ6Q3NoQgwERi+J/0rwE6vplAGOcJChD7DjJRLBwLG1UD16OF4A4qurDOkAkuvUQIYckPWdEiPxA0Tk+fPnplCVG2girkxqjvoyKhOWfZH4yKWImALsQOHggCsQBMbk1cxMztsyDXRDOaNwxisbI4fzpwG+6sqA64iUakAsBPq7Ozsrb2NXBTVQYjbS3dQWvyrnLzFqjVIJ1ai5hxgQH0xwC4m7X3mkgLXfjBtpeyJ7ZMii6PKmq6sMeErWJVwn7i4ZQkPk19aU31lCeE8sOAQxA0GR0ohW9dsa0tKI0ZKQmF2yjaQ9z+si4ecf0ulZ5HaXVsQtf6Om7Rdjx5VWhlSHJJyxstHkmzevX71e2duPrT6kgSgc3nbqUlKewRINCacyiYajFSlN8gL8mkVpiBRN34UXOqQmJII3btwQNZlfcuvjPNTFpGxEnroSyjA7G3vsMiJi4DEb1y3UGilYaeIYNjbWGEVTRu/fv7P6ZOMPCcj6xIVM4GZeHs5ohzKE4RyxFBuo2HpLLAVwg5/Wm9nWQkwbGC9Bn0tM/4BwxYfG3CzqeQT1ioZcNn9xJZTB7DmJNxVEoIsE7GMqCbBMTO5NLb548drEkR0NdirsT1CVkZPvfqkjPYkdJQbTJg+4Bf5hbnqO20wvmq5DhX71N1TtXAllwMLkMS4yackAJdyFFWUOgVvY3Nwo4cHUmQvFQ8W3eoBBG+MEJoMyGEGhG/+wuLSAVjpUXilDetd6oBhYq1dCGUo80wqIDQYQm0pgtpHy06dPaQIlyZBAhBBb7C6p5fuklGXwQ/TJvalVg6jZmdl79+/SB2PuNB9pTSqb8sk2R6jClVAGQT8nkP5BHqdFxvlWGpbTBIXuYps8RbiyQRIKpD4giAx7IXo8mNz//OEDG7TYlNSHrDZCUt4hqFdCGZIWuCuJg60ov1mxpPbGWzM25Njhb5cOrVDNXGooQzuU6pCIl6laBkIlYoyF+fWNdZ7TcIvntB7HVNAH5VL628uE+6VShiLEFg0+DgwKq6yjxeqSFwNUWN/YeP36zYvnzzkHC2pu7e3GMGFuds5dl6ZOR28VrU8iWUhX4kkkiBnkCZZifW39+fNnk5MPkau18tCn7oatmcujDEQZq/h5G/TTgAmHQgdm5oRI7JkKq3yCpYTXb9c3ticmbTSY29mO7XfxBo23mcvyszcIYtPRZU9nhIJTucbml4WIvdtT3tbYXf2w9mrmNQW5e/fuwvyCsrAaBxPesEBqldEQweTj8gDZR5KAl0cZivSS50hEX8rZD0HPzOz8zs7u6uqaiSPKYArVe/YqbJtydbaFpYKJA3kcNAF7FfYsn7WkXMLDj7tMXJpA8kbQwf7uypt3uzu2JU7du3eP0eE+rWET+nykvGMx8tMOl0cZ2CQDPipRLR4Td67e0Hliespb9S9evDA9YsxgdOgWnSnca5nINifPsJiX3VGchR8LH2ODyRgnmH1GQ/S8ffu28QP6ybM4KlAP9JcvlyPpFlDg8igDZHCFoFtfM0OKT2Jc2/a393Zev3xlwxFNUF40JLYuU4Zg8zh9mgKxfUtia5gSCek8lDt581aWUJiSGSvDp2laew3CTdZxhKxjkksrztaPnj1/Tg3K2CDOVsGwjHFrB+gydBDnfXhvww4O2NAH9ERkKiFesiSX6zbpE5Lmhm0jivel8gxYQsppBKPFRbh882bl2dPn3tbEHqyiBqkn7tKKzI8o5xoCe3LCHi4/jvxIO4Kq9IFxQU+HOFEMxER2KbzupCF4zFuMYrpMytCSddvqmKuiCfF2juho36BhqnUOSjp0jMSt/B1FtjUHc5xSgFgxPKAMaUTQljKYjVAIEksQqqQmjK5bgMhlUobWJjPizomzXkUTHHvKpzvMK04dTTOGlyoE8mWdtTnBGsmevOw6bd4IxUg8ipWpJE51x8lRSJ2vfMTwrAygxaij+2bcqCpDBjmYQb4lnOCmcahMa0x5Y+vXX3+10mzgYNYPO1VQmRrIkEmP+FUykvLZLNCIxO6LK9ObmkBSYgLpzp1FFufnn39GVecJoDy48KWcpB8gIi+mIHg6avlmAe+6t1GdTskIlaFCa846/TV+KLfpSGhkqOeWlPyoCDNWgIoUXWVQMpfSKgOC5qkAqC1RCeygApb0U+49Qjf8ujUSZB9Vz4DcxQmErEv4iujsPVv122+/eWlTIU6wTcG8UZ3r60pcm67M3JhNQmfWB/GZf4drhNCX/5L+hQWtSQt1mgaxy/5G1TOgMnIjPRIzSNRA3najfDlBBh3cUsUMR5c0GVfvjgIY4fAEoWn4h9jbEuzQhHK/qQ/dtTig2qMqKEjM+fLUJD5dhC/l0ATpcICEqhgz7BZpQLzvsVuuAKlJvDG0X5R/8eKlzb+UQcIXDEp9kO+xr2YeH9UwCXUyDPWL4vkmCn6sr6+Z8OANFBa/wT6N46RaZImIo7BE9Mm9yVaDNd/fWlycpx7pEHAhjNGIKMOoegbUJ/HYgBk0QdhKEwwYeAmcQH3HH7llCMd7jOeM6tAGk63oT9bDFZfdGZji5QenM7uFOyMXoA67MhBr6SQvjdPigN8Z00cHTjnyFrMzgQ0TrAuFTcrpPabLRoI41X1Y1AEmp/3F8b4n/2BtLgY6HqHYLjPkI3M5bVm0PSq4dfLxc0pO0vP8En2f/HOgDg4YmXklxODAEjVQ1tYdVvnWVx7t/DKjAa7YEh/nhld4Z1dVe+f33OjdYQ+TKk1IaUCbLDFqpgwioA9r60+fvfBOv4/Z+CDH9vbWzl5Mqtqk7RFDODsqh+RE1CIOIdMnUkrG8WLn3hNo/4VKQCl0Io64mZuJ/SYmCSC7uLjktBvjJePV48+fdx324rz7h+6dVXPaxvg9Ojw5M7cAyM3tsoYzNft2ZfXa0vvZGTti5kyz8su+lOJobyf4azWX5HCm3UOnYLTr1/jvsHsGAi1VBEhNcI3ILKYAyaZiYkE41LHoFjJTPMnHpw49XrUzEhl4iPEc08K5CTngJSC5eXP5j3/84+9+97vPPvsMFnE3FrYGgZAoNLsNCud++Nj3Ak5nUJlZArPvzpnmCNEfhUNHht0z4DSCp3znb1xGSezTLq+tvZahDGpKGTMMQjRq6TMn8iFIDXxF4dGjR1988cWDBw+QAsrK7Ynw6XV9l8nMWmDoqlGA4YIhHPBu3bppm4agTkmJs7pqaQCVh10ZGPhjmpBEMnKz9UjKYVz6gUpbBkDIfncJlxL/bEKQYN2//+Cbb76mBtSD8aXzn3/+wPFnPIcVxmILhmKVNxhRXLGvPzJVVFf4WpZ9Yl9Gv4nU5/aGXRkqdJESoaViZuJoRNNHLJDZbjNIDKeaRESF6pGRzkDERwy5QF9e+7Ykh9sJOeiGhBqM7sOHn5fPaq2V146HAt1wzmVmSfyGQfZ4e20aZGX1c6wMvfGIfGO8lM2gteRdwxev3hgwVG2bZlF+aTQBXnCh14++/fb7H3747N49pxZtb22zunFMqvUsEzj7B969ZHp9i+3lq1dtClUkGVgGq3DN5m4bJc20MlVlqSFwGhhMnXU87ANoWBRdaP0UXQih/+XJE0WsoyEmt2DCW82YcxyddNKHJZKwY/th+pf/8ecffvz+/v27s3POLtja3vU+jYccYjAxPTu1tb3hU1S/+933f/qPP965cxPuoT2DTkyXMTSmAAQKhtFGNZRBGitDT8zBXURE02yF0AuOScy/f/7ZrVhNKxXcTeozSD31V/PDEU3HxsH4Y8iLxYythKZLKwS5O6b0u++++8///F8//PCdMagPDm5tUwNvX/huYsytxspJuIh4lg7cvXvnf/7n/7p//74Hc7SKRNlg+tXooJiJvIw6tamNrg3y9KgvyTIoZfDutOIECQmCCsWNq1AzybtrfrigOQZ7xdQkn0tENBp7//5DKolLhVnuWZljLQzfZUxBkgzyaezrl2AQYmKR+ry8vCzyefz48aNHj0uESIHUoS05dxlaFIsPE6SNm9jb3NrQwq2by3/60x+9VJDtoIM2kyxJIuUukRFBkE6+bspkFxTPlJc9MgyaCcDsNMFQIevUDUnn7Q/7AJqIIBmaoqBYyO5ICwvF4dbOzs6J2GlNsmhyLOQyRD9RI7VQgyAZNUT+sqRbN29B1reZD7VchUBHMkWqw0maaHLIPs+ZJ+IwGaYWNOJjK2UCKvY1SohpB4V1tJp8A+Dasl784P4+f26e49o1p/E58TY+HAoGrx9CDTzGF4dwHHB22JWBYcNUzEZiRDSNaMJOhhsYMOW67x7YEozIfQ5ytCFPcP2S5q+//ppb4BxICSEuAtNpN+hz795dB6J6qeC///u/c9I523dLqhoKIGhldd3fTOkoemh3QBmMHO7epd6Oag1rQF94KiBBU6a//ffS2rArA2JlIkNUwgSFqNrUdS84D+pZImKFwNl+AKhCI7Ii79gVoRFNYNqhmQNo2026AjXVTLBEnZye/eTJEyaZmpE5bSJjdhq2u9aJBnhGyKqbCFz1buTw4cOaL8wzATXqYVfEOq3ysCtDsTGtz6hxC2lET0NkFMqKMhQzHYENiZcnH48ePXr48KHtFSbH6IYgW+Hi4sLO7lrnDnBjczMOjLUfaM4m6kX2QtDFP/gARS5gUxU0ohLGGD513dokVA/ZCtc03TqmjT5Qy/n52Rs3brEH5oWBUU/PPbU6AsqAlMwbXpZ5iXjVMJz+6EVJEUPvHYQcSKkSuVDw/fc/3LixrJAmJLLwDRw7RpIZ3tnenrs2hzh0jPRrwejDOZDOcVlf99mRFaYk2yej9jj2JDXnPEwPwjFAlu55ETcwxTvKsLS0uLx804Ap6DBkAVIiNOzKAErHMTB4yGf0LMYIfltvHgVlSBjbwbNp0YPd/V3vHpkkhZSgxersjz/+7vbtO7AjqcTIejqtgGaMgGPzYUdJF/nxBGEkn1P8w2zS6i9/+bMv+b54+eLZ02eWwOiJIawhmOlVTRvMh8oVzeuopw4qaVLbJUaK9g0SaKZzWqWiIaHnGUGl2nTQZENVhkcZ8CbFBomYkzJ/GBMOB3Ozi3OzC29Xnm1u7M3OLG1tcg5L22VZpyEind1NEaVTbhNuEpkGPuMTMre7t7V/sOPgoe3t+FzQ4+++/fHH39++fXN3V/n+TJy0Qka3y3e0Jubmp7sb5E7uWY9j8efinW+L9FtmMoH3YfXtzOzk118//OqrB07kf/7suekmMTy1sf1vZnbBewg722K2mLUrbyAcRifUuWLM4Rtn5h3YHQhEIvF0PvM03DBaMk9gWcV+1vm5Jc5qNj4qNixpeJThdIrkSXhcP4PHruAWjrXF6/RHhqGU1Wf9CszFDBaYYvw6PVkChqUfSjLSDVNd5xHIpBAY6YhuLN9Yvr78+PFjQkklHCPiiH6bXmdn5tuBWV3EwzVM5O44QGZCNy7r6uyi7Q7jOOYQLrEC7RIF8+PkaOpy+JWhwBlqAF7imMklqTRfZNbIGrMZJNjViot+c7VB15wV0pUIas6M0/fff29QIeZULphRMyscIn4/swgCd64AH5OnLnXazz56bmuoPUNGlsQF4aRKbrA2pu6GJWV0dwSaMmgkfMLloHDKmRlOu+x+//sfHz16ZFwrUIFRSsaRh/t3cVgHtJpja5SkIXTSDg6eQWEKJe9bfR29fyC0WtIFZKHMOeTZrPotuHc3fdx3wA43OFyqeRiydh5DYzpCkknP0L41vP8G0GWWPS0ic0gEyd8333wjPiKFQFdCGkrNU9SpL7ghmjAsVZE4plsw66pr7Zt7NYsFBkGUVLed1hEFsOYAquRjxkt9wbQvjQy1MiAZJiXtsMpliBh7O0Ru4RNcADzJAzYRFJb84Q9/ME4gE8rphihFRvpEKxe9jWicQKpcyHvZ1eJSauvGPGLmlKuNgxft59PP6TpFnzKYVvKAfqVPP9lgjaFWBnQowh9hN/6hXdpRlw2S6NNdFaaWiZdi4l0WCQ9gk99Wwb766qvf//73t27dpgmstUYpCbEgIlD7dB891NC+sbtfUGWnCRXwlAtaUkxzv1AP/Zz5KJnXb6IpUuInC33qMgFnwvGpG8MyZsAevEEjQXYIkRPkp+MTGDaoMp+4VSkA/qEs/fgUarXfDyBnfOivWiKIz3kwgQwtmHkyGTh99tk90ZExK+dg2AApyEpqyqsJ0EC4hqRZXYAqkx5cZndoKE8T1EllcHliavUCMDEKJ+194AuG5J1hNPcozyjUt/p3AdAHL1KHgcYYJAvJaGfMAFprQ0pCw7RUBubwUwPMFwGy0YiumjoUncfG/XzTwHuPjL43lY2YHz9+JDonmRQAgtABM3TEMFoIfGtL+tK+fiWZFMos1KfT7zJoARVI+gRF6sPHX90mW9M5iJTwkTJwkn3qsT/NDJcyFDmJBUvcwhuW4/1758u/w0i2hGVlaxWmNe0PAXpoBZDYaduB1d/ZGUtp4h+bruNdApGA6Uq7UP/yl78IkPDe3bl5n5o+0l+tanCkpzMuOKcz7vS5GOIYig5Y6RcTkS51o8899dDcsIRJRUrCbpUUy/ho56UQ0u+X9RJ23759y9QcIpK2HlDu46O+MD19MLm3vhGTpKws++cT4vT1+vIyTfj2m2+uX1+yEry45CSbA4oMuz52f+GmkspUsUoXbqqzB4Oz+kIlv5QBQ8OCWJocpg/ADZVnCMea7EmvbbAlnBVveIeBVty8ecvOMxREzc54UG8tClzU8sDuBoxm+B0gx/BdX77+ww/e4//+7r27O7s7tuXQbd7OrXoB6qb1Sg0y49FaFRVDUwP9cg485xB6hqFShmBm8iYINzEp6vCvX2f/27LqFnPCRaBsN3yvra79U/H6svc26ez01taGw10A+Kc//fH77x8rtG5u37K/jY01Km2EAIXaoLlIw5UmXOThbp7J0NcTMjrlGWL03H4RtJuWaqw7HFLVRhCZmA3ONAp8bzWSqxg8UAabLnPJZkhiTepqyxRILRjQYhnvJFhTe/ToW0qrhAcDKkWBl9ed0zgGaoNOYWradqcxfUi2IogMZYiFyP0hcpUIMixjhhSPwhi0En+E15YjQzlCQDtRk2Eoag7JABrMpoe4B44KeA7M+o//+A/DZRrskj7I0F5+zNAfJmELh8SnFXKjdmpFEr/WX9YgtS7ZKkYS96LeKdOwtcJxbuND5BlYq7IwGjuPiQ7asanhG8oOM5cQyfVUd89FqqebbCaiHPszlNkyQcQJeHnR5lNm1UylA7Hn5oCNr95M+NOf/uTkO4qaQxr8BidNpr1KYDE8mrC/53WzSe9L//rL09mZ2EWd1KbdR/8Egf66CO1UdQ7Gyb+9gylf45503tPMnMzm1u765raDu21ETs5SEhls5z/99cTCiz48RJ4BIVCExEyV905IknTYdJX8YMgEqNu3bnHuFoyQmg4Qelxb3/zgtV5bUDkEb+Kz/RTDPguiX/E4Re2iDKrvuRC+nR1bRerr4mPLKev68hccjmlW/nNraeE6s6ceYNQp4VvkPz7ZYG54lAH+yNGac0jSGIOWELNFnUKqVrArimqQSgEAKcdFw/fkHGNPe8n9w4f3bYe2wIzBgiJA8gZ+B8XRTsgCvLA0YtC20iZSnTx74ToIokc01IJf9HRMwL07N8IdlKSwsDguYsjYeBoeZUCH1pvBSQzbMdhapyqwH4U6QZtGhOwUswQAYNi8QNCNB7xVLGPP53fff/v111/QWKz1mz6Bf5BvnJWddxg2mGTSZ4k+uJRIaudNXKwmMma4KCOMfP/hQ6z6lddOk8X0gYZerPHenxoWZcAMhMCasFfsx+T+zHx8V/jlS6/t2uETSZ1EWL5hz6BrcRGJN4jXuwGxLahffeWYo/tzC9Mf3n+wTZ8m0BAQprmtoO2dSX1vIWGDjhTELOkwhfve47EGAYBKMae0sTG/GPtqqWVC4lcaCPWGRRkQC1NQIadbgh7lcCEzk9SkjOrCLQyERsnIFHFq4C1er6p5T4307+7tbH9ofewVyGQLhEYUKh9j/1BdAhK0gCSCTE9SVUl95C38jOioMDrUT8nu7s4H36Scv5UUUyKBoT4wzufC8ChDzMqD1eERCMJFeEcds4SRppiIFjK5i0yZOR+rvt/VKatPDcwXWUzgJQS6EXGXRTdHNgKsuLQQrIFA2BXKgMwFnITZrJ3HawVb4zkk0OPhjnjaW7dvAEDUJBVtaXmqrjDqS+VhUQYEktCCzPs1RbOzvfPuve9GbiqHKv5VDAuB6wv2pzViEIdhZCNFhIrqzpFeRsmUQXK5uhonsng3R7k9eMlgYHP38pjq2QT4tB4GXwZIZ9K8fRtYNA8nhuo0+xUpcacognQZs3Ee9CXvNkypYVEG0p4CVHY+z/oaz6t3r3/++d+GrWSskC4srmEfArmsSRmKKk5YQSjsCfNJK2yIsqjsJTVS7stRecvRdYBx6hdYEjzlyWZOX8blsKb8UOKtf/3rXzCqQpS65S+4V8hSzH/QxhVjZ2Oy9UrKoFwSvtFVl+43TMBhUQacEBExVGbwSb9P2f7221OKgTp1M+kwxfXl7GsbjfRrh6xbDx8+/MPv//Dwi4cGe+5KWT/5Wi6P8yxvHW522PLAJnCgykwI6YC0t8zuCjfLZ3NbZArf3Lwm6HxYlAHyOd0ss76x/vpVfGgeq4qpaFCWnEI64xzSAyrBPX3+4MHvfvwdfTDPa7Q3iLnvWnBPHYghz6HpVKSupbPzGo1VP+uUOVpInWxbm/Meq+nesCgDrog6DFIFkS9evnr77h2GCZwYrCaNlt5y/6lOzZz64rLhsljW6MWg+VRzNSCT2qs8IDg/7BedUwp7bbH755HOd4hil5KDYudau0I0A6TuG+vDE8OiDGXMEAtV3mt7/vS5oYJ4qWhIEKcPiHbYhBeXd6zx+TbUPeMEXzwor9b5znQA02Ebw1+NE4AOe+w3B/1gHoRnCEvHOfBRCYDLQWlCADAknEtOOPbQ91LXN9eLP4iJcNRpEkLk8FHN+fk5X5X1zVlzu2trvj9r20W6BcCc/GsSwL70FQKHsBV5k8jNKwMHABIKKaUONBwIHKPm8ChDnPf29OlvPmxsQ5LZJKzCHuPnYxDXeokZulxaupanvunLKpuS3J9Xa9dNNk4KKYC4FJFTMVIfCgxx41BAWK8xwt+Aoz2ab5IIJ/saQJgE95Q5QgYg/DA2cITKs+dv19b3dnYtMnDd9vpOWCCNALL3MOnMmdiTnDaduutwlzt37oBNLItV4JQB5EnyjWIJ6beeKQo1ZLh2bbm8W+uQm5hHdlSMGc5ircNvUAlLPn7Lm8odWiV61mFNxNOVfY0zLE7RwNjDb35J4UAIOwAGF+cYFE/8ZYyiVtc2Xr9xCgbq2/LplYbwCL4hEJ6hLsoctn8V8Z1qMok3dqdmMB2LawsLl0YT4Bl2P6bprN7EKiEuwA4Xyng6XscrdWI+Q6YllmE0ThoOhaem7hgGDBMnlTDIDEoZBhAmMbRJ/QyE8MMMkrlUr9XjR669oEixTKfSusZC/RJ9YwZ9YEnYSdJRUo29Nt10nG1OJXCBN4BgoikD/RLAt5YglMRrymx9F5pwEWT0e5HH+v3MADwDcpeDkVLGeOe9d+/feb/ZZiTswRg3FCJQ8KJZj6nTxQVvs8Wn1+Ub7r3fzD2zPdbfeWcQNaWUr7YVady3Maz47TDtFe5Bh9q885kgDuLGYJQhZw/IvYzNz29X3opcZ32sprwGkMYJM1zihNQYZQQHC84/itO+Wv0CJjWzMRia6QhWosHsC6qJY9Lbkk8Fgw2TXsxsR0tV8eXMDEAZEBLp0wPQBGci+bwSg5SBI+HDG5qQSb5JwuvOcGFhofU6GxiUZGoSjLr7ipnriQM7grhi7reyPpXmJ/GBoaTEi90NA+qGv6b2B6AMGGAeAz6EzDmqAiSTqvPzzpyLpNAtHPJbXdaE/Mlm9R5vN5dzXeWBIZEMvycrj2wJyd73WuHNW8sLi3PbO/YFm6rYteWkjJkDLfhiE8SxoOzZaNQkDYqwg1EGJ1WjsuGyl4YFSDGfMDe7tm7pNxZfcuRAFjmQBuiiI522Ojo4oAkAyMtQhUuoDDk3MGWqQOKcGSP4RtQ6SUnQ38FnkZDFrbX1je3y+UOEUi1/P1KsRbie/sk2q8Z7aquHhwegDObsOQC0tt7sk92AF5c4U6oMGMIAIw096QGpjh7F2dydSiFtjMnxiRO/7t29SwESAKIgT287anFkKoVMC0q9q/3jjz/+4x//wAXCXQzCgTf4Hj165NtCy8vXbYr561//uvLP/2sOFh1QA5WwT8YbuUhUCfFFUc8oYJJB1K9GNG7ABhQrIZWBumjjXT83AGVAQZxgkCzrJgcQt2vAe34AGKScGhhHckGmdzUpPxVfYbvcUYElBQSPCdabN69/+eVDPtgBns45+Prrb7zb/cUXD8pXMsy6kk6nH6xNTTMWMfGKXJwJrvVDE1osLHtnIzxOJ4wpJdMzg7tvYDDKwCSzx4bO0JZQdnJipmEBxF22h3VMVcRmbKClwqISDnRPyxF5giiTvKD55OS1a9e9yMrM59Gdtujar+70f9xhIFDj1q2bjoSam19UwpMrFENKWugLutrRJmD8Uk4gDdAPD0AZCsJOro7RQlji8L8+gznd1KcCWkwEBuvIQcmkweOjzSNhSV/YPLSNkD87IAgz+Uv/4DhA+lAuYyXOO1XkE1MsxHMUnz/8an5h6aeffvrb3/7GfyIXlsGuL/oADJrAJFXKYHBfWm6P4hqk40CUwUtkkaCJsmQyl3l3u9nU0juJjFuM4b3SSQ5MaiVIrKAwoC9s7h3CWlso7sEu7oj78YAJKAdhziAF02DGVdTuMH0jh7l5n5iYu3PnnS0qqERqKUP+9gwhvYqIy8ufLFFxy1o2icLtDEAZBjNjyCkzycbQqInohmc9k7XrBrCTR2b5/vznPz969IgEFM+w4Bs8l10ZDE8NgvM1fJ4gToOlD+iBJrs7MXUxO2uQ4Jt6Maz68MHJd6Eh3Dh5VRN9+hXM2AuiU55B0iw1kwaiCbAeiGc4MFrY2tp0Ip35Cp9Cs4OyefmLHTnTMxTSgRdWOdin9Y2NYP/B/tTQvObRtYp38ABSOxqDNAtHnJ+MDuTPaoL/bESambO8YChl8WHfKgSpd4jbteVF3yJyrjiS6YE+eKqDrj5RJT3S9s4GzUR/Sxpl+yBlM313CT0Df8cLB/kKev4RI23t7oTImZozaTkzPS9QshepPuyj/9Zf0Dj/ppx7b+YoTikztzv37TdffXb39t7udsB0yZOdudNl0mySPoQ3iC8Oha0nhByj3RhKCDxmWX+jOV4Ln5uZWr6+ZNLBW5r27nlPvE3SKhP1FXZJPMsaC9tbnMPO1CQVpQlCp/xMWWnZT6QQpC5b7rp6rZ6hQqDgk9I+Obn2wZIC1zy7tckjo3X5MPje1iSS15NOfZ0hllb3Judn5wjE1ubGtaWFG8uYHap7uRPDZIQMyxB3Uk3IvNJUrjkLHInLqRBHr4WiBnuxs2Xe2RbGudnpqXU7ixd5Ei0cC26DcF0JLB+lmZnpOTHS2qoPW8U7qKFjes39US3OHRWk2thzDJ/a+mk3DM+t7S0+UaZMXaMqlYi3CNpVmvsXMyRKIU4QJd+4cVNM3K9ouDk0uu8pFL5F78PSeyzfsgsIglkCGCSaMQ81M9udyJ8LHvIbqmnfYN1LjpwCfeCszn2orptNKwM8TM8l/mWoVLaCYc0ANv9gQUhESr8BYn498SooQ7fSVJQhtm+gUtoLRqTbRk6trx0hGUkgFUaS1ICy9avxU3s8p3AAymD5sxI4JM18yuU5gPb9VjK4DBzD8mnfABGzB8WJviPYrwYRJOljssHcE39uwNcXfiE6P8AbUAbBgqUnc6wRJhR29Av+ztsZgDIkcClzsIZ5IN8nS9M55tHpxMGmgUvZgIQZbB59KOWdN3MlaiZN0CcmwcsicV+olM4lxgkl2QpgkTvX9QZC1gEoQ8zflLnq1AdWoS+UvQD5bDkziY4HABC54YrZXr9j53CMmHiEJhgXo4UyAXWswoUvxQVlc4ehc4iBLVLVjrULt3nhBwegDILCShlkpAtD39uD8TkFBwn7bjkYeAatWVfCm96avYRPow9lCP8dmzBixa1fXCvNWgQ0oRLKQBOsxtK9gRBxAL3yiqLPtrGZZphzPN0w/thA7jnllZW3mQdAH9ncMDr1dYdKovmkjJVrtLIvo+xu7MMYmhikGSIDRs/G6C9K4p+tiOugaF2oX30IVi03rQxIyfrmNmAYuoyQke+tIGouEx4JU9fX1vziStq/5vofqZ7QB7/Ia2Fa7JuoZmd7xAPZC+1bAYLJJTugGKkcWJMQw8miEj328+nHB6AMy8s3crMqykI0pLCEpJ8Gtq81OH0k5qCdzdEm/aACtr4i1u/GkkdsFuNNHURJWdLHfshAiEEZmuviXUlKynAi7KR86ETNqWllgI4ZGyknMdP9wXMQmyDCIFnyQ3mmqOyKCX7UTPDRax5NQlTjgxW2rKY779vsZ4p49pDE14F9gZhSIrEYo6TZaoBwA1AGNkbQSR9M1RUtCEtTu9afTssYF66trplgxYmBQXE6bENUijishtGtz1ZkSJuC20cQK03ABWqQm+rbg8mGLNQAlCHHSQ4zzXnMcA6D0oXif22MMS7E1wwA+sjgS9NUCujKyooNfTHG67fh0H4mLUsZkuWaQ/FJ8fqb8rrpOQBlIHxmk7xSQxlyHpMbtg5ZN6on2g9vBACEpp9oLQY4UWdcEBRgJljrMqe0FyvGfX05M9Ug5o5KEjJlyCBS8g2n3NRdGFQ7L5oXwRgMwS33AnndNkkQQ6XakT3SQfFG0blxdOF3yR+pcmkvijxHOF7FPORbwpr4J/awxp+NEdy2P8f32FD2YdWO1YPpGadXxPto+fCx3+5JFg0kJH6j98n4eJJ2LDhsrm8yVTbvceGmWrpvvLsnau/gJDj03hYU/sGJbvbGIQGrwzOiycnK9ZUE0yeste05U86CTzqHYEuzYNSH4Fktw88eAJ7YUjKTX+QvzYEpfx7AX+ysdlb81NQ8yZyYsMt9/tffXq+srO3tT09OzzlxcmcvNlkzJIf+yvL0Wb2eWQ4AM4r+WEmVwk/7hzwUX+RbMeum3+dmF0B6Zht9ujGA1VZqYAANacf1PH/+HNoS5UgL3Se8OmqG3NOI1lxJWsuOnhvtSlCOMVIJzcMOl5MBihGInRETk3v7sRbPMBHTOHxydn7h5atXz549RSG7uL0EZ6sl412sSY2k0L71uLIY19DHqgfgGcqQaIoTtNRogsIlZfC2Ve2KfxrjUhe895UBwqV3C2gAZW6QV0D5kPriCUleyL3XFby24J2FOIO19a6Vr9r5ohJmRenMTM7w5LOnUbTXsqKfrRhBX+SEi+i10c6eH4AyGD2bsfbtNr/FNpd9L4UxncFcY626rV2NoHfTdMha4Tz/LKUa+DVEZvipSmksrJNCm+d+/vlnRtowT2Usk+mmt67rpn7qulIGfGmANQMIk6DqNQ6WBpG8iR9WqmwT8kJ4w84Bffes9oHAaw0lAakBonctHX19gCYYJhM1ZC9ybyozTnR0aX5PiTcR2eP19Y3371fX11afv3xlUtUOGo8IcTkHnjw3FPUVro+NYYUL3QHG8NJlyUf0VmtqWhkQnSYgrh0Q5WWR1j6t5kVQ6CxAsLdgdzKOQDaSFjJUsUGtRB9840HusDwUIOcu2eA3b94Jh6wkbMVrudvmODY2tuiEU2VmvPBZAiT1aULdcQvp1wsFKHyJk53kKUg7cKuLfs0pA5QgwcO+ePFcgARbJbANvsgZy9aF45ntlp7391Dbu1slAEidBMyZz1yKGwVBkwcxkZqMECC9fPni73//Oye5u23obD7HbFKMktmsufkF2sJI+wiqZy0PV3PiddBDFxLA9C6ji8KXyAKsvlSjMkCAm6PTaErondxI3n766SefPU/Vh5VMGdEN4ITNFHgGz2FB1ncEAD7mBtbgwyVXhti77nDTODSp4ItTSlLIps2ozqX8hSxKJLBEU2HICr8Et3HOVX1U0mnKBhekxwJF+al5c3O9A+jEIKgcZ38ccAjO0huShV5UpqLmkfxa+acMplGS+ikWl/g3pK1tcXPpF+4SD+lWmK/iE1AghT4lksLkZdSs016AId0COMCgd90FzHW6BR3VqAwQgBI9YFccTbWxvv7s2TMyF7ZmCBLaAs9HUtAaVOnEULxWNg8B3gEClPGlCJx8TB4Qu7D358JXUabKnFu915tA4otS8VrhdK9NfuL5GsOkQuJwtTLobij24sXLInM1dvoJdA/dZgHLa0WhEiA0pkd5cyZp/w5VvJxZfJHYd5IthV2YdXDY+erQECkAhiM6A1VyRB6Qo+sZwsRKEIMJzTZ9ZA4beg1RtINuBEXGgmIDKvrvf//7v/7rvwRy6Zo7eHpcpUYK4IghO2mx1b96L7LG/krT9YVJoQaUQS/EqxzkvCojFe2oG69Pt18tObOIiG7C9/nzZ5QWhJ9+ePRrFEuFO8EmiSWGe4zthiMBD1NMXln6wKB0FHWDViPjSVV6BrR+9/bd6uqHxKrOoVd35AKhVT+BaYzNYuD4cS6vu4ZGrTZkqQEJwwtEkFjiGM4NDSJAogl37tz1CyjgNRBT1KgMheKtiWHhh1lq+MBqSAJTsyjlYMPYDeZbGcTCGTZWmg5NdkVILSUiQyMnfQAERuEUSgojMGlJK/YOD9QxFFoX5Kz7sJt8ws2bNyxykJn02HVPJ9WoDLEV92B2f2/6w/v17Thwu1pMgLbhUfWnnr8YMNWUqp7szK/+rGdOzczZirx3YH51cXPrYGd35v3qDkbs7/oisi1rCzZoHuxPz88vlg9XV7Rqwz+5F+2NYLLOaLUdXvZpO0nNofA2pL54/tqX6csEI0zTSfit11uEd2L393d296jifnwfYNJnIg5u37n55VcPF5fmt7Y3Fc7OT69vrFoarZXYFYNr6CVij2iWAcrNPzX0cfEm0y56npnMDcnG97mR1uYDTsxuTc46J5ca8NEXx6T7J+EF6zz0Nt01v+2y+5Z6faJ8XS58AlcAJE4AXyxveys4AVNCYfiualmw1y7Pfr5OZSi9wiTdnIwCCJ8NTNN30D1BAhX5EDRThmfPn7FWeBPv/bQ3pTXAiSaRT2UgZihQMI2X/elD3X7gGI5koXwzpTVuISEob7nj3r273vpC81LSEhuXdQtPjcpQQA/RTxuckneMHAO8BB7bAyq6CgzyIb+1ufnb09/yLQtGy8oDfgim3R0gqHV0DX2JJhA+amBngLnv5i1VOSIoIEFnjLA9z9fRjZuJfooNyksq1EGEY20OxfrXMZgauwwmtNd3UJxk8BRvXr/xCp5JDPwwv0QTUlsag6qBjmAEXx1l+Gc3StkmwxM2ugrEMRsZl6XP1vYnZPctai9CGsmworgDQr+pGHVTpkaDB4EKnyJYNfZ1MTKBEKE9SziS7raNkP7ffvvN+6gK001n8HqxLobzKYinMpBFy462ydAHPGoe2qS8ftHfUIFbsMpWvERr53ZqgpLkVK0Q1imgEZAHkugupRGCVa34dN54oXjoQD6CK2l+6AMzyTlYAU1WWYggNJ23PPw1kynwNUzKzdtUwkJv05C3zGUEqLp2QAS3gOY5C09mwOkW4mNWA7paozLYLQ8TaBAmh6tCDJ4NoNQVR0EIsEwF2r3Zubm2c3iBDVhiQq9dJf5NpGKDZynuqruGK4MW/DoFc3adwNNzl3jBIfz00080QYiIOw2Dh36MpH7pZAZIQe0Y07d8lLyUUDVgRutUhrbRzcMkE8/0D00T/bT+Ur7zTpUP2pdthVYJf/nlVyNpt4p7ixFemzFKsCjqDsfGttPQa5cV+D8qcxbjBXSMmM2e/fLLL+bNWKsym9R+rKl/URckgLTEJkwyVJDP74IHfYsmJAoN6GqNysB2SjkAgk9mGkCpFz6yVKxUzrEIlp48eUJEeDYMA3n6a97bN2xSnpQ3PB3ZFXbon84NtFggyUhF7La95u+tQ3gp96u8q8b7UTkCB9SmCbQxRb+QejBUrRX/luFMSYIqoveDgvW2YdScMsMtcA7OhhA1iSjKS7mt6DakygtyHETA0vLj9YJ10daJOGhTKyiGZlzKUHUbdV+/jg9sBg4D4U5xr6yk0QL9rLSRdx6IpNSpDEVkUJmt5ZGJ1GAo3pUYOaej/U03TBIskRj6QBn4biUaIz38hEwettRV881XxoQ2zPEGDxTgAiN4vX27wk65VEGmedj0KA4CoRkksbTLdGCDAqZOZShGiALku+TpjgdC8a46JRwsE2ixhyCZdhRV8xKFVa05MXdtMOEcKmPWVReNVUZ8guU3gS/7c+NTjgIkePEPSlIZVEi1aQy26CgUddKOIzDQUkRFT2AMShlqnFoOHpQdwtBLflSZRinebWegLaMdHMIjYwbTrDOzU48fPyY5pIc5sxBXYvFZ0VK3zTdcn2CFyraFzMSRVRSJr+YkcIQIAkmmYcCyOwubDqchHhJIiu+N/EDAqdEzQIkyoHJxztC0lNiKuQdC9w47DbBLKvYpxIhbYEodgcumQoeKEC1VmLSqcoeND6QamCWggt9Bhn/7298ESFDAEfGe8BVUkFKnYfBKfzGAQWqJMhRIFQ9mGFajMiD3wSRaby0uzd1/cI8Z+rD6dn5+1ilVu3vbNu46E4rFLR8Xjl2tzFPDzDi1OxaK5Pjb2zPIibkO+rCxvvW3//P/+d7VxMHM3q5XYbj1ORue9/eGAuZAxH7yj7viEzOiZfPVpI+xzM0ugvyf//j5f//176KShYVbBxMLu3u2n8xNTS8cTM44WNtftb+9nYkW+yWYtFEKmMq4JYxjmeFV6AV0r8hb9aMSlBPBT2VN3YU1hknBIMbGzsSpKSMkm3KhvbG54XgiIyV5loBVUMei78TszNY2Kawb34u0H1hMTDju6ddffnWe1t27dw0nnDlXeCYojzBjKBMxNmc/Oz0166xIoZFVBaImORmjxOugbojiRD85Hr2XbZGoh7AKgUAMzLLkkMavQt6ieWGoVxkqETGL/PDhQ8jjBx3IMMPdoIUUKtMQVyqQus0YPBhJY+ri4pKvDnlnGPDNM6xbsMWoSIvsf//7/+/sVEa5kDwsdLdN9VIf05PX4jHt6D0B4HupK+OSmtAOUXvp6uLP1qgMRVbCJ6b5t7DCCcq/fv2SQ2cYpCTN7k6c8Mh/XhyP+p8UL9EHkzDXry9PTn2FffgLkWaFqjs8CRzvu7LyjhpbUjCxVD4rOStI766h3moDI4dbJJ48pBj45VWXFhdv3PSu851811k1J72qk6rSW7ddP12jMoAlUWIVYM450AeFxp/eOSZYFIM+KIlPJYlSB/Vx9A6IBpHUW7Mx//ef/wT1o8ffeGfatNJA2NYByFEFeYnXk38/4RnkrRuiOVGLl54bNMLMIlOShAJPWknvUdCNhw/uLSzOWXFzl5yAOTWhQeg+0rJeZaj6IeyCRRSx1miBZXV1bWXFJrG3SFOiJvyZ3o2vhA1pwr8CZ5wi8WblzW9Pn968dcMWSxgxvUMKdDFGKPzmzWurh4TPbN7W1jZ7TOIahjmtHupJzErZoHr/1q2bC3NTB2EK9xlHRKYJNKRIywAGkPUqA8xhCHlIytAHRCFAt2/fWVq6hj0sFj6JkWJI3R7TNcynDrsj9IQJqyC18ubNL788MStw/fq1Eiw1Gn93CDBdsAPPDu0d/5RXM8qOEhFIrPs2nBCN7Zfahp84kHmFJDCgIRglhZy40TB42V29ygAxKfHnoFFEYmRtbTBm8p4rTZB8Ysw7+MMpUBVXcpGEYuPo1vb2yxevHj50Mvt15cm8wuuYHpHkqwcbywAjpY0sgYHo8wMOGLeqBRwhOn9A4Po3WdoFZkkcvwAjCY5so6Ui50fffOkIjHyVwi1AljgKnE37LsjUOKGbjPFLAXJCjVZI5AmTTKXxDIZNSrJm49aqC16qWubsw6Nz6GzZ9vbuh/d8WogXLkpBzTJdOBDDhoaWdIDB8RZwiH68tffqpZebN91VTm+xglFKaLvDv7faKIMs1EAzBMAvoacP//rXv0TL4HQLYTN2oMa99XbBpxvqFTMqAItGhAJIog4uwo43Kw4fa1RVhy4TMBfjmlPjmzgKxizB7OL3QhybBzwgKxtpwaB3ROYBiNeHD+9JWqpH0dKYCVC1YQh1nUnXaRBlEMzxPJbbJMqgHOmKT2gavKRGQ8pwmPTBtPYSYzqHmemZYjMGQ4LDsJ2bB3hALpEtAAvwNtY3CuQtfUhBVO3cdmq5mcD5JXM6AKRBDtP77v17MsfWgtktFcgcNGoB4txGA8ICHiqBBBhLi0tfffWVeVUGkYoWLQ2PgaRqnttYLTfrHTOcCnL66GQMz3Dt2tLblZn1je352QEM7E6F8PzC5BOO2utGH+y3otLFpMVcE+xSJc5vpI67ZuQ0W5QhlHZtbd2uKoLla7ahACVeBV6IWeMhqd6BlOAFSDmh5FSY28szswFbATvm4outGcwAegAWopIVGZhb0J2bj69NNs+hLiWyNcsRoBaZE3wb+WSki5dwweO2OHbZds/V07iAITOApKhGz9QAVH5LD4rtyaUMTWtDWsAKS0bQrpaHX3wButjDVjxt+ljQipSO1a8erDUzAGUocpMGIGZdbFVaXFr0HW5TILWi2nvjOCTW0A6Zy9Ysom7v7nARUvKS2LUlr/cOu2ghtfEjYPv7ttnyDEpY24A7wicnxJC8wWy2BQN8cJwXRSLk2tx0bJmwjfzHMEYF9kVQlzW7QL5PVQelDC0jilWzsxzDvNVcGCFX4zarK0IKgQhV6EMxYFZyObT4ChZlsJMA+Mqnjx7FVXAqel5nGJxQVcggrJmZtXXbbFsbIvlhLi1krqrUYCYMRGuNGQjxovnTp8/++c9/GtVsbKwX2II6CWFxvQ0C1+5qAMrg8GdYJ/7FMMQ3Ka5dX9zb3pzzpclZtmvPn+m12ANu889pf234m/uXUDGrhIzY+Q34pyYX5xanJqZ5i52tnbXVjfXVDZnJ/SkgK/QHibnpQEt+35HfPesDq5mGE+kyIUGUHIQHcFqkZSyZldfvnz975btcLG+pBmQZ4UcY4PqoBj/m4eSfD+oiyoyh+ySG7snvbG+8ffP6l1+f8AbgSXkAW47/64PwnJYHMIAGDZylCixrLvZovHktEg+6MAxxO5Yn0fZjtap+tHD4opE8e7KPOAAAG6FJREFUiFrS1/5HJG67DykHccC7i8E7/EIJo8pKHBGlA6EAB7QiMv2AW1/HMAaRYCNNjNNWCP4HJnd1zfZ5s6wqF0oee6iuy0D3REqHBHIJeOCZKgZxfd1azRHCsjVNQnsY0gF4BsFi+nQ4IwRoxEnLyzfMr1l68ZcRSFXnMLgDzCeHknNg4/eNAoOp4S/8I/yIuNzMoEE1OJVbP1G4sxNzhfE1iBkv0xyX44thpCOm1G8SEBgZhZuwjwlfy2xlAUu/gwo5juFVVg/C/CuvKFmoFJtYlQe1yii/QupYCw1cDkAZEquQoRJEQt7oeVmodP26PP4VGhXL2gABuumC5EnABqRRYG4iCEUouGhJuUhdQCyTNfNWec7eK/FDr0nv2aZMJpcS0tFDOuAXDJlS+Hrtsk/PHyYIaMHGmy4vX6MDEEkSZR2Xfeqzu2YGoAyJPDCx0C+5YeBM1dvJSMIOg480hy8Hnk+epeQBeGHBu5QtEFMuQYjHMErD7BKy6rsbX1vux6utmtJgpuw0xUiPlJC3yFtISuAGJFSnMirAdAN4wEYlCXFMsLIpboH2cIVTm6i7cADKgBxBmDZpYIguCCRSsq9djFTUI5haVaubCp20n8D4BRiAwSmui7cCiq9IHsNCU+owzGmh8Tj1gXB60buTjs6vo3EVdJc9ugQMitEEnZI03SnMr/IISc5vrbG7CfZh7RVk3rx1C8cPW0DV1IFaY4Ad7mgAvVb8A0einSRYWloUKSEN1iohbSrIHAZ34PkENZUBO12SclAlC0NCi+VTXgkofcjyvgCvZb37zdY0nh3JKMneczVQeSpnX/rtYyPgB5g3vT5/8CDVFfBJQL9Qq7DrY6edNDUAZUj+VczDP4DiLTXwhoDfZHaWd4JDk3USbD0CL75H5jrc+xFrnRLpBlNdQpeQXYXig95Bjc5K0pQuSHz2kiD5dVOZqIme9qPD3kGOFkh5JsyVuC8+wWst8lAAs7solPC77E+vXbYygKlVqLKp4AxBKvYMIVDEFhpvOOCihEaq+XUL4bpEqpbqwACt4MdoQYBkxobvInDVMWKHWZj5rO+XhkMZs020ngQOjicLlWQjx341UkGSmqB9hNKFR+heWb6c98KAQU0ZQpzadl2FMV120Joyov1p+AsKsVuW3gIVKWzOu3XrFsQVKkk1cBdYChPlukA8u90BKMMZwBD9CCfIGf+QO8wyDhkUaY7BSeZSM8EjTyJdFmN/ihk7xlGPEFyPTJVXmBKjw3ipf6y76jJvHf7Ve6oBMZJXM0NKdUo1yzSt6cuqkcYy0MDEJBHQCjzRuUxqAlNi0OwLPTHiKsA3BtsnOxoWZeAYyZitDIYN/AMLxz8kjw8LzSfxqa8CzoGHQCc8mIrFxUifPizG/qzpQVJbPP+BB2SqW1mhkphzgM866ktaI1gpW8qllL/M+6WdqvmRP6fNmm4xFTAslIkIMsEDswRO/OUWzBwqh0J5BaMmQLpudliUAeAIR27Sh1IGJ0X7RdOBcPQkIcFW8dVdE4IkjRiC+mTlwyUpvh43cDiIj6hrJmQ0Ufskdh6XPO6RzHALeZk6kOV+NZVtlicog4JTvJaa9SVdC3+tL4JNogBRUiBHMYNmlu7wXOoAlPVs5IdFGUI8yvSz2Nersdwoz+BgUJCnfzgbhSbuJEdTcAkimRPL6VhJFp4KhFv5oLsyEdRstzSKoCj0m3WqaofbUZgpRaqoU7gFhSFoh4abVYkMP1F6a1oNKshzZRFeQKW3QHLLcJlDwFbMhYihlwo465TR6sGBZ4ZFGcgVwcBlFCRqaJf6wDkMnEYAwDnCh4vAk8RIlCFMfTk88xwIUxT8ZrLWkNKfjyjUprzMyUaqWzJZwa/Hq+QReYWSPAhlijLkKz6hM82H5aml1AChQIVWDNyDBw/4BDES5uJpgTNI2pe1l5Oku1jJsChDoU7MrqIUIhpdUQZbbJ4/f0YUsDzRK7yXPUV0LoZ/508lj1MucRSPiWiZMDmzjZRat1OsrYClpEJ212lLsYc18CrVTmmEOAXi+V9LIRWESyFDFjjimaKNSgmfK0DSC+1LCXDUqSsBvmJElZcJ/cREWIuI8NGImRoActupTeUR2xnpN//gOOq6oOu+3WFRBpCXw6SwX+Zgb3/X24CfP7y/vrHqELuQCQ61HO1gpyidUaNzZB1h0Xllw87kcMih/9upGPGY79reca6HJZFFpo/4te+f92+RUQPnj3WIy0d/EB0euteuRc6jNJxB0QjglEs/UwftWdq4q1rcoaIl/IiXZegqujmcCtEOIaFW1ylIf1riJmMyLVxTmAh2AQAS1LY2Q+ivL1//7N5nd+7eubF8Q+HO7k7ocB4dZCQY3g4Th2LePPEbFmVIPu/tm16wAX9qd28He70e/eWXX/g+ue8J2M0alI7ju/fL3S6IeDozT2Nwu0zn/j7KKInDe3fBCYDrN64tLM46DCCEoTN9OKxX0UtI7yfSET0DS5h8j8T/OrXnqfV8lEchlSP65m9NQnCtRlyOheVFWtV6+OdUYL1nEvSInvPNE1DZc+Isjh2vTthcc//+/Xuf3YvvzO86UjIqT3tZBQIFi3CqTtctj/cAWj8fHRZlaONUyB42NDLsnCMcZcpLlWt0gU8ok4q7s0ffJms/3p9/K8ElZJmvpG1zK06iv3P7jhiGryeUrXClPz2f3UohzMefwxWDWMB0M85rQyKGmmeQZIqVOVy7b3n+JzxCicf0K4Nfkhcr7t9/8Pnnn1tWUyfjJb0WAI8K/zBpAgiHTRmOs0oobKj65ZdfWlJ12pT9+uhuF9POdh8M3vHO8vqo+KQauIPx1MAGPEeo20fgEiQEsB9bUU8HpKtSwITpLcmDPEMaDtOt6Uy6aq3zypWxQCjJG+2f3b+XKwkAwD5JOdJ13uagag61MqCgV1U4fXMRflkdLqJuSgV3iyM/3BF2snBK9nb3l+/GyxeiJoLX8hzFYh+u33y+vGEXkVJ2beRq65RvlNg7cgKb/kBX3E5gLsNdo4ZOb9++9c23XycYORfSn84aaWWolYEIsi5cLVIgtBjUJf9gaLgwb5q/Li9bWbuKBSDBcpcictMjgGLvaI0wIYavQ5AAVsbKLWCoqxl9L73VpAkwLuOTWBJFmeTUXYPle3eYLbeUFHJF+JQVkqpDQKozQRh2ZUBZsPMJfk1UC5kI4vPnPndSlyacJFXyNblOJ0XDGC1YUjPXDU4+0nyJSTYBiX7ByXxY671589bbt77YWyOhSLnuJGSxw+LuvbtmkICRhRURjl1W5cOWGWplQET+NxnMC+OxQaFLGzd/+/VZTSTWbIZJMtSgrQmtuRrbT2/fua3QORRF+MJdDEXipmILbSxpoxXPkO/NtBYragAx6UMfGCxeiPrpdGF+YXvHaUix/Ic+7gqZ+PN0DjVA0c8mh1oZIBqiWZJMRu2Ghl9+8eXsTMyjSwLT1BO1UL/y3XiQcpy/2Ugnv7YQeDb7zYxmy1sDvpk552xQc4UMYR6Ahc0NzSZ9CnSI04Q01QjiS6VlCX/rH//4Z4aablnERA3elZAmMT/Vat7nW05xL+wUb5BnBufKmjYdr14IHuMr1JNkuumrM4jqqTXsynAq1k7pMn5gjdgkJyjSB3EU8UX6NEJph5QQC2lrRwh7akunFGpFqRZIgBawlip4p9IQ+sa9G5/d/4w2CtAlYDgAxg79tsKe0lpjRQFQ0X8LW1MOnZqOL6w+eHD/w4dVCzXOjXF58+YNqwAmIeCYaPYCHkddqBQzV4Um04Se6eqY0r10XsuzI6kMZNTsKk1goamEIbVJJ4Yq9YFMYJKUckyUfee4c+JpJBaxYp4oHpLRlIxm2b/P7t3TrwnWck9k0ocDL6KpnlPiHnDvx8SXpcvFxYWZmc/ADn7fZUQflkI/gWA/ktbQFlkESLiQZA8di+969aeLfoDZRRtdSEkXrdZcFcczOoogdWHBr5eBGD9Rk72uXAHG+FWNWPh1kFwX7CnST2I0Aw+SJM8K3ry5bI/N4tISqXIaSwhdbNTrg4ntC7USzoJ17I+w5IAG5ld9cZj2klffgfYpaxUiTEKXouG9dI3InIxRnMFJe4FvJHWgIsJIKgPoCSKhxA9iaqWTZRK8vn79mpfAaLcYrSLQuD8dH+uoMP5URstZxeMlQIpts9r/7rvvTB2SfeMHdbznoxM7IRyi6/dTrdZ+nzKkCeDDUEBK9UAh+sBeiGSePHnimD3l9LgvAOmFpmlZa1qNX2dF9snz9AXCrhoZSWUgpnPzC+VluHgbjlnCEhksx3ijCMvVvISBRMRIId1dbGTSOAr6xd1sgeUTfH/77be8kJupCcVvOFB1cG9YHuVzNY4HOY3dK8f7AVXYooQy//DD9/a2PHnyy08//RSTBD2/WY4+1I8mlLgxJv1cshQ2Jh0FbWSuRlIZUFckgPQZBJN4to6YeheeYhBZ2yRFTW/f+WzNO668hP+xw7KjRHaoT/yYcol5Q5tBfvzxR/KkF7ZQv5oqomBPUFN7kz4FOltA9IEHNhi4LDsLgTplegG9wO/rpDB6/er1m7crKktqSh4IFQ+kP9XNofua0otm/YobWSSr4GU01U0rhxoceHYklQHfuAXxT6584Yp3qpBSIdaGMtxcvr58bfnG9Xfvrq9vrL94+cYXLwu7j47skvkR5cTNiodiCGcIK7x54/qdu3e//fabh58/2NhcjyPxJg9YvogzDvZ9WzwkaThSeANDBXCZBLOLdDIWyyMz5VCPPUfYls8fzi4uzH/99RebXizY3rZ8iXTOhqVCBJplkSm0KIsnBbdoLmbVSljVIlf0wRy5zy7YjFQmouMyDlkeGoJcgC0jqQzwJJHef6AFgTOulDjIshw27ext2zNM6n1O9/6Dz+jM4sICRyFc5iWK2kQkUewh3kUea8l3i3zhcyZ2tjd9ceyPf/zx8ePHWtjYWHW3RBaMaOwSze3HRSxazw32H28KBEaxLS+xQRl47R7shmbMz894j9BxSg6sefToq+0d39XcZdR9G+H5ixfv3r6bnNidmZpBhtDyeB0viEoNmBn6LwCK6yLoQaaolftQDuKbxVMT8ws2CsR3UGfnhmXh5QLsGFVlaKN6xDCnaBZJjfsYxtRJX3z5Bf/w/t37Mgm7WpYl7LBn4+M/if2kTsFhorAr41WK619E+tJXtvC43d0I/ZuUoR5tmEvs5AJBHj1+xFUUd3HdoZ5GWeYejLLcRYCQ+jD6ES0exAAgqCMsrM4ORDE1RKclYowO0E2JxFKMbhp1ZeiI8iaXLB4bPtpabNJpZWUF72XwEhd9VOEjL/mciWCzEpGDEYgM6ZHvqKehryQWkoREq/FtFX5yj38wCPZrehpZysTxtn2oYSPKZB0KZFI58UsdSOmXV6hCaMKIp0vC4/O5wKhlBZwzy07E7fmzTvfixQuhc4mdYj92SIkzTiZiHillglaQAGx2S/78Xobzbspo2PWyYBJyPBHoLCwuWquBexp4GyusRZikRpZcxHQ3Z6hbZPFkW+4TUw26FQ2WmbdUHloxnHToBKoroQwpyriOu8TdBBGVyH1sRhKCBIEQ1mKkzPxs7JOtGD/SPCamEnT8hjYUHOUtJ8aU6Ows0c/9LGkLrCoiC61QjjK5lMkcSCn0nq0oozVPpc9Mz5B9dSJ2w1nnSigD849PNpyG4Z8SBe3htBLvDNncySjSgSIW70mG4SNbh7ueojyqScxkcn04uXgWVLCQiG9KcKUMvuVgYMAoUAkVvAPEUJB4KKspZJKKl1g3wuYokEs11kQLqKGO36plGeksGEao/Eoog+gXF223293djtFyDCUt09rFuba0tPDZZ3cFTuRA1PTq1ctfnvxqFIGFQghKgvGEhhyMIr+LlMaL0Sm+kFIiv7Aw56waH/qRt/PaSR9GUMzB+nosU3Ik1tf93bhxzcr1jRvL7tAHWoEmKOkpbZaacSRHNouq0ihSqVLXS6UMmJSMSQOWeewpCuBma4QXkyQWpadnzJFbozN6tGDEFsqYP3r4+RcvX7x8+vQp+XDABO+hEq0YRc9AOiuCpBq0GB87r+KjoGX6NfJW5ObmghqMgtk2a2c8AZmH9fw80Y/VfUEUOph04j+rgZYSMadANL0oKiN+q5dR++dSKQN+p3EKG3VkcoPFwqNgEm6x9Lhrwc53qNpRL6GJsAHvH3/7+N7de2InhlAUwf5pCqfxe9SY+xHeYwY7F1WKMlhKjwhHnjIgC0zJt7CQVniK1YA+3BFKRihlUCGlVsiUOuF83Irao5wulTJU4p6agDeZqRiUfC1OIHbUKA9/UZJn1fdrOU+4TA0EBu6mHLCZVSOXIFMtxRzDBbLMgV8kSn1gCySCLmVlpEAcecNr9FEf0SiDvDpBwOKfj7U8EpeXShkOUzyFWwlRT25hoZ0aeJmcq26lPctflTc3NklDViMHqSo0RyOH2x/p/MedJ0fRgCN8oZ+pKEJ8rJFiEHROwy9CISAdSLeQDSRxkoZHmxylq8umDCm7OIAxyVqGKnUgf9OSpbVzSzUpOebS4xal/VaFJEBllx4cJcZeCFayHhRIOpR4khWQklwCJ0OFdviUwVXQG50lJIqLI9HphYAY3EOXk8EYk7zBSDbeACC9AVZhG2q79Jt1kvhuEQJpZurjW0FZ7VjNrD/av62phONIpMIjS1IpRLts4kBGVakEj5FDZ+XMRFC5mJL8LdU/2pHjrQ/99eVUBlwJsZ6ZMdEh8QmFax957K46FcuxyaVf5i4Ox40N4S0DmbdoBd4PPTd7BRBZggiH5DvpphAFJMqQd9GWblAMQZQSD0roybfI9ArHgJ4fWWXAsPTIGeQQXqlIc1AyZk5t8I5FpWtL17bLK8vu41OpFVVwDherS/m2bsSmvUwZHqijtdHlcQuZDv5BgcNUSpq0Cq3STcdwAh3sbozdqYV6oibb4+NshEPf6dFVjNEjJXtKtvwoN7Odd/xT0f9jjcHlhkgZcs/8MVLgBPmNQmQrKSuQ75TsZJWFAnJvKsSq8dr6mopeaLCtwDfYTJu35LiwoOKORoNhCtv8sivpWO9hDHt+I+xYm8NweSqpW4CFUWhNHGVJkGX/YHc/HKMD0qft3mJKnLvsqLLry3avhH/gIbY2fScgqBo7vttGR2vFyiSbgprGaWXnrDkqmZnZIZLAIQKlxYyj/6Aeyc6yyni7ZPXRV4kQiBpIeCMpXFhcUIEN82zK/9Emx1f9oQC3qSE0Nw+L2vPb8znZkCNsd3Gn6kk1eSWmI2TwFAf97h5VvKr+QDLDrgxi0KRLpRKHyYTE1IAHoBIqJPWruDYfoRKHHxnn+0WBHB6EGpSz70m/RB8oQ2ZSN7I7RiozyZRTudkvwC7czrArQ0U1mSrBFsXxgCYYH1dWB3sQvbji1pypR7jsihMXJtP4wZMUSKeNwm4lzSvFwAiaIMWIojDF3hamCi8k9XFEeZTU+Z2NkzCfXzJKygCTtP1+OVm7Zaz7UAmXKe55N3UmKe63ujyfEOO73VKAWCM4mc4H0+6kH/abcSy+UAl1XFIMyWUySx1WzFvb3fZbX/1hVwaEq0Qc9VHcpUzumBAdoak6aWbk0/AkvZJb+Xh9FLyyLScv8hcR0FnCCzESRkhk3d2MWo0rTMLaGJtH+ChXwa2tPJtwOIg4pMqArBV9yTSyIhzrIsmjowy6szTuShVjPJWKoUR5YdDH+dPhoPklgYLQJ5HROcmOIzIp/ZmvKlRcY79ydYKLkLnqYVLK6DGJSOlXKKNCGJYy8DUkIPdZgqBJUyTGiYoBLuX9puhXTWWh33GqlQJJcPTPlPyteEErlLv0G8asLP6ki/DqEMulHK89BUiVKx1TnmDLZF7lWhEZgGdI3CqRTaoJHZUXFYhPLEuoRvSZmYq4CKFyqoF8akjVTkWmJGtWrgrHmb5TIOncYl9pPUU2fYKCvJRJHqVWeApzMRp/r3m7ajNewubhUyuSpxWoWshnT3K5qtPHzACUAWJJJpkkXBCovJecNEIsaqBQyuFXRdYqU5HgZEl1a5wZHgpgU7Ibx3GZjcNibn95d8dWcK+OmG4CbQbDKqdgeCSfyowHa8VoAMqQ+ECPMZBYCHGkbwY61tetFG60YDDcTZWolQTjxhugAD7qpZJsYo3RCk2OK3dZvUFBK6iEpDxVKDXBb91wDkAZKoqQeOYhV82uLS0lsShAIo8QSbJUj7oJMW6/VgrgaUq/X3zH5WS3ATS5d3KPncXG0+klVMikcqbUpXyqPjgHoAyJDCRjZFBO97diYOPX/vaeM9skFSBPEySXDZiE+ug7bhkF8Fq465ftc5nGLn+tkuK1RCWwWwUuwvQrxVA/uZ8VXNZNzAEoQxoJyAsZJZ4BCXwPanq2HO4Z6hAKIOVYuQEq1E3lK94+VmJipooURF+JvUnYneEAoacJ5IGJdOCfM0qoBC3yuDoqV8/WlBmMMqQloAnOjoekFwi8f94aMhefANskQU1oj5ttmAI4XvE0o53w+1zB9IxP0FUflwhDuL9PH2y8t/tYBZOwbGKqk99awa5RGWLrtZOy22EPoZeHj3Jbfx17Cueyb6Wc3+gA7aBDaztXrTiPG2+eAmnXU6YzWAJDsLtwvGXzOZCySzy2fU/uX1tc8iHdzesbsSix+sHJsOZaPFK5kUrBTnUaZ73nfQ7uNSoDQWfeAYoEJpIBITSCj02mfAJXWMgBtdbRhedAOb51pSiQwu3XXgNykiZyfm4+d/tFeUnkykkF7hIq+d5JVKMyiHTAR32BC1YuzxSqsbKpgxgklHKIyfhVwW/v+IxbuBwUSKmACwMqnz5BhvRLpIVQuZTU6YsmaKdGZWjLeYg7NRAU8Qn2mdIE0Gfg6BYlSWXoF0qXQxquMhaHzaI8gSEkCOI3p18daWXbH+GhKu6mLPVOsRqVISx+Od4duGYJ+ATREeiBnnIPz0TSZZb0js+4hUtDgYyOoENOMjGpKf0kyopE7k5IEeoL1jUqQyBzEG4uJgeuWVVbquCGWyKZapCaXd3tC2LjRkadApV9lEllICfUIF9spBi5icNc0wiMGYwU+DBxkWQYlLJOQ1ITsAqSqf38XVU46iwcw98vCpCKqqk0moSEPign/UaeJEp5bmqqavaS6ZtnSNAJd8o3mGw8NVtMEwRI0KhE360UfSXyHsxn87IXZMbPXlYKVLaSdHEFBIaLIFdmKYmN36pCLxTojzIAMQ0/yNKX0V0b73waSYm7Ke4JceYBfSwu6gs+vdBi/OyQU4DQkytiI5NiJvY2ks7B9Ang20c3nbhxVkFM7Jx1r/NywKW+EnTgUlkOwcI6+Qa6X0lr+dt5s+OaYwocpkAlP8QsRKpMNMmT4b6IcWwaPdzfBfLgyBU0z4LPiJm++vjFfHsX7gXaHD8ypsBJClQxRZURLBFg6ViU4dkLrED/P+yj2h5nslRnAAAAAElFTkSuQmCC";
|
|
2584
|
+
|
|
2585
|
+
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==";
|
|
2586
|
+
|
|
2587
|
+
var img$d = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGxmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDktMjRUMTI6Mjc6NDArMDU6MzAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjYtMDEtMDJUMTY6NTA6MDQrMDU6MzAiIHhtcDpNb2RpZnlEYXRlPSIyMDI2LTAxLTAyVDE2OjUwOjA0KzA1OjMwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjljMDI0ZTVhLWJiMWItNDBiMi05NThmLTg5YjExMTE5NGI4MSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjMzZDZiMTBiLTQzNjYtYTc0Ny1iOTZlLWI4ZTBhZjQxMTkzOCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI1M2M1ZmRhLTlkYzctNGQ0MC04Y2E3LThmMTQ2MmU4OWMxNSIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjUzYzVmZGEtOWRjNy00ZDQwLThjYTctOGYxNDYyZTg5YzE1IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDQ5N2Y5YmYtMWZiMi00MWJlLTg5ZGItZGFiMDZmMjEwODE4IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWMwMjRlNWEtYmIxYi00MGIyLTk1OGYtODliMTExMTk0YjgxIiBzdEV2dDp3aGVuPSIyMDI2LTAxLTAyVDE2OjUwOjA0KzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7pSLHQ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";
|
|
2588
|
+
|
|
2589
|
+
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==";
|
|
2590
|
+
|
|
2591
|
+
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";
|
|
2592
|
+
|
|
2593
|
+
var img$a = "data:image/png;base64,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";
|
|
2594
|
+
|
|
2595
|
+
var img$9 = "data:image/png;base64,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";
|
|
2596
|
+
|
|
2597
|
+
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=";
|
|
2598
|
+
|
|
2599
|
+
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";
|
|
2600
|
+
|
|
2601
|
+
var img$6 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF92lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDktMjRUMTI6Mjc6NDArMDU6MzAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjUtMDktMjRUMTI6Mjc6NDArMDU6MzAiIHhtcDpNb2RpZnlEYXRlPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA0OTdmOWJmLTFmYjItNDFiZS04OWRiLWRhYjA2ZjIxMDgxOCIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjYxMjIwYjI1LWNmZTgtNGM0NC1hOWM5LTQ5ODAzZjhkY2U5ZiIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI1M2M1ZmRhLTlkYzctNGQ0MC04Y2E3LThmMTQ2MmU4OWMxNSIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjUzYzVmZGEtOWRjNy00ZDQwLThjYTctOGYxNDYyZTg5YzE1IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDQ5N2Y5YmYtMWZiMi00MWJlLTg5ZGItZGFiMDZmMjEwODE4IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7t36uXAAAE5UlEQVR4nO3Sz04bVxjG4W/iaW3LRr6AoNJ4Bays8Q1kUanywjYGi429AckyVX03g6gVqd4kmyoNTbKIkFj4BqLJDtjEFNUXYIGVBDye00UFbUwoMYzn/PneVzoSEvKZsX+PJYQgjO8eyH4BTO4AgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPkAgPnsm/7h+759cHCw7HmeE4vFxo7jeIuLi0exWGwc5Qti0208HseOjo4WPc9zxuNxzHEcb3l5+cC2bf+LHxBCfHZ6vd6jQqHwJh6PfyIi8d+TTCY/VCqV3X6//3DyczhyT7/ff1ipVHaTyeSHyW7xePxToVB40+v1Hk1+7uqPIAgs13VbqVRqOHnB5MlkMoNOp7Mh+0vj/HM6nc5GJpMZ3NYtlUoNXddtBUFgXQPQbDbbt10weer1+lPf92OyfwCux/f9WL1efzptt62trV8+A7C3t/fjtJdcnlqt9gwI5MSv1WrP7tptf3//ByEE0WAwyMzPz/9114uAQL/4RCQWFhb+PD09naPt7e2f73MREOgX//Ls7Oz8RBsbG50wLgMCveITkdjc3PyVcrncu7AuBAJ94hORyOVy7yidTp+FeSkQ6BGfiEQ6nT6jfD7/NuyLgUD9+EQk8vn8W2o0Gk9mcTkQqB2fiESj0XhC7Xa7OasHAIG68YlItNvtJg2Hw1Q2m30PBOqcKOJns9n3w+EwRUII6na7jy3LCoBA/okivmVZQbfbfSyEoKsHt1otd5YPBQI14hORaLVa7uUzrx4+Go3sarX6HAjMjl+tVp+PRiP7GgAg4Bf/GgAg4BX/iwCAgE/8GwEAgTnx19bWfr8p/v8CAALz498KAAjMjv9VAIDA3PhfDQAIzIw/FQAgMC/+1ACAwKz4dwIABObEvzMAIFAn/urq6ou7xr8XACDQP/69AQCB3vFDAQAE+sYPDQAQ6Bk/VACcEegaP3QAHBFEGf/i4uKbsN9/Jj8KFwS6x58ZAA4ITIg/UwAmI4gqfqVS2Z1l/JkDMBGBSfEjAWASAtPiRwbABAQmxo8UgM4ITI0fOQAdEZgcXwoAnRCYHl8aAB0QcIgvFYDKCLjElw5ARQRRxV9ZWflDdnwlAKiEgFt8ZQCogIBjfKUAyETANb5yAGQg4BxfSQBRI+AcX1kAUSLgHF9pACYgUD2+8gB0RlAul1+qHl8LADoi0CW+NgB0QqBTfK0A6IBAt/jaAVAZgY7xtQSgIgJd42sLQCUEOsfXGoAKCHSPrz0AmQhMiG8EABkISqXSKxPiGwMgSgQmxTcKQBQITItvHIBZIjAxvpEAZoGgVCq9Oj8//1b29wIACQhMjm80gDAQmB7feACXCNbX13+bNn65XH5penwWAC5Pu91uzs3Nnd4WPp1On7mu2wqCwJL9zgAQ8jk5OfmuWCy+TiQSHyfDJxKJj8Vi8fXx8fH3st8zymMJIYjbfN+3Dw8PlzzPc4iIHMfxlpaWDm3b9mW/W9RjCQD7dw9kvwAmdwDAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfADAfH8DAXtWmdXpw+EAAAAASUVORK5CYII=";
|
|
2602
|
+
|
|
2603
|
+
var img$5 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGxmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDktMjRUMTI6Mjc6MTArMDU6MzAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjUtMTItMjdUMTM6MTE6MTkrMDU6MzAiIHhtcDpNb2RpZnlEYXRlPSIyMDI1LTEyLTI3VDEzOjExOjE5KzA1OjMwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmMyMTU3YzU0LTZhMjEtNDkyZC1hNzczLWM1M2IzZDJmMjg3MSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOmQxNzA1Y2Y5LTI0MTAtNzc0Yy1hNTg1LWE3OTdkNjRhZjQxMyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjQ1MzliMGNhLWNiN2EtNDM4OC05MTRkLTg1MjZlNmNlMDY3NyIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NDUzOWIwY2EtY2I3YS00Mzg4LTkxNGQtODUyNmU2Y2UwNjc3IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjEwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Y2EzMTEwYjAtNTU5OS00YjE2LWJiZWUtZmNlNzdmMGMyZjQ3IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjEwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YzIxNTdjNTQtNmEyMS00OTJkLWE3NzMtYzUzYjNkMmYyODcxIiBzdEV2dDp3aGVuPSIyMDI1LTEyLTI3VDEzOjExOjE5KzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4Im3HlAAAF7ElEQVR4nO2dW0ibZxjH36RG2Fq3ZZ/TQEWw242FaIxW5vCyEkpv3Ij12NZ6bJMdLwaFeTdhl9o2yVx23rrqFtCbMZy7XQnbXGZ60Ru7gqB4+rSHDUTS+u4qUFraqTXv//m+9/nD785+7/N8/18jbU4OKaXg6BsnegAONiyA5mEBNA8LoHlYAM3DAmgeFkDzsACahwXQPLYTYGFh4WA6na7MZDIu9CxWiC0EWF5eLu7o6Ljs8XiWSkpK5n0+38yBAwf+rampmR4fH38DPR/pSCktTSKRCBqGYQoh5ONobW29cuvWrRfQs1IEPsDTEIvFzjkcjq0nlZ+lqqoqtba29iJ6ZmrAB1BRPktgMwF2Uz5LYBMBnqZ8lsDiAuxF+VmOHTv2E3ofCsAH2C7RaDS0V+Vnicfjvei90MAHQJUvhJBut3t9a2vLgd6PBQCUn+XGjRsvo3dEQvp/AmOxWCgcDkellI5cnZFOpytzdW0rhKwA2fJzfY7L5crk+gzSQT8EPe5hX+ToIf9h5ubmStH7IoEPgCzf4/EsovdFAx/gQSKRSFhV+UIIOTo62oLeGQ18AFT5jY2NE+idKQAfAFF+bW3tb7dv334evTcF4ANw+RoLwOXj0ab8I0eO/M7lExHg0qVLb3L5NLB9+TU1NX/w6wGJCMDl04PL1xxbll9dXT3N5RMRAFH++vq6G31jrUJOL37x4sW3uHza2KZ8v9//J5dPRAAu3zpYvvyqqqoUl09EAET5/AYPIgJw+dbEkuX7fL6/uHwiAly4cOFtLt+6WK580zQN9E2zE5Ypv7KycobLJyIAl28fuHzNIV1+RUVFmssnIsDw8PA7qstfXV0tRN8gu0OyfK/Xe43LJyIAl29vuHzNIVM+kzsKCwtXA4HA5MDAwIcP/wXj8jWjqKhoOZFIBB8rwNDQ0LvoIZncMzY21vyIAFy+PhiGYS4uLnq4fI05f/78R0JKKSYnJwPoYRj1HD169Bdx9+7dgtLS0jn0MIx6DMMw9+3fv//9iYmJ1wVHu2xsbDzrTCaTdehBOLg4U6mUHz0EBxeynxTKUROn3+9PoYfg4OKsq6tLoofgAMP/DNSXsrKym86CgoJ/4vF4n+BoF7/fn3IKIUQgEPh5aGjoPfRAHLWpr6//lZ8M0pTy8vLrm5ub+fx0sIbk5eVlrl69+hq/IERDDh069HcymXyVXxKmEUVFRcvHjx//cXBw8IM7d+48t63XBCIkOHv27Me6f42bav73B1RL0N/fP8ISEBKAJbA32/5B1RL09fV9whIQEkBK9W8O7e3tjbMEhARASNDT0/MpS0BIAJbAXuz6D6qWoLu7+zOWgJAACAm6uro+ZwkICYCQ4MyZM1/cv3/fib5xdmFPLqL6gyI7Ozu/ZAkICcASWJc9vZhqCU6fPv0VS0BIAIQEp06d+polICQAQoKTJ09+wxIQEoAlsA45vbhqCTo6Or5lCQgJIKX6r41rb2+/fO/evX3oG2sVlByiWoK2trbvWAJCArAEdFF6mGoJWltbr7AEhARASNDS0jLKEhASACFBc3PzGEtASAAppYhEImGWAA/0cNUSnDhx4vtMJpOHvumUgA+gWoKmpqYfWAJCArAELABEgnA4HEHvTAH4AEgJpqamGtA7o4EP8DDRaDSkSoCysrKb6H3RwAdASzA/P38QvS8Skh8UGQqFYtFoNKzirJmZGZ+Kc6iGpABCqJNgY2PjmVyfQTroh6Dt/DpwOBxbIke/AmZnZ19B74gEPgBSArfbva77O43gAyAlGBkZ6UfvhQY+wE6IxWLn9kqChoaGKfQ+FIAPgJDA6/VeW1lZeQm9CwXgA6iWgMu3gQC7lYDLt5EAO5WAy7ehAFJKkUgkgoZhmE8qPxgMJkzTNNCzUgQ+wF6wtLRU3N7efrm4uHgpW3p+fv5mdXX19INflMw8ikNKKeyUhYWFg6ZpFh4+fPi6y+XKoOehHtsJwNlZyD4ZxFETFkDzsACahwXQPCyA5mEBNA8LoHlYAM3DAmie/wD+J/S00xOITAAAAABJRU5ErkJggg==";
|
|
2604
|
+
|
|
2605
|
+
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==";
|
|
2606
|
+
|
|
2607
|
+
var img$3 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAACXBIWXMAAEuXAABLlwHuxW8gAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAIABJREFUeJzt3Xf8XFWd//HXNw0SUmgRQu9FOkoREFFYxVUWG7qiK5a17dobuvhT9qHY6+qqiBVdC7oiq6hILyJFQJrSO6EGQgjpCb8/zoRvvpB8M3fm3vmcM/N6Ph7vBxFh+Nxz75x75pZzQJIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZLaNRRdgKSOTAU2ANZfIU8D1gXWBia2sjYwqfXnaSv5nDVa//8i4LHW33sEWAYsAOYD81p/b/YKWf6/7wPuBe5u/bOSCuEAQMrPOGArYEtg01Y2X+HPmwJrhlW3ao8AMxkeENwG3NLKza2/93hUcZJGcgAgxVkbeDqwA7A9sB2wI+nkPz6wrqYsZHgwcC1wTeuvf2v9f5J6yAGA1BubALsDe7T+ujvpRC9YQhoUXA1cBfwFuASYFVmU1O8cAEj1mwjsBewP7AfsA0wPrahMtwCXtnIJcBnpeQRJNXAAIHVvXeAg4ADSCX9P+vMSfrRFpMHAOcC5wIUMP7goqSIHAFJ1a5JO9gcDh5BO+GNCKxpMi0kDgnOBPwJ/av09SW1wACC1ZzvgcOD5pJN/jk/hD7o5wBnA71u5O7YcKW8OAKSVGws8CziMdOLfPrYcdeAq4FTgf0nPD0hagQMAadh44B+AVwAvxgf3+sltpIHAL4GLcT4CSRp4Y0gP8H0LeJB0YjD9nTuBrwL7Ig0wrwBoUO0FHAm8EtgouBbFuQH4USu3B9ciSWrIesC7SfeGo3+FmryyjPR64RtJ6yxIkgo3hvTU/vGkd8ajTzQm/8wHTiLN6SBJKswk0q/9W4k/oZhycxHwetLsjpKkjI0B3kVapjb65GH6J7OAL5JWaJQkZWYH0mxw0ScL079ZAvyc9BCpJCkDzyetRx99gjCDkwuAI0iTRkmSAryZ9Mss+oRgBjN/Iz0nMA5JUs+8ElhK/EnAmFuBt+BAQJIatz+wgPiO35gVcxNeEZCkxkzFV/xM3rkJOAqXipakWn2H+A7emHZyJXAoUmZcC0Al2pnUqfrLSiU5E/gQcHl0IRLYgapMx+Gxq/IcDFwK/BjYPLgWySsAKs6WpHurDgBUskWkJaiPAeYG16IBZSeq0rwRj1uVbwJpyuq/A68LrkUDyisAKs0NwLbRRUg1+z1p8aobowvR4HAAoJJsAtwZXYTUkIXAF4BPkua3kBrlpVSV5MDoAqQGrUF6JuBK4NnBtWgAOABQSXaMLkDqge2Ac4HjSRNeSY1wAKCSbBVdgNQjQ6R1Bf4OvCS4FvUpBwAqydOiC5B6bCPgZOBEYO3gWtRnHACoJOOjC5CC/Avp2YCDgutQH3EAoJL41ooG2Wak6YQ/Q5pHQOqKAwCV5MHoAqRgY4CjgcuAXYNrUeEcAKgkM6MLkDKxM3AR8PboQlQuBwAqibOkScMmAt8AfgpMCa5FBXIAoJL8OboAKUP/DPwFbwmoIh+qUknGAw8Bk6MLkTI0j3RL4MToQlSGsdEFSBUsA3bCXzrSyowHXkpaM+N0YElsOcqdtwBUmp9EFyBl7l9Jt8s2iy5EefMWgEozDvgbLgksrc5M0jTCl0YXojw5AFCJXgv8KLqIYHOAu1qZCdxDej5i1gp/fQR4jHRveGHr31k6ymeuSXqyfGLrz1OAdYB1V/jr+sAM0mXmGcCmwFq1bpnqNJ90RcArZ3oKBwAq0VjSRCi7RRfSsLuBG0ivP94I3NT66+3A3MC6nmwqsHUr26yQpwPTA+tS8jhp9sCPkp6jkQAHACrX7sAl9Mf6AIuAq0lzvV/VypWkX/Kl2xDYhTRY2wXYgzQw8AHk3jsFeA3pqpDkAEBFOwb4ZHQRHbiT9JDWRcDFwOXAgtCKemsy8Exgn1b2Jd1OUPMuBg4DHoguRJK6MQT8kHSJM+fcA5xEWt99y0ZaonxbAa8DjgfuIH6f9XNuxodoJfWBCcAZxHeqK2Y+8Hvg34Htmtv0vrYT8AHS6neLiN+n/ZZ7gWe0vTckKVNrAj8jtkOdCXwbOByfiq/bVODlwHdJK0JGnzz7JY8CL6iwHyQpS0PAcaSnnHvVgd4DfB14Dk6q1SvjgOcDJ5DuY0efREvPItKDgZJUvOeRXp1rqsOcTbpP/Vx8kj3a8sHAiaTXIqNPpqVmKfDmim0vSVlaE/gY9V0uXgr8ETiSNEmO8jMFeD1wNml/RZ9US8sy4J1VG12ScjWR9MvmMqrfGlhGemXqw6TZ7lSOLYBPAfcRf2ItLUdXb26VynkANCg2AA4h3a/fkrRQyoqz1M0mvR51LWlSntNI0+yqXBOAV5CWyD0guJaS/CdwbHQRkiTVYTfgB6Q1EaJ/ZZeQz3TUypIkZWoD0q/bh4g/yeae/+ysiSVJytdU4IP4nMDq8pFOG1iSpJxNAt5NmtMh+mSbaz7UcetKkpS5yaQn4J1c6KlZRnqQUpKkvjWVNKPkY8SfeHPKUuC1XbSrJElF2Jg04+MS4k++uWQR8MJuGlWSpFLsCpxO/Mk3lzwK7NVVi0qSVJDDgNuIPwHnkAeA7btqTUmSCjKJNIfAAuJPwtG5A6fIliQNmB2B84k/CUfnMmCtLttSkqSiDAFvAeYQfyKOzK+AMV22pSRJxdkI+DXxJ+LIfKrrVpQkqVBvYLCvBhzVfRNKklSmzYHziD8ZR2QR8Nzum1CSpDKNJU0pvIj4k3Kv8yCwRdctKElSwfYFbiX+pNzrXASsUUP7SZJUrKnAL4k/Kfc6x9fReJIklWyItNzwoN0SeFMdjadmDUUXoLYNkRYo2RKYDkwgrdA1mzQr1y3A4rDqJI3mOcBPgRnRhfTIAuAA0mRBkjqwEenXw29JJ/rRRtyLgT8Dn8bFOqQcbQxcSvyv817lFmDtWlpOGiAHAqfS3VKk1wNvByb2uHZJq7YmcCLxJ+de5Rf1NJvU//YFzqHeL+DdwGvxdo+UiyHSq4JLiT9B9yL/Wk+zSf1pR9Kc2sto7kt4OoNz/1EqwcuAecSfoJvOY8DTa2ozqW9sDJxAun/fiy/i/cD+PdkySe3Yh/S9jD5JN51r8HakBMA6wGeIGf3PAw5vfhMltWkHBmPSoK/V1WBSiSaQlhCNHvEvAg5teFsltW9D0itz0SfpJrMMeEFdDSaVYizwRuBO4r+Ey/MosFOTGy2pkqn0/2JCtwPT6mowKXcvAa4l/ou3slwLrNXcpkuqaBJwGvF9Q5P5fm2tJWVqX+Bc4r9sq8vnm2oASR2ZAJxMfN/QZF5WW2tJGdkZ+A3xX7B2swhvBUi5mUB/LyR0L7Buba0lBduUtApWN7P3ReXUBtpDUnfGkWbSi+4fmsr36msqKca6pFf65hP/heomz6u7YSR1bTxwCvH9QxNZBhxcX1NJvTOJNJ3nw8R/kerIxThdsJSjCaSrdNF9RBO5AScIUkHGkd7lv5v4L0/d8cEcKU+TqH+dkFxyXH3NJDXnEOBq4r8wTeV60gBHUn6mAlcQ30/UnUWkh6elLO0HnE/8F6UXeXNNbSapftNJl82j+4m6cz7eglRmdgJOIv7L0cvcTbrcKClPW5Neo4vuK+rOq+psJKlTm1HuK3115Ojum1BSg/YC5hLfV9SZO3FmUgVaj/RK3wLivwyRebjVFpLy9TJgKfH9RZ35ZK0tJLVhLdKv3tnEfwFyyee6alFJvfAfxPcVdWYhsF2tLSStwnjSK333EH/g55b5pFshkvJ2IvH9RZ35Vb3NI400BBwB3Ej8wZ5zvttpA0vqmTWAPxHfX9SZ/WptIanlEOAy4g/wErIEFwqSSrAh/TU52UX4WqBq9EzgDOIP7NJycieNLann9iNNqhPdZ9SVw+ttHg2izUmv9PXb07K9zP6VW11ShPcT31/UletwZlJ1aH18pa+unF+x7SXFGKK/lhB2ZlJVMpn0St8jxB+8/ZQXV9kJksJMA24hvs+oI3eQHnKURjWB9EpfP06RmUOuBsa2vTckRdqb/nke4G01t436yBjSK303E3+g9nuOanOfSIr3UeL7jDriVQCt1CH05/KYueY2/CJKpRgDnE18v1FH3l5z26hgewNnEX9QDmLe18b+kZSHzemP56G8CiC2Jy3Pu4z4A3JQ8xCwzup2lKRsvJn4fqOOvLXuhlEZNia9y7+Y+IPQuGKXVJrfEd9vdJub8UHkgTIFOBaYR/zBZ4YzD9hk1btNUmY2IS3zHd13dJuX190wys/yV/ruJ/6AMyvPN1e59yTl6G3E9xvd5pLaW0XZWP5KX79MYtHPWQzssPLdKClDY4ALiO87us2BdTeM4h0CXEn8wWXaz89Xuicl5WonYCHxfUc3+U3traIw+wLnEn9QmepZ1tp/kspxHPF9R7f9zva1t4p6akfSK33RB5PpLucgqSQTgVuJ7zu6yVdqbxX1xKakV/qWEH8QmXryfCSV5JXE9xvdZA4wtfZWUWPWJS3PO5/4g8fUm7+SHjCSVI6zie87uomLBBVgEml53n54B9WsOq9GUkl2ouzJ1a4FhmpvFdViCHg9MJP4A8U0n5tI8zdIKse3ie87uslBtbeIurYN/fG+qamWdyCpJBsBjxHfd3SaH9XfJOrGy+mP1adM9dwLTEZSST5NfN/RaeYBa9ffJIOh7oUV3gF8D1iz5s9VGSaTJhk5N7oQSW27jLRi4KToQjowHriNtA0K9D7iR4MmPnOA6UgqyQeJ7zs6zcUNtIcqOAJYSvyBYPLIV5FUkrWA+4jvOzrNrvU3Sf+r4xbA1sCpeNlfw/YAfkp69VNS/haT5vL4h+hCOjQP+GN0EYNmDOnyS/Toz+SXHyOpJGtR7hLsd+NkZJV122BvAvauoxD1nVeTrgRIKsNjlDvH/kbAAdFFDJI1gXuIH/mZfPM7JJVkKuW+xv3NBtqjr3VzBeD1wIY11aH+9EKcqUsqyRzS7IAlegXptUD1wF+JH/GZ/HMJztctlWRj0nwe0X1HJzm0gfboW51eAdgR2K3OQtS39gJeFl2EpLbdDZwUXUSHXhVdQEk6HQD8Y61VqN99ChgXXYSktn0puoAOvZj6Z7jtW50OAA6qswj1ve2AN0YXIaltVwB/ii6iA+sD+0cXUYpOBwC+3qWqjqXMucalQVXqU/WHRxdQik4GAJNJ71xKVcwA3hVdhKS2/YI0MVBpfOaoTZ0MAJ6GT3WrM0cD60UXIakti0iru5ZmC2CX6CJK0MkAYErtVWhQrA18OLoISW07gfR6XWleHF1ACToZAJR4MCgf7wA2iy5CUltuAc6PLqIDz48uoASdDADm1l6FBsmapAcCJZXhh9EFdGA/vFq9Wp3cy59EGgT4HIA6tZQ0kdS10YVIWq3JpHVfJkcXUtE/Ab+JLiJnnVwBmEc6GAbBvcBd0UX0obHAcdFFSGrLXOBX0UV0wNsAq9HpPABX1FpFfuYCnwW2xzWmm3I4TtghleJn0QV0wAFAQz5I/KIPTWQRcDywQWs7d8igpn5OiQ8XSYNoPPAg8X1G1fjA8Sg6/XX721qriLcM+AnpF/9bgftaf/+gqIIGxAHAYdFFSFqtxcDJ0UV04NnRBfSrK4gf3dWR04E9V7GNP8ugvn7P33GhIKkEhxDfX1TNtxppCfEW4nduN/kLcPAo2zdEetgxus5ByOtH2Q+S8jCO8m4D+KZRQ9YgrRsdvYOr5ibgn1n9a4zbZ1DroOR20vwAkvJ2IvH9RZUsA6Y30hJ9oJsn3BdS1oQu9wPvBHZk+NL+aPZtvCIttxnwb9FFSFqt0t6rHyJNCqQGjAEuJn6UN1oeJQ1Uqk5i8d8Z1D5IeRCY1taekRRlKunHX3R/USWfa6QlBKRX5R4lfic/OYuArzP8Sl9Vf8lgG6pkGXBHBnV0EycHkvJ3OvF9RZWc3UwzaLkjSSeg6B29/ET4M2CbLrZnImkAEb0tVXIl6dmG6Dq6yWPAjDb2j6Q47ye+r6iSOTihW+M+TPyOPgN4Rg3bckAG21I1nyfd77oog1q6ia/tSHnbjfh+omp2bKQlNMJHibkScDnwghq3470B29Btlm//wRnU0k0WA9utZv9IilPiK9Kva6Ql9BSvB+bTm516C/Aa6r+884Me1V9X5pNuWyx3WgY1dZOTRtk3kuL9D/H9RJV8rZlm0MrsAlxFczvzfuDdwISG6i9tlsOzn1T/HqQld6Pr6jTLgL1WtXMkhXsD8f1ElVzQTDNoVcaTLqU/RH07cQ7wCdKrKE3WvaDGmnuRT6xkO36cQV3d5MyV7RxJWdiG+D6iSmaz+snf1IApwAdIM/B1uvNuA44B1ulBvbt0UWdUDl3JdmxJee/rPjl1PtchqV4zie8jqmTTZppB7RgCnkX6tXo+6df8qnbUPOBC4NOk1Zx6OXJ7zSh15ZglrHoCna9kUF83uRxf35Fy9b/E9xFV8sJmmkGd2oj02t5BrTyDNEqLvFTzWeIP1Cq5YpRtWR94JIMau8mRo2yfpDjvI75/qJIPNtMM6ie/Jv5ArZLVvTf/0Qxq7Ca3khaekpSXfYnvH6rkxGaaoVxeXn2q0t5Bv2w1//8Xgbt6UUhDtiAtPS0pL1eSbkGWwsmANKqxlPcGwJ5tbNdbM6izm9xPs29+SOpMk697153ZDbVBsbwCMNIWlHW5eRFwbRv/3HeAvzdcS5Omk14plZSX1V2BzMk00nNRanEAMNK20QVUdC3pVb/VWQr8v4Zradr78csr5eby6AIq6maRuL7jAGCkEgcA7foVaaGgUk0B3hldhKQR/hpdQEUOAFbgAGCkzaILqOhvFf7Zx4GjmyqkR94BrBldhKQnVOmDcuAAYAUOAEbaPLqAiqp++c4DTm2ikB5ZF3hRdBGSnjCL9JBuKbaKLiAnDgBGKm2qyE4e7PsI6ZmAUr0qugBJI5R0FWCT6AJy4gBgpJIGAItIyyFXdTXwo5pr6aWDcFEPKSclDQA2ji4gJw4Aho0HZkQXUcEddD4Jx8dJ8x2UaDqwfXQRkp5wY3QBFXgFYAUOAIZtTFnt0cmv/+XuAL5eVyEBdoguQNITbo0uoIJJ9GZV2SKUdMJr2gbRBVTUzQAA0kqLD9dRSAAf5JHy0W1f1GveBmhxADBs0AYAD5FWPiyR0wJL+SjpCgCkVWiFA4AVlTbL3B01fMZ/UeZCQZOiC5D0hLmU9SpgaX19YxwADCvtCsDMGj5jPnBsDZ/Ta/OiC5A0wt3RBVTgAKDFAcCw0g6Ke2v6nB9QbUrhHDwSXYCkEe6JLqCC9aILyIUDgGHTowuoqK4BwFLgP2r6rF4p7aEjqd85ACiQA4Bh06ILqGAu8GiNn/d/wAU1fl7TrosuQNIIdf0g6YXSrvY2xgHAsJKeLH+ggc/8AGnBoNzNoqyJR6RBUNIAYN3oAnLhAGDY5OgCKpjdwGdeDJzSwOfW7WxgWXQRkkaYFV1ABSX19Y1yADCspCsADzX0uR+m8+mFe+Wk6AIkPUUTP0qaslZ0AblwADBsSnQBFTT1FPz1pLcCcvUw8NvoIiQ9RUmzinoFoMUBwLCSBgBNjraPJd/37L9BmrtAUl5KGgB4BaDFAcCwNaILqOCxBj/7buArDX5+p+aQZi6UlJ+S5uZwANDiACAZIi0HXIqmfwUfB9zW8H+jqmMpa7pRaZDketVwZSaR+vyB5wAgGRddQEULG/78ecB7Gv5vVHEJZS9fLHViAuUsXbsguoAKxgBjo4vIQWknvqaU9OsfevNlO4V0yf1dPfhvjWYOcCSwOLgOqSljgWcBzwP2BbYFNmdkvzQbuBn4G3AecCZ5rcK3iDSraCkn1rHk/8aTemQaaRKcUvL+ZprhKSYAZ/Rom1aWhcAhjW+lFGML4Iukhb06+X5cBLwdmNjjuldlLvF9Y7txRVE9YX3iD8gqeW8zzbBSU0gdTcTJ/xU92D6p1zYBfki6qlXHd+U+0i276CuZs4jvG9tNSfO+qGEOAEY3GfhdTbW3kznAC3qyZVLvjAU+RHO/lK8F9urZ1jxVSQOAUp6tUA+sS/wBWSW9HgBAel7kONJ9via37Upg+x5tk9QrG5Lu2zfdNyyid7cIn6ykAYALAukJpT0DEPmE/oHANauoq5vMBz4OrNm7TZF6YivgJnrbR3yX3j/kXdIAYO2G2kAFmkz8AVklEVcAVjQOeBtwC91vywLg26ROUuo3O5Dmr4joJ75Hb993f7Ch7WgiTgakJ0wk/oCsko800wyVjQNeAvyCNDthlW24nLQE8YyeVy31xgzSq3qRfcWnGt/KYQ83uB11Z0JDbVAU5wFIlkYXUFEul8mXAL9uZTywN/BM0j38jUlXVsaRnui/j/Qe81XABTirn/rbGODHpFf9In0YuBQ4uQf/rVxeR2yH84roCUM0/3BbnflcM80gqSYfJb6fWJ4HgenNbi5DwLIMtrWdLGqoDYrjVMDJ45S1ylwuVwAkPdVWwDHRRaxgPZr/0bAm5cyv76//FgcAw+ZGF1CBD7BI+foU+Q3SjyLdnmtKbts7miZXUy2KA4BhJa1m5SssUp62Js8ZLIeALzT4+SXNrPdodAG5cAAwrKQrAM5iJeXpHeS7IM5zgEMb+uxpDX1uExwAtDgAGFbSZSGvAEj5GQMcEV3EanyWZvr9dRv4zKbMiS4gFw4Ahj0SXUAFXgGQ8rMP6fXXnO1KWl67biVdASjpam+jHAAMmxVdQAXOYy3l57nRBbTpE8AaNX9mST9KvALQ4gBgWEkDgMmkZXol5SNyJb4qtgDeXvNnblDz5zXp4egCcuEAYFhJAwBwCl0pNyWtYvkx6v3VvlGNn9W0+6ILyIUDgGGlDQBK+sJJgyD3+/8rWoe0FkddNqzxs5r2YHQBuXAAMKy0AYBXAKR8jCHdmivJe4FNavqskn6QeAWgxQHAsAeiC6hos+gCJD1hDOX1pxOB/1fTZ5X0g6S0vr4xpR2wTboruoCKtowuQNITlgALoovowJuAp3f5GWOo70pCL7gSaYsDgGF3RhdQkQMAKS8l3lseC3yyy8/YhPpfK2zSvdEF5MIBwLDHKGsyIAcAUl5uii6gQy8F9u/i3y+pL5oLPBRdRC4cAIxU0m2Azcl3znFpEF0TXUAXPt3Fv1vSAKC0K72NcgAwUkkDgAmkdccl5eG86AK68GzgsA7/3a3rLKRhd0QXkBMHACOVNjrs9uEdSfU5C1gcXUQXPk1nVxVL6occAKzAAcBIt0QXUFFJXzyp380C/hhdRBd2Ao7q4N8rqR8q7UdeoxwAjFTaQzw7RhcgaYTvRBfQpWNJ8wO0awKwTTOlNOK26AJy4gBgpBujC6ho5+gCJI1wCnBtdBFd2BR4Z4V/fjtgXEO1NOH66AKUr8nA4wVlIWW9fysNgiOJ7xu6yUO0v1DQqzOot0rWbnO7BoJXAEaaS1nzRE8g3beTlI+fApdHF9GFdYCPtPnPPqPJQmp2PzA7uoicOAB4qhuiC6iopC+gNAgeB/4juoguvZP21hspqf/x8v+TOAB4qtLu3+0ZXYCkpzgNODO6iC6sSXogcDRDwO7Nl1Kb0n7cNa6khzd6pbTZvPaKLkDSSn0EuJh0oizR64Avseo+cWvKuqd+XdB/d3PSQGlbYDrDbfYw6bbE9cAVwMyQ6jTCc4h/UKVKFgNTGmkJSd06ifg+opv8ZpRte20G9VXJ80fZljoNkdZW+G/g1gr1XU8acD2zR3VqJdYl/kCtmoMbaQlJ3dqONEiP7iO6yYGr2LZvZlBblWy4iu2oy1jSWxFX1VDrJcDLKPfqUdFmEn+wVsnHm2kGSTX4FvF9RDf5Mys/EV2dQW3tpuklgA8j3Sqpu+4/4XNePfcH4g/YKjmtmWaQVIMZpFeMo/uJbvKyJ23TOsDSDOqK7iP3Ac5uuPbFpAcyXf21Rz5J/AFbJXNJcwJIytNxxPcT3eQ6Rj40/uIMaqqSL4y2czqwI3Byj7fhFGBSzduhlTic+AO2ap7dSEtIqsM04EHi+4lu8tYVtufLGdRTJa8ZbedUsDFwAnHPdVyID303bmPiD9iqObaJhpBUm/cR3090k5nAWq1taeJ+d5PZenU7ZzUmA0cDczLYlrNI8zSoQXcTv6Or5IJmmkFSTSYANxPfV3STY0hP0y/LoJZ28yCdP00/AXgLaYr46O1YMd/ucHvUplOI38lVshiY2khLSKrLUcT3Fd1kNvDeDOqokt+1tWdGGkPaV7dnUP+q8uoOtkttOob4HVw1r2ikJSTVZSxlvT63sizIoIYq+Xhbe2bYi6jnXf6m8wBp3pqOuRbAqpV4Sf2w6AIkjWop7a+0l6vSliC/uM1/bh/gHOC3wC6NVVOf9UlvrKkBawDziR/lVcksXN9BKsF5xPcXg5ClpDkLRrM98EvKeq5heRaSHlpXA84nfgdXzQGNtISkOu1HfF8xCLl8lH0wgzRLY+lTNX9ulG0clbcARndedAEdODy6AEmrdSHw6+giBsA5K/l7y1/pu540t0HpV02PovxtyNKhxI/uquYOXEBCKsHTgSXE9xn9nJes0N5rAO8hPTwXXVfdOQTVbiplXh7at4nGkFS77xDfX/RrlgLrkX4QHQHclEFNTeXTdMBbAKObA1wUXUQHXhldgKS2HEt62Fj1uxrYC7gCOInuZwPMmVPBN+RjxI/uquZOHNxJpfgc8X1GP2ZhBjX0Kg/RAU8Sq/fH6AI6sAlwYHQRktryaeDh6CL60CCtkLoOHUwK5ABg9S6lw9FVsKOiC5DUloeBz0YXoeKtbr6Dp3AAsHpLSasvleYIXDZSKsWw+6uYAAAPs0lEQVR/kRYgkzo1qeq/4ACgPadFF9CBtYCXRxchqS3zcUlvdWdh1X/B98XbswFpLezSBkznAc+JLkJSW8aRFqHZMboQFWkGcG+Vf6G0E1qU+yjzdcADgZ2ji5DUliWkVUilqhaQJjiqxAFA+06JLqBDb40uQFLbfg38OboIFedG0vNqlTgAaN/J0QV06Ch8GFAqxeOkeeqlKjq6Qu0AoH03AtdFF9GBKcCR0UVIatv5wKnRRago53byLzkAqOZX0QV06B34wKdUko+Q1qeXVmcBHQ4YHQBU8/PoAjq0M/CC6CIkte1q4MfRRagIvwVmRxcxKK4hft7nTnJ6E40hqTGbk37dRfcdJu/sR4e8AlBdqVcBDgH2iC5CUttuB74RXYSydg5wYXQRg2Rb4kd8ncZLilJZ1idd3o3uO0x+WQLsjnruL8Tv/E4PmO0aaA9JzTmG+L7D5Jcv0qWx3X7AgJoEHBpdRAfGkF4LLHVSI2kQXQ68Aefz0LDLSa93V578R91bj3IfzllCuo0hqRxvJ77vMHnkbtIDogr0S+IPhE7znQbaQ1JzxgM3EN93mNjcD+yCwr2I+IOh0yzCqwBSaV5JfN9h4nI7sD3KwljgDuIPik5T6uuM0qAaIi0UFN13mN7nLGBDlJVPEX9gdJplwF71N4mkBh1MfN9hepfZwLtwzp4sbU56qC76IOk059TeIpKadhrxfYdpNkuAE4AZKGu/If5g6SYvrL9JJDVoN9LrX9F9h2kmpwO7oiIcSvwB003+TnrCWFI5fkJ832HqzYXAgagoQ8B1xB883eS9tbeKpCZtSblzkZiRuRY4AhXrPcQfRN3kEXzCVCrN14jvO0znuQN4C87IW7y1gUeJP6C6ybdrbxVJTZoOzCG+7zDVMgs4Gljzqbu0txx51GMB8DRg3+hCurAHcCZwZ3QhktoyD1gDOCi4DrVnHvAl0oROZ5Ke9Fef2IQ0w1706LKbXI0PBEolmQzcS3zfYVadRcDxZPhKn1cA6jOHNE1jya9vPA2YD1wQXYiktixqxdd58/M4ac2YlwM/BObGlqOm7UaaYS96xNlN5gHb1N0wkhozHriJ+L7DDOcC4IDRdpr60x+IP/jqOHidelIqx2uI7zcMXIOv9A20g4g/COvIu2tuF0nNGQIuI77fGNTcjq/0qeUc4g/IbvMYsF3N7SKpOaXPSlpiHiC90rdGG/tHA+K5xB+YdeTPOKKVSnIG8f3GIGQu8Blganu7RYPmbOIP0jpyTN0NI6kxe1H+g8g5Z/krfc6cqlEdQPzBWkcWA/vV3DaSmvML4vuNfssy4CR8Q0oVnE38gVtHbiVNdywpf9tR/qRkOeV0YM9Ke0AC9qZ/Lsf9oua2kdScbxHfZ5SeS4DnVW14aUX/S/yBXFfeVnPbSGrGDNKDatF9Rom5nvQu/1DlVpeepJ8uxy0C9q+3eSQ15Dji+4yScj/plb4JnTS2tCrfIP7grit3ktYMkJS3acCDxPcZuedR0it9UzprZml0T6O/1u0+CxhXawtJasL7iO8vcs1C0it9/qBR4z5G/AFfZ75Ub/NIasAE4Gbi+4ucspT0St9WXbSrVMlE0ut00Qd/nfGhQCl/RxHfV+SS04Hdu2tOqTMvJ/4LUGcWAQfX2kKS6jYG+Cvx/UVkLiIt1CaF6oflglfMLFw0SMrdYcT3FRH5O77Sp4zsRP+8Frg8N+CDNFLuzia+r+hV7iItz+vDysrOl4n/gtSdS4HJdTaSpFrtQ//MTLqqPER6l39iTW0m1W4q6X366C9L3TkT18WWcvZr4vuJJrL8lb7p9TWV1JyXEP+laSI/wvttUq62J63wGd1P1JXlr/RtUWMbST3RT+sErJgTcBAg5eq7xPcRdeR0YNea20bqmRnAw8R/kZrIl2tsJ0n12Rh4jPg+otNcCBxYe6tIAf6N+C9UU/lEje0kqT6fI75/qJqrgBc10RhSlDHAucR/uZrKR+trKkk1mQrcTXz/0E7uIL3SN7aRlpCCbUF/LRb05HymtpaSVJcjie8bRsuDwHvxzSINgLcS/4VrMl/HBwOl3PyQ+L7hyXmM9KNh7Qa3W8rKEHAq8V++JvMt0i0PSXmYDFxBfN/wOGmG1G+SHo6WBs7GpJmsor+ITeb7OD2nlJMNgRuJ6xOWkd7ld00RDbxXE3+Sbjq/Bdaqq8EkdW0GcDm97wsuAA7owfZJxfg+8SfppnMJLiAk5WQacDK9+f5fDrygN5sllWUt0jKW0SfppnMzsG1NbSapHm8DZtPcd/5IfBZIGtXuwHziT9JN517gWTW1maR6bEBaXGch9XzP7wDeAUzo5UZIJXsn8SfoXmQB8Iaa2kxSfTYizeh5C9W/10uBs4B/Acb3unCpdEP07p5cDvk8zvYl5WgI2JM0Mc/PSa8OziKd5JcP4mcC55Fe930tvs4ndW0acD3xJ+de5dTWNkuSNPB2AB4h/uTcq9wG7FVHw0mSVLqXkibMiD459yrzgXfX0nKSJBXui8SfmHudE3HSIEnSgBsHnE38SbnXuRrYpYb2kySpWOsCNxB/Uu51FgBH4wQikqQBtj39v2jQqnIGsEn3TShJUpkOARYTf0KOyCzSokmSJA2kNxF/Mo7MqcCmXbeiJEkF+jLxJ+LIzAbeTJqpTJKkgTGGNDVn9Ik4OmeRJkySJGlgTABOI/4kHJ1FwFeBqd01pyRJ5ZgCXEb8STiH3A28Dm8LSJIGxIbAzcSfgHPJOcAzu2lQSZJKsS1wD/En31yyDPgJsGU3jSpJUgl2Au4n/uSbUxaQ1lJYr4t2lSQpe7uSJsyJPvHmlkdJDwpu0HnTSpKUtz0Y3CmDHQhIkgba/sBc4k+4ueYR4LPARp02sCRJuToQmEP8yTbnLAS+D+zcYRtLUlF8T3pw7AP8HlgnupDMPQ78gXR74HTSWwQq3xTSAlo7AU8HtgLGtf6/JcAdwI3AtaT9/kBAjZLUmN2A+4j/tV1KbgI+CKzfSWMr3FqkCaH+D5hP+/t9KXAR8AFgWs+rlqSG7ADcRfzJtaTMB04k3Urxqln+9gaOJz3f0e2+n0N6fdSHRSX1ha2AW4g/sZaYW4D/BLap3Opq0gzgPcBVNLPfZwFvwAGgpD6wMc11loOQZcAFwL+TTj7qvXWANwFnkO7j92K/nwas24uNk6QmTSMtoxt9Mi09S4HzSb9AN6u0B1TVdOCNwCmkNzci9vd1wNZNb6gkNW0N0lz50SfRfsky4C/AJ4B9gbHt7wqtwg7Ah0hXXHr1S391uR/YpcmNlqReGAI+T3yn2o95EPgf0tPom7a7QwbcdOBVwAnAbcTvw1XlTmCTZppAknrrXaTL2dEdaz/nZuB7pAHBFm3tlf63MXAE8GXgcso6Bq8EJtbfJFLzfKJVT/ZPwI9JE6eoefcBlwCXtv56CfBwaEXNmgbsTlqnYm/SVNWlPzfxZeB90UVIVTkA0MrsTHrIaqvoQgbUHaQZ6a5u/fUa4HrgsciiKpoIbAds38pupJN+Px5Ty4DnkJ5RkIrhAECrsh7wC+C50YXoCfeSbiEsz23APcDM1l8f6mEtE0mvP24KbE76Fb9Z68/btf46SP3Ln4H9oouQqhikL6iqGwd8hfSuu/K3gHRLYRYwm3QrYXYri0gz4wHMI71CtzITSFPoTgPWbP15aut/TweeRhocrtXIFpTthaR1JKQiOABQO94CfI10cpC0cqcBh0YXIbXLAYDatSfplkA/3sOV6rCU9FrgvdGFSO0YE12AinE5sBfwm+hCpEyNBV4RXYTULgcAquIh4HDSlLeLg2uRcnRgdAFSu7wFoE49G/gZsFF0IVJGZpImNpKy5xUAdep80oQup0QXImVkI9JbE1L2HACoGw8ALwGOAuYG1yLlwisAKoIDANXhRNIsbxdFFyJlYIPoAqR2OABQXW4iPRfwYXxAUJKy5wBAdVoCfJa0wMvVwbVIUZZEFyC1wwGAmnAp8EzgWNIUtNIg6efVHNVHfA1QTdsJ+A6wb3QhUg88DkwmrbcgZc0rAGratcABwHspazlbqRMz8eSvQjgAUC8sJa0quDPw6+BapCZdEF2A1C4HAOql24CXAgcDf4stRWrEWdEFSO3yGQBFGQ/8G/AJYEpwLVIdlgCbAfdEFyK1wysAirIY+CrpIcGTSA9PSSX7PZ78VRAHAIp2J/AqYD+8f6qyfSO6AEkq2SHAVaQrAsaUkvORCjM2ugDpSW4BTiBdSn0m6Z1qKWfLgFcDd0UXIkn9YjJwNGnVwehfeMasKl9AKpBvAagEk4F/Bz4ArB9ci7SiK4F9gIXRhUhSP1sLeDfp9kD0rz5j7gQ2RSqUzwCoJIuBi4HjgVnAjsC00Io0qO4hPbB6S3QhkjSIxgCHARcR/2vQDE6uBjZHkpSFQ4A/kJ7Ijj5BmP7ND4CpSJKyszPw38AjxJ8sTP/kZuCFSJKyNxl4K/BX4k8eptxcDxxFWrtCklSY/YATSeu0R59QTP6ZB/yYtGql06VLUh+YCrwOOB2fFTBPzbWkiaeca0IDwYmANKi2Bv6lla2Ca1GcO0mrUZ5IWoNCGhgOADTohoD9gSOAlwGbxJajHrgP+CXwM+BC0tUgaeA4AJCGDQH7Aq8AXo7veveT+4H/A34OnA0sjS1HiucAQFq5IdJqhIcD/wjsjt+X0lwD/JZ04r8Yf+lLI9ihSe2ZQRoIvBD4B5wMJkfzgQuAU4Hf4DS90qgcAEjVjSc9N/A84CBgb2CNyIIG1FLgMuBM4AzS/fwFoRVJBXEAIHVvIvAs0mDgIBwQNGUxcDlp7YdzSffyZ4dWJBXMAYBUvzWAPUgDgeXZNrSiMt1LOtlfCPyZ9Gt/fmhFUh9xACD1xrqkgcCewK7ATsD2OMUspIfzbiZN27xiZkYWJfU7BwBSnAmkQcDOwC6tP2/dyuTAupqyELiJNL/+Da1cR1ped25gXdJAcgAg5WkDYBvSYGAr0pwEG5AmKtoQmB5X2irNB24H7mrldtJMe3eSTvy34/v3UjYcAEhlWoM0ENgEWBtYZyWZwvDritNIC9usRbryMJqFpAVx5rT+/CjwWOvPs1p5cIU/zyJNtPNILVsmSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIy8/8BuZZuLjPFXowAAAAASUVORK5CYII=";
|
|
2608
|
+
|
|
2609
|
+
var img$2 = "data:image/png;base64,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";
|
|
2610
|
+
|
|
2611
|
+
var img$1 = "data:image/png;base64,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";
|
|
2612
|
+
|
|
2613
|
+
var img = "data:image/png;base64,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";
|
|
2614
|
+
|
|
2580
2615
|
/**
|
|
2581
2616
|
* Gets the MIME type for preview rendering
|
|
2582
2617
|
*/
|
|
@@ -2686,7 +2721,7 @@ const FilePreviewModal = ({ file, isOpen, onClose, }) => {
|
|
|
2686
2721
|
const fileName = file instanceof File ? file.name : file.split('/').pop() || 'file';
|
|
2687
2722
|
const canPreview = canPreviewInWeb(file);
|
|
2688
2723
|
console.log('Modal rendering - fileName:', fileName, 'canPreview:', canPreview, 'previewUrl:', previewUrl, 'previewType:', previewType);
|
|
2689
|
-
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("
|
|
2724
|
+
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..." }) }) })) })] }) }));
|
|
2690
2725
|
// Render modal using portal to ensure it's at the document body level
|
|
2691
2726
|
if (typeof document !== 'undefined' && document.body) {
|
|
2692
2727
|
console.log('Rendering modal via portal to document.body');
|
|
@@ -2846,10 +2881,6 @@ const deserializeValue = (value) => {
|
|
|
2846
2881
|
return value;
|
|
2847
2882
|
};
|
|
2848
2883
|
|
|
2849
|
-
var img$1 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGxmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDktMjRUMTI6Mjc6NDArMDU6MzAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjYtMDEtMDJUMTY6NTA6MDQrMDU6MzAiIHhtcDpNb2RpZnlEYXRlPSIyMDI2LTAxLTAyVDE2OjUwOjA0KzA1OjMwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjljMDI0ZTVhLWJiMWItNDBiMi05NThmLTg5YjExMTE5NGI4MSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjMzZDZiMTBiLTQzNjYtYTc0Ny1iOTZlLWI4ZTBhZjQxMTkzOCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI1M2M1ZmRhLTlkYzctNGQ0MC04Y2E3LThmMTQ2MmU4OWMxNSIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjUzYzVmZGEtOWRjNy00ZDQwLThjYTctOGYxNDYyZTg5YzE1IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDQ5N2Y5YmYtMWZiMi00MWJlLTg5ZGItZGFiMDZmMjEwODE4IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWMwMjRlNWEtYmIxYi00MGIyLTk1OGYtODliMTExMTk0YjgxIiBzdEV2dDp3aGVuPSIyMDI2LTAxLTAyVDE2OjUwOjA0KzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7pSLHQ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";
|
|
2850
|
-
|
|
2851
|
-
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==";
|
|
2852
|
-
|
|
2853
2884
|
const FileInputWidget = ({ config }) => {
|
|
2854
2885
|
const { value, error, touched, isEnabled, onChange, onBlur, config: widgetConfig, } = useBaseWidget({ config });
|
|
2855
2886
|
const { translate, translateConfig } = useWidgetTranslation();
|
|
@@ -3044,7 +3075,7 @@ const FileInputWidget = ({ config }) => {
|
|
|
3044
3075
|
const fileName = file instanceof File ? file.name : file.split('/').pop() || file;
|
|
3045
3076
|
const canPreview = canPreviewInWeb(file);
|
|
3046
3077
|
console.log('Single file:', fileName, 'canPreview:', canPreview);
|
|
3047
|
-
const fileIconElement = (jsxRuntimeExports.jsx("img", { src: img, alt: "File icon", style: {
|
|
3078
|
+
const fileIconElement = (jsxRuntimeExports.jsx("img", { src: img$e, alt: "File icon", style: {
|
|
3048
3079
|
width: '15px',
|
|
3049
3080
|
height: '18px',
|
|
3050
3081
|
aspectRatio: '5/6',
|
|
@@ -3066,7 +3097,7 @@ const FileInputWidget = ({ config }) => {
|
|
|
3066
3097
|
return (jsxRuntimeExports.jsx("div", { className: "flex flex-wrap gap-2", children: files.map((file, index) => {
|
|
3067
3098
|
const fileName = file instanceof File ? file.name : file.split('/').pop() || file;
|
|
3068
3099
|
const canPreview = canPreviewInWeb(file);
|
|
3069
|
-
const fileIconElement = (jsxRuntimeExports.jsx("img", { src: img, alt: "File icon", style: {
|
|
3100
|
+
const fileIconElement = (jsxRuntimeExports.jsx("img", { src: img$e, alt: "File icon", style: {
|
|
3070
3101
|
width: '15px',
|
|
3071
3102
|
height: '18px',
|
|
3072
3103
|
aspectRatio: '5/6',
|
|
@@ -3108,7 +3139,7 @@ const FileInputWidget = ({ config }) => {
|
|
|
3108
3139
|
fontWeight: 400,
|
|
3109
3140
|
lineHeight: '24px',
|
|
3110
3141
|
textAlign: 'left'
|
|
3111
|
-
}, children: translate('common.uploadFile') || 'Upload File' }), jsxRuntimeExports.jsx("img", { src: img$
|
|
3142
|
+
}, children: translate('common.uploadFile') || 'Upload File' }), jsxRuntimeExports.jsx("img", { src: img$d, alt: "Upload", style: {
|
|
3112
3143
|
width: '18px',
|
|
3113
3144
|
height: '18px',
|
|
3114
3145
|
aspectRatio: '1/1',
|
|
@@ -3219,6 +3250,60 @@ const namespaceSectionConfig = (section, namespace) => {
|
|
|
3219
3250
|
return namespaced;
|
|
3220
3251
|
};
|
|
3221
3252
|
|
|
3253
|
+
const collectWidgets = (panels) => {
|
|
3254
|
+
let widgets = [];
|
|
3255
|
+
panels.forEach((panel) => {
|
|
3256
|
+
if (panel.widgets) {
|
|
3257
|
+
widgets = [...widgets, ...panel.widgets];
|
|
3258
|
+
}
|
|
3259
|
+
if (panel.panels) {
|
|
3260
|
+
widgets = [...widgets, ...collectWidgets(panel.panels)];
|
|
3261
|
+
}
|
|
3262
|
+
});
|
|
3263
|
+
return widgets;
|
|
3264
|
+
};
|
|
3265
|
+
const sectionValidate = (section, currentSchemaData, dispatch) => {
|
|
3266
|
+
const allWidgets = collectWidgets(section.panels);
|
|
3267
|
+
let isValid = true;
|
|
3268
|
+
for (const widget of allWidgets) {
|
|
3269
|
+
const isVisible = shouldShowWidget(widget['widget-data-options'], currentSchemaData);
|
|
3270
|
+
if (!isVisible)
|
|
3271
|
+
continue;
|
|
3272
|
+
const widgetId = widget['widget-id'];
|
|
3273
|
+
const value = getWidgetValue(currentSchemaData, widget['widget-data-path'], widgetId);
|
|
3274
|
+
const errors = validateWidget(value, widget['widget-data-validation'], widget['widget-required']);
|
|
3275
|
+
if (errors.length > 0) {
|
|
3276
|
+
isValid = false;
|
|
3277
|
+
dispatch(setTouched({ widgetId, touched: true }));
|
|
3278
|
+
dispatch(setError({ widgetId, errors }));
|
|
3279
|
+
}
|
|
3280
|
+
else {
|
|
3281
|
+
dispatch(setTouched({ widgetId, touched: false }));
|
|
3282
|
+
dispatch(setError({ widgetId, errors: [] }));
|
|
3283
|
+
}
|
|
3284
|
+
}
|
|
3285
|
+
// Supporting Documents
|
|
3286
|
+
section['section-supporting-documents']?.forEach((doc, index) => {
|
|
3287
|
+
const widgetId = `supporting-doc-${section['section-id']}-${index}`;
|
|
3288
|
+
if (doc['document-required']) {
|
|
3289
|
+
const file = getValueByPath(currentSchemaData, doc['document-data-path']);
|
|
3290
|
+
if (!file) {
|
|
3291
|
+
isValid = false;
|
|
3292
|
+
dispatch(setTouched({ widgetId, touched: true }));
|
|
3293
|
+
dispatch(setError({
|
|
3294
|
+
widgetId,
|
|
3295
|
+
errors: ['This document is required'],
|
|
3296
|
+
}));
|
|
3297
|
+
}
|
|
3298
|
+
else {
|
|
3299
|
+
dispatch(setTouched({ widgetId, touched: false }));
|
|
3300
|
+
dispatch(setError({ widgetId, errors: [] }));
|
|
3301
|
+
}
|
|
3302
|
+
}
|
|
3303
|
+
});
|
|
3304
|
+
return isValid;
|
|
3305
|
+
};
|
|
3306
|
+
|
|
3222
3307
|
/**
|
|
3223
3308
|
* Renders a section with its panels
|
|
3224
3309
|
*
|
|
@@ -3227,7 +3312,7 @@ const namespaceSectionConfig = (section, namespace) => {
|
|
|
3227
3312
|
* - Panels wrap when they exceed available width
|
|
3228
3313
|
* - Sections can sit side-by-side if there's space
|
|
3229
3314
|
*/
|
|
3230
|
-
const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequestHandler, schemaData, onValueChange, gridColumnSpan, onSectionSave, hideEditButton = false, mode = 'RegistryView', namespace, changeRequestType, showChangeRequestLabel = true, }) => {
|
|
3315
|
+
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, }) => {
|
|
3231
3316
|
const { translateConfig, translate } = useWidgetTranslation();
|
|
3232
3317
|
const { schemaData: contextSchemaData, dataSourceRequestHandler: contextDataSourceRequestHandler } = useWidgetContext();
|
|
3233
3318
|
const store = reactRedux.useStore();
|
|
@@ -3286,11 +3371,12 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3286
3371
|
// Try to get from schemaData first, then from Redux store
|
|
3287
3372
|
// Merge both sources to ensure we get the data
|
|
3288
3373
|
const dataSource = { ...storeValues, ...currentSchemaData };
|
|
3374
|
+
const recordPath = Object.keys(dataSource)[0];
|
|
3289
3375
|
const result = {
|
|
3290
|
-
createdBy: getValueByPath(dataSource,
|
|
3291
|
-
createdDate: getValueByPath(dataSource,
|
|
3292
|
-
approvedBy: getValueByPath(dataSource,
|
|
3293
|
-
approvedDate: getValueByPath(dataSource,
|
|
3376
|
+
createdBy: getValueByPath(dataSource, `${recordPath}.created_by`),
|
|
3377
|
+
createdDate: getValueByPath(dataSource, `${recordPath}.created_at`),
|
|
3378
|
+
approvedBy: getValueByPath(dataSource, `${recordPath}.last_approved_by`),
|
|
3379
|
+
approvedDate: getValueByPath(dataSource, `${recordPath}.last_approved_at`),
|
|
3294
3380
|
};
|
|
3295
3381
|
return result;
|
|
3296
3382
|
}, [mode, currentSchemaData, storeValues]);
|
|
@@ -3299,6 +3385,21 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3299
3385
|
const sectionId = sectionToRender['section-id'];
|
|
3300
3386
|
const gridId = `section-panels-${sectionId}`;
|
|
3301
3387
|
const sectionClassId = `section-${sectionId}`;
|
|
3388
|
+
// IntakeForm mode: accordion expand/collapse state (supports toggle)
|
|
3389
|
+
const [standaloneExpanded, setStandaloneExpanded] = React.useState(true); // For sectionIndex undefined (standalone use)
|
|
3390
|
+
const isExpandedFromContainer = typeof sectionIndex === 'number' && expandedSectionIndex === sectionIndex;
|
|
3391
|
+
const isExpandedStandalone = sectionIndex === undefined && standaloneExpanded;
|
|
3392
|
+
const isExpanded = mode === 'IntakeForm' && (isExpandedFromContainer || isExpandedStandalone);
|
|
3393
|
+
const handleAccordionToggle = React.useCallback(() => {
|
|
3394
|
+
if (mode !== 'IntakeForm')
|
|
3395
|
+
return;
|
|
3396
|
+
if (typeof sectionIndex === 'number' && onExpandSection) {
|
|
3397
|
+
onExpandSection(sectionIndex);
|
|
3398
|
+
}
|
|
3399
|
+
else if (sectionIndex === undefined) {
|
|
3400
|
+
setStandaloneExpanded(prev => !prev);
|
|
3401
|
+
}
|
|
3402
|
+
}, [mode, sectionIndex, onExpandSection]);
|
|
3302
3403
|
// Recursively count all vertical panels, especially those nested inside horizontal panels
|
|
3303
3404
|
// Typically: horizontal panels at first level contain vertical panels at second level
|
|
3304
3405
|
// Accounts for panel-column-span: a panel with column-span 3 counts as 3 columns
|
|
@@ -3433,13 +3534,15 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3433
3534
|
});
|
|
3434
3535
|
};
|
|
3435
3536
|
// Create section with widgets readonly/editable based on edit mode
|
|
3537
|
+
// IntakeForm: editable when isDraft is true or undefined; readonly when isDraft is false. Edit Details never shown.
|
|
3538
|
+
// RegistryView/CRView: use isEditMode (edit overlay flow)
|
|
3539
|
+
const widgetsEditable = mode === 'IntakeForm' ? (isDraft !== false) : isEditMode;
|
|
3436
3540
|
const editableSection = React.useMemo(() => {
|
|
3437
|
-
// Always apply readonly/editable state based on edit mode
|
|
3438
3541
|
return {
|
|
3439
3542
|
...sectionToRender,
|
|
3440
|
-
panels: makePanelsEditable(sectionToRender.panels,
|
|
3543
|
+
panels: makePanelsEditable(sectionToRender.panels, widgetsEditable),
|
|
3441
3544
|
};
|
|
3442
|
-
}, [sectionToRender,
|
|
3545
|
+
}, [sectionToRender, widgetsEditable]);
|
|
3443
3546
|
// Handle edit button click
|
|
3444
3547
|
const handleEdit = () => {
|
|
3445
3548
|
// Capture height BEFORE entering edit mode to preserve space
|
|
@@ -3450,8 +3553,9 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3450
3553
|
setIsEditMode(true);
|
|
3451
3554
|
};
|
|
3452
3555
|
// Render the edit section (absolutely positioned duplicate via portal)
|
|
3556
|
+
// IntakeForm never uses this overlay - content is shown inline in accordion
|
|
3453
3557
|
const renderEditSection = () => {
|
|
3454
|
-
if (!isEditMode || !editSectionPosition)
|
|
3558
|
+
if (mode === 'IntakeForm' || !isEditMode || !editSectionPosition)
|
|
3455
3559
|
return null;
|
|
3456
3560
|
const editGridId = `${gridId}-edit`;
|
|
3457
3561
|
return reactDom.createPortal(jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("style", { children: `
|
|
@@ -3509,79 +3613,164 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3509
3613
|
}, 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) => {
|
|
3510
3614
|
const isLastPanel = index === editableSection.panels.length - 1;
|
|
3511
3615
|
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}`));
|
|
3512
|
-
}), 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("
|
|
3616
|
+
}), 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) => {
|
|
3513
3617
|
const docConfig = createDocumentWidgetConfig(doc, sectionId, index);
|
|
3514
3618
|
return (jsxRuntimeExports.jsx("div", { className: "supporting-document-item", children: jsxRuntimeExports.jsx(FileInputWidget, { config: docConfig }) }, `${sectionId}-doc-${index}`));
|
|
3515
|
-
}) }))] })] })), 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);
|
|
3619
|
+
}) }))] })] })), 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);
|
|
3516
3620
|
};
|
|
3517
|
-
const
|
|
3518
|
-
|
|
3519
|
-
|
|
3520
|
-
if (panel.widgets) {
|
|
3521
|
-
widgets = [...widgets, ...panel.widgets];
|
|
3522
|
-
}
|
|
3523
|
-
if (panel.panels) {
|
|
3524
|
-
widgets = [...widgets, ...collectWidgets(panel.panels)];
|
|
3525
|
-
}
|
|
3526
|
-
});
|
|
3527
|
-
return widgets;
|
|
3528
|
-
};
|
|
3529
|
-
const trackSectionChages = (widgets, sourceData, useNamespacedPaths = false) => {
|
|
3621
|
+
const trackSectionChages = (widgets, sourceData, pathPrefix) => {
|
|
3622
|
+
if (!widgets || widgets.length === 0)
|
|
3623
|
+
return [];
|
|
3530
3624
|
const snapshot = {};
|
|
3531
3625
|
let hasTable = false;
|
|
3532
|
-
|
|
3626
|
+
if (!sectionRegisterId)
|
|
3627
|
+
return [];
|
|
3628
|
+
const resolvePath = (path) => (pathPrefix ? `${pathPrefix}.${path}` : path);
|
|
3533
3629
|
widgets.forEach(widget => {
|
|
3534
|
-
const
|
|
3535
|
-
if (!
|
|
3630
|
+
const widgetPath = widget['widget-data-path'];
|
|
3631
|
+
if (!widgetPath)
|
|
3536
3632
|
return;
|
|
3537
|
-
if (widget['widget-type'] === 'table' ||
|
|
3633
|
+
if (widget['widget-type'] === 'table' ||
|
|
3634
|
+
widget['widget-type'] === 'simple-table' ||
|
|
3635
|
+
widget['widget'] === 'table') {
|
|
3538
3636
|
hasTable = true;
|
|
3539
3637
|
}
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
: Object.fromEntries(Object.entries(originalDataPath).map(([key, path]) => [key, `${namespace}.${path}`])))
|
|
3545
|
-
: originalDataPath;
|
|
3546
|
-
// Always store snapshot using original paths (for change tracking)
|
|
3547
|
-
// Handle multi-path (object) or single path (string)
|
|
3548
|
-
if (typeof originalDataPath === 'object') {
|
|
3549
|
-
// Multi-path: store each path separately using original paths
|
|
3550
|
-
Object.entries(originalDataPath).forEach(([key, path]) => {
|
|
3551
|
-
if (typeof path === 'string') {
|
|
3552
|
-
// Read from source using namespaced path if needed
|
|
3553
|
-
const readPath = useNamespacedPaths && namespace ? `${namespace}.${path}` : path;
|
|
3554
|
-
snapshot[path] = getValueByPath(sourceData, readPath);
|
|
3638
|
+
if (typeof widgetPath === 'object') {
|
|
3639
|
+
Object.values(widgetPath).forEach((path) => {
|
|
3640
|
+
if (typeof path === 'string' && path.length > 0) {
|
|
3641
|
+
snapshot[path] = getValueByPath(sourceData, resolvePath(path));
|
|
3555
3642
|
}
|
|
3556
3643
|
});
|
|
3557
3644
|
}
|
|
3558
|
-
else if (typeof
|
|
3559
|
-
|
|
3560
|
-
const readPath = useNamespacedPaths && namespace ? `${namespace}.${originalDataPath}` : originalDataPath;
|
|
3561
|
-
snapshot[originalDataPath] = getValueByPath(sourceData, readPath);
|
|
3645
|
+
else if (typeof widgetPath === 'string') {
|
|
3646
|
+
snapshot[widgetPath] = getValueByPath(sourceData, resolvePath(widgetPath));
|
|
3562
3647
|
}
|
|
3563
3648
|
});
|
|
3564
|
-
if (hasTable
|
|
3649
|
+
if (!hasTable) {
|
|
3565
3650
|
const cleanedSnapshot = {};
|
|
3566
|
-
Object.entries(snapshot).forEach(([
|
|
3567
|
-
const
|
|
3568
|
-
?
|
|
3569
|
-
:
|
|
3570
|
-
cleanedSnapshot[
|
|
3651
|
+
Object.entries(snapshot).forEach(([fullPath, value]) => {
|
|
3652
|
+
const fieldPath = fullPath.includes('.')
|
|
3653
|
+
? fullPath.split('.').slice(1).join('.')
|
|
3654
|
+
: fullPath;
|
|
3655
|
+
cleanedSnapshot[fieldPath] = value;
|
|
3571
3656
|
});
|
|
3657
|
+
const sectionData = pathPrefix
|
|
3658
|
+
? getValueByPath(sourceData, resolvePath(sectionRegisterId))
|
|
3659
|
+
: sourceData[sectionRegisterId];
|
|
3572
3660
|
return [
|
|
3573
|
-
{
|
|
3661
|
+
{
|
|
3662
|
+
...sectionData,
|
|
3574
3663
|
...cleanedSnapshot,
|
|
3575
|
-
edit_action: "UPDATE"
|
|
3576
|
-
}
|
|
3664
|
+
edit_action: "UPDATE",
|
|
3665
|
+
},
|
|
3577
3666
|
];
|
|
3578
3667
|
}
|
|
3579
|
-
const
|
|
3580
|
-
return
|
|
3668
|
+
const tableEntry = Object.entries(snapshot).find(([key, value]) => key.endsWith('.records') && Array.isArray(value));
|
|
3669
|
+
return tableEntry ? tableEntry[1] : [];
|
|
3581
3670
|
};
|
|
3582
3671
|
// Get original section (without namespace) for building snapshots
|
|
3583
3672
|
// This ensures we use the original data paths when saving
|
|
3584
3673
|
const originalSection = section;
|
|
3674
|
+
/** Build a full section snapshot (records + files) for dirty comparison. Works with or without sectionRegisterId (e.g. IntakeForm). */
|
|
3675
|
+
const buildSectionSnapshot = React.useCallback((sourceData, pathPrefix) => {
|
|
3676
|
+
const sectionWidgets = collectWidgets(originalSection.panels);
|
|
3677
|
+
const resolvePath = (path) => (pathPrefix ? `${pathPrefix}.${path}` : path);
|
|
3678
|
+
let records;
|
|
3679
|
+
const recordsFromTrack = trackSectionChages(sectionWidgets, sourceData, pathPrefix);
|
|
3680
|
+
if (recordsFromTrack.length > 0) {
|
|
3681
|
+
records = recordsFromTrack;
|
|
3682
|
+
}
|
|
3683
|
+
else {
|
|
3684
|
+
// IntakeForm / no sectionRegisterId: build comparable snapshot from widget values
|
|
3685
|
+
const snapshot = {};
|
|
3686
|
+
sectionWidgets.forEach((widget) => {
|
|
3687
|
+
const widgetPath = widget['widget-data-path'];
|
|
3688
|
+
if (!widgetPath)
|
|
3689
|
+
return;
|
|
3690
|
+
if (typeof widgetPath === 'object') {
|
|
3691
|
+
Object.values(widgetPath).forEach((path) => {
|
|
3692
|
+
if (typeof path === 'string' && path.length > 0) {
|
|
3693
|
+
snapshot[path] = getValueByPath(sourceData, resolvePath(path));
|
|
3694
|
+
}
|
|
3695
|
+
});
|
|
3696
|
+
}
|
|
3697
|
+
else if (typeof widgetPath === 'string') {
|
|
3698
|
+
snapshot[widgetPath] = getValueByPath(sourceData, resolvePath(widgetPath));
|
|
3699
|
+
}
|
|
3700
|
+
});
|
|
3701
|
+
records = [{ ...snapshot }];
|
|
3702
|
+
}
|
|
3703
|
+
const files = [];
|
|
3704
|
+
if (hasSupportingDocuments) {
|
|
3705
|
+
const originalSupportingDocuments = originalSection['section-supporting-documents'] || [];
|
|
3706
|
+
originalSupportingDocuments.forEach((doc) => {
|
|
3707
|
+
const originalDataPath = doc['document-data-path'];
|
|
3708
|
+
const storeDataPath = pathPrefix && originalDataPath
|
|
3709
|
+
? `${pathPrefix}.${originalDataPath}`
|
|
3710
|
+
: originalDataPath;
|
|
3711
|
+
files.push(getValueByPath(sourceData, storeDataPath));
|
|
3712
|
+
});
|
|
3713
|
+
}
|
|
3714
|
+
return { records, files };
|
|
3715
|
+
}, [originalSection, hasSupportingDocuments]);
|
|
3716
|
+
// Capture baseline when entering edit mode (used for isDirty comparison)
|
|
3717
|
+
const baselineSnapshotRef = React.useRef(null);
|
|
3718
|
+
// IntakeForm only: increment when baseline is updated after save - forces badge to update (refs don't trigger re-renders)
|
|
3719
|
+
const [intakeFormBaselineTrigger, setIntakeFormBaselineTrigger] = React.useState(0);
|
|
3720
|
+
// IntakeForm: treat as edit mode for dirty tracking when isDraft. RegistryView: use isEditMode.
|
|
3721
|
+
const effectiveEditModeForDirty = mode === 'IntakeForm' ? (isDraft !== false) : isEditMode;
|
|
3722
|
+
// Compute isDirty: compare current store state to baseline (only when in edit mode)
|
|
3723
|
+
const isDirty = React.useMemo(() => {
|
|
3724
|
+
if (!effectiveEditModeForDirty)
|
|
3725
|
+
return false;
|
|
3726
|
+
const baseline = baselineSnapshotRef.current;
|
|
3727
|
+
if (!baseline)
|
|
3728
|
+
return false;
|
|
3729
|
+
const currentSnapshot = buildSectionSnapshot(storeValues, namespace);
|
|
3730
|
+
return JSON.stringify(baseline) !== JSON.stringify(currentSnapshot);
|
|
3731
|
+
}, [effectiveEditModeForDirty, storeValues, namespace, buildSectionSnapshot, intakeFormBaselineTrigger]);
|
|
3732
|
+
// Set baseline when entering edit mode; clear when leaving (baseline captured only on entry)
|
|
3733
|
+
React.useEffect(() => {
|
|
3734
|
+
if (effectiveEditModeForDirty) {
|
|
3735
|
+
const oldSchemaData = schemaData || contextSchemaData || {};
|
|
3736
|
+
if (namespace) {
|
|
3737
|
+
const namespacedSchema = getValueByPath(oldSchemaData, namespace);
|
|
3738
|
+
baselineSnapshotRef.current = namespacedSchema
|
|
3739
|
+
? buildSectionSnapshot(namespacedSchema)
|
|
3740
|
+
: buildSectionSnapshot(oldSchemaData);
|
|
3741
|
+
}
|
|
3742
|
+
else {
|
|
3743
|
+
baselineSnapshotRef.current = buildSectionSnapshot(oldSchemaData);
|
|
3744
|
+
}
|
|
3745
|
+
}
|
|
3746
|
+
else {
|
|
3747
|
+
baselineSnapshotRef.current = null;
|
|
3748
|
+
onSectionDirtyChange?.(sectionId, false);
|
|
3749
|
+
}
|
|
3750
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- baseline must be captured only when effectiveEditModeForDirty toggles
|
|
3751
|
+
}, [effectiveEditModeForDirty]);
|
|
3752
|
+
// Notify parent when isDirty changes (only while in edit mode)
|
|
3753
|
+
React.useEffect(() => {
|
|
3754
|
+
if (effectiveEditModeForDirty && onSectionDirtyChange) {
|
|
3755
|
+
onSectionDirtyChange(sectionId, isDirty);
|
|
3756
|
+
}
|
|
3757
|
+
}, [effectiveEditModeForDirty, isDirty, sectionId, onSectionDirtyChange]);
|
|
3758
|
+
// IntakeForm only: section status badge (Saved / Modified and not saved / no badge when pristine)
|
|
3759
|
+
const intakeFormSectionStatus = React.useMemo(() => {
|
|
3760
|
+
if (mode !== 'IntakeForm')
|
|
3761
|
+
return null;
|
|
3762
|
+
const hasValue = (v) => v !== undefined && v !== null && (typeof v !== 'string' || v.trim().length > 0);
|
|
3763
|
+
const currentSnapshot = buildSectionSnapshot(storeValues, namespace);
|
|
3764
|
+
const record = currentSnapshot.records?.[0];
|
|
3765
|
+
const hasData = record &&
|
|
3766
|
+
typeof record === 'object' &&
|
|
3767
|
+
Object.values(record).some((v) => hasValue(v));
|
|
3768
|
+
if (isDirty)
|
|
3769
|
+
return 'modified';
|
|
3770
|
+
if (hasData)
|
|
3771
|
+
return 'saved';
|
|
3772
|
+
return null;
|
|
3773
|
+
}, [mode, isDirty, storeValues, namespace, buildSectionSnapshot]);
|
|
3585
3774
|
// Handle save button click
|
|
3586
3775
|
const handleSave = async () => {
|
|
3587
3776
|
if (!store || !onSectionSave) {
|
|
@@ -3594,10 +3783,14 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3594
3783
|
const sectionWidgets = collectWidgets(originalSection.panels);
|
|
3595
3784
|
const currentState = store.getState().widget;
|
|
3596
3785
|
const currentSchemaData = currentState.values || {};
|
|
3786
|
+
const isSectionValid = sectionValidate(originalSection, currentSchemaData, dispatch);
|
|
3787
|
+
if (!isSectionValid) {
|
|
3788
|
+
return;
|
|
3789
|
+
}
|
|
3597
3790
|
// schema data before section change
|
|
3598
3791
|
const oldSchemaData = schemaData || contextSchemaData;
|
|
3599
|
-
// schema data after section change
|
|
3600
|
-
const newSchemaData = trackSectionChages(sectionWidgets, currentSchemaData);
|
|
3792
|
+
// schema data after section change (use namespace when store has namespaced paths)
|
|
3793
|
+
const newSchemaData = trackSectionChages(sectionWidgets, currentSchemaData, namespace);
|
|
3601
3794
|
// Include supporting documents in the snapshot if they exist
|
|
3602
3795
|
const sectionFiles = [];
|
|
3603
3796
|
if (hasSupportingDocuments) {
|
|
@@ -3615,7 +3808,8 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3615
3808
|
if (JSON.stringify(oldSchemaData) !== JSON.stringify(newSchemaData)) {
|
|
3616
3809
|
try {
|
|
3617
3810
|
const sectionchanges = {
|
|
3618
|
-
section_id:
|
|
3811
|
+
section_id: dbSectionId,
|
|
3812
|
+
section_register_id: sectionRegisterId,
|
|
3619
3813
|
records: [...newSchemaData],
|
|
3620
3814
|
files: [...sectionFiles]
|
|
3621
3815
|
};
|
|
@@ -3627,6 +3821,51 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3627
3821
|
}
|
|
3628
3822
|
setIsEditMode(false);
|
|
3629
3823
|
};
|
|
3824
|
+
// IntakeForm: save section then collapse current and expand next (or stay on final section)
|
|
3825
|
+
const handleIntakeFormSave = React.useCallback(async () => {
|
|
3826
|
+
if (!store || !onSectionSave || sectionIndex === undefined)
|
|
3827
|
+
return;
|
|
3828
|
+
const sectionWidgets = collectWidgets(originalSection.panels);
|
|
3829
|
+
const currentState = store.getState().widget;
|
|
3830
|
+
const currentSchemaData = currentState.values || {};
|
|
3831
|
+
const isSectionValid = sectionValidate(originalSection, currentSchemaData, dispatch);
|
|
3832
|
+
if (!isSectionValid)
|
|
3833
|
+
return;
|
|
3834
|
+
const oldSchemaData = schemaData || contextSchemaData;
|
|
3835
|
+
const newSchemaData = trackSectionChages(sectionWidgets, currentSchemaData, namespace);
|
|
3836
|
+
const sectionFiles = [];
|
|
3837
|
+
if (hasSupportingDocuments) {
|
|
3838
|
+
const originalSupportingDocuments = originalSection['section-supporting-documents'] || [];
|
|
3839
|
+
originalSupportingDocuments.forEach((doc) => {
|
|
3840
|
+
const originalDataPath = doc['document-data-path'];
|
|
3841
|
+
const storeDataPath = namespace && originalDataPath
|
|
3842
|
+
? `${namespace}.${originalDataPath}`
|
|
3843
|
+
: originalDataPath;
|
|
3844
|
+
sectionFiles.push(getValueByPath(currentSchemaData, storeDataPath));
|
|
3845
|
+
});
|
|
3846
|
+
}
|
|
3847
|
+
if (JSON.stringify(oldSchemaData) !== JSON.stringify(newSchemaData)) {
|
|
3848
|
+
try {
|
|
3849
|
+
await onSectionSave({
|
|
3850
|
+
section_id: dbSectionId,
|
|
3851
|
+
section_register_id: sectionRegisterId,
|
|
3852
|
+
records: [...newSchemaData],
|
|
3853
|
+
files: [...sectionFiles],
|
|
3854
|
+
});
|
|
3855
|
+
}
|
|
3856
|
+
catch (error) {
|
|
3857
|
+
console.error('Section Changes Save failed', error);
|
|
3858
|
+
return;
|
|
3859
|
+
}
|
|
3860
|
+
}
|
|
3861
|
+
// IntakeForm only: update baseline so section is no longer dirty; trigger re-render so badge updates to "Saved"
|
|
3862
|
+
if (mode === 'IntakeForm') {
|
|
3863
|
+
baselineSnapshotRef.current = buildSectionSnapshot(currentSchemaData, namespace);
|
|
3864
|
+
setIntakeFormBaselineTrigger((prev) => prev + 1);
|
|
3865
|
+
}
|
|
3866
|
+
onSectionDirtyChange?.(sectionId, false);
|
|
3867
|
+
onSectionSaveSuccess?.(sectionIndex);
|
|
3868
|
+
}, [store, onSectionSave, onSectionSaveSuccess, sectionIndex, originalSection, schemaData, contextSchemaData, namespace, hasSupportingDocuments, dbSectionId, sectionRegisterId, dispatch, buildSectionSnapshot, sectionId, onSectionDirtyChange, mode]);
|
|
3630
3869
|
// Handle cancel button click
|
|
3631
3870
|
const handleCancel = () => {
|
|
3632
3871
|
// Revert values in store to original schema data
|
|
@@ -3845,12 +4084,57 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3845
4084
|
align-items: center;
|
|
3846
4085
|
gap: 0.5rem;
|
|
3847
4086
|
}
|
|
3848
|
-
|
|
4087
|
+
|
|
4088
|
+
/* IntakeForm accordion */
|
|
4089
|
+
.${sectionClassId}.intake-form-accordion-item {
|
|
4090
|
+
border-color: #E5E7EB;
|
|
4091
|
+
transition: box-shadow 0.2s ease, border-color 0.2s ease;
|
|
4092
|
+
}
|
|
4093
|
+
.${sectionClassId}.intake-form-accordion-item:hover {
|
|
4094
|
+
border-color: #D1D5DB;
|
|
4095
|
+
}
|
|
4096
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-accordion-header {
|
|
4097
|
+
transition: opacity 0.2s ease, background-color 0.2s ease;
|
|
4098
|
+
}
|
|
4099
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-accordion-header:hover {
|
|
4100
|
+
opacity: 0.85;
|
|
4101
|
+
}
|
|
4102
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-accordion-header:focus-visible {
|
|
4103
|
+
outline: 2px solid #F2BA1A;
|
|
4104
|
+
outline-offset: 2px;
|
|
4105
|
+
}
|
|
4106
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-accordion-content {
|
|
4107
|
+
padding-top: 8px;
|
|
4108
|
+
padding-bottom: 4px;
|
|
4109
|
+
}
|
|
4110
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-edit-controls {
|
|
4111
|
+
justify-content: flex-end;
|
|
4112
|
+
width: 100%;
|
|
4113
|
+
}
|
|
4114
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-prev-btn {
|
|
4115
|
+
color: rgba(0, 0, 0, 0.5) !important;
|
|
4116
|
+
}
|
|
4117
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-prev-btn:disabled {
|
|
4118
|
+
color: rgba(0, 0, 0, 0.3) !important;
|
|
4119
|
+
}
|
|
4120
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-prev-btn:hover:not(:disabled) {
|
|
4121
|
+
background-color: #F3F4F6;
|
|
4122
|
+
border-color: #FD8C3E;
|
|
4123
|
+
}
|
|
4124
|
+
.${sectionClassId}.intake-form-accordion-item .intake-form-save-btn:hover:not(:disabled) {
|
|
4125
|
+
background-color: #E5E7EB;
|
|
4126
|
+
}
|
|
4127
|
+
` }), 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: {
|
|
3849
4128
|
gridColumn: `span ${columnSpan}`,
|
|
3850
4129
|
width: '100%',
|
|
3851
4130
|
borderRadius: '10px',
|
|
3852
|
-
|
|
3853
|
-
|
|
4131
|
+
// IntakeForm expanded: edit-mode colors. Others: normal or faded for old CR
|
|
4132
|
+
...(mode === 'IntakeForm' && isExpanded
|
|
4133
|
+
? { backgroundColor: '#F3E6BC', border: '1px dashed #ED7C22' }
|
|
4134
|
+
: {
|
|
4135
|
+
backgroundColor: changeRequestType === 'old' ? '#F9F9F9' : '#FFFFFF',
|
|
4136
|
+
opacity: changeRequestType === 'old' ? 0.95 : 1,
|
|
4137
|
+
}),
|
|
3854
4138
|
...(isEditMode && sectionHeight ? {
|
|
3855
4139
|
height: `${sectionHeight}px`,
|
|
3856
4140
|
minHeight: `${sectionHeight}px`
|
|
@@ -3859,81 +4143,225 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
|
|
|
3859
4143
|
minHeight: 'auto',
|
|
3860
4144
|
height: 'auto'
|
|
3861
4145
|
}),
|
|
3862
|
-
}, children:
|
|
3863
|
-
|
|
3864
|
-
|
|
3865
|
-
|
|
3866
|
-
|
|
3867
|
-
|
|
3868
|
-
|
|
3869
|
-
|
|
3870
|
-
|
|
3871
|
-
|
|
3872
|
-
|
|
3873
|
-
|
|
3874
|
-
|
|
3875
|
-
|
|
3876
|
-
|
|
3877
|
-
|
|
3878
|
-
|
|
3879
|
-
|
|
3880
|
-
|
|
3881
|
-
|
|
3882
|
-
|
|
3883
|
-
|
|
3884
|
-
|
|
4146
|
+
}, children: mode === 'IntakeForm' ? (
|
|
4147
|
+
/* IntakeForm: accordion layout - header always visible, content only when expanded */
|
|
4148
|
+
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: {
|
|
4149
|
+
width: '100%',
|
|
4150
|
+
display: 'flex',
|
|
4151
|
+
alignItems: 'flex-start',
|
|
4152
|
+
justifyContent: 'space-between',
|
|
4153
|
+
padding: '16px 0',
|
|
4154
|
+
marginTop: '16px',
|
|
4155
|
+
marginBottom: 0,
|
|
4156
|
+
background: 'none',
|
|
4157
|
+
border: 'none',
|
|
4158
|
+
cursor: 'pointer',
|
|
4159
|
+
textAlign: 'left',
|
|
4160
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4161
|
+
}, 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']
|
|
4162
|
+
? translateConfig(sectionToRender['section-title'])
|
|
4163
|
+
: `Section ${(sectionIndex ?? 0) + 1}` }), intakeFormSectionStatus === 'saved' && (jsxRuntimeExports.jsx("span", { style: {
|
|
4164
|
+
display: 'inline-block',
|
|
4165
|
+
padding: '4px 10px',
|
|
4166
|
+
borderRadius: '9999px',
|
|
4167
|
+
fontSize: '12px',
|
|
4168
|
+
fontWeight: 500,
|
|
4169
|
+
backgroundColor: '#D1FAE5',
|
|
4170
|
+
color: '#047857',
|
|
4171
|
+
}, children: translate('common.sectionSaved') || 'Saved' })), intakeFormSectionStatus === 'modified' && (jsxRuntimeExports.jsx("span", { style: {
|
|
4172
|
+
display: 'inline-block',
|
|
4173
|
+
padding: '4px 10px',
|
|
4174
|
+
borderRadius: '9999px',
|
|
4175
|
+
fontSize: '12px',
|
|
4176
|
+
fontWeight: 500,
|
|
4177
|
+
backgroundColor: '#FEE2E2',
|
|
4178
|
+
color: '#B91C1C',
|
|
4179
|
+
}, 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) => {
|
|
4180
|
+
const docConfig = createDocumentWidgetConfig(doc, sectionId, docIndex);
|
|
4181
|
+
return (jsxRuntimeExports.jsx("div", { className: "supporting-document-item", children: jsxRuntimeExports.jsx(FileInputWidget, { config: docConfig }) }, `${sectionId}-doc-${docIndex}`));
|
|
4182
|
+
}) })] })] })), jsxRuntimeExports.jsx("hr", { className: "my-4 w-full", style: { height: '1px', backgroundColor: '#E5E7EB', border: 'none' } }), jsxRuntimeExports.jsxs("div", { className: "intake-form-edit-controls", style: {
|
|
3885
4183
|
display: 'flex',
|
|
3886
|
-
justifyContent: '
|
|
4184
|
+
justifyContent: 'flex-end',
|
|
3887
4185
|
alignItems: 'center',
|
|
4186
|
+
gap: '12px',
|
|
4187
|
+
marginBottom: '20px',
|
|
3888
4188
|
width: '100%',
|
|
3889
|
-
}, children: [jsxRuntimeExports.jsxs("
|
|
3890
|
-
|
|
4189
|
+
}, children: [jsxRuntimeExports.jsxs("button", { type: "button", onClick: () => onPreviousSection?.(sectionIndex), disabled: sectionIndex === 0, className: "intake-form-prev-btn", style: {
|
|
4190
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4191
|
+
fontSize: '14px',
|
|
4192
|
+
fontWeight: 400,
|
|
4193
|
+
padding: '8px 24px',
|
|
4194
|
+
borderRadius: '10px',
|
|
4195
|
+
border: '1px solid #FD8C3E',
|
|
4196
|
+
background: '#F3F4F6',
|
|
4197
|
+
color: sectionIndex === 0 ? 'rgba(0, 0, 0, 0.3)' : 'rgba(0, 0, 0, 0.5)',
|
|
4198
|
+
cursor: sectionIndex === 0 ? 'not-allowed' : 'pointer',
|
|
4199
|
+
display: 'inline-flex',
|
|
3891
4200
|
alignItems: 'center',
|
|
3892
|
-
gap: '
|
|
3893
|
-
|
|
3894
|
-
|
|
3895
|
-
|
|
3896
|
-
|
|
3897
|
-
|
|
3898
|
-
|
|
3899
|
-
|
|
3900
|
-
|
|
3901
|
-
|
|
3902
|
-
|
|
3903
|
-
|
|
3904
|
-
}, 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: {
|
|
3905
|
-
fontFamily: 'Roboto, sans-serif',
|
|
3906
|
-
fontSize: '14px',
|
|
3907
|
-
color: '#000000',
|
|
3908
|
-
fontWeight: 'normal',
|
|
3909
|
-
}, children: crViewData.createdDate }))] }), jsxRuntimeExports.jsxs("div", { className: "approved-by-section", style: {
|
|
3910
|
-
display: 'flex',
|
|
4201
|
+
gap: '8px',
|
|
4202
|
+
}, 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: {
|
|
4203
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4204
|
+
fontSize: '14px',
|
|
4205
|
+
fontWeight: 400,
|
|
4206
|
+
padding: '8px 24px',
|
|
4207
|
+
borderRadius: '10px',
|
|
4208
|
+
border: '1px solid #FD8C3E',
|
|
4209
|
+
background: isDraft === false ? '#9CA3AF' : '#F3F4F6',
|
|
4210
|
+
color: isDraft === false ? 'rgba(0, 0, 0, 0.3)' : 'rgba(0, 0, 0, 0.5)',
|
|
4211
|
+
cursor: isDraft === false ? 'not-allowed' : 'pointer',
|
|
4212
|
+
display: 'inline-flex',
|
|
3911
4213
|
alignItems: 'center',
|
|
3912
|
-
gap: '
|
|
3913
|
-
|
|
3914
|
-
|
|
3915
|
-
|
|
3916
|
-
|
|
3917
|
-
|
|
3918
|
-
|
|
3919
|
-
|
|
3920
|
-
|
|
3921
|
-
|
|
3922
|
-
|
|
3923
|
-
|
|
3924
|
-
|
|
3925
|
-
|
|
3926
|
-
|
|
3927
|
-
|
|
3928
|
-
|
|
3929
|
-
|
|
3930
|
-
|
|
3931
|
-
|
|
3932
|
-
|
|
3933
|
-
|
|
3934
|
-
|
|
4214
|
+
gap: '8px',
|
|
4215
|
+
}, children: [translate('common.save') || 'Save', jsxRuntimeExports.jsx("img", { src: img$4, alt: "", "aria-hidden": true, style: { width: '14px', height: '14px' } })] })] })] }) }))] })) : (
|
|
4216
|
+
/* RegistryView / CRView: standard layout */
|
|
4217
|
+
jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [sectionToRender['section-title'] && (jsxRuntimeExports.jsxs("div", { style: {
|
|
4218
|
+
marginTop: '35px',
|
|
4219
|
+
marginBottom: '16px',
|
|
4220
|
+
display: 'flex',
|
|
4221
|
+
alignItems: 'center',
|
|
4222
|
+
gap: '12px',
|
|
4223
|
+
flexWrap: 'wrap',
|
|
4224
|
+
}, 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: {
|
|
4225
|
+
display: 'inline-flex',
|
|
4226
|
+
alignItems: 'center',
|
|
4227
|
+
padding: '4px 12px',
|
|
4228
|
+
borderRadius: '4px',
|
|
4229
|
+
fontSize: '12px',
|
|
4230
|
+
fontWeight: 600,
|
|
4231
|
+
textTransform: 'uppercase',
|
|
4232
|
+
letterSpacing: '0.5px',
|
|
4233
|
+
backgroundColor: changeRequestType === 'new' ? '#28a745' : '#ffcccc', // Green for new, faded red for old
|
|
4234
|
+
color: changeRequestType === 'new' ? '#FFFFFF' : '#cc0000',
|
|
4235
|
+
whiteSpace: 'nowrap',
|
|
4236
|
+
boxShadow: changeRequestType === 'new' ? '0 2px 4px rgba(40, 167, 69, 0.3)' : 'none',
|
|
4237
|
+
}, 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: {
|
|
4238
|
+
marginTop: '20px',
|
|
4239
|
+
paddingBottom: '30px',
|
|
4240
|
+
display: 'flex',
|
|
4241
|
+
justifyContent: 'space-between',
|
|
4242
|
+
alignItems: 'center',
|
|
4243
|
+
width: '100%',
|
|
4244
|
+
}, children: [jsxRuntimeExports.jsxs("div", { className: "created-by-section", style: {
|
|
4245
|
+
display: 'flex',
|
|
4246
|
+
alignItems: 'center',
|
|
4247
|
+
gap: '6px',
|
|
4248
|
+
flex: 1,
|
|
4249
|
+
}, children: [jsxRuntimeExports.jsx("span", { style: {
|
|
4250
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4251
|
+
fontSize: '14px',
|
|
4252
|
+
color: '#000000',
|
|
4253
|
+
fontWeight: 'normal',
|
|
4254
|
+
}, 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: {
|
|
4255
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4256
|
+
fontSize: '14px',
|
|
4257
|
+
color: '#000000',
|
|
4258
|
+
fontWeight: 'normal',
|
|
4259
|
+
}, children: crViewData.createdBy })), jsxRuntimeExports.jsx("img", { src: img$9, alt: "Calendar", width: "16", height: "16", style: { marginLeft: '6px' } }), crViewData?.createdDate && (jsxRuntimeExports.jsx("span", { style: {
|
|
4260
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4261
|
+
fontSize: '14px',
|
|
4262
|
+
color: '#000000',
|
|
4263
|
+
fontWeight: 'normal',
|
|
4264
|
+
}, children: crViewData.createdDate }))] }), jsxRuntimeExports.jsxs("div", { className: "approved-by-section", style: {
|
|
4265
|
+
display: 'flex',
|
|
4266
|
+
alignItems: 'center',
|
|
4267
|
+
gap: '6px',
|
|
4268
|
+
flex: 1,
|
|
4269
|
+
justifyContent: 'flex-end',
|
|
4270
|
+
}, children: [jsxRuntimeExports.jsx("span", { style: {
|
|
4271
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4272
|
+
fontSize: '14px',
|
|
4273
|
+
color: '#000000',
|
|
4274
|
+
fontWeight: 'normal',
|
|
4275
|
+
}, 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: {
|
|
4276
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4277
|
+
fontSize: '14px',
|
|
4278
|
+
color: '#000000',
|
|
4279
|
+
fontWeight: 'normal',
|
|
4280
|
+
}, children: crViewData.approvedBy })), jsxRuntimeExports.jsx("img", { src: img$9, alt: "Calendar", width: "16", height: "16", style: { marginLeft: '6px' } }), crViewData?.approvedDate && (jsxRuntimeExports.jsx("span", { style: {
|
|
4281
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4282
|
+
fontSize: '14px',
|
|
4283
|
+
color: '#000000',
|
|
4284
|
+
fontWeight: 'normal',
|
|
4285
|
+
}, 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: {
|
|
4286
|
+
fontFamily: 'Roboto, sans-serif',
|
|
4287
|
+
fontSize: '16px',
|
|
4288
|
+
color: 'rgba(0, 0, 0, 0.50)'
|
|
4289
|
+
}, children: ["Edit Details", jsxRuntimeExports.jsx("img", { src: img$8, alt: "right-arrow", className: "w-3.5 h-3.5 brightness-0 opacity-50" })] }) }))] })] })) })] }));
|
|
3935
4290
|
};
|
|
3936
4291
|
|
|
4292
|
+
/**
|
|
4293
|
+
* Build SectionChanges from section config and current store values.
|
|
4294
|
+
* Works for intake forms (no sectionRegisterId) and edit flows (with sectionRegisterId).
|
|
4295
|
+
*/
|
|
4296
|
+
function buildSectionChanges(section, storeValues, namespace, options) {
|
|
4297
|
+
const sectionWidgets = collectWidgets(section.panels);
|
|
4298
|
+
const resolvePath = (path) => (namespace ? `${namespace}.${path}` : path);
|
|
4299
|
+
const snapshot = {};
|
|
4300
|
+
let hasTable = false;
|
|
4301
|
+
sectionWidgets.forEach((widget) => {
|
|
4302
|
+
const widgetPath = widget['widget-data-path'];
|
|
4303
|
+
if (!widgetPath)
|
|
4304
|
+
return;
|
|
4305
|
+
const widgetType = widget['widget-type'];
|
|
4306
|
+
if (widgetType === 'table' ||
|
|
4307
|
+
widgetType === 'simple-table' ||
|
|
4308
|
+
widget.widget === 'table') {
|
|
4309
|
+
hasTable = true;
|
|
4310
|
+
}
|
|
4311
|
+
if (typeof widgetPath === 'object') {
|
|
4312
|
+
Object.values(widgetPath).forEach((path) => {
|
|
4313
|
+
if (typeof path === 'string' && path.length > 0) {
|
|
4314
|
+
snapshot[path] = getValueByPath(storeValues, resolvePath(path));
|
|
4315
|
+
}
|
|
4316
|
+
});
|
|
4317
|
+
}
|
|
4318
|
+
else if (typeof widgetPath === 'string') {
|
|
4319
|
+
snapshot[widgetPath] = getValueByPath(storeValues, resolvePath(widgetPath));
|
|
4320
|
+
}
|
|
4321
|
+
});
|
|
4322
|
+
let records;
|
|
4323
|
+
if (!hasTable) {
|
|
4324
|
+
const cleanedSnapshot = {};
|
|
4325
|
+
Object.entries(snapshot).forEach(([fullPath, value]) => {
|
|
4326
|
+
const fieldPath = fullPath.includes('.')
|
|
4327
|
+
? fullPath.split('.').slice(1).join('.')
|
|
4328
|
+
: fullPath;
|
|
4329
|
+
cleanedSnapshot[fieldPath] = value;
|
|
4330
|
+
});
|
|
4331
|
+
const { sectionRegisterId } = {};
|
|
4332
|
+
const sectionData = sectionRegisterId && namespace
|
|
4333
|
+
? getValueByPath(storeValues, `${namespace}.${sectionRegisterId}`) || {}
|
|
4334
|
+
: (sectionRegisterId
|
|
4335
|
+
? storeValues[sectionRegisterId]
|
|
4336
|
+
: {}) || {};
|
|
4337
|
+
records = [
|
|
4338
|
+
{
|
|
4339
|
+
...sectionData,
|
|
4340
|
+
...cleanedSnapshot,
|
|
4341
|
+
...(sectionRegisterId ? { edit_action: 'UPDATE' } : {}),
|
|
4342
|
+
},
|
|
4343
|
+
];
|
|
4344
|
+
}
|
|
4345
|
+
else {
|
|
4346
|
+
const tableEntry = Object.entries(snapshot).find(([key, value]) => key.endsWith('.records') && Array.isArray(value));
|
|
4347
|
+
records = tableEntry ? tableEntry[1] : [];
|
|
4348
|
+
}
|
|
4349
|
+
const files = [];
|
|
4350
|
+
const supportingDocs = section['section-supporting-documents'] || [];
|
|
4351
|
+
supportingDocs.forEach((doc) => {
|
|
4352
|
+
const path = doc['document-data-path'];
|
|
4353
|
+
if (path) {
|
|
4354
|
+
files.push(getValueByPath(storeValues, resolvePath(path)));
|
|
4355
|
+
}
|
|
4356
|
+
});
|
|
4357
|
+
return {
|
|
4358
|
+
section_id: options?.dbSectionId ?? section['section-id'],
|
|
4359
|
+
section_register_id: options?.sectionRegisterId,
|
|
4360
|
+
records,
|
|
4361
|
+
files: files.length > 0 ? files : undefined,
|
|
4362
|
+
};
|
|
4363
|
+
}
|
|
4364
|
+
|
|
3937
4365
|
/**
|
|
3938
4366
|
* Recursively check if a panel contains a table widget
|
|
3939
4367
|
*/
|
|
@@ -4015,10 +4443,121 @@ const countVerticalPanels = (panels) => {
|
|
|
4015
4443
|
* - All sections align to the same grid, ensuring right-side alignment
|
|
4016
4444
|
* - Handles nested structure: multiple horizontal panels, each with multiple vertical panels
|
|
4017
4445
|
*/
|
|
4018
|
-
const SectionsContainer = ({ sections, dataSourceRequestHandler: propDataSourceRequestHandler, schemaData, onValueChange, className = '', onSectionSave, hideEditButton = false, mode = 'RegistryView', namespace, }) => {
|
|
4446
|
+
const SectionsContainer = ({ sections, dataSourceRequestHandler: propDataSourceRequestHandler, schemaData, onValueChange, className = '', onSectionSave, hideEditButton = false, mode = 'RegistryView', isDraft, namespace, onSectionDirtyChange, onFormReady, }) => {
|
|
4447
|
+
const store = reactRedux.useStore();
|
|
4448
|
+
const dispatch = reactRedux.useDispatch();
|
|
4449
|
+
reactRedux.useSelector((state) => state.widget?.values || {});
|
|
4019
4450
|
// Get dataSourceRequestHandler from context if not provided as prop
|
|
4020
|
-
const { dataSourceRequestHandler: contextDataSourceRequestHandler } = useWidgetContext();
|
|
4451
|
+
const { dataSourceRequestHandler: contextDataSourceRequestHandler, schemaData: contextSchemaData } = useWidgetContext();
|
|
4021
4452
|
const dataSourceRequestHandler = propDataSourceRequestHandler || contextDataSourceRequestHandler;
|
|
4453
|
+
// IntakeForm mode: accordion state - which section is expanded (null = none; first expanded by default)
|
|
4454
|
+
const [expandedSectionIndex, setExpandedSectionIndex] = React.useState(0);
|
|
4455
|
+
const safeSections = sections ?? [];
|
|
4456
|
+
const prevSectionsLengthRef = React.useRef(safeSections.length);
|
|
4457
|
+
// Track dirty (unsaved changes) per section for form handle validation
|
|
4458
|
+
const sectionDirtyMapRef = React.useRef({});
|
|
4459
|
+
const handleSectionDirtyChange = React.useCallback((sectionId, isDirty) => {
|
|
4460
|
+
sectionDirtyMapRef.current = { ...sectionDirtyMapRef.current, [sectionId]: isDirty };
|
|
4461
|
+
onSectionDirtyChange?.(sectionId, isDirty);
|
|
4462
|
+
}, [onSectionDirtyChange]);
|
|
4463
|
+
// Toggle: click expanded section to collapse; click collapsed section to expand
|
|
4464
|
+
const handleExpandSection = React.useCallback((index) => {
|
|
4465
|
+
setExpandedSectionIndex(prev => (prev === index ? null : index));
|
|
4466
|
+
}, []);
|
|
4467
|
+
// IntakeForm mode: called after section save - collapse current, expand next
|
|
4468
|
+
const handleSectionSaveSuccess = React.useCallback((index) => {
|
|
4469
|
+
if (index + 1 < safeSections.length) {
|
|
4470
|
+
setExpandedSectionIndex(index + 1);
|
|
4471
|
+
}
|
|
4472
|
+
// Last section: stay expanded (no action)
|
|
4473
|
+
}, [safeSections.length]);
|
|
4474
|
+
// IntakeForm mode: called when Previous clicked - collapse current, expand previous
|
|
4475
|
+
const handlePreviousSection = React.useCallback((index) => {
|
|
4476
|
+
if (index > 0) {
|
|
4477
|
+
setExpandedSectionIndex(index - 1);
|
|
4478
|
+
}
|
|
4479
|
+
}, []);
|
|
4480
|
+
// Reset/init expanded section when sections change or first load (e.g. async form load)
|
|
4481
|
+
React.useEffect(() => {
|
|
4482
|
+
if (mode !== 'IntakeForm')
|
|
4483
|
+
return;
|
|
4484
|
+
const currentLength = safeSections.length;
|
|
4485
|
+
const prevLength = prevSectionsLengthRef.current;
|
|
4486
|
+
// Clamp when sections shrink or invalid index
|
|
4487
|
+
if (currentLength > 0 && expandedSectionIndex !== null && expandedSectionIndex >= currentLength) {
|
|
4488
|
+
setExpandedSectionIndex(0);
|
|
4489
|
+
}
|
|
4490
|
+
// When sections first load (0 -> N), ensure first section is expanded
|
|
4491
|
+
if (prevLength === 0 && currentLength > 0) {
|
|
4492
|
+
setExpandedSectionIndex(0);
|
|
4493
|
+
}
|
|
4494
|
+
prevSectionsLengthRef.current = currentLength;
|
|
4495
|
+
}, [mode, safeSections.length, expandedSectionIndex]);
|
|
4496
|
+
const UNSAVED_CHANGES_ERROR = 'Unsaved changes detected. Please save all sections before submitting.';
|
|
4497
|
+
// Form handle for onFormReady - allows host to validate and get all section data from its own Submit button
|
|
4498
|
+
const formHandle = React.useMemo(() => {
|
|
4499
|
+
const getValues = () => store.getState().widget?.values || {};
|
|
4500
|
+
const getNamespace = (section, index) => namespace
|
|
4501
|
+
? typeof namespace === 'string'
|
|
4502
|
+
? namespace
|
|
4503
|
+
: namespace(section['section-id'], index)
|
|
4504
|
+
: undefined;
|
|
4505
|
+
const checkNoUnsavedChanges = () => {
|
|
4506
|
+
const hasDirty = Object.values(sectionDirtyMapRef.current).some(Boolean);
|
|
4507
|
+
if (hasDirty) {
|
|
4508
|
+
throw new Error(UNSAVED_CHANGES_ERROR);
|
|
4509
|
+
}
|
|
4510
|
+
};
|
|
4511
|
+
return {
|
|
4512
|
+
validate: async () => {
|
|
4513
|
+
checkNoUnsavedChanges();
|
|
4514
|
+
const values = getValues();
|
|
4515
|
+
let allValid = true;
|
|
4516
|
+
for (let i = 0; i < safeSections.length; i++) {
|
|
4517
|
+
const section = safeSections[i];
|
|
4518
|
+
const ns = getNamespace(section, i);
|
|
4519
|
+
const sectionToValidate = ns ? namespaceSectionConfig(section, ns) : section;
|
|
4520
|
+
const valid = sectionValidate(sectionToValidate, values, dispatch);
|
|
4521
|
+
if (!valid)
|
|
4522
|
+
allValid = false;
|
|
4523
|
+
}
|
|
4524
|
+
return allValid;
|
|
4525
|
+
},
|
|
4526
|
+
getFormData: () => getValues(),
|
|
4527
|
+
validateAndGetData: async () => {
|
|
4528
|
+
checkNoUnsavedChanges();
|
|
4529
|
+
const values = getValues();
|
|
4530
|
+
const results = [];
|
|
4531
|
+
for (let i = 0; i < safeSections.length; i++) {
|
|
4532
|
+
const section = safeSections[i];
|
|
4533
|
+
const ns = getNamespace(section, i);
|
|
4534
|
+
const sectionToValidate = ns ? namespaceSectionConfig(section, ns) : section;
|
|
4535
|
+
const valid = sectionValidate(sectionToValidate, values, dispatch);
|
|
4536
|
+
if (!valid) {
|
|
4537
|
+
throw new Error('Validation failed');
|
|
4538
|
+
}
|
|
4539
|
+
results.push(buildSectionChanges(section, values, ns));
|
|
4540
|
+
}
|
|
4541
|
+
return results;
|
|
4542
|
+
},
|
|
4543
|
+
getStructuredData: () => {
|
|
4544
|
+
const values = getValues();
|
|
4545
|
+
const results = [];
|
|
4546
|
+
for (let i = 0; i < safeSections.length; i++) {
|
|
4547
|
+
const section = safeSections[i];
|
|
4548
|
+
const ns = getNamespace(section, i);
|
|
4549
|
+
results.push(buildSectionChanges(section, values, ns));
|
|
4550
|
+
}
|
|
4551
|
+
return results;
|
|
4552
|
+
},
|
|
4553
|
+
};
|
|
4554
|
+
}, [store, dispatch, safeSections, namespace]);
|
|
4555
|
+
// Call onFormReady when form is ready (sections loaded)
|
|
4556
|
+
React.useEffect(() => {
|
|
4557
|
+
if (onFormReady && safeSections.length > 0) {
|
|
4558
|
+
onFormReady(formHandle);
|
|
4559
|
+
}
|
|
4560
|
+
}, [onFormReady, formHandle, safeSections.length]);
|
|
4022
4561
|
// Warn if dataSourceRequestHandler is missing
|
|
4023
4562
|
React.useEffect(() => {
|
|
4024
4563
|
if (!dataSourceRequestHandler) {
|
|
@@ -4030,7 +4569,7 @@ const SectionsContainer = ({ sections, dataSourceRequestHandler: propDataSourceR
|
|
|
4030
4569
|
// Find the maximum number of vertical panels across all sections
|
|
4031
4570
|
// This determines the grid size (minimum 3 columns)
|
|
4032
4571
|
// Also account for table widgets and their explicit column spans
|
|
4033
|
-
const maxVerticalPanels = Math.max(...
|
|
4572
|
+
const maxVerticalPanels = Math.max(...safeSections.map(section => {
|
|
4034
4573
|
const panelCount = countVerticalPanels(section.panels);
|
|
4035
4574
|
const tableWidgetSpan = getTableWidgetColumnSpan(section.panels);
|
|
4036
4575
|
// Use explicit table widget span if specified, otherwise use default logic
|
|
@@ -4068,14 +4607,38 @@ const SectionsContainer = ({ sections, dataSourceRequestHandler: propDataSourceR
|
|
|
4068
4607
|
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
4069
4608
|
}
|
|
4070
4609
|
}
|
|
4071
|
-
|
|
4610
|
+
|
|
4611
|
+
/* IntakeForm mode: vertical accordion list instead of grid */
|
|
4612
|
+
#${containerId}.sections-container-intake-form {
|
|
4613
|
+
display: flex;
|
|
4614
|
+
flex-direction: column;
|
|
4615
|
+
gap: 0.75rem;
|
|
4616
|
+
grid-template-columns: unset;
|
|
4617
|
+
}
|
|
4618
|
+
#${containerId}.sections-container-intake-form > .section {
|
|
4619
|
+
grid-column: unset;
|
|
4620
|
+
width: 100%;
|
|
4621
|
+
}
|
|
4622
|
+
` }), jsxRuntimeExports.jsx("div", { id: containerId, className: `sections-container ${className}${mode === 'IntakeForm' ? ' sections-container-intake-form' : ''}`, children: safeSections.map((section, index) => {
|
|
4072
4623
|
// Determine namespace for this section
|
|
4073
4624
|
const sectionNamespace = namespace
|
|
4074
4625
|
? (typeof namespace === 'string' ? namespace : namespace(section['section-id'], index))
|
|
4075
4626
|
: undefined;
|
|
4627
|
+
// IntakeForm mode: pass accordion state and handlers
|
|
4628
|
+
const intakeFormProps = mode === 'IntakeForm'
|
|
4629
|
+
? {
|
|
4630
|
+
sectionIndex: index,
|
|
4631
|
+
sectionCount: safeSections.length,
|
|
4632
|
+
expandedSectionIndex,
|
|
4633
|
+
onExpandSection: handleExpandSection,
|
|
4634
|
+
onSectionSaveSuccess: handleSectionSaveSuccess,
|
|
4635
|
+
onPreviousSection: handlePreviousSection,
|
|
4636
|
+
isDraft,
|
|
4637
|
+
}
|
|
4638
|
+
: {};
|
|
4076
4639
|
// Check if section has explicit column span
|
|
4077
4640
|
if (section['section-column-span']) {
|
|
4078
|
-
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']));
|
|
4641
|
+
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']));
|
|
4079
4642
|
}
|
|
4080
4643
|
const verticalPanelsCount = countVerticalPanels(section.panels);
|
|
4081
4644
|
const tableWidgetColumnSpan = getTableWidgetColumnSpan(section.panels);
|
|
@@ -4086,7 +4649,7 @@ const SectionsContainer = ({ sections, dataSourceRequestHandler: propDataSourceR
|
|
|
4086
4649
|
const columnSpan = tableWidgetColumnSpan !== null
|
|
4087
4650
|
? tableWidgetColumnSpan
|
|
4088
4651
|
: (containsTable ? Math.max(verticalPanelsCount, 2) : verticalPanelsCount);
|
|
4089
|
-
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']));
|
|
4652
|
+
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']));
|
|
4090
4653
|
}) })] }));
|
|
4091
4654
|
};
|
|
4092
4655
|
|
|
@@ -4526,19 +5089,7 @@ const JSONEditorPanel = ({ section, onChange, onReset, context = 'section', }) =
|
|
|
4526
5089
|
}, onMouseLeave: (e) => {
|
|
4527
5090
|
e.currentTarget.style.background = 'white';
|
|
4528
5091
|
e.currentTarget.style.borderColor = '#ddd';
|
|
4529
|
-
}, title: "Reset to original JSON", children: [jsxRuntimeExports.
|
|
4530
|
-
padding: '6px 12px',
|
|
4531
|
-
border: '1px solid #ddd',
|
|
4532
|
-
borderRadius: '10px',
|
|
4533
|
-
background: '#f3f3f3',
|
|
4534
|
-
color: '#666',
|
|
4535
|
-
cursor: 'pointer',
|
|
4536
|
-
display: 'flex',
|
|
4537
|
-
alignItems: 'center',
|
|
4538
|
-
gap: '6px',
|
|
4539
|
-
fontSize: '12px',
|
|
4540
|
-
fontWeight: 500,
|
|
4541
|
-
}, 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: {
|
|
5092
|
+
}, 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: {
|
|
4542
5093
|
fontSize: '12px',
|
|
4543
5094
|
color: !rawJsonView ? '#007bff' : '#6c757d',
|
|
4544
5095
|
fontWeight: !rawJsonView ? 600 : 400,
|
|
@@ -5378,7 +5929,7 @@ const VisualBuilderPanel = ({ section, selectedNode, onSelectNode, onSectionChan
|
|
|
5378
5929
|
justifyContent: 'center',
|
|
5379
5930
|
width: '32px',
|
|
5380
5931
|
height: '32px',
|
|
5381
|
-
}, title: isMaximized ? 'Minimize' : 'Maximize', children: isMaximized ? (jsxRuntimeExports.jsx("
|
|
5932
|
+
}, 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: {
|
|
5382
5933
|
flex: 1,
|
|
5383
5934
|
display: 'flex',
|
|
5384
5935
|
overflow: 'hidden',
|
|
@@ -8186,10 +8737,11 @@ const ProfileWidget = ({ config }) => {
|
|
|
8186
8737
|
flex-shrink: 0;
|
|
8187
8738
|
}
|
|
8188
8739
|
|
|
8189
|
-
.${widgetClassId} .profile-avatar-placeholder
|
|
8190
|
-
width:
|
|
8191
|
-
height:
|
|
8192
|
-
|
|
8740
|
+
.${widgetClassId} .profile-avatar-placeholder img {
|
|
8741
|
+
width: 100%;
|
|
8742
|
+
height: 100%;
|
|
8743
|
+
border-radius: 8px;
|
|
8744
|
+
object-fit: cover;
|
|
8193
8745
|
}
|
|
8194
8746
|
|
|
8195
8747
|
.${widgetClassId} .profile-info {
|
|
@@ -8235,7 +8787,7 @@ const ProfileWidget = ({ config }) => {
|
|
|
8235
8787
|
if (placeholder) {
|
|
8236
8788
|
placeholder.style.display = 'flex';
|
|
8237
8789
|
}
|
|
8238
|
-
} })) : null, jsxRuntimeExports.jsx("div", { className: "profile-avatar-placeholder", style: { display: imageUrl ? 'none' : 'flex' }, children: jsxRuntimeExports.jsx("
|
|
8790
|
+
} })) : 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 })] }))] })] })] }));
|
|
8239
8791
|
};
|
|
8240
8792
|
|
|
8241
8793
|
const TextAreaWidget = ({ config }) => {
|