@inceptionbg/iui 2.0.14 → 2.0.16
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/dist/NoAccessPage-BmizYfw0.js +2 -0
- package/dist/{NoAccessPage-DBq5IzIf.js.map → NoAccessPage-BmizYfw0.js.map} +1 -1
- package/dist/NotFoundPage-Cv544vAr.js +2 -0
- package/dist/{NotFoundPage-DM-I96ar.js.map → NotFoundPage-Cv544vAr.js.map} +1 -1
- package/dist/index.d.ts +7 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/iui.css +1 -1
- package/package.json +2 -3
- package/src/components/Dialog/Dialog.tsx +3 -3
- package/src/components/Dialog/components/DialogFooter.tsx +18 -16
- package/src/components/Header/Components/UserMenu.tsx +15 -14
- package/src/components/Inputs/TextInput.tsx +1 -0
- package/src/components/List/ListItem.tsx +1 -1
- package/src/components/Menu/Menu.tsx +3 -0
- package/src/components/Pullover/Pullover.tsx +22 -22
- package/src/components/Table/Table.tsx +18 -29
- package/src/components/Table/components/columns/ColumnsList.tsx +59 -0
- package/src/components/Table/components/columns/TableColumnsEdit.tsx +116 -0
- package/src/components/Table/components/edit/TableEditRow.tsx +13 -19
- package/src/components/Table/components/header/TableHeaderRow.tsx +1 -1
- package/src/components/Table/contexts/TableContext.tsx +1 -9
- package/src/components/Table/hooks/localHooks/useLocalTableColumns.tsx +21 -24
- package/src/components/Table/hooks/useTableColumns.ts +16 -8
- package/src/components/Tabs/Tabs.tsx +1 -0
- package/src/index.ts +1 -1
- package/src/styles/components/_badge.scss +1 -1
- package/src/styles/components/_header.scss +4 -7
- package/src/styles/components/_list.scss +1 -1
- package/src/styles/components/_table.scss +49 -38
- package/src/styles/variables/_variables.scss +9 -0
- package/src/types/IHeader.ts +1 -1
- package/src/types/ITable.ts +1 -0
- package/dist/NoAccessPage-DBq5IzIf.js +0 -2
- package/dist/NotFoundPage-DM-I96ar.js +0 -2
|
@@ -17,10 +17,12 @@ import { TableFilters } from './components/filters/TableFilters';
|
|
|
17
17
|
import { TableEditRow } from './components/edit/TableEditRow';
|
|
18
18
|
import { TablePrint } from './components/print/TablePrint';
|
|
19
19
|
import { TableTemplates } from './components/templates/TableTemplates';
|
|
20
|
+
import { TableColumnsEdit } from './components/columns/TableColumnsEdit';
|
|
21
|
+
import { useLocalTableColumns } from './hooks/localHooks/useLocalTableColumns';
|
|
20
22
|
|
|
21
23
|
export const TableContent: FC = () => {
|
|
22
24
|
const {
|
|
23
|
-
columnData
|
|
25
|
+
columnData,
|
|
24
26
|
customHeader,
|
|
25
27
|
headerWrap,
|
|
26
28
|
data,
|
|
@@ -39,12 +41,15 @@ export const TableContent: FC = () => {
|
|
|
39
41
|
const [extendedRow, setExtendedRow] = useState('');
|
|
40
42
|
|
|
41
43
|
const { t } = useTranslation();
|
|
44
|
+
const { visibleColumns } = useLocalTableColumns();
|
|
42
45
|
const { focusedRow } = useLocalTableKeyboard();
|
|
46
|
+
|
|
43
47
|
const noTotalRows = footer?.totalRows === undefined;
|
|
44
48
|
|
|
45
49
|
return (
|
|
46
50
|
<Loader isLoading={!!isLoading}>
|
|
47
51
|
<div
|
|
52
|
+
id={props.id}
|
|
48
53
|
// onKeyDown={handleKeyDown}
|
|
49
54
|
className={clsx('iui-table', props.className, {
|
|
50
55
|
'pb-3': data.length === 0,
|
|
@@ -52,28 +57,9 @@ export const TableContent: FC = () => {
|
|
|
52
57
|
// tabIndex={-1}
|
|
53
58
|
>
|
|
54
59
|
<div className="iui-table-header-actions">
|
|
55
|
-
{/* {(!!filterData ||
|
|
56
|
-
!!sortData ||
|
|
57
|
-
!!setColumns ||
|
|
58
|
-
!!printData ||
|
|
59
|
-
!!customPrintData) && (
|
|
60
|
-
<TableOptions
|
|
61
|
-
columns={cols}
|
|
62
|
-
columnsData={
|
|
63
|
-
setColumns
|
|
64
|
-
? { columns, setColumns, withSearch: withColumnsSearch }
|
|
65
|
-
: undefined
|
|
66
|
-
}
|
|
67
|
-
filterData={filterData}
|
|
68
|
-
sortData={sortData}
|
|
69
|
-
printData={printData}
|
|
70
|
-
customPrintData={customPrintData}
|
|
71
|
-
templates={templates}
|
|
72
|
-
additionsalOptions={additionsalOptions}
|
|
73
|
-
/>
|
|
74
|
-
)} */}
|
|
75
60
|
{props.selectActions.length > 0 && <TableSelect />}
|
|
76
61
|
{props.filterData && <TableFilters />}
|
|
62
|
+
{!!columnData.setColumns && <TableColumnsEdit />}
|
|
77
63
|
{props.sortData && <TableSort />}
|
|
78
64
|
{props.templateData && <TableTemplates />}
|
|
79
65
|
{props.printData && <TablePrint />}
|
|
@@ -100,7 +86,7 @@ export const TableContent: FC = () => {
|
|
|
100
86
|
>
|
|
101
87
|
<table className="full-width">
|
|
102
88
|
<HeaderTable
|
|
103
|
-
columns={
|
|
89
|
+
columns={visibleColumns}
|
|
104
90
|
customHeader={customHeader}
|
|
105
91
|
headerWrap={headerWrap}
|
|
106
92
|
maxHeight={maxHeight}
|
|
@@ -117,7 +103,7 @@ export const TableContent: FC = () => {
|
|
|
117
103
|
<Fragment key={row.uuid}>
|
|
118
104
|
{/* ////// EDITABLE ROW ////// */}
|
|
119
105
|
{!!editable && row.uuid === editable.selectedItem?.uuid ? (
|
|
120
|
-
<TableEditRow />
|
|
106
|
+
<TableEditRow columns={visibleColumns} />
|
|
121
107
|
) : (
|
|
122
108
|
////// REGULAR ROW //////
|
|
123
109
|
<tr
|
|
@@ -137,7 +123,7 @@ export const TableContent: FC = () => {
|
|
|
137
123
|
);
|
|
138
124
|
}}
|
|
139
125
|
>
|
|
140
|
-
{
|
|
126
|
+
{visibleColumns.map(column => {
|
|
141
127
|
const cell = row.cells[column.id];
|
|
142
128
|
return (
|
|
143
129
|
<Tooltip
|
|
@@ -186,7 +172,7 @@ export const TableContent: FC = () => {
|
|
|
186
172
|
{/* ////// EXTENDABLE ROW ////// */}
|
|
187
173
|
{isExtended && (
|
|
188
174
|
<tr>
|
|
189
|
-
<td colSpan={
|
|
175
|
+
<td colSpan={visibleColumns.length} className={rowHeight}>
|
|
190
176
|
{row.extendable!.element}
|
|
191
177
|
</td>
|
|
192
178
|
</tr>
|
|
@@ -197,7 +183,7 @@ export const TableContent: FC = () => {
|
|
|
197
183
|
</>
|
|
198
184
|
) : (
|
|
199
185
|
<tr>
|
|
200
|
-
<td colSpan={
|
|
186
|
+
<td colSpan={visibleColumns.length}>{t('NoResults')}</td>
|
|
201
187
|
</tr>
|
|
202
188
|
)}
|
|
203
189
|
</tbody>
|
|
@@ -214,7 +200,10 @@ export const TableContent: FC = () => {
|
|
|
214
200
|
})}
|
|
215
201
|
onClick={() => editable.setIsAdding(true)}
|
|
216
202
|
>
|
|
217
|
-
<td
|
|
203
|
+
<td
|
|
204
|
+
className={`text-center ${rowHeight}`}
|
|
205
|
+
colSpan={visibleColumns.length}
|
|
206
|
+
>
|
|
218
207
|
<div className="flex center gap-2">
|
|
219
208
|
<FontAwesomeIcon icon={faPlus} className="c-primary icon24" />
|
|
220
209
|
<p>{editable.addLabel || t('AddItem')}</p>
|
|
@@ -222,13 +211,13 @@ export const TableContent: FC = () => {
|
|
|
222
211
|
</td>
|
|
223
212
|
</tr>
|
|
224
213
|
) : (
|
|
225
|
-
<TableEditRow />
|
|
214
|
+
<TableEditRow columns={visibleColumns} />
|
|
226
215
|
))}
|
|
227
216
|
{!!sumRows &&
|
|
228
217
|
!!data.length &&
|
|
229
218
|
sumRows.map(row => (
|
|
230
219
|
<tr key={row.uuid}>
|
|
231
|
-
{
|
|
220
|
+
{visibleColumns.map(({ id: columnId }) => (
|
|
232
221
|
<td
|
|
233
222
|
key={columnId}
|
|
234
223
|
align={row.cells[columnId]?.align || 'right'}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { useEffect, useState, type FC } from 'react';
|
|
2
|
+
import { Draggable, Droppable } from '@hello-pangea/dnd';
|
|
3
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
4
|
+
import { ITableColumn } from '../../../../types/ITable';
|
|
5
|
+
import { faGripDotsVertical } from '../../../../assets/icons/solid/faGripDotsVertical';
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
id: 'hidden' | 'visible';
|
|
9
|
+
items: ITableColumn[];
|
|
10
|
+
search: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export const ColumnsList: FC<Props> = ({ id, items, search }) => {
|
|
14
|
+
const [filteredItems, setFilteredItems] = useState<ITableColumn[]>([]);
|
|
15
|
+
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (search.length) {
|
|
18
|
+
setFilteredItems(
|
|
19
|
+
items.filter(e =>
|
|
20
|
+
(typeof e.label === 'string' ? e.label : (e.labelForFilter ?? ''))
|
|
21
|
+
.toLocaleLowerCase()
|
|
22
|
+
.includes(search.toLocaleLowerCase())
|
|
23
|
+
)
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
}, [search, items]);
|
|
27
|
+
|
|
28
|
+
const list = search.length ? filteredItems : items;
|
|
29
|
+
|
|
30
|
+
return (
|
|
31
|
+
<Droppable droppableId={id}>
|
|
32
|
+
{({ droppableProps, innerRef, placeholder }) => (
|
|
33
|
+
<div {...droppableProps} ref={innerRef} className="list-box">
|
|
34
|
+
{list.map(c => (
|
|
35
|
+
<Draggable key={c.id} draggableId={c.id} index={items.indexOf(c)}>
|
|
36
|
+
{({ innerRef, draggableProps, dragHandleProps }, snapshot) => (
|
|
37
|
+
<div
|
|
38
|
+
className={`item ${snapshot.isDragging ? 'dragging' : ''}`}
|
|
39
|
+
ref={innerRef}
|
|
40
|
+
{...draggableProps}
|
|
41
|
+
{...dragHandleProps}
|
|
42
|
+
style={{
|
|
43
|
+
...draggableProps.style,
|
|
44
|
+
top: 'unset',
|
|
45
|
+
left: 'unset',
|
|
46
|
+
}}
|
|
47
|
+
>
|
|
48
|
+
{c.label}
|
|
49
|
+
<FontAwesomeIcon icon={faGripDotsVertical} />
|
|
50
|
+
</div>
|
|
51
|
+
)}
|
|
52
|
+
</Draggable>
|
|
53
|
+
))}
|
|
54
|
+
{placeholder}
|
|
55
|
+
</div>
|
|
56
|
+
)}
|
|
57
|
+
</Droppable>
|
|
58
|
+
);
|
|
59
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { FC, useEffect, useState } from 'react';
|
|
2
|
+
import { DragDropContext, DropResult } from '@hello-pangea/dnd';
|
|
3
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
4
|
+
import { ITableColumn } from '../../../../types/ITable';
|
|
5
|
+
import { faArrowRightArrowLeft } from '../../../../assets/icons/regular/faArrowRightArrowLeft';
|
|
6
|
+
import { useTranslation } from 'react-i18next';
|
|
7
|
+
import { ColumnsList } from './ColumnsList';
|
|
8
|
+
import { SearchInput } from '../../../Inputs/SearchInput';
|
|
9
|
+
import { Pullover } from '../../../Pullover/Pullover';
|
|
10
|
+
import { useTableContext } from '../../contexts/TableContext';
|
|
11
|
+
import { usePopupControl } from '../../../../hooks/usePopupControl';
|
|
12
|
+
import { IconButton } from '../../../Button/IconButton';
|
|
13
|
+
import { faLineColumns } from '../../../../assets/icons/light/faLineColumns';
|
|
14
|
+
|
|
15
|
+
export const TableColumnsEdit: FC = () => {
|
|
16
|
+
const [hidden, setHidden] = useState<ITableColumn[]>([]);
|
|
17
|
+
const [visible, setVisible] = useState<ITableColumn[]>([]);
|
|
18
|
+
const [searchHidden, setSearchHidden] = useState('');
|
|
19
|
+
const [searchVisible, setSearchVisible] = useState('');
|
|
20
|
+
|
|
21
|
+
const { t } = useTranslation();
|
|
22
|
+
const {
|
|
23
|
+
columnData: { defaultColumns, setColumns },
|
|
24
|
+
} = useTableContext();
|
|
25
|
+
const { control, onClose, onOpen } = usePopupControl();
|
|
26
|
+
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (control.isOpen) {
|
|
29
|
+
let hiddenCols: ITableColumn[] = [];
|
|
30
|
+
let visibleCols: ITableColumn[] = [];
|
|
31
|
+
defaultColumns.forEach(col =>
|
|
32
|
+
!!col.hidden ? hiddenCols.push(col) : visibleCols.push(col)
|
|
33
|
+
);
|
|
34
|
+
setHidden(hiddenCols);
|
|
35
|
+
setVisible(visibleCols);
|
|
36
|
+
}
|
|
37
|
+
}, [control.isOpen, defaultColumns]);
|
|
38
|
+
|
|
39
|
+
const onDragEnd = ({ source, destination }: DropResult) => {
|
|
40
|
+
if (!destination) return;
|
|
41
|
+
const hiddenCols = [...hidden];
|
|
42
|
+
const visibleCols = [...visible];
|
|
43
|
+
const destinationIsHidden = destination.droppableId === 'hidden';
|
|
44
|
+
|
|
45
|
+
const sourceList = source.droppableId === 'hidden' ? hiddenCols : visibleCols;
|
|
46
|
+
const destinationList = destinationIsHidden ? hiddenCols : visibleCols;
|
|
47
|
+
|
|
48
|
+
const [removed] = sourceList.splice(source.index, 1);
|
|
49
|
+
destinationList.splice(destination.index, 0, removed);
|
|
50
|
+
if (source.droppableId !== destination.droppableId) {
|
|
51
|
+
destinationList[destination.index].hidden = destinationIsHidden;
|
|
52
|
+
setHidden(hiddenCols);
|
|
53
|
+
setVisible(visibleCols);
|
|
54
|
+
} else {
|
|
55
|
+
destinationIsHidden ? setHidden(hiddenCols) : setVisible(visibleCols);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const onSubmit = () => {
|
|
60
|
+
if (setColumns) {
|
|
61
|
+
const newColumns = [...visible, ...hidden];
|
|
62
|
+
setColumns(newColumns);
|
|
63
|
+
onClose();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
return (
|
|
68
|
+
<>
|
|
69
|
+
<IconButton
|
|
70
|
+
tooltip={t('Columns')}
|
|
71
|
+
icon={faLineColumns}
|
|
72
|
+
active={control.isOpen}
|
|
73
|
+
onClick={onOpen}
|
|
74
|
+
size="s"
|
|
75
|
+
variant="outlined"
|
|
76
|
+
/>
|
|
77
|
+
|
|
78
|
+
<DragDropContext onDragEnd={onDragEnd}>
|
|
79
|
+
<Pullover
|
|
80
|
+
control={control}
|
|
81
|
+
header={{ title: t('Columns') }}
|
|
82
|
+
footer={{
|
|
83
|
+
confirmButton: {
|
|
84
|
+
label: t('Confirm'),
|
|
85
|
+
onClick: onSubmit,
|
|
86
|
+
},
|
|
87
|
+
}}
|
|
88
|
+
>
|
|
89
|
+
<div className="dual-list-container">
|
|
90
|
+
<p className="pb-3">{t('DragDropListsInfo')}</p>
|
|
91
|
+
<div className="dual-list-content">
|
|
92
|
+
<p className="bold ml-2">{t('HiddenColumns')}:</p>
|
|
93
|
+
<div />
|
|
94
|
+
<p className="bold ml-2">{t('SelectedColumns')}:</p>
|
|
95
|
+
|
|
96
|
+
{/* {withSearch && (
|
|
97
|
+
<> */}
|
|
98
|
+
<SearchInput onSearch={setSearchHidden} />
|
|
99
|
+
<div />
|
|
100
|
+
<SearchInput onSearch={setSearchVisible} />
|
|
101
|
+
{/* </>
|
|
102
|
+
)} */}
|
|
103
|
+
<ColumnsList id="hidden" items={hidden} search={searchHidden} />
|
|
104
|
+
|
|
105
|
+
<div className="exchange-icon">
|
|
106
|
+
<FontAwesomeIcon icon={faArrowRightArrowLeft} />
|
|
107
|
+
</div>
|
|
108
|
+
|
|
109
|
+
<ColumnsList id="visible" items={visible} search={searchVisible} />
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
</Pullover>
|
|
113
|
+
</DragDropContext>
|
|
114
|
+
</>
|
|
115
|
+
);
|
|
116
|
+
};
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { FC, useEffect, useRef } from 'react';
|
|
2
|
-
import { ITableDataItem } from '../../../../types/ITable';
|
|
2
|
+
import { ITableColumn, ITableDataItem } from '../../../../types/ITable';
|
|
3
3
|
import { IconButton } from '../../../Button/IconButton';
|
|
4
4
|
import { faCheck, faXmark } from '../../../../assets/icons';
|
|
5
5
|
import { useTableContext } from '../../contexts/TableContext';
|
|
6
6
|
import { useGetFocusableElements } from '../../../../hooks/useGetFocusableElements';
|
|
7
7
|
|
|
8
|
-
export const TableEditRow: FC = () => {
|
|
9
|
-
const {
|
|
10
|
-
columnData: { columns },
|
|
11
|
-
editable,
|
|
12
|
-
} = useTableContext();
|
|
8
|
+
export const TableEditRow: FC<{ columns: ITableColumn[] }> = ({ columns }) => {
|
|
9
|
+
const { editable } = useTableContext();
|
|
13
10
|
|
|
14
11
|
const elementRef = useRef(null);
|
|
15
12
|
|
|
@@ -54,19 +51,16 @@ export const TableEditRow: FC = () => {
|
|
|
54
51
|
|
|
55
52
|
return (
|
|
56
53
|
<tr ref={elementRef} data-id={rowData.uuid} className="edit-row">
|
|
57
|
-
{columns.map(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
</td>
|
|
68
|
-
)
|
|
69
|
-
)}
|
|
54
|
+
{columns.map(column => (
|
|
55
|
+
<td
|
|
56
|
+
key={column.id}
|
|
57
|
+
align={column.align}
|
|
58
|
+
colSpan={rowData.cells[column.id]?.span}
|
|
59
|
+
className={rowData.cells[column.id]?.className}
|
|
60
|
+
>
|
|
61
|
+
{rowData.cells[column.id]?.value ?? ''}
|
|
62
|
+
</td>
|
|
63
|
+
))}
|
|
70
64
|
</tr>
|
|
71
65
|
);
|
|
72
66
|
};
|
|
@@ -15,7 +15,6 @@ import {
|
|
|
15
15
|
ITableSelectedAction,
|
|
16
16
|
} from '../../../types/ITable';
|
|
17
17
|
import { useLocalTablePagination } from '../hooks/localHooks/useLocalTablePagination';
|
|
18
|
-
import { useLocalTableColumns } from '../hooks/localHooks/useLocalTableColumns';
|
|
19
18
|
import { useLocalTableData } from '../hooks/localHooks/useLocalTableData';
|
|
20
19
|
|
|
21
20
|
interface ITableContext extends ITable {
|
|
@@ -86,20 +85,13 @@ export const TableProvider = ({
|
|
|
86
85
|
rowSelect,
|
|
87
86
|
});
|
|
88
87
|
|
|
89
|
-
useLocalTableColumns({
|
|
90
|
-
columnData,
|
|
91
|
-
hasSelect: selectActions.length > 0,
|
|
92
|
-
data,
|
|
93
|
-
rowSelect,
|
|
94
|
-
hasItemActions: updatedDataActions.hasItemActions,
|
|
95
|
-
});
|
|
96
|
-
|
|
97
88
|
const tableContextValue: ITableContext = {
|
|
98
89
|
...rest,
|
|
99
90
|
data,
|
|
100
91
|
dataActions: updatedDataActions,
|
|
101
92
|
columnData,
|
|
102
93
|
selectActions,
|
|
94
|
+
rowSelect,
|
|
103
95
|
};
|
|
104
96
|
|
|
105
97
|
if (editable) tableContextValue.editable = { ...editable, isAdding, setIsAdding };
|
|
@@ -1,33 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { ITableColumn } from '../../../../types/ITable';
|
|
3
3
|
import { useTranslation } from 'react-i18next';
|
|
4
4
|
import { Checkbox } from '../../../Inputs/Checkbox';
|
|
5
|
+
import { useTableContext } from '../../contexts/TableContext';
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
columnData: ITableColumnsData;
|
|
8
|
-
hasSelect: boolean;
|
|
9
|
-
data: ITable['data'];
|
|
10
|
-
rowSelect: ITable['rowSelect'];
|
|
11
|
-
hasItemActions?: boolean;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export const useLocalTableColumns = ({
|
|
15
|
-
columnData: { defaultColumns, setColumns },
|
|
16
|
-
hasSelect,
|
|
17
|
-
data,
|
|
18
|
-
rowSelect,
|
|
19
|
-
hasItemActions,
|
|
20
|
-
}: Props) => {
|
|
7
|
+
export const useLocalTableColumns = () => {
|
|
21
8
|
const { t } = useTranslation();
|
|
22
9
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
10
|
+
const {
|
|
11
|
+
columnData: { columns },
|
|
12
|
+
selectActions,
|
|
13
|
+
data,
|
|
14
|
+
rowSelect,
|
|
15
|
+
dataActions: { hasItemActions } = {},
|
|
16
|
+
} = useTableContext();
|
|
17
|
+
|
|
18
|
+
const visibleColumns = useMemo(() => {
|
|
19
|
+
const hasSelect = rowSelect && selectActions.length > 0;
|
|
20
|
+
const filteredColumns = columns.filter(column => !column.hidden);
|
|
26
21
|
|
|
27
22
|
let newCols: ITableColumn[] = [];
|
|
28
23
|
|
|
29
24
|
// Select Column
|
|
30
|
-
if (hasSelect
|
|
25
|
+
if (hasSelect) {
|
|
31
26
|
const selectableData = data.filter(e => !e.disableSelect);
|
|
32
27
|
const selectedSome =
|
|
33
28
|
!!rowSelect.selectedRows.size &&
|
|
@@ -57,7 +52,7 @@ export const useLocalTableColumns = ({
|
|
|
57
52
|
newCols.push(selectColumn);
|
|
58
53
|
}
|
|
59
54
|
|
|
60
|
-
newCols = newCols.concat(
|
|
55
|
+
newCols = newCols.concat(filteredColumns);
|
|
61
56
|
hasItemActions &&
|
|
62
57
|
newCols.push({
|
|
63
58
|
id: 'actions',
|
|
@@ -66,6 +61,8 @@ export const useLocalTableColumns = ({
|
|
|
66
61
|
className: 'actions-col',
|
|
67
62
|
});
|
|
68
63
|
|
|
69
|
-
|
|
70
|
-
}, [
|
|
64
|
+
return newCols;
|
|
65
|
+
}, [columns, selectActions.length, data, rowSelect, hasItemActions, t]);
|
|
66
|
+
|
|
67
|
+
return { visibleColumns };
|
|
71
68
|
};
|
|
@@ -1,28 +1,36 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useLayoutEffect, useMemo, useState } from 'react';
|
|
2
2
|
import { ITableColumn, ITableColumnsData } from '../../../types/ITable';
|
|
3
3
|
|
|
4
4
|
export interface ITableColumnsProps {
|
|
5
5
|
defaultColumns: ITableColumn[];
|
|
6
6
|
templateColumns?: ITableColumn[];
|
|
7
|
+
enableEdit?: boolean;
|
|
7
8
|
}
|
|
8
9
|
|
|
9
10
|
export const useTableColumns = ({
|
|
10
11
|
defaultColumns,
|
|
11
12
|
templateColumns,
|
|
13
|
+
enableEdit,
|
|
12
14
|
}: ITableColumnsProps): ITableColumnsData => {
|
|
13
|
-
const [columns, setColumns] = useState<ITableColumn[]>(
|
|
15
|
+
const [columns, setColumns] = useState<ITableColumn[]>([]);
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
const availableColumns = useMemo(
|
|
18
|
+
() => defaultColumns.filter(e => !e.unavailable),
|
|
19
|
+
[defaultColumns]
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
useLayoutEffect(() => {
|
|
23
|
+
setColumns(availableColumns);
|
|
24
|
+
}, [availableColumns, templateColumns]);
|
|
18
25
|
|
|
19
26
|
const columnData = useMemo(
|
|
20
27
|
() => ({
|
|
21
|
-
defaultColumns,
|
|
28
|
+
defaultColumns: availableColumns,
|
|
22
29
|
columns,
|
|
23
|
-
setColumns,
|
|
30
|
+
setColumns: enableEdit ? setColumns : undefined,
|
|
24
31
|
}),
|
|
25
|
-
[
|
|
32
|
+
[availableColumns, columns, enableEdit]
|
|
26
33
|
);
|
|
34
|
+
|
|
27
35
|
return columnData;
|
|
28
36
|
};
|
package/src/index.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
|
2
2
|
import type { IconDefinition } from '@fortawesome/fontawesome-svg-core';
|
|
3
3
|
import clsx from 'clsx';
|
|
4
4
|
import dayjs from 'dayjs';
|
|
5
|
-
import { DragDropContext, Draggable, Droppable } from '
|
|
5
|
+
import { DragDropContext, Draggable, Droppable } from '@hello-pangea/dnd';
|
|
6
6
|
import { ToastContainer } from 'react-toastify';
|
|
7
7
|
|
|
8
8
|
import type { IFormWrapper } from './components/Wrappers/FormWrapper';
|
|
@@ -118,13 +118,10 @@
|
|
|
118
118
|
text-overflow: ellipsis;
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
|
-
.user-badge {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
max-width: 10px;
|
|
126
|
-
background: var(--danger);
|
|
127
|
-
border-radius: 50px;
|
|
121
|
+
.user-notif-badge {
|
|
122
|
+
border: 1px solid var(--primary);
|
|
123
|
+
background-color: var(--danger);
|
|
124
|
+
right: -5px;
|
|
128
125
|
}
|
|
129
126
|
}
|
|
130
127
|
.header-user-menu {
|