@sanity/hierarchical-document-list 1.1.0 → 2.0.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/LICENSE +1 -1
- package/README.md +95 -59
- package/dist/index.d.ts +240 -0
- package/dist/index.esm.js +151 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +151 -0
- package/dist/index.js.map +1 -0
- package/package.json +82 -51
- package/sanity.json +2 -6
- package/src/TreeDeskStructure.tsx +80 -0
- package/src/TreeInputComponent.tsx +41 -0
- package/src/components/DeskWarning.tsx +40 -0
- package/src/components/DocumentInNode.tsx +133 -0
- package/src/components/DocumentPreviewStatus.tsx +70 -0
- package/src/components/NodeActions.tsx +85 -0
- package/src/components/NodeContentRenderer.tsx +141 -0
- package/src/components/PlaceholderDropzone.tsx +45 -0
- package/src/components/TreeEditor.tsx +167 -0
- package/{lib/components/TreeEditorErrorBoundary.d.ts → src/components/TreeEditorErrorBoundary.tsx} +2 -4
- package/src/components/TreeNodeRenderer.tsx +37 -0
- package/src/components/TreeNodeRendererScaffold.tsx +193 -0
- package/src/createDeskHierarchy.tsx +110 -0
- package/src/createHierarchicalSchemas.tsx +151 -0
- package/src/hooks/useAllItems.ts +119 -0
- package/src/hooks/useLocalTree.ts +40 -0
- package/src/hooks/useTreeOperations.ts +25 -0
- package/src/hooks/useTreeOperationsProvider.ts +86 -0
- package/src/index.ts +25 -0
- package/src/schemas/hierarchy.tree.ts +19 -0
- package/src/types.ts +148 -0
- package/src/utils/flatDataToTree.ts +20 -0
- package/src/utils/getAdjescentNodes.ts +30 -0
- package/src/utils/getCommonTreeProps.tsx +28 -0
- package/src/utils/getTreeHeight.ts +10 -0
- package/src/utils/gradientPatchAdapter.ts +43 -0
- package/src/utils/idUtils.ts +7 -0
- package/src/utils/injectNodeTypeInPatches.ts +60 -0
- package/src/utils/moveItemInArray.ts +26 -0
- package/src/utils/throwError.ts +9 -0
- package/src/utils/treeData.tsx +119 -0
- package/src/utils/treePatches.ts +171 -0
- package/v2-incompatible.js +11 -0
- package/.husky/commit-msg +0 -4
- package/.husky/pre-commit +0 -4
- package/.idea/hierarchical-document-list.iml +0 -11
- package/.idea/inspectionProfiles/Project_Default.xml +0 -6
- package/.idea/misc.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/prettier.xml +0 -7
- package/.idea/vcs.xml +0 -6
- package/CHANGELOG.md +0 -15
- package/commitlint.config.js +0 -3
- package/lib/TreeDeskStructure.d.ts +0 -8
- package/lib/TreeDeskStructure.js +0 -96
- package/lib/TreeInputComponent.d.ts +0 -19
- package/lib/TreeInputComponent.js +0 -50
- package/lib/components/DeskWarning.d.ts +0 -6
- package/lib/components/DeskWarning.js +0 -46
- package/lib/components/DocumentInNode.d.ts +0 -11
- package/lib/components/DocumentInNode.js +0 -81
- package/lib/components/DocumentPreviewStatus.d.ts +0 -7
- package/lib/components/DocumentPreviewStatus.js +0 -39
- package/lib/components/NodeActions.d.ts +0 -10
- package/lib/components/NodeActions.js +0 -61
- package/lib/components/NodeContentRenderer.d.ts +0 -8
- package/lib/components/NodeContentRenderer.js +0 -105
- package/lib/components/PlaceholderDropzone.d.ts +0 -9
- package/lib/components/PlaceholderDropzone.js +0 -30
- package/lib/components/SuppressedDnDManager.d.ts +0 -2
- package/lib/components/SuppressedDnDManager.js +0 -59
- package/lib/components/TreeEditor.d.ts +0 -12
- package/lib/components/TreeEditor.js +0 -74
- package/lib/components/TreeEditorErrorBoundary.js +0 -74
- package/lib/components/TreeNodeRenderer.d.ts +0 -3
- package/lib/components/TreeNodeRenderer.js +0 -59
- package/lib/components/TreeNodeRendererScaffold.d.ts +0 -4
- package/lib/components/TreeNodeRendererScaffold.js +0 -44
- package/lib/createDeskHierarchy.d.ts +0 -14
- package/lib/createDeskHierarchy.js +0 -84
- package/lib/createHierarchicalSchemas.d.ts +0 -98
- package/lib/createHierarchicalSchemas.js +0 -138
- package/lib/hooks/useAllItems.d.ts +0 -7
- package/lib/hooks/useAllItems.js +0 -119
- package/lib/hooks/useLocalTree.d.ts +0 -17
- package/lib/hooks/useLocalTree.js +0 -59
- package/lib/hooks/useTreeOperations.d.ts +0 -9
- package/lib/hooks/useTreeOperations.js +0 -39
- package/lib/hooks/useTreeOperationsProvider.d.ts +0 -14
- package/lib/hooks/useTreeOperationsProvider.js +0 -85
- package/lib/index.d.ts +0 -3
- package/lib/index.js +0 -12
- package/lib/schemas/hierarchy.tree.d.ts +0 -13
- package/lib/schemas/hierarchy.tree.js +0 -19
- package/lib/types.d.ts +0 -128
- package/lib/types.js +0 -2
- package/lib/utils/flatDataToTree.d.ts +0 -6
- package/lib/utils/flatDataToTree.js +0 -26
- package/lib/utils/getAdjescentNodes.d.ts +0 -12
- package/lib/utils/getAdjescentNodes.js +0 -19
- package/lib/utils/getCommonTreeProps.d.ts +0 -7
- package/lib/utils/getCommonTreeProps.js +0 -33
- package/lib/utils/getTreeHeight.d.ts +0 -3
- package/lib/utils/getTreeHeight.js +0 -11
- package/lib/utils/gradientPatchAdapter.d.ts +0 -4
- package/lib/utils/gradientPatchAdapter.js +0 -40
- package/lib/utils/idUtils.d.ts +0 -2
- package/lib/utils/idUtils.js +0 -13
- package/lib/utils/injectNodeTypeInPatches.d.ts +0 -12
- package/lib/utils/injectNodeTypeInPatches.js +0 -59
- package/lib/utils/moveItemInArray.d.ts +0 -5
- package/lib/utils/moveItemInArray.js +0 -26
- package/lib/utils/throwError.d.ts +0 -7
- package/lib/utils/throwError.js +0 -12
- package/lib/utils/treeData.d.ts +0 -18
- package/lib/utils/treeData.js +0 -118
- package/lib/utils/treePatches.d.ts +0 -15
- package/lib/utils/treePatches.js +0 -171
- package/lint-staged.config.js +0 -4
- package/screenshot-1.jpg +0 -0
- package/tsconfig.json +0 -20
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { ArraySchemaType } from '@sanity/types';
|
|
2
|
-
import * as React from 'react';
|
|
3
|
-
import { TreeDeskStructureProps, TreeFieldSchema } from './types';
|
|
4
|
-
declare type SchemaOptions = Omit<TreeDeskStructureProps, 'documentId' | 'maxDepth'>;
|
|
5
|
-
export declare function createHierarchicalField({ name, title, options, ...rest }: TreeFieldSchema): Omit<ArraySchemaType, 'type' | 'jsonType' | 'of'> & {
|
|
6
|
-
type: string;
|
|
7
|
-
inputComponent: React.FC<any>;
|
|
8
|
-
of?: any[];
|
|
9
|
-
};
|
|
10
|
-
export default function createHierarchicalSchemas(options: SchemaOptions): ({
|
|
11
|
-
name: string;
|
|
12
|
-
title: string;
|
|
13
|
-
type: string;
|
|
14
|
-
fields: ({
|
|
15
|
-
name: string;
|
|
16
|
-
type: string;
|
|
17
|
-
} | {
|
|
18
|
-
name: string;
|
|
19
|
-
type: string;
|
|
20
|
-
title: string;
|
|
21
|
-
fields: ({
|
|
22
|
-
name: string;
|
|
23
|
-
type: string;
|
|
24
|
-
weak?: undefined;
|
|
25
|
-
to?: undefined;
|
|
26
|
-
options?: undefined;
|
|
27
|
-
} | {
|
|
28
|
-
name: string;
|
|
29
|
-
type: string;
|
|
30
|
-
weak: boolean;
|
|
31
|
-
to: {
|
|
32
|
-
type: string;
|
|
33
|
-
}[];
|
|
34
|
-
options: {
|
|
35
|
-
filter?: string | undefined;
|
|
36
|
-
filterParams?: Record<string, unknown> | undefined;
|
|
37
|
-
} | undefined;
|
|
38
|
-
})[];
|
|
39
|
-
})[];
|
|
40
|
-
} | {
|
|
41
|
-
name: string;
|
|
42
|
-
title: string;
|
|
43
|
-
type: string;
|
|
44
|
-
of: ({
|
|
45
|
-
name: string;
|
|
46
|
-
title: string;
|
|
47
|
-
type: string;
|
|
48
|
-
fields: ({
|
|
49
|
-
name: string;
|
|
50
|
-
type: string;
|
|
51
|
-
} | {
|
|
52
|
-
name: string;
|
|
53
|
-
type: string;
|
|
54
|
-
title: string;
|
|
55
|
-
fields: ({
|
|
56
|
-
name: string;
|
|
57
|
-
type: string;
|
|
58
|
-
weak?: undefined;
|
|
59
|
-
to?: undefined;
|
|
60
|
-
options?: undefined;
|
|
61
|
-
} | {
|
|
62
|
-
name: string;
|
|
63
|
-
type: string;
|
|
64
|
-
weak: boolean;
|
|
65
|
-
to: {
|
|
66
|
-
type: string;
|
|
67
|
-
}[];
|
|
68
|
-
options: {
|
|
69
|
-
filter?: string | undefined;
|
|
70
|
-
filterParams?: Record<string, unknown> | undefined;
|
|
71
|
-
} | undefined;
|
|
72
|
-
})[];
|
|
73
|
-
})[];
|
|
74
|
-
} | {
|
|
75
|
-
type: string;
|
|
76
|
-
})[];
|
|
77
|
-
} | {
|
|
78
|
-
name: string | undefined;
|
|
79
|
-
title: string;
|
|
80
|
-
type: string;
|
|
81
|
-
liveEdit: boolean;
|
|
82
|
-
fields: (Omit<ArraySchemaType<unknown>, "type" | "of" | "jsonType"> & {
|
|
83
|
-
type: string;
|
|
84
|
-
inputComponent: React.FC<any>;
|
|
85
|
-
of?: any[] | undefined;
|
|
86
|
-
})[];
|
|
87
|
-
preview: {
|
|
88
|
-
select: {
|
|
89
|
-
id: string;
|
|
90
|
-
tree: string;
|
|
91
|
-
};
|
|
92
|
-
prepare({ id, tree }: {
|
|
93
|
-
id: string;
|
|
94
|
-
tree: unknown[];
|
|
95
|
-
}): Record<string, string>;
|
|
96
|
-
};
|
|
97
|
-
})[];
|
|
98
|
-
export {};
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
14
|
-
var t = {};
|
|
15
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
16
|
-
t[p] = s[p];
|
|
17
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
18
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
19
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
20
|
-
t[p[i]] = s[p[i]];
|
|
21
|
-
}
|
|
22
|
-
return t;
|
|
23
|
-
};
|
|
24
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
25
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
26
|
-
};
|
|
27
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
-
exports.createHierarchicalField = void 0;
|
|
29
|
-
var TreeDeskStructure_1 = require("./TreeDeskStructure");
|
|
30
|
-
var TreeInputComponent_1 = __importDefault(require("./TreeInputComponent"));
|
|
31
|
-
var injectNodeTypeInPatches_1 = require("./utils/injectNodeTypeInPatches");
|
|
32
|
-
var throwError_1 = __importDefault(require("./utils/throwError"));
|
|
33
|
-
function createHierarchicalNodeValueType(_a) {
|
|
34
|
-
var referenceTo = _a.referenceTo, referenceOptions = _a.referenceOptions, documentType = _a.documentType;
|
|
35
|
-
return {
|
|
36
|
-
// when used inside the field, name & type are overwritten by createHierarchicalNodeType
|
|
37
|
-
name: documentType ? (0, injectNodeTypeInPatches_1.getSchemaTypeName)(documentType, 'nodeValue') : injectNodeTypeInPatches_1.INTERNAL_NODE_VALUE_TYPE,
|
|
38
|
-
type: 'object',
|
|
39
|
-
title: "Hierarchical node value (".concat(documentType, ")"),
|
|
40
|
-
fields: [
|
|
41
|
-
{ name: 'docType', type: 'string' },
|
|
42
|
-
{
|
|
43
|
-
name: 'reference',
|
|
44
|
-
type: 'reference',
|
|
45
|
-
weak: true,
|
|
46
|
-
to: referenceTo.map(function (type) { return ({ type: type }); }),
|
|
47
|
-
options: referenceOptions
|
|
48
|
-
}
|
|
49
|
-
]
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
function createHierarchicalNodeType(options) {
|
|
53
|
-
return {
|
|
54
|
-
// name & type are overwritten by createHierarchicalField
|
|
55
|
-
name: options.documentType
|
|
56
|
-
? (0, injectNodeTypeInPatches_1.getSchemaTypeName)(options.documentType, 'node')
|
|
57
|
-
: injectNodeTypeInPatches_1.INTERNAL_NODE_TYPE,
|
|
58
|
-
title: "Hierarchical node (".concat(options.documentType, ")"),
|
|
59
|
-
type: 'object',
|
|
60
|
-
fields: [
|
|
61
|
-
{ name: 'parent', type: 'string' },
|
|
62
|
-
options.documentType
|
|
63
|
-
? { name: 'value', type: (0, injectNodeTypeInPatches_1.getSchemaTypeName)(options.documentType, 'nodeValue') }
|
|
64
|
-
: // If no documentType is defined, use an anonymized inline object to avoid
|
|
65
|
-
__assign(__assign({}, createHierarchicalNodeValueType(options)), { name: 'value', type: 'object' })
|
|
66
|
-
]
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
function createHierarchicalArrayType(options) {
|
|
70
|
-
return {
|
|
71
|
-
// name & type are overwritten by createHierarchicalField
|
|
72
|
-
name: options.documentType
|
|
73
|
-
? (0, injectNodeTypeInPatches_1.getSchemaTypeName)(options.documentType, 'array')
|
|
74
|
-
: injectNodeTypeInPatches_1.INTERNAL_NODE_ARRAY_TYPE,
|
|
75
|
-
title: "Hierarchical array of nodes (".concat(options.documentType, ")"),
|
|
76
|
-
type: 'array',
|
|
77
|
-
of: [
|
|
78
|
-
options.documentType
|
|
79
|
-
? { type: (0, injectNodeTypeInPatches_1.getSchemaTypeName)(options.documentType, 'node') }
|
|
80
|
-
: createHierarchicalNodeType(options)
|
|
81
|
-
]
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
function createHierarchicalField(_a) {
|
|
85
|
-
var name = _a.name, title = _a.title, options = _a.options, rest = __rest(_a, ["name", "title", "options"]);
|
|
86
|
-
if (!Array.isArray(options === null || options === void 0 ? void 0 : options.referenceTo)) {
|
|
87
|
-
(0, throwError_1.default)('invalidReferenceTo', "(field of name \"".concat(name, "\")"));
|
|
88
|
-
}
|
|
89
|
-
return __assign(__assign(__assign({}, rest), { name: name, title: title, inputComponent: TreeInputComponent_1.default, options: options }), (options.documentType
|
|
90
|
-
? { type: (0, injectNodeTypeInPatches_1.getSchemaTypeName)(options.documentType, 'array') }
|
|
91
|
-
: __assign(__assign({}, createHierarchicalArrayType(options)), { name: name })));
|
|
92
|
-
}
|
|
93
|
-
exports.createHierarchicalField = createHierarchicalField;
|
|
94
|
-
function createHierarchicalDocType(options) {
|
|
95
|
-
return {
|
|
96
|
-
name: options.documentType,
|
|
97
|
-
title: 'Hierarchical tree',
|
|
98
|
-
type: 'document',
|
|
99
|
-
// The plugin needs to define a `schemaType` with liveEdit enabled so that
|
|
100
|
-
// `useDocumentOperation` in TreeDeskStructure.tsx doesn't create drafts at every patch.
|
|
101
|
-
liveEdit: true,
|
|
102
|
-
fields: [
|
|
103
|
-
createHierarchicalField({
|
|
104
|
-
name: options.fieldKeyInDocument || TreeDeskStructure_1.DEFAULT_FIELD_KEY,
|
|
105
|
-
title: 'Hierarchical Tree',
|
|
106
|
-
options: options
|
|
107
|
-
})
|
|
108
|
-
],
|
|
109
|
-
preview: {
|
|
110
|
-
select: {
|
|
111
|
-
id: '_id',
|
|
112
|
-
tree: 'tree'
|
|
113
|
-
},
|
|
114
|
-
prepare: function (_a) {
|
|
115
|
-
var id = _a.id, tree = _a.tree;
|
|
116
|
-
return {
|
|
117
|
-
title: "Hierarchical documents (ID: ".concat(id, ")"),
|
|
118
|
-
subtitle: "".concat((tree === null || tree === void 0 ? void 0 : tree.length) || 0, " document(s) in its list.")
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
|
-
function createHierarchicalSchemas(options) {
|
|
125
|
-
if (!Array.isArray(options.referenceTo) || options.referenceTo.length <= 0) {
|
|
126
|
-
(0, throwError_1.default)('invalidReferenceTo');
|
|
127
|
-
}
|
|
128
|
-
if (!options.documentType) {
|
|
129
|
-
(0, throwError_1.default)('invalidDocumentType');
|
|
130
|
-
}
|
|
131
|
-
return [
|
|
132
|
-
createHierarchicalDocType(options),
|
|
133
|
-
createHierarchicalArrayType(options),
|
|
134
|
-
createHierarchicalNodeType(options),
|
|
135
|
-
createHierarchicalNodeValueType(options)
|
|
136
|
-
];
|
|
137
|
-
}
|
|
138
|
-
exports.default = createHierarchicalSchemas;
|
package/lib/hooks/useAllItems.js
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
16
|
-
}) : (function(o, m, k, k2) {
|
|
17
|
-
if (k2 === undefined) k2 = k;
|
|
18
|
-
o[k2] = m[k];
|
|
19
|
-
}));
|
|
20
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
-
}) : function(o, v) {
|
|
23
|
-
o["default"] = v;
|
|
24
|
-
});
|
|
25
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
|
-
if (mod && mod.__esModule) return mod;
|
|
27
|
-
var result = {};
|
|
28
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
|
-
__setModuleDefault(result, mod);
|
|
30
|
-
return result;
|
|
31
|
-
};
|
|
32
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
33
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
34
|
-
};
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
var client_1 = __importDefault(require("part:@sanity/base/client"));
|
|
37
|
-
var React = __importStar(require("react"));
|
|
38
|
-
var idUtils_1 = require("../utils/idUtils");
|
|
39
|
-
var client = client_1.default.withConfig({
|
|
40
|
-
apiVersion: '2021-09-01'
|
|
41
|
-
});
|
|
42
|
-
function getDeskFilter(_a) {
|
|
43
|
-
var referenceTo = _a.referenceTo, referenceOptions = _a.referenceOptions;
|
|
44
|
-
var filterParts = ['_type in $docTypes'];
|
|
45
|
-
if (referenceOptions === null || referenceOptions === void 0 ? void 0 : referenceOptions.filter) {
|
|
46
|
-
filterParts.push(referenceOptions.filter);
|
|
47
|
-
}
|
|
48
|
-
return {
|
|
49
|
-
filter: filterParts.join(' && '),
|
|
50
|
-
params: __assign(__assign({}, ((referenceOptions === null || referenceOptions === void 0 ? void 0 : referenceOptions.filterParams) || {})), { docTypes: referenceTo.map(function (schemaType) { return schemaType; }) })
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
function updateItemInState(state, item) {
|
|
54
|
-
var _a;
|
|
55
|
-
var newState = __assign({}, state);
|
|
56
|
-
var publishedId = (0, idUtils_1.unprefixId)(item._id);
|
|
57
|
-
newState[publishedId] = __assign(__assign({}, (newState[publishedId] || {})), (_a = {}, _a[(0, idUtils_1.isDraft)(item._id) ? 'draft' : 'published'] = item, _a));
|
|
58
|
-
return newState;
|
|
59
|
-
}
|
|
60
|
-
function allItemsReducer(state, action) {
|
|
61
|
-
var _a;
|
|
62
|
-
var _b, _c, _d;
|
|
63
|
-
if (action.type === 'addOrEditItem' && ((_b = action.item) === null || _b === void 0 ? void 0 : _b._id)) {
|
|
64
|
-
return updateItemInState(state, action.item);
|
|
65
|
-
}
|
|
66
|
-
if (action.type === 'removeItem') {
|
|
67
|
-
var publishedId = (0, idUtils_1.unprefixId)(action.itemId);
|
|
68
|
-
return __assign(__assign({}, state), (_a = {}, _a[publishedId] = (0, idUtils_1.isDraft)(action.itemId)
|
|
69
|
-
? // If a draft, keep only published
|
|
70
|
-
{
|
|
71
|
-
published: (_c = state[publishedId]) === null || _c === void 0 ? void 0 : _c.published
|
|
72
|
-
}
|
|
73
|
-
: {
|
|
74
|
-
draft: (_d = state[publishedId]) === null || _d === void 0 ? void 0 : _d.draft
|
|
75
|
-
}, _a));
|
|
76
|
-
}
|
|
77
|
-
if (action.type === 'setInitialData') {
|
|
78
|
-
return action.items.reduce(updateItemInState, {});
|
|
79
|
-
}
|
|
80
|
-
return state;
|
|
81
|
-
}
|
|
82
|
-
function useAllItems(options) {
|
|
83
|
-
var _a = React.useState('loading'), status = _a[0], setStatus = _a[1];
|
|
84
|
-
var _b = React.useReducer(allItemsReducer, {}), allItems = _b[0], dispatch = _b[1];
|
|
85
|
-
function handleListener(event) {
|
|
86
|
-
if (event.type !== 'mutation') {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
if (event.result) {
|
|
90
|
-
dispatch({ type: 'addOrEditItem', item: event.result });
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
dispatch({ type: 'removeItem', itemId: event.documentId });
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
function handleFirstLoad(items) {
|
|
97
|
-
dispatch({ type: 'setInitialData', items: items });
|
|
98
|
-
setStatus('success');
|
|
99
|
-
}
|
|
100
|
-
React.useEffect(function () {
|
|
101
|
-
var _a = getDeskFilter(options), filter = _a.filter, params = _a.params;
|
|
102
|
-
var query = "*[".concat(filter, "] {\n _id,\n _type,\n _updatedAt,\n }");
|
|
103
|
-
client
|
|
104
|
-
.fetch(query, params)
|
|
105
|
-
.then(handleFirstLoad)
|
|
106
|
-
.catch(function () {
|
|
107
|
-
setStatus('error');
|
|
108
|
-
});
|
|
109
|
-
var listener = client.listen(query, params).subscribe(handleListener);
|
|
110
|
-
return function () {
|
|
111
|
-
listener.unsubscribe();
|
|
112
|
-
};
|
|
113
|
-
}, []);
|
|
114
|
-
return {
|
|
115
|
-
status: status,
|
|
116
|
-
allItems: allItems
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
exports.default = useAllItems;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { OnVisibilityToggleData } from 'react-sortable-tree';
|
|
2
|
-
import { AllItems, LocalTreeItem, StoredTreeItem } from '../types';
|
|
3
|
-
/**
|
|
4
|
-
* Enhances tree data with information on:
|
|
5
|
-
* - `expanded` - native property of react-sortable-tree to determine collapsing & expanding of a node's children
|
|
6
|
-
* - `draftId` & `publishedId` - refer to LocalTreeItem's type annotations
|
|
7
|
-
*
|
|
8
|
-
* Doesn't modify the main tree or has side-effects on data.
|
|
9
|
-
* Has the added benefit of being local to the user, so external changes won't affect local visibility.
|
|
10
|
-
*/
|
|
11
|
-
export default function useLocalTree({ tree, allItems }: {
|
|
12
|
-
tree: StoredTreeItem[];
|
|
13
|
-
allItems: AllItems;
|
|
14
|
-
}): {
|
|
15
|
-
handleVisibilityToggle: (data: OnVisibilityToggleData) => void;
|
|
16
|
-
localTree: LocalTreeItem[];
|
|
17
|
-
};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
-
if (k2 === undefined) k2 = k;
|
|
15
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
16
|
-
}) : (function(o, m, k, k2) {
|
|
17
|
-
if (k2 === undefined) k2 = k;
|
|
18
|
-
o[k2] = m[k];
|
|
19
|
-
}));
|
|
20
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
-
}) : function(o, v) {
|
|
23
|
-
o["default"] = v;
|
|
24
|
-
});
|
|
25
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
|
-
if (mod && mod.__esModule) return mod;
|
|
27
|
-
var result = {};
|
|
28
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
|
-
__setModuleDefault(result, mod);
|
|
30
|
-
return result;
|
|
31
|
-
};
|
|
32
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
-
var React = __importStar(require("react"));
|
|
34
|
-
var treeData_1 = require("../utils/treeData");
|
|
35
|
-
/**
|
|
36
|
-
* Enhances tree data with information on:
|
|
37
|
-
* - `expanded` - native property of react-sortable-tree to determine collapsing & expanding of a node's children
|
|
38
|
-
* - `draftId` & `publishedId` - refer to LocalTreeItem's type annotations
|
|
39
|
-
*
|
|
40
|
-
* Doesn't modify the main tree or has side-effects on data.
|
|
41
|
-
* Has the added benefit of being local to the user, so external changes won't affect local visibility.
|
|
42
|
-
*/
|
|
43
|
-
function useLocalTree(_a) {
|
|
44
|
-
var tree = _a.tree, allItems = _a.allItems;
|
|
45
|
-
var _b = React.useState({}), visibilityMap = _b[0], setVisibilityMap = _b[1];
|
|
46
|
-
function handleVisibilityToggle(data) {
|
|
47
|
-
var _a;
|
|
48
|
-
setVisibilityMap(__assign(__assign({}, visibilityMap), (_a = {}, _a[data.node._key] = data.expanded, _a)));
|
|
49
|
-
}
|
|
50
|
-
return {
|
|
51
|
-
localTree: (0, treeData_1.dataToEditorTree)({
|
|
52
|
-
tree: tree,
|
|
53
|
-
allItems: allItems,
|
|
54
|
-
visibilityMap: visibilityMap
|
|
55
|
-
}),
|
|
56
|
-
handleVisibilityToggle: handleVisibilityToggle
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
exports.default = useLocalTree;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import useAllItems from './useAllItems';
|
|
3
|
-
import useTreeOperationsProvider from './useTreeOperationsProvider';
|
|
4
|
-
declare type ContextValue = ReturnType<typeof useTreeOperationsProvider> & {
|
|
5
|
-
allItemsStatus: ReturnType<typeof useAllItems>['status'];
|
|
6
|
-
};
|
|
7
|
-
export declare const TreeOperationsContext: React.Context<ContextValue>;
|
|
8
|
-
export default function useTreeOperations(): ContextValue;
|
|
9
|
-
export {};
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.TreeOperationsContext = void 0;
|
|
23
|
-
var React = __importStar(require("react"));
|
|
24
|
-
function placeholder() {
|
|
25
|
-
// no-op
|
|
26
|
-
}
|
|
27
|
-
exports.TreeOperationsContext = React.createContext({
|
|
28
|
-
addItem: placeholder,
|
|
29
|
-
duplicateItem: placeholder,
|
|
30
|
-
removeItem: placeholder,
|
|
31
|
-
handleMovedNode: placeholder,
|
|
32
|
-
moveItemDown: placeholder,
|
|
33
|
-
moveItemUp: placeholder,
|
|
34
|
-
allItemsStatus: 'loading'
|
|
35
|
-
});
|
|
36
|
-
function useTreeOperations() {
|
|
37
|
-
return React.useContext(exports.TreeOperationsContext);
|
|
38
|
-
}
|
|
39
|
-
exports.default = useTreeOperations;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { LocalTreeItem, NodeProps } from '../types';
|
|
2
|
-
import { HandleMovedNode } from '../utils/treePatches';
|
|
3
|
-
export default function useTreeOperationsProvider(props: {
|
|
4
|
-
patchPrefix?: string;
|
|
5
|
-
onChange: (patch: unknown) => void;
|
|
6
|
-
localTree: LocalTreeItem[];
|
|
7
|
-
}): {
|
|
8
|
-
handleMovedNode: HandleMovedNode;
|
|
9
|
-
addItem: (item: LocalTreeItem) => void;
|
|
10
|
-
duplicateItem: (nodeProps: NodeProps) => void;
|
|
11
|
-
removeItem: (nodeProps: NodeProps) => void;
|
|
12
|
-
moveItemUp: (nodeProps: NodeProps) => void;
|
|
13
|
-
moveItemDown: (nodeProps: NodeProps) => void;
|
|
14
|
-
};
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
22
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
23
|
-
if (ar || !(i in from)) {
|
|
24
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
25
|
-
ar[i] = from[i];
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
29
|
-
};
|
|
30
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
31
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
32
|
-
};
|
|
33
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
-
var Patch = __importStar(require("@sanity/form-builder/lib/patch/patches"));
|
|
35
|
-
var PatchEvent_1 = __importDefault(require("@sanity/form-builder/PatchEvent"));
|
|
36
|
-
var treePatches_1 = require("../utils/treePatches");
|
|
37
|
-
function useTreeOperationsProvider(props) {
|
|
38
|
-
var localTree = props.localTree;
|
|
39
|
-
function runPatches(patches) {
|
|
40
|
-
var finalPatches = __spreadArray([
|
|
41
|
-
// Ensure tree array exists before any operation
|
|
42
|
-
Patch.setIfMissing([])
|
|
43
|
-
], (patches || []), true);
|
|
44
|
-
var patchEvent = PatchEvent_1.default.from(finalPatches);
|
|
45
|
-
if (props.patchPrefix) {
|
|
46
|
-
patchEvent = PatchEvent_1.default.from(finalPatches.map(function (patch) { return Patch.prefixPath(patch, props.patchPrefix); }));
|
|
47
|
-
}
|
|
48
|
-
props.onChange(patchEvent);
|
|
49
|
-
}
|
|
50
|
-
function handleMovedNode(data) {
|
|
51
|
-
runPatches((0, treePatches_1.getMovedNodePatch)(data));
|
|
52
|
-
}
|
|
53
|
-
function addItem(item) {
|
|
54
|
-
runPatches((0, treePatches_1.getAddItemPatch)(item));
|
|
55
|
-
}
|
|
56
|
-
function duplicateItem(nodeProps) {
|
|
57
|
-
runPatches((0, treePatches_1.getDuplicateItemPatch)(nodeProps));
|
|
58
|
-
}
|
|
59
|
-
function removeItem(nodeProps) {
|
|
60
|
-
runPatches((0, treePatches_1.getRemoveItemPatch)(nodeProps));
|
|
61
|
-
}
|
|
62
|
-
function moveItemUp(nodeProps) {
|
|
63
|
-
runPatches((0, treePatches_1.getMoveItemPatch)({
|
|
64
|
-
nodeProps: nodeProps,
|
|
65
|
-
localTree: localTree,
|
|
66
|
-
direction: 'up'
|
|
67
|
-
}));
|
|
68
|
-
}
|
|
69
|
-
function moveItemDown(nodeProps) {
|
|
70
|
-
runPatches((0, treePatches_1.getMoveItemPatch)({
|
|
71
|
-
nodeProps: nodeProps,
|
|
72
|
-
localTree: localTree,
|
|
73
|
-
direction: 'down'
|
|
74
|
-
}));
|
|
75
|
-
}
|
|
76
|
-
return {
|
|
77
|
-
handleMovedNode: handleMovedNode,
|
|
78
|
-
addItem: addItem,
|
|
79
|
-
removeItem: removeItem,
|
|
80
|
-
moveItemUp: moveItemUp,
|
|
81
|
-
moveItemDown: moveItemDown,
|
|
82
|
-
duplicateItem: duplicateItem
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
exports.default = useTreeOperationsProvider;
|
package/lib/index.d.ts
DELETED
package/lib/index.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.flatDataToTree = exports.createDeskHierarchy = exports.createHierarchicalSchemas = void 0;
|
|
7
|
-
var createHierarchicalSchemas_1 = require("./createHierarchicalSchemas");
|
|
8
|
-
Object.defineProperty(exports, "createHierarchicalSchemas", { enumerable: true, get: function () { return __importDefault(createHierarchicalSchemas_1).default; } });
|
|
9
|
-
var createDeskHierarchy_1 = require("./createDeskHierarchy");
|
|
10
|
-
Object.defineProperty(exports, "createDeskHierarchy", { enumerable: true, get: function () { return __importDefault(createDeskHierarchy_1).default; } });
|
|
11
|
-
var flatDataToTree_1 = require("./utils/flatDataToTree");
|
|
12
|
-
Object.defineProperty(exports, "flatDataToTree", { enumerable: true, get: function () { return __importDefault(flatDataToTree_1).default; } });
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = {
|
|
4
|
-
name: 'hierarchy.tree',
|
|
5
|
-
title: 'Hierarchical tree',
|
|
6
|
-
type: 'document',
|
|
7
|
-
// The plugin needs to define a `schemaType` with liveEdit enabled so that
|
|
8
|
-
// `useDocumentOperation` in TreeDeskStructure.tsx doesn't create drafts at every patch.
|
|
9
|
-
liveEdit: true,
|
|
10
|
-
// Let's avoid defining the actual hierarchical field, else GraphQL users won't be able to deploy schemas
|
|
11
|
-
fields: [
|
|
12
|
-
{
|
|
13
|
-
name: 'unusedField',
|
|
14
|
-
title: 'Unused field',
|
|
15
|
-
type: 'string',
|
|
16
|
-
hidden: true
|
|
17
|
-
}
|
|
18
|
-
]
|
|
19
|
-
};
|