@lodashventure/medusa-collection-thumbnail 1.1.5 → 1.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/.medusa/server/src/admin/index.js +2 -177
- package/.medusa/server/src/admin/index.mjs +4 -179
- package/.medusa/server/src/api/admin/collections/[id]/thumbnail/route.js +211 -0
- package/.medusa/server/{api → src/api}/middlewares.js +1 -1
- package/.medusa/server/src/api/store/collections/[id]/route.js +43 -0
- package/.medusa/server/src/api/store/collections/route.js +71 -0
- package/.medusa/server/src/index.js +15 -0
- package/.medusa/server/{modules → src/modules}/collection/index.js +1 -1
- package/.medusa/server/{modules/collection/migrations/Migration20250921062957.js → src/modules/collection/migrations/Migration20251108000000.js} +4 -4
- package/.medusa/server/{modules → src/modules}/collection/models/collection.js +1 -1
- package/.medusa/server/{modules → src/modules}/collection/service.js +1 -1
- package/.medusa/server/src/services/gcs-direct-upload.js +56 -0
- package/.medusa/server/src/workflows/upload-collection-thumbnail.js +59 -0
- package/README.md +32 -34
- package/package.json +16 -16
- package/.medusa/server/api/admin/collections/[id]/thumbnail/route.d.ts +0 -8
- package/.medusa/server/api/admin/collections/[id]/thumbnail/route.js +0 -211
- package/.medusa/server/api/middlewares.d.ts +0 -2
- package/.medusa/server/api/store/collections/[id]/route.d.ts +0 -2
- package/.medusa/server/api/store/collections/[id]/route.js +0 -46
- package/.medusa/server/api/store/collections/route.d.ts +0 -2
- package/.medusa/server/api/store/collections/route.js +0 -71
- package/.medusa/server/index.d.ts +0 -2
- package/.medusa/server/index.js +0 -8
- package/.medusa/server/links/collection-thumbnail.d.ts +0 -2
- package/.medusa/server/links/collection-thumbnail.js +0 -16
- package/.medusa/server/modules/collection/index.d.ts +0 -21
- package/.medusa/server/modules/collection/migrations/Migration20250921062957.d.ts +0 -5
- package/.medusa/server/modules/collection/models/collection.d.ts +0 -5
- package/.medusa/server/modules/collection/service.d.ts +0 -10
- package/.medusa/server/services/gcs-direct-upload.d.ts +0 -8
- package/.medusa/server/services/gcs-direct-upload.js +0 -59
- package/.medusa/server/workflows/upload-collection-thumbnail.d.ts +0 -13
- package/.medusa/server/workflows/upload-collection-thumbnail.js +0 -59
|
@@ -314,169 +314,6 @@ const CollectionThumbnailWidget = ({ data }) => {
|
|
|
314
314
|
adminSdk.defineWidgetConfig({
|
|
315
315
|
zone: "product_collection.details.after"
|
|
316
316
|
});
|
|
317
|
-
const CollectionThumbnailsPage = () => {
|
|
318
|
-
const [collections, setCollections] = react.useState([]);
|
|
319
|
-
const [loading, setLoading] = react.useState(true);
|
|
320
|
-
const [error, setError] = react.useState(null);
|
|
321
|
-
const [selectedCollection, setSelectedCollection] = react.useState(null);
|
|
322
|
-
const [showUploader, setShowUploader] = react.useState(false);
|
|
323
|
-
react.useEffect(() => {
|
|
324
|
-
fetchCollections();
|
|
325
|
-
}, []);
|
|
326
|
-
const fetchCollections = async () => {
|
|
327
|
-
setLoading(true);
|
|
328
|
-
setError(null);
|
|
329
|
-
try {
|
|
330
|
-
const response = await fetch("/admin/collections?limit=100", {
|
|
331
|
-
credentials: "include"
|
|
332
|
-
});
|
|
333
|
-
if (response.ok) {
|
|
334
|
-
const data = await response.json();
|
|
335
|
-
const collectionsData = data.collections || [];
|
|
336
|
-
const collectionsWithThumbnails = await Promise.all(
|
|
337
|
-
collectionsData.map(async (collection) => {
|
|
338
|
-
try {
|
|
339
|
-
const thumbResponse = await fetch(
|
|
340
|
-
`/admin/collections/${collection.id}/thumbnail`,
|
|
341
|
-
{
|
|
342
|
-
credentials: "include"
|
|
343
|
-
}
|
|
344
|
-
);
|
|
345
|
-
if (thumbResponse.ok) {
|
|
346
|
-
const thumbData = await thumbResponse.json();
|
|
347
|
-
return { ...collection, thumbnail: thumbData.thumbnail };
|
|
348
|
-
}
|
|
349
|
-
} catch (err) {
|
|
350
|
-
}
|
|
351
|
-
return collection;
|
|
352
|
-
})
|
|
353
|
-
);
|
|
354
|
-
setCollections(collectionsWithThumbnails);
|
|
355
|
-
} else {
|
|
356
|
-
setCollections([]);
|
|
357
|
-
}
|
|
358
|
-
} catch (err) {
|
|
359
|
-
setCollections([]);
|
|
360
|
-
console.log("Collections API not available, showing demo mode");
|
|
361
|
-
} finally {
|
|
362
|
-
setLoading(false);
|
|
363
|
-
}
|
|
364
|
-
};
|
|
365
|
-
const handleUploadClick = (collection) => {
|
|
366
|
-
setSelectedCollection(collection);
|
|
367
|
-
setShowUploader(true);
|
|
368
|
-
};
|
|
369
|
-
const handleDeleteThumbnail = async (collectionId) => {
|
|
370
|
-
if (!confirm("Are you sure you want to delete this thumbnail?")) return;
|
|
371
|
-
try {
|
|
372
|
-
const response = await fetch(
|
|
373
|
-
`/admin/collections/${collectionId}/thumbnail`,
|
|
374
|
-
{
|
|
375
|
-
method: "DELETE",
|
|
376
|
-
credentials: "include"
|
|
377
|
-
}
|
|
378
|
-
);
|
|
379
|
-
if (response.ok) {
|
|
380
|
-
fetchCollections();
|
|
381
|
-
} else {
|
|
382
|
-
alert("Failed to delete thumbnail");
|
|
383
|
-
}
|
|
384
|
-
} catch (err) {
|
|
385
|
-
alert("Error deleting thumbnail");
|
|
386
|
-
}
|
|
387
|
-
};
|
|
388
|
-
const handleUploaderClose = () => {
|
|
389
|
-
setShowUploader(false);
|
|
390
|
-
setSelectedCollection(null);
|
|
391
|
-
fetchCollections();
|
|
392
|
-
};
|
|
393
|
-
if (loading) {
|
|
394
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-64 items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { children: "Loading collections..." }) }) });
|
|
395
|
-
}
|
|
396
|
-
if (error) {
|
|
397
|
-
return /* @__PURE__ */ jsxRuntime.jsx(ui.Container, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Alert, { variant: "error", dismissible: true, children: error }) });
|
|
398
|
-
}
|
|
399
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { children: [
|
|
400
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-8", children: [
|
|
401
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h1", className: "mb-2", children: "Collection Thumbnails" }),
|
|
402
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-subtle", children: "Manage thumbnail images for your product collections" })
|
|
403
|
-
] }),
|
|
404
|
-
collections.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-64 flex-col items-center justify-center rounded-lg border-2 border-dashed border-ui-border-base", children: [
|
|
405
|
-
/* @__PURE__ */ jsxRuntime.jsx(icons.PhotoSolid, { className: "mb-4 h-12 w-12 text-ui-fg-subtle" }),
|
|
406
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "mb-2 text-lg font-medium", children: "No collections found" }),
|
|
407
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-subtle", children: "Create collections first to manage their thumbnails" })
|
|
408
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-lg border", children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Table, { children: [
|
|
409
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Header, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Table.Row, { children: [
|
|
410
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Thumbnail" }),
|
|
411
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Collection" }),
|
|
412
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Handle" }),
|
|
413
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Status" }),
|
|
414
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { className: "text-right", children: "Actions" })
|
|
415
|
-
] }) }),
|
|
416
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Body, { children: collections.map((collection) => /* @__PURE__ */ jsxRuntime.jsxs(ui.Table.Row, { children: [
|
|
417
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: collection.thumbnail ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
418
|
-
"img",
|
|
419
|
-
{
|
|
420
|
-
src: collection.thumbnail.startsWith("http") ? collection.thumbnail : `http://localhost:9000${collection.thumbnail}`,
|
|
421
|
-
alt: collection.title,
|
|
422
|
-
className: "h-12 w-12 object-cover rounded"
|
|
423
|
-
}
|
|
424
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded bg-ui-bg-subtle", children: /* @__PURE__ */ jsxRuntime.jsx(icons.PhotoSolid, { className: "h-6 w-6 text-ui-fg-subtle" }) }) }),
|
|
425
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "font-medium", children: collection.title }) }),
|
|
426
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "blue", children: collection.handle }) }),
|
|
427
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: collection.thumbnail ? /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "green", children: "Has Thumbnail" }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "grey", children: "No Thumbnail" }) }),
|
|
428
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-end gap-2", children: [
|
|
429
|
-
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
430
|
-
ui.Button,
|
|
431
|
-
{
|
|
432
|
-
variant: "secondary",
|
|
433
|
-
size: "small",
|
|
434
|
-
onClick: () => handleUploadClick(collection),
|
|
435
|
-
children: [
|
|
436
|
-
/* @__PURE__ */ jsxRuntime.jsx(icons.CloudArrowUp, { className: "mr-1" }),
|
|
437
|
-
collection.thumbnail ? "Replace" : "Upload"
|
|
438
|
-
]
|
|
439
|
-
}
|
|
440
|
-
),
|
|
441
|
-
collection.thumbnail && /* @__PURE__ */ jsxRuntime.jsx(
|
|
442
|
-
ui.Button,
|
|
443
|
-
{
|
|
444
|
-
variant: "danger",
|
|
445
|
-
size: "small",
|
|
446
|
-
onClick: () => handleDeleteThumbnail(collection.id),
|
|
447
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(icons.Trash, {})
|
|
448
|
-
}
|
|
449
|
-
)
|
|
450
|
-
] }) })
|
|
451
|
-
] }, collection.id)) })
|
|
452
|
-
] }) }),
|
|
453
|
-
showUploader && selectedCollection && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full max-w-2xl rounded-lg bg-ui-bg-base p-6", children: [
|
|
454
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4 flex items-center justify-between", children: [
|
|
455
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
456
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h2", children: "Upload Thumbnail" }),
|
|
457
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { className: "text-ui-fg-subtle", children: selectedCollection.title })
|
|
458
|
-
] }),
|
|
459
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: handleUploaderClose, children: "Close" })
|
|
460
|
-
] }),
|
|
461
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
462
|
-
CollectionThumbnailUploader,
|
|
463
|
-
{
|
|
464
|
-
collectionId: selectedCollection.id,
|
|
465
|
-
initialThumbnail: selectedCollection.thumbnail,
|
|
466
|
-
onThumbnailChange: (url) => {
|
|
467
|
-
if (!url) {
|
|
468
|
-
handleUploaderClose();
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
)
|
|
473
|
-
] }) })
|
|
474
|
-
] });
|
|
475
|
-
};
|
|
476
|
-
const config = adminSdk.defineRouteConfig({
|
|
477
|
-
label: "Collection Thumbnails",
|
|
478
|
-
icon: icons.PhotoSolid
|
|
479
|
-
});
|
|
480
317
|
const widgetModule = { widgets: [
|
|
481
318
|
{
|
|
482
319
|
Component: CollectionThumbnailWidget,
|
|
@@ -484,22 +321,10 @@ const widgetModule = { widgets: [
|
|
|
484
321
|
}
|
|
485
322
|
] };
|
|
486
323
|
const routeModule = {
|
|
487
|
-
routes: [
|
|
488
|
-
{
|
|
489
|
-
Component: CollectionThumbnailsPage,
|
|
490
|
-
path: "/collection-thumbnails"
|
|
491
|
-
}
|
|
492
|
-
]
|
|
324
|
+
routes: []
|
|
493
325
|
};
|
|
494
326
|
const menuItemModule = {
|
|
495
|
-
menuItems: [
|
|
496
|
-
{
|
|
497
|
-
label: config.label,
|
|
498
|
-
icon: config.icon,
|
|
499
|
-
path: "/collection-thumbnails",
|
|
500
|
-
nested: void 0
|
|
501
|
-
}
|
|
502
|
-
]
|
|
327
|
+
menuItems: []
|
|
503
328
|
};
|
|
504
329
|
const formModule = { customFields: {} };
|
|
505
330
|
const displayModule = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { defineWidgetConfig
|
|
3
|
-
import { clx, Button, Text, Container, Heading
|
|
2
|
+
import { defineWidgetConfig } from "@medusajs/admin-sdk";
|
|
3
|
+
import { clx, Button, Text, Container, Heading } from "@medusajs/ui";
|
|
4
4
|
import { CloudArrowUp, Trash, PhotoSolid } from "@medusajs/icons";
|
|
5
5
|
import { useState, useCallback, useEffect } from "react";
|
|
6
6
|
import "@medusajs/admin-shared";
|
|
@@ -313,169 +313,6 @@ const CollectionThumbnailWidget = ({ data }) => {
|
|
|
313
313
|
defineWidgetConfig({
|
|
314
314
|
zone: "product_collection.details.after"
|
|
315
315
|
});
|
|
316
|
-
const CollectionThumbnailsPage = () => {
|
|
317
|
-
const [collections, setCollections] = useState([]);
|
|
318
|
-
const [loading, setLoading] = useState(true);
|
|
319
|
-
const [error, setError] = useState(null);
|
|
320
|
-
const [selectedCollection, setSelectedCollection] = useState(null);
|
|
321
|
-
const [showUploader, setShowUploader] = useState(false);
|
|
322
|
-
useEffect(() => {
|
|
323
|
-
fetchCollections();
|
|
324
|
-
}, []);
|
|
325
|
-
const fetchCollections = async () => {
|
|
326
|
-
setLoading(true);
|
|
327
|
-
setError(null);
|
|
328
|
-
try {
|
|
329
|
-
const response = await fetch("/admin/collections?limit=100", {
|
|
330
|
-
credentials: "include"
|
|
331
|
-
});
|
|
332
|
-
if (response.ok) {
|
|
333
|
-
const data = await response.json();
|
|
334
|
-
const collectionsData = data.collections || [];
|
|
335
|
-
const collectionsWithThumbnails = await Promise.all(
|
|
336
|
-
collectionsData.map(async (collection) => {
|
|
337
|
-
try {
|
|
338
|
-
const thumbResponse = await fetch(
|
|
339
|
-
`/admin/collections/${collection.id}/thumbnail`,
|
|
340
|
-
{
|
|
341
|
-
credentials: "include"
|
|
342
|
-
}
|
|
343
|
-
);
|
|
344
|
-
if (thumbResponse.ok) {
|
|
345
|
-
const thumbData = await thumbResponse.json();
|
|
346
|
-
return { ...collection, thumbnail: thumbData.thumbnail };
|
|
347
|
-
}
|
|
348
|
-
} catch (err) {
|
|
349
|
-
}
|
|
350
|
-
return collection;
|
|
351
|
-
})
|
|
352
|
-
);
|
|
353
|
-
setCollections(collectionsWithThumbnails);
|
|
354
|
-
} else {
|
|
355
|
-
setCollections([]);
|
|
356
|
-
}
|
|
357
|
-
} catch (err) {
|
|
358
|
-
setCollections([]);
|
|
359
|
-
console.log("Collections API not available, showing demo mode");
|
|
360
|
-
} finally {
|
|
361
|
-
setLoading(false);
|
|
362
|
-
}
|
|
363
|
-
};
|
|
364
|
-
const handleUploadClick = (collection) => {
|
|
365
|
-
setSelectedCollection(collection);
|
|
366
|
-
setShowUploader(true);
|
|
367
|
-
};
|
|
368
|
-
const handleDeleteThumbnail = async (collectionId) => {
|
|
369
|
-
if (!confirm("Are you sure you want to delete this thumbnail?")) return;
|
|
370
|
-
try {
|
|
371
|
-
const response = await fetch(
|
|
372
|
-
`/admin/collections/${collectionId}/thumbnail`,
|
|
373
|
-
{
|
|
374
|
-
method: "DELETE",
|
|
375
|
-
credentials: "include"
|
|
376
|
-
}
|
|
377
|
-
);
|
|
378
|
-
if (response.ok) {
|
|
379
|
-
fetchCollections();
|
|
380
|
-
} else {
|
|
381
|
-
alert("Failed to delete thumbnail");
|
|
382
|
-
}
|
|
383
|
-
} catch (err) {
|
|
384
|
-
alert("Error deleting thumbnail");
|
|
385
|
-
}
|
|
386
|
-
};
|
|
387
|
-
const handleUploaderClose = () => {
|
|
388
|
-
setShowUploader(false);
|
|
389
|
-
setSelectedCollection(null);
|
|
390
|
-
fetchCollections();
|
|
391
|
-
};
|
|
392
|
-
if (loading) {
|
|
393
|
-
return /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsx("div", { className: "flex h-64 items-center justify-center", children: /* @__PURE__ */ jsx(Text, { children: "Loading collections..." }) }) });
|
|
394
|
-
}
|
|
395
|
-
if (error) {
|
|
396
|
-
return /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsx(Alert, { variant: "error", dismissible: true, children: error }) });
|
|
397
|
-
}
|
|
398
|
-
return /* @__PURE__ */ jsxs(Container, { children: [
|
|
399
|
-
/* @__PURE__ */ jsxs("div", { className: "mb-8", children: [
|
|
400
|
-
/* @__PURE__ */ jsx(Heading, { level: "h1", className: "mb-2", children: "Collection Thumbnails" }),
|
|
401
|
-
/* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: "Manage thumbnail images for your product collections" })
|
|
402
|
-
] }),
|
|
403
|
-
collections.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "flex h-64 flex-col items-center justify-center rounded-lg border-2 border-dashed border-ui-border-base", children: [
|
|
404
|
-
/* @__PURE__ */ jsx(PhotoSolid, { className: "mb-4 h-12 w-12 text-ui-fg-subtle" }),
|
|
405
|
-
/* @__PURE__ */ jsx(Text, { className: "mb-2 text-lg font-medium", children: "No collections found" }),
|
|
406
|
-
/* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: "Create collections first to manage their thumbnails" })
|
|
407
|
-
] }) : /* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-lg border", children: /* @__PURE__ */ jsxs(Table, { children: [
|
|
408
|
-
/* @__PURE__ */ jsx(Table.Header, { children: /* @__PURE__ */ jsxs(Table.Row, { children: [
|
|
409
|
-
/* @__PURE__ */ jsx(Table.HeaderCell, { children: "Thumbnail" }),
|
|
410
|
-
/* @__PURE__ */ jsx(Table.HeaderCell, { children: "Collection" }),
|
|
411
|
-
/* @__PURE__ */ jsx(Table.HeaderCell, { children: "Handle" }),
|
|
412
|
-
/* @__PURE__ */ jsx(Table.HeaderCell, { children: "Status" }),
|
|
413
|
-
/* @__PURE__ */ jsx(Table.HeaderCell, { className: "text-right", children: "Actions" })
|
|
414
|
-
] }) }),
|
|
415
|
-
/* @__PURE__ */ jsx(Table.Body, { children: collections.map((collection) => /* @__PURE__ */ jsxs(Table.Row, { children: [
|
|
416
|
-
/* @__PURE__ */ jsx(Table.Cell, { children: collection.thumbnail ? /* @__PURE__ */ jsx(
|
|
417
|
-
"img",
|
|
418
|
-
{
|
|
419
|
-
src: collection.thumbnail.startsWith("http") ? collection.thumbnail : `http://localhost:9000${collection.thumbnail}`,
|
|
420
|
-
alt: collection.title,
|
|
421
|
-
className: "h-12 w-12 object-cover rounded"
|
|
422
|
-
}
|
|
423
|
-
) : /* @__PURE__ */ jsx("div", { className: "flex h-12 w-12 items-center justify-center rounded bg-ui-bg-subtle", children: /* @__PURE__ */ jsx(PhotoSolid, { className: "h-6 w-6 text-ui-fg-subtle" }) }) }),
|
|
424
|
-
/* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Text, { className: "font-medium", children: collection.title }) }),
|
|
425
|
-
/* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx(Badge, { color: "blue", children: collection.handle }) }),
|
|
426
|
-
/* @__PURE__ */ jsx(Table.Cell, { children: collection.thumbnail ? /* @__PURE__ */ jsx(Badge, { color: "green", children: "Has Thumbnail" }) : /* @__PURE__ */ jsx(Badge, { color: "grey", children: "No Thumbnail" }) }),
|
|
427
|
-
/* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-2", children: [
|
|
428
|
-
/* @__PURE__ */ jsxs(
|
|
429
|
-
Button,
|
|
430
|
-
{
|
|
431
|
-
variant: "secondary",
|
|
432
|
-
size: "small",
|
|
433
|
-
onClick: () => handleUploadClick(collection),
|
|
434
|
-
children: [
|
|
435
|
-
/* @__PURE__ */ jsx(CloudArrowUp, { className: "mr-1" }),
|
|
436
|
-
collection.thumbnail ? "Replace" : "Upload"
|
|
437
|
-
]
|
|
438
|
-
}
|
|
439
|
-
),
|
|
440
|
-
collection.thumbnail && /* @__PURE__ */ jsx(
|
|
441
|
-
Button,
|
|
442
|
-
{
|
|
443
|
-
variant: "danger",
|
|
444
|
-
size: "small",
|
|
445
|
-
onClick: () => handleDeleteThumbnail(collection.id),
|
|
446
|
-
children: /* @__PURE__ */ jsx(Trash, {})
|
|
447
|
-
}
|
|
448
|
-
)
|
|
449
|
-
] }) })
|
|
450
|
-
] }, collection.id)) })
|
|
451
|
-
] }) }),
|
|
452
|
-
showUploader && selectedCollection && /* @__PURE__ */ jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50", children: /* @__PURE__ */ jsxs("div", { className: "w-full max-w-2xl rounded-lg bg-ui-bg-base p-6", children: [
|
|
453
|
-
/* @__PURE__ */ jsxs("div", { className: "mb-4 flex items-center justify-between", children: [
|
|
454
|
-
/* @__PURE__ */ jsxs("div", { children: [
|
|
455
|
-
/* @__PURE__ */ jsx(Heading, { level: "h2", children: "Upload Thumbnail" }),
|
|
456
|
-
/* @__PURE__ */ jsx(Text, { className: "text-ui-fg-subtle", children: selectedCollection.title })
|
|
457
|
-
] }),
|
|
458
|
-
/* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: handleUploaderClose, children: "Close" })
|
|
459
|
-
] }),
|
|
460
|
-
/* @__PURE__ */ jsx(
|
|
461
|
-
CollectionThumbnailUploader,
|
|
462
|
-
{
|
|
463
|
-
collectionId: selectedCollection.id,
|
|
464
|
-
initialThumbnail: selectedCollection.thumbnail,
|
|
465
|
-
onThumbnailChange: (url) => {
|
|
466
|
-
if (!url) {
|
|
467
|
-
handleUploaderClose();
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
}
|
|
471
|
-
)
|
|
472
|
-
] }) })
|
|
473
|
-
] });
|
|
474
|
-
};
|
|
475
|
-
const config = defineRouteConfig({
|
|
476
|
-
label: "Collection Thumbnails",
|
|
477
|
-
icon: PhotoSolid
|
|
478
|
-
});
|
|
479
316
|
const widgetModule = { widgets: [
|
|
480
317
|
{
|
|
481
318
|
Component: CollectionThumbnailWidget,
|
|
@@ -483,22 +320,10 @@ const widgetModule = { widgets: [
|
|
|
483
320
|
}
|
|
484
321
|
] };
|
|
485
322
|
const routeModule = {
|
|
486
|
-
routes: [
|
|
487
|
-
{
|
|
488
|
-
Component: CollectionThumbnailsPage,
|
|
489
|
-
path: "/collection-thumbnails"
|
|
490
|
-
}
|
|
491
|
-
]
|
|
323
|
+
routes: []
|
|
492
324
|
};
|
|
493
325
|
const menuItemModule = {
|
|
494
|
-
menuItems: [
|
|
495
|
-
{
|
|
496
|
-
label: config.label,
|
|
497
|
-
icon: config.icon,
|
|
498
|
-
path: "/collection-thumbnails",
|
|
499
|
-
nested: void 0
|
|
500
|
-
}
|
|
501
|
-
]
|
|
326
|
+
menuItems: []
|
|
502
327
|
};
|
|
503
328
|
const formModule = { customFields: {} };
|
|
504
329
|
const displayModule = {
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DELETE = exports.POST = exports.GET = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const collection_1 = require("../../../../../modules/collection");
|
|
6
|
+
const upload_collection_thumbnail_1 = require("../../../../../workflows/upload-collection-thumbnail");
|
|
7
|
+
const gcs_direct_upload_1 = require("../../../../../services/gcs-direct-upload");
|
|
8
|
+
const resolveLogger = (req) => {
|
|
9
|
+
try {
|
|
10
|
+
return req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return console;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const normalizeCustomRecord = (record) => {
|
|
17
|
+
if (!record) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
if (Array.isArray(record)) {
|
|
21
|
+
for (const entry of record) {
|
|
22
|
+
const normalized = normalizeCustomRecord(entry);
|
|
23
|
+
if (normalized) {
|
|
24
|
+
return normalized;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
if (typeof record === "object") {
|
|
30
|
+
return record;
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
};
|
|
34
|
+
const GET = async (req, res) => {
|
|
35
|
+
const { id } = req.params;
|
|
36
|
+
const logger = resolveLogger(req);
|
|
37
|
+
try {
|
|
38
|
+
const collectionCustomService = req.scope.resolve(collection_1.COLLECTION_MODULE);
|
|
39
|
+
const customRecords = await collectionCustomService.listProductCollectionCustoms({
|
|
40
|
+
collection_id: id,
|
|
41
|
+
});
|
|
42
|
+
const customData = normalizeCustomRecord(customRecords);
|
|
43
|
+
res.setHeader("Content-Type", "application/json; charset=utf-8");
|
|
44
|
+
return res.json({
|
|
45
|
+
thumbnail: customData?.thumbnail ?? null,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
const err = error;
|
|
50
|
+
logger.error("Error fetching collection thumbnail:", err);
|
|
51
|
+
if (err?.name === "AwilixResolutionError") {
|
|
52
|
+
return res.status(500).json({
|
|
53
|
+
error: "Collection thumbnail module is not registered",
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return res.status(500).json({ error: "Failed to fetch thumbnail" });
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
exports.GET = GET;
|
|
60
|
+
const POST = async (req, res) => {
|
|
61
|
+
const { id } = req.params;
|
|
62
|
+
const logger = resolveLogger(req);
|
|
63
|
+
try {
|
|
64
|
+
const productModuleService = req.scope.resolve(utils_1.Modules.PRODUCT);
|
|
65
|
+
const collection = await productModuleService.retrieveProductCollection(id);
|
|
66
|
+
if (!collection) {
|
|
67
|
+
return res.status(404).json({ error: "Collection not found" });
|
|
68
|
+
}
|
|
69
|
+
const payload = prepareFilePayload(req);
|
|
70
|
+
if (!isFilePayloadSuccess(payload)) {
|
|
71
|
+
const failurePayload = payload;
|
|
72
|
+
return res
|
|
73
|
+
.status(failurePayload.status)
|
|
74
|
+
.json({ error: failurePayload.error });
|
|
75
|
+
}
|
|
76
|
+
const { filename, mimeType, base64 } = payload.data;
|
|
77
|
+
const { result: workflowResult } = await (0, upload_collection_thumbnail_1.uploadCollectionThumbnailWorkflow)(req.scope).run({
|
|
78
|
+
input: {
|
|
79
|
+
collectionId: id,
|
|
80
|
+
fileData: {
|
|
81
|
+
filename,
|
|
82
|
+
mimeType,
|
|
83
|
+
content: base64,
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
if (!workflowResult?.thumbnailUrl) {
|
|
88
|
+
throw new Error("Thumbnail URL missing from workflow result");
|
|
89
|
+
}
|
|
90
|
+
res.setHeader("Content-Type", "application/json; charset=utf-8");
|
|
91
|
+
return res.json({
|
|
92
|
+
collection: {
|
|
93
|
+
id,
|
|
94
|
+
thumbnail: workflowResult.thumbnailUrl,
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
logger.error("Error uploading collection thumbnail:", error);
|
|
100
|
+
return res.status(500).json({ error: "Failed to upload thumbnail" });
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
exports.POST = POST;
|
|
104
|
+
const DELETE = async (req, res) => {
|
|
105
|
+
const { id } = req.params;
|
|
106
|
+
const gcsUploadService = new gcs_direct_upload_1.GcsDirectUploadService();
|
|
107
|
+
const logger = resolveLogger(req);
|
|
108
|
+
try {
|
|
109
|
+
const collectionCustomService = req.scope.resolve(collection_1.COLLECTION_MODULE);
|
|
110
|
+
const customRecords = await collectionCustomService.listProductCollectionCustoms({
|
|
111
|
+
collection_id: id,
|
|
112
|
+
});
|
|
113
|
+
const existingCustom = normalizeCustomRecord(customRecords);
|
|
114
|
+
if (!existingCustom?.thumbnail) {
|
|
115
|
+
return res
|
|
116
|
+
.status(404)
|
|
117
|
+
.json({ error: "No thumbnail found for this collection" });
|
|
118
|
+
}
|
|
119
|
+
// Delete the file from GCS
|
|
120
|
+
try {
|
|
121
|
+
const url = existingCustom.thumbnail;
|
|
122
|
+
const isGcsUrl = url.includes("storage.googleapis.com") ||
|
|
123
|
+
url.includes("storage.cloud.google.com");
|
|
124
|
+
if (isGcsUrl) {
|
|
125
|
+
const parts = url.split("/");
|
|
126
|
+
const bucketIndex = parts.indexOf("sangaroon");
|
|
127
|
+
if (bucketIndex !== -1 && bucketIndex < parts.length - 1) {
|
|
128
|
+
const filename = parts.slice(bucketIndex + 1).join("/");
|
|
129
|
+
await gcsUploadService.deleteFile(filename);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (deleteError) {
|
|
134
|
+
logger.error("Error deleting file from GCS:", deleteError);
|
|
135
|
+
// Continue even if file deletion fails
|
|
136
|
+
}
|
|
137
|
+
await collectionCustomService.updateProductCollectionCustoms([
|
|
138
|
+
{ id: existingCustom.id, thumbnail: null },
|
|
139
|
+
]);
|
|
140
|
+
res.setHeader("Content-Type", "application/json; charset=utf-8");
|
|
141
|
+
return res.json({
|
|
142
|
+
message: "Thumbnail deleted successfully",
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
const err = error;
|
|
147
|
+
logger.error("Error deleting collection thumbnail:", err);
|
|
148
|
+
if (err?.name === "AwilixResolutionError") {
|
|
149
|
+
return res.status(500).json({
|
|
150
|
+
error: "Collection thumbnail module is not registered",
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return res.status(500).json({ error: "Failed to delete thumbnail" });
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
exports.DELETE = DELETE;
|
|
157
|
+
const isFilePayloadSuccess = (payload) => payload.success === true;
|
|
158
|
+
const prepareFilePayload = (req) => {
|
|
159
|
+
if (req.file) {
|
|
160
|
+
return {
|
|
161
|
+
success: true,
|
|
162
|
+
data: {
|
|
163
|
+
filename: req.file.originalname,
|
|
164
|
+
mimeType: req.file.mimetype,
|
|
165
|
+
base64: req.file.buffer.toString("base64"),
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
const body = req.body;
|
|
170
|
+
if (!body || typeof body !== "object") {
|
|
171
|
+
return {
|
|
172
|
+
success: false,
|
|
173
|
+
status: 400,
|
|
174
|
+
error: "Invalid payload",
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
const { filename, mimeType, content } = body;
|
|
178
|
+
if (!filename || !mimeType || !content) {
|
|
179
|
+
return {
|
|
180
|
+
success: false,
|
|
181
|
+
status: 400,
|
|
182
|
+
error: "Missing file data",
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
const buffer = Buffer.from(content, "base64");
|
|
187
|
+
if (!buffer.length) {
|
|
188
|
+
return {
|
|
189
|
+
success: false,
|
|
190
|
+
status: 400,
|
|
191
|
+
error: "Invalid file content",
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
success: true,
|
|
196
|
+
data: {
|
|
197
|
+
filename,
|
|
198
|
+
mimeType,
|
|
199
|
+
base64: content,
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
return {
|
|
205
|
+
success: false,
|
|
206
|
+
status: 400,
|
|
207
|
+
error: "Failed to decode file",
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvbGxlY3Rpb25zL1tpZF0vdGh1bWJuYWlsL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUErRTtBQUcvRSxrRUFBc0U7QUFDdEUsc0dBQXlHO0FBQ3pHLGlGQUFtRjtBQVVuRixNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQWtCLEVBQWMsRUFBRTtJQUN2RCxJQUFJLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FBRyxDQUM1QixNQUFlLEVBQ3lDLEVBQUU7SUFDMUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzFCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDM0IsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixPQUFPLFVBQVUsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE9BQU8sTUFBb0QsQ0FBQztJQUM5RCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUssTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVB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
|
|
@@ -28,4 +28,4 @@ exports.default = (0, medusa_1.defineMiddlewares)({
|
|
|
28
28
|
},
|
|
29
29
|
],
|
|
30
30
|
});
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQXFEO0FBQ3JELG9EQUE0QjtBQUU1QixNQUFNLE1BQU0sR0FBRyxJQUFBLGdCQUFNLEVBQUM7SUFDcEIsT0FBTyxFQUFFLGdCQUFNLENBQUMsYUFBYSxFQUFFO0lBQy9CLE1BQU0sRUFBRTtRQUNOLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUk7S0FDMUI7SUFDRCxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFO1FBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNoRixJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUMsQ0FBQztRQUNqRixDQUFDO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQztBQUVILGtCQUFlLElBQUEsMEJBQWlCLEVBQUM7SUFDL0IsTUFBTSxFQUFFO1FBQ047WUFDRSxPQUFPLEVBQUUsa0NBQWtDO1lBQzNDLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFRLENBQUM7U0FDakQ7S0FDRjtDQUNGLENBQUMsQ0FBQyJ9
|