@squiz/resource-browser 3.0.1-rc.6 → 3.1.0-rc.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 +10 -0
- package/lib/MainContainer/MainContainer.js +5 -3
- package/lib/Plugin/Plugin.d.ts +1 -0
- package/lib/ResourceBrowserInlineButton/InlineLoadingErrorState/InlineLoadingErrorState.d.ts +11 -0
- package/lib/ResourceBrowserInlineButton/InlineLoadingErrorState/InlineLoadingErrorState.js +22 -0
- package/lib/ResourceBrowserInlineButton/ResourceBrowserInlineButton.d.ts +2 -1
- package/lib/ResourceBrowserInlineButton/ResourceBrowserInlineButton.js +7 -3
- package/lib/index.css +5818 -743
- package/lib/index.js +7 -3
- package/package.json +4 -3
- package/src/MainContainer/MainContainer.tsx +19 -13
- package/src/Plugin/Plugin.spec.tsx +2 -0
- package/src/Plugin/Plugin.tsx +1 -0
- package/src/ResourceBrowserInlineButton/InlineLoadingErrorState/InlineLoadingErrorState.spec.tsx +47 -0
- package/src/ResourceBrowserInlineButton/InlineLoadingErrorState/InlineLoadingErrorState.tsx +54 -0
- package/src/ResourceBrowserInlineButton/ResourceBrowserInlineButton.spec.tsx +46 -1
- package/src/ResourceBrowserInlineButton/ResourceBrowserInlineButton.tsx +33 -15
- package/src/__mocks__/StorybookHelpers.tsx +12 -4
- package/src/index.scss +2 -0
- package/src/index.stories.tsx +22 -2
- package/src/index.tsx +9 -2
package/CHANGELOG.md
CHANGED
@@ -3,6 +3,16 @@
|
|
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
|
+
# [3.1.0-rc.0](https://gitlab.squiz.net/dxp/dxp-shared-ui/resource-browser/compare/@squiz/resource-browser@3.0.1-rc.7...@squiz/resource-browser@3.1.0-rc.0) (2024-12-16)
|
7
|
+
|
8
|
+
### Features
|
9
|
+
|
10
|
+
- **prodam-489:** close modal hover and mobile input with fix ([135c695](https://gitlab.squiz.net/dxp/dxp-shared-ui/resource-browser/commit/135c695bdcc1c5d6cbbd26d850e402d3cc208a8a))
|
11
|
+
|
12
|
+
## [3.0.1-rc.7](https://gitlab.squiz.net/dxp/dxp-shared-ui/resource-browser/compare/@squiz/resource-browser@3.0.1-rc.6...@squiz/resource-browser@3.0.1-rc.7) (2024-12-13)
|
13
|
+
|
14
|
+
**Note:** Version bump only for package @squiz/resource-browser
|
15
|
+
|
6
16
|
## [3.0.1-rc.6](https://gitlab.squiz.net/dxp/dxp-shared-ui/resource-browser/compare/@squiz/resource-browser@3.0.1-rc.5...@squiz/resource-browser@3.0.1-rc.6) (2024-12-12)
|
7
17
|
|
8
18
|
**Note:** Version bump only for package @squiz/resource-browser
|
@@ -52,9 +52,11 @@ function MainContainer({ title, titleAriaProps, allowedTypes, sources, selectedS
|
|
52
52
|
!plugin.createHeaderPortal && sources.length > 1 && (react_1.default.createElement(SourceDropdownContainer_1.default, { isCollapsed: false, onExpand: () => { } },
|
53
53
|
react_1.default.createElement("div", { className: `border-l border-blue-200 pl-1 w-[204px]` },
|
54
54
|
react_1.default.createElement(SourceDropdown_1.default, { sources: sources, selectedSource: selectedSource, onSourceSelect: onSourceSelect })))))),
|
55
|
-
react_1.default.createElement("
|
56
|
-
react_1.default.createElement("
|
57
|
-
react_1.default.createElement("
|
55
|
+
react_1.default.createElement("div", { className: "flex gap-3 p-3 absolute right-0 top-0" },
|
56
|
+
react_1.default.createElement("button", { type: "button", "aria-label": `Close ${title} dialog`, onClick: onClose, className: "border-0 bg-transparent cursor-pointer p-0 relative" },
|
57
|
+
react_1.default.createElement("svg", { height: "24px", viewBox: "0 0 24 24", width: "24px", xmlns: "http://www.w3.org/2000/svg", className: "text-gray-600 hover:text-gray-800 fill-current" },
|
58
|
+
react_1.default.createElement("path", { d: "M0 0h24v24H0V0z", fill: "none" }),
|
59
|
+
react_1.default.createElement("path", { d: "M18.3 5.71c-.39-.39-1.02-.39-1.41 0L12 10.59 7.11 5.7c-.39-.39-1.02-.39-1.41 0-.39.39-.39 1.02 0 1.41L10.59 12 5.7 16.89c-.39.39-.39 1.02 0 1.41.39.39 1.02.39 1.41 0L12 13.41l4.89 4.89c.39.39 1.02.39 1.41 0 .39-.39.39-1.02 0-1.41L13.41 12l4.89-4.89c.38-.38.38-1.02 0-1.4z" }))))),
|
58
60
|
react_1.default.createElement("div", { className: "border-t border-gray-300 overflow-y-hidden" },
|
59
61
|
plugin && selectedSource && (react_1.default.createElement("div", { className: `squiz-rb-plugin squiz-rb-plugin--${pluginMode?.type}` },
|
60
62
|
pluginToRender === types_1.PluginLaunchModeType.Browse && SourceBrowser && (react_1.default.createElement(SourceBrowser, { source: selectedSource, sources: sources, onSourceSelect: onSourceSelect, allowedTypes: allowedTypes, headerPortal: plugin.createHeaderPortal && headerPortal ? headerPortal : undefined, searchEnabled: searchEnabled, preselectedResource: preselectedResource || undefined, browseTo: pluginMode?.args?.browseTo, onSelected: (resource) => {
|
package/lib/Plugin/Plugin.d.ts
CHANGED
@@ -12,5 +12,6 @@ export type PluginRenderType = ResourceBrowserInputProps & {
|
|
12
12
|
render: boolean;
|
13
13
|
inline: boolean;
|
14
14
|
inlineType?: InlineType;
|
15
|
+
onRetry: () => void;
|
15
16
|
};
|
16
17
|
export declare const PluginRender: ({ render, inline, inlineType, ...props }: PluginRenderType) => React.JSX.Element;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { DOMAttributes, FocusableElement } from '@react-types/shared';
|
3
|
+
export type InlineLoadingErrorStateProps = {
|
4
|
+
title: string;
|
5
|
+
titleAriaProps: DOMAttributes<FocusableElement>;
|
6
|
+
onClose: () => void;
|
7
|
+
onRetry: () => void;
|
8
|
+
isLoading: boolean;
|
9
|
+
error: Error | null;
|
10
|
+
};
|
11
|
+
export declare const InlineLoadingErrorState: ({ title, titleAriaProps, onClose, onRetry, isLoading, error }: InlineLoadingErrorStateProps) => React.JSX.Element;
|
@@ -0,0 +1,22 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.InlineLoadingErrorState = void 0;
|
7
|
+
const react_1 = __importDefault(require("react"));
|
8
|
+
const resource_browser_ui_lib_1 = require("@squiz/resource-browser-ui-lib");
|
9
|
+
const sds_1 = require("@squiz/sds");
|
10
|
+
const InlineLoadingErrorState = ({ title, titleAriaProps, onClose, onRetry, isLoading, error }) => {
|
11
|
+
return (react_1.default.createElement("div", { className: "relative flex flex-col h-full text-gray-800" },
|
12
|
+
react_1.default.createElement("div", { className: "flex items-center py-3 pl-6 pr-10 min-h-[68px]" },
|
13
|
+
react_1.default.createElement("h2", { ...titleAriaProps, className: "text-xl leading-6 text-gray-800 font-semibold mr-6" }, title),
|
14
|
+
react_1.default.createElement("button", { type: "button", "aria-label": `Close ${title} dialog`, onClick: onClose, className: "absolute top-2 right-2 p-2.5 rounded hover:bg-blue-100 focus:bg-blue-100" },
|
15
|
+
react_1.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" },
|
16
|
+
react_1.default.createElement("path", { d: "M13.3 0.710017C13.1131 0.522765 12.8595 0.417532 12.595 0.417532C12.3305 0.417532 12.0768 0.522765 11.89 0.710017L6.99997 5.59002L2.10997 0.700017C1.92314 0.512765 1.66949 0.407532 1.40497 0.407532C1.14045 0.407532 0.886802 0.512765 0.699971 0.700017C0.309971 1.09002 0.309971 1.72002 0.699971 2.11002L5.58997 7.00002L0.699971 11.89C0.309971 12.28 0.309971 12.91 0.699971 13.3C1.08997 13.69 1.71997 13.69 2.10997 13.3L6.99997 8.41002L11.89 13.3C12.28 13.69 12.91 13.69 13.3 13.3C13.69 12.91 13.69 12.28 13.3 11.89L8.40997 7.00002L13.3 2.11002C13.68 1.73002 13.68 1.09002 13.3 0.710017Z", fill: "currentColor" })))),
|
17
|
+
react_1.default.createElement("div", { className: "border-t border-gray-300 overflow-y-hidden" },
|
18
|
+
react_1.default.createElement("div", { className: "w-screen max-w-[400px] min-h-[320px] flex-1 grow-[3] border-r border-gray-300 bg-gray-100 pl-6 pr-6 pb-6 pt-4 flex justify-center items-center text-gray-500" },
|
19
|
+
isLoading && react_1.default.createElement(sds_1.Spinner, { type: "lg" }),
|
20
|
+
!isLoading && error && (react_1.default.createElement(resource_browser_ui_lib_1.Error, { onReset: onRetry, infoText: 'There was a problem loading this feature. If this problem persists, contact your administrator or support team.', buttonText: 'Try again' }))))));
|
21
|
+
};
|
22
|
+
exports.InlineLoadingErrorState = InlineLoadingErrorState;
|
@@ -3,5 +3,6 @@ import { ResourceBrowserInputProps } from '../ResourceBrowserInput/ResourceBrows
|
|
3
3
|
import { InlineType } from '../types';
|
4
4
|
export type ResourceBrowserInlineButtonProps = ResourceBrowserInputProps & {
|
5
5
|
inlineType: InlineType;
|
6
|
+
onRetry: () => void;
|
6
7
|
};
|
7
|
-
export declare const ResourceBrowserInlineButton: ({ inlineType, modalTitle, allowedTypes, onChange, value, useResource, isDisabled, plugin, pluginMode, searchEnabled, source, sources, isLoading, error, setSource, isModalOpen, onModalStateChange, }: ResourceBrowserInlineButtonProps) => React.JSX.Element;
|
8
|
+
export declare const ResourceBrowserInlineButton: ({ inlineType, modalTitle, allowedTypes, onChange, onRetry, value, useResource, isDisabled, plugin, pluginMode, searchEnabled, source, sources, isLoading, error, setSource, isModalOpen, onModalStateChange, }: ResourceBrowserInlineButtonProps) => React.JSX.Element;
|
@@ -7,16 +7,20 @@ exports.ResourceBrowserInlineButton = void 0;
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
8
8
|
const MainContainer_1 = __importDefault(require("../MainContainer/MainContainer"));
|
9
9
|
const resource_browser_ui_lib_1 = require("@squiz/resource-browser-ui-lib");
|
10
|
+
const InlineLoadingErrorState_1 = require("./InlineLoadingErrorState/InlineLoadingErrorState");
|
10
11
|
const ImageInline_1 = require("../Icons/ImageInline");
|
11
12
|
const LinkInline_1 = require("../Icons/LinkInline");
|
12
|
-
const ResourceBrowserInlineButton = ({ inlineType, modalTitle, allowedTypes, onChange, value, useResource, isDisabled, plugin, pluginMode, searchEnabled, source, sources, isLoading, error, setSource, isModalOpen, onModalStateChange, }) => {
|
13
|
-
|
13
|
+
const ResourceBrowserInlineButton = ({ inlineType, modalTitle, allowedTypes, onChange, onRetry, value, useResource, isDisabled, plugin, pluginMode, searchEnabled, source, sources, isLoading, error, setSource, isModalOpen, onModalStateChange, }) => {
|
14
|
+
// If an error happens loading the resource the inline browser just opens without it as if no preselectedResource is provided
|
15
|
+
const { data: resource, isLoading: isResourceLoading } = useResource(value?.resourceId || null, source);
|
14
16
|
const isImagePicker = inlineType === 'image';
|
15
17
|
return (react_1.default.createElement("div", { className: "inline-launch-button" },
|
16
18
|
react_1.default.createElement(resource_browser_ui_lib_1.ModalTrigger, { overlayTriggerState: {
|
17
19
|
isOpen: isModalOpen,
|
18
20
|
onOpenChange: onModalStateChange,
|
19
|
-
}, showLabel: false, label: "", icon: isImagePicker ? react_1.default.createElement(ImageInline_1.ImageInline, { "aria-label": "change image" }) : react_1.default.createElement(LinkInline_1.LinkInline, { "aria-label": "change link" }), isDisabled: isDisabled, scope: "squiz-rb-scope", containerClasses: "inline-launch-button__button" }, (onClose, titleProps) => (react_1.default.createElement(
|
21
|
+
}, showLabel: false, label: "", icon: isImagePicker ? react_1.default.createElement(ImageInline_1.ImageInline, { "aria-label": "change image" }) : react_1.default.createElement(LinkInline_1.LinkInline, { "aria-label": "change link" }), isDisabled: isDisabled, scope: "squiz-rb-scope", containerClasses: "inline-launch-button__button" }, (onClose, titleProps) => (react_1.default.createElement(react_1.default.Fragment, null,
|
22
|
+
(isLoading || isResourceLoading || error) && (react_1.default.createElement(InlineLoadingErrorState_1.InlineLoadingErrorState, { title: modalTitle, titleAriaProps: titleProps, onClose: onClose, onRetry: onRetry, isLoading: isLoading || isResourceLoading, error: error })),
|
23
|
+
!(isLoading || isResourceLoading) && !error && (react_1.default.createElement(MainContainer_1.default, { selectedSource: source, sources: sources, preselectedResource: resource, plugin: plugin, pluginMode: pluginMode, searchEnabled: searchEnabled, title: modalTitle, titleAriaProps: titleProps, allowedTypes: allowedTypes, onSourceSelect: setSource, onClose: onClose, onChange: onChange }))))),
|
20
24
|
react_1.default.createElement("div", { className: "inline-launch-button__label" }, isImagePicker ? `Change image` : `Change link`)));
|
21
25
|
};
|
22
26
|
exports.ResourceBrowserInlineButton = ResourceBrowserInlineButton;
|