@contember/react-board 1.3.0-alpha.10

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 (108) hide show
  1. package/dist/development/Board.cjs +116 -0
  2. package/dist/development/Board.cjs.map +1 -0
  3. package/dist/development/Board.js +116 -0
  4. package/dist/development/Board.js.map +1 -0
  5. package/dist/development/const.cjs +5 -0
  6. package/dist/development/const.cjs.map +1 -0
  7. package/dist/development/const.js +5 -0
  8. package/dist/development/const.js.map +1 -0
  9. package/dist/development/index.cjs +11 -0
  10. package/dist/development/index.cjs.map +1 -0
  11. package/dist/development/index.js +11 -0
  12. package/dist/development/index.js.map +1 -0
  13. package/dist/development/internal/useBoardColumns.cjs +44 -0
  14. package/dist/development/internal/useBoardColumns.cjs.map +1 -0
  15. package/dist/development/internal/useBoardColumns.js +44 -0
  16. package/dist/development/internal/useBoardColumns.js.map +1 -0
  17. package/dist/development/internal/useBoardItemsMethods.cjs +100 -0
  18. package/dist/development/internal/useBoardItemsMethods.cjs.map +1 -0
  19. package/dist/development/internal/useBoardItemsMethods.js +100 -0
  20. package/dist/development/internal/useBoardItemsMethods.js.map +1 -0
  21. package/dist/development/internal/useGroupItemsByColumn.cjs +19 -0
  22. package/dist/development/internal/useGroupItemsByColumn.cjs.map +1 -0
  23. package/dist/development/internal/useGroupItemsByColumn.js +19 -0
  24. package/dist/development/internal/useGroupItemsByColumn.js.map +1 -0
  25. package/dist/development/useDynamicBoard.cjs +99 -0
  26. package/dist/development/useDynamicBoard.cjs.map +1 -0
  27. package/dist/development/useDynamicBoard.js +99 -0
  28. package/dist/development/useDynamicBoard.js.map +1 -0
  29. package/dist/development/useStaticBoard.cjs +51 -0
  30. package/dist/development/useStaticBoard.cjs.map +1 -0
  31. package/dist/development/useStaticBoard.js +51 -0
  32. package/dist/development/useStaticBoard.js.map +1 -0
  33. package/dist/development/utils/arrayMove.cjs +9 -0
  34. package/dist/development/utils/arrayMove.cjs.map +1 -0
  35. package/dist/development/utils/arrayMove.js +9 -0
  36. package/dist/development/utils/arrayMove.js.map +1 -0
  37. package/dist/production/Board.cjs +116 -0
  38. package/dist/production/Board.cjs.map +1 -0
  39. package/dist/production/Board.js +116 -0
  40. package/dist/production/Board.js.map +1 -0
  41. package/dist/production/const.cjs +5 -0
  42. package/dist/production/const.cjs.map +1 -0
  43. package/dist/production/const.js +5 -0
  44. package/dist/production/const.js.map +1 -0
  45. package/dist/production/index.cjs +11 -0
  46. package/dist/production/index.cjs.map +1 -0
  47. package/dist/production/index.js +11 -0
  48. package/dist/production/index.js.map +1 -0
  49. package/dist/production/internal/useBoardColumns.cjs +44 -0
  50. package/dist/production/internal/useBoardColumns.cjs.map +1 -0
  51. package/dist/production/internal/useBoardColumns.js +44 -0
  52. package/dist/production/internal/useBoardColumns.js.map +1 -0
  53. package/dist/production/internal/useBoardItemsMethods.cjs +100 -0
  54. package/dist/production/internal/useBoardItemsMethods.cjs.map +1 -0
  55. package/dist/production/internal/useBoardItemsMethods.js +100 -0
  56. package/dist/production/internal/useBoardItemsMethods.js.map +1 -0
  57. package/dist/production/internal/useGroupItemsByColumn.cjs +19 -0
  58. package/dist/production/internal/useGroupItemsByColumn.cjs.map +1 -0
  59. package/dist/production/internal/useGroupItemsByColumn.js +19 -0
  60. package/dist/production/internal/useGroupItemsByColumn.js.map +1 -0
  61. package/dist/production/useDynamicBoard.cjs +99 -0
  62. package/dist/production/useDynamicBoard.cjs.map +1 -0
  63. package/dist/production/useDynamicBoard.js +99 -0
  64. package/dist/production/useDynamicBoard.js.map +1 -0
  65. package/dist/production/useStaticBoard.cjs +51 -0
  66. package/dist/production/useStaticBoard.cjs.map +1 -0
  67. package/dist/production/useStaticBoard.js +51 -0
  68. package/dist/production/useStaticBoard.js.map +1 -0
  69. package/dist/production/utils/arrayMove.cjs +9 -0
  70. package/dist/production/utils/arrayMove.cjs.map +1 -0
  71. package/dist/production/utils/arrayMove.js +9 -0
  72. package/dist/production/utils/arrayMove.js.map +1 -0
  73. package/dist/types/Board.d.ts +10 -0
  74. package/dist/types/Board.d.ts.map +1 -0
  75. package/dist/types/BoardBindingProps.d.ts +36 -0
  76. package/dist/types/BoardBindingProps.d.ts.map +1 -0
  77. package/dist/types/const.d.ts +2 -0
  78. package/dist/types/const.d.ts.map +1 -0
  79. package/dist/types/index.d.ts +7 -0
  80. package/dist/types/index.d.ts.map +1 -0
  81. package/dist/types/internal/useBoardColumns.d.ts +11 -0
  82. package/dist/types/internal/useBoardColumns.d.ts.map +1 -0
  83. package/dist/types/internal/useBoardItemsMethods.d.ts +15 -0
  84. package/dist/types/internal/useBoardItemsMethods.d.ts.map +1 -0
  85. package/dist/types/internal/useGroupItemsByColumn.d.ts +5 -0
  86. package/dist/types/internal/useGroupItemsByColumn.d.ts.map +1 -0
  87. package/dist/types/tsconfig.tsbuildinfo +1 -0
  88. package/dist/types/types.d.ts +31 -0
  89. package/dist/types/types.d.ts.map +1 -0
  90. package/dist/types/useDynamicBoard.d.ts +9 -0
  91. package/dist/types/useDynamicBoard.d.ts.map +1 -0
  92. package/dist/types/useStaticBoard.d.ts +8 -0
  93. package/dist/types/useStaticBoard.d.ts.map +1 -0
  94. package/dist/types/utils/arrayMove.d.ts +2 -0
  95. package/dist/types/utils/arrayMove.d.ts.map +1 -0
  96. package/package.json +48 -0
  97. package/src/Board.tsx +156 -0
  98. package/src/BoardBindingProps.ts +45 -0
  99. package/src/const.ts +1 -0
  100. package/src/index.ts +6 -0
  101. package/src/internal/useBoardColumns.ts +57 -0
  102. package/src/internal/useBoardItemsMethods.ts +141 -0
  103. package/src/internal/useGroupItemsByColumn.ts +19 -0
  104. package/src/tsconfig.json +9 -0
  105. package/src/types.ts +64 -0
  106. package/src/useDynamicBoard.ts +135 -0
  107. package/src/useStaticBoard.ts +64 -0
  108. package/src/utils/arrayMove.ts +5 -0
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const reactBinding = require("@contember/react-binding");
5
+ const useDynamicBoard = require("./useDynamicBoard.cjs");
6
+ const useStaticBoard = require("./useStaticBoard.cjs");
7
+ const createBoard = ({ Renderer, ItemStaticRender, ColumnStaticRender }) => {
8
+ const TopLevelDynamicBoard = reactBinding.Component(({ entities, orderBy, limit, offset, columns, columnsSortableBy, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {
9
+ const itemsAccessor = reactBinding.useEntityListSubTree({ entities, orderBy, limit, offset });
10
+ const columnsAccessor = reactBinding.useEntityListSubTree({ entities: columns });
11
+ const dynamicBoardProps = useDynamicBoard.useDynamicBoard({
12
+ columnEntities: columnsAccessor,
13
+ itemEntities: itemsAccessor,
14
+ columns,
15
+ sortableBy,
16
+ sortScope,
17
+ columnsSortableBy,
18
+ discriminationField,
19
+ nullColumn,
20
+ nullColumnPlacement
21
+ });
22
+ return /* @__PURE__ */ jsxRuntime.jsx(Renderer, { ...dynamicBoardProps, ...props });
23
+ }, ({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, columnsSortableBy, ...props }) => {
24
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
25
+ /* @__PURE__ */ jsxRuntime.jsxs(reactBinding.EntityListSubTree, { entities, orderBy, limit, offset, children: [
26
+ /* @__PURE__ */ jsxRuntime.jsx(reactBinding.HasOne, { ...typeof discriminationField === "string" ? { field: discriminationField } : discriminationField }),
27
+ sortableBy && /* @__PURE__ */ jsxRuntime.jsx(reactBinding.Field, { ...typeof sortableBy === "string" ? { field: sortableBy } : sortableBy }),
28
+ ItemStaticRender && /* @__PURE__ */ jsxRuntime.jsx(ItemStaticRender, { ...props })
29
+ ] }),
30
+ /* @__PURE__ */ jsxRuntime.jsxs(reactBinding.EntityListSubTree, { entities: columns, children: [
31
+ columnsSortableBy && /* @__PURE__ */ jsxRuntime.jsx(reactBinding.Field, { ...typeof columnsSortableBy === "string" ? { field: columnsSortableBy } : columnsSortableBy }),
32
+ ColumnStaticRender && /* @__PURE__ */ jsxRuntime.jsx(ColumnStaticRender, { ...props })
33
+ ] })
34
+ ] });
35
+ });
36
+ const RelativeDynamicBoard = reactBinding.Component(({ field, orderBy, limit, offset, columns, columnsSortableBy, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {
37
+ const itemsAccessor = reactBinding.useEntityList({ field, orderBy, limit, offset });
38
+ const columnsAccessor = reactBinding.useEntityListSubTree({ entities: columns });
39
+ const dynamicBoardProps = useDynamicBoard.useDynamicBoard({
40
+ columnEntities: columnsAccessor,
41
+ itemEntities: itemsAccessor,
42
+ columns,
43
+ sortableBy,
44
+ sortScope,
45
+ columnsSortableBy,
46
+ discriminationField,
47
+ nullColumn,
48
+ nullColumnPlacement
49
+ });
50
+ return /* @__PURE__ */ jsxRuntime.jsx(Renderer, { ...dynamicBoardProps, ...props });
51
+ }, ({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, columnsSortableBy, ...props }) => {
52
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
53
+ /* @__PURE__ */ jsxRuntime.jsxs(reactBinding.HasMany, { field, orderBy, limit, offset, children: [
54
+ /* @__PURE__ */ jsxRuntime.jsx(reactBinding.HasOne, { ...typeof discriminationField === "string" ? { field: discriminationField } : discriminationField }),
55
+ sortableBy && /* @__PURE__ */ jsxRuntime.jsx(reactBinding.Field, { ...typeof sortableBy === "string" ? { field: sortableBy } : sortableBy }),
56
+ ItemStaticRender && /* @__PURE__ */ jsxRuntime.jsx(ItemStaticRender, { ...props })
57
+ ] }),
58
+ /* @__PURE__ */ jsxRuntime.jsxs(reactBinding.EntityListSubTree, { entities: columns, children: [
59
+ columnsSortableBy && /* @__PURE__ */ jsxRuntime.jsx(reactBinding.Field, { ...typeof columnsSortableBy === "string" ? { field: columnsSortableBy } : columnsSortableBy }),
60
+ ColumnStaticRender && /* @__PURE__ */ jsxRuntime.jsx(ColumnStaticRender, { ...props })
61
+ ] })
62
+ ] });
63
+ });
64
+ const staticBoardItemInnerRender = ({ discriminationField, sortableBy, ...props }) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
65
+ /* @__PURE__ */ jsxRuntime.jsx(reactBinding.Field, { ...typeof discriminationField === "string" ? { field: discriminationField } : discriminationField }),
66
+ sortableBy && /* @__PURE__ */ jsxRuntime.jsx(reactBinding.Field, { ...typeof sortableBy === "string" ? { field: sortableBy } : sortableBy }),
67
+ ItemStaticRender && /* @__PURE__ */ jsxRuntime.jsx(ItemStaticRender, { ...props })
68
+ ] });
69
+ const TopLevelStaticBoard = reactBinding.Component(({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {
70
+ const itemsAccessor = reactBinding.useEntityListSubTree({ entities, orderBy, limit, offset });
71
+ const staticBoardProps = useStaticBoard.useStaticBoard({
72
+ itemEntities: itemsAccessor,
73
+ columns,
74
+ sortableBy,
75
+ sortScope,
76
+ discriminationField,
77
+ nullColumn,
78
+ nullColumnPlacement
79
+ });
80
+ return /* @__PURE__ */ jsxRuntime.jsx(Renderer, { ...staticBoardProps, ...props });
81
+ }, ({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, ...props }) => {
82
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(reactBinding.EntityListSubTree, { entities, orderBy, limit, offset, children: staticBoardItemInnerRender({ sortableBy, discriminationField, ...props }) }) });
83
+ });
84
+ const RelativeStaticBoard = reactBinding.Component(({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {
85
+ const itemsAccessor = reactBinding.useEntityList({ field, orderBy, limit, offset });
86
+ const staticBoardProps = useStaticBoard.useStaticBoard({
87
+ itemEntities: itemsAccessor,
88
+ columns,
89
+ sortableBy,
90
+ sortScope,
91
+ discriminationField,
92
+ nullColumn,
93
+ nullColumnPlacement
94
+ });
95
+ return /* @__PURE__ */ jsxRuntime.jsx(Renderer, { ...staticBoardProps, ...props });
96
+ }, ({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, ...props }) => {
97
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(reactBinding.HasMany, { field, orderBy, limit, offset, children: staticBoardItemInnerRender({ sortableBy, discriminationField, ...props }) }) });
98
+ });
99
+ return reactBinding.Component((props) => {
100
+ if ("entities" in props) {
101
+ if (Array.isArray(props.columns)) {
102
+ return /* @__PURE__ */ jsxRuntime.jsx(TopLevelStaticBoard, { ...props });
103
+ } else {
104
+ return /* @__PURE__ */ jsxRuntime.jsx(TopLevelDynamicBoard, { ...props });
105
+ }
106
+ } else {
107
+ if (Array.isArray(props.columns)) {
108
+ return /* @__PURE__ */ jsxRuntime.jsx(RelativeStaticBoard, { ...props });
109
+ } else {
110
+ return /* @__PURE__ */ jsxRuntime.jsx(RelativeDynamicBoard, { ...props });
111
+ }
112
+ }
113
+ });
114
+ };
115
+ exports.createBoard = createBoard;
116
+ //# sourceMappingURL=Board.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Board.cjs","sources":["../../src/Board.tsx"],"sourcesContent":["import { Component, EntityListSubTree, Field, HasMany, HasOne, useEntityList, useEntityListSubTree } from '@contember/react-binding'\nimport { ComponentType } from 'react'\nimport { useDynamicBoard } from './useDynamicBoard'\nimport { useStaticBoard } from './useStaticBoard'\nimport { BoardBindingProps } from './BoardBindingProps'\nimport {\n\tBoardBaseProps,\n\tBoardQualifiedDynamicProps,\n\tBoardQualifiedStaticProps,\n\tBoardRelativeDynamicProps,\n\tBoardRelativeStaticProps,\n} from './types'\n\nexport type CreateBoardArgs<T extends {}> = {\n\tRenderer: ComponentType<BoardBindingProps<any> & T>\n\tItemStaticRender?: ComponentType<T>\n\tColumnStaticRender?: ComponentType<T>\n}\n\nexport const createBoard = <RendererExtraProps extends {}>({ Renderer, ItemStaticRender, ColumnStaticRender }: CreateBoardArgs<RendererExtraProps>) => {\n\n\tconst TopLevelDynamicBoard = Component<BoardQualifiedDynamicProps & RendererExtraProps>(({ entities, orderBy, limit, offset, columns, columnsSortableBy, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {\n\t\tconst itemsAccessor = useEntityListSubTree({ entities, orderBy, limit, offset })\n\t\tconst columnsAccessor = useEntityListSubTree({ entities: columns })\n\t\tconst dynamicBoardProps = useDynamicBoard({\n\t\t\tcolumnEntities: columnsAccessor,\n\t\t\titemEntities: itemsAccessor,\n\t\t\tcolumns,\n\t\t\tsortableBy,\n\t\t\tsortScope,\n\t\t\tcolumnsSortableBy,\n\t\t\tdiscriminationField,\n\t\t\tnullColumn,\n\t\t\tnullColumnPlacement,\n\t\t})\n\t\treturn (\n\t\t\t<Renderer {...dynamicBoardProps} {...props as RendererExtraProps} />\n\t\t)\n\t}, ({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, columnsSortableBy, ...props }) => {\n\t\treturn (<>\n\t\t\t<EntityListSubTree entities={entities} orderBy={orderBy} limit={limit} offset={offset}>\n\t\t\t\t<HasOne {...typeof discriminationField === 'string' ? { field: discriminationField } : discriminationField} />\n\t\t\t\t{sortableBy && <Field {...typeof sortableBy === 'string' ? { field: sortableBy } : sortableBy} />}\n\t\t\t\t{ItemStaticRender && <ItemStaticRender {...props as RendererExtraProps} />}\n\t\t\t</EntityListSubTree>\n\t\t\t<EntityListSubTree entities={columns}>\n\t\t\t\t{columnsSortableBy && <Field {...typeof columnsSortableBy === 'string' ? { field: columnsSortableBy } : columnsSortableBy} />}\n\t\t\t\t{ColumnStaticRender && <ColumnStaticRender {...props as RendererExtraProps} />}\n\t\t\t</EntityListSubTree>\n\t\t</>)\n\t})\n\n\n\n\tconst RelativeDynamicBoard = Component<BoardRelativeDynamicProps & RendererExtraProps>(({ field, orderBy, limit, offset, columns, columnsSortableBy, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {\n\t\tconst itemsAccessor = useEntityList({ field, orderBy, limit, offset })\n\t\tconst columnsAccessor = useEntityListSubTree({ entities: columns })\n\t\tconst dynamicBoardProps = useDynamicBoard({\n\t\t\tcolumnEntities: columnsAccessor,\n\t\t\titemEntities: itemsAccessor,\n\t\t\tcolumns,\n\t\t\tsortableBy,\n\t\t\tsortScope,\n\t\t\tcolumnsSortableBy,\n\t\t\tdiscriminationField,\n\t\t\tnullColumn,\n\t\t\tnullColumnPlacement,\n\t\t})\n\t\treturn (\n\t\t\t<Renderer {...dynamicBoardProps} {...props as RendererExtraProps} />\n\t\t)\n\t}, ({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, columnsSortableBy, ...props }) => {\n\t\treturn (<>\n\t\t\t<HasMany field={field} orderBy={orderBy} limit={limit} offset={offset}>\n\t\t\t\t<HasOne {...typeof discriminationField === 'string' ? { field: discriminationField } : discriminationField} />\n\t\t\t\t{sortableBy && <Field {...typeof sortableBy === 'string' ? { field: sortableBy } : sortableBy} />}\n\t\t\t\t{ItemStaticRender && <ItemStaticRender {...props as RendererExtraProps} />}\n\t\t\t</HasMany>\n\t\t\t<EntityListSubTree entities={columns}>\n\t\t\t\t{columnsSortableBy && <Field {...typeof columnsSortableBy === 'string' ? { field: columnsSortableBy } : columnsSortableBy} />}\n\t\t\t\t{ColumnStaticRender && <ColumnStaticRender {...props as RendererExtraProps} />}\n\t\t\t</EntityListSubTree>\n\t\t</>)\n\t})\n\n\n\tconst staticBoardItemInnerRender = ({ discriminationField, sortableBy, ...props }: Pick<BoardQualifiedStaticProps, 'discriminationField' | 'sortableBy'> & RendererExtraProps) => <>\n\t\t<Field {...typeof discriminationField === 'string' ? { field: discriminationField } : discriminationField} />\n\t\t{sortableBy && <Field {...typeof sortableBy === 'string' ? { field: sortableBy } : sortableBy} />}\n\t\t{ItemStaticRender && <ItemStaticRender {...props as unknown as RendererExtraProps} />}\n\t</>\n\n\tconst TopLevelStaticBoard = Component<BoardQualifiedStaticProps & RendererExtraProps>(({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {\n\t\tconst itemsAccessor = useEntityListSubTree({ entities, orderBy, limit, offset })\n\t\tconst staticBoardProps = useStaticBoard({\n\t\t\titemEntities: itemsAccessor,\n\t\t\tcolumns,\n\t\t\tsortableBy,\n\t\t\tsortScope,\n\t\t\tdiscriminationField,\n\t\t\tnullColumn,\n\t\t\tnullColumnPlacement,\n\t\t})\n\t\treturn (\n\t\t\t<Renderer {...staticBoardProps} {...props as RendererExtraProps} />\n\t\t)\n\t}, ({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, ...props }) => {\n\t\treturn (<>\n\t\t\t<EntityListSubTree entities={entities} orderBy={orderBy} limit={limit} offset={offset}>\n\t\t\t\t{staticBoardItemInnerRender({ sortableBy, discriminationField, ...(props as RendererExtraProps) })}\n\t\t\t</EntityListSubTree>\n\t\t</>)\n\t})\n\n\n\tconst RelativeStaticBoard = Component<BoardRelativeStaticProps & RendererExtraProps>(({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {\n\t\tconst itemsAccessor = useEntityList({ field, orderBy, limit, offset })\n\t\tconst staticBoardProps = useStaticBoard({\n\t\t\titemEntities: itemsAccessor,\n\t\t\tcolumns,\n\t\t\tsortableBy,\n\t\t\tsortScope,\n\t\t\tdiscriminationField,\n\t\t\tnullColumn,\n\t\t\tnullColumnPlacement,\n\t\t})\n\t\treturn (\n\t\t\t<Renderer {...staticBoardProps} {...props as RendererExtraProps} />\n\t\t)\n\t}, ({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, ...props }) => {\n\t\treturn (<>\n\t\t\t<HasMany field={field} orderBy={orderBy} limit={limit} offset={offset}>\n\t\t\t\t{staticBoardItemInnerRender({ sortableBy, discriminationField, ...(props as RendererExtraProps) })}\n\t\t\t</HasMany>\n\t\t</>)\n\t})\n\n\n\n\treturn Component<BoardBaseProps<RendererExtraProps>>(props => {\n\t\tif ('entities' in props) {\n\t\t\tif (Array.isArray(props.columns)) {\n\t\t\t\treturn <TopLevelStaticBoard {...(props as BoardQualifiedStaticProps & RendererExtraProps)} />\n\t\t\t} else {\n\t\t\t\treturn <TopLevelDynamicBoard {...(props as BoardQualifiedDynamicProps & RendererExtraProps)} />\n\t\t\t}\n\t\t} else {\n\t\t\tif (Array.isArray(props.columns)) {\n\t\t\t\treturn <RelativeStaticBoard {...(props as BoardRelativeStaticProps & RendererExtraProps)} />\n\t\t\t} else {\n\t\t\t\treturn <RelativeDynamicBoard {...(props as BoardRelativeDynamicProps & RendererExtraProps)} />\n\t\t\t}\n\t\t}\n\t})\n\n}\n"],"names":["Component","useEntityListSubTree","useDynamicBoard","jsx","jsxs","Fragment","EntityListSubTree","HasOne","Field","useEntityList","HasMany","useStaticBoard"],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import { Component, useEntityListSubTree, EntityListSubTree, HasOne, Field, useEntityList, HasMany } from "@contember/react-binding";
3
+ import { useDynamicBoard } from "./useDynamicBoard.js";
4
+ import { useStaticBoard } from "./useStaticBoard.js";
5
+ const createBoard = ({ Renderer, ItemStaticRender, ColumnStaticRender }) => {
6
+ const TopLevelDynamicBoard = Component(({ entities, orderBy, limit, offset, columns, columnsSortableBy, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {
7
+ const itemsAccessor = useEntityListSubTree({ entities, orderBy, limit, offset });
8
+ const columnsAccessor = useEntityListSubTree({ entities: columns });
9
+ const dynamicBoardProps = useDynamicBoard({
10
+ columnEntities: columnsAccessor,
11
+ itemEntities: itemsAccessor,
12
+ columns,
13
+ sortableBy,
14
+ sortScope,
15
+ columnsSortableBy,
16
+ discriminationField,
17
+ nullColumn,
18
+ nullColumnPlacement
19
+ });
20
+ return /* @__PURE__ */ jsx(Renderer, { ...dynamicBoardProps, ...props });
21
+ }, ({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, columnsSortableBy, ...props }) => {
22
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
23
+ /* @__PURE__ */ jsxs(EntityListSubTree, { entities, orderBy, limit, offset, children: [
24
+ /* @__PURE__ */ jsx(HasOne, { ...typeof discriminationField === "string" ? { field: discriminationField } : discriminationField }),
25
+ sortableBy && /* @__PURE__ */ jsx(Field, { ...typeof sortableBy === "string" ? { field: sortableBy } : sortableBy }),
26
+ ItemStaticRender && /* @__PURE__ */ jsx(ItemStaticRender, { ...props })
27
+ ] }),
28
+ /* @__PURE__ */ jsxs(EntityListSubTree, { entities: columns, children: [
29
+ columnsSortableBy && /* @__PURE__ */ jsx(Field, { ...typeof columnsSortableBy === "string" ? { field: columnsSortableBy } : columnsSortableBy }),
30
+ ColumnStaticRender && /* @__PURE__ */ jsx(ColumnStaticRender, { ...props })
31
+ ] })
32
+ ] });
33
+ });
34
+ const RelativeDynamicBoard = Component(({ field, orderBy, limit, offset, columns, columnsSortableBy, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {
35
+ const itemsAccessor = useEntityList({ field, orderBy, limit, offset });
36
+ const columnsAccessor = useEntityListSubTree({ entities: columns });
37
+ const dynamicBoardProps = useDynamicBoard({
38
+ columnEntities: columnsAccessor,
39
+ itemEntities: itemsAccessor,
40
+ columns,
41
+ sortableBy,
42
+ sortScope,
43
+ columnsSortableBy,
44
+ discriminationField,
45
+ nullColumn,
46
+ nullColumnPlacement
47
+ });
48
+ return /* @__PURE__ */ jsx(Renderer, { ...dynamicBoardProps, ...props });
49
+ }, ({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, columnsSortableBy, ...props }) => {
50
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
51
+ /* @__PURE__ */ jsxs(HasMany, { field, orderBy, limit, offset, children: [
52
+ /* @__PURE__ */ jsx(HasOne, { ...typeof discriminationField === "string" ? { field: discriminationField } : discriminationField }),
53
+ sortableBy && /* @__PURE__ */ jsx(Field, { ...typeof sortableBy === "string" ? { field: sortableBy } : sortableBy }),
54
+ ItemStaticRender && /* @__PURE__ */ jsx(ItemStaticRender, { ...props })
55
+ ] }),
56
+ /* @__PURE__ */ jsxs(EntityListSubTree, { entities: columns, children: [
57
+ columnsSortableBy && /* @__PURE__ */ jsx(Field, { ...typeof columnsSortableBy === "string" ? { field: columnsSortableBy } : columnsSortableBy }),
58
+ ColumnStaticRender && /* @__PURE__ */ jsx(ColumnStaticRender, { ...props })
59
+ ] })
60
+ ] });
61
+ });
62
+ const staticBoardItemInnerRender = ({ discriminationField, sortableBy, ...props }) => /* @__PURE__ */ jsxs(Fragment, { children: [
63
+ /* @__PURE__ */ jsx(Field, { ...typeof discriminationField === "string" ? { field: discriminationField } : discriminationField }),
64
+ sortableBy && /* @__PURE__ */ jsx(Field, { ...typeof sortableBy === "string" ? { field: sortableBy } : sortableBy }),
65
+ ItemStaticRender && /* @__PURE__ */ jsx(ItemStaticRender, { ...props })
66
+ ] });
67
+ const TopLevelStaticBoard = Component(({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {
68
+ const itemsAccessor = useEntityListSubTree({ entities, orderBy, limit, offset });
69
+ const staticBoardProps = useStaticBoard({
70
+ itemEntities: itemsAccessor,
71
+ columns,
72
+ sortableBy,
73
+ sortScope,
74
+ discriminationField,
75
+ nullColumn,
76
+ nullColumnPlacement
77
+ });
78
+ return /* @__PURE__ */ jsx(Renderer, { ...staticBoardProps, ...props });
79
+ }, ({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, ...props }) => {
80
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(EntityListSubTree, { entities, orderBy, limit, offset, children: staticBoardItemInnerRender({ sortableBy, discriminationField, ...props }) }) });
81
+ });
82
+ const RelativeStaticBoard = Component(({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {
83
+ const itemsAccessor = useEntityList({ field, orderBy, limit, offset });
84
+ const staticBoardProps = useStaticBoard({
85
+ itemEntities: itemsAccessor,
86
+ columns,
87
+ sortableBy,
88
+ sortScope,
89
+ discriminationField,
90
+ nullColumn,
91
+ nullColumnPlacement
92
+ });
93
+ return /* @__PURE__ */ jsx(Renderer, { ...staticBoardProps, ...props });
94
+ }, ({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, ...props }) => {
95
+ return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(HasMany, { field, orderBy, limit, offset, children: staticBoardItemInnerRender({ sortableBy, discriminationField, ...props }) }) });
96
+ });
97
+ return Component((props) => {
98
+ if ("entities" in props) {
99
+ if (Array.isArray(props.columns)) {
100
+ return /* @__PURE__ */ jsx(TopLevelStaticBoard, { ...props });
101
+ } else {
102
+ return /* @__PURE__ */ jsx(TopLevelDynamicBoard, { ...props });
103
+ }
104
+ } else {
105
+ if (Array.isArray(props.columns)) {
106
+ return /* @__PURE__ */ jsx(RelativeStaticBoard, { ...props });
107
+ } else {
108
+ return /* @__PURE__ */ jsx(RelativeDynamicBoard, { ...props });
109
+ }
110
+ }
111
+ });
112
+ };
113
+ export {
114
+ createBoard
115
+ };
116
+ //# sourceMappingURL=Board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Board.js","sources":["../../src/Board.tsx"],"sourcesContent":["import { Component, EntityListSubTree, Field, HasMany, HasOne, useEntityList, useEntityListSubTree } from '@contember/react-binding'\nimport { ComponentType } from 'react'\nimport { useDynamicBoard } from './useDynamicBoard'\nimport { useStaticBoard } from './useStaticBoard'\nimport { BoardBindingProps } from './BoardBindingProps'\nimport {\n\tBoardBaseProps,\n\tBoardQualifiedDynamicProps,\n\tBoardQualifiedStaticProps,\n\tBoardRelativeDynamicProps,\n\tBoardRelativeStaticProps,\n} from './types'\n\nexport type CreateBoardArgs<T extends {}> = {\n\tRenderer: ComponentType<BoardBindingProps<any> & T>\n\tItemStaticRender?: ComponentType<T>\n\tColumnStaticRender?: ComponentType<T>\n}\n\nexport const createBoard = <RendererExtraProps extends {}>({ Renderer, ItemStaticRender, ColumnStaticRender }: CreateBoardArgs<RendererExtraProps>) => {\n\n\tconst TopLevelDynamicBoard = Component<BoardQualifiedDynamicProps & RendererExtraProps>(({ entities, orderBy, limit, offset, columns, columnsSortableBy, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {\n\t\tconst itemsAccessor = useEntityListSubTree({ entities, orderBy, limit, offset })\n\t\tconst columnsAccessor = useEntityListSubTree({ entities: columns })\n\t\tconst dynamicBoardProps = useDynamicBoard({\n\t\t\tcolumnEntities: columnsAccessor,\n\t\t\titemEntities: itemsAccessor,\n\t\t\tcolumns,\n\t\t\tsortableBy,\n\t\t\tsortScope,\n\t\t\tcolumnsSortableBy,\n\t\t\tdiscriminationField,\n\t\t\tnullColumn,\n\t\t\tnullColumnPlacement,\n\t\t})\n\t\treturn (\n\t\t\t<Renderer {...dynamicBoardProps} {...props as RendererExtraProps} />\n\t\t)\n\t}, ({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, columnsSortableBy, ...props }) => {\n\t\treturn (<>\n\t\t\t<EntityListSubTree entities={entities} orderBy={orderBy} limit={limit} offset={offset}>\n\t\t\t\t<HasOne {...typeof discriminationField === 'string' ? { field: discriminationField } : discriminationField} />\n\t\t\t\t{sortableBy && <Field {...typeof sortableBy === 'string' ? { field: sortableBy } : sortableBy} />}\n\t\t\t\t{ItemStaticRender && <ItemStaticRender {...props as RendererExtraProps} />}\n\t\t\t</EntityListSubTree>\n\t\t\t<EntityListSubTree entities={columns}>\n\t\t\t\t{columnsSortableBy && <Field {...typeof columnsSortableBy === 'string' ? { field: columnsSortableBy } : columnsSortableBy} />}\n\t\t\t\t{ColumnStaticRender && <ColumnStaticRender {...props as RendererExtraProps} />}\n\t\t\t</EntityListSubTree>\n\t\t</>)\n\t})\n\n\n\n\tconst RelativeDynamicBoard = Component<BoardRelativeDynamicProps & RendererExtraProps>(({ field, orderBy, limit, offset, columns, columnsSortableBy, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {\n\t\tconst itemsAccessor = useEntityList({ field, orderBy, limit, offset })\n\t\tconst columnsAccessor = useEntityListSubTree({ entities: columns })\n\t\tconst dynamicBoardProps = useDynamicBoard({\n\t\t\tcolumnEntities: columnsAccessor,\n\t\t\titemEntities: itemsAccessor,\n\t\t\tcolumns,\n\t\t\tsortableBy,\n\t\t\tsortScope,\n\t\t\tcolumnsSortableBy,\n\t\t\tdiscriminationField,\n\t\t\tnullColumn,\n\t\t\tnullColumnPlacement,\n\t\t})\n\t\treturn (\n\t\t\t<Renderer {...dynamicBoardProps} {...props as RendererExtraProps} />\n\t\t)\n\t}, ({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, columnsSortableBy, ...props }) => {\n\t\treturn (<>\n\t\t\t<HasMany field={field} orderBy={orderBy} limit={limit} offset={offset}>\n\t\t\t\t<HasOne {...typeof discriminationField === 'string' ? { field: discriminationField } : discriminationField} />\n\t\t\t\t{sortableBy && <Field {...typeof sortableBy === 'string' ? { field: sortableBy } : sortableBy} />}\n\t\t\t\t{ItemStaticRender && <ItemStaticRender {...props as RendererExtraProps} />}\n\t\t\t</HasMany>\n\t\t\t<EntityListSubTree entities={columns}>\n\t\t\t\t{columnsSortableBy && <Field {...typeof columnsSortableBy === 'string' ? { field: columnsSortableBy } : columnsSortableBy} />}\n\t\t\t\t{ColumnStaticRender && <ColumnStaticRender {...props as RendererExtraProps} />}\n\t\t\t</EntityListSubTree>\n\t\t</>)\n\t})\n\n\n\tconst staticBoardItemInnerRender = ({ discriminationField, sortableBy, ...props }: Pick<BoardQualifiedStaticProps, 'discriminationField' | 'sortableBy'> & RendererExtraProps) => <>\n\t\t<Field {...typeof discriminationField === 'string' ? { field: discriminationField } : discriminationField} />\n\t\t{sortableBy && <Field {...typeof sortableBy === 'string' ? { field: sortableBy } : sortableBy} />}\n\t\t{ItemStaticRender && <ItemStaticRender {...props as unknown as RendererExtraProps} />}\n\t</>\n\n\tconst TopLevelStaticBoard = Component<BoardQualifiedStaticProps & RendererExtraProps>(({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {\n\t\tconst itemsAccessor = useEntityListSubTree({ entities, orderBy, limit, offset })\n\t\tconst staticBoardProps = useStaticBoard({\n\t\t\titemEntities: itemsAccessor,\n\t\t\tcolumns,\n\t\t\tsortableBy,\n\t\t\tsortScope,\n\t\t\tdiscriminationField,\n\t\t\tnullColumn,\n\t\t\tnullColumnPlacement,\n\t\t})\n\t\treturn (\n\t\t\t<Renderer {...staticBoardProps} {...props as RendererExtraProps} />\n\t\t)\n\t}, ({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, ...props }) => {\n\t\treturn (<>\n\t\t\t<EntityListSubTree entities={entities} orderBy={orderBy} limit={limit} offset={offset}>\n\t\t\t\t{staticBoardItemInnerRender({ sortableBy, discriminationField, ...(props as RendererExtraProps) })}\n\t\t\t</EntityListSubTree>\n\t\t</>)\n\t})\n\n\n\tconst RelativeStaticBoard = Component<BoardRelativeStaticProps & RendererExtraProps>(({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, sortScope, nullColumn, nullColumnPlacement, ...props }) => {\n\t\tconst itemsAccessor = useEntityList({ field, orderBy, limit, offset })\n\t\tconst staticBoardProps = useStaticBoard({\n\t\t\titemEntities: itemsAccessor,\n\t\t\tcolumns,\n\t\t\tsortableBy,\n\t\t\tsortScope,\n\t\t\tdiscriminationField,\n\t\t\tnullColumn,\n\t\t\tnullColumnPlacement,\n\t\t})\n\t\treturn (\n\t\t\t<Renderer {...staticBoardProps} {...props as RendererExtraProps} />\n\t\t)\n\t}, ({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, ...props }) => {\n\t\treturn (<>\n\t\t\t<HasMany field={field} orderBy={orderBy} limit={limit} offset={offset}>\n\t\t\t\t{staticBoardItemInnerRender({ sortableBy, discriminationField, ...(props as RendererExtraProps) })}\n\t\t\t</HasMany>\n\t\t</>)\n\t})\n\n\n\n\treturn Component<BoardBaseProps<RendererExtraProps>>(props => {\n\t\tif ('entities' in props) {\n\t\t\tif (Array.isArray(props.columns)) {\n\t\t\t\treturn <TopLevelStaticBoard {...(props as BoardQualifiedStaticProps & RendererExtraProps)} />\n\t\t\t} else {\n\t\t\t\treturn <TopLevelDynamicBoard {...(props as BoardQualifiedDynamicProps & RendererExtraProps)} />\n\t\t\t}\n\t\t} else {\n\t\t\tif (Array.isArray(props.columns)) {\n\t\t\t\treturn <RelativeStaticBoard {...(props as BoardRelativeStaticProps & RendererExtraProps)} />\n\t\t\t} else {\n\t\t\t\treturn <RelativeDynamicBoard {...(props as BoardRelativeDynamicProps & RendererExtraProps)} />\n\t\t\t}\n\t\t}\n\t})\n\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const BoardNullColumnPlaceholder = "__null_column";
4
+ exports.BoardNullColumnPlaceholder = BoardNullColumnPlaceholder;
5
+ //# sourceMappingURL=const.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.cjs","sources":["../../src/const.ts"],"sourcesContent":["export const BoardNullColumnPlaceholder = '__null_column'\n"],"names":[],"mappings":";;AAAO,MAAM,6BAA6B;;"}
@@ -0,0 +1,5 @@
1
+ const BoardNullColumnPlaceholder = "__null_column";
2
+ export {
3
+ BoardNullColumnPlaceholder
4
+ };
5
+ //# sourceMappingURL=const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.js","sources":["../../src/const.ts"],"sourcesContent":["export const BoardNullColumnPlaceholder = '__null_column'\n"],"names":[],"mappings":"AAAO,MAAM,6BAA6B;"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const Board = require("./Board.cjs");
4
+ const _const = require("./const.cjs");
5
+ const useDynamicBoard = require("./useDynamicBoard.cjs");
6
+ const useStaticBoard = require("./useStaticBoard.cjs");
7
+ exports.createBoard = Board.createBoard;
8
+ exports.BoardNullColumnPlaceholder = _const.BoardNullColumnPlaceholder;
9
+ exports.useDynamicBoard = useDynamicBoard.useDynamicBoard;
10
+ exports.useStaticBoard = useStaticBoard.useStaticBoard;
11
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -0,0 +1,11 @@
1
+ import { createBoard } from "./Board.js";
2
+ import { BoardNullColumnPlaceholder } from "./const.js";
3
+ import { useDynamicBoard } from "./useDynamicBoard.js";
4
+ import { useStaticBoard } from "./useStaticBoard.js";
5
+ export {
6
+ BoardNullColumnPlaceholder,
7
+ createBoard,
8
+ useDynamicBoard,
9
+ useStaticBoard
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ const _const = require("../const.cjs");
5
+ const useBoardColumns = ({ groupItemsByColumn, items, columns, nullColumn, nullColumnPlacement, columnIdGetter }) => {
6
+ return react.useMemo(() => {
7
+ const itemsByColumn = groupItemsByColumn(items);
8
+ const result = [];
9
+ let index = 0;
10
+ const nullItems = itemsByColumn.get(null) ?? [];
11
+ const pushNullColumn = () => {
12
+ if (nullColumn === "never") {
13
+ return;
14
+ }
15
+ if (nullColumn === "auto" && nullItems.length === 0) {
16
+ return;
17
+ }
18
+ result.push({
19
+ id: _const.BoardNullColumnPlaceholder,
20
+ index: index++,
21
+ value: null,
22
+ items: nullItems.map((it, index2) => ({ value: it, id: it.id, index: index2 }))
23
+ });
24
+ };
25
+ if (nullColumnPlacement === "start") {
26
+ index--;
27
+ pushNullColumn();
28
+ }
29
+ for (const column of columns) {
30
+ result.push({
31
+ id: columnIdGetter(column),
32
+ index: index++,
33
+ value: column,
34
+ items: itemsByColumn.get(columnIdGetter(column))?.map((it, index2) => ({ value: it, id: it.id, index: index2 })) ?? []
35
+ });
36
+ }
37
+ if (nullColumnPlacement !== "start") {
38
+ pushNullColumn();
39
+ }
40
+ return result;
41
+ }, [columnIdGetter, columns, groupItemsByColumn, items, nullColumn, nullColumnPlacement]);
42
+ };
43
+ exports.useBoardColumns = useBoardColumns;
44
+ //# sourceMappingURL=useBoardColumns.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBoardColumns.cjs","sources":["../../../src/internal/useBoardColumns.ts"],"sourcesContent":["import { BoardColumn, BoardColumnValue } from '../BoardBindingProps'\nimport { useMemo } from 'react'\nimport { UseGroupItemsByColumn } from './useGroupItemsByColumn'\nimport { EntityListAccessor } from '@contember/react-binding'\nimport { BoardNullColumnPlaceholder } from '../const'\nimport { BoardNullBehaviourProps } from '../types'\n\nexport const useBoardColumns = <ColumnValue extends BoardColumnValue>({ groupItemsByColumn, items, columns, nullColumn, nullColumnPlacement, columnIdGetter }: {\n\titems: EntityListAccessor\n\tcolumns: Iterable<ColumnValue>\n\tcolumnIdGetter: (column: ColumnValue) => string | number\n\tgroupItemsByColumn: UseGroupItemsByColumn,\n} & BoardNullBehaviourProps): BoardColumn<ColumnValue>[] => {\n\n\treturn useMemo(() => {\n\t\tconst itemsByColumn = groupItemsByColumn(items)\n\n\t\tconst result: BoardColumn<ColumnValue>[] = []\n\t\tlet index = 0\n\t\tconst nullItems = itemsByColumn.get(null) ?? []\n\n\t\tconst pushNullColumn = () => {\n\t\t\tif (nullColumn === 'never') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (nullColumn === 'auto' && nullItems.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tresult.push({\n\t\t\t\tid: BoardNullColumnPlaceholder,\n\t\t\t\tindex: index++,\n\t\t\t\tvalue: null,\n\t\t\t\titems: nullItems.map((it, index) => ({ value: it, id: it.id, index })),\n\t\t\t})\n\t\t}\n\n\t\tif (nullColumnPlacement === 'start') {\n\t\t\tindex--\n\t\t\tpushNullColumn()\n\t\t}\n\n\t\tfor (const column of columns) {\n\t\t\tresult.push({\n\t\t\t\tid: columnIdGetter(column),\n\t\t\t\tindex: index++,\n\t\t\t\tvalue: column,\n\t\t\t\titems: itemsByColumn.get(columnIdGetter(column))?.map((it, index) => ({ value: it, id: it.id, index })) ?? [],\n\t\t\t})\n\t\t}\n\n\t\tif (nullColumnPlacement !== 'start') {\n\t\t\tpushNullColumn()\n\t\t}\n\t\treturn result\n\t}, [columnIdGetter, columns, groupItemsByColumn, items, nullColumn, nullColumnPlacement])\n}\n"],"names":["useMemo","BoardNullColumnPlaceholder","index"],"mappings":";;;;AAOa,MAAA,kBAAkB,CAAuC,EAAE,oBAAoB,OAAO,SAAS,YAAY,qBAAqB,qBAKjF;AAE3D,SAAOA,cAAQ,MAAM;AACd,UAAA,gBAAgB,mBAAmB,KAAK;AAE9C,UAAM,SAAqC,CAAA;AAC3C,QAAI,QAAQ;AACZ,UAAM,YAAY,cAAc,IAAI,IAAI,KAAK,CAAA;AAE7C,UAAM,iBAAiB,MAAM;AAC5B,UAAI,eAAe,SAAS;AAC3B;AAAA,MACD;AACA,UAAI,eAAe,UAAU,UAAU,WAAW,GAAG;AACpD;AAAA,MACD;AAEA,aAAO,KAAK;AAAA,QACX,IAAIC,OAAA;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO,UAAU,IAAI,CAAC,IAAIC,YAAW,EAAE,OAAO,IAAI,IAAI,GAAG,IAAI,OAAAA,OAAQ,EAAA;AAAA,MAAA,CACrE;AAAA,IAAA;AAGF,QAAI,wBAAwB,SAAS;AACpC;AACe;IAChB;AAEA,eAAW,UAAU,SAAS;AAC7B,aAAO,KAAK;AAAA,QACX,IAAI,eAAe,MAAM;AAAA,QACzB,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO,cAAc,IAAI,eAAe,MAAM,CAAC,GAAG,IAAI,CAAC,IAAIA,YAAW,EAAE,OAAO,IAAI,IAAI,GAAG,IAAI,OAAAA,SAAQ,KAAK,CAAC;AAAA,MAAA,CAC5G;AAAA,IACF;AAEA,QAAI,wBAAwB,SAAS;AACrB;IAChB;AACO,WAAA;AAAA,EAAA,GACL,CAAC,gBAAgB,SAAS,oBAAoB,OAAO,YAAY,mBAAmB,CAAC;AACzF;;"}
@@ -0,0 +1,44 @@
1
+ import { useMemo } from "react";
2
+ import { BoardNullColumnPlaceholder } from "../const.js";
3
+ const useBoardColumns = ({ groupItemsByColumn, items, columns, nullColumn, nullColumnPlacement, columnIdGetter }) => {
4
+ return useMemo(() => {
5
+ const itemsByColumn = groupItemsByColumn(items);
6
+ const result = [];
7
+ let index = 0;
8
+ const nullItems = itemsByColumn.get(null) ?? [];
9
+ const pushNullColumn = () => {
10
+ if (nullColumn === "never") {
11
+ return;
12
+ }
13
+ if (nullColumn === "auto" && nullItems.length === 0) {
14
+ return;
15
+ }
16
+ result.push({
17
+ id: BoardNullColumnPlaceholder,
18
+ index: index++,
19
+ value: null,
20
+ items: nullItems.map((it, index2) => ({ value: it, id: it.id, index: index2 }))
21
+ });
22
+ };
23
+ if (nullColumnPlacement === "start") {
24
+ index--;
25
+ pushNullColumn();
26
+ }
27
+ for (const column of columns) {
28
+ result.push({
29
+ id: columnIdGetter(column),
30
+ index: index++,
31
+ value: column,
32
+ items: itemsByColumn.get(columnIdGetter(column))?.map((it, index2) => ({ value: it, id: it.id, index: index2 })) ?? []
33
+ });
34
+ }
35
+ if (nullColumnPlacement !== "start") {
36
+ pushNullColumn();
37
+ }
38
+ return result;
39
+ }, [columnIdGetter, columns, groupItemsByColumn, items, nullColumn, nullColumnPlacement]);
40
+ };
41
+ export {
42
+ useBoardColumns
43
+ };
44
+ //# sourceMappingURL=useBoardColumns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBoardColumns.js","sources":["../../../src/internal/useBoardColumns.ts"],"sourcesContent":["import { BoardColumn, BoardColumnValue } from '../BoardBindingProps'\nimport { useMemo } from 'react'\nimport { UseGroupItemsByColumn } from './useGroupItemsByColumn'\nimport { EntityListAccessor } from '@contember/react-binding'\nimport { BoardNullColumnPlaceholder } from '../const'\nimport { BoardNullBehaviourProps } from '../types'\n\nexport const useBoardColumns = <ColumnValue extends BoardColumnValue>({ groupItemsByColumn, items, columns, nullColumn, nullColumnPlacement, columnIdGetter }: {\n\titems: EntityListAccessor\n\tcolumns: Iterable<ColumnValue>\n\tcolumnIdGetter: (column: ColumnValue) => string | number\n\tgroupItemsByColumn: UseGroupItemsByColumn,\n} & BoardNullBehaviourProps): BoardColumn<ColumnValue>[] => {\n\n\treturn useMemo(() => {\n\t\tconst itemsByColumn = groupItemsByColumn(items)\n\n\t\tconst result: BoardColumn<ColumnValue>[] = []\n\t\tlet index = 0\n\t\tconst nullItems = itemsByColumn.get(null) ?? []\n\n\t\tconst pushNullColumn = () => {\n\t\t\tif (nullColumn === 'never') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (nullColumn === 'auto' && nullItems.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tresult.push({\n\t\t\t\tid: BoardNullColumnPlaceholder,\n\t\t\t\tindex: index++,\n\t\t\t\tvalue: null,\n\t\t\t\titems: nullItems.map((it, index) => ({ value: it, id: it.id, index })),\n\t\t\t})\n\t\t}\n\n\t\tif (nullColumnPlacement === 'start') {\n\t\t\tindex--\n\t\t\tpushNullColumn()\n\t\t}\n\n\t\tfor (const column of columns) {\n\t\t\tresult.push({\n\t\t\t\tid: columnIdGetter(column),\n\t\t\t\tindex: index++,\n\t\t\t\tvalue: column,\n\t\t\t\titems: itemsByColumn.get(columnIdGetter(column))?.map((it, index) => ({ value: it, id: it.id, index })) ?? [],\n\t\t\t})\n\t\t}\n\n\t\tif (nullColumnPlacement !== 'start') {\n\t\t\tpushNullColumn()\n\t\t}\n\t\treturn result\n\t}, [columnIdGetter, columns, groupItemsByColumn, items, nullColumn, nullColumnPlacement])\n}\n"],"names":["index"],"mappings":";;AAOa,MAAA,kBAAkB,CAAuC,EAAE,oBAAoB,OAAO,SAAS,YAAY,qBAAqB,qBAKjF;AAE3D,SAAO,QAAQ,MAAM;AACd,UAAA,gBAAgB,mBAAmB,KAAK;AAE9C,UAAM,SAAqC,CAAA;AAC3C,QAAI,QAAQ;AACZ,UAAM,YAAY,cAAc,IAAI,IAAI,KAAK,CAAA;AAE7C,UAAM,iBAAiB,MAAM;AAC5B,UAAI,eAAe,SAAS;AAC3B;AAAA,MACD;AACA,UAAI,eAAe,UAAU,UAAU,WAAW,GAAG;AACpD;AAAA,MACD;AAEA,aAAO,KAAK;AAAA,QACX,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO,UAAU,IAAI,CAAC,IAAIA,YAAW,EAAE,OAAO,IAAI,IAAI,GAAG,IAAI,OAAAA,OAAQ,EAAA;AAAA,MAAA,CACrE;AAAA,IAAA;AAGF,QAAI,wBAAwB,SAAS;AACpC;AACe;IAChB;AAEA,eAAW,UAAU,SAAS;AAC7B,aAAO,KAAK;AAAA,QACX,IAAI,eAAe,MAAM;AAAA,QACzB,OAAO;AAAA,QACP,OAAO;AAAA,QACP,OAAO,cAAc,IAAI,eAAe,MAAM,CAAC,GAAG,IAAI,CAAC,IAAIA,YAAW,EAAE,OAAO,IAAI,IAAI,GAAG,IAAI,OAAAA,SAAQ,KAAK,CAAC;AAAA,MAAA,CAC5G;AAAA,IACF;AAEA,QAAI,wBAAwB,SAAS;AACrB;IAChB;AACO,WAAA;AAAA,EAAA,GACL,CAAC,gBAAgB,SAAS,oBAAoB,OAAO,YAAY,mBAAmB,CAAC;AACzF;"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const react = require("react");
4
+ const reactBinding = require("@contember/react-binding");
5
+ const arrayMove = require("../utils/arrayMove.cjs");
6
+ const useBoardItemsMethods = ({
7
+ itemEntities,
8
+ desugaredSortableByField,
9
+ connectItemToColumn,
10
+ groupItemsByColumn,
11
+ getDiscriminatorValue,
12
+ columnIdGetter,
13
+ sortScope = "column"
14
+ }) => {
15
+ const itemEntitiesEntitiesGetter = itemEntities.getAccessor;
16
+ const getSortScopeItems = react.useCallback((column) => {
17
+ const itemEntities2 = itemEntitiesEntitiesGetter();
18
+ return sortScope === "column" ? groupItemsByColumn(itemEntities2).get(column)?.slice() ?? [] : reactBinding.sortEntities(Array.from(itemEntities2), desugaredSortableByField);
19
+ }, [desugaredSortableByField, groupItemsByColumn, itemEntitiesEntitiesGetter, sortScope]);
20
+ const resolveScopedIndex = react.useCallback((column, index) => {
21
+ if (index === void 0) {
22
+ return void 0;
23
+ }
24
+ if (sortScope === "column") {
25
+ return index;
26
+ }
27
+ const columnItems = groupItemsByColumn(itemEntities).get(column)?.slice() ?? [];
28
+ const columnOnIndex = columnItems[index];
29
+ if (!columnOnIndex) {
30
+ return void 0;
31
+ }
32
+ const sortScopeItems = getSortScopeItems(column);
33
+ return sortScopeItems.findIndex((it) => it.id === columnOnIndex.id) ?? sortScopeItems.length;
34
+ }, [getSortScopeItems, groupItemsByColumn, itemEntities, sortScope]);
35
+ const addItem = react.useCallback((column, index, preprocess) => {
36
+ const itemEntities2 = itemEntitiesEntitiesGetter();
37
+ const resolvedPreprocess = (getAccessor, options) => {
38
+ connectItemToColumn(getAccessor(), column);
39
+ preprocess?.(getAccessor, options);
40
+ };
41
+ if (!desugaredSortableByField) {
42
+ if (index === void 0) {
43
+ return itemEntities2.createNewEntity(resolvedPreprocess);
44
+ }
45
+ throw new reactBinding.BindingError("Cannot add item at specific index without sortableBy field");
46
+ }
47
+ const columnId = column ? columnIdGetter(column) : null;
48
+ const sortScopeItems = getSortScopeItems(columnId);
49
+ const resolvedIndex = resolveScopedIndex(columnId, index) ?? sortScopeItems.length;
50
+ itemEntities2.createNewEntity((getEntity, options) => {
51
+ sortScopeItems.splice(resolvedIndex, 0, getEntity());
52
+ reactBinding.repairEntitiesOrder(desugaredSortableByField, sortScopeItems);
53
+ resolvedPreprocess?.(getEntity, options);
54
+ });
55
+ }, [columnIdGetter, connectItemToColumn, desugaredSortableByField, getSortScopeItems, itemEntitiesEntitiesGetter, resolveScopedIndex]);
56
+ const moveItem = react.useMemo(() => {
57
+ if (!desugaredSortableByField) {
58
+ return void 0;
59
+ }
60
+ return (entity, column, index) => {
61
+ const currentColumn = getDiscriminatorValue(entity);
62
+ const columnId = column ? columnIdGetter(column) : null;
63
+ connectItemToColumn(entity, column);
64
+ if (currentColumn === columnId || sortScope === "board") {
65
+ const sortScopeItems = getSortScopeItems(columnId);
66
+ const currentIndex2 = sortScopeItems.findIndex((it) => it.id === entity.id);
67
+ const resolvedIndex = resolveScopedIndex(columnId, index) ?? sortScopeItems.length;
68
+ const resortedItems = arrayMove.arrayMove(sortScopeItems, currentIndex2, resolvedIndex);
69
+ reactBinding.repairEntitiesOrder(desugaredSortableByField, resortedItems);
70
+ return;
71
+ }
72
+ const itemEntities2 = itemEntitiesEntitiesGetter();
73
+ const groupedItems = groupItemsByColumn(itemEntities2);
74
+ const currentColumnItems = groupedItems.get(currentColumn ?? null)?.slice() ?? [];
75
+ const currentIndex = currentColumnItems.findIndex((it) => it.id === entity.id);
76
+ currentColumnItems.splice(currentIndex, 1);
77
+ reactBinding.repairEntitiesOrder(desugaredSortableByField, currentColumnItems);
78
+ const newColumnItems = groupedItems.get(columnId)?.slice() ?? [];
79
+ newColumnItems.splice(index, 0, entity);
80
+ reactBinding.repairEntitiesOrder(desugaredSortableByField, newColumnItems);
81
+ };
82
+ }, [columnIdGetter, connectItemToColumn, desugaredSortableByField, getDiscriminatorValue, getSortScopeItems, groupItemsByColumn, itemEntitiesEntitiesGetter, resolveScopedIndex, sortScope]);
83
+ const removeItem = react.useCallback((entity) => {
84
+ if (desugaredSortableByField) {
85
+ const currentColumn = getDiscriminatorValue(entity);
86
+ const sortScopeItems = getSortScopeItems(currentColumn);
87
+ const currentIndex = sortScopeItems.findIndex((it) => it.id === entity.id);
88
+ sortScopeItems.splice(currentIndex, 1);
89
+ reactBinding.repairEntitiesOrder(desugaredSortableByField, sortScopeItems);
90
+ }
91
+ entity.deleteEntity();
92
+ }, [desugaredSortableByField, getDiscriminatorValue, getSortScopeItems]);
93
+ return {
94
+ addItem,
95
+ moveItem,
96
+ removeItem
97
+ };
98
+ };
99
+ exports.useBoardItemsMethods = useBoardItemsMethods;
100
+ //# sourceMappingURL=useBoardItemsMethods.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBoardItemsMethods.cjs","sources":["../../../src/internal/useBoardItemsMethods.ts"],"sourcesContent":["import { BoardAddItemMethod, BoardColumnValue, BoardMethods, BoardMoveItemMethod, BoardRemoveItemMethod } from '../BoardBindingProps'\nimport { useCallback, useMemo } from 'react'\nimport {\n\tBatchUpdatesOptions,\n\tBindingError,\n\tEntityAccessor,\n\tEntityListAccessor,\n\tRelativeSingleField,\n\trepairEntitiesOrder, sortEntities,\n} from '@contember/react-binding'\nimport { BoardColumnKey, UseGroupItemsByColumn } from './useGroupItemsByColumn'\nimport { arrayMove } from '../utils/arrayMove'\n\n\nexport type UseBoardItemsMethodsProps<ColumnValue extends BoardColumnValue> = {\n\titemEntities: EntityListAccessor\n\tconnectItemToColumn: (item: EntityAccessor, column: ColumnValue | null) => void\n\tdesugaredSortableByField: RelativeSingleField | undefined\n\tsortScope?: 'column' | 'board'\n\tgroupItemsByColumn: UseGroupItemsByColumn,\n\tgetDiscriminatorValue: (entity: EntityAccessor) => BoardColumnKey\n\tcolumnIdGetter: (column: ColumnValue) => string | number\n}\n\nexport type BoardItemsMethods<ColumnValue extends BoardColumnValue> = Pick<BoardMethods<ColumnValue>, 'moveItem' | 'addItem' | 'removeItem'>\n\nexport const useBoardItemsMethods = <ColumnValue extends BoardColumnValue>({\n\titemEntities,\n\tdesugaredSortableByField,\n\tconnectItemToColumn,\n\tgroupItemsByColumn,\n\tgetDiscriminatorValue,\n\tcolumnIdGetter,\n\tsortScope = 'column',\n}: UseBoardItemsMethodsProps<ColumnValue>): BoardItemsMethods<ColumnValue> => {\n\n\tconst itemEntitiesEntitiesGetter = itemEntities.getAccessor\n\n\tconst getSortScopeItems = useCallback((column: string | number | null) => {\n\t\tconst itemEntities = itemEntitiesEntitiesGetter()\n\t\treturn sortScope === 'column'\n\t\t\t? groupItemsByColumn(itemEntities).get(column)?.slice() ?? []\n\t\t\t: sortEntities(Array.from(itemEntities), desugaredSortableByField)\n\t}, [desugaredSortableByField, groupItemsByColumn, itemEntitiesEntitiesGetter, sortScope])\n\n\tconst resolveScopedIndex = useCallback((column: string | number | null, index: number | undefined) => {\n\t\tif (index === undefined) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (sortScope === 'column') {\n\t\t\treturn index\n\t\t}\n\t\tconst columnItems = groupItemsByColumn(itemEntities).get(column)?.slice() ?? []\n\t\tconst columnOnIndex = columnItems[index]\n\t\tif (!columnOnIndex) {\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst sortScopeItems = getSortScopeItems(column)\n\t\treturn sortScopeItems.findIndex(it => it.id === columnOnIndex.id) ?? sortScopeItems.length\n\t}, [getSortScopeItems, groupItemsByColumn, itemEntities, sortScope])\n\n\tconst addItem = useCallback<BoardAddItemMethod<ColumnValue>>((column, index, preprocess) => {\n\t\tconst itemEntities = itemEntitiesEntitiesGetter()\n\t\tconst resolvedPreprocess = (getAccessor: () => EntityAccessor, options: BatchUpdatesOptions) => {\n\t\t\tconnectItemToColumn(getAccessor(), column)\n\t\t\tpreprocess?.(getAccessor, options)\n\t\t}\n\t\tif (!desugaredSortableByField) {\n\t\t\tif (index === undefined) {\n\t\t\t\treturn itemEntities.createNewEntity(resolvedPreprocess)\n\t\t\t}\n\t\t\tthrow new BindingError('Cannot add item at specific index without sortableBy field')\n\t\t}\n\t\tconst columnId = column ? columnIdGetter(column) : null\n\t\tconst sortScopeItems = getSortScopeItems(columnId)\n\n\t\tconst resolvedIndex = resolveScopedIndex(columnId, index) ?? sortScopeItems.length\n\n\n\t\titemEntities.createNewEntity((getEntity, options) => {\n\t\t\tsortScopeItems.splice(resolvedIndex, 0, getEntity())\n\t\t\trepairEntitiesOrder(desugaredSortableByField, sortScopeItems)\n\t\t\tresolvedPreprocess?.(getEntity, options)\n\t\t})\n\t}, [columnIdGetter, connectItemToColumn, desugaredSortableByField, getSortScopeItems, itemEntitiesEntitiesGetter, resolveScopedIndex])\n\n\n\tconst moveItem = useMemo<BoardMoveItemMethod<ColumnValue> | undefined>(() => {\n\t\tif (!desugaredSortableByField) {\n\t\t\treturn undefined\n\t\t}\n\t\treturn (entity, column, index) => {\n\t\t\tconst currentColumn = getDiscriminatorValue(entity)\n\t\t\tconst columnId = column ? columnIdGetter(column) : null\n\n\t\t\tconnectItemToColumn(entity, column)\n\n\t\t\tif (currentColumn === columnId || sortScope === 'board') {\n\t\t\t\tconst sortScopeItems = getSortScopeItems(columnId)\n\t\t\t\tconst currentIndex = sortScopeItems.findIndex(it => it.id === entity.id)\n\t\t\t\tconst resolvedIndex = resolveScopedIndex(columnId, index) ?? sortScopeItems.length\n\t\t\t\tconst resortedItems = arrayMove(sortScopeItems, currentIndex, resolvedIndex)\n\t\t\t\trepairEntitiesOrder(desugaredSortableByField, resortedItems)\n\t\t\t\treturn\n\t\t\t}\n\n\n\t\t\t// sort scope is column\n\t\t\tconst itemEntities = itemEntitiesEntitiesGetter()\n\t\t\tconst groupedItems = groupItemsByColumn(itemEntities)\n\n\t\t\tconst currentColumnItems = groupedItems.get(currentColumn ?? null)?.slice() ?? []\n\t\t\tconst currentIndex = currentColumnItems.findIndex(it => it.id === entity.id)\n\t\t\tcurrentColumnItems.splice(currentIndex, 1)\n\t\t\trepairEntitiesOrder(desugaredSortableByField, currentColumnItems)\n\n\t\t\tconst newColumnItems = groupedItems.get(columnId)?.slice() ?? []\n\t\t\tnewColumnItems.splice(index, 0, entity)\n\t\t\trepairEntitiesOrder(desugaredSortableByField, newColumnItems)\n\n\t\t}\n\t}, [columnIdGetter, connectItemToColumn, desugaredSortableByField, getDiscriminatorValue, getSortScopeItems, groupItemsByColumn, itemEntitiesEntitiesGetter, resolveScopedIndex, sortScope])\n\n\tconst removeItem = useCallback<BoardRemoveItemMethod>(entity => {\n\t\tif (desugaredSortableByField) {\n\t\t\tconst currentColumn = getDiscriminatorValue(entity)\n\t\t\tconst sortScopeItems = getSortScopeItems(currentColumn)\n\t\t\tconst currentIndex = sortScopeItems.findIndex(it => it.id === entity.id)\n\t\t\tsortScopeItems.splice(currentIndex, 1)\n\t\t\trepairEntitiesOrder(desugaredSortableByField, sortScopeItems)\n\t\t}\n\t\tentity.deleteEntity()\n\t}, [desugaredSortableByField, getDiscriminatorValue, getSortScopeItems])\n\n\treturn {\n\t\taddItem,\n\t\tmoveItem,\n\t\tremoveItem,\n\t}\n}\n"],"names":["useCallback","itemEntities","sortEntities","BindingError","repairEntitiesOrder","useMemo","currentIndex","arrayMove"],"mappings":"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"}