@noya-app/noya-file-explorer 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1222,10 +1222,33 @@ var getParentDirectories = (mediaMap, folderId) => {
1222
1222
  if (!indexPath) return [rootMediaItem];
1223
1223
  return tree.accessPath(rootMediaItem, indexPath);
1224
1224
  };
1225
+ var renameMediaItemAndDescendantPaths = ({
1226
+ newName,
1227
+ selectedItemPath,
1228
+ media,
1229
+ tree
1230
+ }) => {
1231
+ const mediaClone = { ...media };
1232
+ const selectedItem = mediaClone[selectedItemPath];
1233
+ if (!selectedItem) return mediaClone;
1234
+ const parentPath = path2.dirname(selectedItemPath);
1235
+ const newItemPath = path2.join(parentPath, newName);
1236
+ const descendants = tree.flat(selectedItem).map((item) => tree.idToPathMap.get(item.id));
1237
+ for (const descendantPath of descendants) {
1238
+ if (!descendantPath) continue;
1239
+ const newDescendantPath = descendantPath.replace(
1240
+ selectedItemPath,
1241
+ newItemPath
1242
+ );
1243
+ mediaClone[newDescendantPath] = mediaClone[descendantPath];
1244
+ delete mediaClone[descendantPath];
1245
+ }
1246
+ return mediaClone;
1247
+ };
1225
1248
 
1226
1249
  // src/MediaCollection.tsx
1227
1250
  var MediaThumbnailInternal = memoGeneric(
1228
- ({ item, selected }) => {
1251
+ ({ item, selected, size }) => {
1229
1252
  const asset = useAsset(item.kind === "asset" ? item.assetId : void 0);
1230
1253
  const isRoot = item.id === rootMediaItem.id;
1231
1254
  const isFolder = item.kind === "folder";
@@ -1235,7 +1258,8 @@ var MediaThumbnailInternal = memoGeneric(
1235
1258
  contentType: asset?.contentType,
1236
1259
  iconName: isRoot ? "HomeIcon" : isFolder ? "FolderIcon" : void 0,
1237
1260
  url: asset?.url,
1238
- selected
1261
+ selected,
1262
+ size
1239
1263
  }
1240
1264
  );
1241
1265
  }
@@ -1269,13 +1293,24 @@ var MediaCollection = memo(
1269
1293
  const [tempItem, setTempItem] = useState(
1270
1294
  void 0
1271
1295
  );
1272
- const treeWithTempItem = useMemo(
1273
- () => createMediaItemTree({
1296
+ const mediaWithTempItem = useMemo(
1297
+ () => ({
1274
1298
  ...media,
1275
1299
  ...tempItem ? { [tempItem[0]]: tempItem[1] } : {}
1276
1300
  }),
1277
1301
  [media, tempItem]
1278
1302
  );
1303
+ const treeWithTempItem = useMemo(
1304
+ () => createMediaItemTree(mediaWithTempItem),
1305
+ [mediaWithTempItem]
1306
+ );
1307
+ const temp = useMemo(
1308
+ () => ({
1309
+ media: mediaWithTempItem,
1310
+ tree: treeWithTempItem
1311
+ }),
1312
+ [mediaWithTempItem, treeWithTempItem]
1313
+ );
1279
1314
  const [selectedIds, setSelectedIds] = useControlledOrUncontrolled(
1280
1315
  {
1281
1316
  defaultValue: [],
@@ -1330,12 +1365,6 @@ var MediaCollection = memo(
1330
1365
  if (!itemPath || !firstSelectedPath) return false;
1331
1366
  return itemPath.startsWith(path3.dirname(firstSelectedPath));
1332
1367
  });
1333
- const gridSize = useMemo(() => {
1334
- if (viewType === "grid") {
1335
- return size;
1336
- }
1337
- return "medium";
1338
- }, [viewType, size]);
1339
1368
  useEffect(() => {
1340
1369
  if (initialExpanded) {
1341
1370
  setExpandedMap(initialExpanded);
@@ -1369,31 +1398,28 @@ var MediaCollection = memo(
1369
1398
  selectedItem.id
1370
1399
  );
1371
1400
  if (!selectedItemPath) return;
1372
- const mediaWithTempItem = {
1373
- ...media,
1374
- ...tempItem ? { [tempItem[0]]: tempItem[1] } : {}
1375
- };
1376
1401
  const renameIsValid = validateMediaItemRename({
1377
1402
  basename: newName,
1378
1403
  selectedItemPath,
1379
- media: mediaWithTempItem
1404
+ media: temp.media
1380
1405
  });
1381
1406
  if (!renameIsValid) {
1382
1407
  setTempItem(void 0);
1383
1408
  return;
1384
1409
  }
1385
- const mediaClone = { ...media };
1386
- delete mediaClone[selectedItemPath];
1410
+ const mediaWithRenamedDescendantPaths = renameMediaItemAndDescendantPaths({
1411
+ newName,
1412
+ selectedItemPath,
1413
+ media: temp.media,
1414
+ tree: temp.tree
1415
+ });
1387
1416
  setMedia(
1388
1417
  { name: "Rename media item", timestamp: Date.now() },
1389
- {
1390
- ...mediaClone,
1391
- [path3.join(path3.dirname(selectedItemPath), newName)]: selectedItem
1392
- }
1418
+ mediaWithRenamedDescendantPaths
1393
1419
  );
1394
1420
  setTempItem(void 0);
1395
1421
  },
1396
- [media, renamable, setMedia, tempItem, treeWithTempItem.idToPathMap]
1422
+ [renamable, setMedia, temp.media, temp.tree, treeWithTempItem.idToPathMap]
1397
1423
  );
1398
1424
  const handleAddFolder = useCallback(
1399
1425
  (currentFolderId) => {
@@ -1673,6 +1699,7 @@ var MediaCollection = memo(
1673
1699
  onSelect: (action) => handleMenuAction(action, selectedMediaItems),
1674
1700
  selected,
1675
1701
  onOpenChange,
1702
+ variant: viewType === "grid" ? "normal" : "bare",
1676
1703
  style: {
1677
1704
  backgroundColor: selected ? cssVars.colors.primaryPastel : "transparent"
1678
1705
  }
@@ -1682,7 +1709,8 @@ var MediaCollection = memo(
1682
1709
  assetContextMenuItems,
1683
1710
  handleMenuAction,
1684
1711
  renderActionProp,
1685
- selectedMediaItems
1712
+ selectedMediaItems,
1713
+ viewType
1686
1714
  ]);
1687
1715
  useImperativeHandle(ref, () => ({
1688
1716
  upload: (selectedId) => handleUpload(selectedId),
@@ -1717,7 +1745,7 @@ var MediaCollection = memo(
1717
1745
  scrollable,
1718
1746
  items: visibleItems,
1719
1747
  viewType,
1720
- size: gridSize,
1748
+ size,
1721
1749
  getId: (file) => file.id,
1722
1750
  getName: (file) => {
1723
1751
  if (file.id === tempItem?.[1].id) {
@@ -1756,7 +1784,7 @@ var MediaCollection = memo(
1756
1784
  if (file.kind !== "asset") return null;
1757
1785
  const asset = assets.find((a) => a.id === file.assetId);
1758
1786
  if (!asset) return null;
1759
- return /* @__PURE__ */ React.createElement(FileExplorerDetail, { selected }, (asset.size / 1024).toFixed(1), "KB");
1787
+ return /* @__PURE__ */ React.createElement(FileExplorerDetail, { selected, size }, (asset.size / 1024).toFixed(1), "KB");
1760
1788
  },
1761
1789
  renderEmptyState: () => renderEmptyState?.() ?? /* @__PURE__ */ React.createElement(FileExplorerEmptyState, null),
1762
1790
  itemRoleDescription: "clickable file item",
@@ -1848,6 +1876,7 @@ export {
1848
1876
  moveMediaInsideFolder,
1849
1877
  movePathsIntoTarget,
1850
1878
  moveUpAFolder,
1879
+ renameMediaItemAndDescendantPaths,
1851
1880
  rootMediaItem,
1852
1881
  rootMediaItemName,
1853
1882
  rootMediaItemPath,