@yogiswara/honcho-editor-ui 2.7.13 → 2.7.14
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/package.json +1 -1
- package/dist/color.d.ts +0 -9
- package/dist/color.js +0 -9
- package/dist/components/editor/GalleryAlbum/AlbumImageGallery.d.ts +0 -8
- package/dist/components/editor/GalleryAlbum/AlbumImageGallery.js +0 -28
- package/dist/components/editor/GalleryAlbum/ImageItem.d.ts +0 -10
- package/dist/components/editor/GalleryAlbum/ImageItem.js +0 -81
- package/dist/components/editor/HAccordionAspectRatio.d.ts +0 -14
- package/dist/components/editor/HAccordionAspectRatio.js +0 -102
- package/dist/components/editor/HAccordionColor.d.ts +0 -16
- package/dist/components/editor/HAccordionColor.js +0 -282
- package/dist/components/editor/HAccordionColorAdjustment.d.ts +0 -35
- package/dist/components/editor/HAccordionColorAdjustment.js +0 -31
- package/dist/components/editor/HAccordionDetails.d.ts +0 -12
- package/dist/components/editor/HAccordionDetails.js +0 -157
- package/dist/components/editor/HAccordionLight.d.ts +0 -20
- package/dist/components/editor/HAccordionLight.js +0 -414
- package/dist/components/editor/HAccordionPreset.d.ts +0 -23
- package/dist/components/editor/HAccordionPreset.js +0 -50
- package/dist/components/editor/HAlertBox.d.ts +0 -8
- package/dist/components/editor/HAlertBox.js +0 -55
- package/dist/components/editor/HAspectRatioMobile.d.ts +0 -0
- package/dist/components/editor/HAspectRatioMobile.js +0 -1
- package/dist/components/editor/HBulkAccordionColorAdjustment.d.ts +0 -55
- package/dist/components/editor/HBulkAccordionColorAdjustment.js +0 -31
- package/dist/components/editor/HBulkAccordionColorAdjustmentColors.d.ts +0 -20
- package/dist/components/editor/HBulkAccordionColorAdjustmentColors.js +0 -121
- package/dist/components/editor/HBulkAccordionColorAdjustmentDetails.d.ts +0 -12
- package/dist/components/editor/HBulkAccordionColorAdjustmentDetails.js +0 -65
- package/dist/components/editor/HBulkAccordionColorAdjustmentLight.d.ts +0 -28
- package/dist/components/editor/HBulkAccordionColorAdjustmentLight.js +0 -177
- package/dist/components/editor/HBulkColorAdjustmentMobile.d.ts +0 -53
- package/dist/components/editor/HBulkColorAdjustmentMobile.js +0 -16
- package/dist/components/editor/HBulkColorMobile.d.ts +0 -20
- package/dist/components/editor/HBulkColorMobile.js +0 -121
- package/dist/components/editor/HBulkDetailsMobile.d.ts +0 -12
- package/dist/components/editor/HBulkDetailsMobile.js +0 -65
- package/dist/components/editor/HBulkLightMobile.d.ts +0 -28
- package/dist/components/editor/HBulkLightMobile.js +0 -192
- package/dist/components/editor/HBulkPreset.d.ts +0 -24
- package/dist/components/editor/HBulkPreset.js +0 -43
- package/dist/components/editor/HBulkPresetMobile.d.ts +0 -15
- package/dist/components/editor/HBulkPresetMobile.js +0 -26
- package/dist/components/editor/HDialogBox.d.ts +0 -18
- package/dist/components/editor/HDialogBox.js +0 -51
- package/dist/components/editor/HDialogCopy.d.ts +0 -40
- package/dist/components/editor/HDialogCopy.js +0 -80
- package/dist/components/editor/HFooter.d.ts +0 -12
- package/dist/components/editor/HFooter.js +0 -24
- package/dist/components/editor/HHeaderEditor.d.ts +0 -17
- package/dist/components/editor/HHeaderEditor.js +0 -36
- package/dist/components/editor/HImageEditorBulkDekstop.d.ts +0 -15
- package/dist/components/editor/HImageEditorBulkDekstop.js +0 -29
- package/dist/components/editor/HImageEditorBulkMobile.d.ts +0 -72
- package/dist/components/editor/HImageEditorBulkMobile.js +0 -81
- package/dist/components/editor/HImageEditorDekstop.d.ts +0 -15
- package/dist/components/editor/HImageEditorDekstop.js +0 -29
- package/dist/components/editor/HImageEditorMobile.d.ts +0 -51
- package/dist/components/editor/HImageEditorMobile.js +0 -92
- package/dist/components/editor/HImageEditorMobileLayout.d.ts +0 -14
- package/dist/components/editor/HImageEditorMobileLayout.js +0 -58
- package/dist/components/editor/HModalEditorDekstop.d.ts +0 -13
- package/dist/components/editor/HModalEditorDekstop.js +0 -22
- package/dist/components/editor/HModalMobile.d.ts +0 -13
- package/dist/components/editor/HModalMobile.js +0 -7
- package/dist/components/editor/HPresetDelete.d.ts +0 -7
- package/dist/components/editor/HPresetDelete.js +0 -7
- package/dist/components/editor/HPresetOptionMenu.d.ts +0 -9
- package/dist/components/editor/HPresetOptionMenu.js +0 -20
- package/dist/components/editor/HSliderColorMobile.d.ts +0 -16
- package/dist/components/editor/HSliderColorMobile.js +0 -270
- package/dist/components/editor/HSliderDetailsMobile.d.ts +0 -12
- package/dist/components/editor/HSliderDetailsMobile.js +0 -154
- package/dist/components/editor/HSliderLightMobile.d.ts +0 -20
- package/dist/components/editor/HSliderLightMobile.js +0 -420
- package/dist/components/editor/HTabAspectRatioMobile.d.ts +0 -0
- package/dist/components/editor/HTabAspectRatioMobile.js +0 -1
- package/dist/components/editor/HTabColorAdjustmentMobile.d.ts +0 -33
- package/dist/components/editor/HTabColorAdjustmentMobile.js +0 -16
- package/dist/components/editor/HTabPresetMobile.d.ts +0 -14
- package/dist/components/editor/HTabPresetMobile.js +0 -10
- package/dist/components/editor/HTextField.d.ts +0 -14
- package/dist/components/editor/HTextField.js +0 -51
- package/dist/components/editor/HWatermarkView.d.ts +0 -6
- package/dist/components/editor/HWatermarkView.js +0 -16
- package/dist/components/editor/svg/Tick.d.ts +0 -2
- package/dist/components/editor/svg/Tick.js +0 -6
- package/dist/components/modal/HModalDialog.d.ts +0 -12
- package/dist/components/modal/HModalDialog.js +0 -18
- package/dist/components/modal/HModalRename.d.ts +0 -14
- package/dist/components/modal/HModalRename.js +0 -35
- package/dist/hooks/demo/HonchoEditorBulkDemo.d.ts +0 -3
- package/dist/hooks/demo/HonchoEditorBulkDemo.js +0 -410
- package/dist/hooks/demo/HonchoEditorSingleCleanDemo.d.ts +0 -3
- package/dist/hooks/demo/HonchoEditorSingleCleanDemo.js +0 -354
- package/dist/hooks/demo/index.d.ts +0 -2
- package/dist/hooks/demo/index.js +0 -2
- package/dist/hooks/editor/type.d.ts +0 -174
- package/dist/hooks/editor/type.js +0 -1
- package/dist/hooks/editor/useHonchoEditorBulk.d.ts +0 -96
- package/dist/hooks/editor/useHonchoEditorBulk.js +0 -427
- package/dist/hooks/editor/useHonchoEditorSingle.d.ts +0 -44
- package/dist/hooks/editor/useHonchoEditorSingle.js +0 -162
- package/dist/hooks/useAdjustmentHistory.d.ts +0 -97
- package/dist/hooks/useAdjustmentHistory.js +0 -493
- package/dist/hooks/useAdjustmentHistoryBatch.d.ts +0 -177
- package/dist/hooks/useAdjustmentHistoryBatch.js +0 -1189
- package/dist/hooks/useGallerySwipe.d.ts +0 -36
- package/dist/hooks/useGallerySwipe.js +0 -344
- package/dist/hooks/usePaging.d.ts +0 -89
- package/dist/hooks/usePaging.js +0 -211
- package/dist/hooks/usePreset.d.ts +0 -82
- package/dist/hooks/usePreset.js +0 -344
- package/dist/index.d.ts +0 -41
- package/dist/index.js +0 -44
- package/dist/lib/context/EditorContext.d.ts +0 -28
- package/dist/lib/context/EditorContext.js +0 -60
- package/dist/lib/context/EditorProcessingService.d.ts +0 -36
- package/dist/lib/context/EditorProcessingService.js +0 -249
- package/dist/lib/editor/honcho-editor.d.ts +0 -324
- package/dist/lib/editor/honcho-editor.js +0 -825
- package/dist/lib/hooks/useEditor.d.ts +0 -22
- package/dist/lib/hooks/useEditor.js +0 -35
- package/dist/lib/hooks/useEditorHeadless.d.ts +0 -34
- package/dist/lib/hooks/useEditorHeadless.js +0 -207
- package/dist/lib/hooks/useImageProcessor.d.ts +0 -18
- package/dist/lib/hooks/useImageProcessor.js +0 -113
- package/dist/setupTests.d.ts +0 -1
- package/dist/setupTests.js +0 -1
- package/dist/themes/colors.d.ts +0 -12
- package/dist/themes/colors.js +0 -12
- package/dist/themes/honchoTheme.d.ts +0 -25
- package/dist/themes/honchoTheme.js +0 -94
- package/dist/utils/adjustment.d.ts +0 -6
- package/dist/utils/adjustment.js +0 -48
- package/dist/utils/imageLoader.d.ts +0 -11
- package/dist/utils/imageLoader.js +0 -48
- package/dist/utils/isMobile.d.ts +0 -1
- package/dist/utils/isMobile.js +0 -5
|
@@ -1,427 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { useState, useCallback, useEffect, useMemo, useRef } from 'react';
|
|
3
|
-
import { useAdjustmentHistoryBatch } from '../useAdjustmentHistoryBatch';
|
|
4
|
-
import { usePaging } from "../usePaging";
|
|
5
|
-
import { usePreset } from "../usePreset";
|
|
6
|
-
import { mapAdjustmentStateToAdjustmentEditor } from "../../utils/adjustment";
|
|
7
|
-
// Helper function to map the API response to the format our UI component needs
|
|
8
|
-
const mapGalleryToPhotoData = (gallery, selectedIds) => {
|
|
9
|
-
return {
|
|
10
|
-
key: gallery.id,
|
|
11
|
-
src: gallery.raw_thumbnail?.path ? gallery.raw_thumbnail.path : gallery.thumbnail?.path,
|
|
12
|
-
original: gallery.download?.path || gallery.thumbnail?.path,
|
|
13
|
-
width: gallery.thumbnail?.width,
|
|
14
|
-
height: gallery.thumbnail?.height,
|
|
15
|
-
alt: gallery.id || 'gallery image',
|
|
16
|
-
isSelected: selectedIds.includes(gallery.id),
|
|
17
|
-
adjustments: gallery.editor_config?.color_adjustment,
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
const mapToImageAdjustmentConfig = (gallery) => {
|
|
21
|
-
return {
|
|
22
|
-
imageId: gallery.id,
|
|
23
|
-
adjustment: mapColorAdjustmentToAdjustmentState(gallery.editor_config?.color_adjustment),
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
function mapColorAdjustmentToAdjustmentState(adj) {
|
|
27
|
-
if (!adj)
|
|
28
|
-
return undefined;
|
|
29
|
-
return {
|
|
30
|
-
tempScore: adj.temperature || 0,
|
|
31
|
-
tintScore: adj.tint || 0,
|
|
32
|
-
vibranceScore: adj.vibrance || 0,
|
|
33
|
-
saturationScore: adj.saturation || 0,
|
|
34
|
-
exposureScore: adj.exposure || 0,
|
|
35
|
-
highlightsScore: adj.highlights || 0,
|
|
36
|
-
shadowsScore: adj.shadows || 0,
|
|
37
|
-
whitesScore: adj.whites || 0,
|
|
38
|
-
blacksScore: adj.blacks || 0,
|
|
39
|
-
contrastScore: adj.contrast || 0,
|
|
40
|
-
clarityScore: adj.clarity || 0,
|
|
41
|
-
sharpnessScore: adj.sharpness || 0,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
// Helper function to convert Preset to AdjustmentState
|
|
45
|
-
const presetToAdjustmentState = (preset) => {
|
|
46
|
-
return {
|
|
47
|
-
tempScore: preset.temperature || 0,
|
|
48
|
-
tintScore: preset.tint || 0,
|
|
49
|
-
vibranceScore: preset.vibrance || 0,
|
|
50
|
-
saturationScore: preset.saturation || 0,
|
|
51
|
-
exposureScore: preset.exposure || 0,
|
|
52
|
-
highlightsScore: preset.highlights || 0,
|
|
53
|
-
shadowsScore: preset.shadows || 0,
|
|
54
|
-
whitesScore: preset.whites || 0,
|
|
55
|
-
blacksScore: preset.blacks || 0,
|
|
56
|
-
contrastScore: preset.contrast || 0,
|
|
57
|
-
clarityScore: preset.clarity || 0,
|
|
58
|
-
sharpnessScore: preset.sharpness || 0,
|
|
59
|
-
};
|
|
60
|
-
};
|
|
61
|
-
// Helper function to compare adjustment states
|
|
62
|
-
const adjustmentsMatch = (a, b) => {
|
|
63
|
-
const keys = [
|
|
64
|
-
'tempScore', 'tintScore', 'vibranceScore', 'saturationScore',
|
|
65
|
-
'exposureScore', 'highlightsScore', 'shadowsScore', 'whitesScore',
|
|
66
|
-
'blacksScore', 'contrastScore', 'clarityScore', 'sharpnessScore'
|
|
67
|
-
];
|
|
68
|
-
return keys.every(key => (a[key] || 0) === (b[key] || 0));
|
|
69
|
-
};
|
|
70
|
-
/**
|
|
71
|
-
* Hook for bulk photo editing with multi-image backend synchronization.
|
|
72
|
-
*
|
|
73
|
-
* **Multi-Image Backend Sync:**
|
|
74
|
-
* - Each selected image maintains its own history and backend state
|
|
75
|
-
* - History operations (undo/redo) trigger separate controller.setHistoryIndex() calls for each selected image
|
|
76
|
-
* - Preset application triggers separate controller.createEditorConfig() calls for each selected image
|
|
77
|
-
* - Adjustment changes trigger separate controller.createEditorConfig() calls for each selected image
|
|
78
|
-
*
|
|
79
|
-
* **Key Features:**
|
|
80
|
-
* - Individual history tracking per image with backend persistence
|
|
81
|
-
* - Bulk operations that respect per-image differences
|
|
82
|
-
* - Automatic backend synchronization for all state changes
|
|
83
|
-
* - Comprehensive logging of multi-image operations
|
|
84
|
-
*/
|
|
85
|
-
export function useHonchoEditorBulk(controller, eventID, firebaseUid) {
|
|
86
|
-
console.log('[useHonchoEditorBulk] 🏭 Initializing with controller for multi-image backend sync');
|
|
87
|
-
const { currentBatch, selectedIds, actions: batchActions, historyInfo } = useAdjustmentHistoryBatch({
|
|
88
|
-
controller,
|
|
89
|
-
firebaseUid,
|
|
90
|
-
eventId: eventID,
|
|
91
|
-
devWarnings: true
|
|
92
|
-
});
|
|
93
|
-
const { images, info, actions } = usePaging(controller, firebaseUid, eventID, {
|
|
94
|
-
autoLoad: true,
|
|
95
|
-
autoReset: false // Prevent auto-reset to avoid loops
|
|
96
|
-
});
|
|
97
|
-
// Preset management
|
|
98
|
-
const { presets, actions: presetActions } = usePreset(controller, firebaseUid, {
|
|
99
|
-
autoLoad: true,
|
|
100
|
-
devWarnings: true
|
|
101
|
-
});
|
|
102
|
-
// Track which images have been synced to prevent loops
|
|
103
|
-
const lastSyncedImageIds = useRef(new Set());
|
|
104
|
-
// State for Bulk Editing
|
|
105
|
-
const [selectedBulkPreset, setSelectedBulkPreset] = useState('');
|
|
106
|
-
// Calculate active preset based on selected images' adjustments
|
|
107
|
-
const activePreset = useMemo(() => {
|
|
108
|
-
if (selectedIds.length === 0) {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
// Get adjustments for all selected images
|
|
112
|
-
const selectedAdjustments = selectedIds.map(imageId => {
|
|
113
|
-
return currentBatch.allImages[imageId] || {
|
|
114
|
-
tempScore: 0, tintScore: 0, vibranceScore: 0, saturationScore: 0,
|
|
115
|
-
exposureScore: 0, highlightsScore: 0, shadowsScore: 0, whitesScore: 0,
|
|
116
|
-
blacksScore: 0, contrastScore: 0, clarityScore: 0, sharpnessScore: 0,
|
|
117
|
-
};
|
|
118
|
-
});
|
|
119
|
-
// Check if all selected images have the same adjustments
|
|
120
|
-
const firstAdjustment = selectedAdjustments[0];
|
|
121
|
-
const allSameAdjustments = selectedAdjustments.every(adj => adjustmentsMatch(adj, firstAdjustment));
|
|
122
|
-
if (!allSameAdjustments) {
|
|
123
|
-
// Selected images have different adjustments
|
|
124
|
-
return null;
|
|
125
|
-
}
|
|
126
|
-
// Find preset that matches the common adjustment state
|
|
127
|
-
const matchingPreset = presets.find(preset => {
|
|
128
|
-
const presetAdjustments = presetToAdjustmentState(preset);
|
|
129
|
-
return adjustmentsMatch(presetAdjustments, firstAdjustment);
|
|
130
|
-
});
|
|
131
|
-
return matchingPreset || null;
|
|
132
|
-
}, [selectedIds, currentBatch.allImages, presets]);
|
|
133
|
-
// Update selectedBulkPreset when activePreset changes
|
|
134
|
-
useEffect(() => {
|
|
135
|
-
setSelectedBulkPreset(activePreset?.id || '');
|
|
136
|
-
}, [activePreset]);
|
|
137
|
-
// Use loading states from usePaging instead of local state
|
|
138
|
-
const isLoading = info.isLoading;
|
|
139
|
-
const error = info.error;
|
|
140
|
-
const hasMore = info.hasMore;
|
|
141
|
-
const imageData = useMemo(() => {
|
|
142
|
-
// console.debug("imageData recalculating with:", {
|
|
143
|
-
// imagesLength: images.length,
|
|
144
|
-
// selectedIds,
|
|
145
|
-
// currentBatch_allImages: currentBatch.allImages,
|
|
146
|
-
// currentBatch_allImages_keys: Object.keys(currentBatch.allImages)
|
|
147
|
-
// });
|
|
148
|
-
const res = images.map(item => {
|
|
149
|
-
const basePhoto = mapGalleryToPhotoData(item, selectedIds);
|
|
150
|
-
const batchAdjustment = currentBatch.allImages[item.id];
|
|
151
|
-
if (batchAdjustment) {
|
|
152
|
-
const adjustmentsValues = mapAdjustmentStateToAdjustmentEditor(batchAdjustment);
|
|
153
|
-
basePhoto.adjustments = adjustmentsValues;
|
|
154
|
-
}
|
|
155
|
-
// Merge batch adjustments over backend adjustments
|
|
156
|
-
return batchAdjustment ? { ...basePhoto } : basePhoto;
|
|
157
|
-
});
|
|
158
|
-
return res;
|
|
159
|
-
}, [images, selectedIds, currentBatch.allImages]);
|
|
160
|
-
// Store the latest batchActions.syncAdjustment in a ref to avoid dependency issues
|
|
161
|
-
const syncAdjustmentRef = useRef(batchActions.syncAdjustment);
|
|
162
|
-
syncAdjustmentRef.current = batchActions.syncAdjustment;
|
|
163
|
-
// Safe sync: Only sync new images to prevent infinite loops
|
|
164
|
-
useEffect(() => {
|
|
165
|
-
console.log('[useHonchoEditorBulk] 🔄 Sync effect triggered:', {
|
|
166
|
-
imagesLength: images.length,
|
|
167
|
-
imageIds: images.map(img => img.id),
|
|
168
|
-
lastSyncedImageIds: Array.from(lastSyncedImageIds.current),
|
|
169
|
-
lastSyncedCount: lastSyncedImageIds.current.size
|
|
170
|
-
});
|
|
171
|
-
if (images.length === 0)
|
|
172
|
-
return;
|
|
173
|
-
// Check if we have new images that haven't been synced
|
|
174
|
-
const currentImageIds = new Set(images.map(img => img.id));
|
|
175
|
-
const hasNewImages = images.some(img => !lastSyncedImageIds.current.has(img.id));
|
|
176
|
-
console.log('[useHonchoEditorBulk] 🔍 New images check:', {
|
|
177
|
-
currentImageIds: Array.from(currentImageIds),
|
|
178
|
-
hasNewImages,
|
|
179
|
-
newImages: images.filter(img => !lastSyncedImageIds.current.has(img.id)).map(img => img.id)
|
|
180
|
-
});
|
|
181
|
-
if (hasNewImages) {
|
|
182
|
-
console.log('[useHonchoEditorBulk] ⚠️ SYNC TRIGGER: Syncing new images to batch (THIS RESETS HISTORY!):', images.length);
|
|
183
|
-
syncAdjustmentRef.current(images.map(mapToImageAdjustmentConfig));
|
|
184
|
-
lastSyncedImageIds.current = currentImageIds;
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
console.log('[useHonchoEditorBulk] ✅ No new images, skipping sync (history preserved)');
|
|
188
|
-
}
|
|
189
|
-
}, [images]); // Only depend on images, not batchActions
|
|
190
|
-
const handleBackCallbackBulk = useCallback(() => {
|
|
191
|
-
const lastSelectedId = selectedIds.length > 0 ? selectedIds[selectedIds.length - 1] : "";
|
|
192
|
-
controller.handleBack(firebaseUid, lastSelectedId);
|
|
193
|
-
}, [controller, firebaseUid, selectedIds]);
|
|
194
|
-
const handleSelectBulkPreset = useCallback((event) => {
|
|
195
|
-
const presetId = event.target.value;
|
|
196
|
-
setSelectedBulkPreset(presetId);
|
|
197
|
-
console.log('[useHonchoEditorBulk] 🎨 Preset selection attempt:', {
|
|
198
|
-
presetId,
|
|
199
|
-
selectedImages: selectedIds,
|
|
200
|
-
imageCount: selectedIds.length,
|
|
201
|
-
hasController: !!controller,
|
|
202
|
-
hasFirebaseUid: !!firebaseUid
|
|
203
|
-
});
|
|
204
|
-
if (!presetId) {
|
|
205
|
-
console.log('[useHonchoEditorBulk] ❌ No preset ID provided, skipping backend call');
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
if (selectedIds.length === 0) {
|
|
209
|
-
console.log('[useHonchoEditorBulk] ❌ No images selected, skipping backend call');
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
console.log('[useHonchoEditorBulk] 🎨 Applying preset to multiple images:', {
|
|
213
|
-
presetId,
|
|
214
|
-
selectedImages: selectedIds,
|
|
215
|
-
imageCount: selectedIds.length
|
|
216
|
-
});
|
|
217
|
-
// Find the preset
|
|
218
|
-
const preset = presets.find(p => p.id === presetId);
|
|
219
|
-
if (!preset) {
|
|
220
|
-
console.log('[useHonchoEditorBulk] ❌ Preset not found in presets list:', presetId);
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
// Convert preset to adjustment state
|
|
224
|
-
const presetAdjustments = presetToAdjustmentState(preset);
|
|
225
|
-
console.log('[useHonchoEditorBulk] 📤 Sending preset adjustments to controller for each image:', presetAdjustments);
|
|
226
|
-
console.log('[useHonchoEditorBulk] 🔄 About to call batchActions.adjustSelectedWithPreset');
|
|
227
|
-
// Apply preset directly to all selected images using the clean action
|
|
228
|
-
// This will trigger backend calls for each selected image via adjustSelectedWithPreset
|
|
229
|
-
batchActions.adjustSelectedWithPreset(presetAdjustments);
|
|
230
|
-
console.log('[useHonchoEditorBulk] ✅ Called batchActions.adjustSelectedWithPreset, backend calls should be triggered');
|
|
231
|
-
}, [presets, selectedIds, batchActions, controller, firebaseUid]);
|
|
232
|
-
// This factory creates functions that adjust a value for all selected images
|
|
233
|
-
const createRelativeAdjuster = useCallback((key, amount) => () => {
|
|
234
|
-
console.debug(`[useHonchoEditorBulk] 🎛️ Bulk ${key} adjustment:`, {
|
|
235
|
-
key,
|
|
236
|
-
amount,
|
|
237
|
-
selectedImages: selectedIds,
|
|
238
|
-
imageCount: selectedIds.length
|
|
239
|
-
});
|
|
240
|
-
console.debug('[useHonchoEditorBulk] 📤 Sending bulk adjustment to controller for each selected image');
|
|
241
|
-
console.debug("currentBatch.allImages before:", currentBatch.allImages);
|
|
242
|
-
batchActions.adjustSelected({ [key]: amount });
|
|
243
|
-
// Debug after a short delay to see if the state changed
|
|
244
|
-
setTimeout(() => {
|
|
245
|
-
console.debug("currentBatch.allImages after:", currentBatch.allImages);
|
|
246
|
-
}, 100);
|
|
247
|
-
}, [batchActions, selectedIds, currentBatch.allImages]);
|
|
248
|
-
const handleBulkTempDecreaseMax = createRelativeAdjuster('tempScore', -20);
|
|
249
|
-
const handleBulkTempDecrease = createRelativeAdjuster('tempScore', -5);
|
|
250
|
-
const handleBulkTempIncrease = createRelativeAdjuster('tempScore', 5);
|
|
251
|
-
const handleBulkTempIncreaseMax = createRelativeAdjuster('tempScore', 20);
|
|
252
|
-
const handleBulkTintDecreaseMax = createRelativeAdjuster('tintScore', -20);
|
|
253
|
-
const handleBulkTintDecrease = createRelativeAdjuster('tintScore', -5);
|
|
254
|
-
const handleBulkTintIncrease = createRelativeAdjuster('tintScore', 5);
|
|
255
|
-
const handleBulkTintIncreaseMax = createRelativeAdjuster('tintScore', 20);
|
|
256
|
-
const handleBulkVibranceDecreaseMax = createRelativeAdjuster('vibranceScore', -20);
|
|
257
|
-
const handleBulkVibranceDecrease = createRelativeAdjuster('vibranceScore', -5);
|
|
258
|
-
const handleBulkVibranceIncrease = createRelativeAdjuster('vibranceScore', 5);
|
|
259
|
-
const handleBulkVibranceIncreaseMax = createRelativeAdjuster('vibranceScore', 20);
|
|
260
|
-
const handleBulkSaturationDecreaseMax = createRelativeAdjuster('saturationScore', -20);
|
|
261
|
-
const handleBulkSaturationDecrease = createRelativeAdjuster('saturationScore', -5);
|
|
262
|
-
const handleBulkSaturationIncrease = createRelativeAdjuster('saturationScore', 5);
|
|
263
|
-
const handleBulkSaturationIncreaseMax = createRelativeAdjuster('saturationScore', 20);
|
|
264
|
-
const handleBulkExposureDecreaseMax = createRelativeAdjuster('exposureScore', -20);
|
|
265
|
-
const handleBulkExposureDecrease = createRelativeAdjuster('exposureScore', -5);
|
|
266
|
-
const handleBulkExposureIncrease = createRelativeAdjuster('exposureScore', 5);
|
|
267
|
-
const handleBulkExposureIncreaseMax = createRelativeAdjuster('exposureScore', 20);
|
|
268
|
-
const handleBulkContrastDecreaseMax = createRelativeAdjuster('contrastScore', -20);
|
|
269
|
-
const handleBulkContrastDecrease = createRelativeAdjuster('contrastScore', -5);
|
|
270
|
-
const handleBulkContrastIncrease = createRelativeAdjuster('contrastScore', 5);
|
|
271
|
-
const handleBulkContrastIncreaseMax = createRelativeAdjuster('contrastScore', 20);
|
|
272
|
-
const handleBulkHighlightsDecreaseMax = createRelativeAdjuster('highlightsScore', -20);
|
|
273
|
-
const handleBulkHighlightsDecrease = createRelativeAdjuster('highlightsScore', -5);
|
|
274
|
-
const handleBulkHighlightsIncrease = createRelativeAdjuster('highlightsScore', 5);
|
|
275
|
-
const handleBulkHighlightsIncreaseMax = createRelativeAdjuster('highlightsScore', 20);
|
|
276
|
-
const handleBulkShadowsDecreaseMax = createRelativeAdjuster('shadowsScore', -20);
|
|
277
|
-
const handleBulkShadowsDecrease = createRelativeAdjuster('shadowsScore', -5);
|
|
278
|
-
const handleBulkShadowsIncrease = createRelativeAdjuster('shadowsScore', 5);
|
|
279
|
-
const handleBulkShadowsIncreaseMax = createRelativeAdjuster('shadowsScore', 20);
|
|
280
|
-
const handleBulkWhitesDecreaseMax = createRelativeAdjuster('whitesScore', -20);
|
|
281
|
-
const handleBulkWhitesDecrease = createRelativeAdjuster('whitesScore', -5);
|
|
282
|
-
const handleBulkWhitesIncrease = createRelativeAdjuster('whitesScore', 5);
|
|
283
|
-
const handleBulkWhitesIncreaseMax = createRelativeAdjuster('whitesScore', 20);
|
|
284
|
-
const handleBulkBlacksDecreaseMax = createRelativeAdjuster('blacksScore', -20);
|
|
285
|
-
const handleBulkBlacksDecrease = createRelativeAdjuster('blacksScore', -5);
|
|
286
|
-
const handleBulkBlacksIncrease = createRelativeAdjuster('blacksScore', 5);
|
|
287
|
-
const handleBulkBlacksIncreaseMax = createRelativeAdjuster('blacksScore', 20);
|
|
288
|
-
const handleBulkClarityDecreaseMax = createRelativeAdjuster('clarityScore', -20);
|
|
289
|
-
const handleBulkClarityDecrease = createRelativeAdjuster('clarityScore', -5);
|
|
290
|
-
const handleBulkClarityIncrease = createRelativeAdjuster('clarityScore', 5);
|
|
291
|
-
const handleBulkClarityIncreaseMax = createRelativeAdjuster('clarityScore', 20);
|
|
292
|
-
const handleBulkSharpnessDecreaseMax = createRelativeAdjuster('sharpnessScore', -20);
|
|
293
|
-
const handleBulkSharpnessDecrease = createRelativeAdjuster('sharpnessScore', -5);
|
|
294
|
-
const handleBulkSharpnessIncrease = createRelativeAdjuster('sharpnessScore', 5);
|
|
295
|
-
const handleBulkSharpnessIncreaseMax = createRelativeAdjuster('sharpnessScore', 20);
|
|
296
|
-
// const loadImages = useCallback(async (pageNum: number) => {
|
|
297
|
-
// // Use the correct loading state
|
|
298
|
-
// if (pageNum === 1) {
|
|
299
|
-
// setIsLoading(true);
|
|
300
|
-
// } else {
|
|
301
|
-
// setIsFetchingMore(true);
|
|
302
|
-
// }
|
|
303
|
-
// setError(null);
|
|
304
|
-
// try {
|
|
305
|
-
// const response = await controller.getImageList(firebaseUid, eventID, pageNum);
|
|
306
|
-
// // Sync adjustments for the new images with the batch history
|
|
307
|
-
// batchActions.syncAdjustment(response.gallery.map(mapToImageAdjustmentConfig));
|
|
308
|
-
// // Append new images for page > 1, otherwise replace
|
|
309
|
-
// setImageCollection(prev => pageNum === 1 ? response.gallery : [...prev, ...response.gallery]);
|
|
310
|
-
// setPage(response.current_page);
|
|
311
|
-
// setHasMore(response.next_page > 0 && response.gallery.length > 0);
|
|
312
|
-
// } catch (err: any) {
|
|
313
|
-
// console.error("Failed to fetch image list:", err);
|
|
314
|
-
// setError(err.message || "Could not load images.");
|
|
315
|
-
// } finally {
|
|
316
|
-
// if (pageNum === 1) {
|
|
317
|
-
// setIsLoading(false);
|
|
318
|
-
// } else {
|
|
319
|
-
// setIsFetchingMore(false);
|
|
320
|
-
// }
|
|
321
|
-
// }
|
|
322
|
-
// }, [controller, firebaseUid, eventID, batchActions]);
|
|
323
|
-
// const loadMoreImages = useCallback(() => {
|
|
324
|
-
// if (!isFetchingMore && hasMore) {
|
|
325
|
-
// loadImages(page + 1);
|
|
326
|
-
// }
|
|
327
|
-
// }, [isFetchingMore, hasMore, page, loadImages]);
|
|
328
|
-
// Note: Image loading is now handled by usePaging hook
|
|
329
|
-
// The sync logic above handles syncing loaded images to batch state
|
|
330
|
-
// useEffect(() => {
|
|
331
|
-
// if (eventID && firebaseUid) {
|
|
332
|
-
// setImageCollection([]); // reset when event changes
|
|
333
|
-
// setPage(1);
|
|
334
|
-
// loadImages(1);
|
|
335
|
-
// }
|
|
336
|
-
// }, [eventID, firebaseUid, loadImages]);
|
|
337
|
-
return {
|
|
338
|
-
imageData,
|
|
339
|
-
isLoading,
|
|
340
|
-
error,
|
|
341
|
-
selectedIds,
|
|
342
|
-
hasMore,
|
|
343
|
-
// loadMoreImages,
|
|
344
|
-
// Gallery Handlers
|
|
345
|
-
handleBackCallbackBulk,
|
|
346
|
-
// Preset functionality
|
|
347
|
-
presets,
|
|
348
|
-
selectedBulkPreset,
|
|
349
|
-
activePreset,
|
|
350
|
-
handleSelectBulkPreset,
|
|
351
|
-
// Preset creation handlers
|
|
352
|
-
presetActions, // Expose preset actions for create/rename/delete
|
|
353
|
-
handleToggleImageSelection: batchActions.toggleSelection,
|
|
354
|
-
handleLoadMore: actions.loadMore,
|
|
355
|
-
handleRefresh: actions.refresh,
|
|
356
|
-
// Adjustment
|
|
357
|
-
handleBulkTempDecreaseMax,
|
|
358
|
-
handleBulkTempDecrease,
|
|
359
|
-
handleBulkTempIncrease,
|
|
360
|
-
handleBulkTempIncreaseMax,
|
|
361
|
-
handleBulkTintDecreaseMax,
|
|
362
|
-
handleBulkTintDecrease,
|
|
363
|
-
handleBulkTintIncrease,
|
|
364
|
-
handleBulkTintIncreaseMax,
|
|
365
|
-
handleBulkVibranceDecreaseMax,
|
|
366
|
-
handleBulkVibranceDecrease,
|
|
367
|
-
handleBulkVibranceIncrease,
|
|
368
|
-
handleBulkVibranceIncreaseMax,
|
|
369
|
-
handleBulkSaturationDecreaseMax,
|
|
370
|
-
handleBulkSaturationDecrease,
|
|
371
|
-
handleBulkSaturationIncrease,
|
|
372
|
-
handleBulkSaturationIncreaseMax,
|
|
373
|
-
// Adjustment Light
|
|
374
|
-
handleBulkExposureDecreaseMax,
|
|
375
|
-
handleBulkExposureDecrease,
|
|
376
|
-
handleBulkExposureIncrease,
|
|
377
|
-
handleBulkExposureIncreaseMax,
|
|
378
|
-
handleBulkContrastDecreaseMax,
|
|
379
|
-
handleBulkContrastDecrease,
|
|
380
|
-
handleBulkContrastIncrease,
|
|
381
|
-
handleBulkContrastIncreaseMax,
|
|
382
|
-
handleBulkHighlightsDecreaseMax,
|
|
383
|
-
handleBulkHighlightsDecrease,
|
|
384
|
-
handleBulkHighlightsIncrease,
|
|
385
|
-
handleBulkHighlightsIncreaseMax,
|
|
386
|
-
handleBulkShadowsDecreaseMax,
|
|
387
|
-
handleBulkShadowsDecrease,
|
|
388
|
-
handleBulkShadowsIncrease,
|
|
389
|
-
handleBulkShadowsIncreaseMax,
|
|
390
|
-
handleBulkWhitesDecreaseMax,
|
|
391
|
-
handleBulkWhitesDecrease,
|
|
392
|
-
handleBulkWhitesIncrease,
|
|
393
|
-
handleBulkWhitesIncreaseMax,
|
|
394
|
-
handleBulkBlacksDecreaseMax,
|
|
395
|
-
handleBulkBlacksDecrease,
|
|
396
|
-
handleBulkBlacksIncrease,
|
|
397
|
-
handleBulkBlacksIncreaseMax,
|
|
398
|
-
// Adjustment Details
|
|
399
|
-
handleBulkClarityDecreaseMax,
|
|
400
|
-
handleBulkClarityDecrease,
|
|
401
|
-
handleBulkClarityIncrease,
|
|
402
|
-
handleBulkClarityIncreaseMax,
|
|
403
|
-
handleBulkSharpnessDecreaseMax,
|
|
404
|
-
handleBulkSharpnessDecrease,
|
|
405
|
-
handleBulkSharpnessIncrease,
|
|
406
|
-
handleBulkSharpnessIncreaseMax,
|
|
407
|
-
// History actions
|
|
408
|
-
handleUndo: () => {
|
|
409
|
-
console.log('[useHonchoEditorBulk] ⏪ Undo requested for multiple images:', {
|
|
410
|
-
selectedImages: selectedIds,
|
|
411
|
-
imageCount: selectedIds.length
|
|
412
|
-
});
|
|
413
|
-
console.log('[useHonchoEditorBulk] 📤 Sending undo (setHistoryIndex) to controller for each image');
|
|
414
|
-
return batchActions.undo();
|
|
415
|
-
},
|
|
416
|
-
handleRedo: () => {
|
|
417
|
-
console.log('[useHonchoEditorBulk] ⏩ Redo requested for multiple images:', {
|
|
418
|
-
selectedImages: selectedIds,
|
|
419
|
-
imageCount: selectedIds.length
|
|
420
|
-
});
|
|
421
|
-
console.log('[useHonchoEditorBulk] 📤 Sending redo (setHistoryIndex) to controller for each image');
|
|
422
|
-
return batchActions.redo();
|
|
423
|
-
},
|
|
424
|
-
handleReset: batchActions.reset,
|
|
425
|
-
historyInfo,
|
|
426
|
-
};
|
|
427
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { Controller, AdjustmentState, Preset } from './type';
|
|
2
|
-
import { Gallery } from './type';
|
|
3
|
-
import { AdjustmentValues } from '../../lib/editor/honcho-editor';
|
|
4
|
-
export interface UseHonchoEditorSingleOptions {
|
|
5
|
-
controller: Controller;
|
|
6
|
-
initImageId: string;
|
|
7
|
-
firebaseUid: string;
|
|
8
|
-
}
|
|
9
|
-
export interface UseHonchoEditorSingleState {
|
|
10
|
-
currentImageData: Gallery | null;
|
|
11
|
-
isGalleryLoading: boolean;
|
|
12
|
-
galleryError: string | null;
|
|
13
|
-
currentAdjustments: AdjustmentState;
|
|
14
|
-
isBatchMode: boolean;
|
|
15
|
-
canUndo: boolean;
|
|
16
|
-
canRedo: boolean;
|
|
17
|
-
isNextAvailable: boolean;
|
|
18
|
-
isPrevAvailable: boolean;
|
|
19
|
-
presets: Preset[];
|
|
20
|
-
activePreset: Preset | null;
|
|
21
|
-
presetsLoading: boolean;
|
|
22
|
-
presetsError: string | null;
|
|
23
|
-
}
|
|
24
|
-
export interface UseHonchoEditorSingleActions {
|
|
25
|
-
navigateNext: () => void;
|
|
26
|
-
navigatePrev: () => void;
|
|
27
|
-
updateAdjustment: (field: keyof AdjustmentState, value: number) => void;
|
|
28
|
-
setBatchMode: (enabled: boolean) => void;
|
|
29
|
-
startBatchMode: () => void;
|
|
30
|
-
endBatchMode: () => void;
|
|
31
|
-
undo: () => void;
|
|
32
|
-
redo: () => void;
|
|
33
|
-
reset: () => void;
|
|
34
|
-
loadPresets: () => Promise<void>;
|
|
35
|
-
applyPreset: (preset: Preset) => void;
|
|
36
|
-
createPreset: (name: string, adjustments: AdjustmentState) => Promise<Preset | null>;
|
|
37
|
-
renamePreset: (presetId: string, newName: string) => Promise<boolean>;
|
|
38
|
-
deletePreset: (presetId: string) => Promise<void>;
|
|
39
|
-
getEditorAdjustments: () => AdjustmentValues;
|
|
40
|
-
}
|
|
41
|
-
export declare function useHonchoEditorSingle({ controller, initImageId, firebaseUid }: UseHonchoEditorSingleOptions): {
|
|
42
|
-
state: UseHonchoEditorSingleState;
|
|
43
|
-
actions: UseHonchoEditorSingleActions;
|
|
44
|
-
};
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import { useCallback, useMemo } from 'react';
|
|
3
|
-
import { useAdjustmentHistory } from '../useAdjustmentHistory';
|
|
4
|
-
import { useGallerySwipe } from '../useGallerySwipe';
|
|
5
|
-
import { usePreset } from '../usePreset';
|
|
6
|
-
// Default adjustment values
|
|
7
|
-
const initialAdjustments = {
|
|
8
|
-
tempScore: 0, tintScore: 0, vibranceScore: 0, saturationScore: 0,
|
|
9
|
-
exposureScore: 0, highlightsScore: 0, shadowsScore: 0, whitesScore: 0,
|
|
10
|
-
blacksScore: 0, contrastScore: 0, clarityScore: 0, sharpnessScore: 0,
|
|
11
|
-
};
|
|
12
|
-
export function useHonchoEditorSingle({ controller, initImageId, firebaseUid }) {
|
|
13
|
-
// Memoize parameters to prevent unnecessary re-renders
|
|
14
|
-
const memoizedController = useMemo(() => controller, [controller]);
|
|
15
|
-
const memoizedInitImageId = useMemo(() => initImageId, [initImageId]);
|
|
16
|
-
const memoizedFirebaseUid = useMemo(() => firebaseUid, [firebaseUid]);
|
|
17
|
-
// Initialize business logic hooks only
|
|
18
|
-
const adjustmentHistory = useAdjustmentHistory(initialAdjustments, memoizedController, memoizedFirebaseUid, memoizedInitImageId);
|
|
19
|
-
const gallerySwipe = useGallerySwipe(memoizedFirebaseUid, memoizedInitImageId, memoizedController);
|
|
20
|
-
const presetHook = usePreset(memoizedController, memoizedFirebaseUid, { autoLoad: true });
|
|
21
|
-
// Find active preset based on current adjustments
|
|
22
|
-
const activePreset = presetHook.actions.findByAdjustments(adjustmentHistory.currentState);
|
|
23
|
-
// Actions - pure business logic, no editor interaction - wrapped in useCallback to prevent re-renders
|
|
24
|
-
const navigateNext = useCallback(() => {
|
|
25
|
-
if (gallerySwipe.isNextAvailable) {
|
|
26
|
-
gallerySwipe.onSwipeNext();
|
|
27
|
-
}
|
|
28
|
-
}, [gallerySwipe.isNextAvailable, gallerySwipe.onSwipeNext]);
|
|
29
|
-
const navigatePrev = useCallback(() => {
|
|
30
|
-
if (gallerySwipe.isPrevAvailable) {
|
|
31
|
-
gallerySwipe.onSwipePrev();
|
|
32
|
-
}
|
|
33
|
-
}, [gallerySwipe.isPrevAvailable, gallerySwipe.onSwipePrev]);
|
|
34
|
-
const updateAdjustment = useCallback((field, value) => {
|
|
35
|
-
const newState = {
|
|
36
|
-
...adjustmentHistory.currentState,
|
|
37
|
-
[field]: value
|
|
38
|
-
};
|
|
39
|
-
adjustmentHistory.actions.pushState(newState);
|
|
40
|
-
}, [adjustmentHistory.currentState, adjustmentHistory.actions.pushState]);
|
|
41
|
-
const setBatchMode = useCallback((enabled) => {
|
|
42
|
-
adjustmentHistory.config.setBatchMode(enabled);
|
|
43
|
-
}, [adjustmentHistory.config.setBatchMode]);
|
|
44
|
-
const startBatchMode = useCallback(() => {
|
|
45
|
-
adjustmentHistory.config.setBatchMode(true);
|
|
46
|
-
}, [adjustmentHistory.config.setBatchMode]);
|
|
47
|
-
const endBatchMode = useCallback(() => {
|
|
48
|
-
adjustmentHistory.config.setBatchMode(false);
|
|
49
|
-
}, [adjustmentHistory.config.setBatchMode]);
|
|
50
|
-
const undo = useCallback(() => {
|
|
51
|
-
adjustmentHistory.actions.undo();
|
|
52
|
-
}, [adjustmentHistory.actions.undo]);
|
|
53
|
-
const redo = useCallback(() => {
|
|
54
|
-
adjustmentHistory.actions.redo();
|
|
55
|
-
}, [adjustmentHistory.actions.redo]);
|
|
56
|
-
const reset = useCallback(async () => {
|
|
57
|
-
// Reset means setting all adjustments to 0 and adding it as new history entry
|
|
58
|
-
// This allows users to undo the reset operation
|
|
59
|
-
// Reset acts like normal adjustment - each reset creates a new history entry
|
|
60
|
-
console.log('Resetting adjustments to 0 - adding to history and sending to backend');
|
|
61
|
-
// First add reset to history (this creates local history entry)
|
|
62
|
-
adjustmentHistory.actions.pushState(initialAdjustments);
|
|
63
|
-
// Then sync to backend
|
|
64
|
-
await adjustmentHistory.config.syncToBackend();
|
|
65
|
-
}, [adjustmentHistory.actions.pushState, adjustmentHistory.config.syncToBackend]);
|
|
66
|
-
const loadPresets = useCallback(async () => {
|
|
67
|
-
await presetHook.actions.load();
|
|
68
|
-
}, [presetHook.actions.load]);
|
|
69
|
-
const applyPreset = useCallback(async (preset) => {
|
|
70
|
-
console.log('Applying preset:', preset.name, '- saving to backend history');
|
|
71
|
-
const adjustmentState = {
|
|
72
|
-
tempScore: preset.temperature,
|
|
73
|
-
tintScore: preset.tint,
|
|
74
|
-
vibranceScore: preset.vibrance,
|
|
75
|
-
saturationScore: preset.saturation,
|
|
76
|
-
exposureScore: preset.exposure,
|
|
77
|
-
highlightsScore: preset.highlights,
|
|
78
|
-
shadowsScore: preset.shadows,
|
|
79
|
-
whitesScore: preset.whites,
|
|
80
|
-
blacksScore: preset.blacks,
|
|
81
|
-
contrastScore: preset.contrast,
|
|
82
|
-
clarityScore: preset.clarity,
|
|
83
|
-
sharpnessScore: preset.sharpness,
|
|
84
|
-
};
|
|
85
|
-
// Apply preset directly and add to history
|
|
86
|
-
adjustmentHistory.actions.pushState(adjustmentState);
|
|
87
|
-
// Then sync to backend
|
|
88
|
-
await adjustmentHistory.config.syncToBackend();
|
|
89
|
-
}, [adjustmentHistory.actions.pushState, adjustmentHistory.config.syncToBackend]);
|
|
90
|
-
const createPreset = useCallback(async (name, adjustments) => {
|
|
91
|
-
return await presetHook.actions.create(name, adjustments);
|
|
92
|
-
}, [presetHook.actions.create]);
|
|
93
|
-
const renamePreset = useCallback(async (presetId, newName) => {
|
|
94
|
-
return await presetHook.actions.rename(presetId, newName);
|
|
95
|
-
}, [presetHook.actions.rename]);
|
|
96
|
-
const deletePreset = useCallback(async (presetId) => {
|
|
97
|
-
await presetHook.actions.delete(presetId);
|
|
98
|
-
}, [presetHook.actions.delete]);
|
|
99
|
-
const getEditorAdjustments = useCallback(() => {
|
|
100
|
-
const adjustments = adjustmentHistory.currentState;
|
|
101
|
-
return {
|
|
102
|
-
temperature: adjustments.tempScore,
|
|
103
|
-
tint: adjustments.tintScore,
|
|
104
|
-
vibrance: adjustments.vibranceScore / 100,
|
|
105
|
-
saturation: adjustments.saturationScore / 100,
|
|
106
|
-
exposure: (adjustments.exposureScore / 100) * 3,
|
|
107
|
-
highlights: adjustments.highlightsScore / 100,
|
|
108
|
-
shadows: adjustments.shadowsScore / 100,
|
|
109
|
-
whites: adjustments.whitesScore / 100,
|
|
110
|
-
blacks: adjustments.blacksScore / 100,
|
|
111
|
-
contrast: adjustments.contrastScore / 100,
|
|
112
|
-
clarity: adjustments.clarityScore / 100,
|
|
113
|
-
sharpness: adjustments.sharpnessScore / 100,
|
|
114
|
-
};
|
|
115
|
-
}, [adjustmentHistory.currentState]);
|
|
116
|
-
const actions = {
|
|
117
|
-
// Navigation
|
|
118
|
-
navigateNext,
|
|
119
|
-
navigatePrev,
|
|
120
|
-
// Adjustments
|
|
121
|
-
updateAdjustment,
|
|
122
|
-
setBatchMode,
|
|
123
|
-
startBatchMode,
|
|
124
|
-
endBatchMode,
|
|
125
|
-
// History
|
|
126
|
-
undo,
|
|
127
|
-
redo,
|
|
128
|
-
reset,
|
|
129
|
-
// Presets
|
|
130
|
-
loadPresets,
|
|
131
|
-
applyPreset,
|
|
132
|
-
createPreset,
|
|
133
|
-
renamePreset,
|
|
134
|
-
deletePreset,
|
|
135
|
-
// Adjustment conversion for editor
|
|
136
|
-
getEditorAdjustments
|
|
137
|
-
};
|
|
138
|
-
// State - pure business state, no editor state
|
|
139
|
-
const state = {
|
|
140
|
-
// Image state
|
|
141
|
-
currentImageData: gallerySwipe.currentImageData,
|
|
142
|
-
isGalleryLoading: gallerySwipe.isLoading,
|
|
143
|
-
galleryError: gallerySwipe.error,
|
|
144
|
-
// Adjustment state
|
|
145
|
-
currentAdjustments: adjustmentHistory.currentState,
|
|
146
|
-
isBatchMode: adjustmentHistory.historyInfo.isBatchMode,
|
|
147
|
-
canUndo: adjustmentHistory.historyInfo.canUndo,
|
|
148
|
-
canRedo: adjustmentHistory.historyInfo.canRedo,
|
|
149
|
-
// Navigation state
|
|
150
|
-
isNextAvailable: gallerySwipe.isNextAvailable,
|
|
151
|
-
isPrevAvailable: gallerySwipe.isPrevAvailable,
|
|
152
|
-
// Preset state
|
|
153
|
-
presets: presetHook.presets,
|
|
154
|
-
activePreset: activePreset || null,
|
|
155
|
-
presetsLoading: presetHook.info.isLoading,
|
|
156
|
-
presetsError: presetHook.info.error,
|
|
157
|
-
};
|
|
158
|
-
return {
|
|
159
|
-
state,
|
|
160
|
-
actions
|
|
161
|
-
};
|
|
162
|
-
}
|