@yogiswara/honcho-editor-ui 1.3.2 → 1.3.4
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.
|
@@ -37,7 +37,7 @@ export type ImageItem = {
|
|
|
37
37
|
url: string;
|
|
38
38
|
file: File;
|
|
39
39
|
};
|
|
40
|
-
export declare function useHonchoEditor(controller: Controller, initImageId: string, firebaseUid: string
|
|
40
|
+
export declare function useHonchoEditor(controller: Controller, initImageId: string, firebaseUid: string): {
|
|
41
41
|
canvasRef: import("react").MutableRefObject<HTMLCanvasElement | null>;
|
|
42
42
|
canvasContainerRef: import("react").MutableRefObject<HTMLDivElement | null>;
|
|
43
43
|
fileInputRef: import("react").MutableRefObject<HTMLInputElement | null>;
|
|
@@ -95,7 +95,7 @@ export declare function useHonchoEditor(controller: Controller, initImageId: str
|
|
|
95
95
|
handleScriptReady: () => Promise<void>;
|
|
96
96
|
handleFileChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
97
97
|
handleAlertClose: () => void;
|
|
98
|
-
loadImageFromId: (firebaseUid: string, imageId: string) => Promise<
|
|
98
|
+
loadImageFromId: (firebaseUid: string, imageId: string) => Promise<Gallery | undefined>;
|
|
99
99
|
loadImageFromUrl: (url: string) => Promise<void>;
|
|
100
100
|
handleRevert: () => void;
|
|
101
101
|
handleUndo: () => void;
|
|
@@ -6,11 +6,12 @@ const initialAdjustments = {
|
|
|
6
6
|
whitesScore: 0, blacksScore: 0, saturationScore: 0, contrastScore: 0, clarityScore: 0, sharpnessScore: 0,
|
|
7
7
|
};
|
|
8
8
|
const clamp = (value) => Math.max(-100, Math.min(100, value));
|
|
9
|
-
export function useHonchoEditor(controller, initImageId, firebaseUid
|
|
9
|
+
export function useHonchoEditor(controller, initImageId, firebaseUid) {
|
|
10
10
|
const [currentImageId, setCurrentImageId] = useState(initImageId);
|
|
11
11
|
const [currentPage, setCurrentPage] = useState(1);
|
|
12
12
|
const [hasNextPage, setHasNextPage] = useState(true);
|
|
13
13
|
const [isFetchingNextPage, setIsFetchingNextPage] = useState(false);
|
|
14
|
+
const [eventId, setEventId] = useState(null);
|
|
14
15
|
// MARK: - Core Editor State & Refs
|
|
15
16
|
const editorRef = useRef(null);
|
|
16
17
|
const canvasRef = useRef(null);
|
|
@@ -175,33 +176,6 @@ export function useHonchoEditor(controller, initImageId, firebaseUid, eventId) {
|
|
|
175
176
|
}, 50);
|
|
176
177
|
return () => clearTimeout(timeoutId);
|
|
177
178
|
}, [activeSubPanel, isBulkEditing]);
|
|
178
|
-
useEffect(() => {
|
|
179
|
-
const fetchAndSetImageList = async () => {
|
|
180
|
-
if (controller && firebaseUid && eventId && imageList.length === 0) {
|
|
181
|
-
try {
|
|
182
|
-
console.log("Hook is fetching image list for event:", eventId);
|
|
183
|
-
// The controller now requires eventId, adjust the interface if needed
|
|
184
|
-
const response = await controller.getImageList(firebaseUid, eventId, 1);
|
|
185
|
-
const items = response.gallery.map(g => ({
|
|
186
|
-
id: g.id,
|
|
187
|
-
url: g.raw_edited?.path || g.download?.path || '',
|
|
188
|
-
name: g.id,
|
|
189
|
-
file: new File([], g.id),
|
|
190
|
-
}));
|
|
191
|
-
setImageList(items);
|
|
192
|
-
// ✅ ADD THIS CONSOLE LOG
|
|
193
|
-
console.log("✅ Image list fetched and set in state:", items);
|
|
194
|
-
// ✅ SET INITIAL PAGINATION STATE
|
|
195
|
-
setCurrentPage(1);
|
|
196
|
-
setHasNextPage(response.next_page !== 0 && response.next_page > response.current_page);
|
|
197
|
-
}
|
|
198
|
-
catch (error) {
|
|
199
|
-
console.error("Hook failed to fetch image list:", error);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
};
|
|
203
|
-
fetchAndSetImageList();
|
|
204
|
-
}, [controller, firebaseUid, eventId]);
|
|
205
179
|
// Effect for keyboard shortcuts
|
|
206
180
|
useEffect(() => {
|
|
207
181
|
window.addEventListener('keydown', handleKeyDown);
|
|
@@ -305,9 +279,8 @@ export function useHonchoEditor(controller, initImageId, firebaseUid, eventId) {
|
|
|
305
279
|
? gallery.raw_edited.path
|
|
306
280
|
: gallery?.download?.path;
|
|
307
281
|
if (imagePath) {
|
|
308
|
-
console.log("Test Image Path", imagePath);
|
|
309
|
-
console.log("Test gallery Path", { ...gallery });
|
|
310
282
|
await loadImageFromUrl(imagePath);
|
|
283
|
+
return gallery; // ✅ RETURN the gallery object on success
|
|
311
284
|
}
|
|
312
285
|
else {
|
|
313
286
|
throw new Error("Controller did not return a valid image object with path.");
|
|
@@ -333,30 +306,30 @@ export function useHonchoEditor(controller, initImageId, firebaseUid, eventId) {
|
|
|
333
306
|
const currentIndex = imageList.findIndex(img => img.id === currentImageId);
|
|
334
307
|
// Condition 1: We are at the last image of the currently loaded list.
|
|
335
308
|
if (currentIndex === imageList.length - 1) {
|
|
309
|
+
// ✅ ADD THIS CHECK: Ensure we have the eventId before trying to fetch.
|
|
310
|
+
if (!eventId) {
|
|
311
|
+
console.error("Cannot fetch next page, eventId has not been discovered yet.");
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
336
314
|
// Condition 2: Check if there's a next page and we aren't already fetching it.
|
|
337
315
|
if (hasNextPage && !isFetchingNextPage) {
|
|
338
316
|
console.log(`At end of list. Fetching next page: ${currentPage + 1}`);
|
|
339
|
-
setIsFetchingNextPage(true);
|
|
317
|
+
setIsFetchingNextPage(true);
|
|
340
318
|
try {
|
|
341
|
-
// Fetch the next page of images
|
|
342
319
|
const response = await controller.getImageList(firebaseUid, eventId, currentPage + 1);
|
|
343
|
-
// If the API returns new images...
|
|
344
320
|
if (response.gallery && response.gallery.length > 0) {
|
|
345
321
|
const newItems = response.gallery.map(g => ({
|
|
346
322
|
id: g.id,
|
|
347
323
|
url: g.raw_edited?.path || g.download?.path || '',
|
|
324
|
+
name: g.id, // ✅ ADDED: Fulfill the ImageItem 'name' property
|
|
348
325
|
file: new File([], g.id),
|
|
349
326
|
}));
|
|
350
|
-
// Append the new images to our existing list
|
|
351
327
|
setImageList(prevList => [...prevList, ...newItems]);
|
|
352
|
-
// Update the pagination state
|
|
353
328
|
setCurrentPage(response.current_page);
|
|
354
329
|
setHasNextPage(response.next_page !== 0 && response.next_page > response.current_page);
|
|
355
|
-
// IMPORTANT: Set the current image to the first of the NEW images
|
|
356
330
|
setCurrentImageId(newItems[0].id);
|
|
357
331
|
}
|
|
358
332
|
else {
|
|
359
|
-
// No more images left to fetch
|
|
360
333
|
setHasNextPage(false);
|
|
361
334
|
}
|
|
362
335
|
}
|
|
@@ -364,7 +337,7 @@ export function useHonchoEditor(controller, initImageId, firebaseUid, eventId) {
|
|
|
364
337
|
console.error("Failed to fetch next page:", error);
|
|
365
338
|
}
|
|
366
339
|
finally {
|
|
367
|
-
setIsFetchingNextPage(false);
|
|
340
|
+
setIsFetchingNextPage(false);
|
|
368
341
|
}
|
|
369
342
|
}
|
|
370
343
|
// Condition 3: We are NOT at the end of the list, so just navigate normally.
|
|
@@ -399,6 +372,45 @@ export function useHonchoEditor(controller, initImageId, firebaseUid, eventId) {
|
|
|
399
372
|
// Dependencies: The external props and readiness flags that trigger this logic.
|
|
400
373
|
// Whenever any of these change, this effect will re-evaluate.
|
|
401
374
|
}, [initImageId, firebaseUid, controller, isEditorReady, loadImageFromId]);
|
|
375
|
+
useEffect(() => {
|
|
376
|
+
const initialize = async () => {
|
|
377
|
+
if (initImageId && firebaseUid && controller && isEditorReady) {
|
|
378
|
+
console.log(`[INIT] Starting sequence for image: ${initImageId}`);
|
|
379
|
+
const initialGallery = await loadImageFromId(firebaseUid, initImageId);
|
|
380
|
+
// ✅ ADD THIS BLOCK TO CHECK THE DATA
|
|
381
|
+
console.group("[DEBUG] Checking Initial Gallery Data");
|
|
382
|
+
if (initialGallery) {
|
|
383
|
+
console.log("Full gallery object received:", initialGallery);
|
|
384
|
+
console.log("Discovered eventId from data:", initialGallery.event_id);
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
console.error("Failed to fetch the initial gallery object.");
|
|
388
|
+
}
|
|
389
|
+
console.groupEnd();
|
|
390
|
+
if (initialGallery && initialGallery.event_id) {
|
|
391
|
+
const fetchedEventId = initialGallery.event_id;
|
|
392
|
+
console.log(`[INIT] Discovered eventID: ${fetchedEventId}`);
|
|
393
|
+
setEventId(fetchedEventId); // Store the discovered eventId in our state
|
|
394
|
+
// 4. Now, use the discovered eventId to fetch the full image list for navigation
|
|
395
|
+
const response = await controller.getImageList(firebaseUid, fetchedEventId, 1);
|
|
396
|
+
const items = response.gallery.map(g => ({
|
|
397
|
+
id: g.id,
|
|
398
|
+
url: g.raw_edited?.path || g.download?.path || '',
|
|
399
|
+
name: g.id,
|
|
400
|
+
file: new File([], g.id),
|
|
401
|
+
}));
|
|
402
|
+
setImageList(items);
|
|
403
|
+
setCurrentPage(1);
|
|
404
|
+
setHasNextPage(response.next_page !== 0 && response.next_page > response.current_page);
|
|
405
|
+
console.log("[INIT] Image list fetched and set.");
|
|
406
|
+
}
|
|
407
|
+
else {
|
|
408
|
+
console.error("[INIT] Failed to get initial gallery data or event_id was missing.");
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
};
|
|
412
|
+
initialize();
|
|
413
|
+
}, [initImageId, firebaseUid, controller, isEditorReady, loadImageFromId]);
|
|
402
414
|
useEffect(() => {
|
|
403
415
|
// Ensure we have everything needed before trying to load.
|
|
404
416
|
if (currentImageId && firebaseUid && controller && isEditorReady) {
|