akeneo-design-system 0.1.239 → 0.1.241
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/jest.unit.config.js +8 -7
- package/lib/components/Image/Image.d.ts +3 -1
- package/lib/components/Image/Image.js +8 -4
- package/lib/components/Image/Image.js.map +1 -1
- package/lib/components/Input/TableInput/TableInput.d.ts +2 -3
- package/lib/components/Input/TableInput/TableInput.js +3 -1
- package/lib/components/Input/TableInput/TableInput.js.map +1 -1
- package/lib/components/Input/TableInput/TableInputBody/TableInputBody.js +4 -6
- package/lib/components/Input/TableInput/TableInputBody/TableInputBody.js.map +1 -1
- package/lib/components/Input/TableInput/TableInputContext.d.ts +1 -1
- package/lib/components/Input/TableInput/TableInputRow/TableInputRow.d.ts +1 -5
- package/lib/components/Input/TableInput/TableInputRow/TableInputRow.js +7 -5
- package/lib/components/Input/TableInput/TableInputRow/TableInputRow.js.map +1 -1
- package/lib/components/ProgressIndicator/ProgressIndicator.d.ts +1 -1
- package/lib/components/Table/Table.d.ts +3 -4
- package/lib/components/Table/Table.js +3 -1
- package/lib/components/Table/Table.js.map +1 -1
- package/lib/components/Table/TableBody/TableBody.js +4 -6
- package/lib/components/Table/TableBody/TableBody.js.map +1 -1
- package/lib/components/Table/TableContext.d.ts +1 -1
- package/lib/components/Table/TableRow/TableRow.d.ts +1 -5
- package/lib/components/Table/TableRow/TableRow.js +7 -3
- package/lib/components/Table/TableRow/TableRow.js.map +1 -1
- package/lib/contexts/DraggedElementContext.d.ts +11 -0
- package/lib/contexts/DraggedElementContext.js +23 -0
- package/lib/contexts/DraggedElementContext.js.map +1 -0
- package/lib/hooks/useDrop.d.ts +1 -1
- package/lib/hooks/useDrop.js +6 -1
- package/lib/hooks/useDrop.js.map +1 -1
- package/lib/hooks/usePlaceholderPosition.js +6 -6
- package/lib/hooks/usePlaceholderPosition.js.map +1 -1
- package/package.json +1 -1
- package/src/__image_snapshots__/all-visual-tsx-visual-tests-renders-components-image-background-correctly-1-snap.png +0 -0
- package/src/components/Image/Image.stories.mdx +18 -0
- package/src/components/Image/Image.tsx +27 -2
- package/src/components/Input/TableInput/TableInput.tsx +7 -3
- package/src/components/Input/TableInput/TableInput.unit.tsx +2 -2
- package/src/components/Input/TableInput/TableInputBody/TableInputBody.tsx +2 -4
- package/src/components/Input/TableInput/TableInputContext.ts +1 -1
- package/src/components/Input/TableInput/TableInputRow/TableInputRow.tsx +7 -15
- package/src/components/Table/Table.tsx +6 -2
- package/src/components/Table/Table.unit.tsx +1 -1
- package/src/components/Table/TableBody/TableBody.tsx +2 -4
- package/src/components/Table/TableContext.ts +1 -1
- package/src/components/Table/TableRow/TableRow.tsx +7 -24
- package/src/contexts/DraggedElementContext.tsx +27 -0
- package/src/hooks/useDrop.ts +6 -2
- package/src/hooks/useDrop.unit.tsx +39 -1
- package/src/hooks/usePlaceholderPosition.ts +6 -6
- package/src/hooks/usePlaceholderPosition.unit.ts +7 -1
package/jest.unit.config.js
CHANGED
|
@@ -3,7 +3,7 @@ module.exports = {
|
|
|
3
3
|
moduleFileExtensions: ['js', 'ts', 'tsx'],
|
|
4
4
|
moduleDirectories: ['node_modules', 'src'],
|
|
5
5
|
moduleNameMapper: {
|
|
6
|
-
|
|
6
|
+
'\\.(jpg|ico|jpeg|png|gif|svg|css)$': '<rootDir>/__mocks__/fileMock.js',
|
|
7
7
|
},
|
|
8
8
|
roots: ['<rootDir>'],
|
|
9
9
|
setupFilesAfterEnv: ['@testing-library/jest-dom/extend-expect'],
|
|
@@ -18,12 +18,13 @@ module.exports = {
|
|
|
18
18
|
collectCoverageFrom: ['src/**/*.ts?(x)', '!**/*.visual.ts?(x)'],
|
|
19
19
|
cacheDirectory: '/tmp/jest',
|
|
20
20
|
coveragePathIgnorePatterns: [
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
'src/illustrations',
|
|
22
|
+
'src/icons',
|
|
23
|
+
'src/theme',
|
|
24
|
+
'src/storybook',
|
|
25
|
+
'generator',
|
|
26
|
+
'src/shared/PreviewGallery',
|
|
27
|
+
'src/contexts',
|
|
27
28
|
],
|
|
28
29
|
coverageReporters: ['text-summary', 'html'],
|
|
29
30
|
coverageDirectory: 'coverage',
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
declare type Fit = 'cover' | 'contain';
|
|
3
|
-
declare
|
|
3
|
+
declare type Background = 'white' | 'checkerboard';
|
|
4
|
+
declare const Image: React.ForwardRefExoticComponent<Omit<React.ImgHTMLAttributes<HTMLImageElement>, "height" | "width" | "alt" | "src" | "fit" | "isStacked" | "background"> & {
|
|
4
5
|
src: string | null;
|
|
5
6
|
alt: string;
|
|
6
7
|
width?: number | undefined;
|
|
7
8
|
height?: number | undefined;
|
|
8
9
|
fit?: Fit | undefined;
|
|
9
10
|
isStacked?: boolean | undefined;
|
|
11
|
+
background?: Background | undefined;
|
|
10
12
|
} & React.RefAttributes<HTMLImageElement>>;
|
|
11
13
|
export { Image };
|
|
@@ -53,7 +53,7 @@ var react_1 = __importDefault(require("react"));
|
|
|
53
53
|
var styled_components_1 = __importStar(require("styled-components"));
|
|
54
54
|
var theme_1 = require("../../theme");
|
|
55
55
|
var EMPTY_IMAGE = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg"/>';
|
|
56
|
-
var ImageContainer = styled_components_1.default.img(
|
|
56
|
+
var ImageContainer = styled_components_1.default.img(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n border: 1px solid ", ";\n object-fit: ", ";\n box-sizing: border-box;\n\n ", "\n\n ", "\n \n ", "\n"], ["\n border: 1px solid ", ";\n object-fit: ", ";\n box-sizing: border-box;\n\n ", "\n\n ", "\n \n ", "\n"])), (0, theme_1.getColor)('grey', 80), function (_a) {
|
|
57
57
|
var fit = _a.fit;
|
|
58
58
|
return fit;
|
|
59
59
|
}, function (_a) {
|
|
@@ -62,11 +62,15 @@ var ImageContainer = styled_components_1.default.img(templateObject_2 || (templa
|
|
|
62
62
|
}, function (_a) {
|
|
63
63
|
var isLoading = _a.isLoading;
|
|
64
64
|
return isLoading && theme_1.placeholderStyle;
|
|
65
|
+
}, function (_a) {
|
|
66
|
+
var background = _a.background;
|
|
67
|
+
return background === 'checkerboard'
|
|
68
|
+
? (0, styled_components_1.css)(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n background-image: linear-gradient(45deg, ", " 25%, transparent 25%),\n linear-gradient(135deg, ", " 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, ", " 75%),\n linear-gradient(135deg, transparent 75%, ", " 75%);\n background-size: 25px 25px; /* Must be a square */\n background-position: 0 0, 12.5px 0, 12.5px -12.5px, 0px 12.5px; /* Must be half of one side of the square */\n "], ["\n background-image: linear-gradient(45deg, ", " 25%, transparent 25%),\n linear-gradient(135deg, ", " 25%, transparent 25%),\n linear-gradient(45deg, transparent 75%, ", " 75%),\n linear-gradient(135deg, transparent 75%, ", " 75%);\n background-size: 25px 25px; /* Must be a square */\n background-position: 0 0, 12.5px 0, 12.5px -12.5px, 0px 12.5px; /* Must be half of one side of the square */\n "])), (0, theme_1.getColor)('grey', 60), (0, theme_1.getColor)('grey', 60), (0, theme_1.getColor)('grey', 60), (0, theme_1.getColor)('grey', 60)) : (0, styled_components_1.css)(templateObject_3 || (templateObject_3 = __makeTemplateObject(["\n background: ", ";\n "], ["\n background: ", ";\n "])), (0, theme_1.getColor)(background));
|
|
65
69
|
});
|
|
66
70
|
var Image = react_1.default.forwardRef(function (_a, forwardedRef) {
|
|
67
|
-
var _b = _a.fit, fit = _b === void 0 ? 'cover' : _b, _c = _a.isStacked, isStacked = _c === void 0 ? false : _c, src = _a.src, rest = __rest(_a, ["fit", "isStacked", "src"]);
|
|
68
|
-
return (react_1.default.createElement(ImageContainer, __assign({ isLoading: null === src, src: src !== null && src !== void 0 ? src : EMPTY_IMAGE, ref: forwardedRef, fit: fit, isStacked: isStacked }, rest)));
|
|
71
|
+
var _b = _a.fit, fit = _b === void 0 ? 'cover' : _b, _c = _a.isStacked, isStacked = _c === void 0 ? false : _c, _d = _a.background, background = _d === void 0 ? 'white' : _d, src = _a.src, rest = __rest(_a, ["fit", "isStacked", "background", "src"]);
|
|
72
|
+
return (react_1.default.createElement(ImageContainer, __assign({ isLoading: null === src, src: src !== null && src !== void 0 ? src : EMPTY_IMAGE, ref: forwardedRef, fit: fit, isStacked: isStacked, background: background }, rest)));
|
|
69
73
|
});
|
|
70
74
|
exports.Image = Image;
|
|
71
|
-
var templateObject_1, templateObject_2;
|
|
75
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4;
|
|
72
76
|
//# sourceMappingURL=Image.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.js","sourceRoot":"","sources":["../../../src/components/Image/Image.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAiC;AACjC,qEAA8C;AAC9C,qCAAuD;AAIvD,IAAM,WAAW,GAAG,8DAA8D,CAAC;
|
|
1
|
+
{"version":3,"file":"Image.js","sourceRoot":"","sources":["../../../src/components/Image/Image.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAiC;AACjC,qEAA8C;AAC9C,qCAAuD;AAIvD,IAAM,WAAW,GAAG,8DAA8D,CAAC;AAMnF,IAAM,cAAc,GAAG,2BAAM,CAAC,GAAG,kLAOhC,wBACqB,EAAoB,mBAC1B,EAAc,oCAG1B,EAKC,QAED,EAA8C,UAE9C,EAYK,IACR,KA1BqB,IAAA,gBAAQ,EAAC,MAAM,EAAE,EAAE,CAAC,EAC1B,UAAC,EAAK;QAAJ,GAAG,SAAA;IAAM,OAAA,GAAG;AAAH,CAAG,EAG1B,UAAC,EAAW;QAAV,SAAS,eAAA;IACX,OAAA,SAAS,QACT,uBAAG,oLAAA,mCAC0B,EAAiB,iBAAkB,EAAoB,0BACjE,EAAiB,iBAAkB,EAAoB,SACzE,KAF4B,IAAA,gBAAQ,EAAC,OAAO,CAAC,EAAkB,IAAA,gBAAQ,EAAC,MAAM,EAAE,EAAE,CAAC,EACjE,IAAA,gBAAQ,EAAC,OAAO,CAAC,EAAkB,IAAA,gBAAQ,EAAC,MAAM,EAAE,EAAE,CAAC,CACzE;AAJD,CAIC,EAED,UAAC,EAAW;QAAV,SAAS,eAAA;IAAM,OAAA,SAAS,IAAI,wBAAgB;AAA7B,CAA6B,EAE9C,UAAC,EAAY;QAAX,UAAU,gBAAA;IACZ,OAAA,UAAU,KAAK,cAAc;QAC3B,CAAC,KAAC,uBAAG,whBAAA,uDAC0C,EAAoB,+DACnC,EAAoB,+EACJ,EAAoB,+DACnB,EAAoB,wMAGlE,KAN4C,IAAA,gBAAQ,EAAC,MAAM,EAAE,EAAE,CAAC,EACnC,IAAA,gBAAQ,EAAC,MAAM,EAAE,EAAE,CAAC,EACJ,IAAA,gBAAQ,EAAC,MAAM,EAAE,EAAE,CAAC,EACnB,IAAA,gBAAQ,EAAC,MAAM,EAAE,EAAE,CAAC,EAIrE,CAAC,KAAC,uBAAG,6GAAA,0BACa,EAAoB,aACnC,KADe,IAAA,gBAAQ,EAAC,UAAU,CAAC,CACnC;AAXL,CAWK,CACR,CAAC;AA6CF,IAAM,KAAK,GAAG,eAAK,CAAC,UAAU,CAC5B,UACE,EAAkF,EAClF,YAAmC;IADlC,IAAA,WAAa,EAAb,GAAG,mBAAG,OAAO,KAAA,EAAE,iBAAiB,EAAjB,SAAS,mBAAG,KAAK,KAAA,EAAE,kBAAoB,EAApB,UAAU,mBAAG,OAAO,KAAA,EAAE,GAAG,SAAA,EAAK,IAAI,cAArE,yCAAsE,CAAD;IAGrE,OAAO,CACL,8BAAC,cAAc,aACb,SAAS,EAAE,IAAI,KAAK,GAAG,EACvB,GAAG,EAAE,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,WAAW,EACvB,GAAG,EAAE,YAAY,EACjB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,IAClB,IAAI,EACR,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AAEM,sBAAK"}
|
|
@@ -15,12 +15,10 @@ declare const TableInput: {
|
|
|
15
15
|
Body: React.ForwardRefExoticComponent<{
|
|
16
16
|
children?: React.ReactNode;
|
|
17
17
|
} & React.RefAttributes<HTMLTableSectionElement>>;
|
|
18
|
-
Row: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLTableRowElement>, "children" | "
|
|
18
|
+
Row: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLTableRowElement>, "children" | "highlighted" | "rowIndex"> & {
|
|
19
19
|
children?: React.ReactNode;
|
|
20
20
|
highlighted?: boolean | undefined;
|
|
21
21
|
rowIndex?: number | undefined;
|
|
22
|
-
onDragStart?: ((rowIndex: number) => void) | undefined;
|
|
23
|
-
onDragEnd?: (() => void) | undefined;
|
|
24
22
|
} & React.RefAttributes<HTMLTableRowElement>>;
|
|
25
23
|
Cell: React.ForwardRefExoticComponent<React.TdHTMLAttributes<HTMLTableCellElement> & React.RefAttributes<HTMLTableCellElement>>;
|
|
26
24
|
CellContent: {
|
|
@@ -87,3 +85,4 @@ declare const TableInput: {
|
|
|
87
85
|
}>;
|
|
88
86
|
};
|
|
89
87
|
export { TableInput };
|
|
88
|
+
export type { TableInputProps };
|
|
@@ -64,6 +64,7 @@ var TableInputSelect_1 = require("./TableInputSelect/TableInputSelect");
|
|
|
64
64
|
var TableInputContext_1 = require("./TableInputContext");
|
|
65
65
|
var TableInputCellContent_1 = require("./TableInputCellContent/TableInputCellContent");
|
|
66
66
|
var TableInputMeasurement_1 = require("./TableInputMeasurement/TableInputMeasurement");
|
|
67
|
+
var DraggedElementContext_1 = require("../../../contexts/DraggedElementContext");
|
|
67
68
|
var TableInputContainer = styled_components_1.default.div(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n width: 100%;\n overflow: auto;\n"], ["\n width: 100%;\n overflow: auto;\n"])));
|
|
68
69
|
var TableInputTable = styled_components_1.default.table(templateObject_4 || (templateObject_4 = __makeTemplateObject(["\n border-spacing: 0;\n width: 100%;\n\n & th:first-child {\n transition: box-shadow 0.15s;\n }\n &.shadowed th:first-child {\n box-shadow: rgba(0, 0, 0, 0.2) 0px 7.5px 15px 0px;\n }\n\n ", "\n"], ["\n border-spacing: 0;\n width: 100%;\n\n & th:first-child {\n transition: box-shadow 0.15s;\n }\n &.shadowed th:first-child {\n box-shadow: rgba(0, 0, 0, 0.2) 0px 7.5px 15px 0px;\n }\n\n ", "\n"])), function (_a) {
|
|
69
70
|
var isDragAndDroppable = _a.isDragAndDroppable;
|
|
@@ -78,7 +79,8 @@ var TableInput = function (_a) {
|
|
|
78
79
|
};
|
|
79
80
|
return (react_1.default.createElement(TableInputContext_1.TableInputContext.Provider, { value: { readOnly: readOnly, isDragAndDroppable: isDragAndDroppable, onReorder: onReorder } },
|
|
80
81
|
react_1.default.createElement(TableInputContainer, __assign({ onScroll: handleScroll }, rest),
|
|
81
|
-
react_1.default.createElement(
|
|
82
|
+
react_1.default.createElement(DraggedElementContext_1.DraggedElementProvider, null,
|
|
83
|
+
react_1.default.createElement(TableInputTable, { className: shadowed ? 'shadowed' : '', isDragAndDroppable: isDragAndDroppable }, children)))));
|
|
82
84
|
};
|
|
83
85
|
exports.TableInput = TableInput;
|
|
84
86
|
TableInput.Header = TableInputHeader_1.TableInputHeader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableInput.js","sourceRoot":"","sources":["../../../../src/components/Input/TableInput/TableInput.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAuC;AACvC,qEAA8C;AAE9C,wEAAqE;AACrE,oFAAiF;AACjF,kEAA+D;AAC/D,kEAA+D;AAC/D,+DAA4D;AAC5D,kEAA+D;AAC/D,kEAA+D;AAC/D,wEAAqE;AACrE,2EAAwE;AACxE,wEAAqE;AACrE,yDAAsD;AAEtD,uFAAoF;AACpF,uFAAoF;
|
|
1
|
+
{"version":3,"file":"TableInput.js","sourceRoot":"","sources":["../../../../src/components/Input/TableInput/TableInput.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAuC;AACvC,qEAA8C;AAE9C,wEAAqE;AACrE,oFAAiF;AACjF,kEAA+D;AAC/D,kEAA+D;AAC/D,+DAA4D;AAC5D,kEAA+D;AAC/D,kEAA+D;AAC/D,wEAAqE;AACrE,2EAAwE;AACxE,wEAAqE;AACrE,yDAAsD;AAEtD,uFAAoF;AACpF,uFAAoF;AACpF,iFAA+E;AAE/E,IAAM,mBAAmB,GAAG,2BAAM,CAAC,GAAG,0GAAA,uCAGrC,IAAA,CAAC;AAEF,IAAM,eAAe,GAAG,2BAAM,CAAC,KAAK,mRAAmD,0MAWnF,EAiBK,IACR,KAlBG,UAAC,EAAoB;QAAnB,kBAAkB,wBAAA;IACpB,OAAA,CAAC,kBAAkB;QACjB,CAAC,KAAC,uBAAG,mSAAA,+NAOF,KACH,CAAC,KAAC,uBAAG,qSAAA,iOAOF,IAAA;AAhBL,CAgBK,CACR,CAAC;AA+BF,IAAM,UAAU,GAAG,UAAC,EAA6F;IAA5F,IAAA,QAAQ,cAAA,EAAE,gBAAgB,EAAhB,QAAQ,mBAAG,KAAK,KAAA,EAAE,0BAA0B,EAA1B,kBAAkB,mBAAG,KAAK,KAAA,EAAE,SAAS,eAAA,EAAK,IAAI,cAA3E,2DAA4E,CAAD;IACvF,IAAA,KAA0B,eAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,EAAvD,QAAQ,QAAA,EAAE,WAAW,QAAkC,CAAC;IAC/D,IAAM,YAAY,GAAG,UAAC,KAAiC;QACrD,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,OAAO,CACL,8BAAC,qCAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAC,QAAQ,UAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAC;QAC1E,8BAAC,mBAAmB,aAAC,QAAQ,EAAE,YAAY,IAAM,IAAI;YACnD,8BAAC,8CAAsB;gBACrB,8BAAC,eAAe,IAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,kBAAkB,EAAE,kBAAkB,IAC3F,QAAQ,CACO,CACK,CACL,CACK,CAC9B,CAAC;AACJ,CAAC,CAAC;AAeM,gCAAU;AAblB,UAAU,CAAC,MAAM,GAAG,mCAAgB,CAAC;AACrC,UAAU,CAAC,UAAU,GAAG,2CAAoB,CAAC;AAC7C,UAAU,CAAC,IAAI,GAAG,+BAAc,CAAC;AACjC,UAAU,CAAC,GAAG,GAAG,6BAAa,CAAC;AAC/B,UAAU,CAAC,IAAI,GAAG,+BAAc,CAAC;AACjC,UAAU,CAAC,WAAW,GAAG,6CAAqB,CAAC;AAC/C,UAAU,CAAC,IAAI,GAAG,+BAAc,CAAC;AACjC,UAAU,CAAC,IAAI,GAAG,+BAAc,CAAC;AACjC,UAAU,CAAC,MAAM,GAAG,mCAAgB,CAAC;AACrC,UAAU,CAAC,OAAO,GAAG,qCAAiB,CAAC;AACvC,UAAU,CAAC,MAAM,GAAG,mCAAgB,CAAC;AACrC,UAAU,CAAC,WAAW,GAAG,6CAAqB,CAAC"}
|
|
@@ -44,12 +44,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
44
44
|
exports.TableInputBody = void 0;
|
|
45
45
|
var react_1 = __importStar(require("react"));
|
|
46
46
|
var TableInputContext_1 = require("../TableInputContext");
|
|
47
|
-
var useDragElementIndex_1 = require("../../../../hooks/useDragElementIndex");
|
|
48
47
|
var useDrop_1 = require("../../../../hooks/useDrop");
|
|
48
|
+
var DraggedElementContext_1 = require("../../../../contexts/DraggedElementContext");
|
|
49
49
|
var TableInputBody = react_1.default.forwardRef(function (_a, forwardedRef) {
|
|
50
50
|
var children = _a.children, rest = __rest(_a, ["children"]);
|
|
51
|
-
var _b = (0,
|
|
52
|
-
var
|
|
51
|
+
var _b = (0, react_1.useContext)(TableInputContext_1.TableInputContext), isDragAndDroppable = _b.isDragAndDroppable, onReorder = _b.onReorder;
|
|
52
|
+
var draggedElementIndex = (0, react_1.useContext)(DraggedElementContext_1.DraggedElementContext).index;
|
|
53
53
|
var decoratedChildren = react_1.Children.map(children, function (child, rowIndex) {
|
|
54
54
|
if (!react_1.default.isValidElement(child)) {
|
|
55
55
|
return null;
|
|
@@ -58,15 +58,13 @@ var TableInputBody = react_1.default.forwardRef(function (_a, forwardedRef) {
|
|
|
58
58
|
? (0, react_1.cloneElement)(child, {
|
|
59
59
|
rowIndex: rowIndex,
|
|
60
60
|
draggable: rowIndex === draggedElementIndex,
|
|
61
|
-
onDragStart: onDragStart,
|
|
62
|
-
onDragEnd: onDragEnd,
|
|
63
61
|
})
|
|
64
62
|
: (0, react_1.cloneElement)(child, {
|
|
65
63
|
rowIndex: rowIndex,
|
|
66
64
|
});
|
|
67
65
|
});
|
|
68
66
|
var rowCount = react_1.Children.count(decoratedChildren);
|
|
69
|
-
var
|
|
67
|
+
var _c = (0, useDrop_1.useDrop)(rowCount, draggedElementIndex, onReorder), tableId = _c[0], onDrop = _c[1], onDragOver = _c[2];
|
|
70
68
|
return (react_1.default.createElement("tbody", __assign({ "data-table-id": tableId, onDrop: onDrop, onDragOver: onDragOver, ref: forwardedRef }, rest), decoratedChildren));
|
|
71
69
|
});
|
|
72
70
|
exports.TableInputBody = TableInputBody;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableInputBody.js","sourceRoot":"","sources":["../../../../../src/components/Input/TableInput/TableInputBody/TableInputBody.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAgF;AAChF,0DAAuD;AAEvD,
|
|
1
|
+
{"version":3,"file":"TableInputBody.js","sourceRoot":"","sources":["../../../../../src/components/Input/TableInput/TableInputBody/TableInputBody.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAgF;AAChF,0DAAuD;AAEvD,qDAAkD;AAClD,oFAAiF;AAMjF,IAAM,cAAc,GAAG,eAAK,CAAC,UAAU,CACrC,UAAC,EAAwC,EAAE,YAA0C;IAAnF,IAAA,QAAQ,cAAA,EAAK,IAAI,cAAlB,YAAmB,CAAD;IACX,IAAA,KAAkC,IAAA,kBAAU,EAAC,qCAAiB,CAAC,EAA9D,kBAAkB,wBAAA,EAAE,SAAS,eAAiC,CAAC;IAC/D,IAAO,mBAAmB,GAAI,IAAA,kBAAU,EAAC,6CAAqB,CAAC,MAArC,CAAsC;IAEvE,IAAM,iBAAiB,GAAG,gBAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAC,KAAK,EAAE,QAAQ;QAC/D,IAAI,CAAC,eAAK,CAAC,cAAc,CAAqB,KAAK,CAAC,EAAE;YACpD,OAAO,IAAI,CAAC;SACb;QAED,OAAO,kBAAkB;YACvB,CAAC,CAAC,IAAA,oBAAY,EAAC,KAAK,EAAE;gBAClB,QAAQ,UAAA;gBACR,SAAS,EAAE,QAAQ,KAAK,mBAAmB;aAC5C,CAAC;YACJ,CAAC,CAAC,IAAA,oBAAY,EAAC,KAAK,EAAE;gBAClB,QAAQ,UAAA;aACT,CAAC,CAAC;IACT,CAAC,CAAC,CAAC;IAEH,IAAM,QAAQ,GAAG,gBAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC7C,IAAA,KAAgC,IAAA,iBAAO,EAAC,QAAQ,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAAhF,OAAO,QAAA,EAAE,MAAM,QAAA,EAAE,UAAU,QAAqD,CAAC;IAExF,OAAO,CACL,mEAAsB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,IAAM,IAAI,GAC/F,iBAAiB,CACZ,CACT,CAAC;AACJ,CAAC,CACF,CAAC;AAIM,wCAAc;AAFtB,cAAc,CAAC,WAAW,GAAG,iBAAiB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
declare type TableInputContextType = {
|
|
2
2
|
readOnly: boolean;
|
|
3
3
|
isDragAndDroppable: boolean;
|
|
4
|
-
onReorder: ((reorderedIndices: number[]) => void) | undefined;
|
|
4
|
+
onReorder: ((reorderedIndices: number[], draggedIndex?: number, droppedIndex?: number) => void) | undefined;
|
|
5
5
|
};
|
|
6
6
|
declare const TableInputContext: import("react").Context<TableInputContextType>;
|
|
7
7
|
export { TableInputContext };
|
|
@@ -4,14 +4,10 @@ export declare type TableInputRowProps = Override<HTMLAttributes<HTMLTableRowEle
|
|
|
4
4
|
children?: ReactNode;
|
|
5
5
|
highlighted?: boolean;
|
|
6
6
|
rowIndex?: number;
|
|
7
|
-
onDragStart?: (rowIndex: number) => void;
|
|
8
|
-
onDragEnd?: () => void;
|
|
9
7
|
}>;
|
|
10
|
-
declare const TableInputRow: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLTableRowElement>, "children" | "
|
|
8
|
+
declare const TableInputRow: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLTableRowElement>, "children" | "highlighted" | "rowIndex"> & {
|
|
11
9
|
children?: ReactNode;
|
|
12
10
|
highlighted?: boolean | undefined;
|
|
13
11
|
rowIndex?: number | undefined;
|
|
14
|
-
onDragStart?: ((rowIndex: number) => void) | undefined;
|
|
15
|
-
onDragEnd?: (() => void) | undefined;
|
|
16
12
|
} & React.RefAttributes<HTMLTableRowElement>>;
|
|
17
13
|
export { TableInputRow };
|
|
@@ -53,6 +53,7 @@ var TableInputContext_1 = require("../TableInputContext");
|
|
|
53
53
|
var icons_1 = require("../../../../icons");
|
|
54
54
|
var TableInputCell_1 = require("../TableInputCell/TableInputCell");
|
|
55
55
|
var usePlaceholderPosition_1 = require("../../../../hooks/usePlaceholderPosition");
|
|
56
|
+
var DraggedElementContext_1 = require("../../../../contexts/DraggedElementContext");
|
|
56
57
|
var getZebraBackgroundColor = function (highlighted, rowIndex) {
|
|
57
58
|
return highlighted ? (0, theme_1.getColor)('blue', 10) : rowIndex % 2 === 0 ? (0, theme_1.getColor)('white') : (0, theme_1.getColor)('grey', 20);
|
|
58
59
|
};
|
|
@@ -74,17 +75,18 @@ var TableInputTr = styled_components_1.default.tr(templateObject_6 || (templateO
|
|
|
74
75
|
});
|
|
75
76
|
var DragAndDropCell = (0, styled_components_1.default)(TableInputCell_1.TableInputCell)(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n max-width: 26px;\n min-width: 26px;\n width: 26px;\n color: ", ";\n text-align: right;\n cursor: grab;\n vertical-align: middle;\n line-height: 0px !important;\n & > div {\n height: 39px;\n vertical-align: middle;\n line-height: 44px;\n }\n"], ["\n max-width: 26px;\n min-width: 26px;\n width: 26px;\n color: ", ";\n text-align: right;\n cursor: grab;\n vertical-align: middle;\n line-height: 0px !important;\n & > div {\n height: 39px;\n vertical-align: middle;\n line-height: 44px;\n }\n"])), (0, theme_1.getColor)('grey', 100));
|
|
76
77
|
var TableInputRow = (0, react_1.forwardRef)(function (_a, forwardedRef) {
|
|
77
|
-
var children = _a.children, _b = _a.rowIndex, rowIndex = _b === void 0 ? 0 : _b, draggable = _a.draggable, _c = _a.highlighted, highlighted = _c === void 0 ? false : _c,
|
|
78
|
+
var children = _a.children, _b = _a.rowIndex, rowIndex = _b === void 0 ? 0 : _b, draggable = _a.draggable, _c = _a.highlighted, highlighted = _c === void 0 ? false : _c, rest = __rest(_a, ["children", "rowIndex", "draggable", "highlighted"]);
|
|
78
79
|
var _d = (0, usePlaceholderPosition_1.usePlaceholderPosition)(rowIndex), placeholderPosition = _d[0], placeholderDragEnter = _d[1], placeholderDragLeave = _d[2], placeholderDragEnd = _d[3];
|
|
79
80
|
var isDragAndDroppable = (0, react_1.useContext)(TableInputContext_1.TableInputContext).isDragAndDroppable;
|
|
80
|
-
var
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
var _e = (0, react_1.useContext)(DraggedElementContext_1.DraggedElementContext), draggedElementIndex = _e.index, onDragStart = _e.onDragStart, onDragEnd = _e.onDragEnd;
|
|
82
|
+
var handleDragEnter = function () {
|
|
83
|
+
if (isDragAndDroppable && null !== draggedElementIndex) {
|
|
84
|
+
placeholderDragEnter(draggedElementIndex);
|
|
83
85
|
}
|
|
84
86
|
};
|
|
85
87
|
var handleDragStart = function (event) {
|
|
86
88
|
if (isDragAndDroppable) {
|
|
87
|
-
event.dataTransfer.setData('text', rowIndex.toString());
|
|
89
|
+
event.dataTransfer.setData('text/plain', rowIndex.toString());
|
|
88
90
|
onDragStart === null || onDragStart === void 0 ? void 0 : onDragStart(rowIndex);
|
|
89
91
|
}
|
|
90
92
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableInputRow.js","sourceRoot":"","sources":["../../../../../src/components/Input/TableInput/TableInputRow/TableInputRow.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qEAA8C;AAC9C,6CAA+F;AAC/F,2CAA8D;AAE9D,0DAAuD;AACvD,2CAA0C;AAC1C,mEAAgE;AAChE,mFAAqG;
|
|
1
|
+
{"version":3,"file":"TableInputRow.js","sourceRoot":"","sources":["../../../../../src/components/Input/TableInput/TableInputRow/TableInputRow.tsx"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ declare type ProgressIndicatorProps = Override<HTMLAttributes<HTMLUListElement>,
|
|
|
6
6
|
}>;
|
|
7
7
|
declare const ProgressIndicator: {
|
|
8
8
|
({ children, ...rest }: ProgressIndicatorProps): React.JSX.Element;
|
|
9
|
-
Step: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLLIElement>, "current" | "disabled" | "children" | "
|
|
9
|
+
Step: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLLIElement>, "current" | "disabled" | "children" | "index" | "state"> & {
|
|
10
10
|
current?: boolean | undefined;
|
|
11
11
|
state?: StepState | undefined;
|
|
12
12
|
disabled?: boolean | undefined;
|
|
@@ -11,7 +11,7 @@ declare type TableProps = Override<React.HTMLAttributes<HTMLTableElement>, {
|
|
|
11
11
|
onReorder?: undefined;
|
|
12
12
|
} | {
|
|
13
13
|
isDragAndDroppable: boolean;
|
|
14
|
-
onReorder: (updatedIndices: number[]) => void;
|
|
14
|
+
onReorder: (updatedIndices: number[], draggedIndex?: number, droppedIndex?: number) => void;
|
|
15
15
|
})>;
|
|
16
16
|
declare const Table: {
|
|
17
17
|
({ isSelectable, hasWarningRows, hasLockedRows, displayCheckbox, isDragAndDroppable, onReorder, children, ...rest }: TableProps): React.JSX.Element;
|
|
@@ -23,15 +23,13 @@ declare const Table: {
|
|
|
23
23
|
children?: React.ReactNode;
|
|
24
24
|
} & React.RefAttributes<HTMLTableHeaderCellElement>>;
|
|
25
25
|
Body: React.ForwardRefExoticComponent<import("./TableBody/TableBody").TableBodyProps & React.RefAttributes<HTMLTableSectionElement>>;
|
|
26
|
-
Row: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLTableRowElement>, "children" | "onClick" | "
|
|
26
|
+
Row: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLTableRowElement>, "children" | "onClick" | "level" | "isSelected" | "rowIndex" | "onSelectToggle"> & {
|
|
27
27
|
children?: React.ReactNode;
|
|
28
28
|
onSelectToggle?: ((isSelected: boolean) => void) | undefined;
|
|
29
29
|
isSelected?: boolean | "mixed" | undefined;
|
|
30
30
|
level?: ("tertiary" | "warning") | undefined;
|
|
31
31
|
onClick?: ((event: React.MouseEvent<HTMLTableRowElement, MouseEvent>) => void) | undefined;
|
|
32
32
|
rowIndex?: number | undefined;
|
|
33
|
-
onDragStart?: ((rowIndex: number) => void) | undefined;
|
|
34
|
-
onDragEnd?: (() => void) | undefined;
|
|
35
33
|
} & React.RefAttributes<HTMLTableRowElement>>;
|
|
36
34
|
Cell: React.ForwardRefExoticComponent<Omit<React.TdHTMLAttributes<HTMLTableCellElement>, "children" | "rowTitle"> & {
|
|
37
35
|
children?: React.ReactNode;
|
|
@@ -42,3 +40,4 @@ declare const Table: {
|
|
|
42
40
|
} & React.RefAttributes<HTMLTableCellElement>>;
|
|
43
41
|
};
|
|
44
42
|
export { Table };
|
|
43
|
+
export type { TableProps };
|
|
@@ -58,12 +58,14 @@ var TableActionCell_1 = require("./TableActionCell/TableActionCell");
|
|
|
58
58
|
var TableRow_1 = require("./TableRow/TableRow");
|
|
59
59
|
var TableContext_1 = require("./TableContext");
|
|
60
60
|
var TableBody_1 = require("./TableBody/TableBody");
|
|
61
|
+
var DraggedElementContext_1 = require("../../contexts/DraggedElementContext");
|
|
61
62
|
var TableContainer = styled_components_1.default.table(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n border-collapse: collapse;\n width: 100%;\n"], ["\n border-collapse: collapse;\n width: 100%;\n"])));
|
|
62
63
|
var Table = function (_a) {
|
|
63
64
|
var _b = _a.isSelectable, isSelectable = _b === void 0 ? false : _b, _c = _a.hasWarningRows, hasWarningRows = _c === void 0 ? false : _c, _d = _a.hasLockedRows, hasLockedRows = _d === void 0 ? false : _d, _e = _a.displayCheckbox, displayCheckbox = _e === void 0 ? false : _e, _f = _a.isDragAndDroppable, isDragAndDroppable = _f === void 0 ? false : _f, _g = _a.onReorder, onReorder = _g === void 0 ? undefined : _g, children = _a.children, rest = __rest(_a, ["isSelectable", "hasWarningRows", "hasLockedRows", "displayCheckbox", "isDragAndDroppable", "onReorder", "children"]);
|
|
64
65
|
var providerValue = (0, react_1.useMemo)(function () { return ({ isSelectable: isSelectable, hasWarningRows: hasWarningRows, hasLockedRows: hasLockedRows, displayCheckbox: displayCheckbox, isDragAndDroppable: isDragAndDroppable, onReorder: onReorder }); }, [isSelectable, hasWarningRows, hasLockedRows, displayCheckbox, isDragAndDroppable, onReorder]);
|
|
65
66
|
return (react_1.default.createElement(TableContext_1.TableContext.Provider, { value: providerValue },
|
|
66
|
-
react_1.default.createElement(
|
|
67
|
+
react_1.default.createElement(DraggedElementContext_1.DraggedElementProvider, null,
|
|
68
|
+
react_1.default.createElement(TableContainer, __assign({}, rest), children))));
|
|
67
69
|
};
|
|
68
70
|
exports.Table = Table;
|
|
69
71
|
TableHeader_1.TableHeader.displayName = 'Table.Header';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sourceRoot":"","sources":["../../../src/components/Table/Table.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAgD;AAChD,wEAAuC;AACvC,mDAAgD;AAChD,yDAAsD;AACtD,qEAAkE;AAClE,qEAAkE;AAClE,gDAA6C;AAC7C,+CAA4C;AAC5C,mDAAgD;
|
|
1
|
+
{"version":3,"file":"Table.js","sourceRoot":"","sources":["../../../src/components/Table/Table.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAgD;AAChD,wEAAuC;AACvC,mDAAgD;AAChD,yDAAsD;AACtD,qEAAkE;AAClE,qEAAkE;AAClE,gDAA6C;AAC7C,+CAA4C;AAC5C,mDAAgD;AAEhD,8EAA4E;AAE5E,IAAM,cAAc,GAAG,2BAAM,CAAC,KAAK,qHAAA,kDAGlC,IAAA,CAAC;AAwDF,IAAM,KAAK,GAAG,UAAC,EASF;IARX,IAAA,oBAAoB,EAApB,YAAY,mBAAG,KAAK,KAAA,EACpB,sBAAsB,EAAtB,cAAc,mBAAG,KAAK,KAAA,EACtB,qBAAqB,EAArB,aAAa,mBAAG,KAAK,KAAA,EACrB,uBAAuB,EAAvB,eAAe,mBAAG,KAAK,KAAA,EACvB,0BAA0B,EAA1B,kBAAkB,mBAAG,KAAK,KAAA,EAC1B,iBAAqB,EAArB,SAAS,mBAAG,SAAS,KAAA,EACrB,QAAQ,cAAA,EACL,IAAI,cARM,qHASd,CADQ;IAEP,IAAM,aAAa,GAAG,IAAA,eAAO,EAC3B,cAAM,OAAA,CAAC,EAAC,YAAY,cAAA,EAAE,cAAc,gBAAA,EAAE,aAAa,eAAA,EAAE,eAAe,iBAAA,EAAE,kBAAkB,oBAAA,EAAE,SAAS,WAAA,EAAC,CAAC,EAA/F,CAA+F,EACrG,CAAC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,SAAS,CAAC,CAC9F,CAAC;IAEF,OAAO,CACL,8BAAC,2BAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,aAAa;QACzC,8BAAC,8CAAsB;YACrB,8BAAC,cAAc,eAAK,IAAI,GAAG,QAAQ,CAAkB,CAC9B,CACH,CACzB,CAAC;AACJ,CAAC,CAAC;AAgBM,sBAAK;AAdb,yBAAW,CAAC,WAAW,GAAG,cAAc,CAAC;AACzC,iCAAe,CAAC,WAAW,GAAG,kBAAkB,CAAC;AACjD,qBAAS,CAAC,WAAW,GAAG,YAAY,CAAC;AACrC,mBAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;AACnC,qBAAS,CAAC,WAAW,GAAG,YAAY,CAAC;AACrC,iCAAe,CAAC,WAAW,GAAG,kBAAkB,CAAC;AAEjD,KAAK,CAAC,MAAM,GAAG,yBAAW,CAAC;AAC3B,KAAK,CAAC,UAAU,GAAG,iCAAe,CAAC;AACnC,KAAK,CAAC,IAAI,GAAG,qBAAS,CAAC;AACvB,KAAK,CAAC,GAAG,GAAG,mBAAQ,CAAC;AACrB,KAAK,CAAC,IAAI,GAAG,qBAAS,CAAC;AACvB,KAAK,CAAC,UAAU,GAAG,iCAAe,CAAC"}
|
|
@@ -45,11 +45,11 @@ exports.TableBody = void 0;
|
|
|
45
45
|
var react_1 = __importStar(require("react"));
|
|
46
46
|
var TableContext_1 = require("../TableContext");
|
|
47
47
|
var useDrop_1 = require("../../../hooks/useDrop");
|
|
48
|
-
var
|
|
48
|
+
var DraggedElementContext_1 = require("../../../contexts/DraggedElementContext");
|
|
49
49
|
var TableBody = react_1.default.forwardRef(function (_a, forwardedRef) {
|
|
50
50
|
var children = _a.children, rest = __rest(_a, ["children"]);
|
|
51
|
-
var _b = (0,
|
|
52
|
-
var
|
|
51
|
+
var _b = (0, react_1.useContext)(TableContext_1.TableContext), isDragAndDroppable = _b.isDragAndDroppable, onReorder = _b.onReorder;
|
|
52
|
+
var draggedElementIndex = (0, react_1.useContext)(DraggedElementContext_1.DraggedElementContext).index;
|
|
53
53
|
var decoratedChildren = isDragAndDroppable
|
|
54
54
|
? react_1.Children.map(children, function (child, rowIndex) {
|
|
55
55
|
if (!react_1.default.isValidElement(child)) {
|
|
@@ -58,13 +58,11 @@ var TableBody = react_1.default.forwardRef(function (_a, forwardedRef) {
|
|
|
58
58
|
return (0, react_1.cloneElement)(child, {
|
|
59
59
|
rowIndex: rowIndex,
|
|
60
60
|
draggable: rowIndex === draggedElementIndex,
|
|
61
|
-
onDragStart: onDragStart,
|
|
62
|
-
onDragEnd: onDragEnd,
|
|
63
61
|
});
|
|
64
62
|
})
|
|
65
63
|
: children;
|
|
66
64
|
var rowCount = react_1.Children.count(children);
|
|
67
|
-
var
|
|
65
|
+
var _c = (0, useDrop_1.useDrop)(rowCount, draggedElementIndex, onReorder), tableId = _c[0], onDrop = _c[1], onDragOver = _c[2];
|
|
68
66
|
return (react_1.default.createElement("tbody", __assign({ ref: forwardedRef, "data-table-id": tableId, onDrop: onDrop, onDragOver: onDragOver }, rest), decoratedChildren));
|
|
69
67
|
});
|
|
70
68
|
exports.TableBody = TableBody;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableBody.js","sourceRoot":"","sources":["../../../../src/components/Table/TableBody/TableBody.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAmF;AAEnF,gDAA6C;AAC7C,kDAA+C;AAC/C,
|
|
1
|
+
{"version":3,"file":"TableBody.js","sourceRoot":"","sources":["../../../../src/components/Table/TableBody/TableBody.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAmF;AAEnF,gDAA6C;AAC7C,kDAA+C;AAC/C,iFAA8E;AAW9E,IAAM,SAAS,GAAG,eAAK,CAAC,UAAU,CAChC,UAAC,EAAmC,EAAE,YAA0C;IAA9E,IAAA,QAAQ,cAAA,EAAK,IAAI,cAAlB,YAAmB,CAAD;IACX,IAAA,KAAkC,IAAA,kBAAU,EAAC,2BAAY,CAAC,EAAzD,kBAAkB,wBAAA,EAAE,SAAS,eAA4B,CAAC;IAC1D,IAAO,mBAAmB,GAAI,IAAA,kBAAU,EAAC,6CAAqB,CAAC,MAArC,CAAsC;IACvE,IAAM,iBAAiB,GAAG,kBAAkB;QAC1C,CAAC,CAAC,gBAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAC,KAAK,EAAE,QAAQ;YACrC,IAAI,CAAC,eAAK,CAAC,cAAc,CAAgB,KAAK,CAAC,EAAE;gBAC/C,OAAO,IAAI,CAAC;aACb;YAED,OAAO,IAAA,oBAAY,EAAC,KAAK,EAAE;gBACzB,QAAQ,UAAA;gBACR,SAAS,EAAE,QAAQ,KAAK,mBAAmB;aAC5C,CAAC,CAAC;QACL,CAAC,CAAC;QACJ,CAAC,CAAC,QAAQ,CAAC;IAEb,IAAM,QAAQ,GAAG,gBAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAA,KAAgC,IAAA,iBAAO,EAAC,QAAQ,EAAE,mBAAmB,EAAE,SAAS,CAAC,EAAhF,OAAO,QAAA,EAAE,MAAM,QAAA,EAAE,UAAU,QAAqD,CAAC;IAExF,OAAO,CACL,kDAAO,GAAG,EAAE,YAAY,mBAAiB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,IAAM,IAAI,GAC/F,iBAAiB,CACZ,CACT,CAAC;AACJ,CAAC,CACF,CAAC;AAEM,8BAAS"}
|
|
@@ -4,7 +4,7 @@ declare type TableContextType = {
|
|
|
4
4
|
hasLockedRows: boolean;
|
|
5
5
|
displayCheckbox: boolean;
|
|
6
6
|
isDragAndDroppable: boolean;
|
|
7
|
-
onReorder: ((reorderedIndices: number[]) => void) | undefined;
|
|
7
|
+
onReorder: ((reorderedIndices: number[], draggedIndex?: number, droppedIndex?: number) => void) | undefined;
|
|
8
8
|
};
|
|
9
9
|
declare const TableContext: import("react").Context<TableContextType>;
|
|
10
10
|
export { TableContext };
|
|
@@ -8,18 +8,14 @@ declare type TableRowProps = Override<HTMLAttributes<HTMLTableRowElement>, {
|
|
|
8
8
|
level?: Level;
|
|
9
9
|
onClick?: (event: MouseEvent<HTMLTableRowElement>) => void;
|
|
10
10
|
rowIndex?: number;
|
|
11
|
-
onDragStart?: (rowIndex: number) => void;
|
|
12
|
-
onDragEnd?: () => void;
|
|
13
11
|
}>;
|
|
14
|
-
declare const TableRow: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLTableRowElement>, "children" | "onClick" | "
|
|
12
|
+
declare const TableRow: React.ForwardRefExoticComponent<Omit<React.HTMLAttributes<HTMLTableRowElement>, "children" | "onClick" | "level" | "isSelected" | "rowIndex" | "onSelectToggle"> & {
|
|
15
13
|
children?: ReactNode;
|
|
16
14
|
onSelectToggle?: ((isSelected: boolean) => void) | undefined;
|
|
17
15
|
isSelected?: boolean | "mixed" | undefined;
|
|
18
16
|
level?: Level | undefined;
|
|
19
17
|
onClick?: ((event: MouseEvent<HTMLTableRowElement>) => void) | undefined;
|
|
20
18
|
rowIndex?: number | undefined;
|
|
21
|
-
onDragStart?: ((rowIndex: number) => void) | undefined;
|
|
22
|
-
onDragEnd?: (() => void) | undefined;
|
|
23
19
|
} & React.RefAttributes<HTMLTableRowElement>>;
|
|
24
20
|
export { TableRow };
|
|
25
21
|
export type { TableRowProps };
|
|
@@ -54,6 +54,7 @@ var TableContext_1 = require("../TableContext");
|
|
|
54
54
|
var TableCell_1 = require("../TableCell/TableCell");
|
|
55
55
|
var icons_1 = require("../../../icons");
|
|
56
56
|
var usePlaceholderPosition_1 = require("../../../hooks/usePlaceholderPosition");
|
|
57
|
+
var DraggedElementContext_1 = require("../../../contexts/DraggedElementContext");
|
|
57
58
|
var RowContainer = styled_components_1.default.tr(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n ", ";\n\n ", "\n\n ", "\n\n ", "\n\n ", "\n\n &:hover > td {\n opacity: 1;\n ", "\n }\n\n &:hover > td > div {\n opacity: 1;\n }\n\n ", ";\n"], ["\n ", ";\n\n ", "\n\n ", "\n\n ", "\n\n ", "\n\n &:hover > td {\n opacity: 1;\n ", "\n }\n\n &:hover > td > div {\n opacity: 1;\n }\n\n ", ";\n"])), function (_a) {
|
|
58
59
|
var isSelected = _a.isSelected;
|
|
59
60
|
return isSelected && (0, styled_components_1.css)(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n > td {\n background-color: ", ";\n }\n "], ["\n > td {\n background-color: ", ";\n }\n "])), (0, theme_1.getColor)('blue', 20));
|
|
@@ -92,18 +93,21 @@ var getIcon = function (level) {
|
|
|
92
93
|
};
|
|
93
94
|
var WarningIcon = (0, styled_components_1.default)(icons_1.DangerIcon)(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n color: ", ";\n"], ["\n color: ", ";\n"])), (0, theme_1.getColor)('yellow', 120));
|
|
94
95
|
var TableRow = (0, react_1.forwardRef)(function (_a, forwardedRef) {
|
|
95
|
-
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,
|
|
96
|
+
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, children = _a.children, rest = __rest(_a, ["rowIndex", "isSelected", "level", "onSelectToggle", "onClick", "draggable", "children"]);
|
|
96
97
|
var _d = (0, usePlaceholderPosition_1.usePlaceholderPosition)(rowIndex), placeholderPosition = _d[0], placeholderDragEnter = _d[1], placeholderDragLeave = _d[2], placeholderDragEnd = _d[3];
|
|
97
98
|
var _e = (0, react_1.useContext)(TableContext_1.TableContext), isSelectable = _e.isSelectable, displayCheckbox = _e.displayCheckbox, isDragAndDroppable = _e.isDragAndDroppable, hasWarningRows = _e.hasWarningRows, hasLockedRows = _e.hasLockedRows;
|
|
98
99
|
if (isSelectable && (undefined === isSelected || undefined === onSelectToggle)) {
|
|
99
100
|
throw Error('A row in a selectable table should have the prop "isSelected" and "onSelectToggle"');
|
|
100
101
|
}
|
|
102
|
+
var _f = (0, react_1.useContext)(DraggedElementContext_1.DraggedElementContext), draggedElementIndex = _f.index, onDragStart = _f.onDragStart, onDragEnd = _f.onDragEnd;
|
|
101
103
|
var handleCheckboxChange = function (event) {
|
|
102
104
|
event.stopPropagation();
|
|
103
105
|
onSelectToggle === null || onSelectToggle === void 0 ? void 0 : onSelectToggle(!isSelected);
|
|
104
106
|
};
|
|
105
|
-
var handleDragEnter = function (
|
|
106
|
-
|
|
107
|
+
var handleDragEnter = function () {
|
|
108
|
+
if (null !== draggedElementIndex) {
|
|
109
|
+
placeholderDragEnter(draggedElementIndex);
|
|
110
|
+
}
|
|
107
111
|
};
|
|
108
112
|
var handleDragStart = function (event) {
|
|
109
113
|
event.dataTransfer.setData('text', rowIndex.toString());
|
|
@@ -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,wCAA6D;AAC7D,gFAAkG;
|
|
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,wCAA6D;AAC7D,gFAAkG;AAClG,iFAA8E;AAI9E,IAAM,YAAY,GAAG,2BAAM,CAAC,EAAE,uOAQ7B,MACG,EAMC,SAED,EAMC,QAED,EAMC,QAED,EAIC,QAED,EAIC,6CAIC,EAIC,6DAOH,EAgBK,KACR,KAlEG,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;QACjB,CAAC,KAAC,uBAAG,kOAAA,kIAKqB,EAAsB,0BAE7C,KAFuB,IAAA,gBAAQ,EAAC,QAAQ,EAAE,EAAE,CAAC,EAGhD,CAAC,CAAC,KAAK,KAAK,UAAU,QACpB,uBAAG,8KAAA,oDAEqB,EAAoB,wBAC/B,EAAqB,0BAEjC,KAHuB,IAAA,gBAAQ,EAAC,MAAM,EAAE,EAAE,CAAC,EAC/B,IAAA,gBAAQ,EAAC,MAAM,EAAE,GAAG,CAAC,CAEjC;AAfL,CAeK,CACR,CAAC;AAEF,IAAM,iBAAiB,GAAG,2BAAM,CAAC,EAAE,4LAAsB,+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,OAAO,GAAG,UAAC,KAAY;IAC3B,QAAQ,KAAK,EAAE;QACb,KAAK,SAAS;YACZ,OAAO,8BAAC,WAAW,OAAG,CAAC;QACzB,KAAK,UAAU;YACb,OAAO,8BAAC,gBAAQ,OAAG,CAAC;KACvB;AACH,CAAC,CAAC;AAEF,IAAM,WAAW,GAAG,IAAA,2BAAM,EAAC,kBAAU,CAAC,yFAAA,aAC3B,EAAuB,KACjC,KADU,IAAA,gBAAQ,EAAC,QAAQ,EAAE,GAAG,CAAC,CACjC,CAAC;AAqCF,IAAM,QAAQ,GAAG,IAAA,kBAAU,EACzB,UACE,EAA+G,EAC/G,YAAsC;IADrC,IAAA,gBAAY,EAAZ,QAAQ,mBAAG,CAAC,KAAA,EAAE,kBAAkB,EAAlB,UAAU,mBAAG,KAAK,KAAA,EAAE,KAAK,WAAA,EAAE,cAAc,oBAAA,EAAE,OAAO,aAAA,EAAE,SAAS,eAAA,EAAE,QAAQ,cAAA,EAAK,IAAI,cAA/F,yFAAgG,CAAD;IAGzF,IAAA,KACJ,IAAA,+CAAsB,EAAC,QAAQ,CAAC,EAD3B,mBAAmB,QAAA,EAAE,oBAAoB,QAAA,EAAE,oBAAoB,QAAA,EAAE,kBAAkB,QACxD,CAAC;IAE7B,IAAA,KAAqF,IAAA,kBAAU,EAAC,2BAAY,CAAC,EAA5G,YAAY,kBAAA,EAAE,eAAe,qBAAA,EAAE,kBAAkB,wBAAA,EAAE,cAAc,oBAAA,EAAE,aAAa,mBAA4B,CAAC;IACpH,IAAI,YAAY,IAAI,CAAC,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,cAAc,CAAC,EAAE;QAC9E,MAAM,KAAK,CAAC,oFAAoF,CAAC,CAAC;KACnG;IACK,IAAA,KAAuD,IAAA,kBAAU,EAAC,6CAAqB,CAAC,EAAhF,mBAAmB,WAAA,EAAE,WAAW,iBAAA,EAAE,SAAS,eAAqC,CAAC;IAE/F,IAAM,oBAAoB,GAAG,UAAC,KAAqB;QACjD,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAG,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC,CAAC;IAEF,IAAM,eAAe,GAAG;QACtB,IAAI,IAAI,KAAK,mBAAmB,EAAE;YAChC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;SAC3C;IACH,CAAC,CAAC;IAEF,IAAM,eAAe,GAAG,UAAC,KAAqC;QAC5D,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxD,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,QAAQ,CAAC,CAAC;IAC1B,CAAC,CAAC;IAEF,IAAM,aAAa,GAAG;QACpB,kBAAkB,EAAE,CAAC;QACrB,SAAS,aAAT,SAAS,uBAAT,SAAS,EAAI,CAAC;IAChB,CAAC,CAAC;IAEF,OAAO,CACL,8BAAC,YAAY,aACX,GAAG,EAAE,YAAY,EACjB,WAAW,EAAE,SAAS,KAAK,OAAO,EAClC,UAAU,EAAE,CAAC,CAAC,UAAU,EACxB,KAAK,EAAE,KAAK,EACZ,kBAAkB,EAAE,kBAAkB,EACtC,OAAO,EAAE,OAAO,EAChB,mBAAmB,EAAE,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,EACtE,SAAS,EAAE,kBAAkB,IAAI,SAAS,0BACpB,QAAQ,EAC9B,WAAW,EAAE,eAAe,EAC5B,WAAW,EAAE,oBAAoB,EACjC,WAAW,EAAE,eAAe,EAC5B,SAAS,EAAE,aAAa,IACpB,IAAI;QAEP,YAAY,IAAI,CACf,8BAAC,iBAAiB,mBACH,CAAC,eAAe,IAAI,CAAC,UAAU,EAC5C,SAAS,EAAE,eAAe,IAAI,CAAC,CAAC,UAAU,EAC1C,OAAO,EAAE,oBAAoB;YAE7B,8BAAC,qBAAQ,IACP,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,UAAC,MAAM,EAAE,CAAC;oBAClB,oBAAoB,CAAC,CAAC,CAAC,CAAC;gBAC1B,CAAC,GACD,CACgB,CACrB;QACA,kBAAkB,IAAI,CACrB,8BAAC,UAAU,IAAC,WAAW,EAAE,cAAM,OAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,QAAQ,CAAC,EAAvB,CAAuB,EAAE,SAAS,EAAE,SAAS,iBAAc,aAAa;YACrG,8BAAC,eAAO,IAAC,IAAI,EAAE,EAAE,GAAI,CACV,CACd;QACA,cAAc,IAAI,CACjB,8BAAC,qBAAS,QACP,KAAK,KAAK,SAAS,IAAI,eAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAC,IAAI,EAAE,EAAE,EAAE,aAAa,EAAE,cAAc,EAAC,CAAC,CAC3F,CACb;QACA,QAAQ;QACR,aAAa,IAAI,CAChB,8BAAC,qBAAS,QACP,KAAK,KAAK,UAAU,IAAI,eAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,EAAC,IAAI,EAAE,EAAE,EAAE,aAAa,EAAE,WAAW,EAAC,CAAC,CACzF,CACb,CACY,CAChB,CAAC;AACJ,CAAC,CACF,CAAC;AAEM,4BAAQ"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { TableProps, TableInputProps } from '../components';
|
|
4
|
+
declare type DraggedElementType = {
|
|
5
|
+
index: number | null;
|
|
6
|
+
onDragStart: (rowIndex: number) => void;
|
|
7
|
+
onDragEnd?: () => void;
|
|
8
|
+
};
|
|
9
|
+
declare const DraggedElementContext: React.Context<DraggedElementType>;
|
|
10
|
+
declare const DraggedElementProvider: ({ children }: PropsWithChildren<TableProps | TableInputProps>) => React.JSX.Element;
|
|
11
|
+
export { DraggedElementProvider, DraggedElementContext };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DraggedElementContext = exports.DraggedElementProvider = void 0;
|
|
7
|
+
var react_1 = require("react");
|
|
8
|
+
var react_2 = __importDefault(require("react"));
|
|
9
|
+
var DraggedElementContext = (0, react_1.createContext)({
|
|
10
|
+
index: null,
|
|
11
|
+
onDragStart: function () { return void 0; },
|
|
12
|
+
onDragEnd: function () { return void 0; },
|
|
13
|
+
});
|
|
14
|
+
exports.DraggedElementContext = DraggedElementContext;
|
|
15
|
+
var DraggedElementProvider = function (_a) {
|
|
16
|
+
var children = _a.children;
|
|
17
|
+
var _b = (0, react_1.useState)(null), index = _b[0], setDraggedElementIndex = _b[1];
|
|
18
|
+
var onDragStart = (0, react_1.useCallback)(function (index) { return setDraggedElementIndex(index); }, []);
|
|
19
|
+
var onDragEnd = (0, react_1.useCallback)(function () { return setDraggedElementIndex(null); }, []);
|
|
20
|
+
return (react_2.default.createElement(DraggedElementContext.Provider, { value: { index: index, onDragStart: onDragStart, onDragEnd: onDragEnd } }, children));
|
|
21
|
+
};
|
|
22
|
+
exports.DraggedElementProvider = DraggedElementProvider;
|
|
23
|
+
//# sourceMappingURL=DraggedElementContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DraggedElementContext.js","sourceRoot":"","sources":["../../src/contexts/DraggedElementContext.tsx"],"names":[],"mappings":";;;;;;AAAA,+BAA8E;AAC9E,gDAA0B;AAS1B,IAAM,qBAAqB,GAAG,IAAA,qBAAa,EAAqB;IAC9D,KAAK,EAAE,IAAI;IACX,WAAW,EAAE,cAAM,OAAA,KAAK,CAAC,EAAN,CAAM;IACzB,SAAS,EAAE,cAAM,OAAA,KAAK,CAAC,EAAN,CAAM;CACxB,CAAC,CAAC;AAY6B,sDAAqB;AAVrD,IAAM,sBAAsB,GAAG,UAAC,EAA2D;QAA1D,QAAQ,cAAA;IACjC,IAAA,KAAkC,IAAA,gBAAQ,EAAgB,IAAI,CAAC,EAA9D,KAAK,QAAA,EAAE,sBAAsB,QAAiC,CAAC;IACtE,IAAM,WAAW,GAAG,IAAA,mBAAW,EAAC,UAAC,KAAa,IAAK,OAAA,sBAAsB,CAAC,KAAK,CAAC,EAA7B,CAA6B,EAAE,EAAE,CAAC,CAAC;IACtF,IAAM,SAAS,GAAG,IAAA,mBAAW,EAAC,cAAM,OAAA,sBAAsB,CAAC,IAAI,CAAC,EAA5B,CAA4B,EAAE,EAAE,CAAC,CAAC;IAEtE,OAAO,CACL,8BAAC,qBAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAC,KAAK,OAAA,EAAE,WAAW,aAAA,EAAE,SAAS,WAAA,EAAC,IAAG,QAAQ,CAAkC,CACpH,CAAC;AACJ,CAAC,CAAC;AAEM,wDAAsB"}
|
package/lib/hooks/useDrop.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { DragEvent } from 'react';
|
|
2
|
-
declare const useDrop: (tableSize: number, draggedElementIndex: number | null, onReorder: ((reorderedIndices: number[]) => void) | undefined) => readonly [string, (event: DragEvent<HTMLTableSectionElement>) => void, (event: DragEvent<HTMLTableSectionElement>) => void];
|
|
2
|
+
declare const useDrop: (tableSize: number, draggedElementIndex: number | null, onReorder: ((reorderedIndices: number[], draggedIndex?: number | undefined, droppedIndex?: number | undefined) => void) | undefined) => readonly [string, (event: DragEvent<HTMLTableSectionElement>) => void, (event: DragEvent<HTMLTableSectionElement>) => void];
|
|
3
3
|
export { useDrop };
|
package/lib/hooks/useDrop.js
CHANGED
|
@@ -32,7 +32,12 @@ var useDrop = function (tableSize, draggedElementIndex, onReorder) {
|
|
|
32
32
|
if (event.currentTarget.dataset.tableId === tableId && onReorder && null !== draggedElementIndex) {
|
|
33
33
|
var droppedElementIndex = getDropRow(event.target);
|
|
34
34
|
var newIndices = generateReorderedIndices(tableSize, draggedElementIndex, droppedElementIndex);
|
|
35
|
-
onReorder
|
|
35
|
+
if (onReorder.length === 1) {
|
|
36
|
+
onReorder(newIndices);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
onReorder(newIndices, draggedElementIndex, droppedElementIndex);
|
|
40
|
+
}
|
|
36
41
|
}
|
|
37
42
|
};
|
|
38
43
|
var handleDragOver = function (event) {
|
package/lib/hooks/useDrop.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDrop.js","sourceRoot":"","sources":["../../src/hooks/useDrop.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAA8B;AAM9B,IAAM,UAAU,GAAG,UAAC,OAA2B;IAC7C,IAAI,IAAI,KAAK,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAEpE,OAAO,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,cAAc;QACjD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;QAC1C,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,IAAM,wBAAwB,GAAG,UAAC,IAAY,EAAE,YAAoB,EAAE,YAAoB;IAExF,IAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAI,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,QAAE,IAAI,EAAE,CAAC,CAAC;IAGzE,IAAM,uBAAuB,GAAG,aAAa,CAAC,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,YAAY,KAAK,KAAK,EAAtB,CAAsB,CAAC,CAAC;IAGtF,uBAAuB,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;IAE9D,OAAO,uBAAuB,CAAC;AACjC,CAAC,CAAC;AAEF,IAAM,OAAO,GAAG,UACd,SAAiB,EACjB,mBAAkC,EAClC,
|
|
1
|
+
{"version":3,"file":"useDrop.js","sourceRoot":"","sources":["../../src/hooks/useDrop.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,iCAA8B;AAM9B,IAAM,UAAU,GAAG,UAAC,OAA2B;IAC7C,IAAI,IAAI,KAAK,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAEpE,OAAO,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,cAAc;QACjD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;QAC1C,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,IAAM,wBAAwB,GAAG,UAAC,IAAY,EAAE,YAAoB,EAAE,YAAoB;IAExF,IAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,kBAAI,KAAK,CAAC,IAAI,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,QAAE,IAAI,EAAE,CAAC,CAAC;IAGzE,IAAM,uBAAuB,GAAG,aAAa,CAAC,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,YAAY,KAAK,KAAK,EAAtB,CAAsB,CAAC,CAAC;IAGtF,uBAAuB,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;IAE9D,OAAO,uBAAuB,CAAC;AACjC,CAAC,CAAC;AAEF,IAAM,OAAO,GAAG,UACd,SAAiB,EACjB,mBAAkC,EAClC,SAA2G;IAE3G,IAAM,OAAO,GAAG,IAAA,aAAK,EAAC,QAAQ,CAAC,CAAC;IAEhC,IAAM,UAAU,GAAG,UAAC,KAAyC;QAC3D,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvB,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,IAAI,SAAS,IAAI,IAAI,KAAK,mBAAmB,EAAE;YAChG,IAAM,mBAAmB,GAAG,UAAU,CAAC,KAAK,CAAC,MAAqB,CAAC,CAAC;YACpE,IAAM,UAAU,GAAG,wBAAwB,CAAC,SAAS,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;YAEjG,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC1B,SAAS,CAAC,UAAU,CAAC,CAAC;aACvB;iBAAM;gBACL,SAAS,CAAC,UAAU,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;aACjE;SACF;IACH,CAAC,CAAC;IAEF,IAAM,cAAc,GAAG,UAAC,KAAyC;QAE/D,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,KAAK,CAAC,cAAc,EAAE,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,cAAc,CAAU,CAAC;AACxD,CAAC,CAAC;AAEM,0BAAO"}
|
|
@@ -3,22 +3,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.usePlaceholderPosition = void 0;
|
|
4
4
|
var react_1 = require("react");
|
|
5
5
|
var usePlaceholderPosition = function (rowIndex) {
|
|
6
|
-
var _a = (0, react_1.useState)(0),
|
|
6
|
+
var _a = (0, react_1.useState)(0), hoveringCount = _a[0], setHoveringCount = _a[1];
|
|
7
7
|
var _b = (0, react_1.useState)('none'), placeholderPosition = _b[0], setPlaceholderPosition = _b[1];
|
|
8
8
|
(0, react_1.useEffect)(function () {
|
|
9
|
-
|
|
9
|
+
setHoveringCount(0);
|
|
10
10
|
}, [rowIndex]);
|
|
11
11
|
var dragEnter = (0, react_1.useCallback)(function (draggedElementIndex) {
|
|
12
|
-
|
|
12
|
+
setHoveringCount(function (count) { return (draggedElementIndex === rowIndex ? count : count + 1); });
|
|
13
13
|
setPlaceholderPosition(draggedElementIndex >= rowIndex ? 'top' : 'bottom');
|
|
14
14
|
}, [rowIndex]);
|
|
15
15
|
var dragLeave = (0, react_1.useCallback)(function () {
|
|
16
|
-
|
|
16
|
+
setHoveringCount(function (count) { return count - 1; });
|
|
17
17
|
}, []);
|
|
18
18
|
var dragEnd = (0, react_1.useCallback)(function () {
|
|
19
|
-
|
|
19
|
+
setHoveringCount(0);
|
|
20
20
|
}, []);
|
|
21
|
-
return [
|
|
21
|
+
return [hoveringCount === 0 ? 'none' : placeholderPosition, dragEnter, dragLeave, dragEnd];
|
|
22
22
|
};
|
|
23
23
|
exports.usePlaceholderPosition = usePlaceholderPosition;
|
|
24
24
|
//# sourceMappingURL=usePlaceholderPosition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePlaceholderPosition.js","sourceRoot":"","sources":["../../src/hooks/usePlaceholderPosition.ts"],"names":[],"mappings":";;;AAAA,+BAAuD;AAIvD,IAAM,sBAAsB,GAAG,UAAC,QAAgB;IACxC,IAAA,
|
|
1
|
+
{"version":3,"file":"usePlaceholderPosition.js","sourceRoot":"","sources":["../../src/hooks/usePlaceholderPosition.ts"],"names":[],"mappings":";;;AAAA,+BAAuD;AAIvD,IAAM,sBAAsB,GAAG,UAAC,QAAgB;IACxC,IAAA,KAAoC,IAAA,gBAAQ,EAAS,CAAC,CAAC,EAAtD,aAAa,QAAA,EAAE,gBAAgB,QAAuB,CAAC;IACxD,IAAA,KAAgD,IAAA,gBAAQ,EAAsB,MAAM,CAAC,EAApF,mBAAmB,QAAA,EAAE,sBAAsB,QAAyC,CAAC;IAE5F,IAAA,iBAAS,EAAC;QACR,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,IAAM,SAAS,GAAG,IAAA,mBAAW,EAC3B,UAAC,mBAA2B;QAC1B,gBAAgB,CAAC,UAAA,KAAK,IAAI,OAAA,CAAC,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAtD,CAAsD,CAAC,CAAC;QAClF,sBAAsB,CAAC,mBAAmB,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7E,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,IAAM,SAAS,GAAG,IAAA,mBAAW,EAAC;QAC5B,gBAAgB,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,GAAG,CAAC,EAAT,CAAS,CAAC,CAAC;IACvC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAM,OAAO,GAAG,IAAA,mBAAW,EAAC;QAC1B,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,aAAa,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAU,CAAC;AACtG,CAAC,CAAC;AAEM,wDAAsB"}
|
package/package.json
CHANGED
|
Binary file
|
|
@@ -71,3 +71,21 @@ When the `src` prop is set to `null`, the Image will display itself as loading.
|
|
|
71
71
|
}}
|
|
72
72
|
</Story>
|
|
73
73
|
</Canvas>
|
|
74
|
+
|
|
75
|
+
## Variation on background
|
|
76
|
+
|
|
77
|
+
When the `background` prop is set to `checkerboard`, the Image will display a checkerboard background behind the transparent image.
|
|
78
|
+
The background will be white otherwise.
|
|
79
|
+
|
|
80
|
+
<Canvas>
|
|
81
|
+
<Story name="Background">
|
|
82
|
+
{args => {
|
|
83
|
+
return (
|
|
84
|
+
<>
|
|
85
|
+
<Image {...args} background="white" src="https://doodleipsum.com/200x140/outline?i=63527485e69dea481bb541d7f1da73fe" />
|
|
86
|
+
<Image {...args} background="checkerboard" src="https://doodleipsum.com/200x140/outline?i=63527485e69dea481bb541d7f1da73fe" />
|
|
87
|
+
</>
|
|
88
|
+
);
|
|
89
|
+
}}
|
|
90
|
+
</Story>
|
|
91
|
+
</Canvas>
|
|
@@ -8,14 +8,16 @@ const EMPTY_IMAGE = 'data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg"/
|
|
|
8
8
|
|
|
9
9
|
type Fit = 'cover' | 'contain';
|
|
10
10
|
|
|
11
|
+
type Background = 'white' | 'checkerboard';
|
|
12
|
+
|
|
11
13
|
const ImageContainer = styled.img<
|
|
12
14
|
{
|
|
13
15
|
fit: Fit;
|
|
14
16
|
isStacked: boolean;
|
|
15
17
|
isLoading: boolean;
|
|
18
|
+
background: Background;
|
|
16
19
|
} & AkeneoThemedProps
|
|
17
20
|
>`
|
|
18
|
-
background: ${getColor('white')};
|
|
19
21
|
border: 1px solid ${getColor('grey', 80)};
|
|
20
22
|
object-fit: ${({fit}) => fit};
|
|
21
23
|
box-sizing: border-box;
|
|
@@ -28,6 +30,20 @@ const ImageContainer = styled.img<
|
|
|
28
30
|
`}
|
|
29
31
|
|
|
30
32
|
${({isLoading}) => isLoading && placeholderStyle}
|
|
33
|
+
|
|
34
|
+
${({background}) =>
|
|
35
|
+
background === 'checkerboard'
|
|
36
|
+
? css`
|
|
37
|
+
background-image: linear-gradient(45deg, ${getColor('grey', 60)} 25%, transparent 25%),
|
|
38
|
+
linear-gradient(135deg, ${getColor('grey', 60)} 25%, transparent 25%),
|
|
39
|
+
linear-gradient(45deg, transparent 75%, ${getColor('grey', 60)} 75%),
|
|
40
|
+
linear-gradient(135deg, transparent 75%, ${getColor('grey', 60)} 75%);
|
|
41
|
+
background-size: 25px 25px; /* Must be a square */
|
|
42
|
+
background-position: 0 0, 12.5px 0, 12.5px -12.5px, 0px 12.5px; /* Must be half of one side of the square */
|
|
43
|
+
`
|
|
44
|
+
: css`
|
|
45
|
+
background: ${getColor(background)};
|
|
46
|
+
`}
|
|
31
47
|
`;
|
|
32
48
|
|
|
33
49
|
type ImageProps = Override<
|
|
@@ -62,6 +78,11 @@ type ImageProps = Override<
|
|
|
62
78
|
* Should the image appear as a stack of multiple images.
|
|
63
79
|
*/
|
|
64
80
|
isStacked?: boolean;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Should the image appear with a background or not
|
|
84
|
+
*/
|
|
85
|
+
background?: Background;
|
|
65
86
|
}
|
|
66
87
|
>;
|
|
67
88
|
|
|
@@ -69,7 +90,10 @@ type ImageProps = Override<
|
|
|
69
90
|
* Image allow to embed an image in a page.
|
|
70
91
|
*/
|
|
71
92
|
const Image = React.forwardRef<HTMLImageElement, ImageProps>(
|
|
72
|
-
(
|
|
93
|
+
(
|
|
94
|
+
{fit = 'cover', isStacked = false, background = 'white', src, ...rest}: ImageProps,
|
|
95
|
+
forwardedRef: Ref<HTMLImageElement>
|
|
96
|
+
) => {
|
|
73
97
|
return (
|
|
74
98
|
<ImageContainer
|
|
75
99
|
isLoading={null === src}
|
|
@@ -77,6 +101,7 @@ const Image = React.forwardRef<HTMLImageElement, ImageProps>(
|
|
|
77
101
|
ref={forwardedRef}
|
|
78
102
|
fit={fit}
|
|
79
103
|
isStacked={isStacked}
|
|
104
|
+
background={background}
|
|
80
105
|
{...rest}
|
|
81
106
|
/>
|
|
82
107
|
);
|
|
@@ -15,6 +15,7 @@ import {TableInputContext} from './TableInputContext';
|
|
|
15
15
|
import {AkeneoThemedProps} from '../../../theme';
|
|
16
16
|
import {TableInputCellContent} from './TableInputCellContent/TableInputCellContent';
|
|
17
17
|
import {TableInputMeasurement} from './TableInputMeasurement/TableInputMeasurement';
|
|
18
|
+
import {DraggedElementProvider} from '../../../contexts/DraggedElementContext';
|
|
18
19
|
|
|
19
20
|
const TableInputContainer = styled.div`
|
|
20
21
|
width: 100%;
|
|
@@ -90,9 +91,11 @@ const TableInput = ({children, readOnly = false, isDragAndDroppable = false, onR
|
|
|
90
91
|
return (
|
|
91
92
|
<TableInputContext.Provider value={{readOnly, isDragAndDroppable, onReorder}}>
|
|
92
93
|
<TableInputContainer onScroll={handleScroll} {...rest}>
|
|
93
|
-
<
|
|
94
|
-
{
|
|
95
|
-
|
|
94
|
+
<DraggedElementProvider>
|
|
95
|
+
<TableInputTable className={shadowed ? 'shadowed' : ''} isDragAndDroppable={isDragAndDroppable}>
|
|
96
|
+
{children}
|
|
97
|
+
</TableInputTable>
|
|
98
|
+
</DraggedElementProvider>
|
|
96
99
|
</TableInputContainer>
|
|
97
100
|
</TableInputContext.Provider>
|
|
98
101
|
);
|
|
@@ -112,3 +115,4 @@ TableInput.Select = TableInputSelect;
|
|
|
112
115
|
TableInput.Measurement = TableInputMeasurement;
|
|
113
116
|
|
|
114
117
|
export {TableInput};
|
|
118
|
+
export type {TableInputProps};
|
|
@@ -37,7 +37,7 @@ test('it can drag and drop', () => {
|
|
|
37
37
|
render(
|
|
38
38
|
<TableInput isDragAndDroppable={true} onReorder={handleReorder}>
|
|
39
39
|
<TableInput.Header>
|
|
40
|
-
<TableInput.HeaderCell>
|
|
40
|
+
<TableInput.HeaderCell>A header</TableInput.HeaderCell>
|
|
41
41
|
<TableInput.HeaderCell>Another header</TableInput.HeaderCell>
|
|
42
42
|
</TableInput.Header>
|
|
43
43
|
<TableInput.Body>
|
|
@@ -76,7 +76,7 @@ test('it can drag and drop', () => {
|
|
|
76
76
|
fireEvent.drop(screen.getAllByRole('row')[3], {dataTransfer});
|
|
77
77
|
fireEvent.dragEnd(screen.getAllByRole('row')[1], {dataTransfer});
|
|
78
78
|
|
|
79
|
-
expect(handleReorder).toHaveBeenCalledWith([1, 2, 0]);
|
|
79
|
+
expect(handleReorder).toHaveBeenCalledWith([1, 2, 0], 0, 2);
|
|
80
80
|
});
|
|
81
81
|
|
|
82
82
|
test('TableInput supports ...rest props', () => {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React, {Children, cloneElement, ReactNode, Ref, useContext} from 'react';
|
|
2
2
|
import {TableInputContext} from '../TableInputContext';
|
|
3
3
|
import {TableInputRowProps} from '../TableInputRow/TableInputRow';
|
|
4
|
-
import {useDragElementIndex} from '../../../../hooks/useDragElementIndex';
|
|
5
4
|
import {useDrop} from '../../../../hooks/useDrop';
|
|
5
|
+
import {DraggedElementContext} from '../../../../contexts/DraggedElementContext';
|
|
6
6
|
|
|
7
7
|
type TableInputBodyProps = {
|
|
8
8
|
children?: ReactNode;
|
|
@@ -10,8 +10,8 @@ type TableInputBodyProps = {
|
|
|
10
10
|
|
|
11
11
|
const TableInputBody = React.forwardRef<HTMLTableSectionElement, TableInputBodyProps>(
|
|
12
12
|
({children, ...rest}: TableInputBodyProps, forwardedRef: Ref<HTMLTableSectionElement>) => {
|
|
13
|
-
const [draggedElementIndex, onDragStart, onDragEnd] = useDragElementIndex();
|
|
14
13
|
const {isDragAndDroppable, onReorder} = useContext(TableInputContext);
|
|
14
|
+
const {index: draggedElementIndex} = useContext(DraggedElementContext);
|
|
15
15
|
|
|
16
16
|
const decoratedChildren = Children.map(children, (child, rowIndex) => {
|
|
17
17
|
if (!React.isValidElement<TableInputRowProps>(child)) {
|
|
@@ -22,8 +22,6 @@ const TableInputBody = React.forwardRef<HTMLTableSectionElement, TableInputBodyP
|
|
|
22
22
|
? cloneElement(child, {
|
|
23
23
|
rowIndex,
|
|
24
24
|
draggable: rowIndex === draggedElementIndex,
|
|
25
|
-
onDragStart,
|
|
26
|
-
onDragEnd,
|
|
27
25
|
})
|
|
28
26
|
: cloneElement(child, {
|
|
29
27
|
rowIndex,
|
|
@@ -3,7 +3,7 @@ import {createContext} from 'react';
|
|
|
3
3
|
type TableInputContextType = {
|
|
4
4
|
readOnly: boolean;
|
|
5
5
|
isDragAndDroppable: boolean;
|
|
6
|
-
onReorder: ((reorderedIndices: number[]) => void) | undefined;
|
|
6
|
+
onReorder: ((reorderedIndices: number[], draggedIndex?: number, droppedIndex?: number) => void) | undefined;
|
|
7
7
|
};
|
|
8
8
|
|
|
9
9
|
const TableInputContext = createContext<TableInputContextType>({
|
|
@@ -6,6 +6,7 @@ import {TableInputContext} from '../TableInputContext';
|
|
|
6
6
|
import {RowIcon} from '../../../../icons';
|
|
7
7
|
import {TableInputCell} from '../TableInputCell/TableInputCell';
|
|
8
8
|
import {PlaceholderPosition, usePlaceholderPosition} from '../../../../hooks/usePlaceholderPosition';
|
|
9
|
+
import {DraggedElementContext} from '../../../../contexts/DraggedElementContext';
|
|
9
10
|
|
|
10
11
|
const getZebraBackgroundColor: (highlighted: boolean, rowIndex: number) => (props: AkeneoThemedProps) => string = (
|
|
11
12
|
highlighted,
|
|
@@ -138,38 +139,29 @@ export type TableInputRowProps = Override<
|
|
|
138
139
|
* @private
|
|
139
140
|
*/
|
|
140
141
|
rowIndex?: number;
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* @private
|
|
144
|
-
*/
|
|
145
|
-
onDragStart?: (rowIndex: number) => void;
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* @private
|
|
149
|
-
*/
|
|
150
|
-
onDragEnd?: () => void;
|
|
151
142
|
}
|
|
152
143
|
>;
|
|
153
144
|
|
|
154
145
|
const TableInputRow = forwardRef<HTMLTableRowElement, TableInputRowProps>(
|
|
155
146
|
(
|
|
156
|
-
{children, rowIndex = 0, draggable, highlighted = false,
|
|
147
|
+
{children, rowIndex = 0, draggable, highlighted = false, ...rest}: TableInputRowProps,
|
|
157
148
|
forwardedRef: Ref<HTMLTableRowElement>
|
|
158
149
|
) => {
|
|
159
150
|
const [placeholderPosition, placeholderDragEnter, placeholderDragLeave, placeholderDragEnd] =
|
|
160
151
|
usePlaceholderPosition(rowIndex);
|
|
161
152
|
|
|
162
153
|
const {isDragAndDroppable} = useContext(TableInputContext);
|
|
154
|
+
const {index: draggedElementIndex, onDragStart, onDragEnd} = useContext(DraggedElementContext);
|
|
163
155
|
|
|
164
|
-
const handleDragEnter = (
|
|
165
|
-
if (isDragAndDroppable) {
|
|
166
|
-
placeholderDragEnter(
|
|
156
|
+
const handleDragEnter = () => {
|
|
157
|
+
if (isDragAndDroppable && null !== draggedElementIndex) {
|
|
158
|
+
placeholderDragEnter(draggedElementIndex);
|
|
167
159
|
}
|
|
168
160
|
};
|
|
169
161
|
|
|
170
162
|
const handleDragStart = (event: DragEvent<HTMLTableRowElement>) => {
|
|
171
163
|
if (isDragAndDroppable) {
|
|
172
|
-
event.dataTransfer.setData('text', rowIndex.toString());
|
|
164
|
+
event.dataTransfer.setData('text/plain', rowIndex.toString());
|
|
173
165
|
onDragStart?.(rowIndex);
|
|
174
166
|
}
|
|
175
167
|
};
|
|
@@ -8,6 +8,7 @@ import {TableRow} from './TableRow/TableRow';
|
|
|
8
8
|
import {TableContext} from './TableContext';
|
|
9
9
|
import {TableBody} from './TableBody/TableBody';
|
|
10
10
|
import {Override} from '../../shared';
|
|
11
|
+
import {DraggedElementProvider} from '../../contexts/DraggedElementContext';
|
|
11
12
|
|
|
12
13
|
const TableContainer = styled.table`
|
|
13
14
|
border-collapse: collapse;
|
|
@@ -60,7 +61,7 @@ type TableProps = Override<
|
|
|
60
61
|
/**
|
|
61
62
|
* Called when an element has been dragged and dropped on the table.
|
|
62
63
|
*/
|
|
63
|
-
onReorder: (updatedIndices: number[]) => void;
|
|
64
|
+
onReorder: (updatedIndices: number[], draggedIndex?: number, droppedIndex?: number) => void;
|
|
64
65
|
}
|
|
65
66
|
)
|
|
66
67
|
>;
|
|
@@ -85,7 +86,9 @@ const Table = ({
|
|
|
85
86
|
|
|
86
87
|
return (
|
|
87
88
|
<TableContext.Provider value={providerValue}>
|
|
88
|
-
<
|
|
89
|
+
<DraggedElementProvider>
|
|
90
|
+
<TableContainer {...rest}>{children}</TableContainer>
|
|
91
|
+
</DraggedElementProvider>
|
|
89
92
|
</TableContext.Provider>
|
|
90
93
|
);
|
|
91
94
|
};
|
|
@@ -105,3 +108,4 @@ Table.Cell = TableCell;
|
|
|
105
108
|
Table.ActionCell = TableActionCell;
|
|
106
109
|
|
|
107
110
|
export {Table};
|
|
111
|
+
export type {TableProps};
|
|
@@ -132,7 +132,7 @@ test('it renders table with drag and drop', () => {
|
|
|
132
132
|
fireEvent.drop(screen.getAllByRole('row')[3], {dataTransfer});
|
|
133
133
|
fireEvent.dragEnd(screen.getAllByRole('row')[1], {dataTransfer});
|
|
134
134
|
|
|
135
|
-
expect(handleReorder).toHaveBeenCalledWith([1, 2, 0]);
|
|
135
|
+
expect(handleReorder).toHaveBeenCalledWith([1, 2, 0], 0, 2);
|
|
136
136
|
});
|
|
137
137
|
|
|
138
138
|
test('Table supports ...rest props', () => {
|
|
@@ -2,7 +2,7 @@ import React, {Ref, cloneElement, Children, useContext, ReactElement} from 'reac
|
|
|
2
2
|
import {TableRowProps} from '../TableRow/TableRow';
|
|
3
3
|
import {TableContext} from '../TableContext';
|
|
4
4
|
import {useDrop} from '../../../hooks/useDrop';
|
|
5
|
-
import {
|
|
5
|
+
import {DraggedElementContext} from '../../../contexts/DraggedElementContext';
|
|
6
6
|
|
|
7
7
|
type TableBodyChild = TableBodyChild[] | ReactElement<TableRowProps> | boolean | undefined;
|
|
8
8
|
|
|
@@ -15,8 +15,8 @@ type TableBodyProps = {
|
|
|
15
15
|
|
|
16
16
|
const TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(
|
|
17
17
|
({children, ...rest}: TableBodyProps, forwardedRef: Ref<HTMLTableSectionElement>) => {
|
|
18
|
-
const [draggedElementIndex, onDragStart, onDragEnd] = useDragElementIndex();
|
|
19
18
|
const {isDragAndDroppable, onReorder} = useContext(TableContext);
|
|
19
|
+
const {index: draggedElementIndex} = useContext(DraggedElementContext);
|
|
20
20
|
const decoratedChildren = isDragAndDroppable
|
|
21
21
|
? Children.map(children, (child, rowIndex) => {
|
|
22
22
|
if (!React.isValidElement<TableRowProps>(child)) {
|
|
@@ -26,8 +26,6 @@ const TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(
|
|
|
26
26
|
return cloneElement(child, {
|
|
27
27
|
rowIndex,
|
|
28
28
|
draggable: rowIndex === draggedElementIndex,
|
|
29
|
-
onDragStart,
|
|
30
|
-
onDragEnd,
|
|
31
29
|
});
|
|
32
30
|
})
|
|
33
31
|
: children;
|
|
@@ -6,7 +6,7 @@ type TableContextType = {
|
|
|
6
6
|
hasLockedRows: boolean;
|
|
7
7
|
displayCheckbox: boolean;
|
|
8
8
|
isDragAndDroppable: boolean;
|
|
9
|
-
onReorder: ((reorderedIndices: number[]) => void) | undefined;
|
|
9
|
+
onReorder: ((reorderedIndices: number[], draggedIndex?: number, droppedIndex?: number) => void) | undefined;
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
const TableContext = createContext<TableContextType>({
|
|
@@ -16,6 +16,7 @@ import {TableContext} from '../TableContext';
|
|
|
16
16
|
import {TableCell} from '../TableCell/TableCell';
|
|
17
17
|
import {RowIcon, DangerIcon, LockIcon} from '../../../icons';
|
|
18
18
|
import {PlaceholderPosition, usePlaceholderPosition} from '../../../hooks/usePlaceholderPosition';
|
|
19
|
+
import {DraggedElementContext} from '../../../contexts/DraggedElementContext';
|
|
19
20
|
|
|
20
21
|
type Level = 'warning' | 'tertiary';
|
|
21
22
|
|
|
@@ -164,33 +165,12 @@ type TableRowProps = Override<
|
|
|
164
165
|
* @private
|
|
165
166
|
*/
|
|
166
167
|
rowIndex?: number;
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* @private
|
|
170
|
-
*/
|
|
171
|
-
onDragStart?: (rowIndex: number) => void;
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* @private
|
|
175
|
-
*/
|
|
176
|
-
onDragEnd?: () => void;
|
|
177
168
|
}
|
|
178
169
|
>;
|
|
179
170
|
|
|
180
171
|
const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(
|
|
181
172
|
(
|
|
182
|
-
{
|
|
183
|
-
rowIndex = 0,
|
|
184
|
-
isSelected = false,
|
|
185
|
-
level,
|
|
186
|
-
onSelectToggle,
|
|
187
|
-
onClick,
|
|
188
|
-
draggable,
|
|
189
|
-
onDragStart,
|
|
190
|
-
onDragEnd,
|
|
191
|
-
children,
|
|
192
|
-
...rest
|
|
193
|
-
}: TableRowProps,
|
|
173
|
+
{rowIndex = 0, isSelected = false, level, onSelectToggle, onClick, draggable, children, ...rest}: TableRowProps,
|
|
194
174
|
forwardedRef: Ref<HTMLTableRowElement>
|
|
195
175
|
) => {
|
|
196
176
|
const [placeholderPosition, placeholderDragEnter, placeholderDragLeave, placeholderDragEnd] =
|
|
@@ -200,14 +180,17 @@ const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(
|
|
|
200
180
|
if (isSelectable && (undefined === isSelected || undefined === onSelectToggle)) {
|
|
201
181
|
throw Error('A row in a selectable table should have the prop "isSelected" and "onSelectToggle"');
|
|
202
182
|
}
|
|
183
|
+
const {index: draggedElementIndex, onDragStart, onDragEnd} = useContext(DraggedElementContext);
|
|
203
184
|
|
|
204
185
|
const handleCheckboxChange = (event: SyntheticEvent) => {
|
|
205
186
|
event.stopPropagation();
|
|
206
187
|
onSelectToggle?.(!isSelected);
|
|
207
188
|
};
|
|
208
189
|
|
|
209
|
-
const handleDragEnter = (
|
|
210
|
-
|
|
190
|
+
const handleDragEnter = () => {
|
|
191
|
+
if (null !== draggedElementIndex) {
|
|
192
|
+
placeholderDragEnter(draggedElementIndex);
|
|
193
|
+
}
|
|
211
194
|
};
|
|
212
195
|
|
|
213
196
|
const handleDragStart = (event: DragEvent<HTMLTableRowElement>) => {
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import {createContext, PropsWithChildren, useCallback, useState} from 'react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import {TableProps, TableInputProps} from '../components';
|
|
4
|
+
|
|
5
|
+
type DraggedElementType = {
|
|
6
|
+
index: number | null;
|
|
7
|
+
onDragStart: (rowIndex: number) => void;
|
|
8
|
+
onDragEnd?: () => void;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const DraggedElementContext = createContext<DraggedElementType>({
|
|
12
|
+
index: null,
|
|
13
|
+
onDragStart: () => void 0,
|
|
14
|
+
onDragEnd: () => void 0,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const DraggedElementProvider = ({children}: PropsWithChildren<TableProps | TableInputProps>) => {
|
|
18
|
+
const [index, setDraggedElementIndex] = useState<number | null>(null);
|
|
19
|
+
const onDragStart = useCallback((index: number) => setDraggedElementIndex(index), []);
|
|
20
|
+
const onDragEnd = useCallback(() => setDraggedElementIndex(null), []);
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<DraggedElementContext.Provider value={{index, onDragStart, onDragEnd}}>{children}</DraggedElementContext.Provider>
|
|
24
|
+
);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export {DraggedElementProvider, DraggedElementContext};
|
package/src/hooks/useDrop.ts
CHANGED
|
@@ -28,7 +28,7 @@ const generateReorderedIndices = (size: number, draggedIndex: number, droppedInd
|
|
|
28
28
|
const useDrop = (
|
|
29
29
|
tableSize: number,
|
|
30
30
|
draggedElementIndex: number | null,
|
|
31
|
-
onReorder: ((reorderedIndices: number[]) => void) | undefined
|
|
31
|
+
onReorder: ((reorderedIndices: number[], draggedIndex?: number, droppedIndex?: number) => void) | undefined
|
|
32
32
|
) => {
|
|
33
33
|
const tableId = useId('table_');
|
|
34
34
|
|
|
@@ -40,7 +40,11 @@ const useDrop = (
|
|
|
40
40
|
const droppedElementIndex = getDropRow(event.target as HTMLElement);
|
|
41
41
|
const newIndices = generateReorderedIndices(tableSize, draggedElementIndex, droppedElementIndex);
|
|
42
42
|
|
|
43
|
-
onReorder
|
|
43
|
+
if (onReorder.length === 1) {
|
|
44
|
+
onReorder(newIndices); // backwards compatibility
|
|
45
|
+
} else {
|
|
46
|
+
onReorder(newIndices, draggedElementIndex, droppedElementIndex);
|
|
47
|
+
}
|
|
44
48
|
}
|
|
45
49
|
};
|
|
46
50
|
|
|
@@ -60,7 +60,45 @@ test('it does not on reorder callback when user drag and drop', () => {
|
|
|
60
60
|
// @ts-ignore
|
|
61
61
|
handleDrop(event);
|
|
62
62
|
|
|
63
|
-
expect(onReorder).toHaveBeenCalledWith([0, 2, 1, 3]);
|
|
63
|
+
expect(onReorder).toHaveBeenCalledWith([0, 2, 1, 3], 1, 2);
|
|
64
|
+
expect(stopPropagation).toHaveBeenCalled();
|
|
65
|
+
expect(preventDefault).toHaveBeenCalled();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('it does on reorder callback with only one argument', () => {
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
70
|
+
// @ts-ignore
|
|
71
|
+
const onReorderWithOneArgument = jest.fn((newIndices: number[]) => {
|
|
72
|
+
newIndices.map(x => x);
|
|
73
|
+
});
|
|
74
|
+
const stopPropagation = jest.fn();
|
|
75
|
+
const preventDefault = jest.fn();
|
|
76
|
+
const {result} = renderHook(() => useDrop(4, 1, onReorderWithOneArgument));
|
|
77
|
+
|
|
78
|
+
const [tableId, handleDrop] = result.current;
|
|
79
|
+
const event = {
|
|
80
|
+
currentTarget: {
|
|
81
|
+
dataset: {
|
|
82
|
+
tableId,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
target: {
|
|
86
|
+
dataset: {},
|
|
87
|
+
parentElement: {
|
|
88
|
+
dataset: {
|
|
89
|
+
draggableIndex: '2',
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
stopPropagation,
|
|
94
|
+
preventDefault,
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
98
|
+
// @ts-ignore
|
|
99
|
+
handleDrop(event);
|
|
100
|
+
|
|
101
|
+
expect(onReorderWithOneArgument).toHaveBeenCalledWith([0, 2, 1, 3]);
|
|
64
102
|
expect(stopPropagation).toHaveBeenCalled();
|
|
65
103
|
expect(preventDefault).toHaveBeenCalled();
|
|
66
104
|
});
|
|
@@ -3,30 +3,30 @@ import {useCallback, useEffect, useState} from 'react';
|
|
|
3
3
|
type PlaceholderPosition = 'top' | 'bottom' | 'none';
|
|
4
4
|
|
|
5
5
|
const usePlaceholderPosition = (rowIndex: number) => {
|
|
6
|
-
const [
|
|
6
|
+
const [hoveringCount, setHoveringCount] = useState<number>(0);
|
|
7
7
|
const [placeholderPosition, setPlaceholderPosition] = useState<PlaceholderPosition>('none');
|
|
8
8
|
|
|
9
9
|
useEffect(() => {
|
|
10
|
-
|
|
10
|
+
setHoveringCount(0);
|
|
11
11
|
}, [rowIndex]);
|
|
12
12
|
|
|
13
13
|
const dragEnter = useCallback(
|
|
14
14
|
(draggedElementIndex: number) => {
|
|
15
|
-
|
|
15
|
+
setHoveringCount(count => (draggedElementIndex === rowIndex ? count : count + 1));
|
|
16
16
|
setPlaceholderPosition(draggedElementIndex >= rowIndex ? 'top' : 'bottom');
|
|
17
17
|
},
|
|
18
18
|
[rowIndex]
|
|
19
19
|
);
|
|
20
20
|
|
|
21
21
|
const dragLeave = useCallback(() => {
|
|
22
|
-
|
|
22
|
+
setHoveringCount(count => count - 1);
|
|
23
23
|
}, []);
|
|
24
24
|
|
|
25
25
|
const dragEnd = useCallback(() => {
|
|
26
|
-
|
|
26
|
+
setHoveringCount(0);
|
|
27
27
|
}, []);
|
|
28
28
|
|
|
29
|
-
return [
|
|
29
|
+
return [hoveringCount === 0 ? 'none' : placeholderPosition, dragEnter, dragLeave, dragEnd] as const;
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
export {usePlaceholderPosition};
|
|
@@ -41,5 +41,11 @@ test('it does not give placeholder when dragged element is the same than the dro
|
|
|
41
41
|
dragEnter(2);
|
|
42
42
|
});
|
|
43
43
|
|
|
44
|
-
expect(result.current[0]).toBe('
|
|
44
|
+
expect(result.current[0]).toBe('none');
|
|
45
|
+
|
|
46
|
+
void act(() => {
|
|
47
|
+
dragEnter(1);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
expect(result.current[0]).toBe('bottom');
|
|
45
51
|
});
|