akeneo-design-system 0.1.228 → 0.1.230
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/components/Dropdown/Item/Item.js +1 -1
- package/lib/components/Dropdown/Item/Item.js.map +1 -1
- package/lib/components/Input/MultiSelectInput/ChipInput.d.ts +1 -0
- package/lib/components/Input/MultiSelectInput/ChipInput.js +9 -7
- package/lib/components/Input/MultiSelectInput/ChipInput.js.map +1 -1
- package/lib/components/Input/MultiSelectInput/MultiSelectInput.d.ts +2 -1
- package/lib/components/Input/MultiSelectInput/MultiSelectInput.js +4 -4
- package/lib/components/Input/MultiSelectInput/MultiSelectInput.js.map +1 -1
- package/lib/components/KeyFigure/KeyFigure.js +1 -1
- package/lib/components/KeyFigure/KeyFigure.js.map +1 -1
- package/lib/components/ProgressBar/ProgressBar.js +4 -4
- package/lib/components/ProgressBar/ProgressBar.js.map +1 -1
- package/lib/components/SwitcherButton/SwitcherButton.js +1 -1
- package/lib/components/SwitcherButton/SwitcherButton.js.map +1 -1
- package/lib/components/Table/Table.d.ts +3 -2
- package/lib/components/Table/Table.js +2 -2
- package/lib/components/Table/Table.js.map +1 -1
- package/lib/components/Table/TableContext.d.ts +1 -0
- package/lib/components/Table/TableContext.js +1 -0
- package/lib/components/Table/TableContext.js.map +1 -1
- package/lib/components/Table/TableHeader/TableHeader.js +6 -4
- package/lib/components/Table/TableHeader/TableHeader.js.map +1 -1
- package/lib/components/Table/TableRow/TableRow.d.ts +2 -2
- package/lib/components/Table/TableRow/TableRow.js +19 -9
- package/lib/components/Table/TableRow/TableRow.js.map +1 -1
- package/lib/components/Tooltip/Tooltip.d.ts +4 -1
- package/lib/components/Tooltip/Tooltip.js +3 -1
- package/lib/components/Tooltip/Tooltip.js.map +1 -1
- package/lib/icons/ChecklistIcon.d.ts +4 -0
- package/lib/icons/ChecklistIcon.js +38 -0
- package/lib/icons/ChecklistIcon.js.map +1 -0
- package/lib/icons/WorkflowIcon.d.ts +4 -0
- package/lib/icons/WorkflowIcon.js +40 -0
- package/lib/icons/WorkflowIcon.js.map +1 -0
- package/lib/icons/index.d.ts +2 -0
- package/lib/icons/index.js +2 -0
- package/lib/icons/index.js.map +1 -1
- package/package.json +1 -1
- package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-inputs-multi-select-input-locked-values-correctly-1-snap.png +0 -0
- package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-progress-bar-width-correctly-1-snap.png +0 -0
- package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-table-warning-and-locked-rows-correctly-1-snap.png +0 -0
- package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-tooltip-with-title-correctly-1-snap.png +0 -0
- package/src/components/Dropdown/Item/Item.tsx +1 -0
- package/src/components/Input/MultiSelectInput/ChipInput.tsx +14 -4
- package/src/components/Input/MultiSelectInput/MultiSelectInput.stories.mdx +24 -0
- package/src/components/Input/MultiSelectInput/MultiSelectInput.tsx +7 -0
- package/src/components/Input/MultiSelectInput/MultiSelectInput.unit.tsx +20 -0
- package/src/components/KeyFigure/KeyFigure.stories.mdx +5 -1
- package/src/components/KeyFigure/KeyFigure.tsx +2 -0
- package/src/components/ProgressBar/ProgressBar.tsx +4 -22
- package/src/components/SwitcherButton/SwitcherButton.tsx +1 -1
- package/src/components/Table/Table.stories.mdx +17 -3
- package/src/components/Table/Table.tsx +8 -2
- package/src/components/Table/TableContext.ts +2 -0
- package/src/components/Table/TableHeader/TableHeader.tsx +6 -1
- package/src/components/Table/TableRow/TableRow.tsx +38 -13
- package/src/components/Table/TableRow/TableRow.unit.tsx +30 -0
- package/src/components/Tooltip/Tooltip.stories.mdx +15 -0
- package/src/components/Tooltip/Tooltip.tsx +9 -1
- package/src/icons/ChecklistIcon.tsx +16 -0
- package/src/icons/WorkflowIcon.tsx +39 -0
- package/src/icons/index.ts +2 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
14
|
+
var t = {};
|
15
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
16
|
+
t[p] = s[p];
|
17
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
18
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
19
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
20
|
+
t[p[i]] = s[p[i]];
|
21
|
+
}
|
22
|
+
return t;
|
23
|
+
};
|
24
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
25
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
26
|
+
};
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
28
|
+
exports.ChecklistIcon = void 0;
|
29
|
+
var react_1 = __importDefault(require("react"));
|
30
|
+
var ChecklistIcon = function (_a) {
|
31
|
+
var title = _a.title, _b = _a.size, size = _b === void 0 ? 24 : _b, _c = _a.color, color = _c === void 0 ? 'currentColor' : _c, props = __rest(_a, ["title", "size", "color"]);
|
32
|
+
return (react_1.default.createElement("svg", __assign({ viewBox: "0 0 24 24", width: size, height: size }, props),
|
33
|
+
title && react_1.default.createElement("title", null, title),
|
34
|
+
react_1.default.createElement("g", { stroke: "none", strokeWidth: "1", fill: "none", fillRule: "evenodd", strokeLinecap: "round", strokeLinejoin: "round" },
|
35
|
+
react_1.default.createElement("path", { d: "M9.48723 4.21967C9.78012 4.51256 9.78012 4.98744 9.48723 5.28033L6.0564 8.71115C5.37299 9.39457 4.26495 9.39457 3.58153 8.71115L2.21967 7.3493C1.92678 7.0564 1.92678 6.58153 2.21967 6.28864C2.51256 5.99574 2.98744 5.99574 3.28033 6.28864L4.64219 7.65049C4.73982 7.74812 4.89811 7.74813 4.99574 7.65049L8.42657 4.21967C8.71946 3.92678 9.19433 3.92678 9.48723 4.21967ZM12 6.68066C12 6.40452 12.2239 6.18066 12.5 6.18066H21.5C21.7761 6.18066 22 6.40452 22 6.68066C22 6.95681 21.7761 7.18066 21.5 7.18066H12.5C12.2239 7.18066 12 6.95681 12 6.68066ZM10 12.6807C10 12.4045 10.2239 12.1807 10.5 12.1807H21.5C21.7761 12.1807 22 12.4045 22 12.6807C22 12.9568 21.7761 13.1807 21.5 13.1807H10.5C10.2239 13.1807 10 12.9568 10 12.6807ZM10 18.6807C10 18.4045 10.2239 18.1807 10.5 18.1807H21.5C21.7761 18.1807 22 18.4045 22 18.6807C22 18.9568 21.7761 19.1807 21.5 19.1807H10.5C10.2239 19.1807 10 18.9568 10 18.6807ZM6.47409 18.681C6.47409 17.9954 5.91831 17.4396 5.23271 17.4396C4.54712 17.4396 3.99133 17.9954 3.99133 18.681C3.99133 19.3666 4.54712 19.9224 5.23271 19.9224C5.91831 19.9224 6.47409 19.3666 6.47409 18.681ZM6.47409 12.6807C6.47409 11.9951 5.91831 11.4393 5.23271 11.4393C4.54712 11.4393 3.99133 11.9951 3.99133 12.6807C3.99133 13.3663 4.54712 13.922 5.23271 13.922C5.91831 13.922 6.47409 13.3663 6.47409 12.6807Z", stroke: color }))));
|
36
|
+
};
|
37
|
+
exports.ChecklistIcon = ChecklistIcon;
|
38
|
+
//# sourceMappingURL=ChecklistIcon.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ChecklistIcon.js","sourceRoot":"","sources":["../../src/icons/ChecklistIcon.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAA0B;AAG1B,IAAM,aAAa,GAAG,UAAC,EAA+D;IAA9D,IAAA,KAAK,WAAA,EAAE,YAAS,EAAT,IAAI,mBAAG,EAAE,KAAA,EAAE,aAAsB,EAAtB,KAAK,mBAAG,cAAc,KAAA,EAAK,KAAK,cAAnD,0BAAoD,CAAD;IAAiB,OAAA,CACzF,gDAAK,OAAO,EAAC,WAAW,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,IAAM,KAAK;QAC1D,KAAK,IAAI,6CAAQ,KAAK,CAAS;QAChC,qCAAG,MAAM,EAAC,MAAM,EAAC,WAAW,EAAC,GAAG,EAAC,IAAI,EAAC,MAAM,EAAC,QAAQ,EAAC,SAAS,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO;YAC1G,wCACE,CAAC,EAAC,kyCAAkyC,EACpyC,MAAM,EAAE,KAAK,GACb,CACA,CACA,CACP,CAAA;CAAA,CAAC;AAEM,sCAAa"}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
14
|
+
var t = {};
|
15
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
16
|
+
t[p] = s[p];
|
17
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
18
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
19
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
20
|
+
t[p[i]] = s[p[i]];
|
21
|
+
}
|
22
|
+
return t;
|
23
|
+
};
|
24
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
25
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
26
|
+
};
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
28
|
+
exports.WorkflowIcon = void 0;
|
29
|
+
var react_1 = __importDefault(require("react"));
|
30
|
+
var WorkflowIcon = function (_a) {
|
31
|
+
var title = _a.title, _b = _a.size, size = _b === void 0 ? 24 : _b, _c = _a.color, color = _c === void 0 ? 'currentColor' : _c, props = __rest(_a, ["title", "size", "color"]);
|
32
|
+
return (react_1.default.createElement("svg", __assign({ viewBox: "0 0 24 24", width: size, height: size }, props),
|
33
|
+
react_1.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M17.1379 5.49999H8V4.49999H17.1379C19.2709 4.49999 21 6.29085 21 8.49999C21 10.7091 19.2709 12.5 17.1379 12.5H14V11.5H17.1379C18.7377 11.5 20.0345 10.1568 20.0345 8.49999C20.0345 6.84313 18.7377 5.49999 17.1379 5.49999Z", fill: color }),
|
34
|
+
react_1.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M5.88571 18H19.3408L19.83 18.5L19.3408 19H5.88571C3.73969 19 2 17.7091 2 15.5C2 13.2908 3.73969 11.5 5.88571 11.5H8V12.5H5.88571C4.2762 12.5 2.97143 13.8431 2.97143 15.5C2.97143 17.1568 4.2762 18 5.88571 18Z", fill: color }),
|
35
|
+
react_1.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M7 3H3L3 7H7V3ZM3 2C2.44772 2 2 2.44772 2 3V7C2 7.55228 2.44772 8 3 8H7C7.55228 8 8 7.55228 8 7V3C8 2.44772 7.55228 2 7 2H3Z", fill: color }),
|
36
|
+
react_1.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M13 10.2H9V13.8H13V10.2ZM9 9C8.44772 9 8 9.53726 8 10.2V13.8C8 14.4627 8.44772 15 9 15H13C13.5523 15 14 14.4627 14 13.8V10.2C14 9.53726 13.5523 9 13 9H9Z", fill: color }),
|
37
|
+
react_1.default.createElement("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M20.8731 18.1966C21.0423 18.3695 21.0423 18.6305 20.8731 18.8034L18.8731 20.8476C18.6893 21.0355 18.3733 21.0519 18.1672 20.8843C17.9611 20.7168 17.9431 20.4286 18.1269 20.2407L19.83 18.5L18.1269 16.7593C17.9431 16.5714 17.9611 16.2832 18.1672 16.1157C18.3733 15.9481 18.6893 15.9645 18.8731 16.1524L20.8731 18.1966Z", fill: color })));
|
38
|
+
};
|
39
|
+
exports.WorkflowIcon = WorkflowIcon;
|
40
|
+
//# sourceMappingURL=WorkflowIcon.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"WorkflowIcon.js","sourceRoot":"","sources":["../../src/icons/WorkflowIcon.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAA0B;AAG1B,IAAM,YAAY,GAAG,UAAC,EAA+D;IAA9D,IAAA,KAAK,WAAA,EAAE,YAAS,EAAT,IAAI,mBAAG,EAAE,KAAA,EAAE,aAAsB,EAAtB,KAAK,mBAAG,cAAc,KAAA,EAAK,KAAK,cAAnD,0BAAoD,CAAD;IAAiB,OAAA,CACxF,gDAAK,OAAO,EAAC,WAAW,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,IAAM,KAAK;QAC3D,wCACE,QAAQ,EAAC,SAAS,EAClB,QAAQ,EAAC,SAAS,EAClB,CAAC,EAAC,6NAA6N,EAC/N,IAAI,EAAE,KAAK,GACX;QACF,wCACE,QAAQ,EAAC,SAAS,EAClB,QAAQ,EAAC,SAAS,EAClB,CAAC,EAAC,iNAAiN,EACnN,IAAI,EAAE,KAAK,GACX;QACF,wCACE,QAAQ,EAAC,SAAS,EAClB,QAAQ,EAAC,SAAS,EAClB,CAAC,EAAC,8HAA8H,EAChI,IAAI,EAAE,KAAK,GACX;QACF,wCACE,QAAQ,EAAC,SAAS,EAClB,QAAQ,EAAC,SAAS,EAClB,CAAC,EAAC,2JAA2J,EAC7J,IAAI,EAAE,KAAK,GACX;QACF,wCACE,QAAQ,EAAC,SAAS,EAClB,QAAQ,EAAC,SAAS,EAClB,CAAC,EAAC,8TAA8T,EAChU,IAAI,EAAE,KAAK,GACX,CACE,CACP,CAAA;CAAA,CAAC;AAEM,oCAAY"}
|
package/lib/icons/index.d.ts
CHANGED
@@ -51,6 +51,7 @@ export * from './DownloadIcon';
|
|
51
51
|
export * from './DragDropIcon';
|
52
52
|
export * from './EditIcon';
|
53
53
|
export * from './EntityIcon';
|
54
|
+
export * from './ChecklistIcon';
|
54
55
|
export * from './EntityMultiIcon';
|
55
56
|
export * from './EraseIcon';
|
56
57
|
export * from './ExpandIcon';
|
@@ -119,3 +120,4 @@ export * from './UserIcon';
|
|
119
120
|
export * from './ValueIcon';
|
120
121
|
export * from './ViewIcon';
|
121
122
|
export * from './WaveIcon';
|
123
|
+
export * from './WorkflowIcon';
|
package/lib/icons/index.js
CHANGED
@@ -63,6 +63,7 @@ __exportStar(require("./DownloadIcon"), exports);
|
|
63
63
|
__exportStar(require("./DragDropIcon"), exports);
|
64
64
|
__exportStar(require("./EditIcon"), exports);
|
65
65
|
__exportStar(require("./EntityIcon"), exports);
|
66
|
+
__exportStar(require("./ChecklistIcon"), exports);
|
66
67
|
__exportStar(require("./EntityMultiIcon"), exports);
|
67
68
|
__exportStar(require("./EraseIcon"), exports);
|
68
69
|
__exportStar(require("./ExpandIcon"), exports);
|
@@ -131,4 +132,5 @@ __exportStar(require("./UserIcon"), exports);
|
|
131
132
|
__exportStar(require("./ValueIcon"), exports);
|
132
133
|
__exportStar(require("./ViewIcon"), exports);
|
133
134
|
__exportStar(require("./WaveIcon"), exports);
|
135
|
+
__exportStar(require("./WorkflowIcon"), exports);
|
134
136
|
//# sourceMappingURL=index.js.map
|
package/lib/icons/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAA+B;AAC/B,qDAAmC;AACnC,+CAA6B;AAC7B,8CAA4B;AAC5B,kDAAgC;AAChC,kDAAgC;AAChC,mDAAiC;AACjC,sDAAoC;AACpC,gDAA8B;AAC9B,+CAA6B;AAC7B,wDAAsC;AACtC,kDAAgC;AAChC,yDAAuC;AACvC,sDAAoC;AACpC,sDAAoC;AACpC,6DAA2C;AAC3C,wDAAsC;AACtC,uDAAqC;AACrC,wDAAsC;AACtC,sDAAoC;AACpC,0DAAwC;AACxC,kDAAgC;AAChC,6CAA2B;AAC3B,4CAA0B;AAC1B,mDAAiC;AACjC,8CAA4B;AAC5B,iDAA+B;AAC/B,sDAAoC;AACpC,6CAA2B;AAC3B,iDAA+B;AAC/B,8CAA4B;AAC5B,qDAAmC;AACnC,mDAAiC;AACjC,8CAA4B;AAC5B,8CAA4B;AAC5B,6CAA2B;AAC3B,+CAA6B;AAC7B,gDAA8B;AAC9B,kDAAgC;AAChC,oDAAkC;AAClC,gDAA8B;AAC9B,6CAA2B;AAC3B,gDAA8B;AAC9B,+CAA6B;AAC7B,oDAAkC;AAClC,6CAA2B;AAC3B,+CAA6B;AAC7B,+CAA6B;AAC7B,mDAAiC;AACjC,iDAA+B;AAC/B,iDAA+B;AAC/B,6CAA2B;AAC3B,+CAA6B;AAC7B,oDAAkC;AAClC,8CAA4B;AAC5B,+CAA6B;AAC7B,yDAAuC;AACvC,qDAAmC;AACnC,gDAA8B;AAC9B,6CAA2B;AAC3B,gDAA8B;AAC9B,iDAA+B;AAC/B,gDAA8B;AAC9B,+CAA6B;AAC7B,iDAA+B;AAC/B,oDAAkC;AAClC,kDAAgC;AAChC,oDAAkC;AAClC,gDAA8B;AAC9B,qDAAmC;AACnC,6CAA2B;AAC3B,mDAAiC;AACjC,6CAA2B;AAC3B,+CAA6B;AAC7B,6CAA2B;AAC3B,kDAAgC;AAChC,8CAA4B;AAC5B,2CAAyB;AACzB,6CAA2B;AAC3B,kDAAgC;AAChC,iDAA+B;AAC/B,4CAA0B;AAC1B,8CAA4B;AAC5B,6CAA2B;AAC3B,6CAA2B;AAC3B,+CAA6B;AAC7B,+CAA6B;AAC7B,6CAA2B;AAC3B,6CAA2B;AAC3B,kDAAgC;AAChC,kDAAgC;AAChC,+CAA6B;AAC7B,+CAA6B;AAC7B,6CAA2B;AAC3B,qDAAmC;AACnC,qDAAmC;AACnC,mDAAiC;AACjC,kDAAgC;AAChC,6CAA2B;AAC3B,6CAA2B;AAC3B,0DAAwC;AACxC,gDAA8B;AAC9B,qDAAmC;AACnC,gDAA8B;AAC9B,gDAA8B;AAC9B,4CAA0B;AAC1B,+CAA6B;AAC7B,gDAA8B;AAC9B,iDAA+B;AAC/B,6CAA2B;AAC3B,iDAA+B;AAC/B,+CAA6B;AAC7B,8CAA4B;AAC5B,4CAA0B;AAC1B,kDAAgC;AAChC,+CAA6B;AAC7B,+CAA6B;AAC7B,6CAA2B;AAC3B,8CAA4B;AAC5B,6CAA2B;AAC3B,6CAA2B"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iDAA+B;AAC/B,qDAAmC;AACnC,+CAA6B;AAC7B,8CAA4B;AAC5B,kDAAgC;AAChC,kDAAgC;AAChC,mDAAiC;AACjC,sDAAoC;AACpC,gDAA8B;AAC9B,+CAA6B;AAC7B,wDAAsC;AACtC,kDAAgC;AAChC,yDAAuC;AACvC,sDAAoC;AACpC,sDAAoC;AACpC,6DAA2C;AAC3C,wDAAsC;AACtC,uDAAqC;AACrC,wDAAsC;AACtC,sDAAoC;AACpC,0DAAwC;AACxC,kDAAgC;AAChC,6CAA2B;AAC3B,4CAA0B;AAC1B,mDAAiC;AACjC,8CAA4B;AAC5B,iDAA+B;AAC/B,sDAAoC;AACpC,6CAA2B;AAC3B,iDAA+B;AAC/B,8CAA4B;AAC5B,qDAAmC;AACnC,mDAAiC;AACjC,8CAA4B;AAC5B,8CAA4B;AAC5B,6CAA2B;AAC3B,+CAA6B;AAC7B,gDAA8B;AAC9B,kDAAgC;AAChC,oDAAkC;AAClC,gDAA8B;AAC9B,6CAA2B;AAC3B,gDAA8B;AAC9B,+CAA6B;AAC7B,oDAAkC;AAClC,6CAA2B;AAC3B,+CAA6B;AAC7B,+CAA6B;AAC7B,mDAAiC;AACjC,iDAA+B;AAC/B,iDAA+B;AAC/B,6CAA2B;AAC3B,+CAA6B;AAC7B,kDAAgC;AAChC,oDAAkC;AAClC,8CAA4B;AAC5B,+CAA6B;AAC7B,yDAAuC;AACvC,qDAAmC;AACnC,gDAA8B;AAC9B,6CAA2B;AAC3B,gDAA8B;AAC9B,iDAA+B;AAC/B,gDAA8B;AAC9B,+CAA6B;AAC7B,iDAA+B;AAC/B,oDAAkC;AAClC,kDAAgC;AAChC,oDAAkC;AAClC,gDAA8B;AAC9B,qDAAmC;AACnC,6CAA2B;AAC3B,mDAAiC;AACjC,6CAA2B;AAC3B,+CAA6B;AAC7B,6CAA2B;AAC3B,kDAAgC;AAChC,8CAA4B;AAC5B,2CAAyB;AACzB,6CAA2B;AAC3B,kDAAgC;AAChC,iDAA+B;AAC/B,4CAA0B;AAC1B,8CAA4B;AAC5B,6CAA2B;AAC3B,6CAA2B;AAC3B,+CAA6B;AAC7B,+CAA6B;AAC7B,6CAA2B;AAC3B,6CAA2B;AAC3B,kDAAgC;AAChC,kDAAgC;AAChC,+CAA6B;AAC7B,+CAA6B;AAC7B,6CAA2B;AAC3B,qDAAmC;AACnC,qDAAmC;AACnC,mDAAiC;AACjC,kDAAgC;AAChC,6CAA2B;AAC3B,6CAA2B;AAC3B,0DAAwC;AACxC,gDAA8B;AAC9B,qDAAmC;AACnC,gDAA8B;AAC9B,gDAA8B;AAC9B,4CAA0B;AAC1B,+CAA6B;AAC7B,gDAA8B;AAC9B,iDAA+B;AAC/B,6CAA2B;AAC3B,iDAA+B;AAC/B,+CAA6B;AAC7B,8CAA4B;AAC5B,4CAA0B;AAC1B,kDAAgC;AAChC,+CAA6B;AAC7B,+CAA6B;AAC7B,6CAA2B;AAC3B,8CAA4B;AAC5B,6CAA2B;AAC3B,6CAA2B;AAC3B,iDAA+B"}
|
package/package.json
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -24,7 +24,9 @@ const Container = styled.ul<AkeneoThemedProps & {invalid: boolean}>`
|
|
24
24
|
}
|
25
25
|
`;
|
26
26
|
|
27
|
-
const Chip = styled.li<
|
27
|
+
const Chip = styled.li<
|
28
|
+
AkeneoThemedProps & {isSelected: boolean; readOnly: boolean; isErrored: boolean; isLocked: boolean}
|
29
|
+
>`
|
28
30
|
list-style-type: none;
|
29
31
|
padding: 3px 15px;
|
30
32
|
padding-left: ${({readOnly}) => (readOnly ? '15px' : '4px')};
|
@@ -35,8 +37,8 @@ const Chip = styled.li<AkeneoThemedProps & {isSelected: boolean; readOnly: boole
|
|
35
37
|
align-items: center;
|
36
38
|
height: 30px;
|
37
39
|
box-sizing: border-box;
|
38
|
-
color: ${({readOnly, isErrored}) =>
|
39
|
-
isErrored ? getColor('red', 100) : readOnly ? getColor('grey', 100) : getColor('grey', 140)};
|
40
|
+
color: ${({readOnly, isErrored, isLocked}) =>
|
41
|
+
isErrored ? getColor('red', 100) : readOnly || isLocked ? getColor('grey', 100) : getColor('grey', 140)};
|
40
42
|
`;
|
41
43
|
|
42
44
|
const Input = styled.input`
|
@@ -76,6 +78,10 @@ const ReadOnlyIcon = styled(LockIcon)`
|
|
76
78
|
color: ${getColor('grey', 100)};
|
77
79
|
`;
|
78
80
|
|
81
|
+
const LockedValueIcon = styled(LockIcon)`
|
82
|
+
padding-right: 5px;
|
83
|
+
`;
|
84
|
+
|
79
85
|
const RemoveButton = styled(IconButton)<AkeneoThemedProps & {isErrored: boolean}>`
|
80
86
|
background-color: transparent;
|
81
87
|
margin-left: -3px;
|
@@ -100,6 +106,7 @@ type ChipInputProps = {
|
|
100
106
|
onRemove: (chipCode: string) => void;
|
101
107
|
onSearchChange: (searchValue: string) => void;
|
102
108
|
onFocus?: () => void;
|
109
|
+
lockedValues?: string[];
|
103
110
|
};
|
104
111
|
|
105
112
|
const ChipInput = React.forwardRef<HTMLInputElement, ChipInputProps>(
|
@@ -116,6 +123,7 @@ const ChipInput = React.forwardRef<HTMLInputElement, ChipInputProps>(
|
|
116
123
|
onRemove,
|
117
124
|
onSearchChange,
|
118
125
|
onFocus,
|
126
|
+
lockedValues,
|
119
127
|
}: ChipInputProps,
|
120
128
|
forwardedRef: Ref<HTMLInputElement>
|
121
129
|
) => {
|
@@ -148,10 +156,11 @@ const ChipInput = React.forwardRef<HTMLInputElement, ChipInputProps>(
|
|
148
156
|
<Chip
|
149
157
|
key={chip.code}
|
150
158
|
readOnly={readOnly}
|
159
|
+
isLocked={lockedValues?.includes(chip.code)}
|
151
160
|
isErrored={invalidValue.includes(chip.code)}
|
152
161
|
isSelected={index === value.length - 1 && isLastSelected}
|
153
162
|
>
|
154
|
-
{!readOnly && (
|
163
|
+
{!readOnly && !lockedValues?.includes(chip.code) && (
|
155
164
|
<RemoveButton
|
156
165
|
title={removeLabel}
|
157
166
|
ghost="borderless"
|
@@ -162,6 +171,7 @@ const ChipInput = React.forwardRef<HTMLInputElement, ChipInputProps>(
|
|
162
171
|
isErrored={invalidValue.includes(chip.code)}
|
163
172
|
/>
|
164
173
|
)}
|
174
|
+
{lockedValues?.includes(chip.code) && <LockedValueIcon size={16} />}
|
165
175
|
{chip.label}
|
166
176
|
</Chip>
|
167
177
|
))}
|
@@ -102,6 +102,30 @@ The placeholder text provides tips or examples of items to enter. Placeholder te
|
|
102
102
|
</Story>
|
103
103
|
</Canvas>
|
104
104
|
|
105
|
+
## Variation on locked values
|
106
|
+
|
107
|
+
<Canvas>
|
108
|
+
<Story name="LockedValues">
|
109
|
+
{args => {
|
110
|
+
const [value, setValue] = useState(['en_US', 'fr_FR', 'de_DE']);
|
111
|
+
return (
|
112
|
+
<MultiSelectInput
|
113
|
+
value={value}
|
114
|
+
placeholder="Placeholder"
|
115
|
+
emptyResultLabel="No match found"
|
116
|
+
lockedValues={['en_US', 'fr_FR']}
|
117
|
+
onChange={setValue}
|
118
|
+
>
|
119
|
+
<MultiSelectInput.Option value="en_US">English (United States)</MultiSelectInput.Option>
|
120
|
+
<MultiSelectInput.Option value="fr_FR">French (France)</MultiSelectInput.Option>
|
121
|
+
<MultiSelectInput.Option value="de_DE">German (Germany)</MultiSelectInput.Option>
|
122
|
+
<MultiSelectInput.Option value="es_ES">Spanish (Spain)</MultiSelectInput.Option>
|
123
|
+
</MultiSelectInput>
|
124
|
+
);
|
125
|
+
}}
|
126
|
+
</Story>
|
127
|
+
</Canvas>
|
128
|
+
|
105
129
|
## Variation on invalid
|
106
130
|
|
107
131
|
<Canvas>
|
@@ -146,6 +146,11 @@ type MultiMultiSelectInputProps = Override<
|
|
146
146
|
*/
|
147
147
|
verticalPosition?: VerticalPosition;
|
148
148
|
|
149
|
+
/**
|
150
|
+
* Values that cannot be unselected
|
151
|
+
*/
|
152
|
+
lockedValues?: string[];
|
153
|
+
|
149
154
|
/**
|
150
155
|
* Callback called when the user hit enter on the field.
|
151
156
|
*/
|
@@ -191,6 +196,7 @@ const MultiSelectInput = ({
|
|
191
196
|
onNextPage,
|
192
197
|
onSearchChange,
|
193
198
|
disableInternalSearch = false,
|
199
|
+
lockedValues = [],
|
194
200
|
'aria-labelledby': ariaLabelledby,
|
195
201
|
...rest
|
196
202
|
}: MultiMultiSelectInputProps) => {
|
@@ -289,6 +295,7 @@ const MultiSelectInput = ({
|
|
289
295
|
onSearchChange={handleSearch}
|
290
296
|
onRemove={handleRemove}
|
291
297
|
onFocus={handleFocus}
|
298
|
+
lockedValues={lockedValues}
|
292
299
|
/>
|
293
300
|
{!readOnly && (
|
294
301
|
<ActionContainer>
|
@@ -326,6 +326,26 @@ test('MultiSelectInput supports ...rest props', () => {
|
|
326
326
|
expect(screen.getByTestId('my_value')).toBeInTheDocument();
|
327
327
|
});
|
328
328
|
|
329
|
+
test('MultiSelectInput supports locked values prop', () => {
|
330
|
+
const onChange = jest.fn();
|
331
|
+
render(
|
332
|
+
<MultiSelectInput
|
333
|
+
value={['fr_FR', 'en_US']}
|
334
|
+
data-testid="my_value"
|
335
|
+
removeLabel="Remove"
|
336
|
+
openLabel="Open"
|
337
|
+
emptyResultLabel="Empty result"
|
338
|
+
onChange={onChange}
|
339
|
+
lockedValues={['fr_FR']}
|
340
|
+
>
|
341
|
+
<MultiSelectInput.Option value="en_US">English</MultiSelectInput.Option>
|
342
|
+
<MultiSelectInput.Option value="fr_FR">French</MultiSelectInput.Option>
|
343
|
+
<MultiSelectInput.Option value="es_ES">Spanish</MultiSelectInput.Option>
|
344
|
+
</MultiSelectInput>
|
345
|
+
);
|
346
|
+
expect(screen.getByTestId('my_value')).toBeInTheDocument();
|
347
|
+
});
|
348
|
+
|
329
349
|
test('MultiSelectInput does not support duplicated options', () => {
|
330
350
|
const mockConsole = jest.spyOn(console, 'error').mockImplementation();
|
331
351
|
expect(() => {
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import {Meta, Story, ArgsTable, Canvas} from '@storybook/addon-docs';
|
2
2
|
import {KeyFigure, KeyFigureGrid} from './KeyFigure';
|
3
3
|
import * as Icons from '../../icons';
|
4
|
+
import {Tooltip} from '../Tooltip/Tooltip';
|
4
5
|
|
5
6
|
<Meta
|
6
7
|
title="Components/KeyFigure"
|
@@ -71,7 +72,10 @@ Key figures are used in dashboards to illustrate metrics.
|
|
71
72
|
<KeyFigure.Figure>123</KeyFigure.Figure>
|
72
73
|
</KeyFigure>
|
73
74
|
<KeyFigure icon={React.createElement(Icons[args.icon])} title="Key figure 3">
|
74
|
-
<KeyFigure.Figure>
|
75
|
+
<KeyFigure.Figure>
|
76
|
+
456
|
77
|
+
<Tooltip iconSize={16}>More informations on this figure</Tooltip>
|
78
|
+
</KeyFigure.Figure>
|
75
79
|
</KeyFigure>
|
76
80
|
<KeyFigure icon={React.createElement(Icons[args.icon])} title="Key figure 4">
|
77
81
|
<KeyFigure.Figure label="Average:">789454</KeyFigure.Figure>
|
@@ -14,11 +14,8 @@ const progressBarAnimation = keyframes`
|
|
14
14
|
|
15
15
|
const Header = styled.div`
|
16
16
|
display: flex;
|
17
|
-
align-items: stretch;
|
18
|
-
flex-direction: row;
|
19
17
|
font-size: ${getFontSize('default')};
|
20
|
-
|
21
|
-
margin-bottom: -4px;
|
18
|
+
justify-content: space-between;
|
22
19
|
`;
|
23
20
|
|
24
21
|
const Title = styled.div`
|
@@ -27,24 +24,11 @@ const Title = styled.div`
|
|
27
24
|
white-space: nowrap;
|
28
25
|
overflow: hidden;
|
29
26
|
text-overflow: ellipsis;
|
30
|
-
max-width: 100%;
|
31
|
-
flex-grow: 1;
|
32
|
-
margin-bottom: 4px;
|
33
|
-
|
34
|
-
/* When header div is greater than 300px the flex-basic is negative, progress label is on same line */
|
35
|
-
/* When header div is lower than 300px the flex-basic is positive, progress label is move to new line */
|
36
|
-
flex-basis: calc((301px - 100%) * 999);
|
37
27
|
`;
|
38
28
|
|
39
29
|
const ProgressLabel = styled.div`
|
40
30
|
color: ${getColor('grey', 120)};
|
41
|
-
flex-grow: 0;
|
42
|
-
flex-basis: auto;
|
43
|
-
flex-shrink: 1;
|
44
|
-
margin-bottom: 4px;
|
45
31
|
white-space: nowrap;
|
46
|
-
overflow: hidden;
|
47
|
-
text-overflow: ellipsis;
|
48
32
|
`;
|
49
33
|
|
50
34
|
const ProgressBarBackground = styled.div<{size: ProgressBarSize} & AkeneoThemedProps>`
|
@@ -177,11 +161,9 @@ const ProgressBar = forwardRef<HTMLDivElement, ProgressBarProps>(
|
|
177
161
|
<ProgressBarContainer ref={forwardedRef} {...rest}>
|
178
162
|
{(title || progressLabel) && (
|
179
163
|
<Header>
|
180
|
-
{title
|
181
|
-
|
182
|
-
|
183
|
-
</Title>
|
184
|
-
)}
|
164
|
+
<Title title={title} id={labelId} htmlFor={progressBarId}>
|
165
|
+
{title}
|
166
|
+
</Title>
|
185
167
|
{progressLabel && <ProgressLabel title={progressLabel}>{progressLabel}</ProgressLabel>}
|
186
168
|
</Header>
|
187
169
|
)}
|
@@ -112,7 +112,7 @@ const SwitcherButton = forwardRef<HTMLDivElement, SwitcherButtonProps>(
|
|
112
112
|
|
113
113
|
return (
|
114
114
|
<SwitcherButtonContainer ref={forwardedRef} {...rest}>
|
115
|
-
<LabelAndValueContainer id={buttonId} onClick={onClick} $inline={inline}>
|
115
|
+
<LabelAndValueContainer type="button" id={buttonId} onClick={onClick} $inline={inline}>
|
116
116
|
<Label htmlFor={buttonId} $inline={inline}>
|
117
117
|
{label ? (inline ? `${label}:` : label) : ''}
|
118
118
|
</Label>
|
@@ -487,14 +487,14 @@ If you want your `Table.Header` to stay on top when scrolling in the Table, just
|
|
487
487
|
</Story>
|
488
488
|
</Canvas>
|
489
489
|
|
490
|
-
## Table with warning rows
|
490
|
+
## Table with warning and locked rows
|
491
491
|
|
492
492
|
<Canvas>
|
493
|
-
<Story name="Warning rows">
|
493
|
+
<Story name="Warning and locked rows">
|
494
494
|
{args => {
|
495
495
|
return (
|
496
496
|
<Scrollable height={250}>
|
497
|
-
<Table hasWarningRows={true}>
|
497
|
+
<Table hasWarningRows={true} hasLockedRows={true}>
|
498
498
|
<Table.Header sticky={0}>
|
499
499
|
<Table.HeaderCell>Name</Table.HeaderCell>
|
500
500
|
<Table.HeaderCell>Family</Table.HeaderCell>
|
@@ -504,6 +504,20 @@ If you want your `Table.Header` to stay on top when scrolling in the Table, just
|
|
504
504
|
<Table.HeaderCell>Actions</Table.HeaderCell>
|
505
505
|
</Table.Header>
|
506
506
|
<Table.Body>
|
507
|
+
<Table.Row level="tertiary">
|
508
|
+
<Table.Cell rowTitle={args.displayRowTitle}>Giant panda</Table.Cell>
|
509
|
+
<Table.Cell>Ursidae</Table.Cell>
|
510
|
+
<Table.Cell>Carnivora</Table.Cell>
|
511
|
+
<Table.Cell>Ursus</Table.Cell>
|
512
|
+
<Table.Cell>
|
513
|
+
<Badge level="warning">vu</Badge>
|
514
|
+
</Table.Cell>
|
515
|
+
<Table.ActionCell>
|
516
|
+
<Button level="primary" ghost>
|
517
|
+
Button
|
518
|
+
</Button>
|
519
|
+
</Table.ActionCell>
|
520
|
+
</Table.Row>
|
507
521
|
<Table.Row level="warning">
|
508
522
|
<Table.Cell rowTitle={args.displayRowTitle}>Giant panda</Table.Cell>
|
509
523
|
<Table.Cell>Ursidae</Table.Cell>
|
@@ -27,6 +27,11 @@ type TableProps = Override<
|
|
27
27
|
*/
|
28
28
|
hasWarningRows?: boolean;
|
29
29
|
|
30
|
+
/**
|
31
|
+
* Define if the table has some locked rows.
|
32
|
+
*/
|
33
|
+
hasLockedRows?: boolean;
|
34
|
+
|
30
35
|
/**
|
31
36
|
* Define if the checkbox should be always displayed or displayed on hover.
|
32
37
|
* This props should be true when one element is checked.
|
@@ -66,6 +71,7 @@ type TableProps = Override<
|
|
66
71
|
const Table = ({
|
67
72
|
isSelectable = false,
|
68
73
|
hasWarningRows = false,
|
74
|
+
hasLockedRows = false,
|
69
75
|
displayCheckbox = false,
|
70
76
|
isDragAndDroppable = false,
|
71
77
|
onReorder = undefined,
|
@@ -73,8 +79,8 @@ const Table = ({
|
|
73
79
|
...rest
|
74
80
|
}: TableProps) => {
|
75
81
|
const providerValue = useMemo(
|
76
|
-
() => ({isSelectable, hasWarningRows, displayCheckbox, isDragAndDroppable, onReorder}),
|
77
|
-
[isSelectable, hasWarningRows, displayCheckbox, isDragAndDroppable, onReorder]
|
82
|
+
() => ({isSelectable, hasWarningRows, hasLockedRows, displayCheckbox, isDragAndDroppable, onReorder}),
|
83
|
+
[isSelectable, hasWarningRows, hasLockedRows, displayCheckbox, isDragAndDroppable, onReorder]
|
78
84
|
);
|
79
85
|
|
80
86
|
return (
|
@@ -3,6 +3,7 @@ import {createContext} from 'react';
|
|
3
3
|
type TableContextType = {
|
4
4
|
isSelectable: boolean;
|
5
5
|
hasWarningRows: boolean;
|
6
|
+
hasLockedRows: boolean;
|
6
7
|
displayCheckbox: boolean;
|
7
8
|
isDragAndDroppable: boolean;
|
8
9
|
onReorder: ((reorderedIndices: number[]) => void) | undefined;
|
@@ -11,6 +12,7 @@ type TableContextType = {
|
|
11
12
|
const TableContext = createContext<TableContextType>({
|
12
13
|
isSelectable: false,
|
13
14
|
hasWarningRows: false,
|
15
|
+
hasLockedRows: false,
|
14
16
|
displayCheckbox: false,
|
15
17
|
isDragAndDroppable: false,
|
16
18
|
onReorder: undefined,
|
@@ -23,6 +23,10 @@ const HasWarningColumn = styled.th`
|
|
23
23
|
width: 20px;
|
24
24
|
background: linear-gradient(to top, ${getColor('grey', 120)} 1px, ${getColor('white')} 0px);
|
25
25
|
`;
|
26
|
+
const HasLockedColumn = styled.th`
|
27
|
+
width: 20px;
|
28
|
+
background: linear-gradient(to top, ${getColor('grey', 120)} 1px, ${getColor('white')} 0px);
|
29
|
+
`;
|
26
30
|
const OrderColumn = styled.th`
|
27
31
|
width: 40px;
|
28
32
|
background: linear-gradient(to top, ${getColor('grey', 120)} 1px, ${getColor('white')} 0px);
|
@@ -42,7 +46,7 @@ type TableHeaderProps = {
|
|
42
46
|
|
43
47
|
const TableHeader = React.forwardRef<HTMLTableSectionElement, TableHeaderProps>(
|
44
48
|
({children, sticky, ...rest}: TableHeaderProps, forwardedRef: Ref<HTMLTableSectionElement>) => {
|
45
|
-
const {isSelectable, isDragAndDroppable, hasWarningRows} = React.useContext(TableContext);
|
49
|
+
const {isSelectable, isDragAndDroppable, hasWarningRows, hasLockedRows} = React.useContext(TableContext);
|
46
50
|
|
47
51
|
return (
|
48
52
|
<TableHead sticky={sticky} ref={forwardedRef}>
|
@@ -52,6 +56,7 @@ const TableHeader = React.forwardRef<HTMLTableSectionElement, TableHeaderProps>(
|
|
52
56
|
{hasWarningRows && <HasWarningColumn />}
|
53
57
|
{isDragAndDroppable && <OrderColumn />}
|
54
58
|
{children}
|
59
|
+
{hasLockedRows && <HasLockedColumn />}
|
55
60
|
</tr>
|
56
61
|
</TableHead>
|
57
62
|
);
|
@@ -14,10 +14,10 @@ import {Checkbox} from '../../../components';
|
|
14
14
|
import {Override} from '../../../shared';
|
15
15
|
import {TableContext} from '../TableContext';
|
16
16
|
import {TableCell} from '../TableCell/TableCell';
|
17
|
-
import {RowIcon, DangerIcon} from '../../../icons';
|
17
|
+
import {RowIcon, DangerIcon, LockIcon} from '../../../icons';
|
18
18
|
import {PlaceholderPosition, usePlaceholderPosition} from '../../../hooks/usePlaceholderPosition';
|
19
19
|
|
20
|
-
type Level = 'warning';
|
20
|
+
type Level = 'warning' | 'tertiary';
|
21
21
|
|
22
22
|
const RowContainer = styled.tr<
|
23
23
|
{
|
@@ -78,15 +78,22 @@ const RowContainer = styled.tr<
|
|
78
78
|
}
|
79
79
|
|
80
80
|
${({level}) =>
|
81
|
-
level === 'warning'
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
81
|
+
level === 'warning'
|
82
|
+
? css`
|
83
|
+
> td {
|
84
|
+
:first-child {
|
85
|
+
padding: 0 0 0 5px;
|
86
|
+
}
|
87
|
+
background-color: ${getColor('yellow', 10)};
|
88
|
+
}
|
89
|
+
`
|
90
|
+
: level === 'tertiary' &&
|
91
|
+
css`
|
92
|
+
> td {
|
93
|
+
background-color: ${getColor('grey', 20)};
|
94
|
+
color: ${getColor('grey', 120)};
|
95
|
+
}
|
96
|
+
`};
|
90
97
|
`;
|
91
98
|
|
92
99
|
const CheckboxContainer = styled.td<{isVisible: boolean}>`
|
@@ -112,6 +119,15 @@ const HandleCell = styled(TableCell)`
|
|
112
119
|
}
|
113
120
|
`;
|
114
121
|
|
122
|
+
const getIcon = (level: Level) => {
|
123
|
+
switch (level) {
|
124
|
+
case 'warning':
|
125
|
+
return <WarningIcon />;
|
126
|
+
case 'tertiary':
|
127
|
+
return <LockIcon />;
|
128
|
+
}
|
129
|
+
};
|
130
|
+
|
115
131
|
const WarningIcon = styled(DangerIcon)`
|
116
132
|
color: ${getColor('yellow', 120)};
|
117
133
|
`;
|
@@ -180,7 +196,7 @@ const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(
|
|
180
196
|
const [placeholderPosition, placeholderDragEnter, placeholderDragLeave, placeholderDragEnd] =
|
181
197
|
usePlaceholderPosition(rowIndex);
|
182
198
|
|
183
|
-
const {isSelectable, displayCheckbox, isDragAndDroppable, hasWarningRows} = useContext(TableContext);
|
199
|
+
const {isSelectable, displayCheckbox, isDragAndDroppable, hasWarningRows, hasLockedRows} = useContext(TableContext);
|
184
200
|
if (isSelectable && (undefined === isSelected || undefined === onSelectToggle)) {
|
185
201
|
throw Error('A row in a selectable table should have the prop "isSelected" and "onSelectToggle"');
|
186
202
|
}
|
@@ -240,8 +256,17 @@ const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(
|
|
240
256
|
<RowIcon size={16} />
|
241
257
|
</HandleCell>
|
242
258
|
)}
|
243
|
-
{hasWarningRows &&
|
259
|
+
{hasWarningRows && (
|
260
|
+
<TableCell>
|
261
|
+
{level === 'warning' && React.cloneElement(getIcon(level), {size: 16, 'data-testid': 'warning-icon'})}
|
262
|
+
</TableCell>
|
263
|
+
)}
|
244
264
|
{children}
|
265
|
+
{hasLockedRows && (
|
266
|
+
<TableCell>
|
267
|
+
{level === 'tertiary' && React.cloneElement(getIcon(level), {size: 16, 'data-testid': 'lock-icon'})}
|
268
|
+
</TableCell>
|
269
|
+
)}
|
245
270
|
</RowContainer>
|
246
271
|
);
|
247
272
|
}
|
@@ -101,3 +101,33 @@ test('Table.Row supports ...rest props', () => {
|
|
101
101
|
|
102
102
|
expect(screen.getByTestId('my_value')).toBeInTheDocument();
|
103
103
|
});
|
104
|
+
|
105
|
+
test('it renders warning icon when row has a warning', () => {
|
106
|
+
render(
|
107
|
+
<Table hasWarningRows>
|
108
|
+
<Table.Body>
|
109
|
+
<Table.Row level="warning">
|
110
|
+
<Table.Cell>A value</Table.Cell>
|
111
|
+
<Table.Cell>Another value</Table.Cell>
|
112
|
+
</Table.Row>
|
113
|
+
</Table.Body>
|
114
|
+
</Table>
|
115
|
+
);
|
116
|
+
|
117
|
+
expect(screen.getByTestId('warning-icon')).toBeInTheDocument();
|
118
|
+
});
|
119
|
+
|
120
|
+
test('it renders lock icon when row is locked', () => {
|
121
|
+
render(
|
122
|
+
<Table hasLockedRows>
|
123
|
+
<Table.Body>
|
124
|
+
<Table.Row level="tertiary">
|
125
|
+
<Table.Cell>A value</Table.Cell>
|
126
|
+
<Table.Cell>Another value</Table.Cell>
|
127
|
+
</Table.Row>
|
128
|
+
</Table.Body>
|
129
|
+
</Table>
|
130
|
+
);
|
131
|
+
|
132
|
+
expect(screen.getByTestId('lock-icon')).toBeInTheDocument();
|
133
|
+
});
|