@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.
Files changed (40) hide show
  1. package/dist/components/cells/header_cell.d.ts.map +1 -1
  2. package/dist/components/cells/header_cell.js +28 -27
  3. package/dist/components/cells/header_cell.js.map +1 -1
  4. package/dist/components/table/table.d.ts.map +1 -1
  5. package/dist/components/table/table.js +35 -34
  6. package/dist/components/table/table.js.map +1 -1
  7. package/dist/components/table/table_column.d.ts +1 -0
  8. package/dist/components/table/table_column.d.ts.map +1 -1
  9. package/dist/components/table/table_column.js.map +1 -1
  10. package/dist/components/table/table_presenter.d.ts +1 -0
  11. package/dist/components/table/table_presenter.d.ts.map +1 -1
  12. package/dist/components/table/table_presenter.js.map +1 -1
  13. package/dist/components/table_filter_panel/field_filters/field_filter_props.js +2 -0
  14. package/dist/components/table_filter_panel/field_filters/field_filter_props.js.map +1 -0
  15. package/dist/components/table_filter_panel/field_filters/field_filter_strategy.js +2 -0
  16. package/dist/components/table_filter_panel/field_filters/field_filter_strategy.js.map +1 -0
  17. package/dist/components/table_filter_panel/field_filters/mulit_select_field_filter.d.ts.map +1 -1
  18. package/dist/components/table_filter_panel/field_filters/mulit_select_field_filter.js +28 -40
  19. package/dist/components/table_filter_panel/field_filters/mulit_select_field_filter.js.map +1 -1
  20. package/dist/components/table_filter_panel/field_filters/select_field_filter.d.ts.map +1 -1
  21. package/dist/components/table_filter_panel/field_filters/select_field_filter.js +22 -36
  22. package/dist/components/table_filter_panel/field_filters/select_field_filter.js.map +1 -1
  23. package/dist/components/table_filter_panel/table_filter_panel.d.ts.map +1 -1
  24. package/dist/components/table_filter_panel/table_filter_panel.js +18 -18
  25. package/dist/components/table_filter_panel/table_filter_panel.js.map +1 -1
  26. package/dist/mulit_select_field_filter.css +1 -0
  27. package/dist/table.css +1 -1
  28. package/package.json +17 -17
  29. package/src/__stories__/sample_data.ts +25 -3
  30. package/src/__stories__/table.stories.tsx +195 -38
  31. package/src/components/cells/header_cell.tsx +4 -3
  32. package/src/components/table/table.module.css +20 -10
  33. package/src/components/table/table.tsx +6 -1
  34. package/src/components/table/table_column.tsx +1 -0
  35. package/src/components/table/table_presenter.ts +1 -0
  36. package/src/components/table_filter_panel/field_filters/mulit_select_field_filter.module.css +8 -0
  37. package/src/components/table_filter_panel/field_filters/mulit_select_field_filter.tsx +24 -35
  38. package/src/components/table_filter_panel/field_filters/select_field_filter.tsx +21 -32
  39. package/src/components/table_filter_panel/table_filter_panel.tsx +8 -10
  40. 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 { ClearFilterButton } from './clear_button.js';
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
- <VStack gap="4px">
29
- <Box width="flex">
30
- <Title size="md">{label}</Title>
31
- </Box>
32
- <HStack>
33
- <Box width="flex">
34
- <Multiselect
35
- value={selectedLabels}
36
- onChange={selectedLabels => {
37
- const realValues = selectedLabels
38
- .map(label => options.find(option => option.label === label)?.value)
39
- .filter(value => value !== undefined) as (string | boolean | number)[];
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
- presenter.setValue(realValues.length > 0 ? realValues : null);
42
- }}
43
- >
44
- {options.map(option => (
45
- <Option
46
- key={option.value.toString()}
47
- value={option.label}
48
- label={option.label}
49
- >
50
- {option.label}
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 { ClearFilterButton } from './clear_button.js';
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
- <VStack gap="4px">
22
- <Box width="flex">
23
- <Title size="md">{label}</Title>
24
- </Box>
25
- <HStack>
26
- <Select
27
- value={valueLabel}
28
- onChange={value => {
29
- const realValue = options.find(option => option.label === value)?.value;
30
- presenter.setValue(realValue ?? null);
31
- }}
32
- width="flex"
33
- >
34
- {options.map(option => (
35
- <Option
36
- key={option.value.toString()}
37
- value={option.label}
38
- label={option.label}
39
- >
40
- {option.label}
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 { Body, Header, Scaffold, Section } from '@tcn/ui/layouts';
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
- <Body
44
+ <Scaffold
45
45
  className={`${styles['table-filter-panel-body']} tcn-table-filter-panel-body`}
46
46
  >
47
- <Scaffold>
48
- <Section
49
- className={`${styles['table-filter-panel-section']} tcn-table-filter-panel-section`}
50
- >
51
- {children}
52
- </Section>
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
- "esModuleInterop": true,
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
- "src/**/*",
34
- "types/**/*"
35
- ]
36
- }
6
+ "include": ["src/**/*", ".storybook/**/*", "types/**/*", "package.json"]
7
+ }