@scaleflex/widget-explorer 4.1.0 → 4.3.0
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/CHANGELOG.md +22 -0
- package/README.md +7 -0
- package/lib/components/FoldersView/index.js +29 -3
- package/lib/components/Modals/AddNewFolder/AddNewFolder.hooks.js +99 -0
- package/lib/components/Modals/AddNewFolder/index.js +1 -0
- package/lib/components/Modals/index.js +1 -0
- package/lib/defaultLocale.js +2 -1
- package/lib/index.js +2 -1
- package/package.json +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,28 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [4.3.0](https://code.scaleflex.cloud/scaleflex/widget/compare/v4.1.0...v4.3.0) (2025-10-02)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* add `hideTopBarAddFolderButton` option and implement new folder modal functionality in the explorer component ([7129309](https://code.scaleflex.cloud/scaleflex/widget/commits/712930995f6dfd4a0d874c0638dde61065fd0683))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# [4.2.0](https://code.scaleflex.cloud/scaleflex/widget/compare/v4.1.0...v4.2.0) (2025-10-02)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* add `hideTopBarAddFolderButton` option and implement new folder modal functionality in the explorer component ([7129309](https://code.scaleflex.cloud/scaleflex/widget/commits/712930995f6dfd4a0d874c0638dde61065fd0683))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
6
28
|
# [4.1.0](https://code.scaleflex.cloud/scaleflex/widget/compare/v4.0.8...v4.1.0) (2025-10-02)
|
|
7
29
|
|
|
8
30
|
|
package/README.md
CHANGED
|
@@ -1198,6 +1198,13 @@ If `true` force hides the manual sub-tab of variations tab in file window.
|
|
|
1198
1198
|
|
|
1199
1199
|
If `true` shows the add preset button inside the automatic tab if the user allowed to add.
|
|
1200
1200
|
|
|
1201
|
+
### `hideTopBarAddFolderButton` ![asset-manager-supported]
|
|
1202
|
+
|
|
1203
|
+
<u>Type:</u> `boolean`.
|
|
1204
|
+
|
|
1205
|
+
<u>Default:</u> `false`
|
|
1206
|
+
|
|
1207
|
+
If `true` hides the add folder button on the topright.
|
|
1201
1208
|
|
|
1202
1209
|
## Events
|
|
1203
1210
|
|
|
@@ -8,6 +8,8 @@ import { memo, useCallback, useEffect, useRef } from 'react';
|
|
|
8
8
|
import { useSelector, useDispatch } from 'react-redux';
|
|
9
9
|
import { useUpdateEffect } from '@scaleflex/widget-common/lib/hooks';
|
|
10
10
|
import Drawer from '@scaleflex/widget-explorer/lib/components/Drawer';
|
|
11
|
+
import { PlusOutline } from '@scaleflex/icons';
|
|
12
|
+
import { Button } from '@scaleflex/ui/core';
|
|
11
13
|
import { useExplorer, useIsSmallScreen } from '../../hooks';
|
|
12
14
|
import { selectIsDetailsViewOpened, detailsViewToggled, selectFileWindowFor } from '../../slices/panels.slice';
|
|
13
15
|
import AssetsList from '../AssetsList';
|
|
@@ -27,8 +29,11 @@ import TopBarUploadButton from '../common/TopBarUploadButton';
|
|
|
27
29
|
import { selectIsDraggingOver } from '../../slices/common.slice';
|
|
28
30
|
import { DETAILS_SIDEBAR_WIDTHS } from '../Details/Details.constants';
|
|
29
31
|
import { selectIsSearchFetchType } from '../../slices/search.slice';
|
|
32
|
+
import { useAddNewFolderModal } from '../Modals';
|
|
30
33
|
import DnD from '../DnD';
|
|
31
|
-
import {
|
|
34
|
+
import { selectIsUserPermittedTo } from '@scaleflex/widget-core/lib/slices/user.slice';
|
|
35
|
+
import { PERMISSIONS } from '@scaleflex/widget-utils/lib/constants';
|
|
36
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
32
37
|
var EMPTY_FOLDERS_VIEW_PLACEHOLDER_DATA = {
|
|
33
38
|
titleI18nKey: 'explorerFoldersViewEmptyTitle',
|
|
34
39
|
hintI18nKeys: ['explorerFoldersViewEmptyHint1', 'explorerFoldersViewEmptyHint2']
|
|
@@ -40,6 +45,7 @@ var FoldersView = function FoldersView() {
|
|
|
40
45
|
i18n = _useExplorer.i18n,
|
|
41
46
|
requestCloseModal = _useExplorer.requestCloseModal;
|
|
42
47
|
var isWidgetSmallSize = useIsSmallScreen();
|
|
48
|
+
var triggerAddNewFolderModal = useAddNewFolderModal();
|
|
43
49
|
var isSearchFetchType = useSelector(selectIsSearchFetchType);
|
|
44
50
|
var isDetailsViewOpened = useSelector(selectIsDetailsViewOpened);
|
|
45
51
|
var isFoldersTreeOpened = useSelector(selectIsFoldersTreeOpened);
|
|
@@ -57,6 +63,9 @@ var FoldersView = function FoldersView() {
|
|
|
57
63
|
var foldersSortOrder = useSelector(selectFoldersSortOrder);
|
|
58
64
|
var filesSortBy = useSelector(selectFilesSortedBy);
|
|
59
65
|
var filesSortOrder = useSelector(selectFilesSortOrder);
|
|
66
|
+
var isAllowedToCreateFolder = useSelector(function (state) {
|
|
67
|
+
return selectIsUserPermittedTo(state, PERMISSIONS.FOLDER_CREATE);
|
|
68
|
+
});
|
|
60
69
|
var isFilesAndFoldersSortDifferent = useSelector(function (state) {
|
|
61
70
|
return foldersSortedBy !== filesSortBy || foldersSortOrder !== filesSortOrder;
|
|
62
71
|
});
|
|
@@ -68,7 +77,8 @@ var FoldersView = function FoldersView() {
|
|
|
68
77
|
ExploreViewComponent = opts.ExploreViewComponent,
|
|
69
78
|
hideLeftSideBar = opts.hideLeftSideBar,
|
|
70
79
|
useAssetsPicker = opts.useAssetsPicker,
|
|
71
|
-
assetsPickerModelTitle = opts.assetsPickerModelTitle
|
|
80
|
+
assetsPickerModelTitle = opts.assetsPickerModelTitle,
|
|
81
|
+
hideTopBarAddFolderButton = opts.hideTopBarAddFolderButton;
|
|
72
82
|
useEffect(function () {
|
|
73
83
|
offsetRef.current = filesOffset;
|
|
74
84
|
}, [filesOffset]);
|
|
@@ -176,8 +186,24 @@ var FoldersView = function FoldersView() {
|
|
|
176
186
|
skipPendingDispatch: false
|
|
177
187
|
}));
|
|
178
188
|
};
|
|
189
|
+
var renderAddFolderButton = function renderAddFolderButton() {
|
|
190
|
+
return /*#__PURE__*/_jsx(Button, {
|
|
191
|
+
color: "secondary",
|
|
192
|
+
startIcon: function startIcon(props) {
|
|
193
|
+
return /*#__PURE__*/_jsx(PlusOutline, _objectSpread({}, props));
|
|
194
|
+
},
|
|
195
|
+
size: "md",
|
|
196
|
+
onClick: function onClick() {
|
|
197
|
+
return triggerAddNewFolderModal();
|
|
198
|
+
},
|
|
199
|
+
"data-testid": "add-folder-button",
|
|
200
|
+
children: i18n('explorerFoldersViewTopBarNewFolderButton')
|
|
201
|
+
});
|
|
202
|
+
};
|
|
179
203
|
var renderTopBarRightComponent = function renderTopBarRightComponent() {
|
|
180
|
-
return /*#__PURE__*/
|
|
204
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
205
|
+
children: [isAllowedToCreateFolder && !hideTopBarAddFolderButton && renderAddFolderButton(), /*#__PURE__*/_jsx(TopBarUploadButton, {})]
|
|
206
|
+
});
|
|
181
207
|
};
|
|
182
208
|
var handleRefreshFolder = function handleRefreshFolder() {
|
|
183
209
|
if (!currentFolderPath) {
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { useDispatch } from 'react-redux';
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
import { AddFolder } from '@scaleflex/icons';
|
|
4
|
+
import { useTheme } from '@scaleflex/ui/theme/hooks';
|
|
5
|
+
import { useModal } from '@scaleflex/widget-core/lib/hooks';
|
|
6
|
+
import { PC } from '@scaleflex/widget-common';
|
|
7
|
+
import handlePromise from '@scaleflex/widget-utils/lib/handlePromise';
|
|
8
|
+
import { checkFileOrFolderNameValidation } from '@scaleflex/widget-utils/lib/checkFileOrFolderNameValidation';
|
|
9
|
+
import { InputGroup } from '@scaleflex/ui/core';
|
|
10
|
+
import { useExplorerI18n, useExplorerInformer } from '../../../hooks';
|
|
11
|
+
import { addNewFolder } from '../../../slices/folders.slice';
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
export var useAddNewFolderModal = function useAddNewFolderModal() {
|
|
14
|
+
var dispatch = useDispatch();
|
|
15
|
+
var toggleModal = useModal();
|
|
16
|
+
var theme = useTheme();
|
|
17
|
+
var i18n = useExplorerI18n();
|
|
18
|
+
var info = useExplorerInformer();
|
|
19
|
+
|
|
20
|
+
// If no path is provided, then the folder will be created in the current folder.
|
|
21
|
+
var triggerAddNewFolderModal = useCallback(function () {
|
|
22
|
+
var toFolderPath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
23
|
+
var addFolderHandler = function addFolderHandler(_ref) {
|
|
24
|
+
var data = _ref.data,
|
|
25
|
+
closeModal = _ref.closeModal,
|
|
26
|
+
setIsModalLoading = _ref.setIsModalLoading;
|
|
27
|
+
var folderName = data.folderName;
|
|
28
|
+
if (folderName) {
|
|
29
|
+
setIsModalLoading(true);
|
|
30
|
+
handlePromise(dispatch(addNewFolder({
|
|
31
|
+
path: toFolderPath,
|
|
32
|
+
name: folderName
|
|
33
|
+
})), function () {
|
|
34
|
+
closeModal();
|
|
35
|
+
info(i18n('explorerFolderCreatedInfo'), 'success', 5000);
|
|
36
|
+
}, undefined, function () {
|
|
37
|
+
setIsModalLoading(false);
|
|
38
|
+
});
|
|
39
|
+
} else {
|
|
40
|
+
info(i18n('explorerFolderNameRequiredInfo'), 'warning', 5000);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
toggleModal({
|
|
44
|
+
icon: /*#__PURE__*/_jsx(AddFolder, {
|
|
45
|
+
color: theme.palette[PC.AccentPrimary],
|
|
46
|
+
width: 29,
|
|
47
|
+
height: 29
|
|
48
|
+
}),
|
|
49
|
+
showTitleLabel: true,
|
|
50
|
+
disableAutoClose: true,
|
|
51
|
+
title: i18n('explorerModelAddFolderTitle'),
|
|
52
|
+
content: function content(_ref2) {
|
|
53
|
+
var updateData = _ref2.updateData,
|
|
54
|
+
data = _ref2.data,
|
|
55
|
+
setPrimaryButtonDisabled = _ref2.setPrimaryButtonDisabled;
|
|
56
|
+
return /*#__PURE__*/_jsx(InputGroup, {
|
|
57
|
+
onChange: function onChange(_ref3) {
|
|
58
|
+
var target = _ref3.target;
|
|
59
|
+
var error = '';
|
|
60
|
+
if (checkFileOrFolderNameValidation(target.value)) {
|
|
61
|
+
error = i18n('mutualizedFolderInvalidNameError');
|
|
62
|
+
}
|
|
63
|
+
updateData({
|
|
64
|
+
folderName: target.value,
|
|
65
|
+
error: error
|
|
66
|
+
});
|
|
67
|
+
setPrimaryButtonDisabled(Boolean(error) || !target.value);
|
|
68
|
+
},
|
|
69
|
+
error: Boolean(data.error),
|
|
70
|
+
hint: data.error,
|
|
71
|
+
label: i18n('explorerModelNewFolderName'),
|
|
72
|
+
placeholder: i18n('explorerModelNewFolderPlaceholder'),
|
|
73
|
+
value: data.folderName || '',
|
|
74
|
+
fullWidth: true,
|
|
75
|
+
focusOnMount: true
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
buttonPrimaryLabel: i18n('explorerModelAddLabel'),
|
|
79
|
+
buttonSecondaryBg: 'basic',
|
|
80
|
+
onButtonPrimaryClick: addFolderHandler,
|
|
81
|
+
enterKeySubmits: true,
|
|
82
|
+
modalStyle: {
|
|
83
|
+
maxWidth: 400
|
|
84
|
+
},
|
|
85
|
+
modalFooterStyle: {
|
|
86
|
+
flexDirection: 'row'
|
|
87
|
+
},
|
|
88
|
+
modalSecondaryButton: {
|
|
89
|
+
width: 170
|
|
90
|
+
},
|
|
91
|
+
modalSecondaryButtonColor: 'basic',
|
|
92
|
+
modalPrimaryButton: {
|
|
93
|
+
width: 170
|
|
94
|
+
},
|
|
95
|
+
disablePrimaryButton: true
|
|
96
|
+
});
|
|
97
|
+
}, [i18n, theme]);
|
|
98
|
+
return triggerAddNewFolderModal;
|
|
99
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useAddNewFolderModal } from './AddNewFolder.hooks';
|
package/lib/defaultLocale.js
CHANGED
|
@@ -1356,5 +1356,6 @@ export default {
|
|
|
1356
1356
|
explorerFileWindowAddPresetDescPlaceholder: 'Enter description here',
|
|
1357
1357
|
explorerFileWindowAddPresetDescLabel: 'Description',
|
|
1358
1358
|
explorerFileWindowPresetAddedInfo: 'Preset is added!',
|
|
1359
|
-
explorerFileWindowAddPresetNameRegexError: '{ , } , | , \\ , ^ , ~ , @ , spaces , ` and , characters are not allowed'
|
|
1359
|
+
explorerFileWindowAddPresetNameRegexError: '{ , } , | , \\ , ^ , ~ , @ , spaces , ` and , characters are not allowed',
|
|
1360
|
+
explorerFoldersViewTopBarNewFolderButton: 'Add folder'
|
|
1360
1361
|
};
|
package/lib/index.js
CHANGED
|
@@ -1396,7 +1396,8 @@ var Explorer = /*#__PURE__*/function (_Plugin) {
|
|
|
1396
1396
|
hideMetadataTab: false,
|
|
1397
1397
|
hideFileSpecsMetadataFields: false,
|
|
1398
1398
|
variationsHideManualSubTab: false,
|
|
1399
|
-
variationsShowAddPresetButton: false
|
|
1399
|
+
variationsShowAddPresetButton: false,
|
|
1400
|
+
hideTopBarAddFolderButton: false
|
|
1400
1401
|
};
|
|
1401
1402
|
|
|
1402
1403
|
// merge default options with the ones set by user
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scaleflex/widget-explorer",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.3.0",
|
|
4
4
|
"description": "Scaleflex explorer for the files uploaded on filerobot, handling them & upload new files.",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"style": "dist/style.min.css",
|
|
@@ -18,12 +18,12 @@
|
|
|
18
18
|
"@scaleflex/icons": "^3.0.0-beta.11",
|
|
19
19
|
"@scaleflex/react-url-builder": "^0.0.72",
|
|
20
20
|
"@scaleflex/ui": "^3.0.0-beta.11",
|
|
21
|
-
"@scaleflex/widget-common": "^4.
|
|
22
|
-
"@scaleflex/widget-icons": "^4.
|
|
23
|
-
"@scaleflex/widget-informer": "^4.
|
|
24
|
-
"@scaleflex/widget-provider-views": "^4.
|
|
25
|
-
"@scaleflex/widget-thumbnail-generator": "^4.
|
|
26
|
-
"@scaleflex/widget-utils": "^4.
|
|
21
|
+
"@scaleflex/widget-common": "^4.3.0",
|
|
22
|
+
"@scaleflex/widget-icons": "^4.3.0",
|
|
23
|
+
"@scaleflex/widget-informer": "^4.3.0",
|
|
24
|
+
"@scaleflex/widget-provider-views": "^4.3.0",
|
|
25
|
+
"@scaleflex/widget-thumbnail-generator": "^4.3.0",
|
|
26
|
+
"@scaleflex/widget-utils": "^4.3.0",
|
|
27
27
|
"@transloadit/prettier-bytes": "0.1.0",
|
|
28
28
|
"akamai-filerobot-converter": "^0.1.6",
|
|
29
29
|
"classnames": "^2.2.6",
|
|
@@ -51,5 +51,5 @@
|
|
|
51
51
|
"react-konva": ">=19.0.3"
|
|
52
52
|
},
|
|
53
53
|
"license": "MIT",
|
|
54
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "712930995f6dfd4a0d874c0638dde61065fd0683"
|
|
55
55
|
}
|