akeneo-design-system 0.1.225 → 0.1.227
Sign up to get free protection for your applications and to get access to all the features.
- package/example/src/__snapshots__/App.test.js.snap +1 -1
- package/jest-puppeteer.config.js +1 -0
- package/lib/components/Avatar/Avatar.d.ts +12 -0
- package/lib/components/Avatar/Avatar.js +89 -0
- package/lib/components/Avatar/Avatar.js.map +1 -0
- package/lib/components/Avatar/Avatars.d.ts +8 -0
- package/lib/components/Avatar/Avatars.js +71 -0
- package/lib/components/Avatar/Avatars.js.map +1 -0
- package/lib/components/Dropdown/Dropdown.d.ts +1 -1
- package/lib/components/Input/BooleanInput/BooleanInput.d.ts +1 -1
- package/lib/components/Input/BooleanInput/BooleanInput.js +1 -1
- package/lib/components/Input/BooleanInput/BooleanInput.js.map +1 -1
- package/lib/components/Input/MultiSelectInput/MultiSelectInput.d.ts +8 -2
- package/lib/components/Input/MultiSelectInput/MultiSelectInput.js +11 -9
- package/lib/components/Input/MultiSelectInput/MultiSelectInput.js.map +1 -1
- package/lib/components/Input/SelectInput/SelectInput.d.ts +8 -2
- package/lib/components/Input/SelectInput/SelectInput.js +13 -11
- package/lib/components/Input/SelectInput/SelectInput.js.map +1 -1
- package/lib/components/Input/TableInput/TableInput.d.ts +1 -1
- package/lib/components/Input/TableInput/TableInputRow/TableInputRow.js +1 -1
- package/lib/components/Input/TableInput/TableInputRow/TableInputRow.js.map +1 -1
- package/lib/components/Input/TagInput/TagInput.js +5 -2
- package/lib/components/Input/TagInput/TagInput.js.map +1 -1
- package/lib/components/ProgressIndicator/ProgressIndicator.d.ts +1 -1
- package/lib/components/Table/Table.d.ts +1 -1
- package/lib/components/Table/TableRow/TableRow.d.ts +2 -2
- package/lib/components/Table/TableRow/TableRow.js +4 -4
- package/lib/components/Table/TableRow/TableRow.js.map +1 -1
- package/lib/components/index.d.ts +2 -0
- package/lib/components/index.js +2 -0
- package/lib/components/index.js.map +1 -1
- package/package.json +1 -1
- package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-avatar-avatar-list-correctly-1-snap.png +0 -0
- package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-avatar-avatar-size-correctly-1-snap.png +0 -0
- package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-avatar-background-colors-correctly-1-snap.png +0 -0
- package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-avatar-standard-correctly-1-snap.png +0 -0
- package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-avatar-with-image-correctly-1-snap.png +0 -0
- package/src/components/Avatar/Avatar.stories.mdx +147 -0
- package/src/components/Avatar/Avatar.tsx +102 -0
- package/src/components/Avatar/Avatar.unit.tsx +79 -0
- package/src/components/Avatar/Avatars.tsx +50 -0
- package/src/components/Avatar/Avatars.unit.tsx +41 -0
- package/src/components/Input/BooleanInput/BooleanInput.tsx +2 -2
- package/src/components/Input/MultiSelectInput/MultiSelectInput.tsx +26 -16
- package/src/components/Input/MultiSelectInput/MultiSelectInput.unit.tsx +45 -0
- package/src/components/Input/SelectInput/SelectInput.tsx +28 -18
- package/src/components/Input/SelectInput/SelectInput.unit.tsx +52 -0
- package/src/components/Input/TableInput/TableInputRow/TableInputRow.tsx +2 -7
- package/src/components/Input/TagInput/TagInput.tsx +3 -3
- package/src/components/Table/Table.stories.mdx +2 -2
- package/src/components/Table/TableRow/TableRow.tsx +3 -3
- package/src/components/Table/TableRow/TableRow.unit.tsx +0 -21
- package/src/components/index.ts +2 -0
@@ -25,7 +25,7 @@ declare const Table: {
|
|
25
25
|
Row: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLTableRowElement>, "children" | "onClick" | "onDragEnd" | "onDragStart" | "level" | "isSelected" | "rowIndex" | "onSelectToggle"> & {
|
26
26
|
children?: React.ReactNode;
|
27
27
|
onSelectToggle?: ((isSelected: boolean) => void) | undefined;
|
28
|
-
isSelected?: boolean | undefined;
|
28
|
+
isSelected?: boolean | "mixed" | undefined;
|
29
29
|
level?: "warning" | undefined;
|
30
30
|
onClick?: ((event: React.MouseEvent<HTMLTableRowElement, MouseEvent>) => void) | undefined;
|
31
31
|
rowIndex?: number | undefined;
|
@@ -4,7 +4,7 @@ declare type Level = 'warning';
|
|
4
4
|
declare type TableRowProps = Override<HTMLAttributes<HTMLTableRowElement>, {
|
5
5
|
children?: ReactNode;
|
6
6
|
onSelectToggle?: (isSelected: boolean) => void;
|
7
|
-
isSelected?: boolean;
|
7
|
+
isSelected?: boolean | 'mixed';
|
8
8
|
level?: Level;
|
9
9
|
onClick?: (event: MouseEvent<HTMLTableRowElement>) => void;
|
10
10
|
rowIndex?: number;
|
@@ -14,7 +14,7 @@ declare type TableRowProps = Override<HTMLAttributes<HTMLTableRowElement>, {
|
|
14
14
|
declare const TableRow: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLTableRowElement>, "children" | "onClick" | "onDragEnd" | "onDragStart" | "level" | "isSelected" | "rowIndex" | "onSelectToggle"> & {
|
15
15
|
children?: ReactNode;
|
16
16
|
onSelectToggle?: ((isSelected: boolean) => void) | undefined;
|
17
|
-
isSelected?: boolean | undefined;
|
17
|
+
isSelected?: boolean | "mixed" | undefined;
|
18
18
|
level?: "warning" | undefined;
|
19
19
|
onClick?: ((event: MouseEvent<HTMLTableRowElement>) => void) | undefined;
|
20
20
|
rowIndex?: number | undefined;
|
@@ -83,9 +83,9 @@ var CheckboxContainer = styled_components_1.default.td(templateObject_9 || (temp
|
|
83
83
|
var HandleCell = (0, styled_components_1.default)(TableCell_1.TableCell)(templateObject_10 || (templateObject_10 = __makeTemplateObject(["\n cursor: grab;\n width: 20px;\n\n > div {\n justify-content: center;\n }\n\n :active {\n cursor: grabbing;\n }\n"], ["\n cursor: grab;\n width: 20px;\n\n > div {\n justify-content: center;\n }\n\n :active {\n cursor: grabbing;\n }\n"])));
|
84
84
|
var WarningIcon = (0, styled_components_1.default)(icons_1.DangerIcon)(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), (0, theme_1.getColor)('yellow', 120));
|
85
85
|
var TableRow = (0, react_1.forwardRef)(function (_a, forwardedRef) {
|
86
|
-
var _b = _a.rowIndex, rowIndex = _b === void 0 ? 0 : _b,
|
87
|
-
var
|
88
|
-
var
|
86
|
+
var _b = _a.rowIndex, rowIndex = _b === void 0 ? 0 : _b, _c = _a.isSelected, isSelected = _c === void 0 ? false : _c, level = _a.level, onSelectToggle = _a.onSelectToggle, onClick = _a.onClick, draggable = _a.draggable, onDragStart = _a.onDragStart, onDragEnd = _a.onDragEnd, children = _a.children, rest = __rest(_a, ["rowIndex", "isSelected", "level", "onSelectToggle", "onClick", "draggable", "onDragStart", "onDragEnd", "children"]);
|
87
|
+
var _d = (0, usePlaceholderPosition_1.usePlaceholderPosition)(rowIndex), placeholderPosition = _d[0], placeholderDragEnter = _d[1], placeholderDragLeave = _d[2], placeholderDragEnd = _d[3];
|
88
|
+
var _e = (0, react_1.useContext)(TableContext_1.TableContext), isSelectable = _e.isSelectable, displayCheckbox = _e.displayCheckbox, isDragAndDroppable = _e.isDragAndDroppable, hasWarningRows = _e.hasWarningRows;
|
89
89
|
if (isSelectable && (undefined === isSelected || undefined === onSelectToggle)) {
|
90
90
|
throw Error('A row in a selectable table should have the prop "isSelected" and "onSelectToggle"');
|
91
91
|
}
|
@@ -106,7 +106,7 @@ var TableRow = (0, react_1.forwardRef)(function (_a, forwardedRef) {
|
|
106
106
|
};
|
107
107
|
return (react_1.default.createElement(RowContainer, __assign({ ref: forwardedRef, isClickable: undefined !== onClick, isSelected: !!isSelected, level: level, isDragAndDroppable: isDragAndDroppable, onClick: onClick, placeholderPosition: isDragAndDroppable ? placeholderPosition : 'none', draggable: isDragAndDroppable && draggable, "data-draggable-index": rowIndex, onDragEnter: handleDragEnter, onDragLeave: placeholderDragLeave, onDragStart: handleDragStart, onDragEnd: handleDragEnd }, rest),
|
108
108
|
isSelectable && (react_1.default.createElement(CheckboxContainer, { "aria-hidden": !displayCheckbox && !isSelected, isVisible: displayCheckbox || !!isSelected, onClick: handleCheckboxChange },
|
109
|
-
react_1.default.createElement(components_1.Checkbox, { checked:
|
109
|
+
react_1.default.createElement(components_1.Checkbox, { checked: isSelected, onChange: function (_value, e) {
|
110
110
|
handleCheckboxChange(e);
|
111
111
|
} }))),
|
112
112
|
isDragAndDroppable && (react_1.default.createElement(HandleCell, { onMouseDown: function () { return onDragStart === null || onDragStart === void 0 ? void 0 : onDragStart(rowIndex); }, onMouseUp: onDragEnd, "data-testid": "dragAndDrop" },
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"TableRow.js","sourceRoot":"","sources":["../../../../src/components/Table/TableRow/TableRow.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CASe;AACf,qEAA8C;AAC9C,wCAA2D;AAC3D,kDAA6C;AAE7C,gDAA6C;AAC7C,oDAAiD;AACjD,wCAAmD;AACnD,gFAAkG;AAIlG,IAAM,YAAY,GAAG,2BAAM,CAAC,EAAE,uOAQ7B,MACG,EAMC,SAED,EAMC,QAED,EAMC,QAED,EAIC,QAED,EAIC,6CAIC,EAIC,6DAOH,EASC,KACJ,KA3DG,UAAC,EAAY;QAAX,UAAU,gBAAA;IACZ,OAAA,UAAU,QACV,uBAAG,oIAAA,4CAEqB,EAAoB,kBAE3C,KAFuB,IAAA,gBAAQ,EAAC,MAAM,EAAE,EAAE,CAAC,CAE3C;AALD,CAKC,EAED,UAAC,EAAa;QAAZ,WAAW,iBAAA;IACb,OAAA,WAAW,QACX,uBAAG,gIAAA,4DAIF,IAAA;AALD,CAKC,EAED,UAAC,EAAoB;QAAnB,kBAAkB,wBAAA;IACpB,OAAA,kBAAkB,QAClB,uBAAG,sIAAA,kEAIF,IAAA;AALD,CAKC,EAED,UAAC,EAAqB;QAApB,mBAAmB,yBAAA;IACrB,OAAA,mBAAmB,KAAK,KAAK,QAC7B,uBAAG,+IAAA,iDACwC,EAAoB,QAAS,EAAiB,cACxF,KAD0C,IAAA,gBAAQ,EAAC,MAAM,EAAE,EAAE,CAAC,EAAS,IAAA,gBAAQ,EAAC,OAAO,CAAC,CACxF;AAHD,CAGC,EAED,UAAC,EAAqB;QAApB,mBAAmB,yBAAA;IACrB,OAAA,mBAAmB,KAAK,QAAQ,QAChC,uBAAG,4IAAA,8CACqC,EAAoB,QAAS,EAAiB,cACrF,KADuC,IAAA,gBAAQ,EAAC,MAAM,EAAE,EAAE,CAAC,EAAS,IAAA,gBAAQ,EAAC,OAAO,CAAC,CACrF;AAHD,CAGC,EAIC,UAAC,EAAa;QAAZ,WAAW,iBAAA;IACb,OAAA,WAAW,QACX,uBAAG,+GAAA,8BACmB,EAAoB,WACzC,KADqB,IAAA,gBAAQ,EAAC,MAAM,EAAE,EAAE,CAAC,CACzC;AAHD,CAGC,EAOH,UAAC,EAAO;QAAN,KAAK,WAAA;IACP,OAAA,KAAK,KAAK,SAAS,QACnB,uBAAG,sMAAA,8GAKqB,EAAsB,kBAE7C,KAFuB,IAAA,gBAAQ,EAAC,QAAQ,EAAE,EAAE,CAAC,CAE7C;AARD,CAQC,CACJ,CAAC;AAEF,IAAM,iBAAiB,GAAG,2BAAM,CAAC,EAAE,0LAAsB,+CAE5C,EAAoC,sEAMhD,KANY,UAAC,EAAW;QAAV,SAAS,eAAA;IAAM,OAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAnB,CAAmB,CAMhD,CAAC;AAEF,IAAM,UAAU,GAAG,IAAA,2BAAM,EAAC,qBAAS,CAAC,qMAAA,gIAWnC,IAAA,CAAC;AAEF,IAAM,WAAW,GAAG,IAAA,2BAAM,EAAC,kBAAU,CAAC,yFAAA,aAC3B,EAAuB,KACjC,KADU,IAAA,gBAAQ,EAAC,QAAQ,EAAE,GAAG,CAAC,CACjC,CAAC;AA+CF,IAAM,QAAQ,GAAG,IAAA,kBAAU,EACzB,UACE,EAWgB,EAChB,YAAsC;IAXpC,IAAA,gBAAY,EAAZ,QAAQ,mBAAG,CAAC,KAAA,EACZ,UAAU,
|
1
|
+
{"version":3,"file":"TableRow.js","sourceRoot":"","sources":["../../../../src/components/Table/TableRow/TableRow.tsx"],"names":[],"mappings":"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"}
|
package/lib/components/index.js
CHANGED
@@ -10,6 +10,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
10
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
11
11
|
};
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
13
|
+
__exportStar(require("./Avatar/Avatar"), exports);
|
14
|
+
__exportStar(require("./Avatar/Avatars"), exports);
|
13
15
|
__exportStar(require("./Badge/Badge"), exports);
|
14
16
|
__exportStar(require("./Block/Block"), exports);
|
15
17
|
__exportStar(require("./BlockButton/BlockButton"), exports);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gDAA8B;AAC9B,gDAA8B;AAC9B,4DAA0C;AAC1C,0DAAwC;AACxC,kDAAgC;AAChC,8CAA4B;AAC5B,sDAAoC;AACpC,sDAAoC;AACpC,sDAAoC;AACpC,gDAA8B;AAC9B,kDAAgC;AAChC,0DAAwC;AACxC,sDAAoC;AACpC,gDAA8B;AAC9B,4DAA0C;AAC1C,0CAAwB;AACxB,wDAAsC;AACtC,8CAA4B;AAC5B,8CAA4B;AAC5B,kDAAgC;AAChC,0DAAwC;AACxC,gDAA8B;AAC9B,+CAA6B;AAC7B,0DAAwC;AACxC,8CAA4B;AAC5B,4DAA0C;AAC1C,oDAAkC;AAClC,4DAA0C;AAC1C,wEAAsD;AACtD,kDAAgC;AAChC,8DAA4C;AAC5C,kEAAgD;AAChD,kDAAgC;AAChC,gDAA8B;AAC9B,8CAA4B;AAC5B,gDAA8B;AAC9B,oDAAkC;AAClC,8CAA4B;AAC5B,oDAAkC"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,kDAAgC;AAChC,mDAAiC;AACjC,gDAA8B;AAC9B,gDAA8B;AAC9B,4DAA0C;AAC1C,0DAAwC;AACxC,kDAAgC;AAChC,8CAA4B;AAC5B,sDAAoC;AACpC,sDAAoC;AACpC,sDAAoC;AACpC,gDAA8B;AAC9B,kDAAgC;AAChC,0DAAwC;AACxC,sDAAoC;AACpC,gDAA8B;AAC9B,4DAA0C;AAC1C,0CAAwB;AACxB,wDAAsC;AACtC,8CAA4B;AAC5B,8CAA4B;AAC5B,kDAAgC;AAChC,0DAAwC;AACxC,gDAA8B;AAC9B,+CAA6B;AAC7B,0DAAwC;AACxC,8CAA4B;AAC5B,4DAA0C;AAC1C,oDAAkC;AAClC,4DAA0C;AAC1C,wEAAsD;AACtD,kDAAgC;AAChC,8DAA4C;AAC5C,kEAAgD;AAChD,kDAAgC;AAChC,gDAA8B;AAC9B,8CAA4B;AAC5B,gDAA8B;AAC9B,oDAAkC;AAClC,8CAA4B;AAC5B,oDAAkC"}
|
package/package.json
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,147 @@
|
|
1
|
+
import {Meta, Story, ArgsTable, Canvas} from '@storybook/addon-docs';
|
2
|
+
import {Avatar} from './Avatar.tsx';
|
3
|
+
import {Avatars} from './Avatars.tsx';
|
4
|
+
|
5
|
+
<Meta
|
6
|
+
title="Components/Avatar"
|
7
|
+
component={Avatar}
|
8
|
+
argTypes={{
|
9
|
+
firstName: {control: {type: 'text'}},
|
10
|
+
lastName: {control: {type: 'text'}},
|
11
|
+
username: {control: {type: 'text'}},
|
12
|
+
avatarUrl: {control: {type: 'text'}},
|
13
|
+
size: {control: {type: 'select', options: ['default', 'big']}},
|
14
|
+
}}
|
15
|
+
args={{
|
16
|
+
firstName: 'John',
|
17
|
+
lastName: 'Doe',
|
18
|
+
username: 'admin',
|
19
|
+
avatarUrl: undefined,
|
20
|
+
size: 'default',
|
21
|
+
}}
|
22
|
+
/>
|
23
|
+
|
24
|
+
# Avatar
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
|
28
|
+
This component is used to display users avatars. If no avatar is available, first letters of the first and last name are
|
29
|
+
displayed with a dedicated color.
|
30
|
+
|
31
|
+
## Playground
|
32
|
+
|
33
|
+
<Canvas>
|
34
|
+
<Story name="Standard">
|
35
|
+
{args => {
|
36
|
+
return <Avatar firstName={'John'} lastName={'Doe'} username={'admin'} {...args} />;
|
37
|
+
}}
|
38
|
+
</Story>
|
39
|
+
</Canvas>
|
40
|
+
|
41
|
+
<ArgsTable story="Standard" />
|
42
|
+
|
43
|
+
## Variation on background colors
|
44
|
+
|
45
|
+
The background color is based from the username.
|
46
|
+
|
47
|
+
<Canvas>
|
48
|
+
<Story name="Background colors">
|
49
|
+
{args => {
|
50
|
+
return (
|
51
|
+
<>
|
52
|
+
<Avatar {...args} firstName={'Albert'} lastName={'Doe'} username={'a'} />
|
53
|
+
<Avatar {...args} firstName={'Bertrand'} lastName={'Doe'} username={'b'} />
|
54
|
+
<Avatar {...args} firstName={'Chris'} lastName={'Doe'} username={'c'} />
|
55
|
+
<Avatar {...args} firstName={'Danny'} lastName={'Doe'} username={'d'} />
|
56
|
+
<Avatar {...args} firstName={'Elon'} lastName={'Doe'} username={'e'} />
|
57
|
+
<Avatar {...args} firstName={'Fred'} lastName={'Doe'} username={'f'} />
|
58
|
+
<Avatar {...args} firstName={'Gus'} lastName={'Doe'} username={'g'} />
|
59
|
+
<Avatar {...args} firstName={'Helen'} lastName={'Doe'} username={'h'} />
|
60
|
+
<Avatar {...args} firstName={'Isabel'} lastName={'Doe'} username={'i'} />
|
61
|
+
<Avatar {...args} firstName={'John'} lastName={'Doe'} username={'j'} />
|
62
|
+
<Avatar {...args} firstName={'Kurt'} lastName={'Doe'} username={'k'} />
|
63
|
+
<Avatar {...args} firstName={'Leonard'} lastName={'Doe'} username={'l'} />
|
64
|
+
</>
|
65
|
+
);
|
66
|
+
}}
|
67
|
+
</Story>
|
68
|
+
</Canvas>
|
69
|
+
|
70
|
+
## Variation with image
|
71
|
+
|
72
|
+
<Canvas>
|
73
|
+
<Story name="With image">
|
74
|
+
{args => {
|
75
|
+
return (
|
76
|
+
<>
|
77
|
+
<Avatar {...args} avatarUrl={'https://picsum.photos/seed/akeneo/32/32'} />
|
78
|
+
</>
|
79
|
+
);
|
80
|
+
}}
|
81
|
+
</Story>
|
82
|
+
</Canvas>
|
83
|
+
|
84
|
+
## Variation on List
|
85
|
+
|
86
|
+
You can use a dedicated component to display avatar list. After a defined maximum, other avatars are not displayed.
|
87
|
+
|
88
|
+
<Canvas>
|
89
|
+
<Story name="Avatar list">
|
90
|
+
{args => {
|
91
|
+
return (
|
92
|
+
<>
|
93
|
+
<Avatars
|
94
|
+
max={5}
|
95
|
+
title="Helen Doe Isabel Doe John Doe Kurt Doe Leonard Doe"
|
96
|
+
>
|
97
|
+
<Avatar
|
98
|
+
{...args}
|
99
|
+
firstName={'Albert'}
|
100
|
+
lastName={'Doe'}
|
101
|
+
username={'a'}
|
102
|
+
avatarUrl={'https://picsum.photos/seed/akeneo/32/32'}
|
103
|
+
/>
|
104
|
+
<Avatar {...args} firstName={'Bertrand'} lastName={'Doe'} username={'b'} />
|
105
|
+
<Avatar
|
106
|
+
{...args}
|
107
|
+
firstName={'Chris'}
|
108
|
+
lastName={'Doe'}
|
109
|
+
username={'c'}
|
110
|
+
avatarUrl={'https://picsum.photos/seed/bkeneo/32/32'}
|
111
|
+
/>
|
112
|
+
<Avatar {...args} firstName={'Danny'} lastName={'Doe'} username={'d'} />
|
113
|
+
<Avatar
|
114
|
+
{...args}
|
115
|
+
firstName={'Elon'}
|
116
|
+
lastName={'Doe'}
|
117
|
+
username={'e'}
|
118
|
+
avatarUrl={'https://picsum.photos/seed/ckeneo/32/32'}
|
119
|
+
/>
|
120
|
+
<Avatar {...args} firstName={'Fred'} lastName={'Doe'} username={'f'} />
|
121
|
+
<Avatar {...args} firstName={'Gus'} lastName={'Doe'} username={'g'} />
|
122
|
+
<Avatar {...args} firstName={'Helen'} lastName={'Doe'} username={'h'} />
|
123
|
+
<Avatar {...args} firstName={'Isabel'} lastName={'Doe'} username={'i'} />
|
124
|
+
<Avatar {...args} firstName={'John'} lastName={'Doe'} username={'j'} />
|
125
|
+
<Avatar {...args} firstName={'Kurt'} lastName={'Doe'} username={'k'} />
|
126
|
+
<Avatar {...args} firstName={'Leonard'} lastName={'Doe'} username={'l'} />
|
127
|
+
</Avatars>
|
128
|
+
</>
|
129
|
+
);
|
130
|
+
}}
|
131
|
+
</Story>
|
132
|
+
</Canvas>
|
133
|
+
|
134
|
+
## Variation on Size
|
135
|
+
|
136
|
+
<Canvas>
|
137
|
+
<Story name="Avatar size">
|
138
|
+
{args => {
|
139
|
+
return (
|
140
|
+
<>
|
141
|
+
<Avatar {...args} size={'default'} />
|
142
|
+
<Avatar {...args} size={'big'} />
|
143
|
+
</>
|
144
|
+
);
|
145
|
+
}}
|
146
|
+
</Story>
|
147
|
+
</Canvas>
|
@@ -0,0 +1,102 @@
|
|
1
|
+
import React, {useMemo} from 'react';
|
2
|
+
import styled, {css} from 'styled-components';
|
3
|
+
import {useTheme} from '../../hooks';
|
4
|
+
import {Override} from '../../shared';
|
5
|
+
import {AkeneoThemedProps, getColor} from '../../theme';
|
6
|
+
|
7
|
+
const AvatarContainer = styled.span<AvatarProps & AkeneoThemedProps>`
|
8
|
+
${({size}) =>
|
9
|
+
size === 'default'
|
10
|
+
? css`
|
11
|
+
height: 32px;
|
12
|
+
width: 32px;
|
13
|
+
line-height: 32px;
|
14
|
+
font-size: 15px;
|
15
|
+
border-radius: 32px;
|
16
|
+
`
|
17
|
+
: css`
|
18
|
+
height: 140px;
|
19
|
+
width: 140px;
|
20
|
+
line-height: 140px;
|
21
|
+
font-size: 66px;
|
22
|
+
border-radius: 140px;
|
23
|
+
`}
|
24
|
+
display: inline-block;
|
25
|
+
color: ${getColor('white')};
|
26
|
+
text-align: center;
|
27
|
+
background-position: center;
|
28
|
+
background-repeat: no-repeat;
|
29
|
+
background-size: cover;
|
30
|
+
text-transform: uppercase;
|
31
|
+
cursor: ${({onClick}) => (onClick ? 'pointer' : 'default')};
|
32
|
+
`;
|
33
|
+
|
34
|
+
type AvatarProps = Override<
|
35
|
+
React.HTMLAttributes<HTMLSpanElement>,
|
36
|
+
{
|
37
|
+
/**
|
38
|
+
* Username to use as fallback if the avatar is not provided and the Firstname and Lastname are empty.
|
39
|
+
*/
|
40
|
+
username: string;
|
41
|
+
|
42
|
+
/**
|
43
|
+
* Firstname to use as fallback with the Lastname if the avatar is not provided.
|
44
|
+
*/
|
45
|
+
firstName: string;
|
46
|
+
|
47
|
+
/**
|
48
|
+
* Lastname to use as fallback with the Firstname if the avatar is not provided.
|
49
|
+
*/
|
50
|
+
lastName: string;
|
51
|
+
|
52
|
+
/**
|
53
|
+
* Url of the avatar image.
|
54
|
+
*/
|
55
|
+
avatarUrl?: string;
|
56
|
+
|
57
|
+
/**
|
58
|
+
* Size of the avatar.
|
59
|
+
*/
|
60
|
+
size?: 'default' | 'big';
|
61
|
+
}
|
62
|
+
>;
|
63
|
+
|
64
|
+
const Avatar = ({username, firstName, lastName, avatarUrl, size = 'default', ...rest}: AvatarProps) => {
|
65
|
+
const theme = useTheme();
|
66
|
+
|
67
|
+
const fallback = (
|
68
|
+
firstName.trim().charAt(0) + lastName.trim().charAt(0) || username.substring(0, 2)
|
69
|
+
).toLocaleUpperCase();
|
70
|
+
const title = `${firstName} ${lastName}`.trim() || username;
|
71
|
+
|
72
|
+
const backgroundColor = useMemo(() => {
|
73
|
+
const colorId = username.split('').reduce<number>((s, l) => s + l.charCodeAt(0), 0);
|
74
|
+
const colors = [
|
75
|
+
theme.colorAlternative.green120,
|
76
|
+
theme.colorAlternative.darkCyan120,
|
77
|
+
theme.colorAlternative.forestGreen120,
|
78
|
+
theme.colorAlternative.oliveGreen120,
|
79
|
+
theme.colorAlternative.blue120,
|
80
|
+
theme.colorAlternative.darkBlue120,
|
81
|
+
theme.colorAlternative.hotPink120,
|
82
|
+
theme.colorAlternative.red120,
|
83
|
+
theme.colorAlternative.coralRed120,
|
84
|
+
theme.colorAlternative.yellow120,
|
85
|
+
theme.colorAlternative.orange120,
|
86
|
+
theme.colorAlternative.chocolate120,
|
87
|
+
];
|
88
|
+
|
89
|
+
return colors[colorId % colors.length];
|
90
|
+
}, [theme, username]);
|
91
|
+
|
92
|
+
const style = avatarUrl ? {backgroundImage: `url(${avatarUrl})`} : {backgroundColor};
|
93
|
+
|
94
|
+
return (
|
95
|
+
<AvatarContainer size={size} {...rest} style={style} title={title}>
|
96
|
+
{avatarUrl ? '' : fallback}
|
97
|
+
</AvatarContainer>
|
98
|
+
);
|
99
|
+
};
|
100
|
+
|
101
|
+
export {Avatar};
|
102
|
+
export type {AvatarProps};
|
@@ -0,0 +1,79 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import {render, screen} from '../../storybook/test-util';
|
3
|
+
import {Avatar} from './Avatar';
|
4
|
+
|
5
|
+
test('renders', () => {
|
6
|
+
render(<Avatar username="john" firstName="John" lastName="Doe" />);
|
7
|
+
|
8
|
+
const avatar = screen.getByTitle('John Doe');
|
9
|
+
expect(avatar).toBeInTheDocument();
|
10
|
+
});
|
11
|
+
|
12
|
+
test('avatar image', () => {
|
13
|
+
render(<Avatar username="john" firstName="John" lastName="Doe" avatarUrl="path/to/image" />);
|
14
|
+
|
15
|
+
const avatar = screen.getByTitle('John Doe');
|
16
|
+
expect(avatar).toHaveStyle('background-image: url(path/to/image)');
|
17
|
+
});
|
18
|
+
|
19
|
+
test('deterministic fallback color', () => {
|
20
|
+
render(<Avatar username="john" firstName="John" lastName="Doe" />);
|
21
|
+
|
22
|
+
const avatar = screen.getByTitle('John Doe');
|
23
|
+
expect(avatar).toHaveStyle('background-color: rgb(68, 31, 0)');
|
24
|
+
});
|
25
|
+
|
26
|
+
test('fallback to firstname + lastname', () => {
|
27
|
+
render(<Avatar username="" firstName="John" lastName="Doe" />);
|
28
|
+
|
29
|
+
const avatar = screen.getByTitle('John Doe');
|
30
|
+
expect(avatar).toHaveTextContent('JD');
|
31
|
+
});
|
32
|
+
|
33
|
+
test('fallback to firstname only', () => {
|
34
|
+
render(<Avatar username="" firstName="John" lastName="" />);
|
35
|
+
|
36
|
+
const avatar = screen.getByTitle('John');
|
37
|
+
expect(avatar).toHaveTextContent('J');
|
38
|
+
});
|
39
|
+
|
40
|
+
test('fallback to lastname only', () => {
|
41
|
+
render(<Avatar username="" firstName="" lastName="Doe" />);
|
42
|
+
|
43
|
+
const avatar = screen.getByTitle('Doe');
|
44
|
+
expect(avatar).toHaveTextContent('D');
|
45
|
+
});
|
46
|
+
|
47
|
+
test('fallback to username', () => {
|
48
|
+
render(<Avatar username="john" firstName="" lastName="" />);
|
49
|
+
|
50
|
+
const avatar = screen.getByTitle('john');
|
51
|
+
expect(avatar).toHaveTextContent('JO');
|
52
|
+
});
|
53
|
+
|
54
|
+
test('initial are converted to uppercase', () => {
|
55
|
+
render(<Avatar username="" firstName="john" lastName="doe" />);
|
56
|
+
|
57
|
+
const avatar = screen.getByTitle('john doe');
|
58
|
+
expect(avatar).toHaveTextContent('JD');
|
59
|
+
});
|
60
|
+
|
61
|
+
test('size default', () => {
|
62
|
+
render(<Avatar username="john" firstName="John" lastName="Doe" />);
|
63
|
+
|
64
|
+
const avatar = screen.getByTitle('John Doe');
|
65
|
+
expect(avatar).toHaveStyle('width: 32px');
|
66
|
+
});
|
67
|
+
|
68
|
+
test('size big', () => {
|
69
|
+
render(<Avatar username="john" firstName="John" lastName="Doe" size="big" />);
|
70
|
+
|
71
|
+
const avatar = screen.getByTitle('John Doe');
|
72
|
+
expect(avatar).toHaveStyle('width: 140px');
|
73
|
+
});
|
74
|
+
|
75
|
+
test('supports ...rest props', () => {
|
76
|
+
render(<Avatar username="john" firstName="John" lastName="Doe" data-testid="my_value" />);
|
77
|
+
|
78
|
+
expect(screen.getByTestId('my_value')).toBeInTheDocument();
|
79
|
+
});
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import React, {Children} from 'react';
|
2
|
+
import styled from 'styled-components';
|
3
|
+
import {Override} from '../../shared';
|
4
|
+
import {AkeneoThemedProps, getColor} from '../../theme';
|
5
|
+
|
6
|
+
const AvatarListContainer = styled.div<AvatarsProps & AkeneoThemedProps>`
|
7
|
+
display: flex;
|
8
|
+
flex-direction: row-reverse;
|
9
|
+
justify-content: flex-end;
|
10
|
+
& > * {
|
11
|
+
margin-right: -4px;
|
12
|
+
position: relative;
|
13
|
+
}
|
14
|
+
`;
|
15
|
+
|
16
|
+
const RemainingAvatar = styled.span`
|
17
|
+
height: 32px;
|
18
|
+
width: 32px;
|
19
|
+
display: inline-block;
|
20
|
+
border: 1px solid ${getColor('grey', 10)};
|
21
|
+
line-height: 32px;
|
22
|
+
text-align: center;
|
23
|
+
font-size: 15px;
|
24
|
+
border-radius: 32px;
|
25
|
+
background-color: ${getColor('white')};
|
26
|
+
`;
|
27
|
+
|
28
|
+
type AvatarsProps = Override<
|
29
|
+
React.HTMLAttributes<HTMLDivElement>,
|
30
|
+
{
|
31
|
+
max: number;
|
32
|
+
}
|
33
|
+
>;
|
34
|
+
|
35
|
+
const Avatars = ({max, children, ...rest}: AvatarsProps) => {
|
36
|
+
const childrenArray = Children.toArray(children);
|
37
|
+
const displayedChildren = childrenArray.slice(0, max);
|
38
|
+
const remainingChildrenCount = childrenArray.length - max;
|
39
|
+
const reverseChildren = displayedChildren.reverse();
|
40
|
+
|
41
|
+
return (
|
42
|
+
<AvatarListContainer {...rest}>
|
43
|
+
{remainingChildrenCount > 0 && <RemainingAvatar>+{remainingChildrenCount}</RemainingAvatar>}
|
44
|
+
{reverseChildren}
|
45
|
+
</AvatarListContainer>
|
46
|
+
);
|
47
|
+
};
|
48
|
+
|
49
|
+
export {Avatars};
|
50
|
+
export type {AvatarsProps};
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import {render, screen} from '../../storybook/test-util';
|
3
|
+
import {Avatar} from './Avatar';
|
4
|
+
import {Avatars} from './Avatars';
|
5
|
+
|
6
|
+
test('renders multiple avatars', () => {
|
7
|
+
render(
|
8
|
+
<Avatars max={2}>
|
9
|
+
<Avatar username="john" firstName="John" lastName="Doe" />
|
10
|
+
<Avatar username="leonard" firstName="Leonard" lastName="Doe" />
|
11
|
+
</Avatars>
|
12
|
+
);
|
13
|
+
|
14
|
+
expect(screen.getByTitle('John Doe')).toBeInTheDocument();
|
15
|
+
expect(screen.getByTitle('Leonard Doe')).toBeInTheDocument();
|
16
|
+
});
|
17
|
+
|
18
|
+
test('renders a maximum number of avatars', () => {
|
19
|
+
render(
|
20
|
+
<Avatars max={1}>
|
21
|
+
<Avatar username="john" firstName="John" lastName="Doe" />
|
22
|
+
<Avatar username="leonard" firstName="Leonard" lastName="Doe" />
|
23
|
+
</Avatars>
|
24
|
+
);
|
25
|
+
|
26
|
+
expect(screen.getByTitle('John Doe')).toBeInTheDocument();
|
27
|
+
expect(screen.queryByTitle('Leonard Doe')).not.toBeInTheDocument();
|
28
|
+
expect(screen.getByText('+1')).toBeInTheDocument();
|
29
|
+
});
|
30
|
+
|
31
|
+
test('renders no avatar', () => {
|
32
|
+
render(<Avatars max={1}></Avatars>);
|
33
|
+
|
34
|
+
expect(screen.queryByTitle('+1')).not.toBeInTheDocument();
|
35
|
+
});
|
36
|
+
|
37
|
+
test('supports ...rest props', () => {
|
38
|
+
render(<Avatars max={1} data-testid="my_value" />);
|
39
|
+
|
40
|
+
expect(screen.getByTestId('my_value')).toBeInTheDocument();
|
41
|
+
});
|
@@ -149,7 +149,7 @@ type BooleanInputProps = Override<
|
|
149
149
|
clearLabel?: string;
|
150
150
|
}
|
151
151
|
) & {
|
152
|
-
readOnly
|
152
|
+
readOnly?: boolean;
|
153
153
|
yesLabel: string;
|
154
154
|
noLabel: string;
|
155
155
|
invalid?: boolean;
|
@@ -165,7 +165,7 @@ const BooleanInput = React.forwardRef<HTMLDivElement, BooleanInputProps>(
|
|
165
165
|
(
|
166
166
|
{
|
167
167
|
value,
|
168
|
-
readOnly,
|
168
|
+
readOnly = false,
|
169
169
|
onChange,
|
170
170
|
clearable = false,
|
171
171
|
yesLabel,
|
@@ -150,17 +150,24 @@ type MultiMultiSelectInputProps = Override<
|
|
150
150
|
* Callback called when the user hit enter on the field.
|
151
151
|
*/
|
152
152
|
onSubmit?: () => void;
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
153
|
+
} & (
|
154
|
+
| {
|
155
|
+
/**
|
156
|
+
* Handler called when the next page is almost reached.
|
157
|
+
*/
|
158
|
+
onNextPage?: () => void;
|
159
|
+
/**
|
160
|
+
* Handler called when the search value changed
|
161
|
+
*/
|
162
|
+
onSearchChange?: (searchValue: string) => void;
|
163
|
+
disableInternalSearch?: false;
|
164
|
+
}
|
165
|
+
| {
|
166
|
+
onNextPage: () => void;
|
167
|
+
onSearchChange: (searchValue: string) => void;
|
168
|
+
disableInternalSearch: true;
|
169
|
+
}
|
170
|
+
)
|
164
171
|
>;
|
165
172
|
|
166
173
|
/**
|
@@ -183,6 +190,7 @@ const MultiSelectInput = ({
|
|
183
190
|
verticalPosition,
|
184
191
|
onNextPage,
|
185
192
|
onSearchChange,
|
193
|
+
disableInternalSearch = false,
|
186
194
|
'aria-labelledby': ariaLabelledby,
|
187
195
|
...rest
|
188
196
|
}: MultiMultiSelectInputProps) => {
|
@@ -211,12 +219,14 @@ const MultiSelectInput = ({
|
|
211
219
|
return indexedChips;
|
212
220
|
}, {});
|
213
221
|
|
214
|
-
const filteredChildren =
|
215
|
-
|
216
|
-
|
222
|
+
const filteredChildren = disableInternalSearch
|
223
|
+
? validChildren
|
224
|
+
: validChildren.filter(({props}) => {
|
225
|
+
const childValue = props.value;
|
226
|
+
const optionValue = childValue + props.children;
|
217
227
|
|
218
|
-
|
219
|
-
|
228
|
+
return !value.includes(childValue) && optionValue.toLowerCase().includes(searchValue.toLowerCase());
|
229
|
+
});
|
220
230
|
|
221
231
|
const handleEnter = () => {
|
222
232
|
if (filteredChildren.length > 0 && dropdownIsOpen) {
|