@squiz/resource-browser 1.66.1 → 1.66.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/lib/ResourcePicker/States/Selected.d.ts +1 -1
- package/lib/ResourcePicker/States/Selected.js +28 -26
- package/lib/index.css +23 -4
- package/package.json +1 -1
- package/src/ResourcePicker/ResourcePicker.spec.tsx +8 -0
- package/src/ResourcePicker/States/Selected.tsx +34 -25
- package/src/ResourcePicker/resource-picker.scss +2 -2
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# @squiz/resource-browser
|
2
2
|
|
3
|
+
## 1.66.3
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- 8421756: Selected image assets in the resource browser will now display the actual image instead of just the image asset icon if they have a URL specified
|
8
|
+
|
9
|
+
## 1.66.2
|
10
|
+
|
11
|
+
### Patch Changes
|
12
|
+
|
13
|
+
- 6d41052: Added white background to resource picker input to avoid it inheriting the background colour of its parent element.
|
14
|
+
|
3
15
|
## 1.66.1
|
4
16
|
|
5
17
|
### Patch Changes
|
@@ -5,4 +5,4 @@ export type SelectedStateProps = {
|
|
5
5
|
isDisabled?: boolean;
|
6
6
|
onClear: () => void;
|
7
7
|
};
|
8
|
-
export declare const SelectedState: ({ resource: { id, type, name, status, squizImage }, isDisabled, onClear, }: SelectedStateProps) => React.JSX.Element;
|
8
|
+
export declare const SelectedState: ({ resource: { id, type, name, status, squizImage, url }, isDisabled, onClear, }: SelectedStateProps) => React.JSX.Element;
|
@@ -8,35 +8,37 @@ const react_1 = __importDefault(require("react"));
|
|
8
8
|
const pretty_bytes_1 = __importDefault(require("pretty-bytes"));
|
9
9
|
const generic_browser_lib_1 = require("@squiz/generic-browser-lib");
|
10
10
|
const StatusIndicator_1 = __importDefault(require("../../StatusIndicator/StatusIndicator"));
|
11
|
-
const SelectedState = ({ resource: { id, type, name, status, squizImage }, isDisabled, onClear, }) => {
|
11
|
+
const SelectedState = ({ resource: { id, type, name, status, squizImage, url }, isDisabled, onClear, }) => {
|
12
12
|
const fileSize = squizImage?.imageVariations?.original?.byteSize;
|
13
13
|
const fileWidth = squizImage?.imageVariations?.original?.width;
|
14
14
|
const fileHeight = squizImage?.imageVariations?.original?.height;
|
15
15
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
16
|
-
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-
|
18
|
-
|
19
|
-
react_1.default.createElement(
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
fileSize && (react_1.default.createElement("
|
33
|
-
react_1.default.createElement("
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
16
|
+
type.code === 'image' && url ? (react_1.default.createElement("div", { className: "checkered-bg w-[56px] h-[56px] overflow-hidden flex justify-center items-center rounded" },
|
17
|
+
react_1.default.createElement("img", { src: url, className: "w-full h-full object-cover object-center", alt: name }))) : (react_1.default.createElement(generic_browser_lib_1.Icon, { icon: type.code, resourceSource: "matrix", className: "w-4 h-4 mt-1 flex self-start" })),
|
18
|
+
react_1.default.createElement("div", { className: "justify-self-start self-center w-full overflow-hidden break-words" },
|
19
|
+
react_1.default.createElement("span", null, name),
|
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" },
|
21
|
+
react_1.default.createElement("div", null,
|
22
|
+
react_1.default.createElement("dt", { className: "hidden" },
|
23
|
+
"Status: ",
|
24
|
+
status.name),
|
25
|
+
react_1.default.createElement("dd", { className: "flex items-center" },
|
26
|
+
react_1.default.createElement(StatusIndicator_1.default, { status: status }))),
|
27
|
+
react_1.default.createElement("div", null,
|
28
|
+
react_1.default.createElement("dt", { className: "hidden" }, "Asset ID"),
|
29
|
+
react_1.default.createElement("dd", { className: "text-gray-700" },
|
30
|
+
"#",
|
31
|
+
id))),
|
32
|
+
fileSize && (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" },
|
33
|
+
react_1.default.createElement("div", null,
|
34
|
+
react_1.default.createElement("dt", { className: "hidden" }, "Asset size"),
|
35
|
+
react_1.default.createElement("dd", { className: "text-gray-600" },
|
36
|
+
(0, pretty_bytes_1.default)(fileSize),
|
37
|
+
", ",
|
38
|
+
fileWidth,
|
39
|
+
" x ",
|
40
|
+
fileHeight,
|
41
|
+
"px"))))),
|
42
|
+
react_1.default.createElement(generic_browser_lib_1.ResetButton, { isDisabled: isDisabled, onClick: onClear })));
|
41
43
|
};
|
42
44
|
exports.SelectedState = SelectedState;
|
package/lib/index.css
CHANGED
@@ -469,9 +469,6 @@
|
|
469
469
|
.squiz-rb-scope .ml-1 {
|
470
470
|
margin-left: 0.25rem;
|
471
471
|
}
|
472
|
-
.squiz-rb-scope .ml-4 {
|
473
|
-
margin-left: 1rem;
|
474
|
-
}
|
475
472
|
.squiz-rb-scope .ml-auto {
|
476
473
|
margin-left: auto;
|
477
474
|
}
|
@@ -502,6 +499,9 @@
|
|
502
499
|
.squiz-rb-scope .mr-auto {
|
503
500
|
margin-right: auto;
|
504
501
|
}
|
502
|
+
.squiz-rb-scope .mt-1 {
|
503
|
+
margin-top: 0.25rem;
|
504
|
+
}
|
505
505
|
.squiz-rb-scope .mt-2 {
|
506
506
|
margin-top: 0.5rem;
|
507
507
|
}
|
@@ -574,6 +574,9 @@
|
|
574
574
|
.squiz-rb-scope .h-\[50vh\] {
|
575
575
|
height: 50vh;
|
576
576
|
}
|
577
|
+
.squiz-rb-scope .h-\[56px\] {
|
578
|
+
height: 56px;
|
579
|
+
}
|
577
580
|
.squiz-rb-scope .h-\[calc\(100\%-72px\)\] {
|
578
581
|
height: calc(100% - 72px);
|
579
582
|
}
|
@@ -631,6 +634,9 @@
|
|
631
634
|
.squiz-rb-scope .w-\[400px\] {
|
632
635
|
width: 400px;
|
633
636
|
}
|
637
|
+
.squiz-rb-scope .w-\[56px\] {
|
638
|
+
width: 56px;
|
639
|
+
}
|
634
640
|
.squiz-rb-scope .w-\[60px\] {
|
635
641
|
width: 60px;
|
636
642
|
}
|
@@ -708,6 +714,9 @@
|
|
708
714
|
.squiz-rb-scope .gap-3 {
|
709
715
|
gap: 0.75rem;
|
710
716
|
}
|
717
|
+
.squiz-rb-scope .self-start {
|
718
|
+
align-self: flex-start;
|
719
|
+
}
|
711
720
|
.squiz-rb-scope .self-center {
|
712
721
|
align-self: center;
|
713
722
|
}
|
@@ -808,6 +817,14 @@
|
|
808
817
|
.squiz-rb-scope .bg-opacity-10 {
|
809
818
|
--tw-bg-opacity: 0.1;
|
810
819
|
}
|
820
|
+
.squiz-rb-scope .object-cover {
|
821
|
+
-o-object-fit: cover;
|
822
|
+
object-fit: cover;
|
823
|
+
}
|
824
|
+
.squiz-rb-scope .object-center {
|
825
|
+
-o-object-position: center;
|
826
|
+
object-position: center;
|
827
|
+
}
|
811
828
|
.squiz-rb-scope .p-1 {
|
812
829
|
padding: 0.25rem;
|
813
830
|
}
|
@@ -997,6 +1014,8 @@
|
|
997
1014
|
display: grid;
|
998
1015
|
grid-template-columns: 24px 1fr;
|
999
1016
|
gap: 0.5rem;
|
1017
|
+
--tw-bg-opacity: 1;
|
1018
|
+
background-color: rgb(255 255 255 / var(--tw-bg-opacity));
|
1000
1019
|
border-width: 2px;
|
1001
1020
|
--tw-border-opacity: 1;
|
1002
1021
|
border-color: rgb(224 224 224 / var(--tw-border-opacity));
|
@@ -1018,7 +1037,7 @@
|
|
1018
1037
|
}
|
1019
1038
|
.squiz-rb-scope .resource-picker-info__layout {
|
1020
1039
|
display: grid;
|
1021
|
-
grid-template-columns:
|
1040
|
+
grid-template-columns: auto 1fr 24px;
|
1022
1041
|
gap: 0.5rem;
|
1023
1042
|
justify-items: center;
|
1024
1043
|
}
|
package/package.json
CHANGED
@@ -2,6 +2,7 @@ import React from 'react';
|
|
2
2
|
import { render, screen } from '@testing-library/react';
|
3
3
|
import ResourcePicker from './ResourcePicker';
|
4
4
|
import mockResource from './mock-resource.json';
|
5
|
+
import mockImageResource from './mock-image-resource.json';
|
5
6
|
|
6
7
|
const defaultProps: any = {
|
7
8
|
resource: null,
|
@@ -54,6 +55,13 @@ describe('Resource picker', () => {
|
|
54
55
|
expect(resourceName).toBeInTheDocument();
|
55
56
|
});
|
56
57
|
|
58
|
+
it('should render the selected image if there is an image resource returned', () => {
|
59
|
+
render(<ResourcePicker {...defaultProps} resource={mockImageResource} />);
|
60
|
+
|
61
|
+
const resourceImage = screen.getByAltText(mockImageResource.name);
|
62
|
+
expect(resourceImage.getAttribute('src')).toBe(mockImageResource.url);
|
63
|
+
});
|
64
|
+
|
57
65
|
it('should display the reset button in selected state', () => {
|
58
66
|
render(<ResourcePicker {...defaultProps} resource={mockResource} />);
|
59
67
|
const resourceName = screen.queryByText('Products');
|
@@ -12,7 +12,7 @@ export type SelectedStateProps = {
|
|
12
12
|
};
|
13
13
|
|
14
14
|
export const SelectedState = ({
|
15
|
-
resource: { id, type, name, status, squizImage },
|
15
|
+
resource: { id, type, name, status, squizImage, url },
|
16
16
|
isDisabled,
|
17
17
|
onClear,
|
18
18
|
}: SelectedStateProps) => {
|
@@ -21,35 +21,44 @@ export const SelectedState = ({
|
|
21
21
|
const fileHeight = squizImage?.imageVariations?.original?.height;
|
22
22
|
return (
|
23
23
|
<>
|
24
|
-
|
25
|
-
|
26
|
-
<
|
27
|
-
|
28
|
-
<div className="justify-self-start self-center w-full overflow-hidden break-words">{name}</div>
|
29
|
-
{/* End column */}
|
30
|
-
<ResetButton isDisabled={isDisabled} onClick={onClear} />
|
31
|
-
</>
|
32
|
-
<dl className="col-start-2 col-end-2 flex flex-row gap-1 justify-self-start items-center font-normal text-sm">
|
33
|
-
<div>
|
34
|
-
<dt className="hidden">Status: {status.name}</dt>
|
35
|
-
<dd className="flex items-center">
|
36
|
-
<StatusIndicator status={status} />
|
37
|
-
</dd>
|
24
|
+
{/* Left column */}
|
25
|
+
{type.code === 'image' && url ? (
|
26
|
+
<div className="checkered-bg w-[56px] h-[56px] overflow-hidden flex justify-center items-center rounded">
|
27
|
+
<img src={url} className="w-full h-full object-cover object-center" alt={name} />
|
38
28
|
</div>
|
39
|
-
|
40
|
-
<
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
{
|
29
|
+
) : (
|
30
|
+
<Icon icon={type.code as IconOptions} resourceSource="matrix" className="w-4 h-4 mt-1 flex self-start" />
|
31
|
+
)}
|
32
|
+
{/* Center column */}
|
33
|
+
<div className="justify-self-start self-center w-full overflow-hidden break-words">
|
34
|
+
<span>{name}</span>
|
35
|
+
<dl className="col-start-2 col-end-2 flex flex-row gap-1 justify-self-start items-center font-normal text-sm">
|
45
36
|
<div>
|
46
|
-
<dt className="hidden">
|
47
|
-
<dd className="
|
48
|
-
|
37
|
+
<dt className="hidden">Status: {status.name}</dt>
|
38
|
+
<dd className="flex items-center">
|
39
|
+
<StatusIndicator status={status} />
|
49
40
|
</dd>
|
50
41
|
</div>
|
42
|
+
|
43
|
+
<div>
|
44
|
+
<dt className="hidden">Asset ID</dt>
|
45
|
+
<dd className="text-gray-700">#{id}</dd>
|
46
|
+
</div>
|
47
|
+
</dl>
|
48
|
+
|
49
|
+
{fileSize && (
|
50
|
+
<dl className="col-start-2 col-end-2 flex flex-row gap-1 justify-self-start items-center font-normal text-sm">
|
51
|
+
<div>
|
52
|
+
<dt className="hidden">Asset size</dt>
|
53
|
+
<dd className="text-gray-600">
|
54
|
+
{prettyBytes(fileSize)}, {fileWidth} x {fileHeight}px
|
55
|
+
</dd>
|
56
|
+
</div>
|
57
|
+
</dl>
|
51
58
|
)}
|
52
|
-
</
|
59
|
+
</div>
|
60
|
+
{/* End column */}
|
61
|
+
<ResetButton isDisabled={isDisabled} onClick={onClear} />
|
53
62
|
</>
|
54
63
|
);
|
55
64
|
};
|
@@ -1,12 +1,12 @@
|
|
1
1
|
.resource-picker {
|
2
|
-
@apply grid grid-cols-[24px_1fr] gap-2;
|
2
|
+
@apply grid grid-cols-[24px_1fr] gap-2 bg-white;
|
3
3
|
@apply border-2 border-gray-300;
|
4
4
|
@apply text-gray-500 rounded p-2;
|
5
5
|
&-info {
|
6
6
|
@apply w-full p-2 bg-gray-100 rounded-md;
|
7
7
|
@apply text-gray-900 text-base text-md font-semibold;
|
8
8
|
&__layout {
|
9
|
-
@apply grid grid-cols-[
|
9
|
+
@apply grid grid-cols-[auto_1fr_24px] gap-2;
|
10
10
|
@apply justify-items-center;
|
11
11
|
}
|
12
12
|
}
|