@tcn/ui-table 2.2.0 → 2.3.1

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 (217) hide show
  1. package/README.md +1 -1
  2. package/dist/cell.css +1 -0
  3. package/dist/cell.module-WpHnQBVu.js +5 -0
  4. package/dist/cell.module-WpHnQBVu.js.map +1 -0
  5. package/dist/components/cells/data_cell.d.ts +3 -2
  6. package/dist/components/cells/data_cell.d.ts.map +1 -0
  7. package/dist/components/cells/data_cell.js +18 -10
  8. package/dist/components/cells/data_cell.js.map +1 -1
  9. package/dist/components/cells/footer_cell.d.ts +3 -2
  10. package/dist/components/cells/footer_cell.d.ts.map +1 -0
  11. package/dist/components/cells/footer_cell.js +18 -10
  12. package/dist/components/cells/footer_cell.js.map +1 -1
  13. package/dist/components/cells/header_cell.d.ts +3 -2
  14. package/dist/components/cells/header_cell.d.ts.map +1 -0
  15. package/dist/components/cells/header_cell.js +52 -18
  16. package/dist/components/cells/header_cell.js.map +1 -1
  17. package/dist/components/cells/sticky_row_data_cell.d.ts +3 -2
  18. package/dist/components/cells/sticky_row_data_cell.d.ts.map +1 -0
  19. package/dist/components/cells/sticky_row_data_cell.js +26 -11
  20. package/dist/components/cells/sticky_row_data_cell.js.map +1 -1
  21. package/dist/components/cells/sticky_row_fill_cell.d.ts +2 -2
  22. package/dist/components/cells/sticky_row_fill_cell.d.ts.map +1 -0
  23. package/dist/components/cells/sticky_row_fill_cell.js +15 -5
  24. package/dist/components/cells/sticky_row_fill_cell.js.map +1 -1
  25. package/dist/components/global_search.d.ts +2 -2
  26. package/dist/components/global_search.d.ts.map +1 -0
  27. package/dist/components/global_search.js +26 -9
  28. package/dist/components/global_search.js.map +1 -1
  29. package/dist/components/global_search_presenter.d.ts +2 -1
  30. package/dist/components/global_search_presenter.d.ts.map +1 -0
  31. package/dist/components/global_search_presenter.js +20 -18
  32. package/dist/components/global_search_presenter.js.map +1 -1
  33. package/dist/components/table/table.d.ts +3 -2
  34. package/dist/components/table/table.d.ts.map +1 -0
  35. package/dist/components/table/table.js +140 -77
  36. package/dist/components/table/table.js.map +1 -1
  37. package/dist/components/table/table_column.d.ts +1 -1
  38. package/dist/components/table/table_column.d.ts.map +1 -0
  39. package/dist/components/table/table_column.js +6 -5
  40. package/dist/components/table/table_column.js.map +1 -1
  41. package/dist/components/table/table_presenter.d.ts +3 -2
  42. package/dist/components/table/table_presenter.d.ts.map +1 -0
  43. package/dist/components/table/table_presenter.js +45 -62
  44. package/dist/components/table/table_presenter.js.map +1 -1
  45. package/dist/components/table_filter_panel/field_filters/date_field_filter.d.ts +2 -2
  46. package/dist/components/table_filter_panel/field_filters/date_field_filter.d.ts.map +1 -0
  47. package/dist/components/table_filter_panel/field_filters/date_field_filter.js +59 -33
  48. package/dist/components/table_filter_panel/field_filters/date_field_filter.js.map +1 -1
  49. package/dist/components/table_filter_panel/field_filters/date_field_filter_presenter.d.ts +4 -3
  50. package/dist/components/table_filter_panel/field_filters/date_field_filter_presenter.d.ts.map +1 -0
  51. package/dist/components/table_filter_panel/field_filters/date_field_filter_presenter.js +57 -91
  52. package/dist/components/table_filter_panel/field_filters/date_field_filter_presenter.js.map +1 -1
  53. package/dist/components/table_filter_panel/field_filters/field_filter_props.d.ts +1 -0
  54. package/dist/components/table_filter_panel/field_filters/field_filter_props.d.ts.map +1 -0
  55. package/dist/components/table_filter_panel/field_filters/field_filter_strategy.d.ts +1 -0
  56. package/dist/components/table_filter_panel/field_filters/field_filter_strategy.d.ts.map +1 -0
  57. package/dist/components/table_filter_panel/field_filters/mulit_select_field_filter.d.ts +3 -3
  58. package/dist/components/table_filter_panel/field_filters/mulit_select_field_filter.d.ts.map +1 -0
  59. package/dist/components/table_filter_panel/field_filters/mulit_select_field_filter.js +52 -29
  60. package/dist/components/table_filter_panel/field_filters/mulit_select_field_filter.js.map +1 -1
  61. package/dist/components/table_filter_panel/field_filters/multi_select_field_filter_presenter.d.ts +3 -2
  62. package/dist/components/table_filter_panel/field_filters/multi_select_field_filter_presenter.d.ts.map +1 -0
  63. package/dist/components/table_filter_panel/field_filters/multi_select_field_filter_presenter.js +53 -70
  64. package/dist/components/table_filter_panel/field_filters/multi_select_field_filter_presenter.js.map +1 -1
  65. package/dist/components/table_filter_panel/field_filters/number_field_filter.d.ts +3 -3
  66. package/dist/components/table_filter_panel/field_filters/number_field_filter.d.ts.map +1 -0
  67. package/dist/components/table_filter_panel/field_filters/number_field_filter.js +47 -23
  68. package/dist/components/table_filter_panel/field_filters/number_field_filter.js.map +1 -1
  69. package/dist/components/table_filter_panel/field_filters/number_field_filter_presenter.d.ts +5 -4
  70. package/dist/components/table_filter_panel/field_filters/number_field_filter_presenter.d.ts.map +1 -0
  71. package/dist/components/table_filter_panel/field_filters/number_field_filter_presenter.js +53 -58
  72. package/dist/components/table_filter_panel/field_filters/number_field_filter_presenter.js.map +1 -1
  73. package/dist/components/table_filter_panel/field_filters/number_range_field_filter.d.ts +2 -2
  74. package/dist/components/table_filter_panel/field_filters/number_range_field_filter.d.ts.map +1 -0
  75. package/dist/components/table_filter_panel/field_filters/number_range_field_filter.js +61 -31
  76. package/dist/components/table_filter_panel/field_filters/number_range_field_filter.js.map +1 -1
  77. package/dist/components/table_filter_panel/field_filters/number_range_field_filter_presenter.d.ts +4 -3
  78. package/dist/components/table_filter_panel/field_filters/number_range_field_filter_presenter.d.ts.map +1 -0
  79. package/dist/components/table_filter_panel/field_filters/number_range_field_filter_presenter.js +57 -91
  80. package/dist/components/table_filter_panel/field_filters/number_range_field_filter_presenter.js.map +1 -1
  81. package/dist/components/table_filter_panel/field_filters/select_field_filter.d.ts +3 -3
  82. package/dist/components/table_filter_panel/field_filters/select_field_filter.d.ts.map +1 -0
  83. package/dist/components/table_filter_panel/field_filters/select_field_filter.js +49 -24
  84. package/dist/components/table_filter_panel/field_filters/select_field_filter.js.map +1 -1
  85. package/dist/components/table_filter_panel/field_filters/select_field_filter_presenter.d.ts +3 -2
  86. package/dist/components/table_filter_panel/field_filters/select_field_filter_presenter.d.ts.map +1 -0
  87. package/dist/components/table_filter_panel/field_filters/select_field_filter_presenter.js +49 -53
  88. package/dist/components/table_filter_panel/field_filters/select_field_filter_presenter.js.map +1 -1
  89. package/dist/components/table_filter_panel/field_filters/string_field_filter.d.ts +3 -3
  90. package/dist/components/table_filter_panel/field_filters/string_field_filter.d.ts.map +1 -0
  91. package/dist/components/table_filter_panel/field_filters/string_field_filter.js +62 -33
  92. package/dist/components/table_filter_panel/field_filters/string_field_filter.js.map +1 -1
  93. package/dist/components/table_filter_panel/field_filters/string_field_filter_presenter.d.ts +5 -4
  94. package/dist/components/table_filter_panel/field_filters/string_field_filter_presenter.d.ts.map +1 -0
  95. package/dist/components/table_filter_panel/field_filters/string_field_filter_presenter.js +54 -59
  96. package/dist/components/table_filter_panel/field_filters/string_field_filter_presenter.js.map +1 -1
  97. package/dist/components/table_filter_panel/field_filters/use_field_filter_strategy.d.ts +2 -1
  98. package/dist/components/table_filter_panel/field_filters/use_field_filter_strategy.d.ts.map +1 -0
  99. package/dist/components/table_filter_panel/field_filters/use_field_filter_strategy.js +13 -19
  100. package/dist/components/table_filter_panel/field_filters/use_field_filter_strategy.js.map +1 -1
  101. package/dist/components/table_filter_panel/table_filter_panel.d.ts +5 -4
  102. package/dist/components/table_filter_panel/table_filter_panel.d.ts.map +1 -0
  103. package/dist/components/table_filter_panel/table_filter_panel.js +15 -11
  104. package/dist/components/table_filter_panel/table_filter_panel.js.map +1 -1
  105. package/dist/components/table_filter_panel/table_filter_panel_presenter.d.ts +2 -2
  106. package/dist/components/table_filter_panel/table_filter_panel_presenter.d.ts.map +1 -0
  107. package/dist/components/table_filter_panel/table_filter_panel_presenter.js +45 -62
  108. package/dist/components/table_filter_panel/table_filter_panel_presenter.js.map +1 -1
  109. package/dist/components/table_filter_panel/types.d.ts +1 -0
  110. package/dist/components/table_filter_panel/types.d.ts.map +1 -0
  111. package/dist/components/table_filter_panel/types.js +5 -2
  112. package/dist/components/table_filter_panel/types.js.map +1 -1
  113. package/dist/components/table_pager.d.ts +2 -2
  114. package/dist/components/table_pager.d.ts.map +1 -0
  115. package/dist/components/table_pager.js +22 -20
  116. package/dist/components/table_pager.js.map +1 -1
  117. package/dist/index.d.ts +1 -0
  118. package/dist/index.d.ts.map +1 -0
  119. package/dist/index.js +27 -13
  120. package/dist/index.js.map +1 -1
  121. package/dist/table.css +1 -0
  122. package/dist/table_pager.css +1 -0
  123. package/package.json +61 -61
  124. package/src/__stories__/aip_table.stories.tsx +190 -0
  125. package/src/__stories__/auth_provider.tsx +14 -0
  126. package/src/__stories__/demo.stories.tsx +137 -0
  127. package/src/__stories__/sample_data.ts +1398 -0
  128. package/src/__stories__/table.stories.tsx +423 -0
  129. package/src/__tests__/sanity.test.ts +7 -0
  130. package/src/components/cells/data_cell.tsx +25 -0
  131. package/src/components/cells/footer_cell.tsx +25 -0
  132. package/src/components/cells/header_cell.tsx +77 -0
  133. package/src/components/cells/sticky_row_data_cell.tsx +31 -0
  134. package/src/components/cells/sticky_row_fill_cell.tsx +16 -0
  135. package/src/components/global_search.tsx +33 -0
  136. package/src/components/global_search_presenter.ts +24 -0
  137. package/{dist → src}/components/table/table.module.css +3 -2
  138. package/src/components/table/table.tsx +183 -0
  139. package/src/components/table/table_column.tsx +27 -0
  140. package/src/components/table/table_presenter.test.ts +161 -0
  141. package/src/components/table/table_presenter.ts +103 -0
  142. package/src/components/table_filter_panel/field_filters/date_field_filter.tsx +70 -0
  143. package/src/components/table_filter_panel/field_filters/date_field_filter_presenter.test.ts +583 -0
  144. package/src/components/table_filter_panel/field_filters/date_field_filter_presenter.ts +110 -0
  145. package/src/components/table_filter_panel/field_filters/field_filter_props.ts +5 -0
  146. package/src/components/table_filter_panel/field_filters/field_filter_strategy.ts +14 -0
  147. package/src/components/table_filter_panel/field_filters/mulit_select_field_filter.tsx +68 -0
  148. package/src/components/table_filter_panel/field_filters/multi_select_field_filter_presenter.test.ts +444 -0
  149. package/src/components/table_filter_panel/field_filters/multi_select_field_filter_presenter.ts +90 -0
  150. package/src/components/table_filter_panel/field_filters/number_field_filter.tsx +53 -0
  151. package/src/components/table_filter_panel/field_filters/number_field_filter_presenter.test.ts +431 -0
  152. package/src/components/table_filter_panel/field_filters/number_field_filter_presenter.ts +80 -0
  153. package/src/components/table_filter_panel/field_filters/number_range_field_filter.tsx +68 -0
  154. package/src/components/table_filter_panel/field_filters/number_range_field_filter_presenter.test.ts +582 -0
  155. package/src/components/table_filter_panel/field_filters/number_range_field_filter_presenter.ts +110 -0
  156. package/src/components/table_filter_panel/field_filters/select_field_filter.tsx +57 -0
  157. package/src/components/table_filter_panel/field_filters/select_field_filter_presenter.test.ts +365 -0
  158. package/src/components/table_filter_panel/field_filters/select_field_filter_presenter.ts +74 -0
  159. package/src/components/table_filter_panel/field_filters/string_field_filter.tsx +70 -0
  160. package/src/components/table_filter_panel/field_filters/string_field_filter_presenter.test.ts +296 -0
  161. package/src/components/table_filter_panel/field_filters/string_field_filter_presenter.ts +81 -0
  162. package/src/components/table_filter_panel/field_filters/use_field_filter_strategy.tsx +30 -0
  163. package/src/components/table_filter_panel/table_filter_panel.stories.tsx +46 -0
  164. package/src/components/table_filter_panel/table_filter_panel.tsx +26 -0
  165. package/src/components/table_filter_panel/table_filter_panel_presenter.ts +77 -0
  166. package/src/components/table_filter_panel/types.ts +3 -0
  167. package/src/components/table_pager.tsx +39 -0
  168. package/src/index.ts +16 -0
  169. package/tsconfig.json +36 -0
  170. package/types/file_types.d.ts +54 -0
  171. package/types/react_color.d.ts +61 -0
  172. package/dist/__stories__/aip_table.stories.d.ts +0 -5
  173. package/dist/__stories__/aip_table.stories.js +0 -96
  174. package/dist/__stories__/aip_table.stories.js.map +0 -1
  175. package/dist/__stories__/auth_provider.d.ts +0 -4
  176. package/dist/__stories__/auth_provider.js +0 -10
  177. package/dist/__stories__/auth_provider.js.map +0 -1
  178. package/dist/__stories__/demo.stories.d.ts +0 -6
  179. package/dist/__stories__/demo.stories.js +0 -94
  180. package/dist/__stories__/demo.stories.js.map +0 -1
  181. package/dist/__stories__/sample_data.d.ts +0 -36
  182. package/dist/__stories__/sample_data.js +0 -1385
  183. package/dist/__stories__/sample_data.js.map +0 -1
  184. package/dist/__stories__/table.stories.d.ts +0 -12
  185. package/dist/__stories__/table.stories.js +0 -272
  186. package/dist/__stories__/table.stories.js.map +0 -1
  187. package/dist/components/table/table_presenter.test.d.ts +0 -1
  188. package/dist/components/table/table_presenter.test.js +0 -125
  189. package/dist/components/table/table_presenter.test.js.map +0 -1
  190. package/dist/components/table_filter_panel/field_filters/date_field_filter_presenter.test.d.ts +0 -1
  191. package/dist/components/table_filter_panel/field_filters/date_field_filter_presenter.test.js +0 -434
  192. package/dist/components/table_filter_panel/field_filters/date_field_filter_presenter.test.js.map +0 -1
  193. package/dist/components/table_filter_panel/field_filters/field_filter_props.js +0 -2
  194. package/dist/components/table_filter_panel/field_filters/field_filter_props.js.map +0 -1
  195. package/dist/components/table_filter_panel/field_filters/field_filter_strategy.js +0 -2
  196. package/dist/components/table_filter_panel/field_filters/field_filter_strategy.js.map +0 -1
  197. package/dist/components/table_filter_panel/field_filters/multi_select_field_filter_presenter.test.d.ts +0 -1
  198. package/dist/components/table_filter_panel/field_filters/multi_select_field_filter_presenter.test.js +0 -332
  199. package/dist/components/table_filter_panel/field_filters/multi_select_field_filter_presenter.test.js.map +0 -1
  200. package/dist/components/table_filter_panel/field_filters/number_field_filter_presenter.test.d.ts +0 -1
  201. package/dist/components/table_filter_panel/field_filters/number_field_filter_presenter.test.js +0 -347
  202. package/dist/components/table_filter_panel/field_filters/number_field_filter_presenter.test.js.map +0 -1
  203. package/dist/components/table_filter_panel/field_filters/number_range_field_filter_presenter.test.d.ts +0 -1
  204. package/dist/components/table_filter_panel/field_filters/number_range_field_filter_presenter.test.js +0 -452
  205. package/dist/components/table_filter_panel/field_filters/number_range_field_filter_presenter.test.js.map +0 -1
  206. package/dist/components/table_filter_panel/field_filters/select_field_filter_presenter.test.d.ts +0 -1
  207. package/dist/components/table_filter_panel/field_filters/select_field_filter_presenter.test.js +0 -285
  208. package/dist/components/table_filter_panel/field_filters/select_field_filter_presenter.test.js.map +0 -1
  209. package/dist/components/table_filter_panel/field_filters/string_field_filter_presenter.test.d.ts +0 -1
  210. package/dist/components/table_filter_panel/field_filters/string_field_filter_presenter.test.js +0 -232
  211. package/dist/components/table_filter_panel/field_filters/string_field_filter_presenter.test.js.map +0 -1
  212. package/dist/components/table_filter_panel/table_filter_panel.stories.d.ts +0 -6
  213. package/dist/components/table_filter_panel/table_filter_panel.stories.js +0 -25
  214. package/dist/components/table_filter_panel/table_filter_panel.stories.js.map +0 -1
  215. /package/{dist → src}/__stories__/table.module.css +0 -0
  216. /package/{dist → src}/components/cells/cell.module.css +0 -0
  217. /package/{dist → src}/components/table_pager.module.css +0 -0
@@ -1,80 +1,143 @@
1
- import React, { isValidElement, useState, useRef } from 'react';
2
- import { Status, useRunnerStatus, useSignalValue } from '@tcn/state';
3
- import { Box } from '@tcn/ui/stacks';
4
- import { BodyText } from '@tcn/ui/typography';
5
- import { DataCell } from "../cells/data_cell.js";
6
- import { FooterCell } from "../cells/footer_cell.js";
7
- import { HeaderCell } from "../cells/header_cell.js";
8
- import { StickyRowDataCell } from "../cells/sticky_row_data_cell.js";
9
- import { StickyRowFillCell } from "../cells/sticky_row_fill_cell.js";
10
- import styles from './table.module.css';
11
- import { TableColumn } from './table_column.js';
12
- import { TablePresenter } from './table_presenter.js';
13
- const HEADER_ROW_HEIGHT = 30;
14
- // @TODO: Props for loading and error states
15
- function wrapContent(content) {
16
- if (typeof content === 'string') {
17
- return React.createElement(BodyText, null, content);
18
- }
19
- return content;
1
+ import { jsx as r, jsxs as a } from "react/jsx-runtime";
2
+ import F, { useRef as H, isValidElement as P, useState as W } from "react";
3
+ import { useSignalValue as c, useRunnerStatus as j, Status as y } from "@tcn/state";
4
+ import { Box as A } from "@tcn/ui/stacks";
5
+ import { BodyText as G } from "@tcn/ui/typography";
6
+ import { DataCell as I } from "../cells/data_cell.js";
7
+ import { FooterCell as O } from "../cells/footer_cell.js";
8
+ import { HeaderCell as V } from "../cells/header_cell.js";
9
+ import { StickyRowDataCell as v } from "../cells/sticky_row_data_cell.js";
10
+ import { StickyRowFillCell as z } from "../cells/sticky_row_fill_cell.js";
11
+ import { TableColumn as L } from "./table_column.js";
12
+ import { TablePresenter as U } from "./table_presenter.js";
13
+ import '../../table.css';const q = "_table-body-wrapper_55f7034", J = "_table-body_b8c928c", w = { "table-body-wrapper": q, "table-body": J }, k = 30;
14
+ function N(s) {
15
+ return typeof s == "string" ? /* @__PURE__ */ r(G, { children: s }) : s;
20
16
  }
21
- export function Table({ dataSource, stickyItems, children, width = '100%', height = '100%', zIndex, isRowHighlighted, onRowClick, ...props }) {
22
- const rows = useSignalValue(dataSource.broadcasts.currentResults);
23
- const page = useSignalValue(dataSource.broadcasts.currentPageIndex);
24
- const scrollerRef = useRef(null);
25
- const columns = React.Children.toArray(children).filter((child) => isValidElement(child) && child.type === TableColumn);
26
- const [presenter] = useState(() => new TablePresenter({
27
- dataSource,
28
- columns: columns.map(column => ({
29
- fieldName: column.props.fieldName,
30
- width: column.props.width ?? 100,
31
- sortMode: 'none',
32
- canSort: column.props.canSort ?? false,
33
- heading: column.props.heading,
34
- footer: column.props.footer,
35
- sticky: column.props.sticky,
36
- render: column.props.render,
37
- })),
38
- scrollerRef,
39
- }));
40
- const columnInfo = useSignalValue(presenter.broadcasts.columnInfo);
41
- const itemsStatus = useRunnerStatus(dataSource.broadcasts.currentResults);
42
- const showFooter = useSignalValue(presenter.broadcasts.showFooter);
43
- const isClickable = typeof onRowClick === 'function';
44
- return (React.createElement(Box, { ref: scrollerRef, zIndex: zIndex, className: styles['table-body-wrapper'], style: { overflow: 'auto' }, ...props },
45
- React.createElement("table", { className: styles['table-body'], "data-is-clickable": isClickable, style: { width, height } },
46
- React.createElement("thead", null,
47
- React.createElement("tr", null,
48
- columnInfo.map((column, index) => (React.createElement(HeaderCell, { key: `h-${index}`, index: index, heading: wrapContent(column.heading), sticky: column.sticky, onResize: newSize => presenter.setColumnWidth(index, newSize), width: column.width, sortMode: column.sortMode, onSortModeChange: () => presenter.setNextColumnSortMode(index), canSort: column.canSort }))),
49
- React.createElement("th", { key: "fill", className: "fill" }))),
50
- React.createElement("tbody", null,
51
- stickyItems?.map((item, index) => (React.createElement("tr", { key: `sticky-${index}`, "data-sticky-row": true },
52
- columnInfo.map((col, colIndex) => {
53
- const fieldName = col.fieldName;
54
- const render = col.render;
55
- const content = render ? render(item) : fieldName ? item[fieldName] : '';
56
- return (React.createElement(StickyRowDataCell, { key: `${page}-${index}-${colIndex}`, content: content, sticky: col.sticky, width: col.width, top: HEADER_ROW_HEIGHT * (index + 1) }));
17
+ function it({
18
+ dataSource: s,
19
+ stickyItems: S,
20
+ children: C,
21
+ width: g = "100%",
22
+ height: R = "100%",
23
+ zIndex: $,
24
+ isRowHighlighted: E,
25
+ onRowClick: b,
26
+ ..._
27
+ }) {
28
+ const M = c(s.broadcasts.currentResults), p = c(s.broadcasts.currentPageIndex), u = H(null), T = F.Children.toArray(C).filter(
29
+ (t) => P(t) && t.type === L
30
+ ), [n] = W(
31
+ () => new U({
32
+ dataSource: s,
33
+ columns: T.map((t) => ({
34
+ fieldName: t.props.fieldName,
35
+ width: t.props.width ?? 100,
36
+ sortMode: "none",
37
+ canSort: t.props.canSort ?? !1,
38
+ heading: t.props.heading,
39
+ footer: t.props.footer,
40
+ sticky: t.props.sticky,
41
+ render: t.props.render
42
+ })),
43
+ scrollerRef: u
44
+ })
45
+ ), d = c(n.broadcasts.columnInfo), f = j(s.broadcasts.currentResults), B = c(n.broadcasts.showFooter), D = typeof b == "function";
46
+ return /* @__PURE__ */ r(
47
+ A,
48
+ {
49
+ ref: u,
50
+ zIndex: $,
51
+ className: w["table-body-wrapper"],
52
+ style: { overflow: "auto" },
53
+ ..._,
54
+ children: /* @__PURE__ */ a(
55
+ "table",
56
+ {
57
+ className: w["table-body"],
58
+ "data-is-clickable": D,
59
+ style: { width: g, height: R },
60
+ children: [
61
+ /* @__PURE__ */ r("thead", { children: /* @__PURE__ */ a("tr", { children: [
62
+ d.map((t, e) => /* @__PURE__ */ r(
63
+ V,
64
+ {
65
+ index: e,
66
+ heading: N(t.heading),
67
+ sticky: t.sticky,
68
+ onResize: (o) => n.setColumnWidth(e, o),
69
+ width: t.width,
70
+ sortMode: t.sortMode,
71
+ onSortModeChange: () => n.setNextColumnSortMode(e),
72
+ canSort: t.canSort
73
+ },
74
+ `h-${e}`
75
+ )),
76
+ /* @__PURE__ */ r("th", { className: "fill" }, "fill")
77
+ ] }) }),
78
+ /* @__PURE__ */ a("tbody", { children: [
79
+ S?.map((t, e) => /* @__PURE__ */ a("tr", { "data-sticky-row": !0, children: [
80
+ d.map((o, m) => {
81
+ const i = o.fieldName, l = o.render, h = l ? l(t) : i ? String(t[i] ?? "") : "";
82
+ return /* @__PURE__ */ r(
83
+ v,
84
+ {
85
+ content: h,
86
+ sticky: o.sticky,
87
+ width: o.width,
88
+ top: k * (e + 1)
89
+ },
90
+ `${p}-${e}-${m}`
91
+ );
92
+ }),
93
+ /* @__PURE__ */ r(z, { top: k * (e + 1) + 1 })
94
+ ] }, `sticky-${e}`)),
95
+ f === y.SUCCESS && M.map((t, e) => /* @__PURE__ */ a(
96
+ "tr",
97
+ {
98
+ "data-selected": E?.(t, e),
99
+ onClick: () => b?.(t, e),
100
+ children: [
101
+ d.map((o, m) => {
102
+ const i = o.fieldName, l = o.render, h = l ? l(t) : i ? String(t[i] ?? "") : "";
103
+ return /* @__PURE__ */ r(
104
+ I,
105
+ {
106
+ content: h,
107
+ sticky: o.sticky,
108
+ width: o.width
109
+ },
110
+ `${p}-${e}-${m}`
111
+ );
57
112
  }),
58
- React.createElement(StickyRowFillCell, { top: HEADER_ROW_HEIGHT * (index + 1) + 1 })))),
59
- itemsStatus === Status.SUCCESS &&
60
- rows.map((item, rowIndex) => (React.createElement("tr", { key: `${page}-${rowIndex}`, "data-selected": isRowHighlighted?.(item, rowIndex), onClick: () => onRowClick?.(item, rowIndex) },
61
- columnInfo.map((col, colIndex) => {
62
- const fieldName = col.fieldName;
63
- const render = col.render;
64
- const content = render
65
- ? render(item)
66
- : fieldName
67
- ? item[fieldName]
68
- : '';
69
- return (React.createElement(DataCell, { key: `${page}-${rowIndex}-${colIndex}`, content: content, sticky: col.sticky, width: col.width }));
70
- }),
71
- React.createElement("td", { key: "fill", className: "fill" })))),
72
- itemsStatus === Status.PENDING && 'Loading...',
73
- itemsStatus === Status.ERROR && 'Error loading data',
74
- React.createElement("tr", { key: "fill", className: "fill" })),
75
- showFooter && (React.createElement("tfoot", null,
76
- React.createElement("tr", null,
77
- columnInfo.map((col, colIndex) => (React.createElement(FooterCell, { key: `footer-${colIndex}`, content: wrapContent(col.footer), sticky: col.sticky, width: col.width }))),
78
- React.createElement("td", { key: "footer-fill", className: "fill" })))))));
113
+ /* @__PURE__ */ r("td", { className: "fill" }, "fill")
114
+ ]
115
+ },
116
+ `${p}-${e}`
117
+ )),
118
+ f === y.PENDING && "Loading...",
119
+ f === y.ERROR && "Error loading data",
120
+ /* @__PURE__ */ r("tr", { className: "fill" }, "fill")
121
+ ] }),
122
+ B && /* @__PURE__ */ r("tfoot", { children: /* @__PURE__ */ a("tr", { children: [
123
+ d.map((t, e) => /* @__PURE__ */ r(
124
+ O,
125
+ {
126
+ content: N(t.footer),
127
+ sticky: t.sticky,
128
+ width: t.width
129
+ },
130
+ `footer-${e}`
131
+ )),
132
+ /* @__PURE__ */ r("td", { className: "fill" }, "footer-fill")
133
+ ] }) })
134
+ ]
135
+ }
136
+ )
137
+ }
138
+ );
79
139
  }
80
- //# sourceMappingURL=table.js.map
140
+ export {
141
+ it as Table
142
+ };
143
+ //# sourceMappingURL=table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/components/table/table.tsx"],"names":[],"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';\n\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\nconst HEADER_ROW_HEIGHT = 30;\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 <table\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\" 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 * (index + 1)}\n />\n );\n })}\n <StickyRowFillCell top={HEADER_ROW_HEIGHT * (index + 1) + 1} />\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 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\" 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\" className=\"fill\"></td>\n </tr>\n </tfoot>\n )}\n </table>\n </Box>\n );\n}\n"],"names":["HEADER_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","index","HeaderCell","newSize","item","col","colIndex","fieldName","render","StickyRowDataCell","StickyRowFillCell","Status","rowIndex","DataCell","FooterCell"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- /// <reference types="react" />
2
1
  type BaseTableColumnProps<T> = {
3
2
  heading: React.ReactNode;
4
3
  footer?: React.ReactNode;
@@ -17,3 +16,4 @@ type NonSortableTableColumnProps<T> = BaseTableColumnProps<T> & {
17
16
  export type TableColumnProps<T> = SortableTableColumnProps<T> | NonSortableTableColumnProps<T>;
18
17
  export declare function TableColumn<T>(_props: TableColumnProps<T>): null;
19
18
  export {};
19
+ //# sourceMappingURL=table_column.d.ts.map
@@ -0,0 +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;CAChB,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,6 +1,7 @@
1
- // This component never gets rendered. It is given as children to the
2
- // table body as configuration
3
- export function TableColumn(_props) {
4
- return null;
1
+ function l(n) {
2
+ return null;
5
3
  }
6
- //# sourceMappingURL=table_column.js.map
4
+ export {
5
+ l as TableColumn
6
+ };
7
+ //# sourceMappingURL=table_column.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table_column.js","sourceRoot":"","sources":["../../../src/components/table/table_column.tsx"],"names":[],"mappings":"AAsBA,qEAAqE;AACrE,8BAA8B;AAC9B,MAAM,UAAU,WAAW,CAAI,MAA2B;IACxD,OAAO,IAAI,CAAC;AACd,CAAC"}
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":"AAwBO,SAASA,EAAeC,GAA6B;AAC1D,SAAO;AACT;"}
@@ -24,8 +24,8 @@ export declare class TablePresenter {
24
24
  scrollerRef?: RefObject<HTMLDivElement>;
25
25
  });
26
26
  get broadcasts(): {
27
- columnInfo: import("@tcn/state").IBroadcast<ColumnInfo[]>;
28
- showFooter: import("@tcn/state").IBroadcast<boolean>;
27
+ columnInfo: import('@tcn/state').IBroadcast<ColumnInfo[]>;
28
+ showFooter: import('@tcn/state').IBroadcast<boolean>;
29
29
  };
30
30
  setColumnWidth(index: number, width: number): void;
31
31
  setColumnSortMode(index: number, sortMode: SortMode): void;
@@ -33,3 +33,4 @@ export declare class TablePresenter {
33
33
  dispose(): void;
34
34
  }
35
35
  export {};
36
+ //# sourceMappingURL=table_presenter.d.ts.map
@@ -0,0 +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;CACpB,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,63 +1,46 @@
1
- import { Signal } from '@tcn/state';
2
- const sortModes = ['none', 'asc', 'desc'];
3
- export class TablePresenter {
4
- _columnInfo = new Signal([]);
5
- _dataSource;
6
- _showFooter = new Signal(false);
7
- _broadcasts = {
8
- columnInfo: this._columnInfo.broadcast,
9
- showFooter: this._showFooter.broadcast,
10
- };
11
- _scrollerRef;
12
- // holding a reference to this subscription prevents it from being garbage collected
13
- _pageSubscription;
14
- constructor({ dataSource, columns, scrollerRef, }) {
15
- this._dataSource = dataSource;
16
- this._columnInfo.set(columns);
17
- this._scrollerRef = scrollerRef;
18
- const showFooter = columns.some(column => column.footer);
19
- this._showFooter.set(showFooter);
20
- this._pageSubscription = this._dataSource.broadcasts.currentPageIndex.subscribe(_ => {
21
- if (this._scrollerRef?.current) {
22
- this._scrollerRef.current.scrollTo({ top: 0 });
23
- }
24
- });
25
- }
26
- get broadcasts() {
27
- return this._broadcasts;
28
- }
29
- setColumnWidth(index, width) {
30
- this._columnInfo.transform(columnInfo => {
31
- columnInfo[index].width = width;
32
- return columnInfo;
33
- });
34
- }
35
- setColumnSortMode(index, sortMode) {
36
- const column = this._columnInfo.get()[index];
37
- const fieldName = column.fieldName;
38
- if (!column.canSort) {
39
- return;
40
- }
41
- if (!fieldName) {
42
- // can't sort a field without a name
43
- return;
44
- }
45
- this._dataSource.setFieldSort(fieldName, sortMode);
46
- this._columnInfo.transform(columnInfo => {
47
- columnInfo[index].sortMode = sortMode;
48
- return columnInfo;
49
- });
50
- }
51
- setNextColumnSortMode(index) {
52
- const column = this._columnInfo.get()[index];
53
- const currentMode = column.sortMode;
54
- const currentIndex = sortModes.indexOf(currentMode);
55
- const nextIndex = (currentIndex + 1) % sortModes.length;
56
- const nextMode = sortModes[nextIndex];
57
- this.setColumnSortMode(index, nextMode);
58
- }
59
- dispose() {
60
- this._pageSubscription?.unsubscribe();
61
- }
1
+ import { Signal as c } from "@tcn/state";
2
+ const n = ["none", "asc", "desc"];
3
+ class l {
4
+ _columnInfo = new c([]);
5
+ _dataSource;
6
+ _showFooter = new c(!1);
7
+ _broadcasts = {
8
+ columnInfo: this._columnInfo.broadcast,
9
+ showFooter: this._showFooter.broadcast
10
+ };
11
+ _scrollerRef;
12
+ // holding a reference to this subscription prevents it from being garbage collected
13
+ _pageSubscription;
14
+ constructor({
15
+ dataSource: o,
16
+ columns: e,
17
+ scrollerRef: t
18
+ }) {
19
+ this._dataSource = o, this._columnInfo.set(e), this._scrollerRef = t;
20
+ const r = e.some((s) => s.footer);
21
+ this._showFooter.set(r), this._pageSubscription = this._dataSource.broadcasts.currentPageIndex.subscribe((s) => {
22
+ this._scrollerRef?.current && this._scrollerRef.current.scrollTo({ top: 0 });
23
+ });
24
+ }
25
+ get broadcasts() {
26
+ return this._broadcasts;
27
+ }
28
+ setColumnWidth(o, e) {
29
+ this._columnInfo.transform((t) => (t[o].width = e, t));
30
+ }
31
+ setColumnSortMode(o, e) {
32
+ const t = this._columnInfo.get()[o], r = t.fieldName;
33
+ t.canSort && r && (this._dataSource.setFieldSort(r, e), this._columnInfo.transform((s) => (s[o].sortMode = e, s)));
34
+ }
35
+ setNextColumnSortMode(o) {
36
+ const t = this._columnInfo.get()[o].sortMode, s = (n.indexOf(t) + 1) % n.length, i = n[s];
37
+ this.setColumnSortMode(o, i);
38
+ }
39
+ dispose() {
40
+ this._pageSubscription?.unsubscribe();
41
+ }
62
42
  }
63
- //# sourceMappingURL=table_presenter.js.map
43
+ export {
44
+ l as TablePresenter
45
+ };
46
+ //# sourceMappingURL=table_presenter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table_presenter.js","sourceRoot":"","sources":["../../../src/components/table/table_presenter.ts"],"names":[],"mappings":"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"}
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;AAa7C,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;"}
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
1
  export declare function DateFieldFilter({ fieldName, label, }: {
3
2
  fieldName: string;
4
3
  label: string;
5
- }): React.JSX.Element;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=date_field_filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date_field_filter.d.ts","sourceRoot":"","sources":["../../../../src/components/table_filter_panel/field_filters/date_field_filter.tsx"],"names":[],"mappings":"AAUA,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,KAAK,GACN,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,2CAqDA"}
@@ -1,34 +1,60 @@
1
- import { CrossCircleIcon } from '@tcn/icons/cross_circle_icon';
2
- import { useSignalValue } from '@tcn/state';
3
- import { Button } from '@tcn/ui/actions';
4
- import { DatePickerInput } from '@tcn/ui/inputs';
5
- import { Box, HStack, VStack } from '@tcn/ui/stacks';
6
- import { BodyText, Title } from '@tcn/ui/typography';
7
- import React from 'react';
8
- import { useFieldFilterStrategy } from "./use_field_filter_strategy.js";
9
- import { DateFieldFilterPresenter } from './date_field_filter_presenter.js';
10
- export function DateFieldFilter({ fieldName, label, }) {
11
- const presenter = useFieldFilterStrategy(DateFieldFilterPresenter, fieldName);
12
- const startDate = useSignalValue(presenter.broadcasts.startDate);
13
- const endDate = useSignalValue(presenter.broadcasts.endDate);
14
- return (React.createElement(VStack, { gap: "4px" },
15
- React.createElement(Box, { width: "flex" },
16
- React.createElement(Title, { size: "md" }, label)),
17
- React.createElement(HStack, { gap: "4px" },
18
- React.createElement(Box, { width: "auto" },
19
- React.createElement(BodyText, { size: "lg" }, "Start")),
20
- React.createElement(Box, { width: "flex" },
21
- React.createElement(DatePickerInput, { value: startDate, onChange: value => presenter.setStartDate(value) })),
22
- React.createElement(Box, { width: "auto" },
23
- React.createElement(Button, { onClick: () => presenter.setStartDate(null), hierarchy: "tertiary", disabled: startDate == null },
24
- React.createElement(CrossCircleIcon, null)))),
25
- React.createElement(HStack, { gap: "4px" },
26
- React.createElement(Box, { width: "auto" },
27
- React.createElement(BodyText, { size: "lg" }, "End")),
28
- React.createElement(Box, { width: "flex" },
29
- React.createElement(DatePickerInput, { value: endDate, onChange: value => presenter.setEndDate(value) })),
30
- React.createElement(Box, { width: "auto" },
31
- React.createElement(Button, { onClick: () => presenter.setEndDate(null), hierarchy: "tertiary", disabled: endDate == null },
32
- React.createElement(CrossCircleIcon, null))))));
1
+ import { jsxs as l, jsx as t } from "react/jsx-runtime";
2
+ import { CrossCircleIcon as d } from "@tcn/icons/cross_circle_icon.js";
3
+ import { useSignalValue as o } from "@tcn/state";
4
+ import { Button as c } from "@tcn/ui/actions";
5
+ import { DatePickerInput as h } from "@tcn/ui/inputs";
6
+ import { VStack as f, Box as e, HStack as s } from "@tcn/ui/stacks";
7
+ import { Title as x, BodyText as m } from "@tcn/ui/typography";
8
+ import { useFieldFilterStrategy as D } from "./use_field_filter_strategy.js";
9
+ import { DateFieldFilterPresenter as g } from "./date_field_filter_presenter.js";
10
+ function E({
11
+ fieldName: p,
12
+ label: u
13
+ }) {
14
+ const r = D(g, p), a = o(r.broadcasts.startDate), n = o(r.broadcasts.endDate);
15
+ return /* @__PURE__ */ l(f, { gap: "4px", children: [
16
+ /* @__PURE__ */ t(e, { width: "flex", children: /* @__PURE__ */ t(x, { size: "md", children: u }) }),
17
+ /* @__PURE__ */ l(s, { gap: "4px", children: [
18
+ /* @__PURE__ */ t(e, { width: "auto", children: /* @__PURE__ */ t(m, { size: "lg", children: "Start" }) }),
19
+ /* @__PURE__ */ t(e, { width: "flex", children: /* @__PURE__ */ t(
20
+ h,
21
+ {
22
+ value: a,
23
+ onChange: (i) => r.setStartDate(i)
24
+ }
25
+ ) }),
26
+ /* @__PURE__ */ t(e, { width: "auto", children: /* @__PURE__ */ t(
27
+ c,
28
+ {
29
+ onClick: () => r.setStartDate(null),
30
+ hierarchy: "tertiary",
31
+ disabled: a == null,
32
+ children: /* @__PURE__ */ t(d, {})
33
+ }
34
+ ) })
35
+ ] }),
36
+ /* @__PURE__ */ l(s, { gap: "4px", children: [
37
+ /* @__PURE__ */ t(e, { width: "auto", children: /* @__PURE__ */ t(m, { size: "lg", children: "End" }) }),
38
+ /* @__PURE__ */ t(e, { width: "flex", children: /* @__PURE__ */ t(
39
+ h,
40
+ {
41
+ value: n,
42
+ onChange: (i) => r.setEndDate(i)
43
+ }
44
+ ) }),
45
+ /* @__PURE__ */ t(e, { width: "auto", children: /* @__PURE__ */ t(
46
+ c,
47
+ {
48
+ onClick: () => r.setEndDate(null),
49
+ hierarchy: "tertiary",
50
+ disabled: n == null,
51
+ children: /* @__PURE__ */ t(d, {})
52
+ }
53
+ ) })
54
+ ] })
55
+ ] });
33
56
  }
34
- //# sourceMappingURL=date_field_filter.js.map
57
+ export {
58
+ E as DateFieldFilter
59
+ };
60
+ //# sourceMappingURL=date_field_filter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"date_field_filter.js","sourceRoot":"","sources":["../../../../src/components/table_filter_panel/field_filters/date_field_filter.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,uCAAqF;AACtH,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAE5E,MAAM,UAAU,eAAe,CAAC,EAC9B,SAAS,EACT,KAAK,GACgC;IACrC,MAAM,SAAS,GAAG,sBAAsB,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;IAE9E,MAAM,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE7D,OAAO,CACL,oBAAC,MAAM,IAAC,GAAG,EAAC,KAAK;QACf,oBAAC,GAAG,IAAC,KAAK,EAAC,MAAM;YACf,oBAAC,KAAK,IAAC,IAAI,EAAC,IAAI,IAAE,KAAK,CAAS,CAC5B;QACN,oBAAC,MAAM,IAAC,GAAG,EAAC,KAAK;YACf,oBAAC,GAAG,IAAC,KAAK,EAAC,MAAM;gBACf,oBAAC,QAAQ,IAAC,IAAI,EAAC,IAAI,YAAiB,CAChC;YACN,oBAAC,GAAG,IAAC,KAAK,EAAC,MAAM;gBACf,oBAAC,eAAe,IACd,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,GAChD,CACE;YACN,oBAAC,GAAG,IAAC,KAAK,EAAC,MAAM;gBACf,oBAAC,MAAM,IACL,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,EAC3C,SAAS,EAAC,UAAU,EACpB,QAAQ,EAAE,SAAS,IAAI,IAAI;oBAE3B,oBAAC,eAAe,OAAG,CACZ,CACL,CACC;QACT,oBAAC,MAAM,IAAC,GAAG,EAAC,KAAK;YACf,oBAAC,GAAG,IAAC,KAAK,EAAC,MAAM;gBACf,oBAAC,QAAQ,IAAC,IAAI,EAAC,IAAI,UAAe,CAC9B;YACN,oBAAC,GAAG,IAAC,KAAK,EAAC,MAAM;gBACf,oBAAC,eAAe,IACd,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,GAC9C,CACE;YACN,oBAAC,GAAG,IAAC,KAAK,EAAC,MAAM;gBACf,oBAAC,MAAM,IACL,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EACzC,SAAS,EAAC,UAAU,EACpB,QAAQ,EAAE,OAAO,IAAI,IAAI;oBAEzB,oBAAC,eAAe,OAAG,CACZ,CACL,CACC,CACF,CACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"date_field_filter.js","sources":["../../../../src/components/table_filter_panel/field_filters/date_field_filter.tsx"],"sourcesContent":["import { CrossCircleIcon } from '@tcn/icons/cross_circle_icon.js';\nimport { useSignalValue } from '@tcn/state';\nimport { Button } from '@tcn/ui/actions';\nimport { DatePickerInput } from '@tcn/ui/inputs';\nimport { Box, HStack, VStack } from '@tcn/ui/stacks';\nimport { BodyText, Title } from '@tcn/ui/typography';\nimport React from 'react';\nimport { useFieldFilterStrategy } from './use_field_filter_strategy.js';\nimport { DateFieldFilterPresenter } from './date_field_filter_presenter.js';\n\nexport function DateFieldFilter({\n fieldName,\n label,\n}: {\n fieldName: string;\n label: string;\n}) {\n const presenter = useFieldFilterStrategy(DateFieldFilterPresenter, fieldName);\n\n const startDate = useSignalValue(presenter.broadcasts.startDate);\n const endDate = useSignalValue(presenter.broadcasts.endDate);\n\n return (\n <VStack gap=\"4px\">\n <Box width=\"flex\">\n <Title size=\"md\">{label}</Title>\n </Box>\n <HStack gap=\"4px\">\n <Box width=\"auto\">\n <BodyText size=\"lg\">Start</BodyText>\n </Box>\n <Box width=\"flex\">\n <DatePickerInput\n value={startDate}\n onChange={value => presenter.setStartDate(value)}\n />\n </Box>\n <Box width=\"auto\">\n <Button\n onClick={() => presenter.setStartDate(null)}\n hierarchy=\"tertiary\"\n disabled={startDate == null}\n >\n <CrossCircleIcon />\n </Button>\n </Box>\n </HStack>\n <HStack gap=\"4px\">\n <Box width=\"auto\">\n <BodyText size=\"lg\">End</BodyText>\n </Box>\n <Box width=\"flex\">\n <DatePickerInput\n value={endDate}\n onChange={value => presenter.setEndDate(value)}\n />\n </Box>\n <Box width=\"auto\">\n <Button\n onClick={() => presenter.setEndDate(null)}\n hierarchy=\"tertiary\"\n disabled={endDate == null}\n >\n <CrossCircleIcon />\n </Button>\n </Box>\n </HStack>\n </VStack>\n );\n}\n"],"names":["DateFieldFilter","fieldName","label","presenter","useFieldFilterStrategy","DateFieldFilterPresenter","startDate","useSignalValue","endDate","jsxs","VStack","jsx","Box","Title","HStack","BodyText","DatePickerInput","value","Button","CrossCircleIcon"],"mappings":";;;;;;;;;AAUO,SAASA,EAAgB;AAAA,EAC9B,WAAAC;AAAA,EACA,OAAAC;AACF,GAGG;AACD,QAAMC,IAAYC,EAAuBC,GAA0BJ,CAAS,GAEtEK,IAAYC,EAAeJ,EAAU,WAAW,SAAS,GACzDK,IAAUD,EAAeJ,EAAU,WAAW,OAAO;AAE3D,SACE,gBAAAM,EAACC,GAAA,EAAO,KAAI,OACV,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD,EAACE,KAAM,MAAK,MAAM,aAAM,EAAA,CAC1B;AAAA,IACA,gBAAAJ,EAACK,GAAA,EAAO,KAAI,OACV,UAAA;AAAA,MAAA,gBAAAH,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD,EAACI,KAAS,MAAK,MAAK,mBAAK,EAAA,CAC3B;AAAA,MACA,gBAAAJ,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,OAAOV;AAAA,UACP,UAAU,CAAAW,MAASd,EAAU,aAAac,CAAK;AAAA,QAAA;AAAA,MAAA,GAEnD;AAAA,MACA,gBAAAN,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,SAAS,MAAMf,EAAU,aAAa,IAAI;AAAA,UAC1C,WAAU;AAAA,UACV,UAAUG,KAAa;AAAA,UAEvB,4BAACa,GAAA,CAAA,CAAgB;AAAA,QAAA;AAAA,MAAA,EACnB,CACF;AAAA,IAAA,GACF;AAAA,IACA,gBAAAV,EAACK,GAAA,EAAO,KAAI,OACV,UAAA;AAAA,MAAA,gBAAAH,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD,EAACI,KAAS,MAAK,MAAK,iBAAG,EAAA,CACzB;AAAA,MACA,gBAAAJ,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,OAAOR;AAAA,UACP,UAAU,CAAAS,MAASd,EAAU,WAAWc,CAAK;AAAA,QAAA;AAAA,MAAA,GAEjD;AAAA,MACA,gBAAAN,EAACC,GAAA,EAAI,OAAM,QACT,UAAA,gBAAAD;AAAA,QAACO;AAAA,QAAA;AAAA,UACC,SAAS,MAAMf,EAAU,WAAW,IAAI;AAAA,UACxC,WAAU;AAAA,UACV,UAAUK,KAAW;AAAA,UAErB,4BAACW,GAAA,CAAA,CAAgB;AAAA,QAAA;AAAA,MAAA,EACnB,CACF;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}