@alphakits/ui 2.0.10 → 2.0.12

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 (38) hide show
  1. package/dist/checkbox/index.module.css +1 -1
  2. package/dist/checkbox/index.module.css.js +7 -7
  3. package/dist/checkbox-lists/index.module.css +1 -1
  4. package/dist/checkbox-lists/index.module.css.js +8 -6
  5. package/dist/checkbox-lists/index.module.css.js.map +1 -1
  6. package/dist/filter-tag/index.module.css +1 -1
  7. package/dist/form/templates/base-form/index.js +24 -21
  8. package/dist/form/templates/base-form/index.js.map +1 -1
  9. package/dist/form/templates/filters-form/index.js +24 -21
  10. package/dist/form/templates/filters-form/index.js.map +1 -1
  11. package/dist/form/templates/rest-form/index.js +27 -24
  12. package/dist/form/templates/rest-form/index.js.map +1 -1
  13. package/dist/header-search/index.module.css +1 -1
  14. package/dist/status/index.module.css +1 -1
  15. package/dist/table/columns.js +5 -4
  16. package/dist/table/columns.js.map +1 -1
  17. package/dist/table/components/cell/index.module.css +1 -1
  18. package/dist/table/components/cells/index.js +31 -24
  19. package/dist/table/components/cells/index.js.map +1 -1
  20. package/dist/table/components/cells/index.module.css +1 -1
  21. package/dist/table/components/cells/index.module.css.js +14 -12
  22. package/dist/table/components/cells/index.module.css.js.map +1 -1
  23. package/dist/table/components/pagination/index.js +41 -40
  24. package/dist/table/components/pagination/index.js.map +1 -1
  25. package/dist/table/components/pagination/index.module.css +1 -1
  26. package/dist/table/components/pagination/index.module.css.js +16 -12
  27. package/dist/table/components/pagination/index.module.css.js.map +1 -1
  28. package/dist/table/components/table-header/index.js +39 -39
  29. package/dist/table/components/table-header/index.js.map +1 -1
  30. package/dist/table/components/table-header/index.module.css +1 -1
  31. package/dist/table/components/table-header/index.module.css.js +2 -4
  32. package/dist/table/components/table-header/index.module.css.js.map +1 -1
  33. package/dist/table/index.module.css +1 -1
  34. package/dist/table/index.module.css.js +14 -12
  35. package/dist/table/index.module.css.js.map +1 -1
  36. package/dist/table/table.js +90 -90
  37. package/dist/table/table.js.map +1 -1
  38. package/package.json +1 -1
@@ -1,138 +1,138 @@
1
1
  import { jsxs as P, jsx as a } from "react/jsx-runtime";
2
- import Y, { useMemo as E, useCallback as Z } from "react";
3
- import N from "classnames";
4
- import { Cells as $ } from "./components/cells/index.js";
5
- import { EmptyList as A } from "./components/empty-list/index.js";
6
- import { Error as R } from "./components/error/index.js";
7
- import { Loading as w } from "./components/loading/index.js";
8
- import { Pagination as tt } from "./components/pagination/index.js";
9
- import { TableHeader as rt } from "./components/table-header/index.js";
10
- import { useTableData as at } from "./hooks/use-table-data.js";
11
- import { getTags as et } from "./utils/get-tags.js";
12
- import { prepareRows as ot } from "./utils/prepare-rows.js";
13
- import l from "./index.module.css.js";
14
- function ut({
15
- columns: s,
16
- searchPlaceholder: j = "Поиск по таблице",
17
- records: C,
18
- hideSearch: h,
19
- rightHeaderAddons: b,
20
- leftHeaderAddons: g,
21
- filtersButtonLabel: H,
22
- createButtonLabel: S,
2
+ import Z, { useMemo as j, useCallback as $ } from "react";
3
+ import h from "classnames";
4
+ import { Cells as A } from "./components/cells/index.js";
5
+ import { EmptyList as R } from "./components/empty-list/index.js";
6
+ import { Error as w } from "./components/error/index.js";
7
+ import { Loading as tt } from "./components/loading/index.js";
8
+ import { Pagination as rt } from "./components/pagination/index.js";
9
+ import { TableHeader as at } from "./components/table-header/index.js";
10
+ import { useTableData as et } from "./hooks/use-table-data.js";
11
+ import { getTags as ot } from "./utils/get-tags.js";
12
+ import { prepareRows as st } from "./utils/prepare-rows.js";
13
+ import e from "./index.module.css.js";
14
+ function yt({
15
+ columns: l,
16
+ searchPlaceholder: C = "Поиск по таблице",
17
+ records: H,
18
+ hideSearch: b,
19
+ rightHeaderAddons: g,
20
+ leftHeaderAddons: u,
21
+ filtersButtonLabel: S,
22
+ createButtonLabel: _,
23
23
  loading: k,
24
24
  height: B = "fill",
25
- view: e = "default",
26
- tagsBuilder: M,
27
- promise: u,
25
+ view: o = "default",
26
+ tagsBuilder: F,
27
+ promise: y,
28
28
  onRowClick: m,
29
- onCreateClick: d,
29
+ onCreateClick: n,
30
30
  onFiltersClick: i,
31
- refetch: V,
31
+ refetch: M,
32
32
  language: c,
33
- fromPath: _ = !0
33
+ fromPath: V = !0
34
34
  }) {
35
35
  const {
36
36
  loading: q,
37
- error: y,
38
- data: T,
37
+ error: T,
38
+ data: x,
39
39
  total: z,
40
40
  params: t,
41
- pagesCount: F,
42
- updateData: n,
43
- addParam: G,
44
- removeParam: I,
45
- resetParams: x
46
- } = at({
47
- promise: u,
48
- records: C,
49
- fromPath: _
50
- }), L = E(
51
- () => [...T || []].sort(
52
- (r, o) => (r.sortPosition || 0) - (o.sortPosition || 0)
41
+ pagesCount: G,
42
+ updateData: d,
43
+ addParam: I,
44
+ removeParam: J,
45
+ resetParams: L
46
+ } = et({
47
+ promise: y,
48
+ records: H,
49
+ fromPath: V
50
+ }), v = j(
51
+ () => [...x || []].sort(
52
+ (r, s) => (r.sortPosition || 0) - (s.sortPosition || 0)
53
53
  ),
54
- [T]
55
- ), J = (r) => m == null ? void 0 : m(r, n), K = d ? () => d(n) : void 0, O = Z(
54
+ [x]
55
+ ), K = (r) => m == null ? void 0 : m(r, d), O = n ? () => n(d) : void 0, Q = $(
56
56
  (r) => {
57
- x(r);
57
+ L(r);
58
58
  },
59
- [x]
60
- ), v = () => i ? i({
61
- submitCallback: (r) => O(r),
59
+ [L]
60
+ ), D = () => i ? i({
61
+ submitCallback: (r) => Q(r),
62
62
  initialValues: t
63
63
  }) : null, p = (r) => {
64
- G(r);
65
- }, Q = (r, o) => {
66
- I(r, o);
67
- }, U = et({
64
+ I(r);
65
+ }, U = (r, s) => {
66
+ J(r, s);
67
+ }, W = ot({
68
68
  params: (t == null ? void 0 : t.where) || {},
69
- onDelete: Q,
70
- tagsBuilder: M,
71
- onClick: v
72
- }), D = E(
73
- () => ot({
74
- columns: s,
75
- view: e,
76
- data: L,
77
- refetch: V || n
69
+ onDelete: U,
70
+ tagsBuilder: F,
71
+ onClick: D
72
+ }), E = j(
73
+ () => st({
74
+ columns: l,
75
+ view: o,
76
+ data: v,
77
+ refetch: M || d
78
78
  }),
79
79
  // eslint-disable-next-line react-hooks/exhaustive-deps
80
- [L, s, e]
81
- ), f = q || k;
82
- return /* @__PURE__ */ P("div", { className: N(l.table_wrapper, l[B], l[e]), children: [
83
- (!h || b || g || d || i) && /* @__PURE__ */ a(
84
- rt,
80
+ [v, l, o]
81
+ ), f = q || k, N = !!y;
82
+ return /* @__PURE__ */ P("div", { className: h(e.table_wrapper, e[B], e[o]), children: [
83
+ (!b || g || u || n || i) && /* @__PURE__ */ a(
84
+ at,
85
85
  {
86
86
  language: c,
87
- hideSearch: h,
88
- rightHeaderAddons: b,
89
- leftHeaderAddons: g,
87
+ hideSearch: b,
88
+ rightHeaderAddons: g,
89
+ leftHeaderAddons: u,
90
90
  searchText: (t == null ? void 0 : t.searchText) || "",
91
91
  addParam: p,
92
- searchPlaceholder: j,
93
- filtersButtonLabel: H,
94
- tags: U,
95
- onCreateClick: K,
96
- createButtonLabel: S,
97
- onFiltersClick: v,
92
+ searchPlaceholder: C,
93
+ filtersButtonLabel: S,
94
+ tags: W,
95
+ onCreateClick: O,
96
+ createButtonLabel: _,
97
+ onFiltersClick: D,
98
98
  showFiltersButton: !!i,
99
- compact: e === "compact"
99
+ compact: o === "compact"
100
100
  }
101
101
  ),
102
- /* @__PURE__ */ a("div", { className: l.table, children: /* @__PURE__ */ P("table", { cellSpacing: "0", cellPadding: "0", children: [
102
+ /* @__PURE__ */ a("div", { className: h(e.table, { [e.no_footer]: !N }), children: /* @__PURE__ */ P("table", { cellSpacing: "0", cellPadding: "0", children: [
103
103
  /* @__PURE__ */ a(
104
- $,
104
+ A,
105
105
  {
106
106
  sort: t == null ? void 0 : t.sort,
107
107
  order: t == null ? void 0 : t.order,
108
108
  addParam: p,
109
- columns: s,
110
- compact: e === "compact"
109
+ columns: l,
110
+ compact: o === "compact"
111
111
  }
112
112
  ),
113
113
  /* @__PURE__ */ P("tbody", { children: [
114
- y && /* @__PURE__ */ a(R, { language: c }),
115
- !D.length && !f && !y && /* @__PURE__ */ a(A, { language: c }),
116
- f && /* @__PURE__ */ a(w, { columnsLength: s.length }),
117
- D.map(({ row: r, cells: o }) => /* @__PURE__ */ a(
114
+ T && /* @__PURE__ */ a(w, { language: c }),
115
+ !E.length && !f && !T && /* @__PURE__ */ a(R, { language: c }),
116
+ f && /* @__PURE__ */ a(tt, { columnsLength: l.length }),
117
+ E.map(({ row: r, cells: s }) => /* @__PURE__ */ a(
118
118
  "tr",
119
119
  {
120
- onClick: () => J(r),
121
- className: N({ [l.clickable]: !!m }),
120
+ onClick: () => K(r),
121
+ className: h({ [e.clickable]: !!m }),
122
122
  style: { visibility: f ? "collapse" : "visible" },
123
- children: o.map((W, X) => Y.cloneElement(W, { key: X }))
123
+ children: s.map((X, Y) => Z.cloneElement(X, { key: Y }))
124
124
  },
125
125
  String(r.id)
126
126
  ))
127
127
  ] })
128
128
  ] }) }),
129
- !!u && /* @__PURE__ */ a(
130
- tt,
129
+ N && /* @__PURE__ */ a(
130
+ rt,
131
131
  {
132
132
  language: c,
133
133
  currentPage: t ? +t.page : 1,
134
134
  recordsPerPage: t ? +t.limit : 10,
135
- pagesCount: +F,
135
+ pagesCount: +G,
136
136
  addParam: p,
137
137
  total: +z
138
138
  }
@@ -140,6 +140,6 @@ function ut({
140
140
  ] });
141
141
  }
142
142
  export {
143
- ut as Table
143
+ yt as Table
144
144
  };
145
145
  //# sourceMappingURL=table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sources":["../../src/table/table.tsx"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable react/no-array-index-key */\n/* eslint-disable @typescript-eslint/ban-types */\nimport React, {\n useCallback, useMemo,\n} from 'react';\nimport cn from 'classnames';\n\nimport { ApiMethodDeclaration, MakeServiceFromServiceDeclaration } from '../typings/api';\n\nimport { Cells } from './components/cells';\nimport { EmptyList } from './components/empty-list';\nimport { Error } from './components/error';\nimport { Loading } from './components/loading';\nimport { Pagination } from './components/pagination';\nimport { TableHeader } from './components/table-header';\nimport { useTableData } from './hooks/use-table-data';\nimport { getTags } from './utils/get-tags';\nimport { prepareRows } from './utils/prepare-rows';\nimport {\n FiltersMapper, OnFiltersClickProps, Query, TableColumns,\n} from './types';\n\nimport styles from './index.module.css';\n\ntype Records<T> =\n | {\n records: T[];\n promise?: never;\n }\n | {\n records?: never;\n promise: MakeServiceFromServiceDeclaration<\n ApiMethodDeclaration<any, { items: T[]; meta: any }>\n >;\n };\n\ntype FiltersButton =\n | {\n onFiltersClick: (props: OnFiltersClickProps) => void;\n filtersButtonLabel: string;\n }\n | {\n onFiltersClick?: never;\n filtersButtonLabel?: never;\n };\n\nexport type TableProps<T extends object> = Records<T> & {\n columns: TableColumns<T>;\n view?: 'default' | 'compact';\n searchPlaceholder?: string;\n rightHeaderAddons?: React.ReactNode;\n leftHeaderAddons?: React.ReactNode;\n createButtonLabel?: string;\n hideSearch?: boolean;\n loading?: boolean;\n height?: 'fill' | 'default';\n tagsBuilder?: (props: FiltersMapper) => JSX.Element | null;\n onCreateClick?: (refech: () => void) => void;\n refetch?: () => void;\n onRowClick?: (params: T, refech: () => void) => void;\n language: 'de' | 'ru' | 'en';\n\n /** true — параметры из URL; false — только локальное состояние. */\n fromPath?: boolean;\n} & FiltersButton;\n\nexport function Table<T extends object>({\n columns,\n searchPlaceholder = 'Поиск по таблице',\n records,\n hideSearch,\n rightHeaderAddons,\n leftHeaderAddons,\n filtersButtonLabel,\n createButtonLabel,\n loading,\n height = 'fill',\n view = 'default',\n tagsBuilder,\n promise,\n onRowClick,\n onCreateClick,\n onFiltersClick,\n refetch,\n language,\n fromPath = true,\n}: TableProps<T>) {\n const {\n loading: dataLoading,\n error,\n data,\n total,\n params,\n pagesCount,\n updateData,\n\n addParam,\n removeParam,\n resetParams,\n } = useTableData({\n promise,\n records,\n fromPath,\n });\n\n const dataSorted = useMemo(\n () => [...(data || [])].sort(\n (a: any, b: any) => (a.sortPosition || 0) - (b.sortPosition || 0),\n ),\n [data],\n );\n\n const handleRowClick = (p: T) => onRowClick?.(p, updateData);\n const handleCreateClick = onCreateClick ? () => onCreateClick(updateData) : undefined;\n\n const resetParamsHandler = useCallback(\n (param: Query) => {\n resetParams(param);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },\n [resetParams],\n );\n\n const handleFiltesClick = () =>\n (onFiltersClick\n ? onFiltersClick({\n submitCallback: (values) => resetParamsHandler(values),\n initialValues: params,\n })\n : null);\n\n const addParamHandler = (param: Query) => {\n addParam(param);\n };\n\n const removeParamHandler = (paramName: string, id?: string) => {\n removeParam(paramName, id);\n };\n\n const tags = getTags({\n params: params?.where || {},\n onDelete: removeParamHandler,\n tagsBuilder,\n onClick: handleFiltesClick,\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const rows = useMemo(\n () => prepareRows({\n columns,\n view,\n data: dataSorted,\n refetch: refetch || updateData,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataSorted, columns, view],\n );\n\n const showLoader = dataLoading || loading;\n\n return (\n <div className={ cn(styles.table_wrapper, styles[height], styles[view]) }>\n { (!hideSearch ||\n rightHeaderAddons ||\n leftHeaderAddons ||\n onCreateClick ||\n onFiltersClick) && (\n <TableHeader\n language={ language }\n hideSearch={ hideSearch }\n rightHeaderAddons={ rightHeaderAddons }\n leftHeaderAddons={ leftHeaderAddons }\n searchText={ params?.searchText || '' }\n addParam={ addParamHandler }\n searchPlaceholder={ searchPlaceholder }\n filtersButtonLabel={ filtersButtonLabel }\n tags={ tags }\n onCreateClick={ handleCreateClick }\n createButtonLabel={ createButtonLabel }\n onFiltersClick={ handleFiltesClick }\n showFiltersButton={ !!onFiltersClick }\n compact={ view === 'compact' }\n />\n ) }\n\n <div className={ styles.table }>\n <table cellSpacing=\"0\" cellPadding=\"0\">\n <Cells\n sort={ params?.sort }\n order={ params?.order }\n addParam={ addParamHandler }\n columns={ columns }\n compact={ view === 'compact' }\n />\n\n <tbody>\n { error && <Error language={ language } /> }\n\n { !rows.length && !showLoader && !error && (\n <EmptyList language={ language } />\n ) }\n\n { showLoader && <Loading columnsLength={ columns.length } /> }\n\n { rows.map(({ row, cells }) => (\n <tr\n key={ String((row as any).id) }\n onClick={ () => handleRowClick(row as T) }\n className={ cn({ [styles.clickable]: !!onRowClick }) }\n style={ { visibility: showLoader ? 'collapse' : 'visible' } }\n >\n { cells.map((cell, i) =>\n React.cloneElement(cell as any, { key: i })) }\n </tr>\n )) }\n </tbody>\n </table>\n </div>\n\n { !!promise && (\n <Pagination\n language={ language }\n currentPage={ params ? +params.page : 1 }\n recordsPerPage={ params ? +params.limit : 10 }\n pagesCount={ +pagesCount }\n addParam={ addParamHandler }\n total={ +total }\n />\n ) }\n </div>\n );\n}\n"],"names":["Table","columns","searchPlaceholder","records","hideSearch","rightHeaderAddons","leftHeaderAddons","filtersButtonLabel","createButtonLabel","loading","height","view","tagsBuilder","promise","onRowClick","onCreateClick","onFiltersClick","refetch","language","fromPath","dataLoading","error","data","total","params","pagesCount","updateData","addParam","removeParam","resetParams","useTableData","dataSorted","useMemo","a","b","handleRowClick","p","handleCreateClick","resetParamsHandler","useCallback","param","handleFiltesClick","values","addParamHandler","removeParamHandler","paramName","id","tags","getTags","rows","prepareRows","showLoader","jsxs","cn","styles","jsx","TableHeader","Cells","Error","EmptyList","Loading","row","cells","cell","i","React","Pagination"],"mappings":"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"}
1
+ {"version":3,"file":"table.js","sources":["../../src/table/table.tsx"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\n/* eslint-disable react/no-array-index-key */\n/* eslint-disable @typescript-eslint/ban-types */\nimport React, {\n useCallback, useMemo,\n} from 'react';\nimport cn from 'classnames';\n\nimport { ApiMethodDeclaration, MakeServiceFromServiceDeclaration } from '../typings/api';\n\nimport { Cells } from './components/cells';\nimport { EmptyList } from './components/empty-list';\nimport { Error } from './components/error';\nimport { Loading } from './components/loading';\nimport { Pagination } from './components/pagination';\nimport { TableHeader } from './components/table-header';\nimport { useTableData } from './hooks/use-table-data';\nimport { getTags } from './utils/get-tags';\nimport { prepareRows } from './utils/prepare-rows';\nimport {\n FiltersMapper, OnFiltersClickProps, Query, TableColumns,\n} from './types';\n\nimport styles from './index.module.css';\n\ntype Records<T> =\n | {\n records: T[];\n promise?: never;\n }\n | {\n records?: never;\n promise: MakeServiceFromServiceDeclaration<\n ApiMethodDeclaration<any, { items: T[]; meta: any }>\n >;\n };\n\ntype FiltersButton =\n | {\n onFiltersClick: (props: OnFiltersClickProps) => void;\n filtersButtonLabel: string;\n }\n | {\n onFiltersClick?: never;\n filtersButtonLabel?: never;\n };\n\nexport type TableProps<T extends object> = Records<T> & {\n columns: TableColumns<T>;\n view?: 'default' | 'compact';\n searchPlaceholder?: string;\n rightHeaderAddons?: React.ReactNode;\n leftHeaderAddons?: React.ReactNode;\n createButtonLabel?: string;\n hideSearch?: boolean;\n loading?: boolean;\n height?: 'fill' | 'default';\n tagsBuilder?: (props: FiltersMapper) => JSX.Element | null;\n onCreateClick?: (refech: () => void) => void;\n refetch?: () => void;\n onRowClick?: (params: T, refech: () => void) => void;\n language: 'de' | 'ru' | 'en';\n\n /** true — параметры из URL; false — только локальное состояние. */\n fromPath?: boolean;\n} & FiltersButton;\n\nexport function Table<T extends object>({\n columns,\n searchPlaceholder = 'Поиск по таблице',\n records,\n hideSearch,\n rightHeaderAddons,\n leftHeaderAddons,\n filtersButtonLabel,\n createButtonLabel,\n loading,\n height = 'fill',\n view = 'default',\n tagsBuilder,\n promise,\n onRowClick,\n onCreateClick,\n onFiltersClick,\n refetch,\n language,\n fromPath = true,\n}: TableProps<T>) {\n const {\n loading: dataLoading,\n error,\n data,\n total,\n params,\n pagesCount,\n updateData,\n\n addParam,\n removeParam,\n resetParams,\n } = useTableData({\n promise,\n records,\n fromPath,\n });\n\n const dataSorted = useMemo(\n () => [...(data || [])].sort(\n (a: any, b: any) => (a.sortPosition || 0) - (b.sortPosition || 0),\n ),\n [data],\n );\n\n const handleRowClick = (p: T) => onRowClick?.(p, updateData);\n const handleCreateClick = onCreateClick ? () => onCreateClick(updateData) : undefined;\n\n const resetParamsHandler = useCallback(\n (param: Query) => {\n resetParams(param);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n },\n [resetParams],\n );\n\n const handleFiltesClick = () =>\n (onFiltersClick\n ? onFiltersClick({\n submitCallback: (values) => resetParamsHandler(values),\n initialValues: params,\n })\n : null);\n\n const addParamHandler = (param: Query) => {\n addParam(param);\n };\n\n const removeParamHandler = (paramName: string, id?: string) => {\n removeParam(paramName, id);\n };\n\n const tags = getTags({\n params: params?.where || {},\n onDelete: removeParamHandler,\n tagsBuilder,\n onClick: handleFiltesClick,\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const rows = useMemo(\n () => prepareRows({\n columns,\n view,\n data: dataSorted,\n refetch: refetch || updateData,\n }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dataSorted, columns, view],\n );\n\n const showLoader = dataLoading || loading;\n\n const hasFooter = !!promise;\n\n return (\n <div className={ cn(styles.table_wrapper, styles[height], styles[view]) }>\n { (!hideSearch ||\n rightHeaderAddons ||\n leftHeaderAddons ||\n onCreateClick ||\n onFiltersClick) && (\n <TableHeader\n language={ language }\n hideSearch={ hideSearch }\n rightHeaderAddons={ rightHeaderAddons }\n leftHeaderAddons={ leftHeaderAddons }\n searchText={ params?.searchText || '' }\n addParam={ addParamHandler }\n searchPlaceholder={ searchPlaceholder }\n filtersButtonLabel={ filtersButtonLabel }\n tags={ tags }\n onCreateClick={ handleCreateClick }\n createButtonLabel={ createButtonLabel }\n onFiltersClick={ handleFiltesClick }\n showFiltersButton={ !!onFiltersClick }\n compact={ view === 'compact' }\n />\n ) }\n\n <div className={ cn(styles.table, { [styles.no_footer]: !hasFooter }) }>\n <table cellSpacing=\"0\" cellPadding=\"0\">\n <Cells\n sort={ params?.sort }\n order={ params?.order }\n addParam={ addParamHandler }\n columns={ columns }\n compact={ view === 'compact' }\n />\n\n <tbody>\n { error && <Error language={ language } /> }\n\n { !rows.length && !showLoader && !error && (\n <EmptyList language={ language } />\n ) }\n\n { showLoader && <Loading columnsLength={ columns.length } /> }\n\n { rows.map(({ row, cells }) => (\n <tr\n key={ String((row as any).id) }\n onClick={ () => handleRowClick(row as T) }\n className={ cn({ [styles.clickable]: !!onRowClick }) }\n style={ { visibility: showLoader ? 'collapse' : 'visible' } }\n >\n { cells.map((cell, i) =>\n React.cloneElement(cell as any, { key: i })) }\n </tr>\n )) }\n </tbody>\n </table>\n </div>\n\n { hasFooter && (\n <Pagination\n language={ language }\n currentPage={ params ? +params.page : 1 }\n recordsPerPage={ params ? +params.limit : 10 }\n pagesCount={ +pagesCount }\n addParam={ addParamHandler }\n total={ +total }\n />\n ) }\n </div>\n );\n}\n"],"names":["Table","columns","searchPlaceholder","records","hideSearch","rightHeaderAddons","leftHeaderAddons","filtersButtonLabel","createButtonLabel","loading","height","view","tagsBuilder","promise","onRowClick","onCreateClick","onFiltersClick","refetch","language","fromPath","dataLoading","error","data","total","params","pagesCount","updateData","addParam","removeParam","resetParams","useTableData","dataSorted","useMemo","a","b","handleRowClick","p","handleCreateClick","resetParamsHandler","useCallback","param","handleFiltesClick","values","addParamHandler","removeParamHandler","paramName","id","tags","getTags","rows","prepareRows","showLoader","hasFooter","jsxs","cn","styles","jsx","TableHeader","Cells","Error","EmptyList","Loading","row","cells","cell","i","React","Pagination"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alphakits/ui",
3
- "version": "2.0.10",
3
+ "version": "2.0.12",
4
4
  "files": [
5
5
  "dist"
6
6
  ],