venice-ui 3.0.44 → 3.0.46

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.
@@ -48,7 +48,6 @@ const Table = ({ theme, themeVariant = 'default', headers, elements, hover = tru
48
48
  name: '',
49
49
  order: 'none',
50
50
  }, pageSize = 20, moreActions = [], onRowClick, filterLabels, paginationCounters, tableHeight, tableWrapperHeight, paginationLabel, calendarLabels, calendarLocaleLabels, paginationZIndex, }) => {
51
- console.log('=====================');
52
51
  const resolvedThemeData = (0, config_1.resolveThemeWithComponentsConfig)({
53
52
  theme,
54
53
  themeVariant,
@@ -56,127 +55,84 @@ const Table = ({ theme, themeVariant = 'default', headers, elements, hover = tru
56
55
  const resolvedTheme = resolvedThemeData.resolvedTheme;
57
56
  const { componentsConfig } = resolvedThemeData;
58
57
  const tableConfig = componentsConfig.table;
59
- const initialElementsRef = (0, react_1.useRef)(null);
60
- (0, react_1.useEffect)(() => {
61
- console.log('zmiana eleemnts detect', elements);
62
- if (!initialElementsRef.current &&
63
- Array.isArray(elements) &&
64
- elements.length > 0) {
65
- initialElementsRef.current = elements.slice();
66
- }
67
- setTableProps((prev) => ({
68
- ...prev,
69
- elements: Array.isArray(elements) ? elements : [],
70
- }));
71
- // eslint-disable-next-line react-hooks/exhaustive-deps
72
- }, [elements]);
73
- const checkHeaders = () => {
74
- const tableHeaders = [...headers];
58
+ const tableHeaders = (0, react_1.useMemo)(() => {
59
+ const nextHeaders = [...headers];
75
60
  if (moreActions.length > 0) {
76
- tableHeaders.push({
61
+ nextHeaders.push({
77
62
  name: 'option',
78
63
  valueSource: 'empty',
79
64
  action: true,
80
65
  size: 'sm',
81
66
  });
82
67
  }
83
- return tableHeaders;
84
- };
85
- const [tableProps, setTableProps] = (0, react_1.useState)({
86
- elements: elements,
87
- sort: sort,
88
- headers: checkHeaders(),
89
- });
90
- (0, react_1.useEffect)(() => {
91
- setTableProps({
92
- ...tableProps,
93
- elements: elements,
94
- });
68
+ return nextHeaders;
69
+ }, [headers, moreActions]);
70
+ const fullElements = (0, react_1.useMemo)(() => {
71
+ return Array.isArray(elements) ? elements : [];
95
72
  }, [elements]);
73
+ const [tableElementsState, setTableElementsState] = (0, react_1.useState)(fullElements);
74
+ const [tableSort, setTableSort] = (0, react_1.useState)(sort);
96
75
  const [selectedRow, setSelectedRow] = (0, react_1.useState)('');
76
+ const [currentPage, setCurrentPage] = (0, react_1.useState)(1);
77
+ const [currentPageSize, setCurrentPageSize] = (0, react_1.useState)(pageSize || 10);
78
+ const [noResultsMessage, setNoResultsMessage] = (0, react_1.useState)(null);
79
+ const [filtersClearSignal, setFiltersClearSignal] = (0, react_1.useState)(0);
80
+ (0, react_1.useEffect)(() => {
81
+ setTableElementsState(fullElements);
82
+ setCurrentPage(1);
83
+ setNoResultsMessage(null);
84
+ }, [fullElements]);
97
85
  const handleRowClick = (id) => {
98
86
  if (selectable) {
99
87
  setSelectedRow(id);
100
88
  }
101
- onRowClick && onRowClick(id);
89
+ onRowClick?.(id);
102
90
  };
103
91
  const handleHeaderCellClick = (targetValue, order) => {
104
- if (sortable) {
105
- const newSort = (0, tableHelper_1.setSortParams)(targetValue, order, tableProps.sort);
106
- setTableProps({
107
- ...tableProps,
108
- elements: (0, tableHelper_1.applySort)(newSort, tableProps.elements),
109
- sort: newSort,
110
- });
92
+ if (!sortable) {
93
+ return;
111
94
  }
95
+ const newSort = (0, tableHelper_1.setSortParams)(targetValue, order, tableSort);
96
+ setTableSort(newSort);
97
+ setTableElementsState((prev) => (0, tableHelper_1.applySort)(newSort, prev));
112
98
  };
113
- const [currentPage, setCurrentPage] = (0, react_1.useState)(1);
114
- const [currentPageSize, setCurrentPageSize] = (0, react_1.useState)(pageSize || 10);
115
- const totalPages = Math.ceil(tableProps.elements.length / currentPageSize);
116
- const paginatedElements = tableProps.elements.slice((currentPage - 1) * currentPageSize, currentPage * currentPageSize);
117
- (0, react_1.useEffect)(() => {
118
- setCurrentPage(1);
119
- }, [elements, currentPageSize]);
120
- const [noResultsMessage, setNoResultsMessage] = (0, react_1.useState)(null);
121
99
  const handleApplyFilters = (0, react_1.useCallback)((filteredElements) => {
122
- setTableProps((prev) => ({
123
- ...prev,
124
- elements: filteredElements,
125
- }));
100
+ setTableElementsState(filteredElements);
126
101
  setCurrentPage(1);
127
102
  setNoResultsMessage(filteredElements && filteredElements.length === 0
128
103
  ? config_2.wordbook.table.filterEmptyState
129
104
  : null);
130
- }, [setCurrentPage, setTableProps]);
131
- const [filtersClearSignal, setFiltersClearSignal] = (0, react_1.useState)(0);
105
+ }, []);
132
106
  const handleClearFilters = (0, react_1.useCallback)(() => {
133
107
  setFiltersClearSignal((s) => s + 1);
134
- const full = initialElementsRef.current && initialElementsRef.current.length > 0
135
- ? initialElementsRef.current
136
- : Array.isArray(elements)
137
- ? elements
138
- : [];
139
- setTableProps((prev) => ({
140
- ...prev,
141
- elements: Array.isArray(full) ? full.slice() : [],
142
- }));
108
+ setTableElementsState(fullElements.slice());
143
109
  setCurrentPage(1);
144
110
  setNoResultsMessage(null);
145
- }, [elements, setCurrentPage, setNoResultsMessage]);
146
- console.log('table Elements', elements);
147
- console.log('initialElementsRef', initialElementsRef.current);
148
- const tableElements = (0, react_1.useMemo)(() => {
149
- if (pagination) {
150
- return paginatedElements;
151
- }
152
- return tableProps.elements;
153
- }, [pagination, paginatedElements, tableProps.elements]);
111
+ }, [fullElements]);
112
+ (0, react_1.useEffect)(() => {
113
+ setCurrentPage(1);
114
+ }, [currentPageSize]);
115
+ const totalPages = Math.ceil(tableElementsState.length / currentPageSize);
116
+ const paginatedElements = (0, react_1.useMemo)(() => {
117
+ return tableElementsState.slice((currentPage - 1) * currentPageSize, currentPage * currentPageSize);
118
+ }, [tableElementsState, currentPage, currentPageSize]);
119
+ const visibleElements = pagination ? paginatedElements : tableElementsState;
154
120
  return (react_1.default.createElement(styled_components_1.ThemeProvider, { theme: resolvedTheme },
155
121
  react_1.default.createElement(Table_styles_1.TableRoot, { theme: resolvedTheme, config: tableConfig, componentHeight: tableWrapperHeight },
156
122
  react_1.default.createElement(react_1.default.Fragment, null,
157
123
  (filtrable || pagination) && (react_1.default.createElement(Table_styles_1.TableHeader, { theme: resolvedTheme, config: tableConfig, right: pagination && !filtrable },
158
124
  react_1.default.createElement(react_1.default.Fragment, null,
159
125
  filtrable && (react_1.default.createElement(Table_styles_1.HeaderSection, null,
160
- react_1.default.createElement(Filters_1.Filters, { labels: filterLabels, headers: headers, elements: initialElementsRef.current &&
161
- initialElementsRef.current.length > 0
162
- ? initialElementsRef.current
163
- : elements, fullElements: initialElementsRef.current &&
164
- initialElementsRef.current.length > 0
165
- ? initialElementsRef.current
166
- : elements, handleSubmitFilters: handleApplyFilters, externalClearSignal: filtersClearSignal, onClear: handleClearFilters, calendarLabels: calendarLabels, calendarLocaleLabels: calendarLocaleLabels }))),
126
+ react_1.default.createElement(Filters_1.Filters, { labels: filterLabels, headers: headers, elements: fullElements, fullElements: fullElements, handleSubmitFilters: handleApplyFilters, externalClearSignal: filtersClearSignal, onClear: handleClearFilters, calendarLabels: calendarLabels, calendarLocaleLabels: calendarLocaleLabels }))),
167
127
  pagination && (react_1.default.createElement(Table_styles_1.HeaderSection, { right: true },
168
128
  react_1.default.createElement(Pagination_1.Pagination, { currentPage: currentPage, totalPages: totalPages, pageSize: currentPageSize, onPageChange: setCurrentPage, onPageSizeChange: setCurrentPageSize, label: paginationLabel?.label, availableValues: paginationCounters, zIndex: paginationZIndex })))))),
169
129
  react_1.default.createElement(Table_styles_1.TableContentWrapper, { componentHeight: tableHeight },
170
130
  react_1.default.createElement(Table_styles_1.TableContent, { theme: resolvedTheme, config: tableConfig, cellPadding: "0", cellSpacing: "0" },
171
131
  react_1.default.createElement(Table_styles_1.TableHead, null,
172
- react_1.default.createElement(Table_styles_1.TableHeaderRow, { theme: resolvedTheme, config: tableConfig }, tableProps.headers.map((header) => (react_1.default.createElement(HeaderCell_1.HeaderCell, { key: `header_${header.name}`, header: header, sortable: sortable, handleSort: handleHeaderCellClick, sort: tableProps.sort, size: header.size || 'md' }))))),
173
- react_1.default.createElement(Table_styles_1.TableBody, null, tableElements.map((item) => {
174
- return (react_1.default.createElement(Table_styles_1.TableRow, { theme: resolvedTheme, config: tableConfig, key: `table_row_${item.id}`, hover: hover, isDisabled: item.disabled, active: selectedRow === item.id, selectable: selectable, onClick: !item.disabled
175
- ? () => handleRowClick(item.id)
176
- : undefined }, tableProps.headers.map((header, index) => {
177
- return (react_1.default.createElement(Cell_1.Cell, { key: `cell_${header.name}_${item.id}`, header: header, moreActions: moreActions, item: item, theme: theme, selected: item.marked && index === 0, isDisabled: item.disabled }));
178
- })));
179
- })))),
132
+ react_1.default.createElement(Table_styles_1.TableHeaderRow, { theme: resolvedTheme, config: tableConfig }, tableHeaders.map((header) => (react_1.default.createElement(HeaderCell_1.HeaderCell, { key: `header_${header.name}`, header: header, sortable: sortable, handleSort: handleHeaderCellClick, sort: tableSort, size: header.size || 'md' }))))),
133
+ react_1.default.createElement(Table_styles_1.TableBody, null, visibleElements.map((item) => (react_1.default.createElement(Table_styles_1.TableRow, { theme: resolvedTheme, config: tableConfig, key: `table_row_${item.id}`, hover: hover, isDisabled: item.disabled, active: selectedRow === item.id, selectable: selectable, onClick: !item.disabled
134
+ ? () => handleRowClick(item.id)
135
+ : undefined }, tableHeaders.map((header, index) => (react_1.default.createElement(Cell_1.Cell, { key: `cell_${header.name}_${item.id}`, header: header, moreActions: moreActions, item: item, theme: theme, selected: item.marked && index === 0, isDisabled: item.disabled }))))))))),
180
136
  noResultsMessage && (react_1.default.createElement("div", { style: { padding: '8px 12px', textAlign: 'center' } }, noResultsMessage))))));
181
137
  };
182
138
  exports.Table = Table;
@@ -1,5 +1,5 @@
1
1
  import { resolveThemeWithComponentsConfig } from '../../config';
2
- import React, { useCallback, useEffect, useMemo, useRef, useState, } from 'react';
2
+ import React, { useCallback, useEffect, useMemo, useState } from 'react';
3
3
  import { applySort, setSortParams } from './tableHelper';
4
4
  import { wordbook } from '../../config';
5
5
  import { ThemeProvider } from 'styled-components';
@@ -12,7 +12,6 @@ export const Table = ({ theme, themeVariant = 'default', headers, elements, hove
12
12
  name: '',
13
13
  order: 'none',
14
14
  }, pageSize = 20, moreActions = [], onRowClick, filterLabels, paginationCounters, tableHeight, tableWrapperHeight, paginationLabel, calendarLabels, calendarLocaleLabels, paginationZIndex, }) => {
15
- console.log('=====================');
16
15
  const resolvedThemeData = resolveThemeWithComponentsConfig({
17
16
  theme,
18
17
  themeVariant,
@@ -20,126 +19,83 @@ export const Table = ({ theme, themeVariant = 'default', headers, elements, hove
20
19
  const resolvedTheme = resolvedThemeData.resolvedTheme;
21
20
  const { componentsConfig } = resolvedThemeData;
22
21
  const tableConfig = componentsConfig.table;
23
- const initialElementsRef = useRef(null);
24
- useEffect(() => {
25
- console.log('zmiana eleemnts detect', elements);
26
- if (!initialElementsRef.current &&
27
- Array.isArray(elements) &&
28
- elements.length > 0) {
29
- initialElementsRef.current = elements.slice();
30
- }
31
- setTableProps((prev) => ({
32
- ...prev,
33
- elements: Array.isArray(elements) ? elements : [],
34
- }));
35
- // eslint-disable-next-line react-hooks/exhaustive-deps
36
- }, [elements]);
37
- const checkHeaders = () => {
38
- const tableHeaders = [...headers];
22
+ const tableHeaders = useMemo(() => {
23
+ const nextHeaders = [...headers];
39
24
  if (moreActions.length > 0) {
40
- tableHeaders.push({
25
+ nextHeaders.push({
41
26
  name: 'option',
42
27
  valueSource: 'empty',
43
28
  action: true,
44
29
  size: 'sm',
45
30
  });
46
31
  }
47
- return tableHeaders;
48
- };
49
- const [tableProps, setTableProps] = useState({
50
- elements: elements,
51
- sort: sort,
52
- headers: checkHeaders(),
53
- });
54
- useEffect(() => {
55
- setTableProps({
56
- ...tableProps,
57
- elements: elements,
58
- });
32
+ return nextHeaders;
33
+ }, [headers, moreActions]);
34
+ const fullElements = useMemo(() => {
35
+ return Array.isArray(elements) ? elements : [];
59
36
  }, [elements]);
37
+ const [tableElementsState, setTableElementsState] = useState(fullElements);
38
+ const [tableSort, setTableSort] = useState(sort);
60
39
  const [selectedRow, setSelectedRow] = useState('');
40
+ const [currentPage, setCurrentPage] = useState(1);
41
+ const [currentPageSize, setCurrentPageSize] = useState(pageSize || 10);
42
+ const [noResultsMessage, setNoResultsMessage] = useState(null);
43
+ const [filtersClearSignal, setFiltersClearSignal] = useState(0);
44
+ useEffect(() => {
45
+ setTableElementsState(fullElements);
46
+ setCurrentPage(1);
47
+ setNoResultsMessage(null);
48
+ }, [fullElements]);
61
49
  const handleRowClick = (id) => {
62
50
  if (selectable) {
63
51
  setSelectedRow(id);
64
52
  }
65
- onRowClick && onRowClick(id);
53
+ onRowClick?.(id);
66
54
  };
67
55
  const handleHeaderCellClick = (targetValue, order) => {
68
- if (sortable) {
69
- const newSort = setSortParams(targetValue, order, tableProps.sort);
70
- setTableProps({
71
- ...tableProps,
72
- elements: applySort(newSort, tableProps.elements),
73
- sort: newSort,
74
- });
56
+ if (!sortable) {
57
+ return;
75
58
  }
59
+ const newSort = setSortParams(targetValue, order, tableSort);
60
+ setTableSort(newSort);
61
+ setTableElementsState((prev) => applySort(newSort, prev));
76
62
  };
77
- const [currentPage, setCurrentPage] = useState(1);
78
- const [currentPageSize, setCurrentPageSize] = useState(pageSize || 10);
79
- const totalPages = Math.ceil(tableProps.elements.length / currentPageSize);
80
- const paginatedElements = tableProps.elements.slice((currentPage - 1) * currentPageSize, currentPage * currentPageSize);
81
- useEffect(() => {
82
- setCurrentPage(1);
83
- }, [elements, currentPageSize]);
84
- const [noResultsMessage, setNoResultsMessage] = useState(null);
85
63
  const handleApplyFilters = useCallback((filteredElements) => {
86
- setTableProps((prev) => ({
87
- ...prev,
88
- elements: filteredElements,
89
- }));
64
+ setTableElementsState(filteredElements);
90
65
  setCurrentPage(1);
91
66
  setNoResultsMessage(filteredElements && filteredElements.length === 0
92
67
  ? wordbook.table.filterEmptyState
93
68
  : null);
94
- }, [setCurrentPage, setTableProps]);
95
- const [filtersClearSignal, setFiltersClearSignal] = useState(0);
69
+ }, []);
96
70
  const handleClearFilters = useCallback(() => {
97
71
  setFiltersClearSignal((s) => s + 1);
98
- const full = initialElementsRef.current && initialElementsRef.current.length > 0
99
- ? initialElementsRef.current
100
- : Array.isArray(elements)
101
- ? elements
102
- : [];
103
- setTableProps((prev) => ({
104
- ...prev,
105
- elements: Array.isArray(full) ? full.slice() : [],
106
- }));
72
+ setTableElementsState(fullElements.slice());
107
73
  setCurrentPage(1);
108
74
  setNoResultsMessage(null);
109
- }, [elements, setCurrentPage, setNoResultsMessage]);
110
- console.log('table Elements', elements);
111
- console.log('initialElementsRef', initialElementsRef.current);
112
- const tableElements = useMemo(() => {
113
- if (pagination) {
114
- return paginatedElements;
115
- }
116
- return tableProps.elements;
117
- }, [pagination, paginatedElements, tableProps.elements]);
75
+ }, [fullElements]);
76
+ useEffect(() => {
77
+ setCurrentPage(1);
78
+ }, [currentPageSize]);
79
+ const totalPages = Math.ceil(tableElementsState.length / currentPageSize);
80
+ const paginatedElements = useMemo(() => {
81
+ return tableElementsState.slice((currentPage - 1) * currentPageSize, currentPage * currentPageSize);
82
+ }, [tableElementsState, currentPage, currentPageSize]);
83
+ const visibleElements = pagination ? paginatedElements : tableElementsState;
118
84
  return (React.createElement(ThemeProvider, { theme: resolvedTheme },
119
85
  React.createElement(TableRoot, { theme: resolvedTheme, config: tableConfig, componentHeight: tableWrapperHeight },
120
86
  React.createElement(React.Fragment, null,
121
87
  (filtrable || pagination) && (React.createElement(TableHeader, { theme: resolvedTheme, config: tableConfig, right: pagination && !filtrable },
122
88
  React.createElement(React.Fragment, null,
123
89
  filtrable && (React.createElement(HeaderSection, null,
124
- React.createElement(Filters, { labels: filterLabels, headers: headers, elements: initialElementsRef.current &&
125
- initialElementsRef.current.length > 0
126
- ? initialElementsRef.current
127
- : elements, fullElements: initialElementsRef.current &&
128
- initialElementsRef.current.length > 0
129
- ? initialElementsRef.current
130
- : elements, handleSubmitFilters: handleApplyFilters, externalClearSignal: filtersClearSignal, onClear: handleClearFilters, calendarLabels: calendarLabels, calendarLocaleLabels: calendarLocaleLabels }))),
90
+ React.createElement(Filters, { labels: filterLabels, headers: headers, elements: fullElements, fullElements: fullElements, handleSubmitFilters: handleApplyFilters, externalClearSignal: filtersClearSignal, onClear: handleClearFilters, calendarLabels: calendarLabels, calendarLocaleLabels: calendarLocaleLabels }))),
131
91
  pagination && (React.createElement(HeaderSection, { right: true },
132
92
  React.createElement(Pagination, { currentPage: currentPage, totalPages: totalPages, pageSize: currentPageSize, onPageChange: setCurrentPage, onPageSizeChange: setCurrentPageSize, label: paginationLabel?.label, availableValues: paginationCounters, zIndex: paginationZIndex })))))),
133
93
  React.createElement(TableContentWrapper, { componentHeight: tableHeight },
134
94
  React.createElement(TableContent, { theme: resolvedTheme, config: tableConfig, cellPadding: "0", cellSpacing: "0" },
135
95
  React.createElement(TableHead, null,
136
- React.createElement(TableHeaderRow, { theme: resolvedTheme, config: tableConfig }, tableProps.headers.map((header) => (React.createElement(HeaderCell, { key: `header_${header.name}`, header: header, sortable: sortable, handleSort: handleHeaderCellClick, sort: tableProps.sort, size: header.size || 'md' }))))),
137
- React.createElement(TableBody, null, tableElements.map((item) => {
138
- return (React.createElement(TableRow, { theme: resolvedTheme, config: tableConfig, key: `table_row_${item.id}`, hover: hover, isDisabled: item.disabled, active: selectedRow === item.id, selectable: selectable, onClick: !item.disabled
139
- ? () => handleRowClick(item.id)
140
- : undefined }, tableProps.headers.map((header, index) => {
141
- return (React.createElement(Cell, { key: `cell_${header.name}_${item.id}`, header: header, moreActions: moreActions, item: item, theme: theme, selected: item.marked && index === 0, isDisabled: item.disabled }));
142
- })));
143
- })))),
96
+ React.createElement(TableHeaderRow, { theme: resolvedTheme, config: tableConfig }, tableHeaders.map((header) => (React.createElement(HeaderCell, { key: `header_${header.name}`, header: header, sortable: sortable, handleSort: handleHeaderCellClick, sort: tableSort, size: header.size || 'md' }))))),
97
+ React.createElement(TableBody, null, visibleElements.map((item) => (React.createElement(TableRow, { theme: resolvedTheme, config: tableConfig, key: `table_row_${item.id}`, hover: hover, isDisabled: item.disabled, active: selectedRow === item.id, selectable: selectable, onClick: !item.disabled
98
+ ? () => handleRowClick(item.id)
99
+ : undefined }, tableHeaders.map((header, index) => (React.createElement(Cell, { key: `cell_${header.name}_${item.id}`, header: header, moreActions: moreActions, item: item, theme: theme, selected: item.marked && index === 0, isDisabled: item.disabled }))))))))),
144
100
  noResultsMessage && (React.createElement("div", { style: { padding: '8px 12px', textAlign: 'center' } }, noResultsMessage))))));
145
101
  };
@@ -5,7 +5,7 @@ interface ITableProps {
5
5
  theme?: AppTheme;
6
6
  themeVariant?: ThemeName;
7
7
  headers: ITableHeaderProps[];
8
- elements: any;
8
+ elements: any[];
9
9
  moreActions?: IAction[];
10
10
  hover?: boolean;
11
11
  selectable?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "venice-ui",
3
- "version": "3.0.44",
3
+ "version": "3.0.46",
4
4
  "description": "Component library",
5
5
  "main": "index.js",
6
6
  "module": "./dist/esm/index.js",