@tcn/ui-table 2.4.1 → 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 +17 -16
- 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 +59 -39
- package/src/components/cells/header_cell.tsx +2 -1
- package/src/components/table/table.module.css +20 -0
- 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header_cell.d.ts","sourceRoot":"","sources":["../../../src/components/cells/header_cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAM3C,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,MAAM,EACN,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,gBAAgB,EAChB,OAAO,GACR,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"header_cell.d.ts","sourceRoot":"","sources":["../../../src/components/cells/header_cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAM3C,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,MAAM,EACN,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,gBAAgB,EAChB,OAAO,GACR,EAAE,eAAe,2CA6CjB"}
|
|
@@ -1,44 +1,45 @@
|
|
|
1
|
-
import { jsx as e, jsxs as
|
|
2
|
-
import { useCallback as
|
|
3
|
-
import { Box as
|
|
1
|
+
import { jsx as e, jsxs as h } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback as p } from "react";
|
|
3
|
+
import { Box as o, HStack as x } from "@tcn/ui/stacks";
|
|
4
4
|
import { TH as f } from "@tcn/ui/layouts";
|
|
5
5
|
import { c as u } from "../../cell.module-WpHnQBVu.js";
|
|
6
6
|
import { SortControl as b } from "./sort_control.js";
|
|
7
7
|
function N({
|
|
8
8
|
heading: r,
|
|
9
|
-
sticky:
|
|
10
|
-
onResize:
|
|
11
|
-
width:
|
|
9
|
+
sticky: n,
|
|
10
|
+
onResize: l,
|
|
11
|
+
width: i,
|
|
12
12
|
sortMode: a,
|
|
13
13
|
onSortModeChange: s,
|
|
14
14
|
canSort: c
|
|
15
15
|
}) {
|
|
16
|
-
const m =
|
|
16
|
+
const m = n != null ? 2 : 1, d = p(
|
|
17
17
|
({ width: t }) => {
|
|
18
|
-
|
|
18
|
+
l?.(Math.max(t, 20));
|
|
19
19
|
},
|
|
20
|
-
[
|
|
20
|
+
[l]
|
|
21
21
|
);
|
|
22
22
|
return /* @__PURE__ */ e(
|
|
23
23
|
f,
|
|
24
24
|
{
|
|
25
25
|
className: `tcn-header-cell ${u["table-cell"]}`,
|
|
26
|
-
"data-stick-to":
|
|
27
|
-
style: { width: `${
|
|
26
|
+
"data-stick-to": n,
|
|
27
|
+
style: { width: `${i}px`, zIndex: m },
|
|
28
28
|
children: /* @__PURE__ */ e(
|
|
29
|
-
|
|
29
|
+
o,
|
|
30
30
|
{
|
|
31
31
|
className: "tcn-table-cell-content",
|
|
32
32
|
overflow: "hidden",
|
|
33
33
|
minWidth: "24px",
|
|
34
34
|
maxWidth: "unset",
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
height: "100%",
|
|
36
|
+
width: i,
|
|
37
|
+
enableResizeOnEnd: l != null,
|
|
37
38
|
onWidthResize: d,
|
|
38
39
|
onClick: (t) => t.stopPropagation(),
|
|
39
|
-
children: /* @__PURE__ */
|
|
40
|
+
children: /* @__PURE__ */ h(x, { children: [
|
|
40
41
|
/* @__PURE__ */ e(
|
|
41
|
-
|
|
42
|
+
o,
|
|
42
43
|
{
|
|
43
44
|
minWidth: "24px",
|
|
44
45
|
className: "ellipsis",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header_cell.js","sources":["../../../src/components/cells/header_cell.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\n\nimport { Box, HStack, type OnWidthResizePayload } from '@tcn/ui/stacks';\n\nimport { TH } from '@tcn/ui/layouts';\nimport cellStyles from './cell.module.css';\nimport { SortControl, type SortControlProps } from './sort_control.js';\n\nexport interface HeaderCellProps extends SortControlProps {\n heading: React.ReactNode;\n index: number;\n sticky?: 'start' | 'end';\n onResize?: (width: number) => void;\n width?: number;\n}\n\nexport function HeaderCell({\n heading,\n sticky,\n onResize,\n width,\n sortMode,\n onSortModeChange,\n canSort,\n}: HeaderCellProps) {\n const zIndex = sticky != null ? 2 : 1;\n\n const handleResize = useCallback(\n ({ width }: OnWidthResizePayload) => {\n onResize?.(Math.max(width, 20));\n },\n [onResize]\n );\n\n return (\n <TH\n className={`tcn-header-cell ${cellStyles['table-cell']}`}\n data-stick-to={sticky}\n style={{ width: `${width}px`, zIndex }}\n >\n <Box\n className=\"tcn-table-cell-content\"\n overflow=\"hidden\"\n minWidth=\"24px\"\n maxWidth=\"unset\"\n width={width}\n enableResizeOnEnd\n onWidthResize={handleResize}\n onClick={e => e.stopPropagation()}\n >\n <HStack>\n <Box\n minWidth=\"24px\"\n className=\"ellipsis\"\n style={{ alignItems: 'center', display: 'flex' }}\n >\n {heading}\n </Box>\n\n <SortControl\n canSort={canSort}\n onSortModeChange={onSortModeChange}\n sortMode={sortMode}\n />\n </HStack>\n </Box>\n </TH>\n );\n}\n"],"names":["HeaderCell","heading","sticky","onResize","width","sortMode","onSortModeChange","canSort","zIndex","handleResize","useCallback","jsx","TH","cellStyles","Box","e","HStack","SortControl"],"mappings":";;;;;;AAgBO,SAASA,EAAW;AAAA,EACzB,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,SAAAC;AACF,GAAoB;AAClB,QAAMC,IAASN,KAAU,OAAO,IAAI,GAE9BO,IAAeC;AAAA,IACnB,CAAC,EAAE,OAAAN,QAAkC;AACnC,MAAAD,IAAW,KAAK,IAAIC,GAAO,EAAE,CAAC;AAAA,IAChC;AAAA,IACA,CAACD,CAAQ;AAAA,EAAA;AAGX,SACE,gBAAAQ;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAW,mBAAmBC,EAAW,YAAY,CAAC;AAAA,MACtD,iBAAeX;AAAA,MACf,OAAO,EAAE,OAAO,GAAGE,CAAK,MAAM,QAAAI,EAAA;AAAA,MAE9B,UAAA,gBAAAG;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,UAAS;AAAA,UACT,UAAS;AAAA,UACT,UAAS;AAAA,UACT,OAAAV;AAAA,UACA,
|
|
1
|
+
{"version":3,"file":"header_cell.js","sources":["../../../src/components/cells/header_cell.tsx"],"sourcesContent":["import React, { useCallback } from 'react';\n\nimport { Box, HStack, type OnWidthResizePayload } from '@tcn/ui/stacks';\n\nimport { TH } from '@tcn/ui/layouts';\nimport cellStyles from './cell.module.css';\nimport { SortControl, type SortControlProps } from './sort_control.js';\n\nexport interface HeaderCellProps extends SortControlProps {\n heading: React.ReactNode;\n index: number;\n sticky?: 'start' | 'end';\n onResize?: (width: number) => void;\n width?: number;\n}\n\nexport function HeaderCell({\n heading,\n sticky,\n onResize,\n width,\n sortMode,\n onSortModeChange,\n canSort,\n}: HeaderCellProps) {\n const zIndex = sticky != null ? 2 : 1;\n\n const handleResize = useCallback(\n ({ width }: OnWidthResizePayload) => {\n onResize?.(Math.max(width, 20));\n },\n [onResize]\n );\n\n return (\n <TH\n className={`tcn-header-cell ${cellStyles['table-cell']}`}\n data-stick-to={sticky}\n style={{ width: `${width}px`, zIndex }}\n >\n <Box\n className=\"tcn-table-cell-content\"\n overflow=\"hidden\"\n minWidth=\"24px\"\n maxWidth=\"unset\"\n height=\"100%\"\n width={width}\n enableResizeOnEnd={onResize != null}\n onWidthResize={handleResize}\n onClick={e => e.stopPropagation()}\n >\n <HStack>\n <Box\n minWidth=\"24px\"\n className=\"ellipsis\"\n style={{ alignItems: 'center', display: 'flex' }}\n >\n {heading}\n </Box>\n\n <SortControl\n canSort={canSort}\n onSortModeChange={onSortModeChange}\n sortMode={sortMode}\n />\n </HStack>\n </Box>\n </TH>\n );\n}\n"],"names":["HeaderCell","heading","sticky","onResize","width","sortMode","onSortModeChange","canSort","zIndex","handleResize","useCallback","jsx","TH","cellStyles","Box","e","HStack","SortControl"],"mappings":";;;;;;AAgBO,SAASA,EAAW;AAAA,EACzB,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,SAAAC;AACF,GAAoB;AAClB,QAAMC,IAASN,KAAU,OAAO,IAAI,GAE9BO,IAAeC;AAAA,IACnB,CAAC,EAAE,OAAAN,QAAkC;AACnC,MAAAD,IAAW,KAAK,IAAIC,GAAO,EAAE,CAAC;AAAA,IAChC;AAAA,IACA,CAACD,CAAQ;AAAA,EAAA;AAGX,SACE,gBAAAQ;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAW,mBAAmBC,EAAW,YAAY,CAAC;AAAA,MACtD,iBAAeX;AAAA,MACf,OAAO,EAAE,OAAO,GAAGE,CAAK,MAAM,QAAAI,EAAA;AAAA,MAE9B,UAAA,gBAAAG;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,UAAS;AAAA,UACT,UAAS;AAAA,UACT,UAAS;AAAA,UACT,QAAO;AAAA,UACP,OAAAV;AAAA,UACA,mBAAmBD,KAAY;AAAA,UAC/B,eAAeM;AAAA,UACf,SAAS,CAAAM,MAAKA,EAAE,gBAAA;AAAA,UAEhB,4BAACC,GAAA,EACC,UAAA;AAAA,YAAA,gBAAAL;AAAA,cAACG;AAAA,cAAA;AAAA,gBACC,UAAS;AAAA,gBACT,WAAU;AAAA,gBACV,OAAO,EAAE,YAAY,UAAU,SAAS,OAAA;AAAA,gBAEvC,UAAAb;AAAA,cAAA;AAAA,YAAA;AAAA,YAGH,gBAAAU;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,SAAAV;AAAA,gBACA,kBAAAD;AAAA,gBACA,UAAAD;AAAA,cAAA;AAAA,YAAA;AAAA,UACF,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/components/table/table.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAkB,YAAY,EAAoB,MAAM,OAAO,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAO,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQ/C,OAAO,EAAe,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAWlE,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,QAAQ,GAAG;IACrC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1B,QAAQ,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACzD,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;CACnB,CAAC;AAeF,wBAAgB,KAAK,CAAC,CAAC,EAAE,EACvB,UAAU,EACV,WAAW,EACX,QAAQ,EACR,KAAc,EACd,MAAe,EACf,MAAM,EACN,gBAAgB,EAChB,UAAU,EACV,GAAG,KAAK,EACT,EAAE,UAAU,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/components/table/table.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAkB,YAAY,EAAoB,MAAM,OAAO,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAO,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQ/C,OAAO,EAAe,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAWlE,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,QAAQ,GAAG;IACrC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1B,QAAQ,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACzD,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;CACnB,CAAC;AAeF,wBAAgB,KAAK,CAAC,CAAC,EAAE,EACvB,UAAU,EACV,WAAW,EACX,QAAQ,EACR,KAAc,EACd,MAAe,EACf,MAAM,EACN,gBAAgB,EAChB,UAAU,EACV,GAAG,KAAK,EACT,EAAE,UAAU,CAAC,CAAC,CAAC,2CAgJf"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { jsx as r, jsxs as a } from "react/jsx-runtime";
|
|
2
|
-
import
|
|
3
|
-
import { useSignalValue as f, useRunnerStatus as
|
|
4
|
-
import { Box as
|
|
5
|
-
import { BodyText as
|
|
6
|
-
import { DataCell as
|
|
7
|
-
import { FooterCell as
|
|
2
|
+
import O, { useRef as G, isValidElement as P, useState as W } from "react";
|
|
3
|
+
import { useSignalValue as f, useRunnerStatus as j, Status as b } from "@tcn/state";
|
|
4
|
+
import { Box as v } from "@tcn/ui/stacks";
|
|
5
|
+
import { BodyText as A } from "@tcn/ui/typography";
|
|
6
|
+
import { DataCell as I } from "../cells/data_cell.js";
|
|
7
|
+
import { FooterCell as V } from "../cells/footer_cell.js";
|
|
8
8
|
import { HeaderCell as L } from "../cells/header_cell.js";
|
|
9
9
|
import { StickyRowDataCell as U } from "../cells/sticky_row_data_cell.js";
|
|
10
10
|
import { StickyRowFillCell as Y } from "../cells/sticky_row_fill_cell.js";
|
|
11
11
|
import { TableColumn as q } from "./table_column.js";
|
|
12
12
|
import { TablePresenter as J } from "./table_presenter.js";
|
|
13
|
-
import { TTable as K, THead as Q, TR as n, TH as X, TBody as Z, TD as
|
|
14
|
-
import '../../table.css';const tt = "_table-body_b8c928c",
|
|
13
|
+
import { TTable as K, THead as Q, TR as n, TH as X, TBody as Z, TD as S, TFoot as x } from "@tcn/ui/layouts";
|
|
14
|
+
import '../../table.css';const tt = "_table-body_b8c928c", N = { "table-body": tt }, w = 32, C = 24;
|
|
15
15
|
function T(s) {
|
|
16
|
-
return typeof s == "string" ? /* @__PURE__ */ r(
|
|
16
|
+
return typeof s == "string" ? /* @__PURE__ */ r(A, { children: s }) : s;
|
|
17
17
|
}
|
|
18
18
|
function yt({
|
|
19
19
|
dataSource: s,
|
|
@@ -22,13 +22,13 @@ function yt({
|
|
|
22
22
|
width: E = "100%",
|
|
23
23
|
height: H = "100%",
|
|
24
24
|
zIndex: D,
|
|
25
|
-
isRowHighlighted:
|
|
26
|
-
onRowClick:
|
|
25
|
+
isRowHighlighted: u,
|
|
26
|
+
onRowClick: R,
|
|
27
27
|
..._
|
|
28
28
|
}) {
|
|
29
|
-
const B = f(s.broadcasts.currentResults), p = f(s.broadcasts.currentPageIndex),
|
|
30
|
-
(t) =>
|
|
31
|
-
), [c] =
|
|
29
|
+
const B = f(s.broadcasts.currentResults), p = f(s.broadcasts.currentPageIndex), k = G(null), F = O.Children.toArray($).filter(
|
|
30
|
+
(t) => P(t) && t.type === q
|
|
31
|
+
), [c] = W(
|
|
32
32
|
() => new J({
|
|
33
33
|
dataSource: s,
|
|
34
34
|
columns: F.map((t) => ({
|
|
@@ -36,27 +36,28 @@ function yt({
|
|
|
36
36
|
width: t.props.width ?? 100,
|
|
37
37
|
sortMode: "none",
|
|
38
38
|
canSort: t.props.canSort ?? !1,
|
|
39
|
+
canResize: t.props.canResize ?? !0,
|
|
39
40
|
heading: t.props.heading,
|
|
40
41
|
footer: t.props.footer,
|
|
41
42
|
sticky: t.props.sticky,
|
|
42
43
|
render: t.props.render
|
|
43
44
|
})),
|
|
44
|
-
scrollerRef:
|
|
45
|
+
scrollerRef: k
|
|
45
46
|
})
|
|
46
|
-
), d = f(c.broadcasts.columnInfo), m =
|
|
47
|
+
), d = f(c.broadcasts.columnInfo), m = j(s.broadcasts.currentResults), M = f(c.broadcasts.showFooter), z = typeof R == "function";
|
|
47
48
|
return /* @__PURE__ */ r(
|
|
48
|
-
|
|
49
|
+
v,
|
|
49
50
|
{
|
|
50
|
-
ref:
|
|
51
|
+
ref: k,
|
|
51
52
|
zIndex: D,
|
|
52
|
-
className:
|
|
53
|
+
className: N["table-body-wrapper"],
|
|
53
54
|
style: { overflow: "auto" },
|
|
54
55
|
..._,
|
|
55
56
|
children: /* @__PURE__ */ a(
|
|
56
57
|
K,
|
|
57
58
|
{
|
|
58
|
-
className:
|
|
59
|
-
"data-is-clickable":
|
|
59
|
+
className: N["table-body"],
|
|
60
|
+
"data-is-clickable": z,
|
|
60
61
|
style: { width: E, height: H },
|
|
61
62
|
children: [
|
|
62
63
|
/* @__PURE__ */ r(Q, { children: /* @__PURE__ */ a(n, { children: [
|
|
@@ -66,7 +67,7 @@ function yt({
|
|
|
66
67
|
index: e,
|
|
67
68
|
heading: T(t.heading),
|
|
68
69
|
sticky: t.sticky,
|
|
69
|
-
onResize: (o) => c.setColumnWidth(e, o),
|
|
70
|
+
onResize: t.canResize !== !1 ? (o) => c.setColumnWidth(e, o) : void 0,
|
|
70
71
|
width: t.width,
|
|
71
72
|
sortMode: t.sortMode,
|
|
72
73
|
onSortModeChange: () => c.setNextColumnSortMode(e),
|
|
@@ -86,24 +87,24 @@ function yt({
|
|
|
86
87
|
content: h,
|
|
87
88
|
sticky: o.sticky,
|
|
88
89
|
width: o.width,
|
|
89
|
-
top:
|
|
90
|
+
top: w + C * e
|
|
90
91
|
},
|
|
91
92
|
`${p}-${e}-${y}`
|
|
92
93
|
);
|
|
93
94
|
}),
|
|
94
|
-
/* @__PURE__ */ r(Y, { top:
|
|
95
|
+
/* @__PURE__ */ r(Y, { top: w + C * e })
|
|
95
96
|
] }, `sticky-${e}`)),
|
|
96
|
-
m ===
|
|
97
|
+
m === b.SUCCESS && B.map((t, e) => /* @__PURE__ */ a(
|
|
97
98
|
n,
|
|
98
99
|
{
|
|
99
|
-
"data-selected":
|
|
100
|
-
isSelected:
|
|
101
|
-
onClick: () =>
|
|
100
|
+
"data-selected": u?.(t, e),
|
|
101
|
+
isSelected: u?.(t, e),
|
|
102
|
+
onClick: () => R?.(t, e),
|
|
102
103
|
children: [
|
|
103
104
|
d.map((o, y) => {
|
|
104
105
|
const i = o.fieldName, l = o.render, h = l ? l(t) : i ? String(t[i] ?? "") : "";
|
|
105
106
|
return /* @__PURE__ */ r(
|
|
106
|
-
|
|
107
|
+
I,
|
|
107
108
|
{
|
|
108
109
|
content: h,
|
|
109
110
|
sticky: o.sticky,
|
|
@@ -112,18 +113,18 @@ function yt({
|
|
|
112
113
|
`${p}-${e}-${y}`
|
|
113
114
|
);
|
|
114
115
|
}),
|
|
115
|
-
/* @__PURE__ */ r(
|
|
116
|
+
/* @__PURE__ */ r(S, { fill: !0, className: "fill" }, "fill")
|
|
116
117
|
]
|
|
117
118
|
},
|
|
118
119
|
`${p}-${e}`
|
|
119
120
|
)),
|
|
120
|
-
m ===
|
|
121
|
-
m ===
|
|
121
|
+
m === b.PENDING && "Loading...",
|
|
122
|
+
m === b.ERROR && "Error loading data",
|
|
122
123
|
/* @__PURE__ */ r(n, { className: "fill" }, "fill")
|
|
123
124
|
] }),
|
|
124
125
|
M && /* @__PURE__ */ r(x, { children: /* @__PURE__ */ a(n, { children: [
|
|
125
126
|
d.map((t, e) => /* @__PURE__ */ r(
|
|
126
|
-
|
|
127
|
+
V,
|
|
127
128
|
{
|
|
128
129
|
content: T(t.footer),
|
|
129
130
|
sticky: t.sticky,
|
|
@@ -131,7 +132,7 @@ function yt({
|
|
|
131
132
|
},
|
|
132
133
|
`footer-${e}`
|
|
133
134
|
)),
|
|
134
|
-
/* @__PURE__ */ r(
|
|
135
|
+
/* @__PURE__ */ r(S, { fill: !0, className: "fill" }, "footer-fill")
|
|
135
136
|
] }) })
|
|
136
137
|
]
|
|
137
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","sources":["../../../src/components/table/table.tsx"],"sourcesContent":["import React, { isValidElement, ReactElement, useState, useRef } from 'react';\n\nimport { DataSource } from '@tcn/resource-store';\nimport { Status, useRunnerStatus, useSignalValue } from '@tcn/state';\nimport { Box, BoxProps } from '@tcn/ui/stacks';\nimport { BodyText } from '@tcn/ui/typography';\nimport { DataCell } from '../cells/data_cell.js';\nimport { FooterCell } from '../cells/footer_cell.js';\nimport { HeaderCell } from '../cells/header_cell.js';\nimport { StickyRowDataCell } from '../cells/sticky_row_data_cell.js';\nimport { StickyRowFillCell } from '../cells/sticky_row_fill_cell.js';\nimport styles from './table.module.css';\nimport { TableColumn, TableColumnProps } from './table_column.js';\nimport { TablePresenter } from './table_presenter.js';\nimport {\n TTable as PrimitiveTable,\n TBody,\n TD,\n TFoot,\n TH,\n THead,\n TR,\n} from '@tcn/ui/layouts';\nexport type TableProps<T> = BoxProps & {\n dataSource: DataSource<T>;\n children: ReactElement<TableColumnProps<T>>[];\n onRowClick?: (row: T, rowIndex: number) => void;\n isRowHighlighted?: (row: T, rowIndex: number) => boolean;\n stickyItems?: T[];\n};\n\n// FIXME: Ideally should be on theme - even if its a required theme variable.\nconst HEADER_ROW_HEIGHT = 32;\nconst BODY_ROW_HEIGHT = 24;\n\n// @TODO: Props for loading and error states\n\nfunction wrapContent(content: React.ReactNode): React.ReactNode {\n if (typeof content === 'string') {\n return <BodyText>{content}</BodyText>;\n }\n return content;\n}\n\nexport function Table<T>({\n dataSource,\n stickyItems,\n children,\n width = '100%',\n height = '100%',\n zIndex,\n isRowHighlighted,\n onRowClick,\n ...props\n}: TableProps<T>) {\n const rows = useSignalValue(dataSource.broadcasts.currentResults);\n const page = useSignalValue(dataSource.broadcasts.currentPageIndex);\n\n const scrollerRef = useRef<HTMLDivElement>(null);\n\n const columns = React.Children.toArray(children).filter(\n (child): child is ReactElement<TableColumnProps<T>> =>\n isValidElement(child) && child.type === TableColumn\n );\n\n const [presenter] = useState(\n () =>\n new TablePresenter({\n dataSource,\n columns: columns.map(column => ({\n fieldName: column.props.fieldName,\n width: column.props.width ?? 100,\n sortMode: 'none',\n canSort: column.props.canSort ?? false,\n heading: column.props.heading,\n footer: column.props.footer,\n sticky: column.props.sticky,\n render: column.props.render,\n })),\n scrollerRef,\n })\n );\n\n const columnInfo = useSignalValue(presenter.broadcasts.columnInfo);\n const itemsStatus = useRunnerStatus(dataSource.broadcasts.currentResults);\n const showFooter = useSignalValue(presenter.broadcasts.showFooter);\n\n const isClickable = typeof onRowClick === 'function';\n return (\n <Box\n ref={scrollerRef}\n zIndex={zIndex}\n className={styles['table-body-wrapper']}\n style={{ overflow: 'auto' }}\n {...props}\n >\n <PrimitiveTable\n className={styles['table-body']}\n data-is-clickable={isClickable}\n style={{ width, height }}\n >\n <THead>\n <TR>\n {columnInfo.map((column, index) => (\n <HeaderCell\n key={`h-${index}`}\n index={index}\n heading={wrapContent(column.heading)}\n sticky={column.sticky}\n onResize={newSize => presenter.setColumnWidth(index, newSize)}\n width={column.width}\n sortMode={column.sortMode}\n onSortModeChange={() => presenter.setNextColumnSortMode(index)}\n canSort={column.canSort}\n />\n ))}\n <TH key=\"fill\" fill className=\"fill\"></TH>\n </TR>\n </THead>\n <TBody>\n {stickyItems?.map((item, index) => (\n <TR key={`sticky-${index}`} data-sticky-row>\n {columnInfo.map((col, colIndex) => {\n const fieldName = col.fieldName;\n const render = col.render;\n const content = render\n ? render(item)\n : fieldName\n ? String((item as Record<string, unknown>)[fieldName] ?? '')\n : '';\n return (\n <StickyRowDataCell\n key={`${page}-${index}-${colIndex}`}\n content={content}\n sticky={col.sticky}\n width={col.width}\n top={HEADER_ROW_HEIGHT + BODY_ROW_HEIGHT * index}\n />\n );\n })}\n <StickyRowFillCell top={HEADER_ROW_HEIGHT + BODY_ROW_HEIGHT * index} />\n </TR>\n ))}\n {itemsStatus === Status.SUCCESS &&\n rows.map((item, rowIndex) => (\n <TR\n key={`${page}-${rowIndex}`}\n data-selected={isRowHighlighted?.(item, rowIndex)}\n isSelected={isRowHighlighted?.(item, rowIndex)}\n onClick={() => onRowClick?.(item, rowIndex)}\n >\n {columnInfo.map((col, colIndex) => {\n const fieldName = col.fieldName;\n const render = col.render;\n const content = render\n ? render(item)\n : fieldName\n ? String((item as Record<string, unknown>)[fieldName] ?? '')\n : '';\n return (\n <DataCell\n key={`${page}-${rowIndex}-${colIndex}`}\n content={content}\n sticky={col.sticky}\n width={col.width}\n />\n );\n })}\n <TD key=\"fill\" fill className=\"fill\"></TD>\n </TR>\n ))}\n {itemsStatus === Status.PENDING && 'Loading...'}\n {itemsStatus === Status.ERROR && 'Error loading data'}\n <TR key=\"fill\" className=\"fill\"></TR>\n </TBody>\n {showFooter && (\n <TFoot>\n <TR>\n {columnInfo.map((col, colIndex) => (\n <FooterCell\n key={`footer-${colIndex}`}\n content={wrapContent(col.footer)}\n sticky={col.sticky}\n width={col.width}\n />\n ))}\n <TD key=\"footer-fill\" fill className=\"fill\"></TD>\n </TR>\n </TFoot>\n )}\n </PrimitiveTable>\n </Box>\n );\n}\n"],"names":["HEADER_ROW_HEIGHT","BODY_ROW_HEIGHT","wrapContent","content","jsx","BodyText","Table","dataSource","stickyItems","children","width","height","zIndex","isRowHighlighted","onRowClick","props","rows","useSignalValue","page","scrollerRef","useRef","columns","React","child","isValidElement","TableColumn","presenter","useState","TablePresenter","column","columnInfo","itemsStatus","useRunnerStatus","showFooter","isClickable","Box","styles","jsxs","PrimitiveTable","THead","TR","index","HeaderCell","newSize","TH","TBody","item","col","colIndex","fieldName","render","StickyRowDataCell","StickyRowFillCell","Status","rowIndex","DataCell","TD","TFoot","FooterCell"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table.js","sources":["../../../src/components/table/table.tsx"],"sourcesContent":["import React, { isValidElement, ReactElement, useState, useRef } from 'react';\n\nimport { DataSource } from '@tcn/resource-store';\nimport { Status, useRunnerStatus, useSignalValue } from '@tcn/state';\nimport { Box, BoxProps } from '@tcn/ui/stacks';\nimport { BodyText } from '@tcn/ui/typography';\nimport { DataCell } from '../cells/data_cell.js';\nimport { FooterCell } from '../cells/footer_cell.js';\nimport { HeaderCell } from '../cells/header_cell.js';\nimport { StickyRowDataCell } from '../cells/sticky_row_data_cell.js';\nimport { StickyRowFillCell } from '../cells/sticky_row_fill_cell.js';\nimport styles from './table.module.css';\nimport { TableColumn, TableColumnProps } from './table_column.js';\nimport { TablePresenter } from './table_presenter.js';\nimport {\n TTable as PrimitiveTable,\n TBody,\n TD,\n TFoot,\n TH,\n THead,\n TR,\n} from '@tcn/ui/layouts';\nexport type TableProps<T> = BoxProps & {\n dataSource: DataSource<T>;\n children: ReactElement<TableColumnProps<T>>[];\n onRowClick?: (row: T, rowIndex: number) => void;\n isRowHighlighted?: (row: T, rowIndex: number) => boolean;\n stickyItems?: T[];\n};\n\n// FIXME: Ideally should be on theme - even if its a required theme variable.\nconst HEADER_ROW_HEIGHT = 32;\nconst BODY_ROW_HEIGHT = 24;\n\n// @TODO: Props for loading and error states\n\nfunction wrapContent(content: React.ReactNode): React.ReactNode {\n if (typeof content === 'string') {\n return <BodyText>{content}</BodyText>;\n }\n return content;\n}\n\nexport function Table<T>({\n dataSource,\n stickyItems,\n children,\n width = '100%',\n height = '100%',\n zIndex,\n isRowHighlighted,\n onRowClick,\n ...props\n}: TableProps<T>) {\n const rows = useSignalValue(dataSource.broadcasts.currentResults);\n const page = useSignalValue(dataSource.broadcasts.currentPageIndex);\n\n const scrollerRef = useRef<HTMLDivElement>(null);\n\n const columns = React.Children.toArray(children).filter(\n (child): child is ReactElement<TableColumnProps<T>> =>\n isValidElement(child) && child.type === TableColumn\n );\n\n const [presenter] = useState(\n () =>\n new TablePresenter({\n dataSource,\n columns: columns.map(column => ({\n fieldName: column.props.fieldName,\n width: column.props.width ?? 100,\n sortMode: 'none',\n canSort: column.props.canSort ?? false,\n canResize: column.props.canResize ?? true,\n heading: column.props.heading,\n footer: column.props.footer,\n sticky: column.props.sticky,\n render: column.props.render,\n })),\n scrollerRef,\n })\n );\n\n const columnInfo = useSignalValue(presenter.broadcasts.columnInfo);\n const itemsStatus = useRunnerStatus(dataSource.broadcasts.currentResults);\n const showFooter = useSignalValue(presenter.broadcasts.showFooter);\n\n const isClickable = typeof onRowClick === 'function';\n return (\n <Box\n ref={scrollerRef}\n zIndex={zIndex}\n className={styles['table-body-wrapper']}\n style={{ overflow: 'auto' }}\n {...props}\n >\n <PrimitiveTable\n className={styles['table-body']}\n data-is-clickable={isClickable}\n style={{ width, height }}\n >\n <THead>\n <TR>\n {columnInfo.map((column, index) => (\n <HeaderCell\n key={`h-${index}`}\n index={index}\n heading={wrapContent(column.heading)}\n sticky={column.sticky}\n onResize={\n column.canResize !== false\n ? newSize => presenter.setColumnWidth(index, newSize)\n : undefined\n }\n width={column.width}\n sortMode={column.sortMode}\n onSortModeChange={() => presenter.setNextColumnSortMode(index)}\n canSort={column.canSort}\n />\n ))}\n <TH key=\"fill\" fill className=\"fill\"></TH>\n </TR>\n </THead>\n <TBody>\n {stickyItems?.map((item, index) => (\n <TR key={`sticky-${index}`} data-sticky-row>\n {columnInfo.map((col, colIndex) => {\n const fieldName = col.fieldName;\n const render = col.render;\n const content = render\n ? render(item)\n : fieldName\n ? String((item as Record<string, unknown>)[fieldName] ?? '')\n : '';\n return (\n <StickyRowDataCell\n key={`${page}-${index}-${colIndex}`}\n content={content}\n sticky={col.sticky}\n width={col.width}\n top={HEADER_ROW_HEIGHT + BODY_ROW_HEIGHT * index}\n />\n );\n })}\n <StickyRowFillCell top={HEADER_ROW_HEIGHT + BODY_ROW_HEIGHT * index} />\n </TR>\n ))}\n {itemsStatus === Status.SUCCESS &&\n rows.map((item, rowIndex) => (\n <TR\n key={`${page}-${rowIndex}`}\n data-selected={isRowHighlighted?.(item, rowIndex)}\n isSelected={isRowHighlighted?.(item, rowIndex)}\n onClick={() => onRowClick?.(item, rowIndex)}\n >\n {columnInfo.map((col, colIndex) => {\n const fieldName = col.fieldName;\n const render = col.render;\n const content = render\n ? render(item)\n : fieldName\n ? String((item as Record<string, unknown>)[fieldName] ?? '')\n : '';\n return (\n <DataCell\n key={`${page}-${rowIndex}-${colIndex}`}\n content={content}\n sticky={col.sticky}\n width={col.width}\n />\n );\n })}\n <TD key=\"fill\" fill className=\"fill\"></TD>\n </TR>\n ))}\n {itemsStatus === Status.PENDING && 'Loading...'}\n {itemsStatus === Status.ERROR && 'Error loading data'}\n <TR key=\"fill\" className=\"fill\"></TR>\n </TBody>\n {showFooter && (\n <TFoot>\n <TR>\n {columnInfo.map((col, colIndex) => (\n <FooterCell\n key={`footer-${colIndex}`}\n content={wrapContent(col.footer)}\n sticky={col.sticky}\n width={col.width}\n />\n ))}\n <TD key=\"footer-fill\" fill className=\"fill\"></TD>\n </TR>\n </TFoot>\n )}\n </PrimitiveTable>\n </Box>\n );\n}\n"],"names":["HEADER_ROW_HEIGHT","BODY_ROW_HEIGHT","wrapContent","content","jsx","BodyText","Table","dataSource","stickyItems","children","width","height","zIndex","isRowHighlighted","onRowClick","props","rows","useSignalValue","page","scrollerRef","useRef","columns","React","child","isValidElement","TableColumn","presenter","useState","TablePresenter","column","columnInfo","itemsStatus","useRunnerStatus","showFooter","isClickable","Box","styles","jsxs","PrimitiveTable","THead","TR","index","HeaderCell","newSize","TH","TBody","item","col","colIndex","fieldName","render","StickyRowDataCell","StickyRowFillCell","Status","rowIndex","DataCell","TD","TFoot","FooterCell"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table_column.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_column.tsx"],"names":[],"mappings":"AAAA,KAAK,oBAAoB,CAAC,CAAC,IAAI;IAC7B,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IACtC,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"table_column.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_column.tsx"],"names":[],"mappings":"AAAA,KAAK,oBAAoB,CAAC,CAAC,IAAI;IAC7B,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IACtC,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,KAAK,wBAAwB,CAAC,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAAG;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,IAAI,CAAC;CACf,CAAC;AAEF,KAAK,2BAA2B,CAAC,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAAG;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAC1B,wBAAwB,CAAC,CAAC,CAAC,GAC3B,2BAA2B,CAAC,CAAC,CAAC,CAAC;AAInC,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAEzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table_column.js","sources":["../../../src/components/table/table_column.tsx"],"sourcesContent":["type BaseTableColumnProps<T> = {\n heading: React.ReactNode;\n footer?: React.ReactNode;\n render?: (item: T) => React.ReactNode;\n sticky?: 'start' | 'end';\n width?: number;\n};\n\ntype SortableTableColumnProps<T> = BaseTableColumnProps<T> & {\n fieldName: string;\n canSort: true;\n};\n\ntype NonSortableTableColumnProps<T> = BaseTableColumnProps<T> & {\n fieldName?: string;\n canSort?: false;\n};\n\nexport type TableColumnProps<T> =\n | SortableTableColumnProps<T>\n | NonSortableTableColumnProps<T>;\n\n// This component never gets rendered. It is given as children to the\n// table body as configuration\nexport function TableColumn<T>(_props: TableColumnProps<T>) {\n return null;\n}\n"],"names":["TableColumn","_props"],"mappings":"
|
|
1
|
+
{"version":3,"file":"table_column.js","sources":["../../../src/components/table/table_column.tsx"],"sourcesContent":["type BaseTableColumnProps<T> = {\n heading: React.ReactNode;\n footer?: React.ReactNode;\n render?: (item: T) => React.ReactNode;\n sticky?: 'start' | 'end';\n width?: number;\n canResize?: boolean;\n};\n\ntype SortableTableColumnProps<T> = BaseTableColumnProps<T> & {\n fieldName: string;\n canSort: true;\n};\n\ntype NonSortableTableColumnProps<T> = BaseTableColumnProps<T> & {\n fieldName?: string;\n canSort?: false;\n};\n\nexport type TableColumnProps<T> =\n | SortableTableColumnProps<T>\n | NonSortableTableColumnProps<T>;\n\n// This component never gets rendered. It is given as children to the\n// table body as configuration\nexport function TableColumn<T>(_props: TableColumnProps<T>) {\n return null;\n}\n"],"names":["TableColumn","_props"],"mappings":"AAyBO,SAASA,EAAeC,GAA6B;AAC1D,SAAO;AACT;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table_presenter.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_presenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,KAAK,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAIxC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,SAAS,CAAC;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"table_presenter.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_presenter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,KAAK,QAAQ,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;AAIxC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,SAAS,CAAC;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,WAAW,CAGjB;IAEF,OAAO,CAAC,YAAY,CAAC,CAA4B;IAGjD,OAAO,CAAC,iBAAiB,CAAC,CAAwB;gBAEtC,EACV,UAAU,EACV,OAAO,EACP,WAAW,GACZ,EAAE;QACD,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,EAAE,UAAU,EAAE,CAAC;QACtB,WAAW,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;KACzC;IAeD,IAAI,UAAU;;;MAEb;IAED,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAO3C,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAoBnD,qBAAqB,CAAC,KAAK,EAAE,MAAM;IAWnC,OAAO;CAGR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table_presenter.js","sources":["../../../src/components/table/table_presenter.ts"],"sourcesContent":["import { ReactNode, RefObject } from 'react';\n\nimport { DataSource } from '@tcn/resource-store';\nimport { ISubscription, Signal } from '@tcn/state';\n\ntype SortMode = 'none' | 'asc' | 'desc';\n\nconst sortModes: SortMode[] = ['none', 'asc', 'desc'];\n\nexport type ColumnInfo = {\n width: number;\n render?: (item: any) => ReactNode;\n sortMode: SortMode;\n canSort: boolean;\n heading: ReactNode;\n footer?: ReactNode;\n sticky?: 'start' | 'end';\n fieldName?: string;\n};\n\nexport class TablePresenter {\n private _columnInfo = new Signal<ColumnInfo[]>([]);\n private _dataSource: DataSource<any>;\n private _showFooter = new Signal<boolean>(false);\n private _broadcasts = {\n columnInfo: this._columnInfo.broadcast,\n showFooter: this._showFooter.broadcast,\n };\n\n private _scrollerRef?: RefObject<HTMLDivElement>;\n\n // holding a reference to this subscription prevents it from being garbage collected\n private _pageSubscription?: ISubscription<number>;\n\n constructor({\n dataSource,\n columns,\n scrollerRef,\n }: {\n dataSource: DataSource<any>;\n columns: ColumnInfo[];\n scrollerRef?: RefObject<HTMLDivElement>;\n }) {\n this._dataSource = dataSource;\n this._columnInfo.set(columns);\n this._scrollerRef = scrollerRef;\n\n const showFooter = columns.some(column => column.footer);\n this._showFooter.set(showFooter);\n\n this._pageSubscription = this._dataSource.broadcasts.currentPageIndex.subscribe(_ => {\n if (this._scrollerRef?.current) {\n this._scrollerRef.current.scrollTo({ top: 0 });\n }\n });\n }\n\n get broadcasts() {\n return this._broadcasts;\n }\n\n setColumnWidth(index: number, width: number) {\n this._columnInfo.transform(columnInfo => {\n columnInfo[index].width = width;\n return columnInfo;\n });\n }\n\n setColumnSortMode(index: number, sortMode: SortMode) {\n const column = this._columnInfo.get()[index];\n const fieldName = column.fieldName;\n if (!column.canSort) {\n return;\n }\n\n if (!fieldName) {\n // can't sort a field without a name\n return;\n }\n\n this._dataSource.setFieldSort(fieldName, sortMode);\n\n this._columnInfo.transform(columnInfo => {\n columnInfo[index].sortMode = sortMode;\n return columnInfo;\n });\n }\n\n setNextColumnSortMode(index: number) {\n const column = this._columnInfo.get()[index];\n\n const currentMode = column.sortMode;\n const currentIndex = sortModes.indexOf(currentMode);\n const nextIndex = (currentIndex + 1) % sortModes.length;\n const nextMode = sortModes[nextIndex];\n\n this.setColumnSortMode(index, nextMode);\n }\n\n dispose() {\n this._pageSubscription?.unsubscribe();\n }\n}\n"],"names":["sortModes","TablePresenter","Signal","dataSource","columns","scrollerRef","showFooter","column","_","index","width","columnInfo","sortMode","fieldName","currentMode","nextIndex","nextMode"],"mappings":";AAOA,MAAMA,IAAwB,CAAC,QAAQ,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"table_presenter.js","sources":["../../../src/components/table/table_presenter.ts"],"sourcesContent":["import { ReactNode, RefObject } from 'react';\n\nimport { DataSource } from '@tcn/resource-store';\nimport { ISubscription, Signal } from '@tcn/state';\n\ntype SortMode = 'none' | 'asc' | 'desc';\n\nconst sortModes: SortMode[] = ['none', 'asc', 'desc'];\n\nexport type ColumnInfo = {\n width: number;\n render?: (item: any) => ReactNode;\n sortMode: SortMode;\n canSort: boolean;\n heading: ReactNode;\n footer?: ReactNode;\n sticky?: 'start' | 'end';\n fieldName?: string;\n canResize?: boolean;\n};\n\nexport class TablePresenter {\n private _columnInfo = new Signal<ColumnInfo[]>([]);\n private _dataSource: DataSource<any>;\n private _showFooter = new Signal<boolean>(false);\n private _broadcasts = {\n columnInfo: this._columnInfo.broadcast,\n showFooter: this._showFooter.broadcast,\n };\n\n private _scrollerRef?: RefObject<HTMLDivElement>;\n\n // holding a reference to this subscription prevents it from being garbage collected\n private _pageSubscription?: ISubscription<number>;\n\n constructor({\n dataSource,\n columns,\n scrollerRef,\n }: {\n dataSource: DataSource<any>;\n columns: ColumnInfo[];\n scrollerRef?: RefObject<HTMLDivElement>;\n }) {\n this._dataSource = dataSource;\n this._columnInfo.set(columns);\n this._scrollerRef = scrollerRef;\n\n const showFooter = columns.some(column => column.footer);\n this._showFooter.set(showFooter);\n\n this._pageSubscription = this._dataSource.broadcasts.currentPageIndex.subscribe(_ => {\n if (this._scrollerRef?.current) {\n this._scrollerRef.current.scrollTo({ top: 0 });\n }\n });\n }\n\n get broadcasts() {\n return this._broadcasts;\n }\n\n setColumnWidth(index: number, width: number) {\n this._columnInfo.transform(columnInfo => {\n columnInfo[index].width = width;\n return columnInfo;\n });\n }\n\n setColumnSortMode(index: number, sortMode: SortMode) {\n const column = this._columnInfo.get()[index];\n const fieldName = column.fieldName;\n if (!column.canSort) {\n return;\n }\n\n if (!fieldName) {\n // can't sort a field without a name\n return;\n }\n\n this._dataSource.setFieldSort(fieldName, sortMode);\n\n this._columnInfo.transform(columnInfo => {\n columnInfo[index].sortMode = sortMode;\n return columnInfo;\n });\n }\n\n setNextColumnSortMode(index: number) {\n const column = this._columnInfo.get()[index];\n\n const currentMode = column.sortMode;\n const currentIndex = sortModes.indexOf(currentMode);\n const nextIndex = (currentIndex + 1) % sortModes.length;\n const nextMode = sortModes[nextIndex];\n\n this.setColumnSortMode(index, nextMode);\n }\n\n dispose() {\n this._pageSubscription?.unsubscribe();\n }\n}\n"],"names":["sortModes","TablePresenter","Signal","dataSource","columns","scrollerRef","showFooter","column","_","index","width","columnInfo","sortMode","fieldName","currentMode","nextIndex","nextMode"],"mappings":";AAOA,MAAMA,IAAwB,CAAC,QAAQ,OAAO,MAAM;AAc7C,MAAMC,EAAe;AAAA,EAClB,cAAc,IAAIC,EAAqB,EAAE;AAAA,EACzC;AAAA,EACA,cAAc,IAAIA,EAAgB,EAAK;AAAA,EACvC,cAAc;AAAA,IACpB,YAAY,KAAK,YAAY;AAAA,IAC7B,YAAY,KAAK,YAAY;AAAA,EAAA;AAAA,EAGvB;AAAA;AAAA,EAGA;AAAA,EAER,YAAY;AAAA,IACV,YAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAAC;AAAA,EAAA,GAKC;AACD,SAAK,cAAcF,GACnB,KAAK,YAAY,IAAIC,CAAO,GAC5B,KAAK,eAAeC;AAEpB,UAAMC,IAAaF,EAAQ,KAAK,CAAAG,MAAUA,EAAO,MAAM;AACvD,SAAK,YAAY,IAAID,CAAU,GAE/B,KAAK,oBAAoB,KAAK,YAAY,WAAW,iBAAiB,UAAU,CAAAE,MAAK;AACnF,MAAI,KAAK,cAAc,WACrB,KAAK,aAAa,QAAQ,SAAS,EAAE,KAAK,GAAG;AAAA,IAEjD,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,aAAa;AACf,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,eAAeC,GAAeC,GAAe;AAC3C,SAAK,YAAY,UAAU,CAAAC,OACzBA,EAAWF,CAAK,EAAE,QAAQC,GACnBC,EACR;AAAA,EACH;AAAA,EAEA,kBAAkBF,GAAeG,GAAoB;AACnD,UAAML,IAAS,KAAK,YAAY,IAAA,EAAME,CAAK,GACrCI,IAAYN,EAAO;AACzB,IAAKA,EAAO,WAIPM,MAKL,KAAK,YAAY,aAAaA,GAAWD,CAAQ,GAEjD,KAAK,YAAY,UAAU,CAAAD,OACzBA,EAAWF,CAAK,EAAE,WAAWG,GACtBD,EACR;AAAA,EACH;AAAA,EAEA,sBAAsBF,GAAe;AAGnC,UAAMK,IAFS,KAAK,YAAY,IAAA,EAAML,CAAK,EAEhB,UAErBM,KADef,EAAU,QAAQc,CAAW,IAChB,KAAKd,EAAU,QAC3CgB,IAAWhB,EAAUe,CAAS;AAEpC,SAAK,kBAAkBN,GAAOO,CAAQ;AAAA,EACxC;AAAA,EAEA,UAAU;AACR,SAAK,mBAAmB,YAAA;AAAA,EAC1B;AACF;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field_filter_props.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field_filter_strategy.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mulit_select_field_filter.d.ts","sourceRoot":"","sources":["../../../../src/components/table_filter_panel/field_filters/mulit_select_field_filter.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mulit_select_field_filter.d.ts","sourceRoot":"","sources":["../../../../src/components/table_filter_panel/field_filters/mulit_select_field_filter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAM3D,MAAM,MAAM,2BAA2B,GAAG,gBAAgB,GAAG;IAC3D,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;KAAE,EAAE,CAAC;CAChE,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,EACrC,SAAS,EACT,KAAK,EACL,OAAO,GACR,EAAE,2BAA2B,2CAkC7B"}
|
|
@@ -1,50 +1,38 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useSignalValue as
|
|
3
|
-
import { Multiselect as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
options: r
|
|
1
|
+
import { jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { useSignalValue as o } from "@tcn/state";
|
|
3
|
+
import { Multiselect as f, Option as b } from "@tcn/ui/inputs";
|
|
4
|
+
import { MultiSelectFieldFilterPresenter as d } from "./multi_select_field_filter_presenter.js";
|
|
5
|
+
import { useFieldFilterStrategy as v } from "./use_field_filter_strategy.js";
|
|
6
|
+
import { ClearableField as F } from "./clearable_field.js";
|
|
7
|
+
import '../../../mulit_select_field_filter.css';const p = "_multiselect-filter_193bbb6", g = { "multiselect-filter": p };
|
|
8
|
+
function y({
|
|
9
|
+
fieldName: u,
|
|
10
|
+
label: n,
|
|
11
|
+
options: t
|
|
13
12
|
}) {
|
|
14
|
-
const
|
|
15
|
-
return /* @__PURE__ */
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
const r = v(d, u), a = o(r.broadcasts.value), c = a?.map((e) => t.find((l) => l.value === e)?.label ?? "").filter(Boolean) ?? [];
|
|
14
|
+
return /* @__PURE__ */ s(
|
|
15
|
+
F,
|
|
16
|
+
{
|
|
17
|
+
label: n,
|
|
18
|
+
onClear: () => r.setValue(null),
|
|
19
|
+
isClearable: a == null || a.length === 0,
|
|
20
|
+
className: g["multiselect-filter"],
|
|
21
|
+
children: /* @__PURE__ */ s(
|
|
22
|
+
f,
|
|
20
23
|
{
|
|
21
|
-
value:
|
|
24
|
+
value: c,
|
|
22
25
|
onChange: (e) => {
|
|
23
|
-
const
|
|
24
|
-
|
|
26
|
+
const l = e.map((i) => t.find((m) => m.label === i)?.value).filter((i) => i !== void 0);
|
|
27
|
+
r.setValue(l.length > 0 ? l : null);
|
|
25
28
|
},
|
|
26
|
-
children:
|
|
27
|
-
p,
|
|
28
|
-
{
|
|
29
|
-
value: e.label,
|
|
30
|
-
label: e.label,
|
|
31
|
-
children: e.label
|
|
32
|
-
},
|
|
33
|
-
e.value.toString()
|
|
34
|
-
))
|
|
35
|
-
}
|
|
36
|
-
) }),
|
|
37
|
-
/* @__PURE__ */ l(
|
|
38
|
-
S,
|
|
39
|
-
{
|
|
40
|
-
onClick: () => i.setValue(null),
|
|
41
|
-
disabled: a == null || a.length === 0
|
|
29
|
+
children: t.map((e) => /* @__PURE__ */ s(b, { value: e.label, label: e.label, children: e.label }, e.value.toString()))
|
|
42
30
|
}
|
|
43
31
|
)
|
|
44
|
-
|
|
45
|
-
|
|
32
|
+
}
|
|
33
|
+
);
|
|
46
34
|
}
|
|
47
35
|
export {
|
|
48
|
-
|
|
36
|
+
y as MulitSelectFieldFilter
|
|
49
37
|
};
|
|
50
38
|
//# sourceMappingURL=mulit_select_field_filter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mulit_select_field_filter.js","sources":["../../../../src/components/table_filter_panel/field_filters/mulit_select_field_filter.tsx"],"sourcesContent":["import { useSignalValue } from '@tcn/state';\nimport { Multiselect, Option } from '@tcn/ui/inputs';\nimport {
|
|
1
|
+
{"version":3,"file":"mulit_select_field_filter.js","sources":["../../../../src/components/table_filter_panel/field_filters/mulit_select_field_filter.tsx"],"sourcesContent":["import { useSignalValue } from '@tcn/state';\nimport { Multiselect, Option } from '@tcn/ui/inputs';\nimport { FieldFilterProps } from './field_filter_props.js';\nimport { MultiSelectFieldFilterPresenter } from './multi_select_field_filter_presenter.js';\nimport { useFieldFilterStrategy } from './use_field_filter_strategy.js';\nimport { ClearableField } from './clearable_field.js';\nimport styles from './mulit_select_field_filter.module.css';\n\nexport type MulitSelectFieldFilterProps = FieldFilterProps & {\n options: { label: string; value: string | boolean | number }[];\n};\n\nexport function MulitSelectFieldFilter({\n fieldName,\n label,\n options,\n}: MulitSelectFieldFilterProps) {\n const presenter = useFieldFilterStrategy(MultiSelectFieldFilterPresenter, fieldName);\n\n const values = useSignalValue(presenter.broadcasts.value);\n const selectedLabels =\n values\n ?.map(value => options.find(option => option.value === value)?.label ?? '')\n .filter(Boolean) ?? [];\n\n return (\n <ClearableField\n label={label}\n onClear={() => presenter.setValue(null)}\n isClearable={values == null || values.length === 0}\n className={styles['multiselect-filter']}\n >\n <Multiselect\n value={selectedLabels}\n onChange={selectedLabels => {\n const realValues = selectedLabels\n .map(label => options.find(option => option.label === label)?.value)\n .filter(value => value !== undefined) as (string | boolean | number)[];\n\n presenter.setValue(realValues.length > 0 ? realValues : null);\n }}\n >\n {options.map(option => (\n <Option key={option.value.toString()} value={option.label} label={option.label}>\n {option.label}\n </Option>\n ))}\n </Multiselect>\n </ClearableField>\n );\n}\n"],"names":["MulitSelectFieldFilter","fieldName","label","options","presenter","useFieldFilterStrategy","MultiSelectFieldFilterPresenter","values","useSignalValue","selectedLabels","value","option","jsx","ClearableField","styles","Multiselect","realValues","Option"],"mappings":";;;;;;;AAYO,SAASA,EAAuB;AAAA,EACrC,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AACF,GAAgC;AAC9B,QAAMC,IAAYC,EAAuBC,GAAiCL,CAAS,GAE7EM,IAASC,EAAeJ,EAAU,WAAW,KAAK,GAClDK,IACJF,GACI,IAAI,CAAAG,MAASP,EAAQ,KAAK,CAAAQ,MAAUA,EAAO,UAAUD,CAAK,GAAG,SAAS,EAAE,EACzE,OAAO,OAAO,KAAK,CAAA;AAExB,SACE,gBAAAE;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAAX;AAAA,MACA,SAAS,MAAME,EAAU,SAAS,IAAI;AAAA,MACtC,aAAaG,KAAU,QAAQA,EAAO,WAAW;AAAA,MACjD,WAAWO,EAAO,oBAAoB;AAAA,MAEtC,UAAA,gBAAAF;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,OAAON;AAAA,UACP,UAAU,CAAAA,MAAkB;AAC1B,kBAAMO,IAAaP,EAChB,IAAI,CAAAP,MAASC,EAAQ,KAAK,CAAAQ,MAAUA,EAAO,UAAUT,CAAK,GAAG,KAAK,EAClE,OAAO,CAAAQ,MAASA,MAAU,MAAS;AAEtC,YAAAN,EAAU,SAASY,EAAW,SAAS,IAAIA,IAAa,IAAI;AAAA,UAC9D;AAAA,UAEC,YAAQ,IAAI,CAAAL,MACX,gBAAAC,EAACK,GAAA,EAAqC,OAAON,EAAO,OAAO,OAAOA,EAAO,OACtE,UAAAA,EAAO,MAAA,GADGA,EAAO,MAAM,UAE1B,CACD;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select_field_filter.d.ts","sourceRoot":"","sources":["../../../../src/components/table_filter_panel/field_filters/select_field_filter.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"select_field_filter.d.ts","sourceRoot":"","sources":["../../../../src/components/table_filter_panel/field_filters/select_field_filter.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAK3D,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG;IACtD,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;KAAE,EAAE,CAAC;CAChE,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,sBAAsB,2CA4BtF"}
|
|
@@ -1,47 +1,33 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useSignalValue as
|
|
3
|
-
import { Select as s, Option as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import { jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import { useSignalValue as c } from "@tcn/state";
|
|
3
|
+
import { Select as s, Option as d } from "@tcn/ui/inputs";
|
|
4
|
+
import { SelectFieldFilterPresenter as b } from "./select_field_filter_presenter.js";
|
|
5
|
+
import { useFieldFilterStrategy as f } from "./use_field_filter_strategy.js";
|
|
6
|
+
import { ClearableField as v } from "./clearable_field.js";
|
|
7
|
+
function V({ fieldName: i, label: u, options: l }) {
|
|
8
|
+
const r = f(b, i), t = c(r.broadcasts.value), n = l.find((e) => e.value === t)?.label ?? "";
|
|
9
|
+
return /* @__PURE__ */ a(
|
|
10
|
+
v,
|
|
11
|
+
{
|
|
12
|
+
label: u,
|
|
13
|
+
onClear: () => r.setValue(null),
|
|
14
|
+
isClearable: t == null,
|
|
15
|
+
children: /* @__PURE__ */ a(
|
|
15
16
|
s,
|
|
16
17
|
{
|
|
17
|
-
value:
|
|
18
|
+
value: n,
|
|
18
19
|
onChange: (e) => {
|
|
19
|
-
const
|
|
20
|
-
|
|
20
|
+
const m = l.find((o) => o.label === e)?.value;
|
|
21
|
+
r.setValue(m ?? null);
|
|
21
22
|
},
|
|
22
23
|
width: "flex",
|
|
23
|
-
children:
|
|
24
|
-
f,
|
|
25
|
-
{
|
|
26
|
-
value: e.label,
|
|
27
|
-
label: e.label,
|
|
28
|
-
children: e.label
|
|
29
|
-
},
|
|
30
|
-
e.value.toString()
|
|
31
|
-
))
|
|
32
|
-
}
|
|
33
|
-
),
|
|
34
|
-
/* @__PURE__ */ l(
|
|
35
|
-
F,
|
|
36
|
-
{
|
|
37
|
-
onClick: () => t.setValue(null),
|
|
38
|
-
disabled: a == null
|
|
24
|
+
children: l.map((e) => /* @__PURE__ */ a(d, { value: e.label, label: e.label, children: e.label }, e.value.toString()))
|
|
39
25
|
}
|
|
40
26
|
)
|
|
41
|
-
|
|
42
|
-
|
|
27
|
+
}
|
|
28
|
+
);
|
|
43
29
|
}
|
|
44
30
|
export {
|
|
45
|
-
|
|
31
|
+
V as SelectFieldFilter
|
|
46
32
|
};
|
|
47
33
|
//# sourceMappingURL=select_field_filter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select_field_filter.js","sources":["../../../../src/components/table_filter_panel/field_filters/select_field_filter.tsx"],"sourcesContent":["import { useSignalValue } from '@tcn/state';\nimport { Option, Select } from '@tcn/ui/inputs';\nimport {
|
|
1
|
+
{"version":3,"file":"select_field_filter.js","sources":["../../../../src/components/table_filter_panel/field_filters/select_field_filter.tsx"],"sourcesContent":["import { useSignalValue } from '@tcn/state';\nimport { Option, Select } from '@tcn/ui/inputs';\nimport { FieldFilterProps } from './field_filter_props.js';\nimport { SelectFieldFilterPresenter } from './select_field_filter_presenter.js';\nimport { useFieldFilterStrategy } from './use_field_filter_strategy.js';\nimport { ClearableField } from './clearable_field.js';\n\nexport type SelectFieldFilterProps = FieldFilterProps & {\n options: { label: string; value: string | boolean | number }[];\n};\n\nexport function SelectFieldFilter({ fieldName, label, options }: SelectFieldFilterProps) {\n const presenter = useFieldFilterStrategy(SelectFieldFilterPresenter, fieldName);\n\n const value = useSignalValue(presenter.broadcasts.value);\n const valueLabel = options.find(option => option.value === value)?.label ?? '';\n\n return (\n <ClearableField\n label={label}\n onClear={() => presenter.setValue(null)}\n isClearable={value == null}\n >\n <Select\n value={valueLabel}\n onChange={value => {\n const realValue = options.find(option => option.label === value)?.value;\n presenter.setValue(realValue ?? null);\n }}\n width=\"flex\"\n >\n {options.map(option => (\n <Option key={option.value.toString()} value={option.label} label={option.label}>\n {option.label}\n </Option>\n ))}\n </Select>\n </ClearableField>\n );\n}\n"],"names":["SelectFieldFilter","fieldName","label","options","presenter","useFieldFilterStrategy","SelectFieldFilterPresenter","value","useSignalValue","valueLabel","option","jsx","ClearableField","Select","realValue","Option"],"mappings":";;;;;;AAWO,SAASA,EAAkB,EAAE,WAAAC,GAAW,OAAAC,GAAO,SAAAC,KAAmC;AACvF,QAAMC,IAAYC,EAAuBC,GAA4BL,CAAS,GAExEM,IAAQC,EAAeJ,EAAU,WAAW,KAAK,GACjDK,IAAaN,EAAQ,KAAK,CAAAO,MAAUA,EAAO,UAAUH,CAAK,GAAG,SAAS;AAE5E,SACE,gBAAAI;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAAV;AAAA,MACA,SAAS,MAAME,EAAU,SAAS,IAAI;AAAA,MACtC,aAAaG,KAAS;AAAA,MAEtB,UAAA,gBAAAI;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,OAAOJ;AAAA,UACP,UAAU,CAAAF,MAAS;AACjB,kBAAMO,IAAYX,EAAQ,KAAK,OAAUO,EAAO,UAAUH,CAAK,GAAG;AAClE,YAAAH,EAAU,SAASU,KAAa,IAAI;AAAA,UACtC;AAAA,UACA,OAAM;AAAA,UAEL,YAAQ,IAAI,CAAAJ,MACX,gBAAAC,EAACI,GAAA,EAAqC,OAAOL,EAAO,OAAO,OAAOA,EAAO,OACtE,UAAAA,EAAO,MAAA,GADGA,EAAO,MAAM,UAE1B,CACD;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;"}
|