@synerise/ds-manageable-list 1.2.5 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/dist/AddBlankItem/AddBlankItem.d.ts +4 -0
- package/dist/AddBlankItem/AddBlankItem.js +24 -0
- package/dist/AddBlankItem/AddBlankItem.styles.d.ts +1 -0
- package/dist/AddBlankItem/AddBlankItem.styles.js +7 -0
- package/dist/AddBlankItem/AddBlankItem.types.d.ts +6 -0
- package/dist/AddBlankItem/AddBlankItem.types.js +1 -0
- package/dist/Item/BlankItem/BlankItem.d.ts +4 -0
- package/dist/Item/BlankItem/BlankItem.js +67 -0
- package/dist/Item/BlankItem/BlankItem.styles.d.ts +6 -0
- package/dist/Item/BlankItem/BlankItem.styles.js +25 -0
- package/dist/Item/BlankItem/BlankItem.types.d.ts +20 -0
- package/dist/Item/BlankItem/BlankItem.types.js +1 -0
- package/dist/Item/ContentItem/ContentItem.d.ts +1 -0
- package/dist/Item/ContentItem/ContentItem.styles.d.ts +1 -0
- package/dist/Item/ContentItem/ContentItem.styles.js +2 -2
- package/dist/Item/ContentItem/ContentItemHeader.js +1 -0
- package/dist/Item/FilterItem/FilterItem.d.ts +1 -0
- package/dist/Item/Item.d.ts +1 -1
- package/dist/Item/Item.js +13 -1
- package/dist/Item/Item.styles.js +1 -1
- package/dist/Item/Item.types.d.ts +1 -0
- package/dist/ManageableList.d.ts +1 -1
- package/dist/ManageableList.js +16 -6
- package/dist/ManageableList.types.d.ts +4 -2
- package/dist/ManageableList.types.js +1 -0
- package/package.json +17 -17
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,33 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.3.0](https://github.com/Synerise/synerise-design/compare/@synerise/ds-manageable-list@1.2.6...@synerise/ds-manageable-list@1.3.0) (2025-05-07)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **manageable-list:** alignment in content item large ([fd1537e](https://github.com/Synerise/synerise-design/commit/fd1537eea52b064afb79c36d14a53623aa911a38))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* **manageable-list:** add blank item type ([6214c04](https://github.com/Synerise/synerise-design/commit/6214c045afd0f963ebbbc1416e75f54cd8c692ff))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## [1.2.6](https://github.com/Synerise/synerise-design/compare/@synerise/ds-manageable-list@1.2.5...@synerise/ds-manageable-list@1.2.6) (2025-04-24)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
* **manageable-list:** change visibleLimit as optional ([9c54861](https://github.com/Synerise/synerise-design/commit/9c54861f87d7fc9a28491e8a2d9ded7da6dadd41))
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
6
33
|
## [1.2.5](https://github.com/Synerise/synerise-design/compare/@synerise/ds-manageable-list@1.2.4...@synerise/ds-manageable-list@1.2.5) (2025-04-16)
|
|
7
34
|
|
|
8
35
|
**Note:** Version bump only for package @synerise/ds-manageable-list
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Button from '@synerise/ds-button';
|
|
3
|
+
import Icon, { Add3S } from '@synerise/ds-icon';
|
|
4
|
+
import Divider from '@synerise/ds-divider';
|
|
5
|
+
import * as S from './AddBlankItem.styles';
|
|
6
|
+
var AddBlankItem = function AddBlankItem(_ref) {
|
|
7
|
+
var disabled = _ref.disabled,
|
|
8
|
+
onItemAdd = _ref.onItemAdd,
|
|
9
|
+
addItemLabel = _ref.addItemLabel;
|
|
10
|
+
return /*#__PURE__*/React.createElement(S.AddContentButtonWrapper, {
|
|
11
|
+
"data-testid": "add-item-button"
|
|
12
|
+
}, /*#__PURE__*/React.createElement(Divider, {
|
|
13
|
+
dashed: true,
|
|
14
|
+
marginTop: 8
|
|
15
|
+
}), /*#__PURE__*/React.createElement(Button, {
|
|
16
|
+
type: "ghost-primary",
|
|
17
|
+
mode: "icon-label",
|
|
18
|
+
onClick: onItemAdd,
|
|
19
|
+
disabled: disabled
|
|
20
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
21
|
+
component: /*#__PURE__*/React.createElement(Add3S, null)
|
|
22
|
+
}), addItemLabel));
|
|
23
|
+
};
|
|
24
|
+
export default AddBlankItem;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const AddContentButtonWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
|
|
3
|
+
// eslint-disable-next-line import/prefer-default-export
|
|
4
|
+
export var AddContentButtonWrapper = styled.div.withConfig({
|
|
5
|
+
displayName: "AddBlankItemstyles__AddContentButtonWrapper",
|
|
6
|
+
componentId: "sc-1cqa1jm-0"
|
|
7
|
+
})(["display:flex;flex-direction:column;gap:16px;align-items:flex-start;"]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { BlankItemProps } from './BlankItem.types';
|
|
3
|
+
declare const BlankItem: <T extends object>({ onRemove, onDuplicate, draggable, renderItem, item, texts, rowGap, ...rest }: BlankItemProps<T>) => React.JSX.Element;
|
|
4
|
+
export default BlankItem;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
var _excluded = ["onRemove", "onDuplicate", "draggable", "renderItem", "item", "texts", "rowGap"];
|
|
2
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
3
|
+
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
|
|
4
|
+
import React, { useCallback } from 'react';
|
|
5
|
+
import Tooltip from '@synerise/ds-tooltip';
|
|
6
|
+
import Icon, { CloseS, DragHandleM, DuplicateS } from '@synerise/ds-icon';
|
|
7
|
+
import { useTheme } from '@synerise/ds-core';
|
|
8
|
+
import * as S from './BlankItem.styles';
|
|
9
|
+
import { useTexts } from '../../hooks/useTexts';
|
|
10
|
+
var BlankItem = function BlankItem(_ref) {
|
|
11
|
+
var onRemove = _ref.onRemove,
|
|
12
|
+
onDuplicate = _ref.onDuplicate,
|
|
13
|
+
draggable = _ref.draggable,
|
|
14
|
+
renderItem = _ref.renderItem,
|
|
15
|
+
item = _ref.item,
|
|
16
|
+
texts = _ref.texts,
|
|
17
|
+
_ref$rowGap = _ref.rowGap,
|
|
18
|
+
rowGap = _ref$rowGap === void 0 ? 16 : _ref$rowGap,
|
|
19
|
+
rest = _objectWithoutPropertiesLoose(_ref, _excluded);
|
|
20
|
+
var theme = useTheme();
|
|
21
|
+
var allTexts = useTexts(texts);
|
|
22
|
+
var handleRemove = useCallback(function (event) {
|
|
23
|
+
event.stopPropagation();
|
|
24
|
+
var id = item.id;
|
|
25
|
+
onRemove && onRemove({
|
|
26
|
+
id: id
|
|
27
|
+
});
|
|
28
|
+
}, [item, onRemove]);
|
|
29
|
+
var handleDuplicate = useCallback(function (event) {
|
|
30
|
+
event.stopPropagation();
|
|
31
|
+
var id = item.id;
|
|
32
|
+
onDuplicate && onDuplicate({
|
|
33
|
+
id: id
|
|
34
|
+
});
|
|
35
|
+
}, [item, onDuplicate]);
|
|
36
|
+
return /*#__PURE__*/React.createElement(S.BlankItemWrapper, _extends({
|
|
37
|
+
key: item.id,
|
|
38
|
+
"data-testid": "manageable-list-blank-item",
|
|
39
|
+
rowGap: rowGap
|
|
40
|
+
}, rest), draggable && /*#__PURE__*/React.createElement(S.DragHandle, {
|
|
41
|
+
className: "item-drag-handle"
|
|
42
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
43
|
+
size: 24,
|
|
44
|
+
component: /*#__PURE__*/React.createElement(DragHandleM, {
|
|
45
|
+
color: "currentColor"
|
|
46
|
+
})
|
|
47
|
+
})), /*#__PURE__*/React.createElement(S.BlankItemContent, null, renderItem(item)), (onRemove || onDuplicate) && /*#__PURE__*/React.createElement(S.BlankItemActions, null, onDuplicate && /*#__PURE__*/React.createElement(Tooltip, {
|
|
48
|
+
type: "default",
|
|
49
|
+
trigger: "hover",
|
|
50
|
+
title: allTexts.itemActionDuplicateTooltip
|
|
51
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
52
|
+
component: /*#__PURE__*/React.createElement(DuplicateS, null),
|
|
53
|
+
color: theme.palette['grey-600'],
|
|
54
|
+
size: 24,
|
|
55
|
+
onClick: handleDuplicate
|
|
56
|
+
})), onRemove && /*#__PURE__*/React.createElement(Tooltip, {
|
|
57
|
+
type: "default",
|
|
58
|
+
trigger: "hover",
|
|
59
|
+
title: allTexts.itemActionDeleteTooltip
|
|
60
|
+
}, /*#__PURE__*/React.createElement(Icon, {
|
|
61
|
+
component: /*#__PURE__*/React.createElement(CloseS, null),
|
|
62
|
+
size: 24,
|
|
63
|
+
color: theme.palette['red-600'],
|
|
64
|
+
onClick: handleRemove
|
|
65
|
+
}))));
|
|
66
|
+
};
|
|
67
|
+
export default BlankItem;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const BlankItemActions: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
2
|
+
export declare const DragHandle: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
3
|
+
export declare const BlankItemWrapper: import("styled-components").StyledComponent<"div", any, {
|
|
4
|
+
rowGap: number;
|
|
5
|
+
}, never>;
|
|
6
|
+
export declare const BlankItemContent: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import styled from 'styled-components';
|
|
2
|
+
export var BlankItemActions = styled.div.withConfig({
|
|
3
|
+
displayName: "BlankItemstyles__BlankItemActions",
|
|
4
|
+
componentId: "sc-19vgbbk-0"
|
|
5
|
+
})(["opacity:0;flex:0 1 auto;transition:opacity 0.2s;svg:hover{fill:", ";}"], function (props) {
|
|
6
|
+
return props.theme.palette['blue-600'];
|
|
7
|
+
});
|
|
8
|
+
export var DragHandle = styled.div.withConfig({
|
|
9
|
+
displayName: "BlankItemstyles__DragHandle",
|
|
10
|
+
componentId: "sc-19vgbbk-1"
|
|
11
|
+
})(["flex:0 1 auto;cursor:grab;svg{fill:", ";}&:hover{svg{fill:", ";}}"], function (props) {
|
|
12
|
+
return props.theme.palette['grey-400'];
|
|
13
|
+
}, function (props) {
|
|
14
|
+
return props.theme.palette['grey-600'];
|
|
15
|
+
});
|
|
16
|
+
export var BlankItemWrapper = styled.div.withConfig({
|
|
17
|
+
displayName: "BlankItemstyles__BlankItemWrapper",
|
|
18
|
+
componentId: "sc-19vgbbk-2"
|
|
19
|
+
})(["display:flex;align-items:center;justify-content:space-between;margin-bottom:", "px;&:hover{", "{opacity:1;}}"], function (props) {
|
|
20
|
+
return props.rowGap;
|
|
21
|
+
}, BlankItemActions);
|
|
22
|
+
export var BlankItemContent = styled.div.withConfig({
|
|
23
|
+
displayName: "BlankItemstyles__BlankItemContent",
|
|
24
|
+
componentId: "sc-19vgbbk-3"
|
|
25
|
+
})(["flex:1 1 auto;"]);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { WithHTMLAttributes } from '@synerise/ds-utils';
|
|
3
|
+
import type { ItemProps } from '../Item.types';
|
|
4
|
+
import type { Texts } from '../../ManageableList.types';
|
|
5
|
+
export type BlankItemBaseProps<T extends object> = Pick<ItemProps<T>, 'id' | 'name'>;
|
|
6
|
+
export type BaseBlankItemProps<T extends object> = {
|
|
7
|
+
texts?: Partial<Texts>;
|
|
8
|
+
draggable?: boolean;
|
|
9
|
+
renderItem: (item: BlankItemBaseProps<T>) => ReactNode;
|
|
10
|
+
item: BlankItemBaseProps<T>;
|
|
11
|
+
index?: number;
|
|
12
|
+
rowGap?: number;
|
|
13
|
+
onDuplicate?: (duplicateParams: {
|
|
14
|
+
id: string | number;
|
|
15
|
+
}) => void;
|
|
16
|
+
onRemove?: (removeParams: {
|
|
17
|
+
id: string | number;
|
|
18
|
+
}) => void;
|
|
19
|
+
};
|
|
20
|
+
export type BlankItemProps<T extends object> = WithHTMLAttributes<HTMLDivElement, BaseBlankItemProps<T>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -21,6 +21,7 @@ declare const ContentItem: (({ onRemove, onUpdate, onDuplicate, draggable, dashe
|
|
|
21
21
|
}, never>;
|
|
22
22
|
ItemHeader: import("styled-components").StyledComponent<"div", any, {
|
|
23
23
|
hasPrefix: boolean;
|
|
24
|
+
hasDescription: boolean;
|
|
24
25
|
size?: "default" | "large" | undefined;
|
|
25
26
|
}, never>;
|
|
26
27
|
ItemHeaderPrefix: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
@@ -9,6 +9,7 @@ export declare const ItemHeaderPrefix: import("styled-components").StyledCompone
|
|
|
9
9
|
export declare const ItemHeaderSuffix: import("styled-components").StyledComponent<"div", any, {}, never>;
|
|
10
10
|
export declare const ItemHeader: import("styled-components").StyledComponent<"div", any, {
|
|
11
11
|
hasPrefix: boolean;
|
|
12
|
+
hasDescription: boolean;
|
|
12
13
|
size?: "default" | "large" | undefined;
|
|
13
14
|
}, never>;
|
|
14
15
|
export declare const ContentWrapper: import("styled-components").StyledComponent<"div", any, {
|
|
@@ -48,7 +48,7 @@ export var ItemHeader = styled.div.withConfig({
|
|
|
48
48
|
displayName: "ContentItemstyles__ItemHeader",
|
|
49
49
|
componentId: "sc-13pyu4r-6"
|
|
50
50
|
})(["display:flex;flex-direction:row;align-items:center;justify-content:stretch;width:100%;padding:12px;cursor:pointer;max-height:48px;position:relative;", " ", "{gap:", "px;}gap:", "px;", " ", "{padding:0;}&:hover{.suffix--hide-on-hover{display:none;}", "{color:", ";}", "{display:flex;}", "{svg{color:", ";fill:", ";}}", "{display:flex;}}"], function (props) {
|
|
51
|
-
return props.size === 'large' && css(["", "{position:absolute;left:0;}"], DraggerWrapper);
|
|
51
|
+
return props.size === 'large' && css(["", " ", "{position:absolute;left:0;}"], props.hasDescription && 'align-items: flex-start;', DraggerWrapper);
|
|
52
52
|
}, ItemHeaderPrefix, function (props) {
|
|
53
53
|
return props.size === 'large' ? 16 : 12;
|
|
54
54
|
}, function (props) {
|
|
@@ -94,7 +94,7 @@ export var ItemContainer = styled.div.withConfig({
|
|
|
94
94
|
}, standardShadow, function (props) {
|
|
95
95
|
return !!props.dashed && dashedStyle(props);
|
|
96
96
|
}, function (props) {
|
|
97
|
-
return props.size === 'large' && css(["", "{max-height:
|
|
97
|
+
return props.size === 'large' && css(["", "{max-height:none;padding:24px;}"], ItemHeader);
|
|
98
98
|
});
|
|
99
99
|
export var ToggleContentWrapper = styled.div.withConfig({
|
|
100
100
|
displayName: "ContentItemstyles__ToggleContentWrapper",
|
|
@@ -77,6 +77,7 @@ export var ContentItemHeader = function ContentItemHeader(_ref) {
|
|
|
77
77
|
return /*#__PURE__*/React.createElement(S.ItemHeader, {
|
|
78
78
|
size: size,
|
|
79
79
|
hasPrefix: hasPrefix,
|
|
80
|
+
hasDescription: !!item.description,
|
|
80
81
|
onClick: function onClick() {
|
|
81
82
|
if (!item.disableExpanding && !editMode) {
|
|
82
83
|
setIsExpanded(!isExpanded);
|
|
@@ -74,6 +74,7 @@ declare const FilterItem: React.ForwardRefExoticComponent<{
|
|
|
74
74
|
}, never>;
|
|
75
75
|
ItemHeader: import("styled-components").StyledComponent<"div", any, {
|
|
76
76
|
hasPrefix: boolean;
|
|
77
|
+
hasDescription: boolean;
|
|
77
78
|
size?: "default" | "large" | undefined;
|
|
78
79
|
}, never>;
|
|
79
80
|
ItemHeaderPrefix: import("styled-components").StyledComponent<"div", any, {}, never>;
|
package/dist/Item/Item.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Props } from './Item.types';
|
|
3
|
-
declare const Item: ({ item, onRemove, onSelect, onUpdate, listType, onDuplicate, greyBackground, draggable, changeOrderDisabled, selected, texts, searchQuery, hideExpander, expanded, onExpand, onMoveBottom, onMoveTop, isFirst, isLast, additionalActions, }: Props) => React.JSX.Element;
|
|
3
|
+
declare const Item: ({ item, onRemove, onSelect, onUpdate, listType, onDuplicate, greyBackground, draggable, changeOrderDisabled, selected, texts, searchQuery, hideExpander, expanded, onExpand, onMoveBottom, onMoveTop, isFirst, isLast, additionalActions, renderItem, }: Props) => React.JSX.Element;
|
|
4
4
|
export default Item;
|
package/dist/Item/Item.js
CHANGED
|
@@ -3,6 +3,7 @@ import { ListType } from '../ManageableList.types';
|
|
|
3
3
|
import ContentItem from './ContentItem/ContentItem';
|
|
4
4
|
import SimpleItem from './SimpleItem/SimpleItem';
|
|
5
5
|
import FilterItem from './FilterItem/FilterItem';
|
|
6
|
+
import BlankItem from './BlankItem/BlankItem';
|
|
6
7
|
var Item = function Item(_ref) {
|
|
7
8
|
var item = _ref.item,
|
|
8
9
|
onRemove = _ref.onRemove,
|
|
@@ -23,7 +24,8 @@ var Item = function Item(_ref) {
|
|
|
23
24
|
onMoveTop = _ref.onMoveTop,
|
|
24
25
|
isFirst = _ref.isFirst,
|
|
25
26
|
isLast = _ref.isLast,
|
|
26
|
-
additionalActions = _ref.additionalActions
|
|
27
|
+
additionalActions = _ref.additionalActions,
|
|
28
|
+
renderItem = _ref.renderItem;
|
|
27
29
|
switch (listType) {
|
|
28
30
|
case ListType.CONTENT:
|
|
29
31
|
case ListType.CONTENT_LARGE:
|
|
@@ -46,6 +48,16 @@ var Item = function Item(_ref) {
|
|
|
46
48
|
isFirst: Boolean(isFirst),
|
|
47
49
|
isLast: Boolean(isLast)
|
|
48
50
|
});
|
|
51
|
+
case ListType.BLANK:
|
|
52
|
+
return /*#__PURE__*/React.createElement(BlankItem, {
|
|
53
|
+
key: "item-" + item.id,
|
|
54
|
+
item: item,
|
|
55
|
+
onDuplicate: onDuplicate,
|
|
56
|
+
onRemove: onRemove,
|
|
57
|
+
draggable: draggable,
|
|
58
|
+
texts: texts,
|
|
59
|
+
renderItem: renderItem
|
|
60
|
+
});
|
|
49
61
|
case ListType.FILTER:
|
|
50
62
|
return /*#__PURE__*/React.createElement(FilterItem, {
|
|
51
63
|
key: "item-" + item.id,
|
package/dist/Item/Item.styles.js
CHANGED
|
@@ -19,7 +19,7 @@ export var ItemLabelWrapper = styled.div.withConfig({
|
|
|
19
19
|
displayName: "Itemstyles__ItemLabelWrapper",
|
|
20
20
|
componentId: "sc-1an9szf-2"
|
|
21
21
|
})(["flex:1;display:flex;flex-grow:1;.ant-tooltip-inner{max-width:164px;padding:16px 16px 19px;}", ""], function (props) {
|
|
22
|
-
return props.largeSize ? css(["
|
|
22
|
+
return props.largeSize ? css(["flex-direction:column;gap:10px;overflow-y:visible;", "{margin-left:24px;}"], ItemTagList) : css(["flex-direction:row;align-items:center;overflow:hidden;height:24px;justify-content:flex-start;"]);
|
|
23
23
|
});
|
|
24
24
|
export var ItemContainer = styled.div.withConfig({
|
|
25
25
|
displayName: "Itemstyles__ItemContainer",
|
package/dist/ManageableList.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { ManageableListProps } from './ManageableList.types';
|
|
3
|
-
declare const ManageableList: (<T extends object>({ className, onItemAdd, onItemSelect, onItemDuplicate, onItemRemove, onItemEdit, onChangeOrder, items, maxToShowItems, visibleItemsLimit, loading, type, addButtonDisabled, changeOrderDisabled, greyBackground, placeholder, selectedItemId, searchQuery, expanderDisabled, onExpand, expandedIds, texts, changeOrderByButtons, additionalActions, style, renderCustomToggleButton, }: ManageableListProps<T>) => React.JSX.Element) & {
|
|
3
|
+
declare const ManageableList: (<T extends object>({ className, onItemAdd, onItemSelect, onItemDuplicate, onItemRemove, onItemEdit, onChangeOrder, items, maxToShowItems, visibleItemsLimit, loading, type, addButtonDisabled, changeOrderDisabled, greyBackground, placeholder, selectedItemId, searchQuery, expanderDisabled, onExpand, expandedIds, texts, changeOrderByButtons, additionalActions, style, renderItem, renderCustomToggleButton, }: ManageableListProps<T>) => React.JSX.Element) & {
|
|
4
4
|
ManageableListContainer: import("styled-components").StyledComponent<"div", any, {
|
|
5
5
|
listType: string;
|
|
6
6
|
greyBackground: boolean;
|
package/dist/ManageableList.js
CHANGED
|
@@ -8,6 +8,7 @@ import AddItemWithName from './AddItemWithName/AddItemWithName';
|
|
|
8
8
|
import AddItem from './AddItem/AddItem';
|
|
9
9
|
import { ListType } from './ManageableList.types';
|
|
10
10
|
import { useTexts } from './hooks/useTexts';
|
|
11
|
+
import AddBlankItem from './AddBlankItem/AddBlankItem';
|
|
11
12
|
var SORTABLE_CONFIG = {
|
|
12
13
|
ghostClass: 'sortable-list-ghost-element',
|
|
13
14
|
className: 'sortable-list',
|
|
@@ -22,7 +23,6 @@ var SORTABLE_CONFIG = {
|
|
|
22
23
|
sortable.el.classList.remove('sorting-started');
|
|
23
24
|
}
|
|
24
25
|
};
|
|
25
|
-
var INITIALLY_VISIBLE_COUNT = 5;
|
|
26
26
|
var ManageableListComponent = function ManageableListComponent(_ref) {
|
|
27
27
|
var className = _ref.className,
|
|
28
28
|
onItemAdd = _ref.onItemAdd,
|
|
@@ -54,12 +54,16 @@ var ManageableListComponent = function ManageableListComponent(_ref) {
|
|
|
54
54
|
changeOrderByButtons = _ref$changeOrderByBut === void 0 ? false : _ref$changeOrderByBut,
|
|
55
55
|
additionalActions = _ref.additionalActions,
|
|
56
56
|
style = _ref.style,
|
|
57
|
+
_ref$renderItem = _ref.renderItem,
|
|
58
|
+
renderItem = _ref$renderItem === void 0 ? function () {
|
|
59
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null);
|
|
60
|
+
} : _ref$renderItem,
|
|
57
61
|
renderCustomToggleButton = _ref.renderCustomToggleButton;
|
|
58
62
|
var _useState = useState(false),
|
|
59
63
|
allItemsVisible = _useState[0],
|
|
60
64
|
setAllItemsVisible = _useState[1];
|
|
61
65
|
var allTexts = useTexts(texts);
|
|
62
|
-
var visibleLimit = visibleItemsLimit || maxToShowItems
|
|
66
|
+
var visibleLimit = visibleItemsLimit || maxToShowItems;
|
|
63
67
|
var getExpandedIds = useCallback(function () {
|
|
64
68
|
return expandedIds !== undefined ? expandedIds : items.filter(function (item) {
|
|
65
69
|
return item.expanded;
|
|
@@ -74,7 +78,8 @@ var ManageableListComponent = function ManageableListComponent(_ref) {
|
|
|
74
78
|
setAllExpandedIds(getExpandedIds());
|
|
75
79
|
}, [expandedIds, items, getExpandedIds]);
|
|
76
80
|
var getItemsOverLimit = useMemo(function () {
|
|
77
|
-
return items.length - visibleLimit;
|
|
81
|
+
if (visibleLimit) return items.length - visibleLimit;
|
|
82
|
+
return 0;
|
|
78
83
|
}, [items, visibleLimit]);
|
|
79
84
|
var visibleItems = useMemo(function () {
|
|
80
85
|
return allItemsVisible ? items : items.slice(0, visibleLimit);
|
|
@@ -125,10 +130,11 @@ var ManageableListComponent = function ManageableListComponent(_ref) {
|
|
|
125
130
|
searchQuery: searchQuery,
|
|
126
131
|
hideExpander: expanderDisabled,
|
|
127
132
|
expanded: allExpandedIds && allExpandedIds.includes(item.id),
|
|
128
|
-
additionalActions: additionalActions
|
|
133
|
+
additionalActions: additionalActions,
|
|
134
|
+
renderItem: renderItem
|
|
129
135
|
});
|
|
130
|
-
}, [items.length, type, onItemSelect, onItemEdit, onItemRemove, onItemDuplicate, onExpand, changeOrderByButtons, onMoveTop, onMoveBottom, onChangeOrder, changeOrderDisabled, greyBackground, selectedItemId, allTexts, searchQuery, expanderDisabled, allExpandedIds, additionalActions]);
|
|
131
|
-
var toggleMoreItemsButton = items.length > visibleLimit ? renderCustomToggleButton && renderCustomToggleButton({
|
|
136
|
+
}, [items.length, type, onItemSelect, onItemEdit, onItemRemove, onItemDuplicate, onExpand, changeOrderByButtons, onMoveTop, onMoveBottom, onChangeOrder, changeOrderDisabled, greyBackground, selectedItemId, allTexts, searchQuery, expanderDisabled, allExpandedIds, additionalActions, renderItem]);
|
|
137
|
+
var toggleMoreItemsButton = visibleLimit && items.length > visibleLimit ? renderCustomToggleButton && renderCustomToggleButton({
|
|
132
138
|
onClick: toggleAllItems,
|
|
133
139
|
allItemsVisible: allItemsVisible,
|
|
134
140
|
total: items.length,
|
|
@@ -158,6 +164,10 @@ var ManageableListComponent = function ManageableListComponent(_ref) {
|
|
|
158
164
|
addItemLabel: allTexts.addItemLabel,
|
|
159
165
|
onItemAdd: createItem,
|
|
160
166
|
disabled: addButtonDisabled
|
|
167
|
+
}), type === ListType.BLANK && Boolean(onItemAdd) && /*#__PURE__*/React.createElement(AddBlankItem, {
|
|
168
|
+
addItemLabel: allTexts.addItemLabel,
|
|
169
|
+
onItemAdd: createItem,
|
|
170
|
+
disabled: addButtonDisabled
|
|
161
171
|
}));
|
|
162
172
|
};
|
|
163
173
|
var ManageableList = Object.assign(ManageableListComponent, {
|
|
@@ -8,6 +8,7 @@ export declare enum ExpansionBehaviour {
|
|
|
8
8
|
}
|
|
9
9
|
export declare enum ListType {
|
|
10
10
|
DEFAULT = "default",
|
|
11
|
+
BLANK = "blank",
|
|
11
12
|
CONTENT = "content",
|
|
12
13
|
CONTENT_LARGE = "content-large",
|
|
13
14
|
FILTER = "filter"
|
|
@@ -61,13 +62,14 @@ export type ManageableListProps<T extends object> = {
|
|
|
61
62
|
limit: number;
|
|
62
63
|
allItemsVisible: boolean;
|
|
63
64
|
}) => ReactNode;
|
|
65
|
+
renderItem?: (item: ItemProps) => ReactNode;
|
|
64
66
|
} & ExactlyOne<{
|
|
65
67
|
/**
|
|
66
68
|
* @deprecated - use visibleItemsLimit prop instead
|
|
67
69
|
*/
|
|
68
|
-
maxToShowItems
|
|
70
|
+
maxToShowItems?: number;
|
|
69
71
|
}, {
|
|
70
|
-
visibleItemsLimit
|
|
72
|
+
visibleItemsLimit?: number;
|
|
71
73
|
}>;
|
|
72
74
|
export type Texts = {
|
|
73
75
|
addItemLabel: ReactNode;
|
|
@@ -6,6 +6,7 @@ export var ExpansionBehaviour = /*#__PURE__*/function (ExpansionBehaviour) {
|
|
|
6
6
|
}({});
|
|
7
7
|
export var ListType = /*#__PURE__*/function (ListType) {
|
|
8
8
|
ListType["DEFAULT"] = "default";
|
|
9
|
+
ListType["BLANK"] = "blank";
|
|
9
10
|
ListType["CONTENT"] = "content";
|
|
10
11
|
ListType["CONTENT_LARGE"] = "content-large";
|
|
11
12
|
ListType["FILTER"] = "filter";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@synerise/ds-manageable-list",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "ManageableList UI Component for the Synerise Design System",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"repository": "Synerise/synerise-design",
|
|
@@ -34,21 +34,21 @@
|
|
|
34
34
|
],
|
|
35
35
|
"types": "dist/index.d.ts",
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@synerise/ds-avatar": "^1.0.
|
|
38
|
-
"@synerise/ds-button": "^1.
|
|
39
|
-
"@synerise/ds-dropdown": "^1.0.
|
|
40
|
-
"@synerise/ds-icon": "^1.4.
|
|
41
|
-
"@synerise/ds-inline-edit": "^1.0.
|
|
42
|
-
"@synerise/ds-input": "^1.1.
|
|
43
|
-
"@synerise/ds-list": "^1.0.
|
|
44
|
-
"@synerise/ds-menu": "^1.0.
|
|
45
|
-
"@synerise/ds-modal": "^1.0.
|
|
46
|
-
"@synerise/ds-popconfirm": "^1.0.
|
|
47
|
-
"@synerise/ds-result": "^1.0.
|
|
48
|
-
"@synerise/ds-tag": "^1.1.
|
|
49
|
-
"@synerise/ds-tooltip": "^1.1.
|
|
50
|
-
"@synerise/ds-typography": "^1.0.
|
|
51
|
-
"@synerise/ds-utils": "^1.0
|
|
37
|
+
"@synerise/ds-avatar": "^1.0.7",
|
|
38
|
+
"@synerise/ds-button": "^1.2.0",
|
|
39
|
+
"@synerise/ds-dropdown": "^1.0.7",
|
|
40
|
+
"@synerise/ds-icon": "^1.4.2",
|
|
41
|
+
"@synerise/ds-inline-edit": "^1.0.8",
|
|
42
|
+
"@synerise/ds-input": "^1.1.2",
|
|
43
|
+
"@synerise/ds-list": "^1.0.7",
|
|
44
|
+
"@synerise/ds-menu": "^1.0.7",
|
|
45
|
+
"@synerise/ds-modal": "^1.0.7",
|
|
46
|
+
"@synerise/ds-popconfirm": "^1.0.7",
|
|
47
|
+
"@synerise/ds-result": "^1.0.7",
|
|
48
|
+
"@synerise/ds-tag": "^1.1.6",
|
|
49
|
+
"@synerise/ds-tooltip": "^1.1.6",
|
|
50
|
+
"@synerise/ds-typography": "^1.0.7",
|
|
51
|
+
"@synerise/ds-utils": "^1.1.0",
|
|
52
52
|
"moment": "^2.30.1",
|
|
53
53
|
"react-animate-height": "^2.0.23",
|
|
54
54
|
"react-sortablejs": "^6.0.0",
|
|
@@ -61,5 +61,5 @@
|
|
|
61
61
|
"react-intl": ">=3.12.0 <= 6.8",
|
|
62
62
|
"styled-components": "^5.3.3"
|
|
63
63
|
},
|
|
64
|
-
"gitHead": "
|
|
64
|
+
"gitHead": "90af7549cf0f556340bdd0deec4bb59bacf3e95e"
|
|
65
65
|
}
|