@tcn/ui-table 2.4.0 → 2.4.2
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/components/cells/header_cell.d.ts.map +1 -1
- package/dist/components/cells/header_cell.js +28 -27
- package/dist/components/cells/header_cell.js.map +1 -1
- package/dist/components/table/table.d.ts.map +1 -1
- package/dist/components/table/table.js +35 -34
- package/dist/components/table/table.js.map +1 -1
- package/dist/components/table/table_column.d.ts +1 -0
- package/dist/components/table/table_column.d.ts.map +1 -1
- package/dist/components/table/table_column.js.map +1 -1
- package/dist/components/table/table_presenter.d.ts +1 -0
- package/dist/components/table/table_presenter.d.ts.map +1 -1
- package/dist/components/table/table_presenter.js.map +1 -1
- package/dist/components/table_filter_panel/field_filters/field_filter_props.js +2 -0
- package/dist/components/table_filter_panel/field_filters/field_filter_props.js.map +1 -0
- package/dist/components/table_filter_panel/field_filters/field_filter_strategy.js +2 -0
- package/dist/components/table_filter_panel/field_filters/field_filter_strategy.js.map +1 -0
- package/dist/components/table_filter_panel/field_filters/mulit_select_field_filter.d.ts.map +1 -1
- package/dist/components/table_filter_panel/field_filters/mulit_select_field_filter.js +28 -40
- package/dist/components/table_filter_panel/field_filters/mulit_select_field_filter.js.map +1 -1
- package/dist/components/table_filter_panel/field_filters/select_field_filter.d.ts.map +1 -1
- package/dist/components/table_filter_panel/field_filters/select_field_filter.js +22 -36
- package/dist/components/table_filter_panel/field_filters/select_field_filter.js.map +1 -1
- package/dist/components/table_filter_panel/table_filter_panel.d.ts.map +1 -1
- package/dist/components/table_filter_panel/table_filter_panel.js +18 -18
- package/dist/components/table_filter_panel/table_filter_panel.js.map +1 -1
- package/dist/mulit_select_field_filter.css +1 -0
- package/dist/table.css +1 -1
- package/package.json +17 -17
- package/src/__stories__/sample_data.ts +25 -3
- package/src/__stories__/table.stories.tsx +195 -38
- package/src/components/cells/header_cell.tsx +4 -3
- package/src/components/table/table.module.css +20 -10
- package/src/components/table/table.tsx +6 -1
- package/src/components/table/table_column.tsx +1 -0
- package/src/components/table/table_presenter.ts +1 -0
- package/src/components/table_filter_panel/field_filters/mulit_select_field_filter.module.css +8 -0
- package/src/components/table_filter_panel/field_filters/mulit_select_field_filter.tsx +24 -35
- package/src/components/table_filter_panel/field_filters/select_field_filter.tsx +21 -32
- package/src/components/table_filter_panel/table_filter_panel.tsx +8 -10
- package/tsconfig.json +4 -33
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { useSignalValue } from '@tcn/state';
|
|
2
2
|
import { Multiselect, Option } from '@tcn/ui/inputs';
|
|
3
|
-
import { Box, HStack, VStack } from '@tcn/ui/stacks';
|
|
4
|
-
import { Title } from '@tcn/ui/typography';
|
|
5
3
|
import { FieldFilterProps } from './field_filter_props.js';
|
|
6
4
|
import { MultiSelectFieldFilterPresenter } from './multi_select_field_filter_presenter.js';
|
|
7
5
|
import { useFieldFilterStrategy } from './use_field_filter_strategy.js';
|
|
8
|
-
import {
|
|
6
|
+
import { ClearableField } from './clearable_field.js';
|
|
7
|
+
import styles from './mulit_select_field_filter.module.css';
|
|
9
8
|
|
|
10
9
|
export type MulitSelectFieldFilterProps = FieldFilterProps & {
|
|
11
10
|
options: { label: string; value: string | boolean | number }[];
|
|
@@ -25,38 +24,28 @@ export function MulitSelectFieldFilter({
|
|
|
25
24
|
.filter(Boolean) ?? [];
|
|
26
25
|
|
|
27
26
|
return (
|
|
28
|
-
<
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
27
|
+
<ClearableField
|
|
28
|
+
label={label}
|
|
29
|
+
onClear={() => presenter.setValue(null)}
|
|
30
|
+
isClearable={values == null || values.length === 0}
|
|
31
|
+
className={styles['multiselect-filter']}
|
|
32
|
+
>
|
|
33
|
+
<Multiselect
|
|
34
|
+
value={selectedLabels}
|
|
35
|
+
onChange={selectedLabels => {
|
|
36
|
+
const realValues = selectedLabels
|
|
37
|
+
.map(label => options.find(option => option.label === label)?.value)
|
|
38
|
+
.filter(value => value !== undefined) as (string | boolean | number)[];
|
|
40
39
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
</Option>
|
|
52
|
-
))}
|
|
53
|
-
</Multiselect>
|
|
54
|
-
</Box>
|
|
55
|
-
<ClearFilterButton
|
|
56
|
-
onClick={() => presenter.setValue(null)}
|
|
57
|
-
disabled={values == null || values.length === 0}
|
|
58
|
-
/>
|
|
59
|
-
</HStack>
|
|
60
|
-
</VStack>
|
|
40
|
+
presenter.setValue(realValues.length > 0 ? realValues : null);
|
|
41
|
+
}}
|
|
42
|
+
>
|
|
43
|
+
{options.map(option => (
|
|
44
|
+
<Option key={option.value.toString()} value={option.label} label={option.label}>
|
|
45
|
+
{option.label}
|
|
46
|
+
</Option>
|
|
47
|
+
))}
|
|
48
|
+
</Multiselect>
|
|
49
|
+
</ClearableField>
|
|
61
50
|
);
|
|
62
51
|
}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { useSignalValue } from '@tcn/state';
|
|
2
2
|
import { Option, Select } from '@tcn/ui/inputs';
|
|
3
|
-
import { Box, HStack, VStack } from '@tcn/ui/stacks';
|
|
4
|
-
import { Title } from '@tcn/ui/typography';
|
|
5
3
|
import { FieldFilterProps } from './field_filter_props.js';
|
|
6
4
|
import { SelectFieldFilterPresenter } from './select_field_filter_presenter.js';
|
|
7
5
|
import { useFieldFilterStrategy } from './use_field_filter_strategy.js';
|
|
8
|
-
import {
|
|
6
|
+
import { ClearableField } from './clearable_field.js';
|
|
9
7
|
|
|
10
8
|
export type SelectFieldFilterProps = FieldFilterProps & {
|
|
11
9
|
options: { label: string; value: string | boolean | number }[];
|
|
@@ -18,34 +16,25 @@ export function SelectFieldFilter({ fieldName, label, options }: SelectFieldFilt
|
|
|
18
16
|
const valueLabel = options.find(option => option.value === value)?.label ?? '';
|
|
19
17
|
|
|
20
18
|
return (
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
</Option>
|
|
42
|
-
))}
|
|
43
|
-
</Select>
|
|
44
|
-
<ClearFilterButton
|
|
45
|
-
onClick={() => presenter.setValue(null)}
|
|
46
|
-
disabled={value == null}
|
|
47
|
-
/>
|
|
48
|
-
</HStack>
|
|
49
|
-
</VStack>
|
|
19
|
+
<ClearableField
|
|
20
|
+
label={label}
|
|
21
|
+
onClear={() => presenter.setValue(null)}
|
|
22
|
+
isClearable={value == null}
|
|
23
|
+
>
|
|
24
|
+
<Select
|
|
25
|
+
value={valueLabel}
|
|
26
|
+
onChange={value => {
|
|
27
|
+
const realValue = options.find(option => option.label === value)?.value;
|
|
28
|
+
presenter.setValue(realValue ?? null);
|
|
29
|
+
}}
|
|
30
|
+
width="flex"
|
|
31
|
+
>
|
|
32
|
+
{options.map(option => (
|
|
33
|
+
<Option key={option.value.toString()} value={option.label} label={option.label}>
|
|
34
|
+
{option.label}
|
|
35
|
+
</Option>
|
|
36
|
+
))}
|
|
37
|
+
</Select>
|
|
38
|
+
</ClearableField>
|
|
50
39
|
);
|
|
51
40
|
}
|
|
@@ -3,7 +3,7 @@ import { ReactElement, useState, createContext } from 'react';
|
|
|
3
3
|
import { FieldFilterProps } from './field_filters/field_filter_props.js';
|
|
4
4
|
import { TableFilterPanelPresenter } from './table_filter_panel_presenter.js';
|
|
5
5
|
import { Aside, type PanelProps } from '@tcn/ui/surfaces';
|
|
6
|
-
import {
|
|
6
|
+
import { Header, Scaffold, Section } from '@tcn/ui/layouts';
|
|
7
7
|
import styles from './table_filter_panel.module.css';
|
|
8
8
|
import { Spacer } from '@tcn/ui/stacks';
|
|
9
9
|
import { Button } from '@tcn/ui/actions';
|
|
@@ -41,17 +41,15 @@ export function TableFilterPanel({
|
|
|
41
41
|
</Button>
|
|
42
42
|
)}
|
|
43
43
|
</Header>
|
|
44
|
-
<
|
|
44
|
+
<Scaffold
|
|
45
45
|
className={`${styles['table-filter-panel-body']} tcn-table-filter-panel-body`}
|
|
46
46
|
>
|
|
47
|
-
<
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
</Scaffold>
|
|
54
|
-
</Body>
|
|
47
|
+
<Section
|
|
48
|
+
className={`${styles['table-filter-panel-section']} tcn-table-filter-panel-section`}
|
|
49
|
+
>
|
|
50
|
+
{children}
|
|
51
|
+
</Section>
|
|
52
|
+
</Scaffold>
|
|
55
53
|
</Aside>
|
|
56
54
|
</TableFilterPanelContext.Provider>
|
|
57
55
|
);
|
package/tsconfig.json
CHANGED
|
@@ -1,36 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
+
"extends": "../../tsconfig.base.json",
|
|
2
3
|
"compilerOptions": {
|
|
3
|
-
"
|
|
4
|
-
"jsx": "react-jsx",
|
|
5
|
-
"paths": {
|
|
6
|
-
"~aip-160/*": [
|
|
7
|
-
"../aip-160/src/*"
|
|
8
|
-
],
|
|
9
|
-
"~aip-160-editor/*": [
|
|
10
|
-
"../aip-160-editor/src/*"
|
|
11
|
-
],
|
|
12
|
-
"~icons/*": [
|
|
13
|
-
"../icons/src/*"
|
|
14
|
-
],
|
|
15
|
-
"~resource-store/*": [
|
|
16
|
-
"../resource-store/src/*"
|
|
17
|
-
],
|
|
18
|
-
"~sb-blackcat-addon/*": [
|
|
19
|
-
"../sb-blackcat-addon/src/*"
|
|
20
|
-
],
|
|
21
|
-
"~state/*": [
|
|
22
|
-
"../state/src/*"
|
|
23
|
-
],
|
|
24
|
-
"~ui/*": [
|
|
25
|
-
"../ui/src/*"
|
|
26
|
-
],
|
|
27
|
-
"~ui-table/*": [
|
|
28
|
-
"./src/*"
|
|
29
|
-
]
|
|
30
|
-
}
|
|
4
|
+
"rootDir": "."
|
|
31
5
|
},
|
|
32
|
-
"include": [
|
|
33
|
-
|
|
34
|
-
"types/**/*"
|
|
35
|
-
]
|
|
36
|
-
}
|
|
6
|
+
"include": ["src/**/*", ".storybook/**/*", "types/**/*", "package.json"]
|
|
7
|
+
}
|