pixel-react-excel-sheet 1.0.11 → 1.0.13

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 (252) hide show
  1. package/.yarn/install-state.gz +0 -0
  2. package/lib/1fb4472b34e4fe07.css +1 -0
  3. package/lib/components/Accordion/Accordion.d.ts +1 -1
  4. package/lib/components/Accordion/types.d.ts +12 -0
  5. package/lib/components/AddVariables/AddVariables.d.ts +5 -0
  6. package/lib/components/AddVariables/index.d.ts +1 -0
  7. package/lib/components/AddVariables/types.d.ts +35 -0
  8. package/lib/components/AppHeader/types.d.ts +2 -0
  9. package/lib/components/AttachImage/AttachImage.d.ts +1 -6
  10. package/lib/components/AttachImage/types.d.ts +8 -0
  11. package/lib/components/Avatar/types.d.ts +9 -1
  12. package/lib/components/Charts/BarChart/BarChart.d.ts +1 -0
  13. package/lib/components/Charts/DashboardDonutChart/types.d.ts +6 -0
  14. package/lib/components/Checkbox/types.d.ts +4 -0
  15. package/lib/components/Comment/Comments.d.ts +4 -0
  16. package/lib/components/Comment/comment/Comment.d.ts +11 -0
  17. package/lib/components/Comment/comment/useNode.d.ts +7 -0
  18. package/lib/components/Comment/index.d.ts +1 -0
  19. package/lib/components/Comment/type.d.ts +25 -0
  20. package/lib/components/CreateVariable/CreateVariableSlider.d.ts +5 -0
  21. package/lib/components/CreateVariable/index.d.ts +1 -0
  22. package/lib/components/CreateVariable/types.d.ts +56 -0
  23. package/lib/components/Drawer/Types.d.ts +13 -0
  24. package/lib/components/Editor/constants.d.ts +1 -1
  25. package/lib/components/Editor/types.d.ts +10 -2
  26. package/lib/components/Excel/ExcelFile/ExcelFileComponents/actions.d.ts +8 -1
  27. package/lib/components/Excel/ExcelFile/ExcelFileComponents/reducerFunctions.d.ts +2 -0
  28. package/lib/components/Excel/ExcelFile/ExcelFileComponents/types.d.ts +13 -6
  29. package/lib/components/FileDropzone/RadioFilePreview.d.ts +4 -0
  30. package/lib/components/FileDropzone/types.d.ts +61 -0
  31. package/lib/components/IconButton/IconButton.d.ts +1 -2
  32. package/lib/components/IconButton/types.d.ts +1 -0
  33. package/lib/components/Input/Input.d.ts +1 -1
  34. package/lib/components/MenuOption/types.d.ts +3 -2
  35. package/lib/components/MiniModal/types.d.ts +7 -0
  36. package/lib/components/MultiSelect/MultiSelect.d.ts +1 -1
  37. package/lib/components/PhoneInput/PhoneInput.d.ts +6 -0
  38. package/lib/components/PhoneInput/index.d.ts +1 -0
  39. package/lib/components/PhoneInput/types.d.ts +10 -0
  40. package/lib/components/PopUpModal/types.d.ts +1 -0
  41. package/lib/components/Search/Search.d.ts +1 -1
  42. package/lib/components/Search/types.d.ts +4 -0
  43. package/lib/components/Select/components/types.d.ts +1 -0
  44. package/lib/components/Select/types.d.ts +2 -0
  45. package/lib/components/Table/Types.d.ts +1 -1
  46. package/lib/components/TableTree/Components/TableBody.d.ts +4 -0
  47. package/lib/components/TableTree/Components/TableCell.d.ts +4 -0
  48. package/lib/components/TableTree/Components/TableHead.d.ts +4 -0
  49. package/lib/components/TableTree/Components/TableRow.d.ts +4 -0
  50. package/lib/components/TableTree/Utils/getAllChildIds.d.ts +1 -0
  51. package/lib/components/TableTree/types.d.ts +38 -5
  52. package/lib/components/TableWithAccordion/TableWithAccordion.d.ts +5 -0
  53. package/lib/components/TableWithAccordion/data.d.ts +8 -0
  54. package/lib/components/TableWithAccordion/index.d.ts +1 -0
  55. package/lib/components/TableWithAccordion/types.d.ts +67 -0
  56. package/lib/components/Tabs/types.d.ts +1 -0
  57. package/lib/index.d.ts +395 -39
  58. package/lib/index.esm.js +3859 -1017
  59. package/lib/index.esm.js.map +1 -1
  60. package/lib/index.js +3866 -1016
  61. package/lib/index.js.map +1 -1
  62. package/lib/tsconfig.tsbuildinfo +1 -1
  63. package/lib/utils/FormatString/FormatString.d.ts +1 -0
  64. package/lib/utils/checkDuplicates/checkDuplicates.d.ts +1 -0
  65. package/package.json +2 -1
  66. package/src/StyleGuide/ColorPalette/colorPaletteList.ts +15 -0
  67. package/src/assets/Themes/BaseTheme.scss +16 -0
  68. package/src/assets/Themes/DarkTheme.scss +71 -42
  69. package/src/assets/icons/add_file.svg +4 -17
  70. package/src/assets/icons/add_variable.svg +11 -0
  71. package/src/assets/icons/authorization.svg +4 -0
  72. package/src/assets/icons/authorization_icon.svg +1 -0
  73. package/src/assets/icons/backward.svg +10 -0
  74. package/src/assets/icons/capture_icon.svg +3 -0
  75. package/src/assets/icons/depends_on_script.svg +7 -0
  76. package/src/assets/icons/download_file_icon.svg +2 -9
  77. package/src/assets/icons/email_group.svg +3 -0
  78. package/src/assets/icons/executions_icon.svg +3 -0
  79. package/src/assets/icons/forward.svg +3 -0
  80. package/src/assets/icons/labels.svg +8 -0
  81. package/src/assets/icons/machine_disable_icon.svg +18 -0
  82. package/src/assets/icons/machine_enable_icon.svg +10 -0
  83. package/src/assets/icons/parameters.svg +3 -0
  84. package/src/assets/icons/pre_post_condition.svg +8 -0
  85. package/src/assets/icons/program_element.svg +8 -0
  86. package/src/assets/icons/project_status_icon.svg +10 -0
  87. package/src/assets/icons/refresh_icon.svg +4 -0
  88. package/src/assets/icons/rotate_icon.svg +10 -0
  89. package/src/assets/icons/suites_icon.svg +3 -0
  90. package/src/assets/icons/swipe_icon.svg +9 -0
  91. package/src/assets/icons/tap_icon.svg +4 -0
  92. package/src/assets/icons/test_data.svg +5 -0
  93. package/src/assets/icons/test_data_set.svg +7 -0
  94. package/src/assets/icons/variable_set.svg +5 -0
  95. package/src/assets/icons/window_maximize.svg +1 -2
  96. package/src/assets/icons/window_restore.svg +4 -0
  97. package/src/assets/styles/_colors.scss +0 -1
  98. package/src/components/Accordion/Accordion.stories.tsx +4 -0
  99. package/src/components/Accordion/Accordion.tsx +7 -1
  100. package/src/components/Accordion/types.ts +12 -0
  101. package/src/components/AddVariables/AddVariables.scss +14 -0
  102. package/src/components/AddVariables/AddVariables.stories.tsx +44 -0
  103. package/src/components/AddVariables/AddVariables.tsx +113 -0
  104. package/src/components/AddVariables/index.ts +1 -0
  105. package/src/components/AddVariables/types.ts +36 -0
  106. package/src/components/AllProjectsDropdown/AllProjectsDropdown.scss +1 -1
  107. package/src/components/AppHeader/AppHeader.scss +40 -1
  108. package/src/components/AppHeader/AppHeader.stories.tsx +133 -5
  109. package/src/components/AppHeader/AppHeader.tsx +111 -112
  110. package/src/components/AppHeader/types.ts +10 -9
  111. package/src/components/AttachImage/AttachImage.stories.tsx +2 -0
  112. package/src/components/AttachImage/AttachImage.tsx +5 -9
  113. package/src/components/AttachImage/types.ts +25 -18
  114. package/src/components/Avatar/Avatar.scss +4 -0
  115. package/src/components/Avatar/Avatar.stories.tsx +38 -18
  116. package/src/components/Avatar/Avatar.tsx +19 -3
  117. package/src/components/Avatar/types.ts +9 -1
  118. package/src/components/Charts/BarChart/BarChart.scss +4 -1
  119. package/src/components/Charts/BarChart/BarChart.tsx +23 -9
  120. package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.scss +10 -3
  121. package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.stories.tsx +2 -1
  122. package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.tsx +54 -25
  123. package/src/components/Charts/DashboardDonutChart/types.ts +7 -1
  124. package/src/components/Charts/DonutChart/DonutChart.tsx +8 -3
  125. package/src/components/Charts/LineChart/LineChart.scss +13 -9
  126. package/src/components/Charts/LineChart/LineChart.tsx +6 -2
  127. package/src/components/Charts/RadialChart/RadialChart.scss +4 -0
  128. package/src/components/Charts/RadialChart/RadialChart.tsx +51 -45
  129. package/src/components/Checkbox/Checkbox.scss +57 -0
  130. package/src/components/Checkbox/Checkbox.stories.tsx +91 -15
  131. package/src/components/Checkbox/Checkbox.tsx +4 -1
  132. package/src/components/Checkbox/types.ts +4 -0
  133. package/src/components/Comment/Comments.scss +166 -0
  134. package/src/components/Comment/Comments.stories.tsx +212 -0
  135. package/src/components/Comment/Comments.tsx +51 -0
  136. package/src/components/Comment/comment/Comment.tsx +206 -0
  137. package/src/components/Comment/comment/useNode.ts +51 -0
  138. package/src/components/Comment/index.ts +1 -0
  139. package/src/components/Comment/type.ts +36 -0
  140. package/src/components/CreateVariable/CreateVariableSlider.scss +18 -0
  141. package/src/components/CreateVariable/CreateVariableSlider.stories.tsx +66 -0
  142. package/src/components/CreateVariable/CreateVariableSlider.tsx +95 -0
  143. package/src/components/CreateVariable/index.ts +1 -0
  144. package/src/components/CreateVariable/types.ts +58 -0
  145. package/src/components/DatePicker/DatePicker.scss +11 -0
  146. package/src/components/DatePicker/DatePicker.stories.tsx +19 -0
  147. package/src/components/DatePicker/DatePicker.tsx +73 -22
  148. package/src/components/Drawer/Drawer.scss +3 -2
  149. package/src/components/Drawer/Drawer.stories.tsx +0 -1
  150. package/src/components/Drawer/Drawer.tsx +4 -1
  151. package/src/components/Drawer/Types.ts +13 -0
  152. package/src/components/Editor/Editor.stories.tsx +2 -2
  153. package/src/components/Editor/Editor.tsx +4 -2
  154. package/src/components/Editor/VariableDropdown.scss +8 -2
  155. package/src/components/Editor/VariableDropdown.tsx +15 -7
  156. package/src/components/Editor/constants.ts +1 -1
  157. package/src/components/Editor/types.ts +12 -2
  158. package/src/components/Excel/ExcelFile/ExcelFile.scss +0 -1
  159. package/src/components/Excel/ExcelFile/ExcelFile.tsx +41 -25
  160. package/src/components/Excel/ExcelFile/ExcelFileComponents/ActiveCell.tsx +12 -0
  161. package/src/components/Excel/ExcelFile/ExcelFileComponents/Cell.tsx +2 -34
  162. package/src/components/Excel/ExcelFile/ExcelFileComponents/FloatingRect.tsx +26 -1
  163. package/src/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.scss +24 -22
  164. package/src/components/Excel/ExcelFile/ExcelFileComponents/Spreadsheet.tsx +1 -3
  165. package/src/components/Excel/ExcelFile/ExcelFileComponents/actions.ts +13 -0
  166. package/src/components/Excel/ExcelFile/ExcelFileComponents/reducer.ts +53 -26
  167. package/src/components/Excel/ExcelFile/ExcelFileComponents/reducerFunctions.ts +81 -14
  168. package/src/components/Excel/ExcelFile/ExcelFileComponents/types.ts +17 -6
  169. package/src/components/Excel/ExcelFile.stories.tsx +4 -4
  170. package/src/components/Excel/ExcelToolBar/ExcelToolBar.tsx +36 -19
  171. package/src/components/Excel/dataConversion.ts +43 -20
  172. package/src/components/FieldSet/FieldSet.scss +2 -1
  173. package/src/components/FieldSet/FieldSet.stories.tsx +2 -1
  174. package/src/components/FileDropzone/Dropzone.tsx +76 -28
  175. package/src/components/FileDropzone/FileDropzone.scss +30 -3
  176. package/src/components/FileDropzone/FileDropzone.stories.tsx +125 -4
  177. package/src/components/FileDropzone/FileDropzone.tsx +46 -13
  178. package/src/components/FileDropzone/RadioFilePreview.tsx +76 -0
  179. package/src/components/FileDropzone/types.ts +73 -0
  180. package/src/components/Icon/iconList.ts +47 -2
  181. package/src/components/IconButton/IconButton.scss +11 -11
  182. package/src/components/IconButton/IconButton.stories.tsx +1 -0
  183. package/src/components/IconButton/IconButton.tsx +6 -8
  184. package/src/components/IconButton/types.ts +2 -1
  185. package/src/components/IconRadioGroup/IconRadioGroup.scss +2 -1
  186. package/src/components/Input/Input.scss +137 -125
  187. package/src/components/Input/Input.tsx +110 -93
  188. package/src/components/InputWithDropdown/InputWithDropdown.scss +9 -2
  189. package/src/components/InputWithDropdown/types.ts +3 -3
  190. package/src/components/LabelEditTextField/LabelEditTextField.tsx +1 -1
  191. package/src/components/MenuOption/MenuOption.stories.tsx +4 -3
  192. package/src/components/MenuOption/MenuOption.tsx +1 -1
  193. package/src/components/MenuOption/types.ts +4 -2
  194. package/src/components/MiniModal/MiniModal.scss +0 -4
  195. package/src/components/MiniModal/MiniModal.stories.tsx +3 -2
  196. package/src/components/MiniModal/MiniModal.tsx +28 -10
  197. package/src/components/MiniModal/types.ts +7 -0
  198. package/src/components/Modal/Modal.stories.tsx +2 -1
  199. package/src/components/ModulesChip/ModuleChip.scss +21 -8
  200. package/src/components/ModulesChip/ModuleChip.stories.tsx +2 -2
  201. package/src/components/ModulesChip/ModuleChip.tsx +6 -9
  202. package/src/components/MultiSelect/Dropdown.tsx +12 -5
  203. package/src/components/MultiSelect/MultiSelect.scss +29 -0
  204. package/src/components/MultiSelect/MultiSelect.stories.tsx +31 -14
  205. package/src/components/MultiSelect/MultiSelect.tsx +32 -21
  206. package/src/components/PhoneInput/PhoneInput.d.ts +3 -0
  207. package/src/components/PhoneInput/PhoneInput.stories.tsx +95 -0
  208. package/src/components/PhoneInput/PhoneInput.tsx +90 -0
  209. package/src/components/PhoneInput/index.ts +1 -0
  210. package/src/components/PhoneInput/phoneInput.scss +3 -0
  211. package/src/components/PhoneInput/types.ts +10 -0
  212. package/src/components/PopUpModal/PopUpModal.stories.tsx +14 -13
  213. package/src/components/PopUpModal/PopUpModal.tsx +2 -1
  214. package/src/components/PopUpModal/types.ts +14 -13
  215. package/src/components/Search/Search.stories.tsx +28 -9
  216. package/src/components/Search/Search.tsx +32 -29
  217. package/src/components/Search/types.ts +4 -0
  218. package/src/components/Select/Select.scss +20 -0
  219. package/src/components/Select/Select.stories.tsx +50 -1
  220. package/src/components/Select/Select.tsx +34 -7
  221. package/src/components/Select/components/Dropdown.scss +9 -0
  222. package/src/components/Select/components/Dropdown.tsx +20 -6
  223. package/src/components/Select/components/types.ts +1 -0
  224. package/src/components/Select/types.ts +12 -2
  225. package/src/components/Table/Table.scss +6 -5
  226. package/src/components/Table/Types.ts +1 -1
  227. package/src/components/TableTree/Components/TableBody.tsx +35 -0
  228. package/src/components/TableTree/Components/TableCell.tsx +59 -0
  229. package/src/components/TableTree/Components/TableHead.tsx +39 -0
  230. package/src/components/TableTree/Components/TableRow.tsx +37 -0
  231. package/src/components/TableTree/TableTree.scss +8 -5
  232. package/src/components/TableTree/TableTree.tsx +16 -46
  233. package/src/components/TableTree/Utils/getAllChildIds.ts +12 -0
  234. package/src/components/TableTree/Utils/renderSpaces.ts +0 -0
  235. package/src/components/TableTree/types.ts +43 -5
  236. package/src/components/TableWithAccordion/TableWithAccordion.scss +54 -0
  237. package/src/components/TableWithAccordion/TableWithAccordion.stories.tsx +94 -0
  238. package/src/components/TableWithAccordion/TableWithAccordion.tsx +174 -0
  239. package/src/components/TableWithAccordion/data.ts +37 -0
  240. package/src/components/TableWithAccordion/index.ts +1 -0
  241. package/src/components/TableWithAccordion/types.ts +70 -0
  242. package/src/components/Tabs/Tabs.scss +58 -5
  243. package/src/components/Tabs/Tabs.stories.tsx +31 -12
  244. package/src/components/Tabs/Tabs.tsx +27 -18
  245. package/src/components/Tabs/types.ts +1 -1
  246. package/src/components/TextArea/Textarea.stories.tsx +1 -1
  247. package/src/hooks/useFileDropzone.tsx +2 -1
  248. package/src/index.ts +18 -1
  249. package/src/utils/FormatString/FormatString.stories.tsx +58 -0
  250. package/src/utils/FormatString/FormatString.tsx +41 -0
  251. package/src/utils/checkDuplicates/CheckDuplicates.stories.tsx +40 -0
  252. package/src/utils/checkDuplicates/checkDuplicates.ts +13 -0
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import { TableRowProps } from '../types';
3
+ import TableCell from './TableCell';
4
+
5
+ const TableRow = React.memo(
6
+ ({
7
+ node,
8
+ level,
9
+ columnsData,
10
+ selected,
11
+ select,
12
+ onRowClick,
13
+ onToggleExpand,
14
+ onCheckBoxChange,
15
+ }: TableRowProps) => (
16
+ <tr
17
+ data-level={level}
18
+ className="show"
19
+ onClick={(e) => onRowClick(e, node)}
20
+ >
21
+ {columnsData.map((col) => (
22
+ <TableCell
23
+ key={col.name}
24
+ col={col}
25
+ node={node}
26
+ level={level}
27
+ selected={selected}
28
+ select={select}
29
+ onCheckBoxChange={onCheckBoxChange}
30
+ onToggleExpand={onToggleExpand}
31
+ />
32
+ ))}
33
+ </tr>
34
+ )
35
+ );
36
+
37
+ export default TableRow;
@@ -1,8 +1,3 @@
1
- html,
2
- * {
3
- font-family: 'Open Sans';
4
- }
5
-
6
1
  .tree-table-space-block {
7
2
  display: inline-block;
8
3
  width: 20px;
@@ -39,6 +34,14 @@ html,
39
34
  .tree-table-wrap {
40
35
  width: 100%;
41
36
  }
37
+ thead{
38
+ position: sticky;
39
+ top: 12px;
40
+ }
41
+
42
+ tbody{
43
+ overflow: scroll;
44
+ }
42
45
 
43
46
  .tree-table {
44
47
  border: 1px solid #f1f1f1;
@@ -4,7 +4,13 @@ import { prepareData } from '../../utils/TableCell/TableCell';
4
4
  import Arrow from '../../assets/icons/arrows_down_icon.svg?react';
5
5
  import Checkbox from '../Checkbox';
6
6
  import RadioButton from '../RadioButton';
7
- import { TreeTableProps } from './types';
7
+ import {
8
+ TableBodyProps,
9
+ TableCellProps,
10
+ TableHeadProps,
11
+ TableRowProps,
12
+ TreeTableProps,
13
+ } from './types';
8
14
 
9
15
  // Helper to render spaces for levels
10
16
  const renderSpaces = (level: number) =>
@@ -32,27 +38,17 @@ const TableCell = React.memo(
32
38
  col,
33
39
  node,
34
40
  level,
35
- isExpanded,
36
41
  selected,
37
42
  select,
38
43
  onCheckBoxChange,
39
44
  onToggleExpand,
40
- }: {
41
- col: any;
42
- node: any;
43
- level: number;
44
- isExpanded: boolean;
45
- selected: string[];
46
- select: string | null;
47
- onCheckBoxChange: (type: string, node: any) => void;
48
- onToggleExpand: (node: any) => void;
49
- }) => (
45
+ }: TableCellProps) => (
50
46
  <td>
51
47
  {col.isTree && renderSpaces(level + 1)}
52
48
  {col.isTree && (
53
49
  <span
54
50
  className={`tree-table-space-block last-block ${
55
- isExpanded ? 'tree-row-expanded' : 'tree-row-collapsed'
51
+ node.isExpanded ? 'tree-row-expanded' : 'tree-row-collapsed'
56
52
  } ${node.folder ? '' : 'no-folder'}`}
57
53
  onClick={() => onToggleExpand(node)}
58
54
  >
@@ -89,23 +85,12 @@ const TableRow = React.memo(
89
85
  node,
90
86
  level,
91
87
  columnsData,
92
- isExpanded,
93
88
  selected,
94
89
  select,
95
90
  onRowClick,
96
91
  onToggleExpand,
97
92
  onCheckBoxChange,
98
- }: {
99
- node: any;
100
- level: number;
101
- columnsData: any[];
102
- isExpanded: boolean;
103
- selected: string[];
104
- select: string | null;
105
- onRowClick: (e: any, node: any) => void;
106
- onToggleExpand: (node: any) => void;
107
- onCheckBoxChange: (type: string, node: any) => void;
108
- }) => (
93
+ }: TableRowProps) => (
109
94
  <tr
110
95
  data-level={level}
111
96
  className="show"
@@ -117,7 +102,6 @@ const TableRow = React.memo(
117
102
  col={col}
118
103
  node={node}
119
104
  level={level}
120
- isExpanded={isExpanded}
121
105
  selected={selected}
122
106
  select={select}
123
107
  onCheckBoxChange={onCheckBoxChange}
@@ -129,7 +113,7 @@ const TableRow = React.memo(
129
113
  );
130
114
 
131
115
  // Component: TableHead
132
- const TableHead = React.memo(({ columnsData }: { columnsData: any[] }) => {
116
+ const TableHead = React.memo(({ columnsData }: TableHeadProps) => {
133
117
  const hasDefaultValues = useMemo(
134
118
  () => columnsData.some(({ defaultValue }) => !!defaultValue),
135
119
  [columnsData]
@@ -169,32 +153,20 @@ const TableBody = React.memo(
169
153
  ({
170
154
  flattenedTreeData,
171
155
  columnsData,
172
- expandedNodes,
173
156
  selected,
174
157
  select,
175
158
  onRowClick,
176
159
  onToggleExpand,
177
160
  onCheckBoxChange,
178
- }: {
179
- flattenedTreeData: any[];
180
- columnsData: any[];
181
- expandedNodes: string[];
182
- selected: string[];
183
- select: string | null;
184
- onRowClick: (e: any, node: any) => void;
185
- onToggleExpand: (node: any) => void;
186
- onCheckBoxChange: (type: string, node: any) => void;
187
- }) => (
161
+ }: TableBodyProps) => (
188
162
  <tbody>
189
163
  {flattenedTreeData.map(({ node, level }) => {
190
- const isExpanded = expandedNodes.includes(node?.id);
191
164
  return (
192
165
  <TableRow
193
166
  key={node.id}
194
167
  node={node}
195
168
  level={level}
196
169
  columnsData={columnsData}
197
- isExpanded={isExpanded}
198
170
  selected={selected}
199
171
  select={select}
200
172
  onRowClick={onRowClick}
@@ -215,12 +187,11 @@ const TreeTable: React.FC<TreeTableProps> = ({
215
187
  select = null,
216
188
  onChange,
217
189
  onClick,
218
- expandedNodes = [],
219
190
  onExpand,
220
191
  }) => {
221
192
  const handleToggleExpand = useCallback(
222
- (node: any) => onExpand?.(!expandedNodes.includes(node?.id), node?.id),
223
- [expandedNodes, onExpand]
193
+ (node: any) => onExpand?.(true, node?.id),
194
+ [onExpand]
224
195
  );
225
196
 
226
197
  const handleCheckBoxChange = useCallback(
@@ -228,7 +199,7 @@ const TreeTable: React.FC<TreeTableProps> = ({
228
199
  const nodeId = node.id;
229
200
 
230
201
  if (type === 'radio') {
231
- onChange?.([nodeId]);
202
+ onChange?.('true', [nodeId]);
232
203
  } else {
233
204
  let updatedSelected = [...selected];
234
205
 
@@ -242,7 +213,7 @@ const TreeTable: React.FC<TreeTableProps> = ({
242
213
  );
243
214
  }
244
215
 
245
- onChange?.(updatedSelected);
216
+ onChange?.('true', updatedSelected);
246
217
  }
247
218
  },
248
219
  [selected, treeData, onChange]
@@ -260,7 +231,6 @@ const TreeTable: React.FC<TreeTableProps> = ({
260
231
  <TableBody
261
232
  flattenedTreeData={treeData}
262
233
  columnsData={columnsData}
263
- expandedNodes={expandedNodes}
264
234
  selected={selected}
265
235
  select={select}
266
236
  onRowClick={handleRowClick}
@@ -0,0 +1,12 @@
1
+ const getAllChildIds = (nodeId: string, data: any[]): string[] => {
2
+ let result = [nodeId];
3
+
4
+ // Traverse the tree and find children based on parentId
5
+ data.forEach(({ node }) => {
6
+ if (node.parentId === nodeId) {
7
+ result = result.concat(getAllChildIds(node.id, data)); // Add children recursively
8
+ }
9
+ });
10
+
11
+ return result;
12
+ };
File without changes
@@ -1,3 +1,5 @@
1
+ import { ReactNode } from 'react';
2
+
1
3
  export interface TreeNode {
2
4
  key: string;
3
5
  [key: string]: any;
@@ -5,16 +7,53 @@ export interface TreeNode {
5
7
  expanded?: boolean;
6
8
  }
7
9
 
10
+ declare type JSX = ReactNode | JSX.Element[] | string | null;
11
+
12
+ export interface TableCellProps {
13
+ col: any;
14
+ node: any;
15
+ level: number;
16
+ selected: string[];
17
+ select: string | null;
18
+ onCheckBoxChange: (type: string, node: any) => void;
19
+ onToggleExpand: (node: any) => void;
20
+ }
21
+
22
+ export interface TableHeadProps {
23
+ columnsData: any[];
24
+ }
25
+
26
+ export interface TableBodyProps {
27
+ flattenedTreeData: any[];
28
+ columnsData: any[];
29
+ selected: string[];
30
+ select: string | null;
31
+ onRowClick: (e: any, node: any) => void;
32
+ onToggleExpand: (node: any) => void;
33
+ onCheckBoxChange: (type: string, node: any) => void;
34
+ }
35
+
36
+ export interface TableRowProps {
37
+ node: any;
38
+ level: number;
39
+ columnsData: any[];
40
+ selected: string[];
41
+ select: string | null;
42
+ onRowClick: (e: any, node: any) => void;
43
+ onToggleExpand: (node: any) => void;
44
+ onCheckBoxChange: (type: string, node: any) => void;
45
+ }
46
+
8
47
  export interface Column {
9
48
  name: string;
10
49
  accessor: string;
11
50
  width: string;
12
51
  isClickable?: boolean;
13
- cell?: (row: any) => JSX.Element | string | null;
14
- actions?: (row: any) => JSX.Element[];
52
+ cell?: (row: any) => JSX
53
+ actions?: (row: any) => JSX
15
54
  isTree?: boolean;
16
55
  defaultValue?: string;
17
- defaultActions?: () => JSX.Element[];
56
+ defaultActions?: () => JSX
18
57
  }
19
58
 
20
59
  export interface TreeTableProps {
@@ -22,9 +61,8 @@ export interface TreeTableProps {
22
61
  columnsData: Column[];
23
62
  selected?: string[];
24
63
  select?: 'radio' | 'checkbox' | 'none';
25
- onChange?: (nodes: string[]) => void;
64
+ onChange?: (e: any, node: string[]) => void;
26
65
  onClick?: (e: React.MouseEvent<HTMLDivElement>, row: TreeNode) => void;
27
- expandedNodes: string[];
28
66
  onExpand?: (_isExpanded: boolean, node: string) => void;
29
67
  onPagination?: (_direction: string) => void;
30
68
  }
@@ -0,0 +1,54 @@
1
+ @use '../../assets/styles/fonts';
2
+ @use '../../assets/styles/colors';
3
+
4
+ .ff-accordion-table-container {
5
+ overflow-y: auto;
6
+ .ff-accordion-table {
7
+ width: 100%;
8
+ .ff-table-header,
9
+ .ff-table-cell {
10
+ text-align: left;
11
+ padding: 9px;
12
+ }
13
+ .ff-table-header {
14
+ color: var(--text-color);
15
+ border-bottom: 1px solid var(--slider-table-color);
16
+ }
17
+ .ff-table-body {
18
+ .ff-table-row:hover {
19
+ background-color: var(--hover-color);
20
+ }
21
+ }
22
+ &--primary-bg {
23
+ background-color: var(--table-with-accordion-header-primary-bg);
24
+ }
25
+ &--secondary-bg {
26
+ background-color: var(--secondary-bg);
27
+ }
28
+ &--default-bg {
29
+ background-color: var(--default-bg);
30
+ }
31
+ }
32
+ .ff-accordion-fixed-header {
33
+ position: sticky;
34
+ top: 0;
35
+ z-index: 99;
36
+ background-color: var(--file-details-bg);
37
+ }
38
+ .column-table-accordion {
39
+ width: 100%;
40
+ .accordion-header {
41
+ display: flex;
42
+ align-items: center;
43
+ .header-title {
44
+ padding: 8px;
45
+ }
46
+ .accordion-arrow {
47
+ img {
48
+ height: 30px;
49
+ width: 35px;
50
+ }
51
+ }
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,94 @@
1
+ import { StoryObj, Meta } from '@storybook/react';
2
+ import TableWithAccordion from './TableWithAccordion';
3
+ import { sampleData } from './data';
4
+
5
+ const meta: Meta<typeof TableWithAccordion> = {
6
+ title: 'Components/TableWithAccordion',
7
+ component: TableWithAccordion,
8
+ parameters: {
9
+ layout: 'centered',
10
+ },
11
+ tags: ['autodocs'],
12
+ };
13
+
14
+ type Story = StoryObj<typeof TableWithAccordion>;
15
+ const defaultArgs = {
16
+ tableMeta: [],
17
+ tableData: [],
18
+ };
19
+
20
+ const emptyData: never[] = [];
21
+ const columnsData = [
22
+ {
23
+ header: 'Description',
24
+ accessor: 'desc',
25
+ width: 100,
26
+ },
27
+ {
28
+ header: 'SUITE NAME',
29
+ accessor: 'suiteName',
30
+ width: 100,
31
+ },
32
+ {
33
+ header: 'SUITE TYPE',
34
+ accessor: 'suiteName',
35
+ width: 100,
36
+ },
37
+ {
38
+ header: 'SUITE ACCESS',
39
+ accessor: 'suiteName',
40
+ width: 100,
41
+ },
42
+ {
43
+ header: 'Modified By',
44
+ accessor: 'modifiedBy',
45
+ width: 100,
46
+ },
47
+ ];
48
+
49
+ export const TableWithRowAccordion: Story = {
50
+ args: {
51
+ ...defaultArgs,
52
+ tableMeta: columnsData,
53
+ tableData: sampleData,
54
+ accordionType: 'row',
55
+ TableAccordionStateIconWidth:4,
56
+ TableAccordionStateIconHeight:8,
57
+ },
58
+ };
59
+ export const TableWithColumnAccordion: Story = {
60
+ args: {
61
+ ...defaultArgs,
62
+ tableMeta: columnsData,
63
+ tableData: sampleData,
64
+ accordionType: 'column',
65
+ TableAccordionStateIconWidth:4,
66
+ TableAccordionStateIconHeight:8,
67
+ },
68
+ };
69
+
70
+ export const EmtptyTableWithColumnAccordion: Story = {
71
+ args: {
72
+ ...defaultArgs,
73
+ tableMeta: columnsData,
74
+ tableData: emptyData,
75
+ accordionType: 'column',
76
+ TableAccordionStateIconWidth:4,
77
+ TableAccordionStateIconHeight:8,
78
+ },
79
+ };
80
+
81
+ export const AccordionTableWithFixedHeader: Story = {
82
+ args: {
83
+ ...defaultArgs,
84
+ tableMeta: columnsData,
85
+ tableData: sampleData,
86
+ accordionType: 'row',
87
+ height: '200px',
88
+ withFixedHeader: true,
89
+ TableAccordionStateIconWidth:4,
90
+ TableAccordionStateIconHeight:8,
91
+ },
92
+ };
93
+
94
+ export default meta;
@@ -0,0 +1,174 @@
1
+ import { useState } from 'react';
2
+ import classNames from 'classnames';
3
+ import Accordion from '../Accordion';
4
+ import './TableWithAccordion.scss';
5
+ import Icon from '../Icon';
6
+ import Tooltip from '../Tooltip';
7
+ import '../../../index.scss';
8
+ import Typography from '../Typography';
9
+ import { ColumnProps, TableProps } from './types';
10
+
11
+ const TableWithAccordion = ({
12
+ tableMeta = [],
13
+ tableData = [],
14
+ accordionType = 'row',
15
+ noDataContent,
16
+ height = '100%',
17
+ withFixedHeader = false,
18
+ headerType,
19
+ TableAccordionStateIconWidth = 4,
20
+ TableAccordionStateIconHeight = 8,
21
+ }: TableProps) => {
22
+ const [expandedRowIndex, setExpandedRowIndex] = useState(-1);
23
+ const onAccordionClick = (index: number) => {
24
+ setExpandedRowIndex(index === expandedRowIndex ? -1 : index);
25
+ };
26
+ const getAccordionTableCellContent = (
27
+ dataObj: any,
28
+ columnObj: ColumnProps
29
+ ) => {
30
+ let cellData = dataObj[columnObj.accessor];
31
+ if (columnObj.cell) {
32
+ return columnObj.cell({
33
+ value: cellData,
34
+ row: dataObj,
35
+ column: columnObj.accessor,
36
+ });
37
+ } else if (columnObj.accessor) {
38
+ return cellData;
39
+ } else if (cellData && typeof cellData !== 'object') {
40
+ return cellData;
41
+ } else {
42
+ return '--';
43
+ }
44
+ };
45
+ const getAccordionTableContent = (dataArray: any) => {
46
+ const accordionSubTable = dataArray.map((rowData: any, index: number) => {
47
+ return (
48
+ <table className="ff-accordion-table" cellSpacing={0}>
49
+ <tbody className="ff-table-body">
50
+ <tr className="ff-table-row" key={rowData.id || index}>
51
+ {tableMeta.map((column, i) => {
52
+ return (
53
+ <td
54
+ className="ff-table-cell"
55
+ key={column.accessor + i}
56
+ style={{ width: column.width }}
57
+ >
58
+ {accordionType === 'column' && i === 0 ? (
59
+ ''
60
+ ) : (
61
+ <Typography>
62
+ {getAccordionTableCellContent(rowData, column)}
63
+ </Typography>
64
+ )}
65
+ </td>
66
+ );
67
+ })}
68
+ </tr>
69
+ </tbody>
70
+ </table>
71
+ );
72
+ });
73
+ return accordionSubTable;
74
+ };
75
+ return (
76
+ <div
77
+ style={{ height: height }}
78
+ className={classNames('ff-accordion-table-container', {
79
+ 'ff-accordion-fixed-header-table': withFixedHeader,
80
+ })}
81
+ >
82
+ <table
83
+ cellSpacing={0}
84
+ className={classNames('ff-accordion-table', {
85
+ 'ff-accordion-fixed-header': withFixedHeader,
86
+ })}
87
+ >
88
+ <thead>
89
+ <tr className="ff-table-row">
90
+ {tableMeta.map((column) => (
91
+ <th
92
+ key={column.header}
93
+ style={{ width: column.width }}
94
+ className={classNames(
95
+ 'ff-table-header',
96
+ headerType && `ff-accordion-table--${headerType}-bg`
97
+ )}
98
+ >
99
+ <div>
100
+ <Typography fontWeight="medium" fontSize={12}>
101
+ {column.header}
102
+ </Typography>
103
+ </div>
104
+ </th>
105
+ ))}
106
+ </tr>
107
+ </thead>
108
+ </table>
109
+ {accordionType === 'row' &&
110
+ tableData.map((row: any) => (
111
+ <Accordion
112
+ headerTitle={row.title}
113
+ color="var(--text-color)"
114
+ accordionContent={getAccordionTableContent(row.data)}
115
+ disable={row.disable}
116
+ disableInfoMessage={row.disableInfoMessage}
117
+ accordionStateIconName="arrows_down_icon"
118
+ AccordionStateIconWidth={TableAccordionStateIconWidth}
119
+ AccordionStateIconHeight={TableAccordionStateIconHeight}
120
+ />
121
+ ))}
122
+ {accordionType === 'column' &&
123
+ tableData.map((row: any, index: number) => (
124
+ <div className="column-table-accordion">
125
+ <div className="ff-display-flex">
126
+ <Tooltip title={row?.disableInfoMessage}>
127
+ <div
128
+ className={`accordion-header ${row.disable && 'ff-disabled'}`}
129
+ >
130
+ <div className="header-title">
131
+ <span>
132
+ <Typography fontWeight="regular">{row.title}</Typography>
133
+ </span>
134
+ </div>
135
+
136
+ <div
137
+ className="accordion-arrow"
138
+ onClick={() => {
139
+ !row.disable && onAccordionClick(index);
140
+ }}
141
+ >
142
+ <Icon
143
+ name={
144
+ expandedRowIndex === index
145
+ ? 'arrows_down_icon'
146
+ : 'arrows_right_icon'
147
+ }
148
+ color="var(--table-with-accordion-icon-color)"
149
+ width={TableAccordionStateIconWidth}
150
+ height={TableAccordionStateIconHeight}
151
+ hoverEffect={false}
152
+ />
153
+ </div>
154
+ </div>
155
+ </Tooltip>
156
+ </div>
157
+ {expandedRowIndex === index && (
158
+ <div>{getAccordionTableContent(row.data)}</div>
159
+ )}
160
+ </div>
161
+ ))}
162
+ {tableData.length <= 0 && (
163
+ <div
164
+ className="no-data-content"
165
+ style={{ height: `calc(${height} - 50px)` }}
166
+ >
167
+ {noDataContent}
168
+ </div>
169
+ )}
170
+ </div>
171
+ );
172
+ };
173
+
174
+ export default TableWithAccordion;
@@ -0,0 +1,37 @@
1
+ export const sampleData = [
2
+ {
3
+ title: 'Pre conditions',
4
+ data: [
5
+ {
6
+ desc: 'Open Browser',
7
+ modifiedBy: 'Ram',
8
+ suiteName: 'test',
9
+ },
10
+ ],
11
+ },
12
+ {
13
+ title: 'Steps',
14
+ data: [
15
+ {
16
+ desc: '1. SG1',
17
+ modifiedBy: 'Ram',
18
+ suiteName: 'suite1',
19
+ },
20
+ {
21
+ desc: '2. SG2',
22
+ modifiedBy: 'Laxman',
23
+ suiteName: 'suite 2',
24
+ },
25
+ ],
26
+ },
27
+ {
28
+ title: 'Post conditions',
29
+ data: [
30
+ {
31
+ desc: 'close browser',
32
+ modifiedBy: 'Krishna',
33
+ suiteName: 'test 2',
34
+ },
35
+ ],
36
+ },
37
+ ];
@@ -0,0 +1 @@
1
+ export { default } from './TableWithAccordion';