@publishfx/publish-components 2.0.3

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.
Files changed (154) hide show
  1. package/README.md +191 -0
  2. package/dist/ActionButton/index.d.ts +10 -0
  3. package/dist/ActionButton/index.js +40 -0
  4. package/dist/ActionButton/index.module.js +9 -0
  5. package/dist/ActionButton/index_module.css +23 -0
  6. package/dist/ActionButton/interface.d.ts +12 -0
  7. package/dist/ActionButton/interface.js +9 -0
  8. package/dist/CommonModal/config.d.ts +8 -0
  9. package/dist/CommonModal/config.js +13 -0
  10. package/dist/CommonModal/confirm.d.ts +7 -0
  11. package/dist/CommonModal/confirm.js +132 -0
  12. package/dist/CommonModal/index.d.ts +2 -0
  13. package/dist/CommonModal/index.js +3 -0
  14. package/dist/CommonModal/interface.d.ts +17 -0
  15. package/dist/CommonModal/interface.js +0 -0
  16. package/dist/CommonModal/modal.d.ts +11 -0
  17. package/dist/CommonModal/modal.js +161 -0
  18. package/dist/CompareChange/index.d.ts +20 -0
  19. package/dist/CompareChange/index.js +66 -0
  20. package/dist/CustomTransfer/BaseTransfer.d.ts +35 -0
  21. package/dist/CustomTransfer/BaseTransfer.js +155 -0
  22. package/dist/CustomTransfer/SelectItemList.d.ts +9 -0
  23. package/dist/CustomTransfer/SelectItemList.js +54 -0
  24. package/dist/CustomTransfer/SelectTreeList.d.ts +43 -0
  25. package/dist/CustomTransfer/SelectTreeList.js +248 -0
  26. package/dist/CustomTransfer/SelectedItemList.d.ts +21 -0
  27. package/dist/CustomTransfer/SelectedItemList.js +132 -0
  28. package/dist/CustomTransfer/SimpleLink.d.ts +4 -0
  29. package/dist/CustomTransfer/SimpleLink.js +20 -0
  30. package/dist/CustomTransfer/index.d.ts +22 -0
  31. package/dist/CustomTransfer/index.js +92 -0
  32. package/dist/CustomTransfer/styled.d.ts +27 -0
  33. package/dist/CustomTransfer/styled.js +181 -0
  34. package/dist/PerformanceTable/ResizableTitle.d.ts +12 -0
  35. package/dist/PerformanceTable/ResizableTitle.js +85 -0
  36. package/dist/PerformanceTable/index.d.ts +4 -0
  37. package/dist/PerformanceTable/index.js +417 -0
  38. package/dist/PerformanceTable/interface.d.ts +47 -0
  39. package/dist/PerformanceTable/interface.js +0 -0
  40. package/dist/PerformanceTable/style.d.ts +19 -0
  41. package/dist/PerformanceTable/style.js +402 -0
  42. package/dist/PerformanceTable/useResizable.d.ts +29 -0
  43. package/dist/PerformanceTable/useResizable.js +108 -0
  44. package/dist/ReactSticky/Container.d.ts +19 -0
  45. package/dist/ReactSticky/Container.js +93 -0
  46. package/dist/ReactSticky/Sticky.d.ts +27 -0
  47. package/dist/ReactSticky/Sticky.js +123 -0
  48. package/dist/ReactSticky/index.d.ts +5 -0
  49. package/dist/ReactSticky/index.js +4 -0
  50. package/dist/assets/icons/403.js +15 -0
  51. package/dist/assets/icons/Icon403.d.ts +3 -0
  52. package/dist/assets/icons/Icon403.js +14 -0
  53. package/dist/assets/icons/IconAdd.d.ts +3 -0
  54. package/dist/assets/icons/IconAdd.js +24 -0
  55. package/dist/assets/icons/IconAim.d.ts +3 -0
  56. package/dist/assets/icons/IconAim.js +36 -0
  57. package/dist/assets/icons/IconBatchupload.d.ts +3 -0
  58. package/dist/assets/icons/IconBatchupload.js +23 -0
  59. package/dist/assets/icons/IconClose.d.ts +3 -0
  60. package/dist/assets/icons/IconClose.js +15 -0
  61. package/dist/assets/icons/IconDrag_sort.d.ts +3 -0
  62. package/dist/assets/icons/IconDrag_sort.js +28 -0
  63. package/dist/assets/icons/IconError.d.ts +3 -0
  64. package/dist/assets/icons/IconError.js +42 -0
  65. package/dist/assets/icons/IconExport.d.ts +3 -0
  66. package/dist/assets/icons/IconExport.js +15 -0
  67. package/dist/assets/icons/IconFolder.d.ts +3 -0
  68. package/dist/assets/icons/IconFolder.js +126 -0
  69. package/dist/assets/icons/IconOpen_down.d.ts +3 -0
  70. package/dist/assets/icons/IconOpen_down.js +13 -0
  71. package/dist/assets/icons/IconOpen_right.d.ts +3 -0
  72. package/dist/assets/icons/IconOpen_right.js +13 -0
  73. package/dist/assets/icons/IconPlus.d.ts +3 -0
  74. package/dist/assets/icons/IconPlus.js +17 -0
  75. package/dist/assets/icons/IconSearch.d.ts +3 -0
  76. package/dist/assets/icons/IconSearch.js +15 -0
  77. package/dist/assets/icons/IconSelected_transfer.d.ts +3 -0
  78. package/dist/assets/icons/IconSelected_transfer.js +15 -0
  79. package/dist/assets/icons/IconSettings.d.ts +3 -0
  80. package/dist/assets/icons/IconSettings.js +15 -0
  81. package/dist/assets/icons/IconUp_down.d.ts +3 -0
  82. package/dist/assets/icons/IconUp_down.js +15 -0
  83. package/dist/assets/icons/IconUpload.d.ts +3 -0
  84. package/dist/assets/icons/IconUpload.js +20 -0
  85. package/dist/assets/icons/Up_down.js +17 -0
  86. package/dist/assets/icons/add.js +28 -0
  87. package/dist/assets/icons/batchupload.js +24 -0
  88. package/dist/assets/icons/close.js +17 -0
  89. package/dist/assets/icons/data_increase.js +31 -0
  90. package/dist/assets/icons/data_no_change.js +19 -0
  91. package/dist/assets/icons/data_reduction.js +31 -0
  92. package/dist/assets/icons/drag_sort.js +30 -0
  93. package/dist/assets/icons/error.js +44 -0
  94. package/dist/assets/icons/export.js +16 -0
  95. package/dist/assets/icons/folder.js +128 -0
  96. package/dist/assets/icons/open_down.js +15 -0
  97. package/dist/assets/icons/open_right.js +15 -0
  98. package/dist/assets/icons/plus.js +19 -0
  99. package/dist/assets/icons/search.js +17 -0
  100. package/dist/assets/icons/selected.js +17 -0
  101. package/dist/assets/icons/selected_transfer.js +17 -0
  102. package/dist/assets/icons/settings.js +17 -0
  103. package/dist/assets/icons/upload.js +23 -0
  104. package/dist/assets/images/book.js +2 -0
  105. package/dist/assets/images/emptyVideo.js +2 -0
  106. package/dist/assets/images/excel.js +2 -0
  107. package/dist/assets/images/fail.js +2 -0
  108. package/dist/assets/images/file.js +2 -0
  109. package/dist/assets/images/noResult.js +2 -0
  110. package/dist/assets/images/platform/Apple.js +23 -0
  111. package/dist/assets/images/platform/Facebook.js +42 -0
  112. package/dist/assets/images/platform/Google.js +54 -0
  113. package/dist/assets/images/platform/Instagram.js +2 -0
  114. package/dist/assets/images/platform/TikTok.js +42 -0
  115. package/dist/assets/images/platform/Twitch.js +2 -0
  116. package/dist/assets/images/platform/Twitter.js +2 -0
  117. package/dist/assets/images/platform/Youtube.js +2 -0
  118. package/dist/index.d.ts +4 -0
  119. package/dist/index.js +4 -0
  120. package/dist/static/image/Instagram.png +0 -0
  121. package/dist/static/image/Twitch.png +0 -0
  122. package/dist/static/image/Twitter.png +0 -0
  123. package/dist/static/image/Youtube.png +0 -0
  124. package/dist/static/image/book.png +0 -0
  125. package/dist/static/image/emptyVideo.png +0 -0
  126. package/dist/static/image/excel.png +0 -0
  127. package/dist/static/image/fail.png +0 -0
  128. package/dist/static/image/file.png +0 -0
  129. package/dist/static/image/noResult.png +0 -0
  130. package/dist/static/svg/403.svg +22 -0
  131. package/dist/static/svg/Apple.svg +4 -0
  132. package/dist/static/svg/Facebook.svg +9 -0
  133. package/dist/static/svg/Google.svg +14 -0
  134. package/dist/static/svg/TikTok.svg +9 -0
  135. package/dist/static/svg/Up_down.svg +1 -0
  136. package/dist/static/svg/add.svg +1 -0
  137. package/dist/static/svg/batchupload.svg +1 -0
  138. package/dist/static/svg/close.svg +1 -0
  139. package/dist/static/svg/data_increase.svg +15 -0
  140. package/dist/static/svg/data_no_change.svg +1 -0
  141. package/dist/static/svg/data_reduction.svg +15 -0
  142. package/dist/static/svg/drag_sort.svg +1 -0
  143. package/dist/static/svg/error.svg +8 -0
  144. package/dist/static/svg/export.svg +1 -0
  145. package/dist/static/svg/folder.svg +36 -0
  146. package/dist/static/svg/open_down.svg +1 -0
  147. package/dist/static/svg/open_right.svg +8 -0
  148. package/dist/static/svg/plus.svg +3 -0
  149. package/dist/static/svg/search.svg +1 -0
  150. package/dist/static/svg/selected.svg +3 -0
  151. package/dist/static/svg/selected_transfer.svg +3 -0
  152. package/dist/static/svg/settings.svg +1 -0
  153. package/dist/static/svg/upload.svg +1 -0
  154. package/package.json +59 -0
@@ -0,0 +1,66 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import styled_components from "styled-components";
3
+ import { isNil } from "lodash";
4
+ import { ReactComponent } from "../assets/icons/data_increase.js";
5
+ import { ReactComponent as data_reduction_js_ReactComponent } from "../assets/icons/data_reduction.js";
6
+ import { ReactComponent as data_no_change_js_ReactComponent } from "../assets/icons/data_no_change.js";
7
+ const formatPercentage = (value, decimalPlaces = 2)=>{
8
+ const num = 'string' == typeof value ? parseFloat(value) : Number(value);
9
+ if (isNaN(num)) return '-';
10
+ const percentage = (100 * num).toFixed(decimalPlaces);
11
+ return `${percentage}%`;
12
+ };
13
+ const Container = styled_components.span`
14
+ display: inline-flex;
15
+ align-items: center;
16
+ gap: 4px;
17
+ font-size: 14px;
18
+ `;
19
+ const ValueSpan = styled_components.span`
20
+ font-weight: ${(props)=>props.fontWeight};
21
+ color: ${(props)=>props.isPositive ? '#05a76f' : props.isNegative ? '#d0324b' : '#86909c'};
22
+ font-size: ${(props)=>props.fontSize}px;
23
+ `;
24
+ const IconWrapper = styled_components.span`
25
+ display: inline-flex;
26
+ align-items: center;
27
+ justify-content: center;
28
+ width: 10px;
29
+ height: 10px;
30
+ color: ${(props)=>props.isPositive ? '#05a76f' : props.isNegative ? '#d0324b' : '#86909c'};
31
+ svg {
32
+ width: 100%;
33
+ height: 100%;
34
+ fill: currentColor;
35
+ }
36
+ `;
37
+ const CompareChange = ({ value, fontSize = 14, fontWeight = 600 })=>{
38
+ if (isNil(value) || '' === value || '-' === value) return /*#__PURE__*/ jsx("span", {
39
+ children: "-"
40
+ });
41
+ const numValue = Number(value);
42
+ if (isNaN(numValue)) return /*#__PURE__*/ jsx("span", {
43
+ children: "-"
44
+ });
45
+ const isPositive = numValue > 0;
46
+ const isNegative = numValue < 0;
47
+ const formattedValue = formatPercentage(Math.abs(numValue));
48
+ return /*#__PURE__*/ jsxs(Container, {
49
+ children: [
50
+ /*#__PURE__*/ jsx(IconWrapper, {
51
+ isPositive: isPositive,
52
+ isNegative: isNegative,
53
+ children: isNegative ? /*#__PURE__*/ jsx(data_reduction_js_ReactComponent, {}) : isPositive ? /*#__PURE__*/ jsx(ReactComponent, {}) : /*#__PURE__*/ jsx(data_no_change_js_ReactComponent, {})
54
+ }),
55
+ /*#__PURE__*/ jsx(ValueSpan, {
56
+ isPositive: isPositive,
57
+ isNegative: isNegative,
58
+ fontSize: fontSize,
59
+ fontWeight: fontWeight,
60
+ children: formattedValue
61
+ })
62
+ ]
63
+ });
64
+ };
65
+ const src_CompareChange = CompareChange;
66
+ export { src_CompareChange as default, formatPercentage };
@@ -0,0 +1,35 @@
1
+ import { FunctionComponent, ReactNode } from 'react';
2
+ interface GroupOption {
3
+ value: string | number;
4
+ label: string;
5
+ options?: Array<{
6
+ id?: string | number;
7
+ value: string | number;
8
+ label: string;
9
+ disabled?: boolean;
10
+ options?: Array<{
11
+ id?: string | number;
12
+ value: string | number;
13
+ label: string;
14
+ }>;
15
+ [key: string]: any;
16
+ }>;
17
+ [key: string]: any;
18
+ }
19
+ interface BaseTransferProps {
20
+ selectedWidth?: number | string;
21
+ groupOptions?: GroupOption[];
22
+ selected?: (string | number)[];
23
+ setSelectedValue: (selected: (string | number)[]) => void;
24
+ setSelectedOptions: (selectedOptions: any[]) => void;
25
+ limit?: number;
26
+ selectedTitle?: string;
27
+ needSelectedNum?: boolean;
28
+ needActionBtn?: boolean;
29
+ leftContent?: Array<(props: any) => ReactNode>;
30
+ isNotDrag?: boolean;
31
+ needSelectedBacground?: boolean;
32
+ selectTreeNeedScroll?: boolean;
33
+ }
34
+ declare const BaseTransfer: FunctionComponent<BaseTransferProps>;
35
+ export default BaseTransfer;
@@ -0,0 +1,155 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useState } from "react";
3
+ import { Checkbox } from "@arco-design/web-react";
4
+ import { DimensionContainer } from "./styled.js";
5
+ import SelectedItemList from "./SelectedItemList.js";
6
+ const useCheckbox = Checkbox.useCheckbox;
7
+ const BaseTransfer = ({ selectedWidth, groupOptions, selected: outerSelected, setSelectedValue, setSelectedOptions, limit, selectedTitle, needSelectedNum, needActionBtn, leftContent, isNotDrag, needSelectedBacground, selectTreeNeedScroll })=>{
8
+ const [dataList, setDataList] = useState([]);
9
+ const [currentValue, setCurrentValue] = useState(0);
10
+ const { selected, setSelected, unSelectAll, setValueSelected } = useCheckbox([]);
11
+ useEffect(()=>{
12
+ if (groupOptions?.length) {
13
+ setDataList(groupOptions);
14
+ setCurrentValue(groupOptions[0]?.value);
15
+ }
16
+ }, [
17
+ groupOptions
18
+ ]);
19
+ const dataSelectedMap = useMemo(()=>{
20
+ const res = {};
21
+ dataList?.forEach((data)=>{
22
+ res[data.value] = data?.options?.filter((o)=>selected?.indexOf(o?.id || o?.value) >= 0 || o?.options?.some((c)=>selected?.indexOf(c?.id || c?.value) >= 0))?.length || 0;
23
+ });
24
+ return res;
25
+ }, [
26
+ dataList,
27
+ selected
28
+ ]);
29
+ const currentOptions = useMemo(()=>{
30
+ if (selectTreeNeedScroll) return dataList;
31
+ const selectedGroupOptions = dataList?.find((o)=>o.value === currentValue)?.options;
32
+ if (limit && selected?.length >= limit) return selectedGroupOptions?.map((option)=>({
33
+ ...option,
34
+ disabled: !selected?.includes(option.value)
35
+ }));
36
+ return selectedGroupOptions?.map((option)=>({
37
+ ...option,
38
+ disabled: false
39
+ }));
40
+ }, [
41
+ limit,
42
+ dataList,
43
+ selected,
44
+ currentValue,
45
+ selectTreeNeedScroll
46
+ ]);
47
+ const dataMap = useMemo(()=>{
48
+ let optionsNew = [];
49
+ dataList?.forEach((option)=>{
50
+ optionsNew = optionsNew?.concat(option?.options || []) || [];
51
+ });
52
+ const optionsAll = optionsNew;
53
+ return optionsAll?.reduce((prev, { id, label, value, options, ...props })=>{
54
+ prev[id || value] = {
55
+ id: id || value,
56
+ label,
57
+ value,
58
+ ...props
59
+ };
60
+ return prev;
61
+ }, {}) || {};
62
+ }, [
63
+ dataList
64
+ ]);
65
+ const selectedOptions = useMemo(()=>selected?.map((value)=>dataMap[value]).filter(Boolean) || [], [
66
+ selected,
67
+ dataMap
68
+ ]);
69
+ const handleSelectItemClick = (currentData)=>{
70
+ setCurrentValue(currentData?.value);
71
+ };
72
+ const deleteItem = (value)=>{
73
+ setValueSelected(value, false);
74
+ };
75
+ const reset = useCallback(()=>{
76
+ if (outerSelected && outerSelected?.length) setSelected(outerSelected);
77
+ }, [
78
+ outerSelected
79
+ ]);
80
+ useEffect(()=>{
81
+ reset();
82
+ }, [
83
+ reset
84
+ ]);
85
+ useEffect(()=>{
86
+ setSelectedValue(selected);
87
+ setSelectedOptions(selectedOptions);
88
+ }, [
89
+ selected,
90
+ selectedOptions,
91
+ setSelectedValue,
92
+ setSelectedOptions
93
+ ]);
94
+ const renderLeftContent = ()=>{
95
+ if (leftContent && leftContent.length >= 2) return /*#__PURE__*/ jsxs(Fragment, {
96
+ children: [
97
+ leftContent[0]({
98
+ dataList,
99
+ currentValue,
100
+ dataSelectedMap,
101
+ handleSelectItemClick
102
+ }),
103
+ leftContent[1]({
104
+ dataMap,
105
+ dataList,
106
+ setDataList,
107
+ currentOptions,
108
+ currentValue,
109
+ selected,
110
+ setSelected,
111
+ setValueSelected
112
+ })
113
+ ]
114
+ });
115
+ return leftContent && leftContent.length > 0 && leftContent[0]({
116
+ dataMap,
117
+ dataList,
118
+ setDataList,
119
+ currentOptions,
120
+ currentValue,
121
+ selected,
122
+ setSelected,
123
+ setValueSelected
124
+ });
125
+ };
126
+ return /*#__PURE__*/ jsxs(DimensionContainer, {
127
+ children: [
128
+ /*#__PURE__*/ jsx("div", {
129
+ style: {
130
+ display: 'flex',
131
+ flex: 1,
132
+ marginRight: '16px'
133
+ },
134
+ children: renderLeftContent()
135
+ }),
136
+ /*#__PURE__*/ jsx(SelectedItemList, {
137
+ selectedWidth: selectedWidth,
138
+ selectedTitle: selectedTitle,
139
+ limit: limit,
140
+ isNotDrag: isNotDrag,
141
+ needSelectedBacground: needSelectedBacground,
142
+ needSelectedNum: needSelectedNum,
143
+ needActionBtn: needActionBtn,
144
+ dataMap: dataMap,
145
+ selected: selected,
146
+ setSelected: setSelected,
147
+ deleteItem: deleteItem,
148
+ clear: unSelectAll,
149
+ reset: reset
150
+ })
151
+ ]
152
+ });
153
+ };
154
+ const CustomTransfer_BaseTransfer = BaseTransfer;
155
+ export { CustomTransfer_BaseTransfer as default };
@@ -0,0 +1,9 @@
1
+ declare const SelectItemList: ({ selectWidth, selectTitle, dataList, currentValue, handleSelectItemClick, dataSelectedMap, }: {
2
+ selectWidth?: number | string;
3
+ selectTitle?: string;
4
+ dataList: any[];
5
+ currentValue: any;
6
+ handleSelectItemClick: (currentData: any) => void;
7
+ dataSelectedMap: any;
8
+ }) => import("react/jsx-runtime").JSX.Element;
9
+ export default SelectItemList;
@@ -0,0 +1,54 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { ReactComponent } from "../assets/icons/selected.js";
3
+ import styled_components from "styled-components";
4
+ import { ClassifyItem, ColumnContent, StyledDivider, Title } from "./styled.js";
5
+ const ScrollableContainer = styled_components.div`
6
+ flex: 1;
7
+ overflow: auto;
8
+ padding: 12px;
9
+ `;
10
+ const SelectItemList = ({ selectWidth = 180, selectTitle = '筛选条件分类', dataList, currentValue, handleSelectItemClick, dataSelectedMap })=>/*#__PURE__*/ jsxs(ColumnContent, {
11
+ style: {
12
+ width: selectWidth,
13
+ borderRight: 'none',
14
+ borderTopRightRadius: '0px',
15
+ borderBottomRightRadius: '0px'
16
+ },
17
+ children: [
18
+ /*#__PURE__*/ jsxs("div", {
19
+ children: [
20
+ /*#__PURE__*/ jsxs(Title, {
21
+ children: [
22
+ /*#__PURE__*/ jsx(ReactComponent, {
23
+ className: "selected-icon"
24
+ }),
25
+ /*#__PURE__*/ jsx("span", {
26
+ children: selectTitle
27
+ })
28
+ ]
29
+ }),
30
+ /*#__PURE__*/ jsx(StyledDivider, {})
31
+ ]
32
+ }),
33
+ /*#__PURE__*/ jsx(ScrollableContainer, {
34
+ children: dataList.map((data)=>/*#__PURE__*/ jsxs(ClassifyItem, {
35
+ selected: currentValue === data.value,
36
+ onClick: ()=>{
37
+ handleSelectItemClick(data);
38
+ },
39
+ children: [
40
+ /*#__PURE__*/ jsx("span", {
41
+ className: "group-name",
42
+ children: data.label
43
+ }),
44
+ /*#__PURE__*/ jsx("span", {
45
+ className: "group-selected-num",
46
+ children: dataSelectedMap[data.value]
47
+ })
48
+ ]
49
+ }, data.value))
50
+ })
51
+ ]
52
+ });
53
+ const CustomTransfer_SelectItemList = SelectItemList;
54
+ export { CustomTransfer_SelectItemList as default };
@@ -0,0 +1,43 @@
1
+ import { FunctionComponent } from 'react';
2
+ interface Option {
3
+ id?: string | number;
4
+ value: string | number;
5
+ label: string;
6
+ options?: Option[];
7
+ description?: string;
8
+ tooltip?: string;
9
+ subPackageLimit?: boolean;
10
+ disabled?: boolean;
11
+ }
12
+ interface GroupOption {
13
+ value: string | number;
14
+ label: string;
15
+ options?: Option[];
16
+ }
17
+ interface DataItem {
18
+ id?: string | number;
19
+ value: string | number;
20
+ label: string;
21
+ [key: string]: any;
22
+ }
23
+ type SelectableListProps = {
24
+ dataList: GroupOption[];
25
+ setDataList: (dataList: GroupOption[]) => void;
26
+ selectTreeTitle?: string;
27
+ selectTreePlaceholder?: string;
28
+ needSearchInput?: boolean;
29
+ canSelectAll?: boolean;
30
+ disableCheckAll?: boolean;
31
+ currentValue?: string | number;
32
+ currentOptions: Option[];
33
+ selected: (string | number)[];
34
+ setSelected: (selected: (string | number)[]) => void;
35
+ setValueSelected: (value: string | number | (string | number)[], checked: boolean) => void;
36
+ dataMap?: Record<string | number, DataItem>;
37
+ selectTreeNeedScroll?: boolean;
38
+ maxLabelLength?: number;
39
+ leftContentCols?: number;
40
+ customSelectTreeComponent?: FunctionComponent<any>;
41
+ };
42
+ declare const _default: import("react").NamedExoticComponent<SelectableListProps>;
43
+ export default _default;
@@ -0,0 +1,248 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { memo, useEffect, useMemo, useRef, useState } from "react";
3
+ import { Checkbox, Input, Tooltip } from "@arco-design/web-react";
4
+ import { ReactComponent } from "../assets/icons/selected.js";
5
+ import { AuthTip, ColumnContent, StyledDivider, StyledTree, Title } from "./styled.js";
6
+ const hasAll = (origin, target)=>target.every((t)=>origin?.some((o)=>t === o));
7
+ const isPartialSelected = (origin, target)=>!hasAll(origin, target) && target.some((t)=>origin?.some((o)=>t === o));
8
+ const SelectTreeList = ({ dataList, setDataList, selectTreeTitle = '筛选条件', selectTreePlaceholder = '请搜索维度名称', needSearchInput = true, canSelectAll, disableCheckAll, currentOptions, currentValue, selected, setSelected, setValueSelected, selectTreeNeedScroll, maxLabelLength = 15, leftContentCols, customSelectTreeComponent: CustomSelectTreeComponent })=>{
9
+ const [inputValue, setInputValue] = useState('');
10
+ const groupsLast = useMemo(()=>currentOptions?.map((v)=>({
11
+ ...v,
12
+ disabled: selectTreeNeedScroll ? !v.options?.length : false
13
+ })) || [], [
14
+ currentOptions,
15
+ selectTreeNeedScroll
16
+ ]);
17
+ const contentStyle = useMemo(()=>{
18
+ if (2 === leftContentCols) return {
19
+ borderTopLeftRadius: '0px',
20
+ borderBottomLeftRadius: '0px'
21
+ };
22
+ }, [
23
+ leftContentCols
24
+ ]);
25
+ const [treeData, setTreeData] = useState([]);
26
+ useEffect(()=>{
27
+ if (!selectTreeNeedScroll) return;
28
+ setTimeout(()=>{
29
+ setInputValue('');
30
+ }, 10);
31
+ treeRef.current && treeRef.current.scrollIntoView(String(currentValue));
32
+ setTimeout(()=>{
33
+ treeRef.current && treeRef.current.scrollIntoView(String(currentValue));
34
+ }, 100);
35
+ const element = document.getElementById(String(currentValue));
36
+ if (element) element.scrollIntoView({
37
+ behavior: 'smooth',
38
+ block: 'start',
39
+ inline: 'start'
40
+ });
41
+ setTimeout(()=>{
42
+ const element = document.getElementById(String(currentValue));
43
+ if (element) element.scrollIntoView({
44
+ behavior: 'smooth',
45
+ block: 'start',
46
+ inline: 'start'
47
+ });
48
+ }, 100);
49
+ }, [
50
+ currentValue,
51
+ selectTreeNeedScroll
52
+ ]);
53
+ const treeRef = useRef(null);
54
+ const groupData = useMemo(()=>{
55
+ if (selectTreeNeedScroll) {
56
+ const treeOptions = [];
57
+ treeData?.forEach((data)=>{
58
+ if (data?.options) treeOptions.push(...data.options);
59
+ });
60
+ return treeOptions?.map((option)=>option.value);
61
+ }
62
+ return treeData?.map((option)=>option.value) || [];
63
+ }, [
64
+ treeData,
65
+ selectTreeNeedScroll
66
+ ]);
67
+ function searchData(inputValue) {
68
+ const loop = (data)=>{
69
+ const result = [];
70
+ data.forEach((item)=>{
71
+ if (item.title.toLowerCase().indexOf(inputValue.toLowerCase()) > -1) result.push({
72
+ ...item
73
+ });
74
+ else if (item.options) {
75
+ const filterData = loop(item.options);
76
+ if (filterData.length) result.push({
77
+ ...item,
78
+ options: filterData
79
+ });
80
+ }
81
+ });
82
+ return result;
83
+ };
84
+ return loop(groupsLast);
85
+ }
86
+ useEffect(()=>{
87
+ if (inputValue) {
88
+ const result = searchData(inputValue);
89
+ setTreeData([
90
+ ...result
91
+ ]);
92
+ } else setTreeData(groupsLast);
93
+ }, [
94
+ inputValue,
95
+ groupsLast
96
+ ]);
97
+ const handleChange = (current)=>{
98
+ const value = current?.id;
99
+ const copyDataList = [
100
+ ...dataList
101
+ ];
102
+ const currentData = copyDataList.find((item)=>item.value === currentValue);
103
+ if (current && currentData && Array.isArray(currentData?.options)) {
104
+ if (selected?.includes(value)) {
105
+ const currentIndex = currentData.options.findIndex((item)=>item.id === value);
106
+ if (-1 !== currentIndex) currentData.options[currentIndex] = current;
107
+ } else {
108
+ currentData.options.push(current);
109
+ setValueSelected(value, true);
110
+ }
111
+ setDataList(copyDataList);
112
+ }
113
+ };
114
+ const handleDeleteItem = (value)=>{
115
+ setValueSelected(value, false);
116
+ };
117
+ return /*#__PURE__*/ jsxs(ColumnContent, {
118
+ style: {
119
+ flex: 1,
120
+ ...contentStyle
121
+ },
122
+ children: [
123
+ /*#__PURE__*/ jsxs(Title, {
124
+ children: [
125
+ /*#__PURE__*/ jsx(ReactComponent, {
126
+ className: "selected-icon"
127
+ }),
128
+ /*#__PURE__*/ jsx("span", {
129
+ children: selectTreeTitle
130
+ })
131
+ ]
132
+ }),
133
+ /*#__PURE__*/ jsx(StyledDivider, {
134
+ style: {
135
+ marginBottom: '12px'
136
+ }
137
+ }),
138
+ 'resultFilter' === currentValue && CustomSelectTreeComponent ? /*#__PURE__*/ jsx(CustomSelectTreeComponent, {
139
+ currentOptions: groupsLast,
140
+ handleChange: handleChange,
141
+ handleDeleteItem: handleDeleteItem
142
+ }) : /*#__PURE__*/ jsxs(Fragment, {
143
+ children: [
144
+ needSearchInput && /*#__PURE__*/ jsx(Input.Search, {
145
+ style: {
146
+ width: 'auto',
147
+ padding: '0 16px 12px'
148
+ },
149
+ value: inputValue,
150
+ onChange: setInputValue,
151
+ placeholder: selectTreePlaceholder
152
+ }),
153
+ treeData?.length > 0 && canSelectAll && /*#__PURE__*/ jsx(Checkbox, {
154
+ style: {
155
+ margin: '0 0 6px 11px',
156
+ fontWeight: 600
157
+ },
158
+ disabled: disableCheckAll,
159
+ onChange: (checked)=>{
160
+ setValueSelected(groupData, checked);
161
+ },
162
+ checked: hasAll(selected, groupData),
163
+ indeterminate: isPartialSelected(selected, groupData),
164
+ children: "全选"
165
+ }),
166
+ treeData?.length > 0 && /*#__PURE__*/ jsx(StyledTree, {
167
+ ref: treeRef,
168
+ checkable: true,
169
+ treeData: treeData,
170
+ autoExpandParent: true,
171
+ virtualListProps: {
172
+ height: '100%'
173
+ },
174
+ style: {
175
+ height: '100%',
176
+ flex: 1,
177
+ overflow: 'auto'
178
+ },
179
+ multiple: true,
180
+ blockNode: true,
181
+ checkedKeys: selected,
182
+ defaultCheckedKeys: selected,
183
+ icons: {
184
+ switcherIcon: null,
185
+ dragIcon: null
186
+ },
187
+ fieldNames: {
188
+ key: 'value',
189
+ title: 'label',
190
+ children: 'options'
191
+ },
192
+ onCheck: setSelected,
193
+ actionOnClick: "check",
194
+ checkedStrategy: "child",
195
+ renderTitle: (items)=>{
196
+ const { title, value, description, tooltip, subPackageLimit } = items;
197
+ if (inputValue && title) {
198
+ const index = title.toLowerCase().indexOf(inputValue.toLowerCase());
199
+ if (-1 === index) return /*#__PURE__*/ jsx(Tooltip, {
200
+ content: description,
201
+ children: /*#__PURE__*/ jsx("span", {
202
+ children: title
203
+ }, value)
204
+ });
205
+ const formatTitle = title?.length > maxLabelLength ? title.substr(0, maxLabelLength) + '...' : title;
206
+ const prefix = formatTitle.substr(0, index);
207
+ const suffix = formatTitle.substr(index + inputValue.length);
208
+ return /*#__PURE__*/ jsx(Tooltip, {
209
+ content: description || tooltip || title,
210
+ children: /*#__PURE__*/ jsxs("span", {
211
+ children: [
212
+ prefix,
213
+ /*#__PURE__*/ jsx("span", {
214
+ style: {
215
+ color: '#6549f2',
216
+ fontWeight: 400
217
+ },
218
+ children: formatTitle.substr(index, inputValue.length)
219
+ }),
220
+ suffix,
221
+ subPackageLimit && /*#__PURE__*/ jsx(AuthTip, {
222
+ children: "二级包名相关"
223
+ })
224
+ ]
225
+ }, value)
226
+ });
227
+ }
228
+ return /*#__PURE__*/ jsx(Tooltip, {
229
+ content: description || tooltip || title,
230
+ children: /*#__PURE__*/ jsxs("span", {
231
+ id: value,
232
+ children: [
233
+ title?.length > maxLabelLength ? title.substr(0, maxLabelLength) + '...' : title,
234
+ subPackageLimit && /*#__PURE__*/ jsx(AuthTip, {
235
+ children: "二级包名相关"
236
+ })
237
+ ]
238
+ }, value)
239
+ });
240
+ }
241
+ }, "value")
242
+ ]
243
+ })
244
+ ]
245
+ });
246
+ };
247
+ const CustomTransfer_SelectTreeList = /*#__PURE__*/ memo(SelectTreeList);
248
+ export { CustomTransfer_SelectTreeList as default };
@@ -0,0 +1,21 @@
1
+ type DivAttributes = React.HTMLAttributes<HTMLDivElement>;
2
+ export declare const SortableDivContainer: import("react").ComponentClass<DivAttributes & import("react-sortable-hoc").SortableContainerProps, any>;
3
+ export declare const SortableDivItem: import("react").ComponentClass<DivAttributes & import("react-sortable-hoc").SortableElementProps, any>;
4
+ export declare const DivDragHandle: import("react").ComponentClass<unknown, any>;
5
+ declare const SelectedItemList: ({ selectedWidth, selectedTitle, limit, needActionBtn, reset, clear, deleteItem, dataMap, selected, setSelected, isNotDrag, needSelectedNum, needSelectedBacground, maxLabelLength, }: {
6
+ selectedWidth?: number | string;
7
+ selectedTitle?: string;
8
+ limit?: number;
9
+ needActionBtn?: boolean;
10
+ reset?: () => void;
11
+ clear?: () => void;
12
+ deleteItem?: (value: any) => void;
13
+ dataMap: Record<string, any>;
14
+ selected: any[];
15
+ setSelected: (selected: any) => void;
16
+ isNotDrag?: boolean;
17
+ needSelectedNum?: boolean;
18
+ needSelectedBacground?: boolean;
19
+ maxLabelLength?: number;
20
+ }) => import("react/jsx-runtime").JSX.Element;
21
+ export default SelectedItemList;