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.
Files changed (53) hide show
  1. package/example/src/__snapshots__/App.test.js.snap +1 -1
  2. package/jest-puppeteer.config.js +1 -0
  3. package/lib/components/Avatar/Avatar.d.ts +12 -0
  4. package/lib/components/Avatar/Avatar.js +89 -0
  5. package/lib/components/Avatar/Avatar.js.map +1 -0
  6. package/lib/components/Avatar/Avatars.d.ts +8 -0
  7. package/lib/components/Avatar/Avatars.js +71 -0
  8. package/lib/components/Avatar/Avatars.js.map +1 -0
  9. package/lib/components/Dropdown/Dropdown.d.ts +1 -1
  10. package/lib/components/Input/BooleanInput/BooleanInput.d.ts +1 -1
  11. package/lib/components/Input/BooleanInput/BooleanInput.js +1 -1
  12. package/lib/components/Input/BooleanInput/BooleanInput.js.map +1 -1
  13. package/lib/components/Input/MultiSelectInput/MultiSelectInput.d.ts +8 -2
  14. package/lib/components/Input/MultiSelectInput/MultiSelectInput.js +11 -9
  15. package/lib/components/Input/MultiSelectInput/MultiSelectInput.js.map +1 -1
  16. package/lib/components/Input/SelectInput/SelectInput.d.ts +8 -2
  17. package/lib/components/Input/SelectInput/SelectInput.js +13 -11
  18. package/lib/components/Input/SelectInput/SelectInput.js.map +1 -1
  19. package/lib/components/Input/TableInput/TableInput.d.ts +1 -1
  20. package/lib/components/Input/TableInput/TableInputRow/TableInputRow.js +1 -1
  21. package/lib/components/Input/TableInput/TableInputRow/TableInputRow.js.map +1 -1
  22. package/lib/components/Input/TagInput/TagInput.js +5 -2
  23. package/lib/components/Input/TagInput/TagInput.js.map +1 -1
  24. package/lib/components/ProgressIndicator/ProgressIndicator.d.ts +1 -1
  25. package/lib/components/Table/Table.d.ts +1 -1
  26. package/lib/components/Table/TableRow/TableRow.d.ts +2 -2
  27. package/lib/components/Table/TableRow/TableRow.js +4 -4
  28. package/lib/components/Table/TableRow/TableRow.js.map +1 -1
  29. package/lib/components/index.d.ts +2 -0
  30. package/lib/components/index.js +2 -0
  31. package/lib/components/index.js.map +1 -1
  32. package/package.json +1 -1
  33. package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-avatar-avatar-list-correctly-1-snap.png +0 -0
  34. package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-avatar-avatar-size-correctly-1-snap.png +0 -0
  35. package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-avatar-background-colors-correctly-1-snap.png +0 -0
  36. package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-avatar-standard-correctly-1-snap.png +0 -0
  37. package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-avatar-with-image-correctly-1-snap.png +0 -0
  38. package/src/components/Avatar/Avatar.stories.mdx +147 -0
  39. package/src/components/Avatar/Avatar.tsx +102 -0
  40. package/src/components/Avatar/Avatar.unit.tsx +79 -0
  41. package/src/components/Avatar/Avatars.tsx +50 -0
  42. package/src/components/Avatar/Avatars.unit.tsx +41 -0
  43. package/src/components/Input/BooleanInput/BooleanInput.tsx +2 -2
  44. package/src/components/Input/MultiSelectInput/MultiSelectInput.tsx +26 -16
  45. package/src/components/Input/MultiSelectInput/MultiSelectInput.unit.tsx +45 -0
  46. package/src/components/Input/SelectInput/SelectInput.tsx +28 -18
  47. package/src/components/Input/SelectInput/SelectInput.unit.tsx +52 -0
  48. package/src/components/Input/TableInput/TableInputRow/TableInputRow.tsx +2 -7
  49. package/src/components/Input/TagInput/TagInput.tsx +3 -3
  50. package/src/components/Table/Table.stories.mdx +2 -2
  51. package/src/components/Table/TableRow/TableRow.tsx +3 -3
  52. package/src/components/Table/TableRow/TableRow.unit.tsx +0 -21
  53. 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, isSelected = _a.isSelected, 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 _c = (0, usePlaceholderPosition_1.usePlaceholderPosition)(rowIndex), placeholderPosition = _c[0], placeholderDragEnter = _c[1], placeholderDragLeave = _c[2], placeholderDragEnd = _c[3];
88
- var _d = (0, react_1.useContext)(TableContext_1.TableContext), isSelectable = _d.isSelectable, displayCheckbox = _d.displayCheckbox, isDragAndDroppable = _d.isDragAndDroppable, hasWarningRows = _d.hasWarningRows;
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: !!isSelected, onChange: function (_value, e) {
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":"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"}
1
+ {"version":3,"file":"TableRow.js","sourceRoot":"","sources":["../../../../src/components/Table/TableRow/TableRow.tsx"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ export * from './Avatar/Avatar';
2
+ export * from './Avatar/Avatars';
1
3
  export * from './Badge/Badge';
2
4
  export * from './Block/Block';
3
5
  export * from './BlockButton/BlockButton';
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akeneo-design-system",
3
- "version": "0.1.225",
3
+ "version": "0.1.227",
4
4
  "description": "Akeneo design system",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {
@@ -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&#10;Isabel Doe&#10;John Doe&#10;Kurt Doe&#10;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: boolean;
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
- * Handler called when the next page is almost reached.
156
- */
157
- onNextPage?: () => void;
158
-
159
- /**
160
- * Handler called when the search value changed
161
- */
162
- onSearchChange?: (searchValue: string) => void;
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 = validChildren.filter(({props}) => {
215
- const childValue = props.value;
216
- const optionValue = childValue + props.children;
222
+ const filteredChildren = disableInternalSearch
223
+ ? validChildren
224
+ : validChildren.filter(({props}) => {
225
+ const childValue = props.value;
226
+ const optionValue = childValue + props.children;
217
227
 
218
- return !value.includes(childValue) && optionValue.toLowerCase().includes(searchValue.toLowerCase());
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) {