@fgv/ts-res-ui-components 5.0.0-10
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/.rush/temp/03c8b056281d9db0a97d8a6e25eea798a160d393.tar.log +271 -0
- package/.rush/temp/chunked-rush-logs/ts-res-ui-components.build.chunks.jsonl +9 -0
- package/.rush/temp/operation/build/all.log +9 -0
- package/.rush/temp/operation/build/log-chunks.jsonl +9 -0
- package/.rush/temp/operation/build/state.json +3 -0
- package/.rush/temp/shrinkwrap-deps.json +1111 -0
- package/README.md +18 -0
- package/REFACTORING_PLAN.md +171 -0
- package/config/jest.config.json +16 -0
- package/config/jest.setup.js +64 -0
- package/config/rig.json +16 -0
- package/lib/components/common/QualifierContextControl.d.ts +14 -0
- package/lib/components/common/QualifierContextControl.d.ts.map +1 -0
- package/lib/components/common/QualifierContextControl.js +78 -0
- package/lib/components/common/QualifierContextControl.js.map +1 -0
- package/lib/components/common/ResourceListView.d.ts +11 -0
- package/lib/components/common/ResourceListView.d.ts.map +1 -0
- package/lib/components/common/ResourceListView.js +20 -0
- package/lib/components/common/ResourceListView.js.map +1 -0
- package/lib/components/common/ResourceTreeView.d.ts +12 -0
- package/lib/components/common/ResourceTreeView.d.ts.map +1 -0
- package/lib/components/common/ResourceTreeView.js +162 -0
- package/lib/components/common/ResourceTreeView.js.map +1 -0
- package/lib/components/forms/HierarchyEditor.d.ts +10 -0
- package/lib/components/forms/HierarchyEditor.d.ts.map +1 -0
- package/lib/components/forms/HierarchyEditor.js +106 -0
- package/lib/components/forms/HierarchyEditor.js.map +1 -0
- package/lib/components/forms/QualifierEditForm.d.ts +11 -0
- package/lib/components/forms/QualifierEditForm.d.ts.map +1 -0
- package/lib/components/forms/QualifierEditForm.js +181 -0
- package/lib/components/forms/QualifierEditForm.js.map +1 -0
- package/lib/components/forms/QualifierTypeEditForm.d.ts +10 -0
- package/lib/components/forms/QualifierTypeEditForm.d.ts.map +1 -0
- package/lib/components/forms/QualifierTypeEditForm.js +172 -0
- package/lib/components/forms/QualifierTypeEditForm.js.map +1 -0
- package/lib/components/forms/ResourceTypeEditForm.d.ts +10 -0
- package/lib/components/forms/ResourceTypeEditForm.d.ts.map +1 -0
- package/lib/components/forms/ResourceTypeEditForm.js +188 -0
- package/lib/components/forms/ResourceTypeEditForm.js.map +1 -0
- package/lib/components/forms/index.d.ts +9 -0
- package/lib/components/forms/index.d.ts.map +1 -0
- package/lib/components/forms/index.js +5 -0
- package/lib/components/forms/index.js.map +1 -0
- package/lib/components/orchestrator/ResourceOrchestrator.d.ts +14 -0
- package/lib/components/orchestrator/ResourceOrchestrator.d.ts.map +1 -0
- package/lib/components/orchestrator/ResourceOrchestrator.js +278 -0
- package/lib/components/orchestrator/ResourceOrchestrator.js.map +1 -0
- package/lib/components/views/CompiledView/index.d.ts +5 -0
- package/lib/components/views/CompiledView/index.d.ts.map +1 -0
- package/lib/components/views/CompiledView/index.js +595 -0
- package/lib/components/views/CompiledView/index.js.map +1 -0
- package/lib/components/views/ConfigurationView/index.d.ts +5 -0
- package/lib/components/views/ConfigurationView/index.d.ts.map +1 -0
- package/lib/components/views/ConfigurationView/index.js +363 -0
- package/lib/components/views/ConfigurationView/index.js.map +1 -0
- package/lib/components/views/FilterView/index.d.ts +5 -0
- package/lib/components/views/FilterView/index.d.ts.map +1 -0
- package/lib/components/views/FilterView/index.js +463 -0
- package/lib/components/views/FilterView/index.js.map +1 -0
- package/lib/components/views/ImportView/index.d.ts +5 -0
- package/lib/components/views/ImportView/index.d.ts.map +1 -0
- package/lib/components/views/ImportView/index.js +514 -0
- package/lib/components/views/ImportView/index.js.map +1 -0
- package/lib/components/views/ResolutionView/EditableJsonView.d.ts +21 -0
- package/lib/components/views/ResolutionView/EditableJsonView.d.ts.map +1 -0
- package/lib/components/views/ResolutionView/EditableJsonView.js +109 -0
- package/lib/components/views/ResolutionView/EditableJsonView.js.map +1 -0
- package/lib/components/views/ResolutionView/ResolutionEditControls.d.ts +19 -0
- package/lib/components/views/ResolutionView/ResolutionEditControls.d.ts.map +1 -0
- package/lib/components/views/ResolutionView/ResolutionEditControls.js +82 -0
- package/lib/components/views/ResolutionView/ResolutionEditControls.js.map +1 -0
- package/lib/components/views/ResolutionView/index.d.ts +5 -0
- package/lib/components/views/ResolutionView/index.d.ts.map +1 -0
- package/lib/components/views/ResolutionView/index.js +255 -0
- package/lib/components/views/ResolutionView/index.js.map +1 -0
- package/lib/components/views/SourceView/index.d.ts +5 -0
- package/lib/components/views/SourceView/index.d.ts.map +1 -0
- package/lib/components/views/SourceView/index.js +316 -0
- package/lib/components/views/SourceView/index.js.map +1 -0
- package/lib/components/views/ZipLoaderView/index.d.ts +5 -0
- package/lib/components/views/ZipLoaderView/index.d.ts.map +1 -0
- package/lib/components/views/ZipLoaderView/index.js +313 -0
- package/lib/components/views/ZipLoaderView/index.js.map +1 -0
- package/lib/hooks/useConfigurationState.d.ts +46 -0
- package/lib/hooks/useConfigurationState.d.ts.map +1 -0
- package/lib/hooks/useConfigurationState.js +239 -0
- package/lib/hooks/useConfigurationState.js.map +1 -0
- package/lib/hooks/useFilterState.d.ts +7 -0
- package/lib/hooks/useFilterState.d.ts.map +1 -0
- package/lib/hooks/useFilterState.js +80 -0
- package/lib/hooks/useFilterState.js.map +1 -0
- package/lib/hooks/useResolutionState.d.ts +8 -0
- package/lib/hooks/useResolutionState.d.ts.map +1 -0
- package/lib/hooks/useResolutionState.js +253 -0
- package/lib/hooks/useResolutionState.js.map +1 -0
- package/lib/hooks/useResourceData.d.ts +19 -0
- package/lib/hooks/useResourceData.d.ts.map +1 -0
- package/lib/hooks/useResourceData.js +368 -0
- package/lib/hooks/useResourceData.js.map +1 -0
- package/lib/hooks/useViewState.d.ts +10 -0
- package/lib/hooks/useViewState.d.ts.map +1 -0
- package/lib/hooks/useViewState.js +29 -0
- package/lib/hooks/useViewState.js.map +1 -0
- package/lib/index.d.ts +27 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +34 -0
- package/lib/index.js.map +1 -0
- package/lib/test/helpers/testDataLoader.d.ts +37 -0
- package/lib/test/helpers/testDataLoader.d.ts.map +1 -0
- package/lib/test/helpers/testDataLoader.js +171 -0
- package/lib/test/helpers/testDataLoader.js.map +1 -0
- package/lib/test/unit/utils/configurationUtils.test.d.ts +2 -0
- package/lib/test/unit/utils/configurationUtils.test.d.ts.map +1 -0
- package/lib/test/unit/utils/configurationUtils.test.js +497 -0
- package/lib/test/unit/utils/configurationUtils.test.js.map +1 -0
- package/lib/test/unit/utils/fileProcessing.test.d.ts +2 -0
- package/lib/test/unit/utils/fileProcessing.test.d.ts.map +1 -0
- package/lib/test/unit/utils/fileProcessing.test.js +321 -0
- package/lib/test/unit/utils/fileProcessing.test.js.map +1 -0
- package/lib/test/unit/utils/filterResources.test.d.ts +2 -0
- package/lib/test/unit/utils/filterResources.test.d.ts.map +1 -0
- package/lib/test/unit/utils/filterResources.test.js +403 -0
- package/lib/test/unit/utils/filterResources.test.js.map +1 -0
- package/lib/test/unit/utils/resolutionEditing.test.d.ts +2 -0
- package/lib/test/unit/utils/resolutionEditing.test.d.ts.map +1 -0
- package/lib/test/unit/utils/resolutionEditing.test.js +439 -0
- package/lib/test/unit/utils/resolutionEditing.test.js.map +1 -0
- package/lib/test/unit/utils/resolutionUtils.test.d.ts +2 -0
- package/lib/test/unit/utils/resolutionUtils.test.d.ts.map +1 -0
- package/lib/test/unit/utils/resolutionUtils.test.js +397 -0
- package/lib/test/unit/utils/resolutionUtils.test.js.map +1 -0
- package/lib/test/unit/utils/tsResIntegration.test.d.ts +2 -0
- package/lib/test/unit/utils/tsResIntegration.test.d.ts.map +1 -0
- package/lib/test/unit/utils/tsResIntegration.test.js +376 -0
- package/lib/test/unit/utils/tsResIntegration.test.js.map +1 -0
- package/lib/types/index.d.ts +251 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +2 -0
- package/lib/types/index.js.map +1 -0
- package/lib/utils/configurationUtils.d.ts +74 -0
- package/lib/utils/configurationUtils.d.ts.map +1 -0
- package/lib/utils/configurationUtils.js +359 -0
- package/lib/utils/configurationUtils.js.map +1 -0
- package/lib/utils/fileProcessing.d.ts +18 -0
- package/lib/utils/fileProcessing.d.ts.map +1 -0
- package/lib/utils/fileProcessing.js +142 -0
- package/lib/utils/fileProcessing.js.map +1 -0
- package/lib/utils/filterResources.d.ts +38 -0
- package/lib/utils/filterResources.d.ts.map +1 -0
- package/lib/utils/filterResources.js +153 -0
- package/lib/utils/filterResources.js.map +1 -0
- package/lib/utils/resolutionEditing.d.ts +58 -0
- package/lib/utils/resolutionEditing.d.ts.map +1 -0
- package/lib/utils/resolutionEditing.js +246 -0
- package/lib/utils/resolutionEditing.js.map +1 -0
- package/lib/utils/resolutionUtils.d.ts +28 -0
- package/lib/utils/resolutionUtils.d.ts.map +1 -0
- package/lib/utils/resolutionUtils.js +216 -0
- package/lib/utils/resolutionUtils.js.map +1 -0
- package/lib/utils/tsResIntegration.d.ts +71 -0
- package/lib/utils/tsResIntegration.d.ts.map +1 -0
- package/lib/utils/tsResIntegration.js +294 -0
- package/lib/utils/tsResIntegration.js.map +1 -0
- package/lib/utils/zipLoader/browserZipLoader.d.ts +48 -0
- package/lib/utils/zipLoader/browserZipLoader.d.ts.map +1 -0
- package/lib/utils/zipLoader/browserZipLoader.js +247 -0
- package/lib/utils/zipLoader/browserZipLoader.js.map +1 -0
- package/lib/utils/zipLoader/index.d.ts +8 -0
- package/lib/utils/zipLoader/index.d.ts.map +1 -0
- package/lib/utils/zipLoader/index.js +13 -0
- package/lib/utils/zipLoader/index.js.map +1 -0
- package/lib/utils/zipLoader/nodeZipBuilder.d.ts +55 -0
- package/lib/utils/zipLoader/nodeZipBuilder.d.ts.map +1 -0
- package/lib/utils/zipLoader/nodeZipBuilder.js +98 -0
- package/lib/utils/zipLoader/nodeZipBuilder.js.map +1 -0
- package/lib/utils/zipLoader/types.d.ts +139 -0
- package/lib/utils/zipLoader/types.d.ts.map +1 -0
- package/lib/utils/zipLoader/types.js +2 -0
- package/lib/utils/zipLoader/types.js.map +1 -0
- package/lib/utils/zipLoader/zipUtils.d.ts +53 -0
- package/lib/utils/zipLoader/zipUtils.d.ts.map +1 -0
- package/lib/utils/zipLoader/zipUtils.js +229 -0
- package/lib/utils/zipLoader/zipUtils.js.map +1 -0
- package/package.json +69 -0
- package/rush-logs/ts-res-ui-components.build.cache.log +3 -0
- package/rush-logs/ts-res-ui-components.build.log +9 -0
- package/src/components/common/QualifierContextControl.tsx +151 -0
- package/src/components/common/ResourceListView.tsx +63 -0
- package/src/components/common/ResourceTreeView.tsx +271 -0
- package/src/components/forms/HierarchyEditor.tsx +204 -0
- package/src/components/forms/QualifierEditForm.tsx +355 -0
- package/src/components/forms/QualifierTypeEditForm.tsx +347 -0
- package/src/components/forms/ResourceTypeEditForm.tsx +331 -0
- package/src/components/forms/index.ts +11 -0
- package/src/components/orchestrator/ResourceOrchestrator.tsx +372 -0
- package/src/components/views/CompiledView/index.tsx +922 -0
- package/src/components/views/ConfigurationView/index.tsx +800 -0
- package/src/components/views/FilterView/index.tsx +825 -0
- package/src/components/views/ImportView/index.tsx +717 -0
- package/src/components/views/ResolutionView/EditableJsonView.tsx +214 -0
- package/src/components/views/ResolutionView/ResolutionEditControls.tsx +170 -0
- package/src/components/views/ResolutionView/index.tsx +591 -0
- package/src/components/views/SourceView/index.tsx +536 -0
- package/src/components/views/ZipLoaderView/index.tsx +485 -0
- package/src/hooks/useConfigurationState.ts +374 -0
- package/src/hooks/useFilterState.ts +97 -0
- package/src/hooks/useResolutionState.ts +355 -0
- package/src/hooks/useResourceData.ts +467 -0
- package/src/hooks/useViewState.ts +44 -0
- package/src/index.ts +45 -0
- package/src/test/helpers/testDataLoader.ts +195 -0
- package/src/test/unit/utils/configurationUtils.test.ts +630 -0
- package/src/test/unit/utils/fileProcessing.test.ts +391 -0
- package/src/test/unit/utils/filterResources.test.ts +574 -0
- package/src/test/unit/utils/resolutionEditing.test.ts +556 -0
- package/src/test/unit/utils/resolutionUtils.test.ts +521 -0
- package/src/test/unit/utils/tsResIntegration.test.ts +433 -0
- package/src/types/index.ts +322 -0
- package/src/utils/configurationUtils.ts +424 -0
- package/src/utils/fileProcessing.ts +160 -0
- package/src/utils/filterResources.ts +206 -0
- package/src/utils/resolutionEditing.ts +319 -0
- package/src/utils/resolutionUtils.ts +289 -0
- package/src/utils/tsResIntegration.ts +440 -0
- package/src/utils/zipLoader/browserZipLoader.ts +319 -0
- package/src/utils/zipLoader/index.ts +26 -0
- package/src/utils/zipLoader/nodeZipBuilder.ts +153 -0
- package/src/utils/zipLoader/types.ts +175 -0
- package/src/utils/zipLoader/zipUtils.ts +266 -0
- package/temp/build/typescript/ts_gZid87Hu.json +1 -0
- package/tsconfig.json +15 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import React, { useCallback, useMemo, useState } from 'react';
|
|
2
|
+
import { useResourceData } from '../../hooks/useResourceData';
|
|
3
|
+
import { useFilterState } from '../../hooks/useFilterState';
|
|
4
|
+
import { useViewState } from '../../hooks/useViewState';
|
|
5
|
+
import { useResolutionState } from '../../hooks/useResolutionState';
|
|
6
|
+
import { createFilteredResourceManagerSimple, analyzeFilteredResources } from '../../utils/filterResources';
|
|
7
|
+
export const ResourceOrchestrator = ({ children, initialConfiguration, onStateChange }) => {
|
|
8
|
+
// Core hooks
|
|
9
|
+
const resourceData = useResourceData();
|
|
10
|
+
const filterState = useFilterState();
|
|
11
|
+
const viewState = useViewState();
|
|
12
|
+
// System update handler for resolution editing
|
|
13
|
+
const handleSystemUpdate = useCallback((updatedResources) => {
|
|
14
|
+
resourceData.actions.updateProcessedResources(updatedResources);
|
|
15
|
+
viewState.addMessage('success', 'Resource system updated with edits');
|
|
16
|
+
}, [resourceData.actions, viewState]);
|
|
17
|
+
const resolutionData = useResolutionState(resourceData.state.processedResources, viewState.addMessage, handleSystemUpdate);
|
|
18
|
+
// Local state for filter results
|
|
19
|
+
const [filterResult, setFilterResult] = useState(null);
|
|
20
|
+
// Track if filtering is in progress to prevent concurrent operations
|
|
21
|
+
const isFilteringInProgress = React.useRef(false);
|
|
22
|
+
// Initialize with configuration if provided
|
|
23
|
+
React.useEffect(() => {
|
|
24
|
+
if (initialConfiguration && !resourceData.state.activeConfiguration) {
|
|
25
|
+
resourceData.actions.applyConfiguration(initialConfiguration);
|
|
26
|
+
}
|
|
27
|
+
}, [initialConfiguration, resourceData.state.activeConfiguration, resourceData.actions]);
|
|
28
|
+
// Notify parent of state changes
|
|
29
|
+
React.useEffect(() => {
|
|
30
|
+
if (onStateChange) {
|
|
31
|
+
onStateChange({
|
|
32
|
+
resources: resourceData.state.processedResources,
|
|
33
|
+
configuration: resourceData.state.activeConfiguration,
|
|
34
|
+
filterState: filterState.state,
|
|
35
|
+
filterResult,
|
|
36
|
+
selectedResourceId: viewState.selectedResourceId,
|
|
37
|
+
isProcessing: resourceData.state.isProcessing,
|
|
38
|
+
error: resourceData.state.error,
|
|
39
|
+
messages: viewState.messages
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}, [
|
|
43
|
+
resourceData.state,
|
|
44
|
+
filterState.state,
|
|
45
|
+
filterResult,
|
|
46
|
+
viewState.selectedResourceId,
|
|
47
|
+
viewState.messages,
|
|
48
|
+
onStateChange
|
|
49
|
+
]);
|
|
50
|
+
// Internal filtering logic (used by both manual and automatic application)
|
|
51
|
+
const performFiltering = useCallback(async (filterValues) => {
|
|
52
|
+
// Prevent concurrent filtering operations
|
|
53
|
+
if (isFilteringInProgress.current) {
|
|
54
|
+
console.log('Filtering already in progress, skipping...');
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
if (!resourceData.state.processedResources || !filterState.state.enabled) {
|
|
58
|
+
setFilterResult(null);
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
// Check if we have any filter values to work with
|
|
62
|
+
const hasFilterValues = Object.values(filterValues).some((value) => value !== undefined && value !== '');
|
|
63
|
+
if (!hasFilterValues) {
|
|
64
|
+
setFilterResult(null);
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
isFilteringInProgress.current = true;
|
|
68
|
+
try {
|
|
69
|
+
const { system } = resourceData.state.processedResources;
|
|
70
|
+
viewState.addMessage('info', 'Starting filtering process...');
|
|
71
|
+
console.log('Filtering with values:', filterValues);
|
|
72
|
+
console.log('Filter state:', filterState.state);
|
|
73
|
+
// Try the simplified filtering approach using provided values
|
|
74
|
+
let filteredResult = await createFilteredResourceManagerSimple(system, filterValues, {
|
|
75
|
+
partialContextMatch: true,
|
|
76
|
+
enableDebugLogging: true, // Enable debug logging to see what's happening
|
|
77
|
+
reduceQualifiers: filterState.state.reduceQualifiers
|
|
78
|
+
});
|
|
79
|
+
if (filteredResult.isFailure()) {
|
|
80
|
+
const result = {
|
|
81
|
+
success: false,
|
|
82
|
+
error: `Filtering failed: ${filteredResult.message}`
|
|
83
|
+
};
|
|
84
|
+
setFilterResult(result);
|
|
85
|
+
viewState.addMessage('error', `Filtering failed: ${filteredResult.message}`);
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
// Analyze filtered resources compared to original
|
|
89
|
+
const originalResources = resourceData.state.processedResources.summary.resourceIds || [];
|
|
90
|
+
console.log('Original resources count:', originalResources.length);
|
|
91
|
+
const analysis = analyzeFilteredResources(originalResources, filteredResult.value, resourceData.state.processedResources);
|
|
92
|
+
console.log('Analysis result:', {
|
|
93
|
+
success: analysis.success,
|
|
94
|
+
filteredResourcesCount: analysis.filteredResources.length,
|
|
95
|
+
warningsCount: analysis.warnings.length,
|
|
96
|
+
hasProcessedResources: !!analysis.processedResources
|
|
97
|
+
});
|
|
98
|
+
console.log('Filtered resources breakdown:', analysis.filteredResources.map((r) => ({
|
|
99
|
+
id: r.id,
|
|
100
|
+
originalCandidates: r.originalCandidateCount,
|
|
101
|
+
filteredCandidates: r.filteredCandidateCount,
|
|
102
|
+
reduction: r.originalCandidateCount - r.filteredCandidateCount,
|
|
103
|
+
hasWarning: r.hasWarning
|
|
104
|
+
})));
|
|
105
|
+
const result = {
|
|
106
|
+
success: true,
|
|
107
|
+
processedResources: analysis.processedResources,
|
|
108
|
+
filteredResources: analysis.filteredResources,
|
|
109
|
+
warnings: analysis.warnings
|
|
110
|
+
};
|
|
111
|
+
console.log('Setting filter result:', result);
|
|
112
|
+
setFilterResult(result);
|
|
113
|
+
if (analysis.warnings.length > 0) {
|
|
114
|
+
viewState.addMessage('warning', `Filtering completed with ${analysis.warnings.length} warning(s)`);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
viewState.addMessage('success', `Filtering completed: ${analysis.filteredResources.length} resources`);
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
123
|
+
const result = {
|
|
124
|
+
success: false,
|
|
125
|
+
error: errorMessage
|
|
126
|
+
};
|
|
127
|
+
setFilterResult(result);
|
|
128
|
+
viewState.addMessage('error', `Filtering error: ${errorMessage}`);
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
isFilteringInProgress.current = false;
|
|
133
|
+
}
|
|
134
|
+
}, [resourceData.state.processedResources, filterState.state, viewState]);
|
|
135
|
+
// Manual apply filter action (for the Apply button)
|
|
136
|
+
const applyFilter = useCallback(async () => {
|
|
137
|
+
// Capture the current values before applying them
|
|
138
|
+
const currentValues = { ...filterState.state.values };
|
|
139
|
+
// First apply the pending values to make them the applied values
|
|
140
|
+
filterState.actions.applyFilterValues();
|
|
141
|
+
// Then perform filtering with the captured values
|
|
142
|
+
const result = await performFiltering(currentValues);
|
|
143
|
+
return result;
|
|
144
|
+
}, [performFiltering, filterState.actions]);
|
|
145
|
+
// Reset filter action
|
|
146
|
+
const resetFilter = useCallback(() => {
|
|
147
|
+
setFilterResult(null);
|
|
148
|
+
filterState.actions.resetFilterValues();
|
|
149
|
+
viewState.addMessage('info', 'Filter reset');
|
|
150
|
+
}, [filterState.actions, viewState]);
|
|
151
|
+
// Automatically apply filter when applied filter values change
|
|
152
|
+
// TEMPORARILY DISABLED to fix responsiveness issue
|
|
153
|
+
// React.useEffect(() => {
|
|
154
|
+
// if (!resourceData.state.processedResources || !filterState.state.enabled) {
|
|
155
|
+
// setFilterResult(null);
|
|
156
|
+
// return;
|
|
157
|
+
// }
|
|
158
|
+
// const hasAppliedFilterValues = hasFilterValues(filterState.state.appliedValues);
|
|
159
|
+
// if (!hasAppliedFilterValues) {
|
|
160
|
+
// setFilterResult(null);
|
|
161
|
+
// return;
|
|
162
|
+
// }
|
|
163
|
+
// // Apply filter automatically when appliedValues change using the applied values
|
|
164
|
+
// performFiltering(filterState.state.appliedValues);
|
|
165
|
+
// }, [
|
|
166
|
+
// filterState.state.appliedValues,
|
|
167
|
+
// filterState.state.enabled,
|
|
168
|
+
// resourceData.state.processedResources,
|
|
169
|
+
// performFiltering
|
|
170
|
+
// ]);
|
|
171
|
+
// Combined state
|
|
172
|
+
const state = useMemo(() => ({
|
|
173
|
+
resources: resourceData.state.processedResources,
|
|
174
|
+
configuration: resourceData.state.activeConfiguration,
|
|
175
|
+
filterState: filterState.state,
|
|
176
|
+
filterResult,
|
|
177
|
+
resolutionState: resolutionData.state,
|
|
178
|
+
selectedResourceId: viewState.selectedResourceId,
|
|
179
|
+
isProcessing: resourceData.state.isProcessing,
|
|
180
|
+
error: resourceData.state.error,
|
|
181
|
+
messages: viewState.messages
|
|
182
|
+
}), [
|
|
183
|
+
resourceData.state,
|
|
184
|
+
filterState.state,
|
|
185
|
+
filterResult,
|
|
186
|
+
resolutionData.state,
|
|
187
|
+
viewState.selectedResourceId,
|
|
188
|
+
viewState.messages
|
|
189
|
+
]);
|
|
190
|
+
// Combined actions
|
|
191
|
+
const actions = useMemo(() => ({
|
|
192
|
+
// Resource management
|
|
193
|
+
importDirectory: async (directory) => {
|
|
194
|
+
viewState.addMessage('info', 'Importing directory...');
|
|
195
|
+
await resourceData.actions.processDirectory(directory);
|
|
196
|
+
if (!resourceData.state.error) {
|
|
197
|
+
viewState.addMessage('success', 'Directory imported successfully');
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
viewState.addMessage('error', resourceData.state.error);
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
importDirectoryWithConfig: async (directory, config) => {
|
|
204
|
+
viewState.addMessage('info', 'Importing directory with configuration...');
|
|
205
|
+
await resourceData.actions.processDirectoryWithConfig(directory, config);
|
|
206
|
+
if (!resourceData.state.error) {
|
|
207
|
+
viewState.addMessage('success', 'Directory imported successfully');
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
viewState.addMessage('error', resourceData.state.error);
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
importFiles: async (files) => {
|
|
214
|
+
viewState.addMessage('info', 'Importing files...');
|
|
215
|
+
await resourceData.actions.processFiles(files);
|
|
216
|
+
if (!resourceData.state.error) {
|
|
217
|
+
viewState.addMessage('success', 'Files imported successfully');
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
importBundle: async (bundle) => {
|
|
221
|
+
viewState.addMessage('info', 'Importing bundle...');
|
|
222
|
+
await resourceData.actions.processBundleFile(bundle);
|
|
223
|
+
if (!resourceData.state.error) {
|
|
224
|
+
viewState.addMessage('success', 'Bundle imported successfully');
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
clearResources: () => {
|
|
228
|
+
resourceData.actions.reset();
|
|
229
|
+
setFilterResult(null);
|
|
230
|
+
viewState.addMessage('info', 'Resources cleared');
|
|
231
|
+
},
|
|
232
|
+
// Configuration management
|
|
233
|
+
updateConfiguration: (config) => {
|
|
234
|
+
resourceData.actions.applyConfiguration(config);
|
|
235
|
+
viewState.addMessage('info', 'Configuration updated');
|
|
236
|
+
},
|
|
237
|
+
applyConfiguration: (config) => {
|
|
238
|
+
resourceData.actions.applyConfiguration(config);
|
|
239
|
+
viewState.addMessage('success', 'Configuration applied');
|
|
240
|
+
},
|
|
241
|
+
// Filter management
|
|
242
|
+
updateFilterState: (updates) => {
|
|
243
|
+
if (updates.enabled !== undefined) {
|
|
244
|
+
filterState.actions.updateFilterEnabled(updates.enabled);
|
|
245
|
+
}
|
|
246
|
+
if (updates.values !== undefined) {
|
|
247
|
+
filterState.actions.updateFilterValues(updates.values);
|
|
248
|
+
}
|
|
249
|
+
if (updates.reduceQualifiers !== undefined) {
|
|
250
|
+
filterState.actions.updateReduceQualifiers(updates.reduceQualifiers);
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
applyFilter,
|
|
254
|
+
resetFilter,
|
|
255
|
+
// Resolution management
|
|
256
|
+
updateResolutionContext: resolutionData.actions.updateContextValue,
|
|
257
|
+
applyResolutionContext: resolutionData.actions.applyContext,
|
|
258
|
+
selectResourceForResolution: resolutionData.actions.selectResource,
|
|
259
|
+
setResolutionViewMode: resolutionData.actions.setViewMode,
|
|
260
|
+
resetResolutionCache: resolutionData.actions.resetCache,
|
|
261
|
+
// Resolution editing actions
|
|
262
|
+
saveResourceEdit: resolutionData.actions.saveEdit,
|
|
263
|
+
getEditedValue: resolutionData.actions.getEditedValue,
|
|
264
|
+
hasResourceEdit: resolutionData.actions.hasEdit,
|
|
265
|
+
clearResourceEdits: resolutionData.actions.clearEdits,
|
|
266
|
+
applyResourceEdits: resolutionData.actions.applyEdits,
|
|
267
|
+
discardResourceEdits: resolutionData.actions.discardEdits,
|
|
268
|
+
// UI state management
|
|
269
|
+
selectResource: viewState.selectResource,
|
|
270
|
+
addMessage: viewState.addMessage,
|
|
271
|
+
clearMessages: viewState.clearMessages,
|
|
272
|
+
// Resource resolution
|
|
273
|
+
resolveResource: resourceData.actions.resolveResource
|
|
274
|
+
}), [resourceData.actions, filterState.actions, resolutionData.actions, viewState, applyFilter, resetFilter]);
|
|
275
|
+
return React.createElement(React.Fragment, null, children({ state, actions }));
|
|
276
|
+
};
|
|
277
|
+
export default ResourceOrchestrator;
|
|
278
|
+
//# sourceMappingURL=ResourceOrchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResourceOrchestrator.js","sourceRoot":"","sources":["../../../src/components/orchestrator/ResourceOrchestrator.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { ReactNode, useCallback, useMemo, useState } from 'react';\nimport { Result } from '@fgv/ts-utils';\nimport { Config, Bundle } from '@fgv/ts-res';\nimport {\n OrchestratorState,\n OrchestratorActions,\n ImportedDirectory,\n ImportedFile,\n ProcessedResources,\n FilterState,\n FilterResult,\n Message\n} from '../../types';\nimport { useResourceData } from '../../hooks/useResourceData';\nimport { useFilterState } from '../../hooks/useFilterState';\nimport { useViewState } from '../../hooks/useViewState';\nimport { useResolutionState } from '../../hooks/useResolutionState';\nimport { createSimpleContext } from '../../utils/tsResIntegration';\nimport {\n createFilteredResourceManagerSimple,\n analyzeFilteredResources,\n hasFilterValues,\n FilterResult as FilterUtilResult\n} from '../../utils/filterResources';\nimport { Runtime } from '@fgv/ts-res';\n\nexport interface ResourceOrchestratorProps {\n children: (orchestrator: { state: OrchestratorState; actions: OrchestratorActions }) => ReactNode;\n initialConfiguration?: Config.Model.ISystemConfiguration;\n onStateChange?: (state: Partial<OrchestratorState>) => void;\n}\n\nexport const ResourceOrchestrator: React.FC<ResourceOrchestratorProps> = ({\n children,\n initialConfiguration,\n onStateChange\n}) => {\n // Core hooks\n const resourceData = useResourceData();\n const filterState = useFilterState();\n const viewState = useViewState();\n // System update handler for resolution editing\n const handleSystemUpdate = useCallback(\n (updatedResources: ProcessedResources) => {\n resourceData.actions.updateProcessedResources(updatedResources);\n viewState.addMessage('success', 'Resource system updated with edits');\n },\n [resourceData.actions, viewState]\n );\n\n const resolutionData = useResolutionState(\n resourceData.state.processedResources,\n viewState.addMessage,\n handleSystemUpdate\n );\n\n // Local state for filter results\n const [filterResult, setFilterResult] = useState<FilterResult | null>(null);\n\n // Track if filtering is in progress to prevent concurrent operations\n const isFilteringInProgress = React.useRef(false);\n\n // Initialize with configuration if provided\n React.useEffect(() => {\n if (initialConfiguration && !resourceData.state.activeConfiguration) {\n resourceData.actions.applyConfiguration(initialConfiguration);\n }\n }, [initialConfiguration, resourceData.state.activeConfiguration, resourceData.actions]);\n\n // Notify parent of state changes\n React.useEffect(() => {\n if (onStateChange) {\n onStateChange({\n resources: resourceData.state.processedResources,\n configuration: resourceData.state.activeConfiguration,\n filterState: filterState.state,\n filterResult,\n selectedResourceId: viewState.selectedResourceId,\n isProcessing: resourceData.state.isProcessing,\n error: resourceData.state.error,\n messages: viewState.messages\n });\n }\n }, [\n resourceData.state,\n filterState.state,\n filterResult,\n viewState.selectedResourceId,\n viewState.messages,\n onStateChange\n ]);\n\n // Internal filtering logic (used by both manual and automatic application)\n const performFiltering = useCallback(\n async (filterValues: Record<string, string | undefined>): Promise<FilterResult | null> => {\n // Prevent concurrent filtering operations\n if (isFilteringInProgress.current) {\n console.log('Filtering already in progress, skipping...');\n return null;\n }\n\n if (!resourceData.state.processedResources || !filterState.state.enabled) {\n setFilterResult(null);\n return null;\n }\n\n // Check if we have any filter values to work with\n const hasFilterValues = Object.values(filterValues).some(\n (value) => value !== undefined && value !== ''\n );\n if (!hasFilterValues) {\n setFilterResult(null);\n return null;\n }\n\n isFilteringInProgress.current = true;\n\n try {\n const { system } = resourceData.state.processedResources;\n\n viewState.addMessage('info', 'Starting filtering process...');\n console.log('Filtering with values:', filterValues);\n console.log('Filter state:', filterState.state);\n\n // Try the simplified filtering approach using provided values\n let filteredResult = await createFilteredResourceManagerSimple(system, filterValues, {\n partialContextMatch: true,\n enableDebugLogging: true, // Enable debug logging to see what's happening\n reduceQualifiers: filterState.state.reduceQualifiers\n });\n\n if (filteredResult.isFailure()) {\n const result: FilterResult = {\n success: false,\n error: `Filtering failed: ${filteredResult.message}`\n };\n setFilterResult(result);\n viewState.addMessage('error', `Filtering failed: ${filteredResult.message}`);\n return result;\n }\n\n // Analyze filtered resources compared to original\n const originalResources = resourceData.state.processedResources.summary.resourceIds || [];\n console.log('Original resources count:', originalResources.length);\n\n const analysis = analyzeFilteredResources(\n originalResources,\n filteredResult.value,\n resourceData.state.processedResources\n );\n\n console.log('Analysis result:', {\n success: analysis.success,\n filteredResourcesCount: analysis.filteredResources.length,\n warningsCount: analysis.warnings.length,\n hasProcessedResources: !!analysis.processedResources\n });\n\n console.log(\n 'Filtered resources breakdown:',\n analysis.filteredResources.map((r) => ({\n id: r.id,\n originalCandidates: r.originalCandidateCount,\n filteredCandidates: r.filteredCandidateCount,\n reduction: r.originalCandidateCount - r.filteredCandidateCount,\n hasWarning: r.hasWarning\n }))\n );\n\n const result: FilterResult = {\n success: true,\n processedResources: analysis.processedResources,\n filteredResources: analysis.filteredResources,\n warnings: analysis.warnings\n };\n\n console.log('Setting filter result:', result);\n setFilterResult(result);\n\n if (analysis.warnings.length > 0) {\n viewState.addMessage('warning', `Filtering completed with ${analysis.warnings.length} warning(s)`);\n } else {\n viewState.addMessage(\n 'success',\n `Filtering completed: ${analysis.filteredResources.length} resources`\n );\n }\n\n return result;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n const result: FilterResult = {\n success: false,\n error: errorMessage\n };\n setFilterResult(result);\n viewState.addMessage('error', `Filtering error: ${errorMessage}`);\n return result;\n } finally {\n isFilteringInProgress.current = false;\n }\n },\n [resourceData.state.processedResources, filterState.state, viewState]\n );\n\n // Manual apply filter action (for the Apply button)\n const applyFilter = useCallback(async (): Promise<FilterResult | null> => {\n // Capture the current values before applying them\n const currentValues = { ...filterState.state.values };\n\n // First apply the pending values to make them the applied values\n filterState.actions.applyFilterValues();\n\n // Then perform filtering with the captured values\n const result = await performFiltering(currentValues);\n\n return result;\n }, [performFiltering, filterState.actions]);\n\n // Reset filter action\n const resetFilter = useCallback(() => {\n setFilterResult(null);\n filterState.actions.resetFilterValues();\n viewState.addMessage('info', 'Filter reset');\n }, [filterState.actions, viewState]);\n\n // Automatically apply filter when applied filter values change\n // TEMPORARILY DISABLED to fix responsiveness issue\n // React.useEffect(() => {\n // if (!resourceData.state.processedResources || !filterState.state.enabled) {\n // setFilterResult(null);\n // return;\n // }\n\n // const hasAppliedFilterValues = hasFilterValues(filterState.state.appliedValues);\n // if (!hasAppliedFilterValues) {\n // setFilterResult(null);\n // return;\n // }\n\n // // Apply filter automatically when appliedValues change using the applied values\n // performFiltering(filterState.state.appliedValues);\n // }, [\n // filterState.state.appliedValues,\n // filterState.state.enabled,\n // resourceData.state.processedResources,\n // performFiltering\n // ]);\n\n // Combined state\n const state: OrchestratorState = useMemo(\n () => ({\n resources: resourceData.state.processedResources,\n configuration: resourceData.state.activeConfiguration,\n filterState: filterState.state,\n filterResult,\n resolutionState: resolutionData.state,\n selectedResourceId: viewState.selectedResourceId,\n isProcessing: resourceData.state.isProcessing,\n error: resourceData.state.error,\n messages: viewState.messages\n }),\n [\n resourceData.state,\n filterState.state,\n filterResult,\n resolutionData.state,\n viewState.selectedResourceId,\n viewState.messages\n ]\n );\n\n // Combined actions\n const actions: OrchestratorActions = useMemo(\n () => ({\n // Resource management\n importDirectory: async (directory: ImportedDirectory) => {\n viewState.addMessage('info', 'Importing directory...');\n await resourceData.actions.processDirectory(directory);\n if (!resourceData.state.error) {\n viewState.addMessage('success', 'Directory imported successfully');\n } else {\n viewState.addMessage('error', resourceData.state.error);\n }\n },\n importDirectoryWithConfig: async (\n directory: ImportedDirectory,\n config: Config.Model.ISystemConfiguration\n ) => {\n viewState.addMessage('info', 'Importing directory with configuration...');\n await resourceData.actions.processDirectoryWithConfig(directory, config);\n if (!resourceData.state.error) {\n viewState.addMessage('success', 'Directory imported successfully');\n } else {\n viewState.addMessage('error', resourceData.state.error);\n }\n },\n importFiles: async (files: ImportedFile[]) => {\n viewState.addMessage('info', 'Importing files...');\n await resourceData.actions.processFiles(files);\n if (!resourceData.state.error) {\n viewState.addMessage('success', 'Files imported successfully');\n }\n },\n importBundle: async (bundle: Bundle.IBundle) => {\n viewState.addMessage('info', 'Importing bundle...');\n await resourceData.actions.processBundleFile(bundle);\n if (!resourceData.state.error) {\n viewState.addMessage('success', 'Bundle imported successfully');\n }\n },\n clearResources: () => {\n resourceData.actions.reset();\n setFilterResult(null);\n viewState.addMessage('info', 'Resources cleared');\n },\n\n // Configuration management\n updateConfiguration: (config: Config.Model.ISystemConfiguration) => {\n resourceData.actions.applyConfiguration(config);\n viewState.addMessage('info', 'Configuration updated');\n },\n applyConfiguration: (config: Config.Model.ISystemConfiguration) => {\n resourceData.actions.applyConfiguration(config);\n viewState.addMessage('success', 'Configuration applied');\n },\n\n // Filter management\n updateFilterState: (updates: Partial<FilterState>) => {\n if (updates.enabled !== undefined) {\n filterState.actions.updateFilterEnabled(updates.enabled);\n }\n if (updates.values !== undefined) {\n filterState.actions.updateFilterValues(updates.values);\n }\n if (updates.reduceQualifiers !== undefined) {\n filterState.actions.updateReduceQualifiers(updates.reduceQualifiers);\n }\n },\n applyFilter,\n resetFilter,\n\n // Resolution management\n updateResolutionContext: resolutionData.actions.updateContextValue,\n applyResolutionContext: resolutionData.actions.applyContext,\n selectResourceForResolution: resolutionData.actions.selectResource,\n setResolutionViewMode: resolutionData.actions.setViewMode,\n resetResolutionCache: resolutionData.actions.resetCache,\n\n // Resolution editing actions\n saveResourceEdit: resolutionData.actions.saveEdit,\n getEditedValue: resolutionData.actions.getEditedValue,\n hasResourceEdit: resolutionData.actions.hasEdit,\n clearResourceEdits: resolutionData.actions.clearEdits,\n applyResourceEdits: resolutionData.actions.applyEdits,\n discardResourceEdits: resolutionData.actions.discardEdits,\n\n // UI state management\n selectResource: viewState.selectResource,\n addMessage: viewState.addMessage,\n clearMessages: viewState.clearMessages,\n\n // Resource resolution\n resolveResource: resourceData.actions.resolveResource\n }),\n [resourceData.actions, filterState.actions, resolutionData.actions, viewState, applyFilter, resetFilter]\n );\n\n return <>{children({ state, actions })}</>;\n};\n\nexport default ResourceOrchestrator;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/views/CompiledView/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAazE,OAAO,EAAE,iBAAiB,EAAiD,MAAM,gBAAgB,CAAC;AAWlG,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA8bpD,CAAC;AAmcF,eAAe,YAAY,CAAC"}
|