@squiz/resource-browser 1.35.1-alpha.6 → 1.38.0-alpha.2
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/lib/Hooks/useChildResources.d.ts +1 -1
- package/lib/Hooks/useChildResources.js +2 -2
- package/lib/Hooks/useResource.js +2 -2
- package/lib/PreviewPanel/PreviewPanel.d.ts +5 -13
- package/lib/PreviewPanel/PreviewPanel.js +2 -53
- package/lib/PreviewPanel/details/MatrixResource.js +2 -2
- package/lib/ResourceBreadcrumb/ResourceBreadcrumb.js +2 -5
- package/lib/ResourceList/ResourceList.js +9 -15
- package/lib/ResourcePicker/ResourcePicker.js +2 -2
- package/lib/ResourcePicker/States/Error.js +3 -4
- package/lib/ResourcePicker/States/Loading.js +2 -2
- package/lib/ResourcePicker/States/Selected.js +3 -4
- package/lib/ResourcePickerContainer/ResourcePickerContainer.js +4 -3
- package/lib/SourceDropdown/SourceDropdown.js +9 -10
- package/lib/SourceList/SourceList.js +10 -13
- package/lib/index.css +3 -51
- package/package.json +4 -3
- package/src/Hooks/useChildResources.ts +1 -1
- package/src/Hooks/useResource.ts +1 -1
- package/src/Hooks/useSources.ts +1 -1
- package/src/PreviewPanel/PreviewPanel.tsx +3 -84
- package/src/PreviewPanel/details/MatrixResource.tsx +1 -1
- package/src/ResourceBreadcrumb/ResourceBreadcrumb.tsx +1 -1
- package/src/ResourceList/ResourceList.tsx +9 -18
- package/src/ResourcePicker/ResourcePicker.tsx +1 -1
- package/src/ResourcePicker/States/Error.tsx +1 -3
- package/src/ResourcePicker/States/Loading.tsx +1 -2
- package/src/ResourcePicker/States/Selected.tsx +1 -2
- package/src/ResourcePickerContainer/ResourcePickerContainer.spec.tsx +28 -0
- package/src/ResourcePickerContainer/ResourcePickerContainer.tsx +11 -9
- package/src/SourceDropdown/SourceDropdown.spec.tsx +5 -1
- package/src/SourceDropdown/SourceDropdown.tsx +2 -3
- package/src/SourceList/SourceList.tsx +16 -20
- package/src/index.scss +1 -3
- package/tailwind.config.cjs +6 -1
- package/vite.config.js +20 -0
- package/lib/Hooks/useAsync.d.ts +0 -21
- package/lib/Hooks/useAsync.js +0 -53
- package/lib/Icons/Generics/ArrowDown.d.ts +0 -15
- package/lib/Icons/Generics/ArrowDown.js +0 -23
- package/lib/Icons/Generics/ArrowRight.d.ts +0 -15
- package/lib/Icons/Generics/ArrowRight.js +0 -23
- package/lib/Icons/Generics/Back.d.ts +0 -4
- package/lib/Icons/Generics/Back.js +0 -12
- package/lib/Icons/Generics/Close.d.ts +0 -15
- package/lib/Icons/Generics/Close.js +0 -23
- package/lib/Icons/Generics/Empty.d.ts +0 -4
- package/lib/Icons/Generics/Empty.js +0 -12
- package/lib/Icons/Generics/Error.d.ts +0 -4
- package/lib/Icons/Generics/Error.js +0 -12
- package/lib/Icons/Generics/GenericIconMap.d.ts +0 -14
- package/lib/Icons/Generics/GenericIconMap.js +0 -18
- package/lib/Icons/Generics/ResourceSelect.d.ts +0 -15
- package/lib/Icons/Generics/ResourceSelect.js +0 -28
- package/lib/Icons/Generics/Retry.d.ts +0 -4
- package/lib/Icons/Generics/Retry.js +0 -12
- package/lib/Icons/Generics/Root.d.ts +0 -15
- package/lib/Icons/Generics/Root.js +0 -23
- package/lib/Icons/Generics/Selected.d.ts +0 -15
- package/lib/Icons/Generics/Selected.js +0 -23
- package/lib/Icons/Generics/index.d.ts +0 -10
- package/lib/Icons/Generics/index.js +0 -27
- package/lib/Icons/Icon.d.ts +0 -51
- package/lib/Icons/Icon.js +0 -42
- package/lib/Icons/MatrixResources/Audio.d.ts +0 -15
- package/lib/Icons/MatrixResources/Audio.js +0 -28
- package/lib/Icons/MatrixResources/Excel.d.ts +0 -15
- package/lib/Icons/MatrixResources/Excel.js +0 -27
- package/lib/Icons/MatrixResources/Folder.d.ts +0 -15
- package/lib/Icons/MatrixResources/Folder.js +0 -24
- package/lib/Icons/MatrixResources/GenericFile.d.ts +0 -15
- package/lib/Icons/MatrixResources/GenericFile.js +0 -28
- package/lib/Icons/MatrixResources/Image.d.ts +0 -15
- package/lib/Icons/MatrixResources/Image.js +0 -26
- package/lib/Icons/MatrixResources/MatrixResourceMap.d.ts +0 -15
- package/lib/Icons/MatrixResources/MatrixResourceMap.js +0 -19
- package/lib/Icons/MatrixResources/Page.d.ts +0 -15
- package/lib/Icons/MatrixResources/Page.js +0 -30
- package/lib/Icons/MatrixResources/Pdf.d.ts +0 -15
- package/lib/Icons/MatrixResources/Pdf.js +0 -31
- package/lib/Icons/MatrixResources/Powerpoint.d.ts +0 -15
- package/lib/Icons/MatrixResources/Powerpoint.js +0 -28
- package/lib/Icons/MatrixResources/Site.d.ts +0 -15
- package/lib/Icons/MatrixResources/Site.js +0 -30
- package/lib/Icons/MatrixResources/Video.d.ts +0 -15
- package/lib/Icons/MatrixResources/Video.js +0 -24
- package/lib/Icons/MatrixResources/Word.d.ts +0 -17
- package/lib/Icons/MatrixResources/Word.js +0 -28
- package/lib/Icons/MatrixResources/index.d.ts +0 -11
- package/lib/Icons/MatrixResources/index.js +0 -29
- package/lib/Modal/Modal.d.ts +0 -11
- package/lib/Modal/Modal.js +0 -46
- package/lib/Modal/ModalOpeningButton.d.ts +0 -10
- package/lib/Modal/ModalOpeningButton.js +0 -13
- package/lib/Modal/ModalTrigger.d.ts +0 -10
- package/lib/Modal/ModalTrigger.js +0 -25
- package/lib/PreviewPanel/PreviewModal.d.ts +0 -11
- package/lib/PreviewPanel/PreviewModal.js +0 -81
- package/lib/ResourceItem/ResourceItem.d.ts +0 -16
- package/lib/ResourceItem/ResourceItem.js +0 -28
- package/lib/ResourcePicker/ResetButton.d.ts +0 -5
- package/lib/ResourcePicker/ResetButton.js +0 -11
- package/lib/ResourceState/ResourceState.d.ts +0 -7
- package/lib/ResourceState/ResourceState.js +0 -16
- package/lib/Skeleton/List/SkeletonList.d.ts +0 -5
- package/lib/Skeleton/List/SkeletonList.js +0 -13
- package/lib/Skeleton/ListItem/SkeletonListItem.d.ts +0 -1
- package/lib/Skeleton/ListItem/SkeletonListItem.js +0 -15
- package/lib/Spinner/Spinner.d.ts +0 -8
- package/lib/Spinner/Spinner.js +0 -12
- package/src/Hooks/useAsync.spec.ts +0 -106
- package/src/Hooks/useAsync.ts +0 -62
- package/src/Icons/Generics/ArrowDown.tsx +0 -27
- package/src/Icons/Generics/ArrowRight.tsx +0 -27
- package/src/Icons/Generics/Back.tsx +0 -13
- package/src/Icons/Generics/Close.tsx +0 -26
- package/src/Icons/Generics/Empty.tsx +0 -13
- package/src/Icons/Generics/Error.tsx +0 -13
- package/src/Icons/Generics/GenericIconMap.ts +0 -18
- package/src/Icons/Generics/ResourceSelect.tsx +0 -40
- package/src/Icons/Generics/Retry.tsx +0 -13
- package/src/Icons/Generics/Root.tsx +0 -24
- package/src/Icons/Generics/Selected.tsx +0 -27
- package/src/Icons/Generics/index.tsx +0 -11
- package/src/Icons/Icon.spec.tsx +0 -62
- package/src/Icons/Icon.stories.tsx +0 -110
- package/src/Icons/Icon.tsx +0 -56
- package/src/Icons/MatrixResources/Audio.tsx +0 -30
- package/src/Icons/MatrixResources/Excel.tsx +0 -29
- package/src/Icons/MatrixResources/Folder.tsx +0 -29
- package/src/Icons/MatrixResources/GenericFile.tsx +0 -34
- package/src/Icons/MatrixResources/Image.tsx +0 -36
- package/src/Icons/MatrixResources/MatrixResourceMap.ts +0 -19
- package/src/Icons/MatrixResources/Page.tsx +0 -33
- package/src/Icons/MatrixResources/Pdf.tsx +0 -34
- package/src/Icons/MatrixResources/Powerpoint.tsx +0 -34
- package/src/Icons/MatrixResources/Site.tsx +0 -37
- package/src/Icons/MatrixResources/Video.tsx +0 -27
- package/src/Icons/MatrixResources/Word.tsx +0 -30
- package/src/Icons/MatrixResources/index.tsx +0 -12
- package/src/Modal/Modal.spec.tsx +0 -269
- package/src/Modal/Modal.tsx +0 -58
- package/src/Modal/ModalContainer.stories.tsx +0 -33
- package/src/Modal/ModalOpeningButton.tsx +0 -20
- package/src/Modal/ModalTrigger.tsx +0 -57
- package/src/PreviewPanel/PreviewModal.spec.tsx +0 -164
- package/src/PreviewPanel/PreviewModal.tsx +0 -92
- package/src/ResourceItem/ResourceItem.spec.tsx +0 -65
- package/src/ResourceItem/ResourceItem.tsx +0 -84
- package/src/ResourcePicker/ResetButton.tsx +0 -20
- package/src/ResourceState/ResourceState.spec.tsx +0 -26
- package/src/ResourceState/ResourceState.stories.tsx +0 -24
- package/src/ResourceState/ResourceState.tsx +0 -31
- package/src/Skeleton/List/SkeletonList.spec.tsx +0 -18
- package/src/Skeleton/List/SkeletonList.stories.tsx +0 -15
- package/src/Skeleton/List/SkeletonList.tsx +0 -16
- package/src/Skeleton/ListItem/SkeletonListItem.stories.tsx +0 -15
- package/src/Skeleton/ListItem/SkeletonListItem.tsx +0 -14
- package/src/Skeleton/_skeleton.scss +0 -15
- package/src/Spinner/Spinner.spec.tsx +0 -18
- package/src/Spinner/Spinner.stories.tsx +0 -26
- package/src/Spinner/Spinner.tsx +0 -18
- package/src/Spinner/_spinner.scss +0 -14
- /package/src/ResourceBreadcrumb/{ResourceBreadcrumb.scss → resource-breadcrumb.scss} +0 -0
@@ -8,7 +8,7 @@ type UseChildResourcesProps = {
|
|
8
8
|
* Triggers a reload of the child resources when the source or current resource change.
|
9
9
|
*/
|
10
10
|
export declare const useChildResources: ({ source, currentResource, onRequestChildren }: UseChildResourcesProps) => {
|
11
|
-
data:
|
11
|
+
data: Resource[] | never[];
|
12
12
|
error: Error | null;
|
13
13
|
isLoading: boolean;
|
14
14
|
reload: () => void;
|
@@ -1,11 +1,11 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.useChildResources = void 0;
|
4
|
-
const
|
4
|
+
const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
|
5
5
|
/**
|
6
6
|
* Triggers a reload of the child resources when the source or current resource change.
|
7
7
|
*/
|
8
|
-
const useChildResources = ({ source, currentResource, onRequestChildren }) => (0,
|
8
|
+
const useChildResources = ({ source, currentResource, onRequestChildren }) => (0, generic_browser_lib_1.useAsync)({
|
9
9
|
callback: () => (source ? onRequestChildren(source.source, currentResource || source.resource) : []),
|
10
10
|
defaultValue: [],
|
11
11
|
}, [source, currentResource]);
|
package/lib/Hooks/useResource.js
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.useResource = void 0;
|
4
|
-
const
|
4
|
+
const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
|
5
5
|
/**
|
6
6
|
* Loads the resource indicated by the provided reference.
|
7
7
|
*/
|
8
|
-
const useResource = ({ onRequestResource, reference }) => (0,
|
8
|
+
const useResource = ({ onRequestResource, reference }) => (0, generic_browser_lib_1.useAsync)({
|
9
9
|
callback: () => (reference ? onRequestResource(reference) : null),
|
10
10
|
defaultValue: null,
|
11
11
|
}, [reference?.source, reference?.resource]);
|
@@ -1,13 +1,5 @@
|
|
1
|
-
|
2
|
-
import {
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
modalState: OverlayTriggerState;
|
7
|
-
previewModalOverlayProps: DOMAttributes<FocusableElement>;
|
8
|
-
allowedTypes: string[] | undefined;
|
9
|
-
onSelect: (resource: Resource) => void;
|
10
|
-
onClose: () => void;
|
11
|
-
}
|
12
|
-
declare const PreviewPanel: ({ resource, previewModalOverlayProps, modalState, onSelect, onClose, }: PreviewPanelProps) => JSX.Element;
|
13
|
-
export default PreviewPanel;
|
1
|
+
/// <reference types="react" />
|
2
|
+
import { PreviewPanelProps } from '@squiz/generic-browser-lib';
|
3
|
+
export type { PreviewPanelProps };
|
4
|
+
declare const _default: import("react").FC<import("@squiz/generic-browser-lib").PreviewPanelHOCProps & PreviewPanelProps>;
|
5
|
+
export default _default;
|
@@ -1,59 +1,8 @@
|
|
1
1
|
"use strict";
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
-
if (k2 === undefined) k2 = k;
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
-
}
|
8
|
-
Object.defineProperty(o, k2, desc);
|
9
|
-
}) : (function(o, m, k, k2) {
|
10
|
-
if (k2 === undefined) k2 = k;
|
11
|
-
o[k2] = m[k];
|
12
|
-
}));
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
-
}) : function(o, v) {
|
16
|
-
o["default"] = v;
|
17
|
-
});
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
-
if (mod && mod.__esModule) return mod;
|
20
|
-
var result = {};
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
-
__setModuleDefault(result, mod);
|
23
|
-
return result;
|
24
|
-
};
|
25
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
26
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
27
4
|
};
|
28
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
29
|
-
const
|
30
|
-
const react_responsive_1 = require("react-responsive");
|
31
|
-
const Icon_1 = __importDefault(require("../Icons/Icon"));
|
6
|
+
const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
|
32
7
|
const MatrixResource_1 = __importDefault(require("./details/MatrixResource"));
|
33
|
-
|
34
|
-
const PreviewPanel = function ({ resource, previewModalOverlayProps, modalState, onSelect, onClose, }) {
|
35
|
-
// Watch the media size to see if we are on mobile size
|
36
|
-
const isMobile = (0, react_responsive_1.useMediaQuery)({ query: '(max-width: 640px)' });
|
37
|
-
// If we are on mobile and the selected resource changes show the preview panel modal.
|
38
|
-
(0, react_1.useEffect)(() => {
|
39
|
-
if (!modalState.isOpen) {
|
40
|
-
modalState.setOpen(Boolean(resource && isMobile));
|
41
|
-
}
|
42
|
-
}, [resource, isMobile]);
|
43
|
-
const previewPanel = resource && (react_1.default.createElement(react_1.default.Fragment, null,
|
44
|
-
react_1.default.createElement("div", { className: "flex flex-col grow" },
|
45
|
-
react_1.default.createElement(MatrixResource_1.default, { resource: resource })),
|
46
|
-
react_1.default.createElement("div", { className: "flex justify-end border-t border-gray-300" },
|
47
|
-
react_1.default.createElement("button", { type: "button", onClick: () => onSelect(resource), className: "rounded text-sm text-white bg-blue-300 py-2 px-2.5 m-5" }, "Select"))));
|
48
|
-
return (react_1.default.createElement("div", { className: "sm:overflow-y-scroll sm:flex-1 sm:grow-[2] bg-white" },
|
49
|
-
!isMobile && react_1.default.createElement("h3", { className: "sr-only" }, "Resource Details"),
|
50
|
-
resource === null && (react_1.default.createElement("div", { className: "max-sm:hidden flex flex-col h-full" },
|
51
|
-
react_1.default.createElement("div", { className: "flex flex-col grow items-center mt-20 mx-20" },
|
52
|
-
react_1.default.createElement(Icon_1.default, { icon: 'resource-select', "aria-hidden": true }),
|
53
|
-
react_1.default.createElement("div", { className: "text-sm text-gray-600 text-center mt-4" }, "Make a selection to see more info here.")),
|
54
|
-
react_1.default.createElement("div", { className: "flex justify-end border-t border-gray-300" },
|
55
|
-
react_1.default.createElement("button", { disabled: true, type: "button", className: "rounded text-sm text-white bg-blue-300/[.6] py-2 px-2.5 m-5" }, "Select")))),
|
56
|
-
resource && isMobile && modalState.isOpen && (react_1.default.createElement(PreviewModal_1.default, { state: modalState, overlayProps: previewModalOverlayProps, onClose: onClose }, previewPanel)),
|
57
|
-
resource && !isMobile && react_1.default.createElement("div", { className: "flex flex-col h-full" }, previewPanel)));
|
58
|
-
};
|
59
|
-
exports.default = PreviewPanel;
|
8
|
+
exports.default = (0, generic_browser_lib_1.PreviewPanelHOC)(MatrixResource_1.default);
|
@@ -4,12 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
const react_1 = __importDefault(require("react"));
|
7
|
-
const
|
7
|
+
const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
|
8
8
|
const StatusIndicator_1 = __importDefault(require("../../StatusIndicator/StatusIndicator"));
|
9
9
|
const MatrixResource = ({ resource: { id, type, name, status } }) => {
|
10
10
|
return (react_1.default.createElement("div", null,
|
11
11
|
react_1.default.createElement("div", { className: "flex flex-col items-center text-gray-800 mt-7 mx-5 pb-4 border-b border-gray-300" },
|
12
|
-
react_1.default.createElement(
|
12
|
+
react_1.default.createElement(generic_browser_lib_1.Icon, { icon: type.code, resourceSource: "matrix", className: "w-14 h-14" }),
|
13
13
|
react_1.default.createElement("div", { className: "mt-4 font-semibold text-base" }, name)),
|
14
14
|
react_1.default.createElement("div", { className: "text-gray-800 mx-6 mt-4" },
|
15
15
|
react_1.default.createElement("dl", { className: "flex flex-col text-sm" },
|
@@ -22,12 +22,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
22
|
__setModuleDefault(result, mod);
|
23
23
|
return result;
|
24
24
|
};
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
27
|
-
};
|
28
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
29
26
|
const react_1 = __importStar(require("react"));
|
30
|
-
const
|
27
|
+
const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
|
31
28
|
const ResourceBreadcrumb = function ({ hierarchy, onBreadcrumbSelect, onReturnToRoot }) {
|
32
29
|
// Track expanded state
|
33
30
|
const [expandedHierarchy, setExpandedHierarchy] = (0, react_1.useState)(false);
|
@@ -43,7 +40,7 @@ const ResourceBreadcrumb = function ({ hierarchy, onBreadcrumbSelect, onReturnTo
|
|
43
40
|
react_1.default.createElement("ol", { className: "flex flex-wrap items-center" },
|
44
41
|
react_1.default.createElement("li", { className: "flex items-center mr-3" },
|
45
42
|
react_1.default.createElement("button", { type: "button", onClick: onReturnToRoot },
|
46
|
-
react_1.default.createElement(
|
43
|
+
react_1.default.createElement(generic_browser_lib_1.Icon, { icon: 'root', "aria-label": "Return to source list", className: "" }))),
|
47
44
|
hierarchy.map(({ key, label, node }, index) => {
|
48
45
|
return (react_1.default.createElement("li", { key: `${key}`, className: "resource-breadcrumb__item max-md:hidden flex items-center mr-2 before:content-['/'] before:mr-2" },
|
49
46
|
index !== hierarchy.length - 1 && (react_1.default.createElement("button", { type: "button", onClick: () => onBreadcrumbSelect(node) },
|
@@ -22,14 +22,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
22
|
__setModuleDefault(result, mod);
|
23
23
|
return result;
|
24
24
|
};
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
27
|
-
};
|
28
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
29
26
|
const react_1 = __importStar(require("react"));
|
30
|
-
const
|
31
|
-
const SkeletonListItem_1 = require("../Skeleton/ListItem/SkeletonListItem");
|
32
|
-
const ResourceState_1 = __importDefault(require("../ResourceState/ResourceState"));
|
27
|
+
const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
|
33
28
|
const ResourceList = function ({ resources, selectedResource, previewModalState, isLoading, onResourceSelect, onResourceDrillDown, allowedTypes, handleReturnToRoot, handleReload, error, }) {
|
34
29
|
const listRef = (0, react_1.useRef)(null);
|
35
30
|
// When resources change, because we are on a new page, reset focus to the list
|
@@ -40,16 +35,15 @@ const ResourceList = function ({ resources, selectedResource, previewModalState,
|
|
40
35
|
});
|
41
36
|
}
|
42
37
|
}, [resources]);
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
!
|
49
|
-
!
|
50
|
-
!error &&
|
38
|
+
if (isLoading) {
|
39
|
+
return react_1.default.createElement(generic_browser_lib_1.SkeletonList, { itemCount: 8, ariaLabel: "loading Resource list", className: "text-sm font-semibold" });
|
40
|
+
}
|
41
|
+
return (react_1.default.createElement("ul", { ref: listRef, tabIndex: -1, "aria-label": `Resource list`, className: "flex flex-col text-sm font-semibold px-7 my-4 focus-visible:outline-0" },
|
42
|
+
error && react_1.default.createElement(generic_browser_lib_1.ResourceState, { state: "error", message: error.message, handleReload: handleReload }),
|
43
|
+
!error && resources.length === 0 && react_1.default.createElement(generic_browser_lib_1.ResourceState, { state: "empty", handleReload: handleReturnToRoot }),
|
44
|
+
!error &&
|
51
45
|
resources.map((resource) => {
|
52
|
-
return (react_1.default.createElement(
|
46
|
+
return (react_1.default.createElement(generic_browser_lib_1.ResourceItem, { key: resource.id, item: resource, selected: resource.id == selectedResource?.id, label: resource.name, type: resource.type.code, childCount: resource.childCount, previewModalState: previewModalState, onSelect: onResourceSelect, onDrillDown: onResourceDrillDown, className: "border-b-0 first:mt-0 first:rounded-t-lg last:rounded-b-lg last:border-b", allowedTypes: allowedTypes }));
|
53
47
|
})));
|
54
48
|
};
|
55
49
|
exports.default = ResourceList;
|
@@ -7,7 +7,7 @@ const react_1 = __importDefault(require("react"));
|
|
7
7
|
const AdsClickRounded_1 = __importDefault(require("@mui/icons-material/AdsClickRounded"));
|
8
8
|
const AddCircleOutlineRounded_1 = __importDefault(require("@mui/icons-material/AddCircleOutlineRounded"));
|
9
9
|
const PhotoLibraryRounded_1 = __importDefault(require("@mui/icons-material/PhotoLibraryRounded"));
|
10
|
-
const
|
10
|
+
const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
|
11
11
|
const Error_1 = require("./States/Error");
|
12
12
|
const Loading_1 = require("./States/Loading");
|
13
13
|
const Selected_1 = require("./States/Selected");
|
@@ -17,7 +17,7 @@ const ResourcePicker = ({ resource, allowedTypes, error, isLoading, isDisabled,
|
|
17
17
|
const isEmpty = resource === null && !isLoading && !error;
|
18
18
|
return (react_1.default.createElement("div", { className: (0, clsx_1.default)('resource-picker', isDisabled && 'bg-gray-300') },
|
19
19
|
isImagePicker ? (react_1.default.createElement(PhotoLibraryRounded_1.default, { "aria-hidden": true, className: "w-6 h-6" })) : (react_1.default.createElement(AdsClickRounded_1.default, { "aria-hidden": true, className: "w-6 h-6" })),
|
20
|
-
isEmpty ? (react_1.default.createElement(
|
20
|
+
isEmpty ? (react_1.default.createElement(generic_browser_lib_1.ModalTrigger, { showLabel: true, label: isImagePicker ? `Choose image` : `Choose asset`, icon: react_1.default.createElement(AddCircleOutlineRounded_1.default, { "aria-hidden": true, className: `!w-4 !h-4 text-blue-300 ${isDisabled ? 'text-gray-600' : ''}` }), isDisabled: isDisabled }, children)) : (react_1.default.createElement("div", { className: "resource-picker-info" },
|
21
21
|
react_1.default.createElement("div", { className: "resource-picker-info__layout" },
|
22
22
|
isLoading && react_1.default.createElement(Loading_1.LoadingState, null),
|
23
23
|
error && react_1.default.createElement(Error_1.ErrorState, { error: error, isDisabled: isDisabled, onClear: onClear }),
|
@@ -5,10 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
exports.ErrorState = void 0;
|
7
7
|
const react_1 = __importDefault(require("react"));
|
8
|
-
const
|
9
|
-
const ResetButton_1 = require("../ResetButton");
|
8
|
+
const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
|
10
9
|
const ErrorState = ({ error, isDisabled, onClear }) => (react_1.default.createElement(react_1.default.Fragment, null,
|
11
|
-
react_1.default.createElement(
|
10
|
+
react_1.default.createElement(generic_browser_lib_1.Icon, { icon: 'error', "aria-hidden": true, className: "w-6 h-6 text-red-300" }),
|
12
11
|
react_1.default.createElement("div", { className: "text-red-300 w-full" }, error.message),
|
13
|
-
react_1.default.createElement(
|
12
|
+
react_1.default.createElement(generic_browser_lib_1.ResetButton, { isDisabled: isDisabled, onClick: onClear })));
|
14
13
|
exports.ErrorState = ErrorState;
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
exports.LoadingState = void 0;
|
7
7
|
const react_1 = __importDefault(require("react"));
|
8
|
-
const
|
8
|
+
const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
|
9
9
|
const LoadingState = () => (react_1.default.createElement("div", { className: "col-start-2 col-end-2" },
|
10
|
-
react_1.default.createElement(
|
10
|
+
react_1.default.createElement(generic_browser_lib_1.Spinner, { label: "Loading selection", className: "m-2" })));
|
11
11
|
exports.LoadingState = LoadingState;
|
@@ -6,18 +6,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.SelectedState = void 0;
|
7
7
|
const react_1 = __importDefault(require("react"));
|
8
8
|
const pretty_bytes_1 = __importDefault(require("pretty-bytes"));
|
9
|
-
const
|
9
|
+
const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
|
10
10
|
const StatusIndicator_1 = __importDefault(require("../../StatusIndicator/StatusIndicator"));
|
11
|
-
const ResetButton_1 = require("../ResetButton");
|
12
11
|
const SelectedState = ({ resource: { id, type, name, status, squizImage }, isDisabled, onClear, }) => {
|
13
12
|
const fileSize = squizImage?.imageVariations?.original?.byteSize;
|
14
13
|
const fileWidth = squizImage?.imageVariations?.original?.width;
|
15
14
|
const fileHeight = squizImage?.imageVariations?.original?.height;
|
16
15
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
17
16
|
react_1.default.createElement(react_1.default.Fragment, null,
|
18
|
-
react_1.default.createElement(
|
17
|
+
react_1.default.createElement(generic_browser_lib_1.Icon, { icon: type.code, resourceSource: "matrix", className: "w-4 h-4 flex self-center" }),
|
19
18
|
react_1.default.createElement("div", { className: "justify-self-start self-center" }, name),
|
20
|
-
react_1.default.createElement(
|
19
|
+
react_1.default.createElement(generic_browser_lib_1.ResetButton, { isDisabled: isDisabled, onClick: onClear })),
|
21
20
|
react_1.default.createElement("dl", { className: "col-start-2 col-end-2 flex flex-row gap-1 justify-self-start items-center font-normal text-sm" },
|
22
21
|
react_1.default.createElement("div", null,
|
23
22
|
react_1.default.createElement("dt", { className: "hidden" },
|
@@ -28,20 +28,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
29
29
|
const react_1 = __importStar(require("react"));
|
30
30
|
const react_stately_1 = require("react-stately");
|
31
|
+
const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
|
31
32
|
const SourceList_1 = __importDefault(require("../SourceList/SourceList"));
|
32
33
|
const ResourceList_1 = __importDefault(require("../ResourceList/ResourceList"));
|
33
34
|
const ResourceBreadcrumb_1 = __importDefault(require("../ResourceBreadcrumb/ResourceBreadcrumb"));
|
34
35
|
const PreviewPanel_1 = __importDefault(require("../PreviewPanel/PreviewPanel"));
|
35
36
|
const SourceDropdown_1 = __importDefault(require("../SourceDropdown/SourceDropdown"));
|
36
37
|
const useResourcePath_1 = require("../Hooks/useResourcePath");
|
37
|
-
const useAsync_1 = require("../Hooks/useAsync");
|
38
38
|
const useChildResources_1 = require("../Hooks/useChildResources");
|
39
39
|
function ResourcePickerContainer({ title, titleAriaProps, allowedTypes, onRequestSources, onRequestChildren, onChange, onClose, }) {
|
40
40
|
const previewModalState = (0, react_stately_1.useOverlayTriggerState)({});
|
41
41
|
const [selectedResource, setSelectedResource] = (0, react_1.useState)(null);
|
42
42
|
const [previewModalOverlayProps, setPreviewModalOverlayProps] = (0, react_1.useState)({});
|
43
43
|
const { source, currentResource, hierarchy, setSource, push, popUntil } = (0, useResourcePath_1.useResourcePath)();
|
44
|
-
const { data: sources, isLoading: isSourceLoading, reload: handleSourceReload, error: sourceError, } = (0,
|
44
|
+
const { data: sources, isLoading: isSourceLoading, reload: handleSourceReload, error: sourceError, } = (0, generic_browser_lib_1.useAsync)({ callback: onRequestSources, defaultValue: [] }, []);
|
45
45
|
const { data: resources, isLoading: isResourcesLoading, reload: handleResourceReload, error: resourceError, } = (0, useChildResources_1.useChildResources)({ source, currentResource, onRequestChildren });
|
46
46
|
const handleResourceDrillDown = (0, react_1.useCallback)((resource) => {
|
47
47
|
push(resource);
|
@@ -81,6 +81,7 @@ function ResourcePickerContainer({ title, titleAriaProps, allowedTypes, onReques
|
|
81
81
|
hierarchy.length > 0 && (react_1.default.createElement(ResourceBreadcrumb_1.default, { hierarchy: hierarchy, onBreadcrumbSelect: popUntil, onReturnToRoot: handleReturnToRoot })),
|
82
82
|
!source && (react_1.default.createElement(SourceList_1.default, { sources: sources, previewModalState: previewModalState, isLoading: isSourceLoading, onSourceSelect: handleSourceDrilldown, handleReload: handleSourceReload, error: sourceError })),
|
83
83
|
source && (react_1.default.createElement(ResourceList_1.default, { previewModalState: previewModalState, resources: resources, selectedResource: selectedResource, isLoading: isResourcesLoading, onResourceSelect: handleResourceSelected, onResourceDrillDown: handleResourceDrillDown, allowedTypes: allowedTypes, handleReturnToRoot: handleReturnToRoot, handleReload: handleResourceReload, error: resourceError }))),
|
84
|
-
react_1.default.createElement(
|
84
|
+
react_1.default.createElement("div", { className: "sm:overflow-y-scroll sm:flex-1 sm:grow-[2] bg-white" },
|
85
|
+
react_1.default.createElement(PreviewPanel_1.default, { resource: selectedResource, modalState: previewModalState, previewModalOverlayProps: previewModalOverlayProps, allowedTypes: allowedTypes, onSelect: handleDetailSelect, onClose: handleDetailClose })))));
|
85
86
|
}
|
86
87
|
exports.default = ResourcePickerContainer;
|
@@ -28,8 +28,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
29
29
|
const react_1 = __importStar(require("react"));
|
30
30
|
const interactions_1 = require("@react-aria/interactions");
|
31
|
-
const
|
32
|
-
const Icon_1 = __importDefault(require("../Icons/Icon"));
|
31
|
+
const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
|
33
32
|
const uuid_1 = __importDefault(require("../uuid"));
|
34
33
|
const useCategorisedSources_1 = require("../Hooks/useCategorisedSources");
|
35
34
|
function SourceDropdown({ sources, selectedSource, isLoading, onRootSelect, onSourceSelect, }) {
|
@@ -66,20 +65,20 @@ function SourceDropdown({ sources, selectedSource, isLoading, onRootSelect, onSo
|
|
66
65
|
react_1.default.createElement("button", { ref: buttonRef, type: "button", "aria-label": "Source quick select", "aria-expanded": isOpen, "aria-controls": `${uniqueId}-button-menu`, onClick: () => setIsOpen(!isOpen), className: "relative flex items-center text-sm font-semibold p-1.5 w-full" },
|
67
66
|
selectedSource && (react_1.default.createElement(react_1.default.Fragment, null,
|
68
67
|
react_1.default.createElement("span", { className: "sr-only" }, "current source "),
|
69
|
-
react_1.default.createElement(
|
68
|
+
react_1.default.createElement(generic_browser_lib_1.Icon, { icon: selectedSource.resource?.type.code, resourceSource: "matrix", "aria-hidden": true, className: "mr-2.5 h-[20px] w-[20px]" }),
|
70
69
|
react_1.default.createElement("div", { className: "truncate max-w-[200px]" }, selectedSource.resource?.name || selectedSource.source.name))),
|
71
70
|
!selectedSource && (react_1.default.createElement(react_1.default.Fragment, null,
|
72
71
|
react_1.default.createElement("span", { className: "sr-only" }, "view "),
|
73
|
-
react_1.default.createElement(
|
72
|
+
react_1.default.createElement(generic_browser_lib_1.Icon, { icon: 'root', "aria-hidden": true, className: "mr-2.5 h-[20px] w-[20px]" }),
|
74
73
|
"All available sources")),
|
75
|
-
react_1.default.createElement(
|
76
|
-
react_1.default.createElement("ul", { id: `${uniqueId}-button-menu`, "aria-hidden": !isOpen, className: `absolute z-50 top-[calc(100%+5px)] -left-0.5 w-[calc(100%+4px)] bg-gray-100 border-2 rounded border-gray-300 p-2 ${!isOpen ? 'hidden' : ''}` },
|
74
|
+
react_1.default.createElement(generic_browser_lib_1.Icon, { icon: 'arrow-down', "aria-hidden": true, className: "absolute right-3" })),
|
75
|
+
react_1.default.createElement("ul", { id: `${uniqueId}-button-menu`, "aria-hidden": !isOpen, className: `absolute z-50 top-[calc(100%+5px)] -left-0.5 w-[calc(100%+4px)] bg-gray-100 border-2 rounded border-gray-300 p-2 overflow-y-scroll max-h-80 ${!isOpen ? 'hidden' : ''}` },
|
77
76
|
react_1.default.createElement("li", { key: "return-root", className: "flex items-center text-sm font-semibold mb-2 bg-white border-1 rounded border-grey-200" },
|
78
77
|
react_1.default.createElement("button", { type: "button", onClick: handleRootSelect, className: `relative grow flex items-center p-2.5 hover:bg-gray-100 focus:bg-gray-100` },
|
79
|
-
react_1.default.createElement(
|
78
|
+
react_1.default.createElement(generic_browser_lib_1.Icon, { icon: 'root', "aria-hidden": true, className: "mr-2.5" }),
|
80
79
|
"All available sources")),
|
81
80
|
isLoading && (react_1.default.createElement("li", { className: "mt-2" },
|
82
|
-
react_1.default.createElement(
|
81
|
+
react_1.default.createElement(generic_browser_lib_1.Spinner, { size: "sm", label: "Loading sources", className: "m-3" }))),
|
83
82
|
!isLoading &&
|
84
83
|
categorisedSources.map(({ key, label, sources }, index) => {
|
85
84
|
return (react_1.default.createElement("li", { key: key, className: `flex flex-col text-sm font-semibold text-grey-800 ${index > 0 ? 'mt-3' : ''}` },
|
@@ -89,9 +88,9 @@ function SourceDropdown({ sources, selectedSource, isLoading, onRootSelect, onSo
|
|
89
88
|
const isSelectedSource = source.id === selectedSource?.source.id && resource?.id === selectedSource?.resource?.id;
|
90
89
|
return (react_1.default.createElement("li", { key: `${source.id}-${resource?.id}`, className: "flex items-center bg-white border border-b-0 last:border-b border-grey-200 first:rounded-t last:rounded-b" },
|
91
90
|
react_1.default.createElement("button", { type: "button", onClick: () => handleSourceClick({ source, resource }), className: `relative grow flex items-center p-2.5 hover:bg-gray-100 focus:bg-gray-100` },
|
92
|
-
react_1.default.createElement(
|
91
|
+
react_1.default.createElement(generic_browser_lib_1.Icon, { icon: resource?.type.code, resourceSource: "matrix", "aria-label": resource?.type.name, className: "shrink-0 mr-2.5" }),
|
93
92
|
react_1.default.createElement("span", { className: "text-left mr-7" }, resource?.name || source.name),
|
94
|
-
isSelectedSource && (react_1.default.createElement(
|
93
|
+
isSelectedSource && (react_1.default.createElement(generic_browser_lib_1.Icon, { icon: 'selected', "aria-label": "selected", className: "absolute right-4" })))));
|
95
94
|
})))));
|
96
95
|
}))));
|
97
96
|
}
|
@@ -27,11 +27,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
27
27
|
};
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
29
29
|
const react_1 = __importStar(require("react"));
|
30
|
-
const
|
31
|
-
const SkeletonList_1 = require("../Skeleton/List/SkeletonList");
|
30
|
+
const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
|
32
31
|
const clsx_1 = __importDefault(require("clsx"));
|
33
32
|
const useCategorisedSources_1 = require("../Hooks/useCategorisedSources");
|
34
|
-
const ResourceState_1 = __importDefault(require("../ResourceState/ResourceState"));
|
35
33
|
const SourceList = function ({ sources, previewModalState, isLoading, onSourceSelect, handleReload, error, }) {
|
36
34
|
const categorisedSources = (0, useCategorisedSources_1.useCategorisedSources)(sources);
|
37
35
|
const listRef = (0, react_1.useRef)(null);
|
@@ -42,21 +40,20 @@ const SourceList = function ({ sources, previewModalState, isLoading, onSourceSe
|
|
42
40
|
});
|
43
41
|
}
|
44
42
|
}, []);
|
45
|
-
|
46
|
-
|
47
|
-
react_1.default.createElement(
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
!
|
53
|
-
!error &&
|
43
|
+
if (isLoading) {
|
44
|
+
return (react_1.default.createElement("div", { className: "flex flex-col bg-gray-100 min-h-full", "aria-label": "loading Source list" },
|
45
|
+
react_1.default.createElement(generic_browser_lib_1.SkeletonList, { itemCount: 3 }),
|
46
|
+
react_1.default.createElement(generic_browser_lib_1.SkeletonList, { itemCount: 3 })));
|
47
|
+
}
|
48
|
+
return (react_1.default.createElement("ul", { ref: listRef, tabIndex: -1, "aria-label": `Source list`, className: (0, clsx_1.default)('flex flex-col bg-gray-100 min-h-full focus-visible:outline-0 px-7 py-4') },
|
49
|
+
error && react_1.default.createElement(generic_browser_lib_1.ResourceState, { state: "error", message: error.message, handleReload: handleReload }),
|
50
|
+
!error &&
|
54
51
|
categorisedSources.map(({ key, label, sources }, index) => {
|
55
52
|
return (react_1.default.createElement("li", { key: key, className: `flex flex-col text-sm font-semibold text-grey-800 ${index > 0 ? 'mt-3' : ''}` },
|
56
53
|
react_1.default.createElement("div", { className: "relative flex justify-center before:w-full before:h-px before:bg-gray-300 before:absolute before:top-2/4 before:z-0" },
|
57
54
|
react_1.default.createElement("span", { className: "z-10 bg-gray-100 px-2.5" }, label)),
|
58
55
|
sources.length > 0 && (react_1.default.createElement("ul", { "aria-label": `${label} nodes`, className: "flex flex-col" }, sources.map(({ source, resource }) => {
|
59
|
-
return (react_1.default.createElement(
|
56
|
+
return (react_1.default.createElement(generic_browser_lib_1.ResourceItem, { key: `${source.id}-${resource?.id}`, item: { source, resource }, label: resource?.name || source.name, type: resource?.type.code || 'folder', previewModalState: previewModalState, onSelect: onSourceSelect, className: "mt-3 rounded-lg", showChevron: true }));
|
60
57
|
})))));
|
61
58
|
})));
|
62
59
|
};
|
package/lib/index.css
CHANGED
@@ -577,6 +577,9 @@
|
|
577
577
|
.squiz-rb-scope .h-screen {
|
578
578
|
height: 100vh;
|
579
579
|
}
|
580
|
+
.squiz-rb-scope .max-h-80 {
|
581
|
+
max-height: 20rem;
|
582
|
+
}
|
580
583
|
.squiz-rb-scope .min-h-\[64px\] {
|
581
584
|
min-height: 64px;
|
582
585
|
}
|
@@ -920,57 +923,6 @@
|
|
920
923
|
--tw-blur: blur(8px);
|
921
924
|
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
|
922
925
|
}
|
923
|
-
.squiz-rb-scope .spinner {
|
924
|
-
display: inline-block;
|
925
|
-
border-radius: 9999px;
|
926
|
-
border-width: 2px;
|
927
|
-
border-style: solid;
|
928
|
-
border-color: currentColor;
|
929
|
-
border-right-color: transparent;
|
930
|
-
}
|
931
|
-
@keyframes spin {
|
932
|
-
to {
|
933
|
-
transform: rotate(360deg);
|
934
|
-
}
|
935
|
-
}
|
936
|
-
.squiz-rb-scope .spinner {
|
937
|
-
animation: spin 1s linear infinite;
|
938
|
-
vertical-align: -0.125em;
|
939
|
-
}
|
940
|
-
@media (prefers-reduced-motion: reduce) {
|
941
|
-
@keyframes spin {
|
942
|
-
}
|
943
|
-
.squiz-rb-scope .spinner {
|
944
|
-
animation: spin 1.5s linear infinite;
|
945
|
-
}
|
946
|
-
}
|
947
|
-
.squiz-rb-scope .spinner {
|
948
|
-
height: 20px;
|
949
|
-
width: 20px;
|
950
|
-
}
|
951
|
-
.squiz-rb-scope .spinner__wrapper {
|
952
|
-
display: flex;
|
953
|
-
align-items: center;
|
954
|
-
justify-content: center;
|
955
|
-
}
|
956
|
-
.squiz-rb-scope .spinner--md {
|
957
|
-
height: 32px;
|
958
|
-
width: 32px;
|
959
|
-
}
|
960
|
-
.squiz-rb-scope .animate-skeleton-pulse {
|
961
|
-
animation: pulse 2s linear infinite;
|
962
|
-
}
|
963
|
-
@keyframes pulse {
|
964
|
-
0% {
|
965
|
-
opacity: 1;
|
966
|
-
}
|
967
|
-
50% {
|
968
|
-
opacity: 0.45;
|
969
|
-
}
|
970
|
-
100% {
|
971
|
-
opacity: 1;
|
972
|
-
}
|
973
|
-
}
|
974
926
|
.squiz-rb-scope .resource-breadcrumb--collapsed .resource-breadcrumb__label {
|
975
927
|
max-width: 250px;
|
976
928
|
cursor: pointer;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@squiz/resource-browser",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.38.0-alpha.2",
|
4
4
|
"main": "lib/index.js",
|
5
5
|
"types": "lib/index.d.ts",
|
6
6
|
"scripts": {
|
@@ -15,7 +15,8 @@
|
|
15
15
|
},
|
16
16
|
"dependencies": {
|
17
17
|
"@mui/icons-material": "5.11.16",
|
18
|
-
"@squiz/dx-json-schema-lib": "1.
|
18
|
+
"@squiz/dx-json-schema-lib": "1.38.0-alpha.2",
|
19
|
+
"@squiz/generic-browser-lib": "1.38.0-alpha.2",
|
19
20
|
"pretty-bytes": "5.6.0",
|
20
21
|
"react-aria": "3.23.1",
|
21
22
|
"react-responsive": "9.0.2",
|
@@ -73,5 +74,5 @@
|
|
73
74
|
"volta": {
|
74
75
|
"node": "18.15.0"
|
75
76
|
},
|
76
|
-
"gitHead": "
|
77
|
+
"gitHead": "9c2f775a7d6607a73e5b25577d82be939d74ffec"
|
77
78
|
}
|
package/src/Hooks/useResource.ts
CHANGED
package/src/Hooks/useSources.ts
CHANGED
@@ -1,87 +1,6 @@
|
|
1
|
-
import
|
2
|
-
import { useMediaQuery } from 'react-responsive';
|
3
|
-
import { OverlayTriggerState } from 'react-stately';
|
4
|
-
import { DOMAttributes, FocusableElement } from '@react-types/shared';
|
5
|
-
|
6
|
-
import Icon, { IconOptions } from '../Icons/Icon';
|
1
|
+
import { PreviewPanelHOC, PreviewPanelProps } from '@squiz/generic-browser-lib';
|
7
2
|
import MatrixResource from './details/MatrixResource';
|
8
|
-
import { Resource } from '../types';
|
9
|
-
import PreviewModal from './PreviewModal';
|
10
|
-
|
11
|
-
export interface PreviewPanelProps {
|
12
|
-
resource: Resource | null;
|
13
|
-
modalState: OverlayTriggerState;
|
14
|
-
previewModalOverlayProps: DOMAttributes<FocusableElement>;
|
15
|
-
allowedTypes: string[] | undefined;
|
16
|
-
onSelect: (resource: Resource) => void;
|
17
|
-
onClose: () => void;
|
18
|
-
}
|
19
|
-
|
20
|
-
const PreviewPanel = function ({
|
21
|
-
resource,
|
22
|
-
previewModalOverlayProps,
|
23
|
-
modalState,
|
24
|
-
onSelect,
|
25
|
-
onClose,
|
26
|
-
}: PreviewPanelProps) {
|
27
|
-
// Watch the media size to see if we are on mobile size
|
28
|
-
const isMobile = useMediaQuery({ query: '(max-width: 640px)' });
|
29
|
-
|
30
|
-
// If we are on mobile and the selected resource changes show the preview panel modal.
|
31
|
-
useEffect(() => {
|
32
|
-
if (!modalState.isOpen) {
|
33
|
-
modalState.setOpen(Boolean(resource && isMobile));
|
34
|
-
}
|
35
|
-
}, [resource, isMobile]);
|
36
|
-
|
37
|
-
const previewPanel = resource && (
|
38
|
-
<>
|
39
|
-
<div className="flex flex-col grow">
|
40
|
-
<MatrixResource resource={resource} />
|
41
|
-
</div>
|
42
|
-
<div className="flex justify-end border-t border-gray-300">
|
43
|
-
<button
|
44
|
-
type="button"
|
45
|
-
onClick={() => onSelect(resource)}
|
46
|
-
className="rounded text-sm text-white bg-blue-300 py-2 px-2.5 m-5"
|
47
|
-
>
|
48
|
-
Select
|
49
|
-
</button>
|
50
|
-
</div>
|
51
|
-
</>
|
52
|
-
);
|
53
|
-
|
54
|
-
return (
|
55
|
-
<div className="sm:overflow-y-scroll sm:flex-1 sm:grow-[2] bg-white">
|
56
|
-
{/* Dialog has its own title */}
|
57
|
-
{!isMobile && <h3 className="sr-only">Resource Details</h3>}
|
58
|
-
|
59
|
-
{/* Nothing selected, show an info message */}
|
60
|
-
{resource === null && (
|
61
|
-
<div className="max-sm:hidden flex flex-col h-full">
|
62
|
-
<div className="flex flex-col grow items-center mt-20 mx-20">
|
63
|
-
<Icon icon={'resource-select' as IconOptions} aria-hidden />
|
64
|
-
<div className="text-sm text-gray-600 text-center mt-4">Make a selection to see more info here.</div>
|
65
|
-
</div>
|
66
|
-
<div className="flex justify-end border-t border-gray-300">
|
67
|
-
<button disabled type="button" className="rounded text-sm text-white bg-blue-300/[.6] py-2 px-2.5 m-5">
|
68
|
-
Select
|
69
|
-
</button>
|
70
|
-
</div>
|
71
|
-
</div>
|
72
|
-
)}
|
73
|
-
|
74
|
-
{/* Resource details shows in a new modal / bottom popover on mobile size */}
|
75
|
-
{resource && isMobile && modalState.isOpen && (
|
76
|
-
<PreviewModal state={modalState} overlayProps={previewModalOverlayProps} onClose={onClose}>
|
77
|
-
{previewPanel}
|
78
|
-
</PreviewModal>
|
79
|
-
)}
|
80
3
|
|
81
|
-
|
82
|
-
{resource && !isMobile && <div className="flex flex-col h-full">{previewPanel}</div>}
|
83
|
-
</div>
|
84
|
-
);
|
85
|
-
};
|
4
|
+
export type { PreviewPanelProps };
|
86
5
|
|
87
|
-
export default
|
6
|
+
export default PreviewPanelHOC(MatrixResource);
|