@contember/react-board 1.3.0-alpha.9 → 1.3.0-rc.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.
- package/dist/development/components/Board.cjs +270 -0
- package/dist/development/components/Board.cjs.map +1 -0
- package/dist/development/components/Board.js +270 -0
- package/dist/development/components/Board.js.map +1 -0
- package/dist/development/components/BoardColumn.cjs +7 -0
- package/dist/development/components/BoardColumn.cjs.map +1 -0
- package/dist/development/components/BoardColumn.js +7 -0
- package/dist/development/components/BoardColumn.js.map +1 -0
- package/dist/development/components/BoardColumnLabel.cjs +14 -0
- package/dist/development/components/BoardColumnLabel.cjs.map +1 -0
- package/dist/development/components/BoardColumnLabel.js +14 -0
- package/dist/development/components/BoardColumnLabel.js.map +1 -0
- package/dist/development/components/BoardEachColumn.cjs +38 -0
- package/dist/development/components/BoardEachColumn.cjs.map +1 -0
- package/dist/development/components/BoardEachColumn.js +38 -0
- package/dist/development/components/BoardEachColumn.js.map +1 -0
- package/dist/development/components/BoardEachItem.cjs +56 -0
- package/dist/development/components/BoardEachItem.cjs.map +1 -0
- package/dist/development/components/BoardEachItem.js +56 -0
- package/dist/development/components/BoardEachItem.js.map +1 -0
- package/dist/development/components/BoardItem.cjs +8 -0
- package/dist/development/components/BoardItem.cjs.map +1 -0
- package/dist/development/components/BoardItem.js +8 -0
- package/dist/development/components/BoardItem.js.map +1 -0
- package/dist/development/components/BoardNullColumn.cjs +18 -0
- package/dist/development/components/BoardNullColumn.cjs.map +1 -0
- package/dist/development/components/BoardNullColumn.js +18 -0
- package/dist/development/components/BoardNullColumn.js.map +1 -0
- package/dist/development/contexts.cjs +24 -0
- package/dist/development/contexts.cjs.map +1 -0
- package/dist/development/contexts.js +24 -0
- package/dist/development/contexts.js.map +1 -0
- package/dist/development/index.cjs +23 -6
- package/dist/development/index.cjs.map +1 -1
- package/dist/development/index.js +23 -6
- package/dist/development/index.js.map +1 -1
- package/dist/development/internal/boardAnalyzer.cjs +16 -0
- package/dist/development/internal/boardAnalyzer.cjs.map +1 -0
- package/dist/development/internal/boardAnalyzer.js +16 -0
- package/dist/development/internal/boardAnalyzer.js.map +1 -0
- package/dist/development/internal/useBoardItemsMethods.cjs.map +1 -1
- package/dist/development/internal/useBoardItemsMethods.js.map +1 -1
- package/dist/development/internal/{useBoardColumns.cjs → useCreateBoardColumns.cjs} +10 -24
- package/dist/development/internal/useCreateBoardColumns.cjs.map +1 -0
- package/dist/development/internal/{useBoardColumns.js → useCreateBoardColumns.js} +10 -24
- package/dist/development/internal/useCreateBoardColumns.js.map +1 -0
- package/dist/{production → development/internal}/useDynamicBoard.cjs +14 -18
- package/dist/development/internal/useDynamicBoard.cjs.map +1 -0
- package/dist/{production → development/internal}/useDynamicBoard.js +14 -18
- package/dist/development/internal/useDynamicBoard.js.map +1 -0
- package/dist/{production → development/internal}/useStaticBoard.cjs +8 -16
- package/dist/development/internal/useStaticBoard.cjs.map +1 -0
- package/dist/{production → development/internal}/useStaticBoard.js +9 -17
- package/dist/development/internal/useStaticBoard.js.map +1 -0
- package/dist/production/components/Board.cjs +118 -0
- package/dist/production/components/Board.cjs.map +1 -0
- package/dist/production/components/Board.js +118 -0
- package/dist/production/components/Board.js.map +1 -0
- package/dist/production/components/BoardColumn.cjs +7 -0
- package/dist/production/components/BoardColumn.cjs.map +1 -0
- package/dist/production/components/BoardColumn.js +7 -0
- package/dist/production/components/BoardColumn.js.map +1 -0
- package/dist/production/components/BoardColumnLabel.cjs +10 -0
- package/dist/production/components/BoardColumnLabel.cjs.map +1 -0
- package/dist/production/components/BoardColumnLabel.js +10 -0
- package/dist/production/components/BoardColumnLabel.js.map +1 -0
- package/dist/production/components/BoardEachColumn.cjs +22 -0
- package/dist/production/components/BoardEachColumn.cjs.map +1 -0
- package/dist/production/components/BoardEachColumn.js +22 -0
- package/dist/production/components/BoardEachColumn.js.map +1 -0
- package/dist/production/components/BoardEachItem.cjs +33 -0
- package/dist/production/components/BoardEachItem.cjs.map +1 -0
- package/dist/production/components/BoardEachItem.js +33 -0
- package/dist/production/components/BoardEachItem.js.map +1 -0
- package/dist/production/components/BoardItem.cjs +8 -0
- package/dist/production/components/BoardItem.cjs.map +1 -0
- package/dist/production/components/BoardItem.js +8 -0
- package/dist/production/components/BoardItem.js.map +1 -0
- package/dist/production/components/BoardNullColumn.cjs +14 -0
- package/dist/production/components/BoardNullColumn.cjs.map +1 -0
- package/dist/production/components/BoardNullColumn.js +14 -0
- package/dist/production/components/BoardNullColumn.js.map +1 -0
- package/dist/production/contexts.cjs +24 -0
- package/dist/production/contexts.cjs.map +1 -0
- package/dist/production/contexts.js +24 -0
- package/dist/production/contexts.js.map +1 -0
- package/dist/production/index.cjs +23 -6
- package/dist/production/index.cjs.map +1 -1
- package/dist/production/index.js +23 -6
- package/dist/production/index.js.map +1 -1
- package/dist/production/internal/boardAnalyzer.cjs +16 -0
- package/dist/production/internal/boardAnalyzer.cjs.map +1 -0
- package/dist/production/internal/boardAnalyzer.js +16 -0
- package/dist/production/internal/boardAnalyzer.js.map +1 -0
- package/dist/production/internal/useBoardItemsMethods.cjs.map +1 -1
- package/dist/production/internal/useBoardItemsMethods.js.map +1 -1
- package/dist/production/internal/{useBoardColumns.cjs → useCreateBoardColumns.cjs} +10 -24
- package/dist/production/internal/useCreateBoardColumns.cjs.map +1 -0
- package/dist/production/internal/{useBoardColumns.js → useCreateBoardColumns.js} +10 -24
- package/dist/production/internal/useCreateBoardColumns.js.map +1 -0
- package/dist/{development → production/internal}/useDynamicBoard.cjs +14 -18
- package/dist/production/internal/useDynamicBoard.cjs.map +1 -0
- package/dist/{development → production/internal}/useDynamicBoard.js +14 -18
- package/dist/production/internal/useDynamicBoard.js.map +1 -0
- package/dist/{development → production/internal}/useStaticBoard.cjs +8 -16
- package/dist/production/internal/useStaticBoard.cjs.map +1 -0
- package/dist/{development → production/internal}/useStaticBoard.js +9 -17
- package/dist/production/internal/useStaticBoard.js.map +1 -0
- package/dist/types/{types.d.ts → components/Board.d.ts} +5 -8
- package/dist/types/components/Board.d.ts.map +1 -0
- package/dist/types/components/BoardColumn.d.ts +5 -0
- package/dist/types/components/BoardColumn.d.ts.map +1 -0
- package/dist/types/components/BoardColumnLabel.d.ts +2 -0
- package/dist/types/components/BoardColumnLabel.d.ts.map +1 -0
- package/dist/types/components/BoardEachColumn.d.ts +10 -0
- package/dist/types/components/BoardEachColumn.d.ts.map +1 -0
- package/dist/types/components/BoardEachItem.d.ts +10 -0
- package/dist/types/components/BoardEachItem.d.ts.map +1 -0
- package/dist/types/components/BoardItem.d.ts +8 -0
- package/dist/types/components/BoardItem.d.ts.map +1 -0
- package/dist/types/components/BoardNullColumn.d.ts +7 -0
- package/dist/types/components/BoardNullColumn.d.ts.map +1 -0
- package/dist/types/components/index.d.ts +8 -0
- package/dist/types/components/index.d.ts.map +1 -0
- package/dist/types/contexts.d.ts +18 -0
- package/dist/types/contexts.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/internal/boardAnalyzer.d.ts +6 -0
- package/dist/types/internal/boardAnalyzer.d.ts.map +1 -0
- package/dist/types/internal/useBoardItemsMethods.d.ts +1 -1
- package/dist/types/internal/useBoardItemsMethods.d.ts.map +1 -1
- package/dist/types/internal/useCreateBoardColumns.d.ts +10 -0
- package/dist/types/internal/useCreateBoardColumns.d.ts.map +1 -0
- package/dist/types/{useDynamicBoard.d.ts → internal/useDynamicBoard.d.ts} +4 -3
- package/dist/types/internal/useDynamicBoard.d.ts.map +1 -0
- package/dist/types/internal/useGroupItemsByColumn.d.ts.map +1 -1
- package/dist/types/{useStaticBoard.d.ts → internal/useStaticBoard.d.ts} +4 -3
- package/dist/types/internal/useStaticBoard.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/types/BoardColumnNode.d.ts +15 -0
- package/dist/types/types/BoardColumnNode.d.ts.map +1 -0
- package/dist/types/types/BoardData.d.ts +5 -0
- package/dist/types/types/BoardData.d.ts.map +1 -0
- package/dist/types/types/BoardItemNode.d.ts +7 -0
- package/dist/types/types/BoardItemNode.d.ts.map +1 -0
- package/dist/types/{BoardBindingProps.d.ts → types/BoardMethods.d.ts} +4 -23
- package/dist/types/types/BoardMethods.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +4 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/package.json +10 -7
- package/src/components/Board.tsx +219 -0
- package/src/components/BoardColumn.tsx +7 -0
- package/src/components/BoardColumnLabel.tsx +6 -0
- package/src/components/BoardEachColumn.tsx +32 -0
- package/src/components/BoardEachItem.tsx +48 -0
- package/src/components/BoardItem.tsx +8 -0
- package/src/components/BoardNullColumn.tsx +20 -0
- package/src/components/index.ts +7 -0
- package/src/contexts.ts +23 -0
- package/src/index.ts +2 -4
- package/src/internal/boardAnalyzer.ts +25 -0
- package/src/internal/useBoardItemsMethods.ts +1 -1
- package/src/internal/{useBoardColumns.ts → useCreateBoardColumns.ts} +11 -28
- package/src/{useDynamicBoard.ts → internal/useDynamicBoard.ts} +21 -18
- package/src/{useStaticBoard.ts → internal/useStaticBoard.ts} +13 -18
- package/src/tsconfig.json +3 -0
- package/src/types/BoardColumnNode.ts +16 -0
- package/src/types/BoardData.ts +6 -0
- package/src/types/BoardItemNode.ts +7 -0
- package/src/{BoardBindingProps.ts → types/BoardMethods.ts} +3 -29
- package/src/types/index.ts +3 -0
- package/dist/development/Board.cjs +0 -116
- package/dist/development/Board.cjs.map +0 -1
- package/dist/development/Board.js +0 -116
- package/dist/development/Board.js.map +0 -1
- package/dist/development/internal/useBoardColumns.cjs.map +0 -1
- package/dist/development/internal/useBoardColumns.js.map +0 -1
- package/dist/development/useDynamicBoard.cjs.map +0 -1
- package/dist/development/useDynamicBoard.js.map +0 -1
- package/dist/development/useStaticBoard.cjs.map +0 -1
- package/dist/development/useStaticBoard.js.map +0 -1
- package/dist/production/Board.cjs +0 -116
- package/dist/production/Board.cjs.map +0 -1
- package/dist/production/Board.js +0 -116
- package/dist/production/Board.js.map +0 -1
- package/dist/production/internal/useBoardColumns.cjs.map +0 -1
- package/dist/production/internal/useBoardColumns.js.map +0 -1
- package/dist/production/useDynamicBoard.cjs.map +0 -1
- package/dist/production/useDynamicBoard.js.map +0 -1
- package/dist/production/useStaticBoard.cjs.map +0 -1
- package/dist/production/useStaticBoard.js.map +0 -1
- package/dist/types/Board.d.ts +0 -10
- package/dist/types/Board.d.ts.map +0 -1
- package/dist/types/BoardBindingProps.d.ts.map +0 -1
- package/dist/types/internal/useBoardColumns.d.ts +0 -11
- package/dist/types/internal/useBoardColumns.d.ts.map +0 -1
- package/dist/types/types.d.ts.map +0 -1
- package/dist/types/useDynamicBoard.d.ts.map +0 -1
- package/dist/types/useStaticBoard.d.ts.map +0 -1
- package/src/Board.tsx +0 -156
- package/src/types.ts +0 -64
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BoardItemNode.d.ts","sourceRoot":"","sources":["../../../src/types/BoardItemNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,MAAM,MAAM,aAAa,GAAG;IAC3B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,cAAc,CAAA;CACrB,CAAA"}
|
|
@@ -1,28 +1,12 @@
|
|
|
1
|
-
import { EntityAccessor } from '@contember/
|
|
2
|
-
import {
|
|
3
|
-
export type BoardItem = {
|
|
4
|
-
id: string | number;
|
|
5
|
-
index: number;
|
|
6
|
-
value: EntityAccessor;
|
|
7
|
-
};
|
|
8
|
-
export type BoardStaticColumnValue = {
|
|
9
|
-
value: string;
|
|
10
|
-
label?: ReactNode;
|
|
11
|
-
};
|
|
12
|
-
export type BoardColumnValue = BoardStaticColumnValue | EntityAccessor;
|
|
13
|
-
export type BoardColumn<ColumnValue extends BoardColumnValue = BoardColumnValue> = {
|
|
14
|
-
id: string | number;
|
|
15
|
-
index: number;
|
|
16
|
-
value: ColumnValue | null;
|
|
17
|
-
items: BoardItem[];
|
|
18
|
-
};
|
|
1
|
+
import { EntityAccessor } from '@contember/binding';
|
|
2
|
+
import { BoardColumnValue } from './BoardColumnNode';
|
|
19
3
|
export type BoardAddColumnMethod = (index: number | undefined, preprocess?: EntityAccessor.BatchUpdatesHandler) => void;
|
|
20
4
|
export type BoardMoveColumnMethod = (entity: EntityAccessor, index: number) => void;
|
|
21
5
|
export type BoardRemoveColumnMethod = (entity: EntityAccessor) => void;
|
|
22
6
|
export type BoardMoveItemMethod<ColumnValue extends BoardColumnValue> = (entity: EntityAccessor, column: ColumnValue | null, index: number) => void;
|
|
23
7
|
export type BoardAddItemMethod<ColumnValue extends BoardColumnValue> = (column: ColumnValue | null, index: number | undefined, preprocess?: EntityAccessor.BatchUpdatesHandler) => void;
|
|
24
8
|
export type BoardRemoveItemMethod = (entity: EntityAccessor) => void;
|
|
25
|
-
export type BoardMethods<ColumnValue extends BoardColumnValue> = {
|
|
9
|
+
export type BoardMethods<ColumnValue extends BoardColumnValue = BoardColumnValue> = {
|
|
26
10
|
moveColumn?: BoardMoveColumnMethod;
|
|
27
11
|
addColumn?: BoardAddColumnMethod;
|
|
28
12
|
removeColumn?: BoardRemoveColumnMethod;
|
|
@@ -30,7 +14,4 @@ export type BoardMethods<ColumnValue extends BoardColumnValue> = {
|
|
|
30
14
|
addItem?: BoardAddItemMethod<ColumnValue>;
|
|
31
15
|
removeItem?: BoardRemoveItemMethod;
|
|
32
16
|
};
|
|
33
|
-
|
|
34
|
-
columns: BoardColumn<ColumnValue>[];
|
|
35
|
-
} & BoardMethods<ColumnValue>;
|
|
36
|
-
//# sourceMappingURL=BoardBindingProps.d.ts.map
|
|
17
|
+
//# sourceMappingURL=BoardMethods.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BoardMethods.d.ts","sourceRoot":"","sources":["../../../src/types/BoardMethods.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,CAAC,EAAE,cAAc,CAAC,mBAAmB,KAAK,IAAI,CAAC;AACxH,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AACpF,MAAM,MAAM,uBAAuB,GAAG,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;AACvE,MAAM,MAAM,mBAAmB,CAAC,WAAW,SAAS,gBAAgB,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AACpJ,MAAM,MAAM,kBAAkB,CAAC,WAAW,SAAS,gBAAgB,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,UAAU,CAAC,EAAE,cAAc,CAAC,mBAAmB,KAAK,IAAI,CAAC;AACxL,MAAM,MAAM,qBAAqB,GAAG,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;AAErE,MAAM,MAAM,YAAY,CAAC,WAAW,SAAS,gBAAgB,GAAG,gBAAgB,IAAI;IACnF,UAAU,CAAC,EAAE,qBAAqB,CAAA;IAClC,SAAS,CAAC,EAAE,oBAAoB,CAAA;IAChC,YAAY,CAAC,EAAE,uBAAuB,CAAA;IAEtC,QAAQ,CAAC,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAA;IAC3C,OAAO,CAAC,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAA;IACzC,UAAU,CAAC,EAAE,qBAAqB,CAAA;CAClC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contember/react-board",
|
|
3
3
|
"license": "Apache-2.0",
|
|
4
|
-
"version": "1.3.0-
|
|
4
|
+
"version": "1.3.0-rc.1",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
7
7
|
"main": "./dist/production/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"typings": "./dist/types/index.d.ts",
|
|
23
23
|
"scripts": {
|
|
24
24
|
"build": "yarn build:js:dev && yarn build:js:prod",
|
|
25
|
-
"build:js:dev": "vite build --mode development",
|
|
25
|
+
"build:js:dev": "NODE_ENV=development vite build --mode development",
|
|
26
26
|
"build:js:prod": "vite build --mode production",
|
|
27
27
|
"ae:build": "api-extractor run --local",
|
|
28
28
|
"ae:test": "api-extractor run",
|
|
@@ -34,15 +34,18 @@
|
|
|
34
34
|
"directory": "packages/react-board"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@contember/
|
|
37
|
+
"@contember/binding": "1.3.0-rc.1",
|
|
38
|
+
"@contember/react-binding": "1.3.0-rc.1",
|
|
39
|
+
"@contember/react-multipass-rendering": "1.3.0-rc.1",
|
|
40
|
+
"@contember/react-utils": "1.3.0-rc.1"
|
|
38
41
|
},
|
|
39
42
|
"peerDependencies": {
|
|
40
|
-
"react": "^
|
|
41
|
-
"react-dom": "^
|
|
43
|
+
"react": "^18 || ^19",
|
|
44
|
+
"react-dom": "^18 || ^19"
|
|
42
45
|
},
|
|
43
46
|
"devDependencies": {
|
|
44
|
-
"react": "^18.
|
|
45
|
-
"react-dom": "^18.
|
|
47
|
+
"react": "^18.3.1",
|
|
48
|
+
"react-dom": "^18.3.1"
|
|
46
49
|
},
|
|
47
50
|
"stableVersion": "0.0.0"
|
|
48
51
|
}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Component,
|
|
3
|
+
EntityListSubTree,
|
|
4
|
+
Field,
|
|
5
|
+
HasMany,
|
|
6
|
+
HasOne,
|
|
7
|
+
SugaredQualifiedEntityList,
|
|
8
|
+
SugaredRelativeEntityList,
|
|
9
|
+
SugaredRelativeSingleEntity,
|
|
10
|
+
SugaredRelativeSingleField,
|
|
11
|
+
useEntityList,
|
|
12
|
+
useEntityListSubTree,
|
|
13
|
+
} from '@contember/react-binding'
|
|
14
|
+
import { boardColumnsAnalyzer, boardItemsAnalyzer } from '../internal/boardAnalyzer'
|
|
15
|
+
import { Fragment, ReactNode } from 'react'
|
|
16
|
+
import { useDynamicBoard } from '../internal/useDynamicBoard'
|
|
17
|
+
import { useStaticBoard } from '../internal/useStaticBoard'
|
|
18
|
+
import { BoardColumnsContext, BoardMethodsContext } from '../contexts'
|
|
19
|
+
|
|
20
|
+
export type BoardProps =
|
|
21
|
+
| BoardQualifiedDynamicProps
|
|
22
|
+
| BoardRelativeDynamicProps
|
|
23
|
+
| BoardQualifiedStaticProps
|
|
24
|
+
| BoardRelativeStaticProps
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
export const Board = Component<BoardProps>(props => {
|
|
28
|
+
if ('entities' in props) {
|
|
29
|
+
if (Array.isArray(props.columns)) {
|
|
30
|
+
return <BoardQualifiedStatic {...(props as BoardQualifiedStaticProps)} />
|
|
31
|
+
} else {
|
|
32
|
+
return <BoardQualifiedDynamic {...(props as BoardQualifiedDynamicProps)} />
|
|
33
|
+
}
|
|
34
|
+
} else {
|
|
35
|
+
if (Array.isArray(props.columns)) {
|
|
36
|
+
return <RelativeStaticBoard {...(props as BoardRelativeStaticProps)} />
|
|
37
|
+
} else {
|
|
38
|
+
return <RelativeDynamicBoard {...(props as BoardRelativeDynamicProps)} />
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
export type BoardDynamicColumnsBindingProps = {
|
|
44
|
+
columns: SugaredQualifiedEntityList['entities']
|
|
45
|
+
columnsSortableBy?: string | SugaredRelativeSingleField
|
|
46
|
+
discriminationField: string | SugaredRelativeSingleEntity
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export type BoardStaticColumnsBindingProps = {
|
|
50
|
+
columns: {
|
|
51
|
+
value: string,
|
|
52
|
+
label: ReactNode
|
|
53
|
+
}[]
|
|
54
|
+
discriminationField: string | SugaredRelativeSingleField
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export type BoardCommonProps =
|
|
58
|
+
& {
|
|
59
|
+
children: ReactNode
|
|
60
|
+
sortableBy?: string | SugaredRelativeSingleField
|
|
61
|
+
sortScope?: 'column' | 'board'
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export type BoardQualifiedItemsProps =
|
|
65
|
+
& Pick<SugaredQualifiedEntityList, 'entities' | 'orderBy' | 'limit' | 'offset'>
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
export type BoardRelativeItemsProps =
|
|
69
|
+
& Pick<SugaredRelativeEntityList, 'field' | 'orderBy' | 'limit' | 'offset'>
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
export type BoardQualifiedDynamicProps =
|
|
73
|
+
& BoardCommonProps
|
|
74
|
+
& BoardDynamicColumnsBindingProps
|
|
75
|
+
& BoardQualifiedItemsProps
|
|
76
|
+
|
|
77
|
+
const BoardQualifiedDynamic = Component<BoardQualifiedDynamicProps>(({ entities, orderBy, limit, offset, columns, columnsSortableBy, discriminationField, sortableBy, sortScope, children }) => {
|
|
78
|
+
const itemsAccessor = useEntityListSubTree({ entities, orderBy, limit, offset })
|
|
79
|
+
const columnsAccessor = useEntityListSubTree({ entities: columns })
|
|
80
|
+
const [data, methods] = useDynamicBoard({
|
|
81
|
+
columnEntities: columnsAccessor,
|
|
82
|
+
itemEntities: itemsAccessor,
|
|
83
|
+
columns,
|
|
84
|
+
sortableBy,
|
|
85
|
+
sortScope,
|
|
86
|
+
columnsSortableBy,
|
|
87
|
+
discriminationField,
|
|
88
|
+
})
|
|
89
|
+
return (
|
|
90
|
+
<BoardMethodsContext.Provider value={methods}>
|
|
91
|
+
<BoardColumnsContext.Provider value={data.columns}>
|
|
92
|
+
{children}
|
|
93
|
+
</BoardColumnsContext.Provider>
|
|
94
|
+
</BoardMethodsContext.Provider>
|
|
95
|
+
)
|
|
96
|
+
}, ({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, columnsSortableBy, children }, env) => {
|
|
97
|
+
|
|
98
|
+
const columnChildren = boardColumnsAnalyzer.processChildren(children, env)
|
|
99
|
+
const itemChildren = boardItemsAnalyzer.processChildren(children, env)
|
|
100
|
+
|
|
101
|
+
return (<>
|
|
102
|
+
<EntityListSubTree entities={entities} orderBy={orderBy} limit={limit} offset={offset}>
|
|
103
|
+
<HasOne {...typeof discriminationField === 'string' ? { field: discriminationField } : discriminationField} />
|
|
104
|
+
{sortableBy && <Field {...typeof sortableBy === 'string' ? { field: sortableBy } : sortableBy} />}
|
|
105
|
+
{itemChildren.map((it, index) => <Fragment key={index}>{it}</Fragment>)}
|
|
106
|
+
</EntityListSubTree>
|
|
107
|
+
<EntityListSubTree entities={columns}>
|
|
108
|
+
{columnsSortableBy && <Field {...typeof columnsSortableBy === 'string' ? { field: columnsSortableBy } : columnsSortableBy} />}
|
|
109
|
+
{columnChildren.map((it, index) => <Fragment key={index}>{it}</Fragment>)}
|
|
110
|
+
</EntityListSubTree>
|
|
111
|
+
</>)
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
export type BoardRelativeDynamicProps =
|
|
116
|
+
& BoardCommonProps
|
|
117
|
+
& BoardDynamicColumnsBindingProps
|
|
118
|
+
& BoardRelativeItemsProps
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
const RelativeDynamicBoard = Component<BoardRelativeDynamicProps>(({ field, orderBy, limit, offset, columns, columnsSortableBy, discriminationField, sortableBy, sortScope, children }) => {
|
|
122
|
+
const itemsAccessor = useEntityList({ field, orderBy, limit, offset })
|
|
123
|
+
const columnsAccessor = useEntityListSubTree({ entities: columns })
|
|
124
|
+
const [data, methods] = useDynamicBoard({
|
|
125
|
+
columnEntities: columnsAccessor,
|
|
126
|
+
itemEntities: itemsAccessor,
|
|
127
|
+
columns,
|
|
128
|
+
sortableBy,
|
|
129
|
+
sortScope,
|
|
130
|
+
columnsSortableBy,
|
|
131
|
+
discriminationField,
|
|
132
|
+
})
|
|
133
|
+
return (
|
|
134
|
+
<BoardMethodsContext.Provider value={methods}>
|
|
135
|
+
<BoardColumnsContext.Provider value={data.columns}>
|
|
136
|
+
{children}
|
|
137
|
+
</BoardColumnsContext.Provider>
|
|
138
|
+
</BoardMethodsContext.Provider>
|
|
139
|
+
)
|
|
140
|
+
}, ({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, columnsSortableBy, children }, env) => {
|
|
141
|
+
const columnChildren = boardColumnsAnalyzer.processChildren(children, env)
|
|
142
|
+
const itemChildren = boardItemsAnalyzer.processChildren(children, env)
|
|
143
|
+
return (<>
|
|
144
|
+
<HasMany field={field} orderBy={orderBy} limit={limit} offset={offset}>
|
|
145
|
+
<HasOne {...typeof discriminationField === 'string' ? { field: discriminationField } : discriminationField} />
|
|
146
|
+
{sortableBy && <Field {...typeof sortableBy === 'string' ? { field: sortableBy } : sortableBy} />}
|
|
147
|
+
{itemChildren.map((it, index) => <Fragment key={index}>{it}</Fragment>)}
|
|
148
|
+
</HasMany>
|
|
149
|
+
<EntityListSubTree entities={columns}>
|
|
150
|
+
{columnsSortableBy && <Field {...typeof columnsSortableBy === 'string' ? { field: columnsSortableBy } : columnsSortableBy} />}
|
|
151
|
+
{columnChildren.map((it, index) => <Fragment key={index}>{it}</Fragment>)}
|
|
152
|
+
</EntityListSubTree>
|
|
153
|
+
</>)
|
|
154
|
+
})
|
|
155
|
+
export type BoardQualifiedStaticProps =
|
|
156
|
+
& BoardCommonProps
|
|
157
|
+
& BoardStaticColumnsBindingProps
|
|
158
|
+
& BoardQualifiedItemsProps
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
const BoardQualifiedStatic = Component<BoardQualifiedStaticProps>(({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, sortScope, children }) => {
|
|
162
|
+
const itemsAccessor = useEntityListSubTree({ entities, orderBy, limit, offset })
|
|
163
|
+
const [data, methods] = useStaticBoard({
|
|
164
|
+
itemEntities: itemsAccessor,
|
|
165
|
+
columns,
|
|
166
|
+
sortableBy,
|
|
167
|
+
sortScope,
|
|
168
|
+
discriminationField,
|
|
169
|
+
})
|
|
170
|
+
return (
|
|
171
|
+
<BoardMethodsContext.Provider value={methods}>
|
|
172
|
+
<BoardColumnsContext.Provider value={data.columns}>
|
|
173
|
+
{children}
|
|
174
|
+
</BoardColumnsContext.Provider>
|
|
175
|
+
</BoardMethodsContext.Provider>
|
|
176
|
+
)
|
|
177
|
+
}, ({ entities, orderBy, limit, offset, columns, discriminationField, sortableBy, children }, env) => {
|
|
178
|
+
const itemChildren = boardItemsAnalyzer.processChildren(children, env)
|
|
179
|
+
return (<>
|
|
180
|
+
<EntityListSubTree entities={entities} orderBy={orderBy} limit={limit} offset={offset}>
|
|
181
|
+
<Field {...typeof discriminationField === 'string' ? { field: discriminationField } : discriminationField} />
|
|
182
|
+
{sortableBy && <Field {...typeof sortableBy === 'string' ? { field: sortableBy } : sortableBy} />}
|
|
183
|
+
{itemChildren.map((it, index) => <Fragment key={index}>{it}</Fragment>)}
|
|
184
|
+
</EntityListSubTree>
|
|
185
|
+
</>)
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
export type BoardRelativeStaticProps =
|
|
190
|
+
& BoardCommonProps
|
|
191
|
+
& BoardStaticColumnsBindingProps
|
|
192
|
+
& BoardRelativeItemsProps
|
|
193
|
+
|
|
194
|
+
const RelativeStaticBoard = Component<BoardRelativeStaticProps>(({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, sortScope, children }) => {
|
|
195
|
+
const itemsAccessor = useEntityList({ field, orderBy, limit, offset })
|
|
196
|
+
const [data, methods] = useStaticBoard({
|
|
197
|
+
itemEntities: itemsAccessor,
|
|
198
|
+
columns,
|
|
199
|
+
sortableBy,
|
|
200
|
+
sortScope,
|
|
201
|
+
discriminationField,
|
|
202
|
+
})
|
|
203
|
+
return (
|
|
204
|
+
<BoardMethodsContext.Provider value={methods}>
|
|
205
|
+
<BoardColumnsContext.Provider value={data.columns}>
|
|
206
|
+
{children}
|
|
207
|
+
</BoardColumnsContext.Provider>
|
|
208
|
+
</BoardMethodsContext.Provider>
|
|
209
|
+
)
|
|
210
|
+
}, ({ field, orderBy, limit, offset, columns, discriminationField, sortableBy, children }, env) => {
|
|
211
|
+
const itemChildren = boardItemsAnalyzer.processChildren(children, env)
|
|
212
|
+
return (<>
|
|
213
|
+
<HasMany field={field} orderBy={orderBy} limit={limit} offset={offset}>
|
|
214
|
+
<Field {...typeof discriminationField === 'string' ? { field: discriminationField } : discriminationField} />
|
|
215
|
+
{sortableBy && <Field {...typeof sortableBy === 'string' ? { field: sortableBy } : sortableBy} />}
|
|
216
|
+
{itemChildren.map((it, index) => <Fragment key={index}>{it}</Fragment>)}
|
|
217
|
+
</HasMany>
|
|
218
|
+
</>)
|
|
219
|
+
})
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { EntityAccessor } from '@contember/binding'
|
|
2
|
+
import { Entity } from '@contember/react-binding'
|
|
3
|
+
import { BoardCurrentColumnContext, useBoardColumns } from '../contexts'
|
|
4
|
+
import { ReactNode } from 'react'
|
|
5
|
+
import { BoardColumn } from './BoardColumn'
|
|
6
|
+
import { BoardNullColumnPlaceholder } from '../const'
|
|
7
|
+
|
|
8
|
+
export const BoardEachColumn = ({ children }: {
|
|
9
|
+
children: ReactNode
|
|
10
|
+
}) => {
|
|
11
|
+
const columns = useBoardColumns()
|
|
12
|
+
|
|
13
|
+
return <>
|
|
14
|
+
{columns.map(column => {
|
|
15
|
+
if (column.id === BoardNullColumnPlaceholder) {
|
|
16
|
+
return null
|
|
17
|
+
}
|
|
18
|
+
return (
|
|
19
|
+
<BoardCurrentColumnContext.Provider value={column} key={column.id}>
|
|
20
|
+
{column.value instanceof EntityAccessor ? (
|
|
21
|
+
<Entity accessor={column.value}>
|
|
22
|
+
{children}
|
|
23
|
+
</Entity>
|
|
24
|
+
) : children}
|
|
25
|
+
</BoardCurrentColumnContext.Provider>
|
|
26
|
+
)
|
|
27
|
+
})}
|
|
28
|
+
</>
|
|
29
|
+
}
|
|
30
|
+
BoardEachColumn.staticRender = ({ children }: { children: ReactNode }) => {
|
|
31
|
+
return <BoardColumn>{children}</BoardColumn>
|
|
32
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ReactNode, useMemo } from 'react'
|
|
2
|
+
import { BoardCurrentItemContext, useBoardCurrentColumn } from '../contexts'
|
|
3
|
+
import { Entity } from '@contember/react-binding'
|
|
4
|
+
import { BoardItem } from './BoardItem'
|
|
5
|
+
import { BoardColumnNode, BoardItemNode } from '../types'
|
|
6
|
+
|
|
7
|
+
export const BoardEachItem = ({ children }: {
|
|
8
|
+
children: ReactNode
|
|
9
|
+
}) => {
|
|
10
|
+
const currentColumn = useBoardCurrentColumn()
|
|
11
|
+
|
|
12
|
+
return <>
|
|
13
|
+
{currentColumn.items.map((item, index) => {
|
|
14
|
+
return (
|
|
15
|
+
<BoardEachItemInner
|
|
16
|
+
key={item.id}
|
|
17
|
+
item={item}
|
|
18
|
+
column={currentColumn}
|
|
19
|
+
>
|
|
20
|
+
{children}
|
|
21
|
+
</BoardEachItemInner>
|
|
22
|
+
)
|
|
23
|
+
})}
|
|
24
|
+
</>
|
|
25
|
+
}
|
|
26
|
+
BoardEachItem.staticRender = ({ children }: { children: ReactNode }) => {
|
|
27
|
+
return <BoardItem>{children}</BoardItem>
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const BoardEachItemInner = ({ children, item, column }: {
|
|
31
|
+
children: ReactNode
|
|
32
|
+
column: BoardColumnNode
|
|
33
|
+
item: BoardItemNode
|
|
34
|
+
|
|
35
|
+
}) => {
|
|
36
|
+
const itemWithColumn = useMemo(() => ({
|
|
37
|
+
...item,
|
|
38
|
+
column,
|
|
39
|
+
}), [item, column])
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<BoardCurrentItemContext.Provider value={itemWithColumn} key={item.id}>
|
|
43
|
+
<Entity accessor={item.value}>
|
|
44
|
+
{children}
|
|
45
|
+
</Entity>
|
|
46
|
+
</BoardCurrentItemContext.Provider>
|
|
47
|
+
)
|
|
48
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { BoardCurrentColumnContext, useBoardColumns } from '../contexts'
|
|
2
|
+
import { ReactNode } from 'react'
|
|
3
|
+
import { BoardNullColumnPlaceholder } from '../const'
|
|
4
|
+
|
|
5
|
+
export type BoardNullColumnProps = {
|
|
6
|
+
children: ReactNode
|
|
7
|
+
hideEmpty?: boolean
|
|
8
|
+
};
|
|
9
|
+
export const BoardNullColumn = ({ children, hideEmpty }: BoardNullColumnProps) => {
|
|
10
|
+
const column = useBoardColumns().find(it => it.id === BoardNullColumnPlaceholder)
|
|
11
|
+
if (!column || (hideEmpty && column.items.length === 0)) {
|
|
12
|
+
return null
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<BoardCurrentColumnContext.Provider value={column}>
|
|
17
|
+
{children}
|
|
18
|
+
</BoardCurrentColumnContext.Provider>
|
|
19
|
+
)
|
|
20
|
+
}
|
package/src/contexts.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { createRequiredContext } from '@contember/react-utils'
|
|
2
|
+
import { BoardColumnNode, BoardColumnValue, BoardItemNode, BoardMethods } from './types'
|
|
3
|
+
|
|
4
|
+
const _BoardMethodsContext = createRequiredContext<BoardMethods<any>>('BoardMethodsContext')
|
|
5
|
+
/** @internal */
|
|
6
|
+
export const BoardMethodsContext = _BoardMethodsContext[0]
|
|
7
|
+
export const useBoardMethods = _BoardMethodsContext[1] as <T extends BoardColumnValue = BoardColumnValue>() => BoardMethods<T>
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
const BoardColumnsContext_ = createRequiredContext<BoardColumnNode[]>('BoardColumnsContext')
|
|
11
|
+
/** @internal */
|
|
12
|
+
export const BoardColumnsContext = BoardColumnsContext_[0]
|
|
13
|
+
export const useBoardColumns = BoardColumnsContext_[1] as <T extends BoardColumnValue = BoardColumnValue>() => BoardColumnNode<T>[]
|
|
14
|
+
|
|
15
|
+
const _BoardColumnContext = createRequiredContext<BoardColumnNode>('BoardCurrentColumnContext')
|
|
16
|
+
/** @internal*/
|
|
17
|
+
export const BoardCurrentColumnContext = _BoardColumnContext[0]
|
|
18
|
+
export const useBoardCurrentColumn = _BoardColumnContext[1]
|
|
19
|
+
|
|
20
|
+
const BoardCurrentItemContext_ = createRequiredContext<BoardItemNode & { column: BoardColumnNode }>('BoardCurrentItemContext')
|
|
21
|
+
/** @internal*/
|
|
22
|
+
export const BoardCurrentItemContext = BoardCurrentItemContext_[0]
|
|
23
|
+
export const useBoardCurrentItem = BoardCurrentItemContext_[1]
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Environment } from '@contember/binding'
|
|
2
|
+
import { ChildrenAnalyzer, Leaf } from '@contember/react-multipass-rendering'
|
|
3
|
+
import { BoardItem } from '../components/BoardItem'
|
|
4
|
+
import { ReactNode } from 'react'
|
|
5
|
+
import { BoardColumn } from '../components/BoardColumn'
|
|
6
|
+
|
|
7
|
+
const itemLeaf = new Leaf(node => node.props.children, BoardItem)
|
|
8
|
+
const columnLeaf = new Leaf(node => node.props.children, BoardColumn)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
export const boardColumnsAnalyzer = new ChildrenAnalyzer<
|
|
12
|
+
ReactNode,
|
|
13
|
+
never,
|
|
14
|
+
Environment
|
|
15
|
+
>([columnLeaf], {
|
|
16
|
+
staticRenderFactoryName: 'staticRender',
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
export const boardItemsAnalyzer = new ChildrenAnalyzer<
|
|
20
|
+
ReactNode,
|
|
21
|
+
never,
|
|
22
|
+
Environment
|
|
23
|
+
>([itemLeaf], {
|
|
24
|
+
staticRenderFactoryName: 'staticRender',
|
|
25
|
+
})
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { BoardAddItemMethod, BoardColumnValue, BoardMethods, BoardMoveItemMethod, BoardRemoveItemMethod } from '../BoardBindingProps'
|
|
2
1
|
import { useCallback, useMemo } from 'react'
|
|
3
2
|
import {
|
|
4
3
|
BatchUpdatesOptions,
|
|
@@ -10,6 +9,7 @@ import {
|
|
|
10
9
|
} from '@contember/react-binding'
|
|
11
10
|
import { BoardColumnKey, UseGroupItemsByColumn } from './useGroupItemsByColumn'
|
|
12
11
|
import { arrayMove } from '../utils/arrayMove'
|
|
12
|
+
import { BoardAddItemMethod, BoardColumnValue, BoardMethods, BoardMoveItemMethod, BoardRemoveItemMethod } from '../types'
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
export type UseBoardItemsMethodsProps<ColumnValue extends BoardColumnValue> = {
|
|
@@ -1,44 +1,30 @@
|
|
|
1
|
-
import { BoardColumn, BoardColumnValue } from '../BoardBindingProps'
|
|
2
1
|
import { useMemo } from 'react'
|
|
3
2
|
import { UseGroupItemsByColumn } from './useGroupItemsByColumn'
|
|
4
3
|
import { EntityListAccessor } from '@contember/react-binding'
|
|
5
4
|
import { BoardNullColumnPlaceholder } from '../const'
|
|
6
|
-
import {
|
|
5
|
+
import { BoardColumnNode, BoardColumnValue } from '../types'
|
|
7
6
|
|
|
8
|
-
export const
|
|
7
|
+
export const useCreateBoardColumns = <ColumnValue extends BoardColumnValue>({ groupItemsByColumn, items, columns, columnIdGetter }: {
|
|
9
8
|
items: EntityListAccessor
|
|
10
9
|
columns: Iterable<ColumnValue>
|
|
11
10
|
columnIdGetter: (column: ColumnValue) => string | number
|
|
12
11
|
groupItemsByColumn: UseGroupItemsByColumn,
|
|
13
|
-
}
|
|
12
|
+
}): BoardColumnNode<ColumnValue>[] => {
|
|
14
13
|
|
|
15
14
|
return useMemo(() => {
|
|
16
15
|
const itemsByColumn = groupItemsByColumn(items)
|
|
17
16
|
|
|
18
|
-
const result: BoardColumn<ColumnValue>[] = []
|
|
19
|
-
let index = 0
|
|
20
17
|
const nullItems = itemsByColumn.get(null) ?? []
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (nullColumn === 'never') {
|
|
24
|
-
return
|
|
25
|
-
}
|
|
26
|
-
if (nullColumn === 'auto' && nullItems.length === 0) {
|
|
27
|
-
return
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
result.push({
|
|
18
|
+
const result: BoardColumnNode<ColumnValue>[] = [
|
|
19
|
+
{
|
|
31
20
|
id: BoardNullColumnPlaceholder,
|
|
32
|
-
index:
|
|
21
|
+
index: Number.MAX_SAFE_INTEGER,
|
|
33
22
|
value: null,
|
|
34
23
|
items: nullItems.map((it, index) => ({ value: it, id: it.id, index })),
|
|
35
|
-
}
|
|
36
|
-
|
|
24
|
+
},
|
|
25
|
+
]
|
|
26
|
+
let index = 0
|
|
37
27
|
|
|
38
|
-
if (nullColumnPlacement === 'start') {
|
|
39
|
-
index--
|
|
40
|
-
pushNullColumn()
|
|
41
|
-
}
|
|
42
28
|
|
|
43
29
|
for (const column of columns) {
|
|
44
30
|
result.push({
|
|
@@ -48,10 +34,7 @@ export const useBoardColumns = <ColumnValue extends BoardColumnValue>({ groupIte
|
|
|
48
34
|
items: itemsByColumn.get(columnIdGetter(column))?.map((it, index) => ({ value: it, id: it.id, index })) ?? [],
|
|
49
35
|
})
|
|
50
36
|
}
|
|
51
|
-
|
|
52
|
-
if (nullColumnPlacement !== 'start') {
|
|
53
|
-
pushNullColumn()
|
|
54
|
-
}
|
|
55
37
|
return result
|
|
56
|
-
|
|
38
|
+
|
|
39
|
+
}, [columnIdGetter, columns, groupItemsByColumn, items])
|
|
57
40
|
}
|
|
@@ -10,12 +10,18 @@ import {
|
|
|
10
10
|
useDesugaredRelativeSingleEntity,
|
|
11
11
|
useDesugaredRelativeSingleField,
|
|
12
12
|
} from '@contember/react-binding'
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
import {
|
|
14
|
+
BoardAddColumnMethod,
|
|
15
|
+
BoardMethods,
|
|
16
|
+
BoardMoveColumnMethod,
|
|
17
|
+
BoardRemoveColumnMethod,
|
|
18
|
+
} from '../types'
|
|
19
|
+
import { useGroupItemsByColumn } from './useGroupItemsByColumn'
|
|
20
|
+
import { useCreateBoardColumns } from './useCreateBoardColumns'
|
|
21
|
+
import { arrayMove } from '../utils/arrayMove'
|
|
22
|
+
import { useBoardItemsMethods } from './useBoardItemsMethods'
|
|
23
|
+
import { BoardData } from '../types/BoardData'
|
|
24
|
+
import { BoardCommonProps, BoardDynamicColumnsBindingProps } from '../components'
|
|
19
25
|
|
|
20
26
|
|
|
21
27
|
export type UseDynamicBoardBindingProps =
|
|
@@ -39,9 +45,7 @@ export const useDynamicBoard = ({
|
|
|
39
45
|
discriminationField,
|
|
40
46
|
columnEntities,
|
|
41
47
|
itemEntities,
|
|
42
|
-
|
|
43
|
-
nullColumn = 'auto',
|
|
44
|
-
}: UseDynamicBoardBindingProps): BoardBindingProps<EntityAccessor> => {
|
|
48
|
+
}: UseDynamicBoardBindingProps): [BoardData<EntityAccessor>, BoardMethods<EntityAccessor>] => {
|
|
45
49
|
|
|
46
50
|
const desugaredSortableByField = useDesugaredRelativeSingleField(sortableBy)
|
|
47
51
|
const desugaredColumnSortableByField = useDesugaredRelativeSingleField(columnsSortableBy)
|
|
@@ -61,13 +65,11 @@ export const useDynamicBoard = ({
|
|
|
61
65
|
|
|
62
66
|
const getSortedColumns = useGetSortedColumns(desugaredColumnSortableByField)
|
|
63
67
|
|
|
64
|
-
const columnsResult =
|
|
68
|
+
const columnsResult = useCreateBoardColumns<EntityAccessor>({
|
|
65
69
|
columns: getSortedColumns(columnEntities),
|
|
66
70
|
columnIdGetter: it => it.id,
|
|
67
71
|
groupItemsByColumn,
|
|
68
72
|
items: itemEntities,
|
|
69
|
-
nullColumn,
|
|
70
|
-
nullColumnPlacement,
|
|
71
73
|
})
|
|
72
74
|
|
|
73
75
|
const addColumn = useCallback<BoardAddColumnMethod>((index, preprocess) => {
|
|
@@ -123,13 +125,14 @@ export const useDynamicBoard = ({
|
|
|
123
125
|
itemEntities,
|
|
124
126
|
})
|
|
125
127
|
|
|
126
|
-
|
|
127
|
-
columns: columnsResult,
|
|
128
|
-
addColumn,
|
|
128
|
+
const methods = useMemo(() => ({
|
|
129
129
|
addItem,
|
|
130
|
-
moveColumn,
|
|
131
130
|
moveItem,
|
|
132
|
-
removeColumn,
|
|
133
131
|
removeItem,
|
|
134
|
-
|
|
132
|
+
moveColumn,
|
|
133
|
+
addColumn,
|
|
134
|
+
removeColumn,
|
|
135
|
+
}), [addItem, moveItem, removeItem, moveColumn, addColumn, removeColumn])
|
|
136
|
+
|
|
137
|
+
return [{ columns: columnsResult }, methods]
|
|
135
138
|
}
|