@strapi/upload 5.50.2 → 5.51.1
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/admin/future/pages/Assets/AssetsPage.js +201 -137
- package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
- package/dist/admin/future/pages/Assets/AssetsPage.mjs +202 -138
- package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js +161 -30
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +163 -32
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsTable.js +222 -59
- package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +223 -60
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.js +252 -0
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs +250 -0
- package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js +209 -0
- package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs +207 -0
- package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js +111 -36
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs +113 -38
- package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js +120 -13
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs +120 -13
- package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js +71 -0
- package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs +69 -0
- package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.js +34 -0
- package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.mjs +32 -0
- package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js +15 -0
- package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs +13 -1
- package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js +19 -25
- package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs +19 -25
- package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.js +35 -0
- package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.mjs +33 -0
- package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/EmptyState.js +63 -0
- package/dist/admin/future/pages/Assets/components/EmptyState.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/EmptyState.mjs +61 -0
- package/dist/admin/future/pages/Assets/components/EmptyState.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js +120 -22
- package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs +121 -23
- package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.js +22 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.mjs +19 -0
- package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/components/SortMenu.js +165 -0
- package/dist/admin/future/pages/Assets/components/SortMenu.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/SortMenu.mjs +163 -0
- package/dist/admin/future/pages/Assets/components/SortMenu.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js +59 -0
- package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs +55 -0
- package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useListSort.js +124 -0
- package/dist/admin/future/pages/Assets/hooks/useListSort.js.map +1 -0
- package/dist/admin/future/pages/Assets/hooks/useListSort.mjs +120 -0
- package/dist/admin/future/pages/Assets/hooks/useListSort.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/utils/listQueryKey.js +29 -0
- package/dist/admin/future/pages/Assets/utils/listQueryKey.js.map +1 -0
- package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs +27 -0
- package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/utils/mergeMixedList.js +84 -0
- package/dist/admin/future/pages/Assets/utils/mergeMixedList.js.map +1 -0
- package/dist/admin/future/pages/Assets/utils/mergeMixedList.mjs +81 -0
- package/dist/admin/future/pages/Assets/utils/mergeMixedList.mjs.map +1 -0
- package/dist/admin/future/pages/Assets/utils/selection.js +104 -0
- package/dist/admin/future/pages/Assets/utils/selection.js.map +1 -0
- package/dist/admin/future/pages/Assets/utils/selection.mjs +94 -0
- package/dist/admin/future/pages/Assets/utils/selection.mjs.map +1 -0
- package/dist/admin/future/services/assets.js +33 -1
- package/dist/admin/future/services/assets.js.map +1 -1
- package/dist/admin/future/services/assets.mjs +33 -2
- package/dist/admin/future/services/assets.mjs.map +1 -1
- package/dist/admin/future/services/folders.js +3 -3
- package/dist/admin/future/services/folders.js.map +1 -1
- package/dist/admin/future/services/folders.mjs +3 -3
- package/dist/admin/future/services/folders.mjs.map +1 -1
- package/dist/admin/future/services/uploadFileViaXHR.js +23 -2
- package/dist/admin/future/services/uploadFileViaXHR.js.map +1 -1
- package/dist/admin/future/services/uploadFileViaXHR.mjs +23 -2
- package/dist/admin/future/services/uploadFileViaXHR.mjs.map +1 -1
- package/dist/admin/future/utils/buildDragSetFromSelection.js +33 -0
- package/dist/admin/future/utils/buildDragSetFromSelection.js.map +1 -0
- package/dist/admin/future/utils/buildDragSetFromSelection.mjs +31 -0
- package/dist/admin/future/utils/buildDragSetFromSelection.mjs.map +1 -0
- package/dist/admin/future/utils/canDropItemOnFolder.js +4 -0
- package/dist/admin/future/utils/canDropItemOnFolder.js.map +1 -1
- package/dist/admin/future/utils/canDropItemOnFolder.mjs +4 -0
- package/dist/admin/future/utils/canDropItemOnFolder.mjs.map +1 -1
- package/dist/admin/future/utils/flattenFolderStructure.js +28 -0
- package/dist/admin/future/utils/flattenFolderStructure.js.map +1 -0
- package/dist/admin/future/utils/flattenFolderStructure.mjs +26 -0
- package/dist/admin/future/utils/flattenFolderStructure.mjs.map +1 -0
- package/dist/admin/future/utils/formatMoveSuccessMessage.js +19 -0
- package/dist/admin/future/utils/formatMoveSuccessMessage.js.map +1 -0
- package/dist/admin/future/utils/formatMoveSuccessMessage.mjs +17 -0
- package/dist/admin/future/utils/formatMoveSuccessMessage.mjs.map +1 -0
- package/dist/admin/future/utils/getFolderLabel.js +31 -0
- package/dist/admin/future/utils/getFolderLabel.js.map +1 -0
- package/dist/admin/future/utils/getFolderLabel.mjs +29 -0
- package/dist/admin/future/utils/getFolderLabel.mjs.map +1 -0
- package/dist/admin/hooks/useUpload.js +15 -9
- package/dist/admin/hooks/useUpload.js.map +1 -1
- package/dist/admin/hooks/useUpload.mjs +17 -11
- package/dist/admin/hooks/useUpload.mjs.map +1 -1
- package/dist/admin/src/future/pages/Assets/components/AssetsGrid.d.ts +1 -1
- package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +7 -1
- package/dist/admin/src/future/pages/Assets/components/BulkActionsBar.d.ts +1 -0
- package/dist/admin/src/future/pages/Assets/components/BulkMoveDialog.d.ts +13 -0
- package/dist/admin/src/future/pages/Assets/components/Dnd/AssetsDndProvider.d.ts +2 -0
- package/dist/admin/src/future/pages/Assets/components/Dnd/DragOverlayChip.d.ts +2 -2
- package/dist/admin/src/future/pages/Assets/components/Dnd/buildDragSet.d.ts +17 -0
- package/dist/admin/src/future/pages/Assets/components/Dnd/computeValidDropTargets.d.ts +7 -0
- package/dist/admin/src/future/pages/Assets/components/Dnd/dndIds.d.ts +3 -0
- package/dist/admin/src/future/pages/Assets/components/Dnd/useAssetDnd.d.ts +3 -1
- package/dist/admin/src/future/pages/Assets/components/Dnd/useFolderTreeDroppable.d.ts +19 -0
- package/dist/admin/src/future/pages/Assets/components/EmptyState.d.ts +11 -0
- package/dist/admin/src/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.d.ts +6 -0
- package/dist/admin/src/future/pages/Assets/components/SortMenu.d.ts +17 -0
- package/dist/admin/src/future/pages/Assets/hooks/useAssetSelection.d.ts +39 -0
- package/dist/admin/src/future/pages/Assets/hooks/useListSort.d.ts +47 -0
- package/dist/admin/src/future/pages/Assets/utils/listQueryKey.d.ts +30 -0
- package/dist/admin/src/future/pages/Assets/utils/mergeMixedList.d.ts +40 -0
- package/dist/admin/src/future/pages/Assets/utils/selection.d.ts +50 -0
- package/dist/admin/src/future/services/assets.d.ts +4 -1
- package/dist/admin/src/future/services/folders.d.ts +4 -1
- package/dist/admin/src/future/services/uploadFileViaXHR.d.ts +1 -17
- package/dist/admin/src/future/types/dnd.d.ts +5 -0
- package/dist/admin/src/future/utils/buildDragSetFromSelection.d.ts +11 -0
- package/dist/admin/src/future/utils/canDropItemOnFolder.d.ts +1 -1
- package/dist/admin/src/future/utils/flattenFolderStructure.d.ts +18 -0
- package/dist/admin/src/future/utils/formatMoveSuccessMessage.d.ts +14 -0
- package/dist/admin/src/future/utils/getFolderLabel.d.ts +11 -0
- package/dist/admin/translations/en.json.js +36 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +36 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/shared/contracts/folders.d.ts +1 -1
- package/package.json +8 -8
|
@@ -10,7 +10,9 @@ var files = require('../../../utils/files.js');
|
|
|
10
10
|
var getAssetIcon = require('../../../utils/getAssetIcon.js');
|
|
11
11
|
var translations = require('../../../utils/translations.js');
|
|
12
12
|
var constants = require('../constants.js');
|
|
13
|
+
var useAssetSelection = require('../hooks/useAssetSelection.js');
|
|
13
14
|
var useFolderNavigation = require('../hooks/useFolderNavigation.js');
|
|
15
|
+
var selection = require('../utils/selection.js');
|
|
14
16
|
var AssetsDndProvider = require('./Dnd/AssetsDndProvider.js');
|
|
15
17
|
var useAssetDnd = require('./Dnd/useAssetDnd.js');
|
|
16
18
|
|
|
@@ -40,7 +42,8 @@ const StyledTd = styledComponents.styled(designSystem.RawTd)`
|
|
|
40
42
|
`;
|
|
41
43
|
const StyledTr = styledComponents.styled.tr`
|
|
42
44
|
height: 48px;
|
|
43
|
-
|
|
45
|
+
user-select: none;
|
|
46
|
+
background: ${({ theme, $isSelected })=>$isSelected ? theme.colors.primary100 : theme.colors.neutral0};
|
|
44
47
|
cursor: ${({ $isMovePending, $isInvalidDropTarget })=>{
|
|
45
48
|
if ($isMovePending) {
|
|
46
49
|
return 'wait';
|
|
@@ -71,10 +74,39 @@ const StyledTr = styledComponents.styled.tr`
|
|
|
71
74
|
}
|
|
72
75
|
}
|
|
73
76
|
`;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
// Leading checkbox column. Narrow + centred so the control sits flush against the
|
|
78
|
+
// row's left edge.
|
|
79
|
+
const CheckboxTd = styledComponents.styled(StyledTd)`
|
|
80
|
+
width: 1%;
|
|
81
|
+
white-space: nowrap;
|
|
82
|
+
`;
|
|
83
|
+
const CheckboxTh = styledComponents.styled(StyledTh)`
|
|
84
|
+
width: 1%;
|
|
85
|
+
white-space: nowrap;
|
|
86
|
+
`;
|
|
87
|
+
// The asset filename is its own interactive element: clicking it opens the
|
|
88
|
+
// details drawer instead of selecting the row.
|
|
89
|
+
const NameButton = styledComponents.styled.button`
|
|
90
|
+
display: inline-flex;
|
|
91
|
+
max-width: 100%;
|
|
92
|
+
border: none;
|
|
93
|
+
background: transparent;
|
|
94
|
+
padding: 0;
|
|
95
|
+
margin: 0;
|
|
96
|
+
cursor: pointer;
|
|
97
|
+
text-align: left;
|
|
98
|
+
color: inherit;
|
|
99
|
+
font: inherit;
|
|
100
|
+
|
|
101
|
+
&:focus-visible {
|
|
102
|
+
outline: 2px solid ${({ theme })=>theme.colors.primary600};
|
|
103
|
+
outline-offset: 2px;
|
|
104
|
+
border-radius: 2px;
|
|
105
|
+
}
|
|
77
106
|
`;
|
|
107
|
+
const stopRowEvent = (e)=>{
|
|
108
|
+
e.stopPropagation();
|
|
109
|
+
};
|
|
78
110
|
const AssetPreviewCell = ({ asset })=>{
|
|
79
111
|
const { ext, mime } = asset;
|
|
80
112
|
const DocIcon = getAssetIcon.getAssetIcon(mime, ext);
|
|
@@ -92,17 +124,48 @@ const AssetPreviewCell = ({ asset })=>{
|
|
|
92
124
|
})
|
|
93
125
|
});
|
|
94
126
|
};
|
|
95
|
-
const AssetRow = ({ asset, onAssetItemClick })=>{
|
|
127
|
+
const AssetRow = ({ asset, orderedItemKeys, onAssetItemClick })=>{
|
|
96
128
|
const isMobile = strapiAdmin.useIsMobile();
|
|
97
129
|
const { formatDate, formatMessage } = reactIntl.useIntl();
|
|
98
130
|
const { isMovePending } = AssetsDndProvider.useAssetsDndOptional() ?? {
|
|
99
131
|
isMovePending: false
|
|
100
132
|
};
|
|
101
133
|
const { attributes, listeners, setNodeRef, isDragging } = useAssetDnd.useFileDraggable(asset);
|
|
134
|
+
const { isSelected, toggle, selectRange } = useAssetSelection.useAssetSelection();
|
|
135
|
+
const key = selection.assetKey(asset.id);
|
|
136
|
+
const selected = isSelected(key);
|
|
137
|
+
// Plain click opens the asset details; pointer selection lives on the
|
|
138
|
+
// checkbox only. Modifier clicks keep the selection semantics: shift selects
|
|
139
|
+
// a range, cmd/ctrl toggles.
|
|
140
|
+
const handleRowClick = (e)=>{
|
|
141
|
+
if (e.shiftKey) {
|
|
142
|
+
selectRange(orderedItemKeys, key);
|
|
143
|
+
} else if (e.metaKey || e.ctrlKey) {
|
|
144
|
+
toggle(key);
|
|
145
|
+
} else {
|
|
146
|
+
onAssetItemClick(asset.id);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
// Desktop: Space toggles selection (additive), Enter opens the details drawer.
|
|
102
150
|
const handleKeyDown = (e)=>{
|
|
103
|
-
if (e.key === 'Enter'
|
|
151
|
+
if (e.key === 'Enter') {
|
|
104
152
|
e.preventDefault();
|
|
105
153
|
onAssetItemClick(asset.id);
|
|
154
|
+
} else if (e.key === ' ') {
|
|
155
|
+
e.preventDefault();
|
|
156
|
+
toggle(key);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
const handleNameClick = (e)=>{
|
|
160
|
+
e.stopPropagation();
|
|
161
|
+
onAssetItemClick(asset.id);
|
|
162
|
+
};
|
|
163
|
+
const handleCheckboxClick = (e)=>{
|
|
164
|
+
e.stopPropagation();
|
|
165
|
+
if (e.shiftKey) {
|
|
166
|
+
selectRange(orderedItemKeys, key);
|
|
167
|
+
} else {
|
|
168
|
+
toggle(key);
|
|
106
169
|
}
|
|
107
170
|
};
|
|
108
171
|
return /*#__PURE__*/ jsxRuntime.jsxs(StyledTr, {
|
|
@@ -111,12 +174,29 @@ const AssetRow = ({ asset, onAssetItemClick })=>{
|
|
|
111
174
|
...listeners,
|
|
112
175
|
$isDragging: isDragging,
|
|
113
176
|
$isMovePending: isMovePending,
|
|
177
|
+
$isSelected: selected,
|
|
114
178
|
tabIndex: 0,
|
|
115
179
|
role: "row",
|
|
116
180
|
onDragStart: (e)=>e.preventDefault(),
|
|
117
|
-
onClick:
|
|
181
|
+
onClick: handleRowClick,
|
|
118
182
|
onKeyDown: handleKeyDown,
|
|
119
183
|
children: [
|
|
184
|
+
!isMobile && /*#__PURE__*/ jsxRuntime.jsx(CheckboxTd, {
|
|
185
|
+
onClick: stopRowEvent,
|
|
186
|
+
onKeyDown: stopRowEvent,
|
|
187
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
188
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Checkbox, {
|
|
189
|
+
checked: selected,
|
|
190
|
+
onClick: handleCheckboxClick,
|
|
191
|
+
"aria-label": formatMessage({
|
|
192
|
+
id: translations.getTranslationKey('list.table.row.select'),
|
|
193
|
+
defaultMessage: 'Select {name}'
|
|
194
|
+
}, {
|
|
195
|
+
name: asset.name
|
|
196
|
+
})
|
|
197
|
+
})
|
|
198
|
+
})
|
|
199
|
+
}),
|
|
120
200
|
/*#__PURE__*/ jsxRuntime.jsx(StyledTd, {
|
|
121
201
|
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
122
202
|
gap: 3,
|
|
@@ -128,12 +208,17 @@ const AssetRow = ({ asset, onAssetItemClick })=>{
|
|
|
128
208
|
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
129
209
|
direction: "column",
|
|
130
210
|
alignItems: "flex-start",
|
|
211
|
+
minWidth: 0,
|
|
131
212
|
children: [
|
|
132
|
-
/*#__PURE__*/ jsxRuntime.jsx(
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
213
|
+
/*#__PURE__*/ jsxRuntime.jsx(NameButton, {
|
|
214
|
+
type: "button",
|
|
215
|
+
onClick: handleNameClick,
|
|
216
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
217
|
+
textColor: "neutral800",
|
|
218
|
+
fontWeight: "semiBold",
|
|
219
|
+
ellipsis: true,
|
|
220
|
+
children: asset.name
|
|
221
|
+
})
|
|
137
222
|
}),
|
|
138
223
|
isMobile && /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
139
224
|
textColor: "neutral600",
|
|
@@ -193,18 +278,43 @@ const FolderTr = styledComponents.styled(StyledTr)`
|
|
|
193
278
|
background: ${({ theme })=>theme.colors.primary100};
|
|
194
279
|
}
|
|
195
280
|
`;
|
|
196
|
-
const FolderRow = ({ folder })=>{
|
|
281
|
+
const FolderRow = ({ folder, orderedItemKeys })=>{
|
|
197
282
|
const isMobile = strapiAdmin.useIsMobile();
|
|
198
283
|
const { formatDate, formatMessage } = reactIntl.useIntl();
|
|
199
284
|
const { navigateToFolder } = useFolderNavigation.useFolderNavigation();
|
|
285
|
+
const { isSelected, toggle, selectRange } = useAssetSelection.useAssetSelection();
|
|
200
286
|
const { isMovePending } = AssetsDndProvider.useAssetsDndOptional() ?? {
|
|
201
287
|
isMovePending: false
|
|
202
288
|
};
|
|
203
289
|
const { draggable: { attributes, listeners, setNodeRef: setDragRef, isDragging }, droppable: { setNodeRef: setDropRef }, showValidDropHighlight, showInvalidDropCursor } = useAssetDnd.useFolderDraggableDroppable(folder);
|
|
290
|
+
const key = selection.folderKey(folder.id);
|
|
291
|
+
// Folders share the selection mechanism with assets. Only the plain-click
|
|
292
|
+
// semantic differs: it navigates into the folder instead of selecting it.
|
|
293
|
+
const handleRowClick = (e)=>{
|
|
294
|
+
if (e.shiftKey) {
|
|
295
|
+
selectRange(orderedItemKeys, key);
|
|
296
|
+
} else if (e.metaKey || e.ctrlKey) {
|
|
297
|
+
toggle(key);
|
|
298
|
+
} else {
|
|
299
|
+
navigateToFolder(folder);
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
// Enter navigates into the folder, Space toggles selection (same as assets).
|
|
204
303
|
const handleKeyDown = (e)=>{
|
|
205
|
-
if (e.key === 'Enter'
|
|
304
|
+
if (e.key === 'Enter') {
|
|
206
305
|
e.preventDefault();
|
|
207
306
|
navigateToFolder(folder);
|
|
307
|
+
} else if (e.key === ' ') {
|
|
308
|
+
e.preventDefault();
|
|
309
|
+
toggle(key);
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
const handleCheckboxClick = (e)=>{
|
|
313
|
+
e.stopPropagation();
|
|
314
|
+
if (e.shiftKey) {
|
|
315
|
+
selectRange(orderedItemKeys, key);
|
|
316
|
+
} else {
|
|
317
|
+
toggle(key);
|
|
208
318
|
}
|
|
209
319
|
};
|
|
210
320
|
return /*#__PURE__*/ jsxRuntime.jsxs(FolderTr, {
|
|
@@ -218,12 +328,29 @@ const FolderRow = ({ folder })=>{
|
|
|
218
328
|
$isMovePending: isMovePending,
|
|
219
329
|
$isValidDropTarget: showValidDropHighlight,
|
|
220
330
|
$isInvalidDropTarget: showInvalidDropCursor,
|
|
331
|
+
$isSelected: isSelected(key),
|
|
221
332
|
tabIndex: 0,
|
|
222
333
|
role: "row",
|
|
223
334
|
onDragStart: (e)=>e.preventDefault(),
|
|
224
|
-
onClick:
|
|
335
|
+
onClick: handleRowClick,
|
|
225
336
|
onKeyDown: handleKeyDown,
|
|
226
337
|
children: [
|
|
338
|
+
!isMobile && /*#__PURE__*/ jsxRuntime.jsx(CheckboxTd, {
|
|
339
|
+
onClick: stopRowEvent,
|
|
340
|
+
onKeyDown: stopRowEvent,
|
|
341
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
342
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Checkbox, {
|
|
343
|
+
checked: isSelected(key),
|
|
344
|
+
onClick: handleCheckboxClick,
|
|
345
|
+
"aria-label": formatMessage({
|
|
346
|
+
id: translations.getTranslationKey('list.table.row.select'),
|
|
347
|
+
defaultMessage: 'Select {name}'
|
|
348
|
+
}, {
|
|
349
|
+
name: folder.name
|
|
350
|
+
})
|
|
351
|
+
})
|
|
352
|
+
})
|
|
353
|
+
}),
|
|
227
354
|
/*#__PURE__*/ jsxRuntime.jsx(StyledTd, {
|
|
228
355
|
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
229
356
|
gap: 3,
|
|
@@ -294,63 +421,99 @@ const FolderRow = ({ folder })=>{
|
|
|
294
421
|
]
|
|
295
422
|
});
|
|
296
423
|
};
|
|
297
|
-
const AssetsTable = ({ assets, folders = [], onAssetItemClick })=>{
|
|
424
|
+
const AssetsTable = ({ assets, folders = [], mixedItems = null, onAssetItemClick })=>{
|
|
298
425
|
const isMobile = strapiAdmin.useIsMobile();
|
|
299
426
|
const { formatMessage } = reactIntl.useIntl();
|
|
427
|
+
const { selectedKeys, selectAll, clear } = useAssetSelection.useAssetSelection();
|
|
300
428
|
const visibleHeaders = isMobile ? constants.TABLE_HEADERS.filter((h)=>h.name === 'name' || h.name === 'actions') : constants.TABLE_HEADERS;
|
|
429
|
+
// The checkbox column is a dedicated structural column (not part of
|
|
430
|
+
// TABLE_HEADERS) and is hidden on mobile.
|
|
431
|
+
const showCheckboxColumn = !isMobile;
|
|
432
|
+
const colCount = visibleHeaders.length + (showCheckboxColumn ? 1 : 0);
|
|
301
433
|
const totalRows = folders.length + assets.length;
|
|
434
|
+
// Render order — folders first by default, or the interleaved mixed order.
|
|
435
|
+
// Range selection follows it.
|
|
436
|
+
const orderedItemKeys = mixedItems ? mixedItems.map((item)=>item.kind === 'folder' ? selection.folderKey(item.folder.id) : selection.assetKey(item.asset.id)) : [
|
|
437
|
+
...folders.map((folder)=>selection.folderKey(folder.id)),
|
|
438
|
+
...assets.map((asset)=>selection.assetKey(asset.id))
|
|
439
|
+
];
|
|
440
|
+
const { allSelected, isIndeterminate } = selection.getSelectAllState(selectedKeys, orderedItemKeys);
|
|
441
|
+
const handleSelectAll = ()=>{
|
|
442
|
+
if (allSelected) {
|
|
443
|
+
clear();
|
|
444
|
+
} else {
|
|
445
|
+
selectAll(orderedItemKeys);
|
|
446
|
+
}
|
|
447
|
+
};
|
|
448
|
+
// The empty state is owned by the page (`AssetsView` renders `EmptyState`) — an
|
|
449
|
+
// empty table renders nothing at all, not headers over an empty body.
|
|
450
|
+
if (totalRows === 0) {
|
|
451
|
+
return null;
|
|
452
|
+
}
|
|
302
453
|
return /*#__PURE__*/ jsxRuntime.jsxs(StyledTable, {
|
|
303
|
-
colCount:
|
|
304
|
-
rowCount: totalRows + 1,
|
|
454
|
+
colCount: colCount,
|
|
455
|
+
rowCount: (mixedItems ? mixedItems.length : totalRows) + 1,
|
|
305
456
|
children: [
|
|
306
457
|
/*#__PURE__*/ jsxRuntime.jsx(StyledThead, {
|
|
307
|
-
children: /*#__PURE__*/ jsxRuntime.
|
|
308
|
-
children:
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
458
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.RawTr, {
|
|
459
|
+
children: [
|
|
460
|
+
showCheckboxColumn && /*#__PURE__*/ jsxRuntime.jsx(CheckboxTh, {
|
|
461
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
462
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Checkbox, {
|
|
463
|
+
checked: isIndeterminate ? 'indeterminate' : allSelected,
|
|
464
|
+
disabled: orderedItemKeys.length === 0,
|
|
465
|
+
onCheckedChange: handleSelectAll,
|
|
466
|
+
"aria-label": formatMessage({
|
|
467
|
+
id: translations.getTranslationKey('list.table.header.select-all'),
|
|
468
|
+
defaultMessage: 'Select all'
|
|
317
469
|
})
|
|
318
470
|
})
|
|
319
|
-
}, header.name);
|
|
320
|
-
}
|
|
321
|
-
return /*#__PURE__*/ jsxRuntime.jsx(StyledTh, {
|
|
322
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
323
|
-
textColor: "neutral600",
|
|
324
|
-
variant: "sigma",
|
|
325
|
-
children: tableHeaderLabel
|
|
326
|
-
})
|
|
327
|
-
}, header.name);
|
|
328
|
-
})
|
|
329
|
-
})
|
|
330
|
-
}),
|
|
331
|
-
/*#__PURE__*/ jsxRuntime.jsx(designSystem.RawTbody, {
|
|
332
|
-
children: totalRows === 0 ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.RawTr, {
|
|
333
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(StyledBodyTd, {
|
|
334
|
-
colSpan: visibleHeaders.length,
|
|
335
|
-
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
336
|
-
textColor: "neutral600",
|
|
337
|
-
children: formatMessage({
|
|
338
|
-
id: 'app.components.EmptyStateLayout.content-document',
|
|
339
|
-
defaultMessage: 'No content found'
|
|
340
471
|
})
|
|
472
|
+
}),
|
|
473
|
+
visibleHeaders.map((header)=>{
|
|
474
|
+
const tableHeaderLabel = formatMessage(header.label);
|
|
475
|
+
const isVisuallyHidden = 'isVisuallyHidden' in header && header.isVisuallyHidden;
|
|
476
|
+
if (isVisuallyHidden) {
|
|
477
|
+
return /*#__PURE__*/ jsxRuntime.jsx(StyledTh, {
|
|
478
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
|
|
479
|
+
children: formatMessage({
|
|
480
|
+
id: translations.getTranslationKey('table.header.actions'),
|
|
481
|
+
defaultMessage: 'actions'
|
|
482
|
+
})
|
|
483
|
+
})
|
|
484
|
+
}, header.name);
|
|
485
|
+
}
|
|
486
|
+
return /*#__PURE__*/ jsxRuntime.jsx(StyledTh, {
|
|
487
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
488
|
+
textColor: "neutral600",
|
|
489
|
+
variant: "sigma",
|
|
490
|
+
children: tableHeaderLabel
|
|
491
|
+
})
|
|
492
|
+
}, header.name);
|
|
341
493
|
})
|
|
342
|
-
})
|
|
343
|
-
}) : /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
|
|
344
|
-
children: [
|
|
345
|
-
folders.map((folder)=>/*#__PURE__*/ jsxRuntime.jsx(FolderRow, {
|
|
346
|
-
folder: folder
|
|
347
|
-
}, `folder-${folder.id}`)),
|
|
348
|
-
assets.map((asset)=>/*#__PURE__*/ jsxRuntime.jsx(AssetRow, {
|
|
349
|
-
asset: asset,
|
|
350
|
-
onAssetItemClick: onAssetItemClick
|
|
351
|
-
}, asset.id))
|
|
352
494
|
]
|
|
353
495
|
})
|
|
496
|
+
}),
|
|
497
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.RawTbody, {
|
|
498
|
+
children: [
|
|
499
|
+
mixedItems?.map((item)=>item.kind === 'folder' ? /*#__PURE__*/ jsxRuntime.jsx(FolderRow, {
|
|
500
|
+
folder: item.folder,
|
|
501
|
+
orderedItemKeys: orderedItemKeys
|
|
502
|
+
}, `folder-${item.folder.id}`) : /*#__PURE__*/ jsxRuntime.jsx(AssetRow, {
|
|
503
|
+
asset: item.asset,
|
|
504
|
+
orderedItemKeys: orderedItemKeys,
|
|
505
|
+
onAssetItemClick: onAssetItemClick
|
|
506
|
+
}, item.asset.id)),
|
|
507
|
+
!mixedItems && folders.map((folder)=>/*#__PURE__*/ jsxRuntime.jsx(FolderRow, {
|
|
508
|
+
folder: folder,
|
|
509
|
+
orderedItemKeys: orderedItemKeys
|
|
510
|
+
}, `folder-${folder.id}`)),
|
|
511
|
+
!mixedItems && assets.map((asset)=>/*#__PURE__*/ jsxRuntime.jsx(AssetRow, {
|
|
512
|
+
asset: asset,
|
|
513
|
+
orderedItemKeys: orderedItemKeys,
|
|
514
|
+
onAssetItemClick: onAssetItemClick
|
|
515
|
+
}, asset.id))
|
|
516
|
+
]
|
|
354
517
|
})
|
|
355
518
|
]
|
|
356
519
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetsTable.js","sources":["../../../../../../admin/src/future/pages/Assets/components/AssetsTable.tsx"],"sourcesContent":["import { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Flex,\n IconButton,\n RawTable,\n RawTbody,\n RawTd,\n RawTh,\n RawThead,\n RawTr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Folder as FolderIcon, More } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, css } from 'styled-components';\n\nimport { formatBytes } from '../../../utils/files';\nimport { getAssetIcon } from '../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../utils/translations';\nimport { TABLE_HEADERS } from '../constants';\nimport { useFolderNavigation } from '../hooks/useFolderNavigation';\n\nimport { useAssetsDndOptional } from './Dnd/AssetsDndProvider';\nimport { useFileDraggable, useFolderDraggableDroppable } from './Dnd/useAssetDnd';\n\nimport type { File } from '../../../../../../shared/contracts/files';\nimport type { Folder } from '../../../../../../shared/contracts/folders';\n\nconst StyledTable = styled(RawTable)`\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n border: 1px solid ${({ theme }) => theme.colors.neutral150};\n border-radius: 4px;\n overflow: hidden;\n`;\n\nconst StyledThead = styled(RawThead)`\n background: ${({ theme }) => theme.colors.neutral100};\n\n tr {\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\nconst StyledTh = styled(RawTh)`\n height: 40px;\n padding: 0 ${({ theme }) => theme.spaces[4]};\n text-align: left;\n`;\n\nconst StyledTd = styled(RawTd)`\n padding: 0 ${({ theme }) => theme.spaces[4]};\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst StyledTr = styled.tr<{\n $isDragging?: boolean;\n $isMovePending?: boolean;\n $isValidDropTarget?: boolean;\n $isInvalidDropTarget?: boolean;\n}>`\n height: 48px;\n background: ${({ theme }) => theme.colors.neutral0};\n cursor: ${({ $isMovePending, $isInvalidDropTarget }) => {\n if ($isMovePending) {\n return 'wait';\n }\n\n return $isInvalidDropTarget ? 'not-allowed' : 'pointer';\n }};\n opacity: ${({ $isDragging }) => ($isDragging ? 0.4 : 1)};\n pointer-events: ${({ $isMovePending }) => ($isMovePending ? 'none' : 'auto')};\n\n ${({ $isValidDropTarget, theme }) =>\n $isValidDropTarget &&\n css`\n background: ${theme.colors.primary100};\n outline: 1px dashed ${theme.colors.primary600};\n outline-offset: -1px;\n `}\n\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n\n &:last-child {\n ${StyledTd} {\n border-bottom: 0;\n }\n }\n`;\n\nconst StyledBodyTd = styled(RawTd)`\n padding: ${({ theme }) => theme.spaces[4]};\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\ninterface AssetPreviewCellProps {\n asset: File;\n}\n\nconst AssetPreviewCell = ({ asset }: AssetPreviewCellProps) => {\n const { ext, mime } = asset;\n\n const DocIcon = getAssetIcon(mime, ext);\n\n return (\n <Flex\n justifyContent=\"center\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n shrink={0}\n >\n <DocIcon width={20} height={20} />\n </Flex>\n );\n};\n\ninterface AssetRowProps {\n asset: File;\n onAssetItemClick: (assetId: number) => void;\n}\n\nconst AssetRow = ({ asset, onAssetItemClick }: AssetRowProps) => {\n const isMobile = useIsMobile();\n const { formatDate, formatMessage } = useIntl();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const { attributes, listeners, setNodeRef, isDragging } = useFileDraggable(asset);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onAssetItemClick(asset.id);\n }\n };\n\n return (\n <StyledTr\n ref={setNodeRef}\n {...attributes}\n {...listeners}\n $isDragging={isDragging}\n $isMovePending={isMovePending}\n tabIndex={0}\n role=\"row\"\n onDragStart={(e) => e.preventDefault()}\n onClick={() => onAssetItemClick(asset.id)}\n onKeyDown={handleKeyDown}\n >\n <StyledTd>\n <Flex gap={3} alignItems=\"center\">\n <AssetPreviewCell asset={asset} />\n <Flex direction=\"column\" alignItems=\"flex-start\">\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {asset.name}\n </Typography>\n {isMobile && (\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n )}\n </Flex>\n </Flex>\n </StyledTd>\n {!isMobile && (\n <>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.createdAt ? formatDate(new Date(asset.createdAt), { dateStyle: 'long' }) : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.updatedAt ? formatDate(new Date(asset.updatedAt), { dateStyle: 'long' }) : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n </StyledTd>\n </>\n )}\n <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\n </Flex>\n </StyledTd>\n </StyledTr>\n );\n};\n\nconst FolderTr = styled(StyledTr)`\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n`;\n\ninterface FolderRowProps {\n folder: Folder;\n}\n\nconst FolderRow = ({ folder }: FolderRowProps) => {\n const isMobile = useIsMobile();\n const { formatDate, formatMessage } = useIntl();\n const { navigateToFolder } = useFolderNavigation();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const {\n draggable: { attributes, listeners, setNodeRef: setDragRef, isDragging },\n droppable: { setNodeRef: setDropRef },\n showValidDropHighlight,\n showInvalidDropCursor,\n } = useFolderDraggableDroppable(folder);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n navigateToFolder(folder);\n }\n };\n\n return (\n <FolderTr\n ref={(node) => {\n setDragRef(node);\n setDropRef(node);\n }}\n {...attributes}\n {...listeners}\n $isDragging={isDragging}\n $isMovePending={isMovePending}\n $isValidDropTarget={showValidDropHighlight}\n $isInvalidDropTarget={showInvalidDropCursor}\n tabIndex={0}\n role=\"row\"\n onDragStart={(e) => e.preventDefault()}\n onClick={() => navigateToFolder(folder)}\n onKeyDown={handleKeyDown}\n >\n <StyledTd>\n <Flex gap={3} alignItems=\"center\">\n <Flex\n justifyContent=\"center\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n color=\"neutral600\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n shrink={0}\n >\n <FolderIcon width={20} height={20} />\n </Flex>\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {folder.name}\n </Typography>\n </Flex>\n </StyledTd>\n {!isMobile && (\n <>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {folder.createdAt\n ? formatDate(new Date(folder.createdAt), { dateStyle: 'long' })\n : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {folder.updatedAt\n ? formatDate(new Date(folder.updatedAt), { dateStyle: 'long' })\n : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">-</Typography>\n </StyledTd>\n </>\n )}\n <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\n </Flex>\n </StyledTd>\n </FolderTr>\n );\n};\n\ninterface AssetsTableProps {\n assets: File[];\n folders?: Folder[];\n onAssetItemClick: (assetId: number) => void;\n}\n\nexport const AssetsTable = ({ assets, folders = [], onAssetItemClick }: AssetsTableProps) => {\n const isMobile = useIsMobile();\n const { formatMessage } = useIntl();\n\n const visibleHeaders = isMobile\n ? TABLE_HEADERS.filter((h) => h.name === 'name' || h.name === 'actions')\n : TABLE_HEADERS;\n\n const totalRows = folders.length + assets.length;\n\n return (\n <StyledTable colCount={visibleHeaders.length} rowCount={totalRows + 1}>\n <StyledThead>\n <RawTr>\n {visibleHeaders.map((header) => {\n const tableHeaderLabel = formatMessage(header.label);\n const isVisuallyHidden = 'isVisuallyHidden' in header && header.isVisuallyHidden;\n\n if (isVisuallyHidden) {\n return (\n <StyledTh key={header.name}>\n <VisuallyHidden>\n {formatMessage({\n id: getTranslationKey('table.header.actions'),\n defaultMessage: 'actions',\n })}\n </VisuallyHidden>\n </StyledTh>\n );\n }\n\n return (\n <StyledTh key={header.name}>\n <Typography textColor=\"neutral600\" variant=\"sigma\">\n {tableHeaderLabel}\n </Typography>\n </StyledTh>\n );\n })}\n </RawTr>\n </StyledThead>\n <RawTbody>\n {totalRows === 0 ? (\n <RawTr>\n <StyledBodyTd colSpan={visibleHeaders.length}>\n <Typography textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n </Typography>\n </StyledBodyTd>\n </RawTr>\n ) : (\n <>\n {folders.map((folder) => (\n <FolderRow key={`folder-${folder.id}`} folder={folder} />\n ))}\n {assets.map((asset) => (\n <AssetRow key={asset.id} asset={asset} onAssetItemClick={onAssetItemClick} />\n ))}\n </>\n )}\n </RawTbody>\n </StyledTable>\n );\n};\n"],"names":["StyledTable","styled","RawTable","theme","colors","neutral150","StyledThead","RawThead","neutral100","StyledTh","RawTh","spaces","StyledTd","RawTd","StyledTr","tr","neutral0","$isMovePending","$isInvalidDropTarget","$isDragging","$isValidDropTarget","css","primary100","primary600","StyledBodyTd","AssetPreviewCell","asset","ext","mime","DocIcon","getAssetIcon","_jsx","Flex","justifyContent","alignItems","borderRadius","color","width","height","shrink","AssetRow","onAssetItemClick","isMobile","useIsMobile","formatDate","formatMessage","useIntl","isMovePending","useAssetsDndOptional","attributes","listeners","setNodeRef","isDragging","useFileDraggable","handleKeyDown","e","key","preventDefault","id","_jsxs","ref","tabIndex","role","onDragStart","onClick","onKeyDown","gap","direction","Typography","textColor","fontWeight","ellipsis","name","variant","size","formatBytes","_Fragment","createdAt","Date","dateStyle","updatedAt","IconButton","label","getTranslationKey","defaultMessage","stopPropagation","More","FolderTr","FolderRow","folder","navigateToFolder","useFolderNavigation","draggable","setDragRef","droppable","setDropRef","showValidDropHighlight","showInvalidDropCursor","useFolderDraggableDroppable","node","FolderIcon","AssetsTable","assets","folders","visibleHeaders","TABLE_HEADERS","filter","h","totalRows","length","colCount","rowCount","RawTr","map","header","tableHeaderLabel","isVisuallyHidden","VisuallyHidden","RawTbody","colSpan"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AssetsTable.js","sources":["../../../../../../admin/src/future/pages/Assets/components/AssetsTable.tsx"],"sourcesContent":["import { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Checkbox,\n Flex,\n IconButton,\n RawTable,\n RawTbody,\n RawTd,\n RawTh,\n RawThead,\n RawTr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Folder as FolderIcon, More } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, css } from 'styled-components';\n\nimport { formatBytes } from '../../../utils/files';\nimport { getAssetIcon } from '../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../utils/translations';\nimport { TABLE_HEADERS } from '../constants';\nimport { useAssetSelection } from '../hooks/useAssetSelection';\nimport { useFolderNavigation } from '../hooks/useFolderNavigation';\nimport { type MixedItem } from '../utils/mergeMixedList';\nimport { assetKey, folderKey, getSelectAllState, type ItemKey } from '../utils/selection';\n\nimport { useAssetsDndOptional } from './Dnd/AssetsDndProvider';\nimport { useFileDraggable, useFolderDraggableDroppable } from './Dnd/useAssetDnd';\n\nimport type { File } from '../../../../../../shared/contracts/files';\nimport type { Folder } from '../../../../../../shared/contracts/folders';\n\nconst StyledTable = styled(RawTable)`\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n border: 1px solid ${({ theme }) => theme.colors.neutral150};\n border-radius: 4px;\n overflow: hidden;\n`;\n\nconst StyledThead = styled(RawThead)`\n background: ${({ theme }) => theme.colors.neutral100};\n\n tr {\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\nconst StyledTh = styled(RawTh)`\n height: 40px;\n padding: 0 ${({ theme }) => theme.spaces[4]};\n text-align: left;\n`;\n\nconst StyledTd = styled(RawTd)`\n padding: 0 ${({ theme }) => theme.spaces[4]};\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst StyledTr = styled.tr<{\n $isDragging?: boolean;\n $isMovePending?: boolean;\n $isValidDropTarget?: boolean;\n $isInvalidDropTarget?: boolean;\n $isSelected?: boolean;\n}>`\n height: 48px;\n user-select: none;\n background: ${({ theme, $isSelected }) =>\n $isSelected ? theme.colors.primary100 : theme.colors.neutral0};\n cursor: ${({ $isMovePending, $isInvalidDropTarget }) => {\n if ($isMovePending) {\n return 'wait';\n }\n\n return $isInvalidDropTarget ? 'not-allowed' : 'pointer';\n }};\n opacity: ${({ $isDragging }) => ($isDragging ? 0.4 : 1)};\n pointer-events: ${({ $isMovePending }) => ($isMovePending ? 'none' : 'auto')};\n\n ${({ $isValidDropTarget, theme }) =>\n $isValidDropTarget &&\n css`\n background: ${theme.colors.primary100};\n outline: 1px dashed ${theme.colors.primary600};\n outline-offset: -1px;\n `}\n\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n\n &:last-child {\n ${StyledTd} {\n border-bottom: 0;\n }\n }\n`;\n\n// Leading checkbox column. Narrow + centred so the control sits flush against the\n// row's left edge.\nconst CheckboxTd = styled(StyledTd)`\n width: 1%;\n white-space: nowrap;\n`;\n\nconst CheckboxTh = styled(StyledTh)`\n width: 1%;\n white-space: nowrap;\n`;\n\n// The asset filename is its own interactive element: clicking it opens the\n// details drawer instead of selecting the row.\nconst NameButton = styled.button`\n display: inline-flex;\n max-width: 100%;\n border: none;\n background: transparent;\n padding: 0;\n margin: 0;\n cursor: pointer;\n text-align: left;\n color: inherit;\n font: inherit;\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: 2px;\n border-radius: 2px;\n }\n`;\n\nconst stopRowEvent = (e: React.SyntheticEvent) => {\n e.stopPropagation();\n};\n\ninterface AssetPreviewCellProps {\n asset: File;\n}\n\nconst AssetPreviewCell = ({ asset }: AssetPreviewCellProps) => {\n const { ext, mime } = asset;\n\n const DocIcon = getAssetIcon(mime, ext);\n\n return (\n <Flex\n justifyContent=\"center\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n shrink={0}\n >\n <DocIcon width={20} height={20} />\n </Flex>\n );\n};\n\ninterface AssetRowProps {\n asset: File;\n orderedItemKeys: ItemKey[];\n onAssetItemClick: (assetId: number) => void;\n}\n\nconst AssetRow = ({ asset, orderedItemKeys, onAssetItemClick }: AssetRowProps) => {\n const isMobile = useIsMobile();\n const { formatDate, formatMessage } = useIntl();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const { attributes, listeners, setNodeRef, isDragging } = useFileDraggable(asset);\n const { isSelected, toggle, selectRange } = useAssetSelection();\n\n const key = assetKey(asset.id);\n const selected = isSelected(key);\n\n // Plain click opens the asset details; pointer selection lives on the\n // checkbox only. Modifier clicks keep the selection semantics: shift selects\n // a range, cmd/ctrl toggles.\n const handleRowClick = (e: React.MouseEvent) => {\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else if (e.metaKey || e.ctrlKey) {\n toggle(key);\n } else {\n onAssetItemClick(asset.id);\n }\n };\n\n // Desktop: Space toggles selection (additive), Enter opens the details drawer.\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n onAssetItemClick(asset.id);\n } else if (e.key === ' ') {\n e.preventDefault();\n toggle(key);\n }\n };\n\n const handleNameClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onAssetItemClick(asset.id);\n };\n\n const handleCheckboxClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else {\n toggle(key);\n }\n };\n\n return (\n <StyledTr\n ref={setNodeRef}\n {...attributes}\n {...listeners}\n $isDragging={isDragging}\n $isMovePending={isMovePending}\n $isSelected={selected}\n tabIndex={0}\n role=\"row\"\n onDragStart={(e) => e.preventDefault()}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n >\n {/* TODO:? no checkbox column on mobile — multi-select on mobile is deferred. */}\n {!isMobile && (\n <CheckboxTd onClick={stopRowEvent} onKeyDown={stopRowEvent}>\n <Flex>\n <Checkbox\n checked={selected}\n onClick={handleCheckboxClick}\n aria-label={formatMessage(\n {\n id: getTranslationKey('list.table.row.select'),\n defaultMessage: 'Select {name}',\n },\n { name: asset.name }\n )}\n />\n </Flex>\n </CheckboxTd>\n )}\n <StyledTd>\n <Flex gap={3} alignItems=\"center\">\n <AssetPreviewCell asset={asset} />\n <Flex direction=\"column\" alignItems=\"flex-start\" minWidth={0}>\n <NameButton type=\"button\" onClick={handleNameClick}>\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {asset.name}\n </Typography>\n </NameButton>\n {isMobile && (\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n )}\n </Flex>\n </Flex>\n </StyledTd>\n {!isMobile && (\n <>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.createdAt ? formatDate(new Date(asset.createdAt), { dateStyle: 'long' }) : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.updatedAt ? formatDate(new Date(asset.updatedAt), { dateStyle: 'long' }) : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n </StyledTd>\n </>\n )}\n <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\n </Flex>\n </StyledTd>\n </StyledTr>\n );\n};\n\nconst FolderTr = styled(StyledTr)`\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n`;\n\ninterface FolderRowProps {\n folder: Folder;\n orderedItemKeys: ItemKey[];\n}\n\nconst FolderRow = ({ folder, orderedItemKeys }: FolderRowProps) => {\n const isMobile = useIsMobile();\n const { formatDate, formatMessage } = useIntl();\n const { navigateToFolder } = useFolderNavigation();\n const { isSelected, toggle, selectRange } = useAssetSelection();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const {\n draggable: { attributes, listeners, setNodeRef: setDragRef, isDragging },\n droppable: { setNodeRef: setDropRef },\n showValidDropHighlight,\n showInvalidDropCursor,\n } = useFolderDraggableDroppable(folder);\n\n const key = folderKey(folder.id);\n\n // Folders share the selection mechanism with assets. Only the plain-click\n // semantic differs: it navigates into the folder instead of selecting it.\n const handleRowClick = (e: React.MouseEvent) => {\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else if (e.metaKey || e.ctrlKey) {\n toggle(key);\n } else {\n navigateToFolder(folder);\n }\n };\n\n // Enter navigates into the folder, Space toggles selection (same as assets).\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n navigateToFolder(folder);\n } else if (e.key === ' ') {\n e.preventDefault();\n toggle(key);\n }\n };\n\n const handleCheckboxClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else {\n toggle(key);\n }\n };\n\n return (\n <FolderTr\n ref={(node) => {\n setDragRef(node);\n setDropRef(node);\n }}\n {...attributes}\n {...listeners}\n $isDragging={isDragging}\n $isMovePending={isMovePending}\n $isValidDropTarget={showValidDropHighlight}\n $isInvalidDropTarget={showInvalidDropCursor}\n $isSelected={isSelected(key)}\n tabIndex={0}\n role=\"row\"\n onDragStart={(e) => e.preventDefault()}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n >\n {!isMobile && (\n <CheckboxTd onClick={stopRowEvent} onKeyDown={stopRowEvent}>\n <Flex>\n <Checkbox\n checked={isSelected(key)}\n onClick={handleCheckboxClick}\n aria-label={formatMessage(\n {\n id: getTranslationKey('list.table.row.select'),\n defaultMessage: 'Select {name}',\n },\n { name: folder.name }\n )}\n />\n </Flex>\n </CheckboxTd>\n )}\n <StyledTd>\n <Flex gap={3} alignItems=\"center\">\n <Flex\n justifyContent=\"center\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n color=\"neutral600\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n shrink={0}\n >\n <FolderIcon width={20} height={20} />\n </Flex>\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {folder.name}\n </Typography>\n </Flex>\n </StyledTd>\n {!isMobile && (\n <>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {folder.createdAt\n ? formatDate(new Date(folder.createdAt), { dateStyle: 'long' })\n : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {folder.updatedAt\n ? formatDate(new Date(folder.updatedAt), { dateStyle: 'long' })\n : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">-</Typography>\n </StyledTd>\n </>\n )}\n <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\n </Flex>\n </StyledTd>\n </FolderTr>\n );\n};\n\ninterface AssetsTableProps {\n assets: File[];\n folders?: Folder[];\n /**\n * When set (\"Folders: Mixed with files\"), rows render in this interleaved\n * order instead of folders-first. Range selection follows the same order.\n */\n mixedItems?: MixedItem[] | null;\n onAssetItemClick: (assetId: number) => void;\n}\n\nexport const AssetsTable = ({\n assets,\n folders = [],\n mixedItems = null,\n onAssetItemClick,\n}: AssetsTableProps) => {\n const isMobile = useIsMobile();\n const { formatMessage } = useIntl();\n const { selectedKeys, selectAll, clear } = useAssetSelection();\n\n const visibleHeaders = isMobile\n ? TABLE_HEADERS.filter((h) => h.name === 'name' || h.name === 'actions')\n : TABLE_HEADERS;\n\n // The checkbox column is a dedicated structural column (not part of\n // TABLE_HEADERS) and is hidden on mobile.\n const showCheckboxColumn = !isMobile;\n const colCount = visibleHeaders.length + (showCheckboxColumn ? 1 : 0);\n\n const totalRows = folders.length + assets.length;\n\n // Render order — folders first by default, or the interleaved mixed order.\n // Range selection follows it.\n const orderedItemKeys: ItemKey[] = mixedItems\n ? mixedItems.map((item) =>\n item.kind === 'folder' ? folderKey(item.folder.id) : assetKey(item.asset.id)\n )\n : [\n ...folders.map((folder) => folderKey(folder.id)),\n ...assets.map((asset) => assetKey(asset.id)),\n ];\n const { allSelected, isIndeterminate } = getSelectAllState(selectedKeys, orderedItemKeys);\n\n const handleSelectAll = () => {\n if (allSelected) {\n clear();\n } else {\n selectAll(orderedItemKeys);\n }\n };\n\n // The empty state is owned by the page (`AssetsView` renders `EmptyState`) — an\n // empty table renders nothing at all, not headers over an empty body.\n if (totalRows === 0) {\n return null;\n }\n\n return (\n <StyledTable colCount={colCount} rowCount={(mixedItems ? mixedItems.length : totalRows) + 1}>\n <StyledThead>\n <RawTr>\n {showCheckboxColumn && (\n <CheckboxTh>\n <Flex>\n <Checkbox\n checked={isIndeterminate ? 'indeterminate' : allSelected}\n disabled={orderedItemKeys.length === 0}\n onCheckedChange={handleSelectAll}\n aria-label={formatMessage({\n id: getTranslationKey('list.table.header.select-all'),\n defaultMessage: 'Select all',\n })}\n />\n </Flex>\n </CheckboxTh>\n )}\n {visibleHeaders.map((header) => {\n const tableHeaderLabel = formatMessage(header.label);\n const isVisuallyHidden = 'isVisuallyHidden' in header && header.isVisuallyHidden;\n\n if (isVisuallyHidden) {\n return (\n <StyledTh key={header.name}>\n <VisuallyHidden>\n {formatMessage({\n id: getTranslationKey('table.header.actions'),\n defaultMessage: 'actions',\n })}\n </VisuallyHidden>\n </StyledTh>\n );\n }\n\n return (\n <StyledTh key={header.name}>\n <Typography textColor=\"neutral600\" variant=\"sigma\">\n {tableHeaderLabel}\n </Typography>\n </StyledTh>\n );\n })}\n </RawTr>\n </StyledThead>\n <RawTbody>\n {mixedItems?.map((item) =>\n item.kind === 'folder' ? (\n <FolderRow\n key={`folder-${item.folder.id}`}\n folder={item.folder}\n orderedItemKeys={orderedItemKeys}\n />\n ) : (\n <AssetRow\n key={item.asset.id}\n asset={item.asset}\n orderedItemKeys={orderedItemKeys}\n onAssetItemClick={onAssetItemClick}\n />\n )\n )}\n {!mixedItems &&\n folders.map((folder) => (\n <FolderRow\n key={`folder-${folder.id}`}\n folder={folder}\n orderedItemKeys={orderedItemKeys}\n />\n ))}\n {!mixedItems &&\n assets.map((asset) => (\n <AssetRow\n key={asset.id}\n asset={asset}\n orderedItemKeys={orderedItemKeys}\n onAssetItemClick={onAssetItemClick}\n />\n ))}\n </RawTbody>\n </StyledTable>\n );\n};\n"],"names":["StyledTable","styled","RawTable","theme","colors","neutral150","StyledThead","RawThead","neutral100","StyledTh","RawTh","spaces","StyledTd","RawTd","StyledTr","tr","$isSelected","primary100","neutral0","$isMovePending","$isInvalidDropTarget","$isDragging","$isValidDropTarget","css","primary600","CheckboxTd","CheckboxTh","NameButton","button","stopRowEvent","e","stopPropagation","AssetPreviewCell","asset","ext","mime","DocIcon","getAssetIcon","_jsx","Flex","justifyContent","alignItems","borderRadius","color","width","height","shrink","AssetRow","orderedItemKeys","onAssetItemClick","isMobile","useIsMobile","formatDate","formatMessage","useIntl","isMovePending","useAssetsDndOptional","attributes","listeners","setNodeRef","isDragging","useFileDraggable","isSelected","toggle","selectRange","useAssetSelection","key","assetKey","id","selected","handleRowClick","shiftKey","metaKey","ctrlKey","handleKeyDown","preventDefault","handleNameClick","handleCheckboxClick","_jsxs","ref","tabIndex","role","onDragStart","onClick","onKeyDown","Checkbox","checked","aria-label","getTranslationKey","defaultMessage","name","gap","direction","minWidth","type","Typography","textColor","fontWeight","ellipsis","variant","size","formatBytes","_Fragment","createdAt","Date","dateStyle","updatedAt","IconButton","label","More","FolderTr","FolderRow","folder","navigateToFolder","useFolderNavigation","draggable","setDragRef","droppable","setDropRef","showValidDropHighlight","showInvalidDropCursor","useFolderDraggableDroppable","folderKey","node","FolderIcon","AssetsTable","assets","folders","mixedItems","selectedKeys","selectAll","clear","visibleHeaders","TABLE_HEADERS","filter","h","showCheckboxColumn","colCount","length","totalRows","map","item","kind","allSelected","isIndeterminate","getSelectAllState","handleSelectAll","rowCount","RawTr","disabled","onCheckedChange","header","tableHeaderLabel","isVisuallyHidden","VisuallyHidden","RawTbody"],"mappings":"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"}
|