@sanity/hierarchical-document-list 0.1.1 → 1.0.0
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/README.md +55 -19
- package/lib/TreeDeskStructure.d.ts +2 -1
- package/lib/TreeDeskStructure.js +46 -21
- package/lib/TreeInputComponent.d.ts +1 -1
- package/lib/TreeInputComponent.js +39 -8
- package/lib/components/DeskWarning.d.ts +1 -1
- package/lib/components/DeskWarning.js +28 -7
- package/lib/components/DocumentInNode.d.ts +1 -1
- package/lib/components/DocumentInNode.js +42 -18
- package/lib/components/DocumentPreviewStatus.d.ts +1 -1
- package/lib/components/DocumentPreviewStatus.js +16 -12
- package/lib/components/NodeActions.d.ts +1 -1
- package/lib/components/NodeActions.js +34 -10
- package/lib/components/NodeContentRenderer.js +43 -19
- package/lib/components/PlaceholderDropzone.d.ts +1 -1
- package/lib/components/PlaceholderDropzone.js +7 -5
- package/lib/components/TreeEditor.d.ts +1 -1
- package/lib/components/TreeEditor.js +28 -23
- package/lib/components/TreeEditorErrorBoundary.d.ts +1 -1
- package/lib/components/TreeEditorErrorBoundary.js +28 -7
- package/lib/components/TreeNodeRenderer.js +30 -6
- package/lib/components/TreeNodeRendererScaffold.d.ts +1 -1
- package/lib/components/TreeNodeRendererScaffold.js +9 -7
- package/lib/createDeskHierarchy.js +37 -19
- package/lib/createHierarchicalSchemas.d.ts +78 -0
- package/lib/createHierarchicalSchemas.js +138 -0
- package/lib/{utils → hooks}/useAllItems.d.ts +0 -0
- package/lib/{utils → hooks}/useAllItems.js +34 -9
- package/lib/{utils → hooks}/useLocalTree.d.ts +0 -0
- package/lib/{utils → hooks}/useLocalTree.js +26 -4
- package/lib/{utils → hooks}/useTreeOperations.d.ts +1 -1
- package/lib/hooks/useTreeOperations.js +39 -0
- package/lib/{utils → hooks}/useTreeOperationsProvider.d.ts +1 -1
- package/lib/hooks/useTreeOperationsProvider.js +85 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +12 -3
- package/lib/schemas/hierarchy.tree.d.ts +5 -15
- package/lib/schemas/hierarchy.tree.js +10 -22
- package/lib/utils/flatDataToTree.js +6 -3
- package/lib/utils/getAdjescentNodes.js +4 -1
- package/lib/utils/getCommonTreeProps.js +16 -10
- package/lib/utils/getTreeHeight.js +9 -5
- package/lib/utils/gradientPatchAdapter.js +12 -5
- package/lib/utils/idUtils.js +7 -2
- package/lib/utils/injectNodeTypeInPatches.d.ts +12 -0
- package/lib/utils/injectNodeTypeInPatches.js +58 -0
- package/lib/utils/moveItemInArray.js +4 -1
- package/lib/utils/throwError.d.ts +7 -0
- package/lib/utils/throwError.js +12 -0
- package/lib/utils/treeData.js +27 -15
- package/lib/utils/treePatches.js +51 -21
- package/package.json +1 -2
- package/tsconfig.json +3 -3
- package/lib/createHierarchicalField.d.ts +0 -8
- package/lib/createHierarchicalField.js +0 -51
- package/lib/utils/useTreeOperations.js +0 -16
- package/lib/utils/useTreeOperationsProvider.js +0 -60
package/lib/utils/idUtils.js
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isDraft = exports.unprefixId = void 0;
|
|
4
|
+
function unprefixId(_id) {
|
|
2
5
|
if (_id === void 0) { _id = ''; }
|
|
3
6
|
return _id.replace('drafts.', '');
|
|
4
7
|
}
|
|
5
|
-
|
|
8
|
+
exports.unprefixId = unprefixId;
|
|
9
|
+
function isDraft(_id) {
|
|
6
10
|
if (_id === void 0) { _id = ''; }
|
|
7
11
|
return _id.startsWith('drafts.');
|
|
8
12
|
}
|
|
13
|
+
exports.isDraft = isDraft;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function getSchemaTypeName(documentType: string, type: 'document' | 'node' | 'nodeValue' | 'array'): string;
|
|
2
|
+
/**
|
|
3
|
+
* Temporary value of nodes' `_type` before they are normalized and persisted as the user-defined choice.
|
|
4
|
+
*/
|
|
5
|
+
export declare const DEFAULT_DOC_TYPE = "hierarchy.tree";
|
|
6
|
+
export declare const INTERNAL_NODE_TYPE: string;
|
|
7
|
+
export declare const INTERNAL_NODE_VALUE_TYPE: string;
|
|
8
|
+
export declare const INTERNAL_NODE_ARRAY_TYPE: string;
|
|
9
|
+
/**
|
|
10
|
+
* Barebones recursive utility to inject the desired nodeObjectType in patches generated in deeply nested components and utilities.
|
|
11
|
+
*/
|
|
12
|
+
export default function injectNodeTypeInPatches(patchData: any, documentType: string): any;
|
|
@@ -0,0 +1,58 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.INTERNAL_NODE_ARRAY_TYPE = exports.INTERNAL_NODE_VALUE_TYPE = exports.INTERNAL_NODE_TYPE = exports.DEFAULT_DOC_TYPE = exports.getSchemaTypeName = void 0;
|
|
15
|
+
function getSchemaTypeName(documentType, type) {
|
|
16
|
+
switch (type) {
|
|
17
|
+
case 'document':
|
|
18
|
+
return documentType;
|
|
19
|
+
case 'array':
|
|
20
|
+
return "".concat(documentType, ".array");
|
|
21
|
+
case 'node':
|
|
22
|
+
return "".concat(documentType, ".node");
|
|
23
|
+
case 'nodeValue':
|
|
24
|
+
return "".concat(documentType, ".nodeValue");
|
|
25
|
+
default:
|
|
26
|
+
return documentType;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.getSchemaTypeName = getSchemaTypeName;
|
|
30
|
+
/**
|
|
31
|
+
* Temporary value of nodes' `_type` before they are normalized and persisted as the user-defined choice.
|
|
32
|
+
*/
|
|
33
|
+
exports.DEFAULT_DOC_TYPE = 'hierarchy.tree';
|
|
34
|
+
exports.INTERNAL_NODE_TYPE = getSchemaTypeName(exports.DEFAULT_DOC_TYPE, 'node');
|
|
35
|
+
exports.INTERNAL_NODE_VALUE_TYPE = getSchemaTypeName(exports.DEFAULT_DOC_TYPE, 'nodeValue');
|
|
36
|
+
exports.INTERNAL_NODE_ARRAY_TYPE = getSchemaTypeName(exports.DEFAULT_DOC_TYPE, 'array');
|
|
37
|
+
/**
|
|
38
|
+
* Barebones recursive utility to inject the desired nodeObjectType in patches generated in deeply nested components and utilities.
|
|
39
|
+
*/
|
|
40
|
+
function injectNodeTypeInPatches(patchData, documentType) {
|
|
41
|
+
if (Array.isArray(patchData)) {
|
|
42
|
+
return patchData.map(function (child) { return injectNodeTypeInPatches(child, documentType); });
|
|
43
|
+
}
|
|
44
|
+
if (typeof patchData === 'object' && patchData !== null) {
|
|
45
|
+
return Object.keys(patchData).reduce(function (newObject, key) {
|
|
46
|
+
var _a, _b;
|
|
47
|
+
var value = patchData[key];
|
|
48
|
+
if (key === '_type' &&
|
|
49
|
+
typeof value === 'string' &&
|
|
50
|
+
[exports.INTERNAL_NODE_TYPE, exports.INTERNAL_NODE_VALUE_TYPE].includes(value)) {
|
|
51
|
+
return __assign(__assign({}, newObject), (_a = {}, _a[key] = getSchemaTypeName(documentType, value === exports.INTERNAL_NODE_TYPE ? 'node' : 'nodeValue'), _a));
|
|
52
|
+
}
|
|
53
|
+
return __assign(__assign({}, newObject), (_b = {}, _b[key] = injectNodeTypeInPatches(value, documentType), _b));
|
|
54
|
+
}, {});
|
|
55
|
+
}
|
|
56
|
+
return patchData;
|
|
57
|
+
}
|
|
58
|
+
exports.default = injectNodeTypeInPatches;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
2
3
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
4
|
if (ar || !(i in from)) {
|
|
@@ -7,7 +8,8 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
7
8
|
}
|
|
8
9
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
10
|
};
|
|
10
|
-
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
function moveItemInArray(_a) {
|
|
11
13
|
var array = _a.array, fromIndex = _a.fromIndex, toIndex = _a.toIndex;
|
|
12
14
|
if (fromIndex === toIndex) {
|
|
13
15
|
return array;
|
|
@@ -21,3 +23,4 @@ export default function moveItemInArray(_a) {
|
|
|
21
23
|
newArray[toIndex] = target;
|
|
22
24
|
return newArray;
|
|
23
25
|
}
|
|
26
|
+
exports.default = moveItemInArray;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var ERROR_MESSAGES = {
|
|
4
|
+
invalidDocumentId: 'Please add a documentId to your tree',
|
|
5
|
+
invalidDocumentType: 'Please add a valid documentType to createHierarchicalSchemas',
|
|
6
|
+
invalidReferenceTo: "Missing valid 'referenceTo' value"
|
|
7
|
+
};
|
|
8
|
+
function throwError(message, extraContext) {
|
|
9
|
+
if (extraContext === void 0) { extraContext = ''; }
|
|
10
|
+
throw new Error("[hierarchical input] ".concat(ERROR_MESSAGES[message], " ").concat(extraContext));
|
|
11
|
+
}
|
|
12
|
+
exports.default = throwError;
|
package/lib/utils/treeData.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __assign = (this && this.__assign) || function () {
|
|
2
3
|
__assign = Object.assign || function(t) {
|
|
3
4
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
@@ -29,12 +30,18 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
29
30
|
}
|
|
30
31
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
31
32
|
};
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
34
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
35
|
+
};
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.normalizeNodeForStorage = exports.getUnaddedItems = exports.flatTree = exports.dataToEditorTree = void 0;
|
|
38
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
39
|
+
var content_1 = require("@sanity/util/content");
|
|
40
|
+
var DocumentInNode_1 = __importDefault(require("../components/DocumentInNode"));
|
|
41
|
+
var NodeActions_1 = __importDefault(require("../components/NodeActions"));
|
|
42
|
+
var flatDataToTree_1 = __importDefault(require("./flatDataToTree"));
|
|
43
|
+
var injectNodeTypeInPatches_1 = require("./injectNodeTypeInPatches");
|
|
44
|
+
var dataToEditorTree = function (_a) {
|
|
38
45
|
var tree = _a.tree, allItems = _a.allItems, visibilityMap = _a.visibilityMap;
|
|
39
46
|
var itemsWithTitle = tree
|
|
40
47
|
.filter(function (item) { var _a, _b; return (_b = (_a = item === null || item === void 0 ? void 0 : item.value) === null || _a === void 0 ? void 0 : _a.reference) === null || _b === void 0 ? void 0 : _b._ref; })
|
|
@@ -45,23 +52,25 @@ export var dataToEditorTree = function (_a) {
|
|
|
45
52
|
var draftDoc = docPair === null || docPair === void 0 ? void 0 : docPair.draft;
|
|
46
53
|
var publishedDoc = docPair === null || docPair === void 0 ? void 0 : docPair.published;
|
|
47
54
|
var enhancedItem = __assign(__assign({}, item), { expanded: visibilityMap[item._key] !== false, draftId: draftDoc === null || draftDoc === void 0 ? void 0 : draftDoc._id, publishedId: publishedDoc === null || publishedDoc === void 0 ? void 0 : publishedDoc._id, draftUpdatedAt: draftDoc === null || draftDoc === void 0 ? void 0 : draftDoc._updatedAt, publishedUpdatedAt: publishedDoc === null || publishedDoc === void 0 ? void 0 : publishedDoc._updatedAt });
|
|
48
|
-
return __assign(__assign({}, enhancedItem), { title: function (nodeProps) { return (
|
|
55
|
+
return __assign(__assign({}, enhancedItem), { title: function (nodeProps) { return ((0, jsx_runtime_1.jsx)(DocumentInNode_1.default, { item: enhancedItem, action: (0, jsx_runtime_1.jsx)(NodeActions_1.default, { nodeProps: nodeProps }, void 0) }, void 0)); }, children: [] });
|
|
49
56
|
});
|
|
50
|
-
return
|
|
57
|
+
return (0, flatDataToTree_1.default)(itemsWithTitle);
|
|
51
58
|
};
|
|
59
|
+
exports.dataToEditorTree = dataToEditorTree;
|
|
52
60
|
var documentPairToNode = function (doc) {
|
|
53
61
|
var _a, _b, _c, _d;
|
|
54
62
|
if (!((_a = doc === null || doc === void 0 ? void 0 : doc.published) === null || _a === void 0 ? void 0 : _a._id)) {
|
|
55
63
|
return undefined;
|
|
56
64
|
}
|
|
57
65
|
return {
|
|
58
|
-
_key: randomKey(12),
|
|
59
|
-
_type:
|
|
66
|
+
_key: (0, content_1.randomKey)(12),
|
|
67
|
+
_type: injectNodeTypeInPatches_1.INTERNAL_NODE_TYPE,
|
|
60
68
|
draftId: (_b = doc.draft) === null || _b === void 0 ? void 0 : _b._id,
|
|
61
69
|
draftUpdatedAt: (_c = doc.draft) === null || _c === void 0 ? void 0 : _c._updatedAt,
|
|
62
70
|
publishedId: doc.published._id,
|
|
63
71
|
publishedUpdatedAt: (_d = doc.published) === null || _d === void 0 ? void 0 : _d._updatedAt,
|
|
64
72
|
value: {
|
|
73
|
+
_type: injectNodeTypeInPatches_1.INTERNAL_NODE_VALUE_TYPE,
|
|
65
74
|
reference: {
|
|
66
75
|
_ref: doc.published._id,
|
|
67
76
|
_type: 'reference',
|
|
@@ -71,13 +80,14 @@ var documentPairToNode = function (doc) {
|
|
|
71
80
|
}
|
|
72
81
|
};
|
|
73
82
|
};
|
|
74
|
-
|
|
83
|
+
var flatTree = function (tree) {
|
|
75
84
|
return tree.reduce(function (flattened, item) {
|
|
76
85
|
var children = item.children, node = __rest(item, ["children"]);
|
|
77
|
-
return __spreadArray(__spreadArray(__spreadArray([], flattened, true), [node], false), (Array.isArray(children) ? flatTree(children) : []), true);
|
|
86
|
+
return __spreadArray(__spreadArray(__spreadArray([], flattened, true), [node], false), (Array.isArray(children) ? (0, exports.flatTree)(children) : []), true);
|
|
78
87
|
}, []);
|
|
79
88
|
};
|
|
80
|
-
|
|
89
|
+
exports.flatTree = flatTree;
|
|
90
|
+
var getUnaddedItems = function (data) {
|
|
81
91
|
if (!data.tree) {
|
|
82
92
|
return Object.entries(data.allItems)
|
|
83
93
|
.map(function (value) { return documentPairToNode(value[1]); })
|
|
@@ -96,11 +106,13 @@ export var getUnaddedItems = function (data) {
|
|
|
96
106
|
})
|
|
97
107
|
.filter(Boolean);
|
|
98
108
|
};
|
|
99
|
-
|
|
109
|
+
exports.getUnaddedItems = getUnaddedItems;
|
|
110
|
+
function normalizeNodeForStorage(item) {
|
|
100
111
|
return {
|
|
101
112
|
_key: item._key,
|
|
102
|
-
_type: item._type ||
|
|
113
|
+
_type: item._type || injectNodeTypeInPatches_1.INTERNAL_NODE_TYPE,
|
|
103
114
|
value: item.value,
|
|
104
115
|
parent: item.parent
|
|
105
116
|
};
|
|
106
117
|
}
|
|
118
|
+
exports.normalizeNodeForStorage = normalizeNodeForStorage;
|
package/lib/utils/treePatches.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
1
2
|
var __assign = (this && this.__assign) || function () {
|
|
2
3
|
__assign = Object.assign || function(t) {
|
|
3
4
|
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
@@ -9,6 +10,25 @@ var __assign = (this && this.__assign) || function () {
|
|
|
9
10
|
};
|
|
10
11
|
return __assign.apply(this, arguments);
|
|
11
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
|
+
};
|
|
12
32
|
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
13
33
|
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
14
34
|
if (ar || !(i in from)) {
|
|
@@ -18,28 +38,35 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
18
38
|
}
|
|
19
39
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
20
40
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
41
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
42
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.getMoveItemPatch = exports.getMovedNodePatch = exports.getRemoveItemPatch = exports.getDuplicateItemPatch = exports.getAddItemPatch = void 0;
|
|
46
|
+
var Patch = __importStar(require("@sanity/form-builder/lib/patch/patches"));
|
|
47
|
+
var content_1 = require("@sanity/util/content");
|
|
48
|
+
var react_sortable_tree_1 = require("react-sortable-tree");
|
|
49
|
+
var getAdjescentNodes_1 = __importDefault(require("./getAdjescentNodes"));
|
|
50
|
+
var moveItemInArray_1 = __importDefault(require("./moveItemInArray"));
|
|
51
|
+
var treeData_1 = require("./treeData");
|
|
52
|
+
function getAddItemPatch(item) {
|
|
53
|
+
var normalizedNode = (0, treeData_1.normalizeNodeForStorage)(item);
|
|
29
54
|
return [
|
|
30
55
|
// Add the node to the end of the tree
|
|
31
56
|
Patch.insert([normalizedNode], 'after', [-1])
|
|
32
57
|
];
|
|
33
58
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
var
|
|
59
|
+
exports.getAddItemPatch = getAddItemPatch;
|
|
60
|
+
function getDuplicateItemPatch(nodeProps) {
|
|
61
|
+
var newItem = __assign(__assign({}, nodeProps.node), { _key: (0, content_1.randomKey)(12) });
|
|
62
|
+
var normalizedNode = (0, treeData_1.normalizeNodeForStorage)(newItem);
|
|
37
63
|
return [
|
|
38
64
|
// Add duplicated node before the existing one
|
|
39
65
|
Patch.insert([normalizedNode], 'before', [{ _key: nodeProps.node._key }])
|
|
40
66
|
];
|
|
41
67
|
}
|
|
42
|
-
|
|
68
|
+
exports.getDuplicateItemPatch = getDuplicateItemPatch;
|
|
69
|
+
function getRemoveItemPatch(_a) {
|
|
43
70
|
var node = _a.node;
|
|
44
71
|
var keyPath = { _key: node._key };
|
|
45
72
|
var children = getChildrenPaths(node);
|
|
@@ -48,7 +75,8 @@ export function getRemoveItemPatch(_a) {
|
|
|
48
75
|
Patch.unset([keyPath])
|
|
49
76
|
], children.map(function (path) { return Patch.unset([{ _key: path }]); }), true);
|
|
50
77
|
}
|
|
51
|
-
|
|
78
|
+
exports.getRemoveItemPatch = getRemoveItemPatch;
|
|
79
|
+
function getMovedNodePatch(data) {
|
|
52
80
|
var _a, _b;
|
|
53
81
|
var nextParentNode = data.nextParentNode;
|
|
54
82
|
var keyPath = { _key: data.node._key };
|
|
@@ -57,12 +85,12 @@ export function getMovedNodePatch(data) {
|
|
|
57
85
|
if (!Array.isArray(data.nextPath)) {
|
|
58
86
|
return getRemoveItemPatch({ node: data.node });
|
|
59
87
|
}
|
|
60
|
-
var nextFlatTree = getFlatDataFromTree({
|
|
88
|
+
var nextFlatTree = (0, react_sortable_tree_1.getFlatDataFromTree)({
|
|
61
89
|
treeData: data.treeData,
|
|
62
90
|
getNodeKey: function (t) { return t.node._key; }
|
|
63
91
|
});
|
|
64
|
-
var normalizedNode = normalizeNodeForStorage(data.node);
|
|
65
|
-
var _c =
|
|
92
|
+
var normalizedNode = (0, treeData_1.normalizeNodeForStorage)(data.node);
|
|
93
|
+
var _c = (0, getAdjescentNodes_1.default)({
|
|
66
94
|
flatTree: nextFlatTree,
|
|
67
95
|
node: data.node,
|
|
68
96
|
treeIndex: data.nextTreeIndex
|
|
@@ -88,6 +116,7 @@ export function getMovedNodePatch(data) {
|
|
|
88
116
|
Patch.unset([keyPath, 'parent'])
|
|
89
117
|
];
|
|
90
118
|
}
|
|
119
|
+
exports.getMovedNodePatch = getMovedNodePatch;
|
|
91
120
|
function getChildrenPaths(node) {
|
|
92
121
|
if (!Array.isArray(node.children)) {
|
|
93
122
|
return [];
|
|
@@ -96,26 +125,26 @@ function getChildrenPaths(node) {
|
|
|
96
125
|
.reduce(function (keyPaths, child) { return __spreadArray(__spreadArray(__spreadArray([], keyPaths, true), [child._key], false), getChildrenPaths(child), true); }, [])
|
|
97
126
|
.filter(Boolean);
|
|
98
127
|
}
|
|
99
|
-
|
|
128
|
+
function getMoveItemPatch(_a) {
|
|
100
129
|
var _b, _c;
|
|
101
130
|
var _d = _a.nodeProps, node = _d.node, treeIndex = _d.treeIndex, localTree = _a.localTree, _e = _a.direction, direction = _e === void 0 ? 'up' : _e;
|
|
102
131
|
var keyPath = { _key: node._key };
|
|
103
132
|
var nextTreeIndex = treeIndex + (direction === 'up' ? -1 : 1);
|
|
104
|
-
var flatTree = getFlatDataFromTree({
|
|
133
|
+
var flatTree = (0, react_sortable_tree_1.getFlatDataFromTree)({
|
|
105
134
|
treeData: localTree,
|
|
106
135
|
getNodeKey: function (t) { return t.node._key; }
|
|
107
136
|
});
|
|
108
|
-
var nextFlatTree =
|
|
137
|
+
var nextFlatTree = (0, moveItemInArray_1.default)({
|
|
109
138
|
array: flatTree,
|
|
110
139
|
fromIndex: treeIndex,
|
|
111
140
|
toIndex: nextTreeIndex
|
|
112
141
|
});
|
|
113
|
-
var _f =
|
|
142
|
+
var _f = (0, getAdjescentNodes_1.default)({
|
|
114
143
|
flatTree: nextFlatTree,
|
|
115
144
|
node: node,
|
|
116
145
|
treeIndex: nextTreeIndex
|
|
117
146
|
}), leadingNode = _f.leadingNode, followingNode = _f.followingNode;
|
|
118
|
-
var normalizedNode = normalizeNodeForStorage(node);
|
|
147
|
+
var normalizedNode = (0, treeData_1.normalizeNodeForStorage)(node);
|
|
119
148
|
// When moving up, look at following node to figure out what is the next parent.
|
|
120
149
|
var nodeToInheritParent = direction === 'up' ? followingNode : leadingNode;
|
|
121
150
|
var nextParentNode = nodeToInheritParent === null || nodeToInheritParent === void 0 ? void 0 : nodeToInheritParent.parentNode;
|
|
@@ -139,3 +168,4 @@ export function getMoveItemPatch(_a) {
|
|
|
139
168
|
Patch.unset([keyPath, 'parent'])
|
|
140
169
|
];
|
|
141
170
|
}
|
|
171
|
+
exports.getMoveItemPatch = getMoveItemPatch;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sanity/hierarchical-document-list",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"author": "Sanity <hello@sanity.io>",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -41,7 +41,6 @@
|
|
|
41
41
|
"styled-components": "^5.3.3",
|
|
42
42
|
"typescript": "^4.5.5"
|
|
43
43
|
},
|
|
44
|
-
"type": "module",
|
|
45
44
|
"dependencies": {
|
|
46
45
|
"assert": "^2.0.0",
|
|
47
46
|
"react-sortable-tree": "^2.8.0"
|
package/tsconfig.json
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
"lib": ["DOM", "DOM.Iterable", "ESNext"],
|
|
6
6
|
"allowJs": false,
|
|
7
7
|
"skipLibCheck": true,
|
|
8
|
-
"esModuleInterop":
|
|
9
|
-
"allowSyntheticDefaultImports":
|
|
8
|
+
"esModuleInterop": true,
|
|
9
|
+
"allowSyntheticDefaultImports": false,
|
|
10
10
|
"strict": true,
|
|
11
11
|
"forceConsistentCasingInFileNames": true,
|
|
12
|
-
"module": "
|
|
12
|
+
"module": "CommonJS",
|
|
13
13
|
"moduleResolution": "Node",
|
|
14
14
|
"resolveJsonModule": true,
|
|
15
15
|
"isolatedModules": true,
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { ArraySchemaType } from '@sanity/types';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { TreeFieldSchema } from './types';
|
|
4
|
-
export default function createHierarchicalField({ name, title, options, ...rest }: TreeFieldSchema): Omit<ArraySchemaType, 'type' | 'jsonType' | 'of'> & {
|
|
5
|
-
type: string;
|
|
6
|
-
inputComponent: React.FC<any>;
|
|
7
|
-
of: any[];
|
|
8
|
-
};
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
var __assign = (this && this.__assign) || function () {
|
|
2
|
-
__assign = Object.assign || function(t) {
|
|
3
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
-
s = arguments[i];
|
|
5
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
-
t[p] = s[p];
|
|
7
|
-
}
|
|
8
|
-
return t;
|
|
9
|
-
};
|
|
10
|
-
return __assign.apply(this, arguments);
|
|
11
|
-
};
|
|
12
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
13
|
-
var t = {};
|
|
14
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
15
|
-
t[p] = s[p];
|
|
16
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
17
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
18
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
19
|
-
t[p[i]] = s[p[i]];
|
|
20
|
-
}
|
|
21
|
-
return t;
|
|
22
|
-
};
|
|
23
|
-
import TreeInputComponent from './TreeInputComponent';
|
|
24
|
-
export default function createHierarchicalField(_a) {
|
|
25
|
-
var name = _a.name, title = _a.title, options = _a.options, rest = __rest(_a, ["name", "title", "options"]);
|
|
26
|
-
if (!Array.isArray(options === null || options === void 0 ? void 0 : options.referenceTo)) {
|
|
27
|
-
throw new Error("[hierarchical input] Missing valid options.referenceTo in createHierarchicalField (field of name \"".concat(name, "\")"));
|
|
28
|
-
}
|
|
29
|
-
return __assign(__assign({}, rest), { options: options, name: name, title: title, type: 'array', of: [
|
|
30
|
-
{
|
|
31
|
-
type: 'object',
|
|
32
|
-
fields: [
|
|
33
|
-
{ name: 'parent', type: 'string' },
|
|
34
|
-
{
|
|
35
|
-
name: 'value',
|
|
36
|
-
type: 'object',
|
|
37
|
-
fields: [
|
|
38
|
-
{ name: 'docType', type: 'string' },
|
|
39
|
-
{
|
|
40
|
-
name: 'reference',
|
|
41
|
-
type: 'reference',
|
|
42
|
-
weak: true,
|
|
43
|
-
to: options.referenceTo.map(function (type) { return ({ type: type }); }),
|
|
44
|
-
options: options.referenceOptions
|
|
45
|
-
}
|
|
46
|
-
]
|
|
47
|
-
}
|
|
48
|
-
]
|
|
49
|
-
}
|
|
50
|
-
], inputComponent: TreeInputComponent });
|
|
51
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
function placeholder() {
|
|
3
|
-
// no-op
|
|
4
|
-
}
|
|
5
|
-
export var TreeOperationsContext = React.createContext({
|
|
6
|
-
addItem: placeholder,
|
|
7
|
-
duplicateItem: placeholder,
|
|
8
|
-
removeItem: placeholder,
|
|
9
|
-
handleMovedNode: placeholder,
|
|
10
|
-
moveItemDown: placeholder,
|
|
11
|
-
moveItemUp: placeholder,
|
|
12
|
-
allItemsStatus: 'loading'
|
|
13
|
-
});
|
|
14
|
-
export default function useTreeOperations() {
|
|
15
|
-
return React.useContext(TreeOperationsContext);
|
|
16
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
2
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
|
-
if (ar || !(i in from)) {
|
|
4
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
-
ar[i] = from[i];
|
|
6
|
-
}
|
|
7
|
-
}
|
|
8
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
|
-
};
|
|
10
|
-
import * as Patch from '@sanity/form-builder/lib/patch/patches';
|
|
11
|
-
import PatchEvent from '@sanity/form-builder/PatchEvent';
|
|
12
|
-
import { getAddItemPatch, getDuplicateItemPatch, getMovedNodePatch, getMoveItemPatch, getRemoveItemPatch } from './treePatches';
|
|
13
|
-
export default function useTreeOperationsProvider(props) {
|
|
14
|
-
var localTree = props.localTree;
|
|
15
|
-
function runPatches(patches) {
|
|
16
|
-
var finalPatches = __spreadArray([
|
|
17
|
-
// Ensure tree array exists before any operation
|
|
18
|
-
Patch.setIfMissing([])
|
|
19
|
-
], (patches || []), true);
|
|
20
|
-
var patchEvent = PatchEvent.from(finalPatches);
|
|
21
|
-
if (props.patchPrefix) {
|
|
22
|
-
patchEvent = PatchEvent.from(finalPatches.map(function (patch) { return Patch.prefixPath(patch, props.patchPrefix); }));
|
|
23
|
-
}
|
|
24
|
-
props.onChange(patchEvent);
|
|
25
|
-
}
|
|
26
|
-
function handleMovedNode(data) {
|
|
27
|
-
runPatches(getMovedNodePatch(data));
|
|
28
|
-
}
|
|
29
|
-
function addItem(item) {
|
|
30
|
-
runPatches(getAddItemPatch(item));
|
|
31
|
-
}
|
|
32
|
-
function duplicateItem(nodeProps) {
|
|
33
|
-
runPatches(getDuplicateItemPatch(nodeProps));
|
|
34
|
-
}
|
|
35
|
-
function removeItem(nodeProps) {
|
|
36
|
-
runPatches(getRemoveItemPatch(nodeProps));
|
|
37
|
-
}
|
|
38
|
-
function moveItemUp(nodeProps) {
|
|
39
|
-
runPatches(getMoveItemPatch({
|
|
40
|
-
nodeProps: nodeProps,
|
|
41
|
-
localTree: localTree,
|
|
42
|
-
direction: 'up'
|
|
43
|
-
}));
|
|
44
|
-
}
|
|
45
|
-
function moveItemDown(nodeProps) {
|
|
46
|
-
runPatches(getMoveItemPatch({
|
|
47
|
-
nodeProps: nodeProps,
|
|
48
|
-
localTree: localTree,
|
|
49
|
-
direction: 'down'
|
|
50
|
-
}));
|
|
51
|
-
}
|
|
52
|
-
return {
|
|
53
|
-
handleMovedNode: handleMovedNode,
|
|
54
|
-
addItem: addItem,
|
|
55
|
-
removeItem: removeItem,
|
|
56
|
-
moveItemUp: moveItemUp,
|
|
57
|
-
moveItemDown: moveItemDown,
|
|
58
|
-
duplicateItem: duplicateItem
|
|
59
|
-
};
|
|
60
|
-
}
|