@sanity/hierarchical-document-list 0.1.0 → 1.1.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.
Files changed (85) hide show
  1. package/.husky/commit-msg +4 -0
  2. package/.husky/pre-commit +4 -0
  3. package/.idea/hierarchical-document-list.iml +11 -0
  4. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  5. package/.idea/misc.xml +6 -0
  6. package/.idea/modules.xml +8 -0
  7. package/.idea/prettier.xml +7 -0
  8. package/.idea/vcs.xml +6 -0
  9. package/CHANGELOG.md +15 -0
  10. package/README.md +329 -224
  11. package/commitlint.config.js +3 -0
  12. package/lib/TreeDeskStructure.d.ts +8 -7
  13. package/lib/TreeDeskStructure.js +96 -71
  14. package/lib/TreeInputComponent.d.ts +19 -19
  15. package/lib/TreeInputComponent.js +50 -21
  16. package/lib/components/DeskWarning.d.ts +6 -6
  17. package/lib/components/DeskWarning.js +46 -25
  18. package/lib/components/DocumentInNode.d.ts +11 -11
  19. package/lib/components/DocumentInNode.js +81 -58
  20. package/lib/components/DocumentPreviewStatus.d.ts +7 -7
  21. package/lib/components/DocumentPreviewStatus.js +39 -35
  22. package/lib/components/NodeActions.d.ts +10 -10
  23. package/lib/components/NodeActions.js +61 -37
  24. package/lib/components/NodeContentRenderer.d.ts +8 -8
  25. package/lib/components/NodeContentRenderer.js +105 -81
  26. package/lib/components/PlaceholderDropzone.d.ts +9 -9
  27. package/lib/components/PlaceholderDropzone.js +30 -28
  28. package/lib/components/SuppressedDnDManager.d.ts +2 -0
  29. package/lib/components/SuppressedDnDManager.js +59 -0
  30. package/lib/components/TreeEditor.d.ts +12 -12
  31. package/lib/components/TreeEditor.js +74 -54
  32. package/lib/components/TreeEditorErrorBoundary.d.ts +16 -17
  33. package/lib/components/TreeEditorErrorBoundary.js +74 -69
  34. package/lib/components/TreeNodeRenderer.d.ts +3 -3
  35. package/lib/components/TreeNodeRenderer.js +59 -35
  36. package/lib/components/TreeNodeRendererScaffold.d.ts +4 -4
  37. package/lib/components/TreeNodeRendererScaffold.js +44 -42
  38. package/lib/createDeskHierarchy.d.ts +14 -14
  39. package/lib/createDeskHierarchy.js +84 -67
  40. package/lib/createHierarchicalSchemas.d.ts +98 -0
  41. package/lib/createHierarchicalSchemas.js +138 -0
  42. package/lib/{utils → hooks}/useAllItems.d.ts +7 -7
  43. package/lib/{utils → hooks}/useAllItems.js +119 -94
  44. package/lib/{utils → hooks}/useLocalTree.d.ts +17 -17
  45. package/lib/{utils → hooks}/useLocalTree.js +59 -37
  46. package/lib/{utils → hooks}/useTreeOperations.d.ts +9 -9
  47. package/lib/hooks/useTreeOperations.js +39 -0
  48. package/lib/{utils → hooks}/useTreeOperationsProvider.d.ts +14 -14
  49. package/lib/hooks/useTreeOperationsProvider.js +85 -0
  50. package/lib/index.d.ts +3 -3
  51. package/lib/index.js +12 -3
  52. package/lib/schemas/hierarchy.tree.d.ts +13 -23
  53. package/lib/schemas/hierarchy.tree.js +19 -31
  54. package/lib/types.d.ts +128 -0
  55. package/lib/types.js +2 -0
  56. package/lib/utils/flatDataToTree.d.ts +6 -6
  57. package/lib/utils/flatDataToTree.js +26 -23
  58. package/lib/utils/getAdjescentNodes.d.ts +12 -12
  59. package/lib/utils/getAdjescentNodes.js +19 -16
  60. package/lib/utils/getCommonTreeProps.d.ts +7 -7
  61. package/lib/utils/getCommonTreeProps.js +33 -27
  62. package/lib/utils/getTreeHeight.d.ts +3 -3
  63. package/lib/utils/getTreeHeight.js +11 -7
  64. package/lib/utils/gradientPatchAdapter.d.ts +4 -4
  65. package/lib/utils/gradientPatchAdapter.js +40 -35
  66. package/lib/utils/idUtils.d.ts +2 -2
  67. package/lib/utils/idUtils.js +13 -8
  68. package/lib/utils/injectNodeTypeInPatches.d.ts +12 -0
  69. package/lib/utils/injectNodeTypeInPatches.js +59 -0
  70. package/lib/utils/moveItemInArray.d.ts +5 -5
  71. package/lib/utils/moveItemInArray.js +26 -23
  72. package/lib/utils/throwError.d.ts +7 -0
  73. package/lib/utils/throwError.js +12 -0
  74. package/lib/utils/treeData.d.ts +18 -18
  75. package/lib/utils/treeData.js +118 -106
  76. package/lib/utils/treePatches.d.ts +15 -15
  77. package/lib/utils/treePatches.js +171 -141
  78. package/lint-staged.config.js +4 -0
  79. package/package.json +65 -56
  80. package/sanity.json +12 -12
  81. package/tsconfig.json +20 -20
  82. package/lib/createHierarchicalField.d.ts +0 -8
  83. package/lib/createHierarchicalField.js +0 -51
  84. package/lib/utils/useTreeOperations.js +0 -16
  85. package/lib/utils/useTreeOperationsProvider.js +0 -60
@@ -1,17 +1,17 @@
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
+ 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,37 +1,59 @@
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
- import React from 'react';
13
- import { dataToEditorTree } from './treeData';
14
- /**
15
- * Enhances tree data with information on:
16
- * - `expanded` - native property of react-sortable-tree to determine collapsing & expanding of a node's children
17
- * - `draftId` & `publishedId` - refer to LocalTreeItem's type annotations
18
- *
19
- * Doesn't modify the main tree or has side-effects on data.
20
- * Has the added benefit of being local to the user, so external changes won't affect local visibility.
21
- */
22
- export default function useLocalTree(_a) {
23
- var tree = _a.tree, allItems = _a.allItems;
24
- var _b = React.useState({}), visibilityMap = _b[0], setVisibilityMap = _b[1];
25
- function handleVisibilityToggle(data) {
26
- var _a;
27
- setVisibilityMap(__assign(__assign({}, visibilityMap), (_a = {}, _a[data.node._key] = data.expanded, _a)));
28
- }
29
- return {
30
- localTree: dataToEditorTree({
31
- tree: tree,
32
- allItems: allItems,
33
- visibilityMap: visibilityMap
34
- }),
35
- handleVisibilityToggle: handleVisibilityToggle
36
- };
37
- }
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 +1,9 @@
1
- import 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
+ 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 {};
@@ -0,0 +1,39 @@
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 +1,14 @@
1
- import { LocalTreeItem, NodeProps } from '../types';
2
- import { HandleMovedNode } from './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
+ 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
+ };
@@ -0,0 +1,85 @@
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 CHANGED
@@ -1,3 +1,3 @@
1
- export { default as createHierarchicalField } from './createHierarchicalField';
2
- export { default as createDeskHierarchy } from './createDeskHierarchy';
3
- export { default as flatDataToTree } from './utils/flatDataToTree';
1
+ export { default as createHierarchicalSchemas } from './createHierarchicalSchemas';
2
+ export { default as createDeskHierarchy } from './createDeskHierarchy';
3
+ export { default as flatDataToTree } from './utils/flatDataToTree';
package/lib/index.js CHANGED
@@ -1,3 +1,12 @@
1
- export { default as createHierarchicalField } from './createHierarchicalField';
2
- export { default as createDeskHierarchy } from './createDeskHierarchy';
3
- export { default as flatDataToTree } from './utils/flatDataToTree';
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,23 +1,13 @@
1
- /// <reference types="react" />
2
- declare const _default: {
3
- name: string;
4
- title: string;
5
- type: string;
6
- liveEdit: boolean;
7
- fields: (Omit<import("@sanity/types/dist/dts").ArraySchemaType<unknown>, "type" | "of" | "jsonType"> & {
8
- type: string;
9
- inputComponent: import("react").FC<any>;
10
- of: any[];
11
- })[];
12
- preview: {
13
- select: {
14
- id: string;
15
- tree: string;
16
- };
17
- prepare({ id, tree }: {
18
- id: string;
19
- tree: unknown[];
20
- }): Record<string, string>;
21
- };
22
- };
23
- export default _default;
1
+ declare const _default: {
2
+ name: string;
3
+ title: string;
4
+ type: string;
5
+ liveEdit: boolean;
6
+ fields: {
7
+ name: string;
8
+ title: string;
9
+ type: string;
10
+ hidden: boolean;
11
+ }[];
12
+ };
13
+ export default _default;
@@ -1,31 +1,19 @@
1
- import createHierarchicalField from '../createHierarchicalField';
2
- export default {
3
- name: 'hierarchy.tree',
4
- title: 'Hierarchical tree',
5
- type: 'document',
6
- // The plugin needs to define a `schemaType` with liveEdit enabled so that
7
- // `useDocumentOperation` in TreeDeskStructure.tsx doesn't create drafts at every patch.
8
- liveEdit: true,
9
- fields: [
10
- createHierarchicalField({
11
- name: 'tree',
12
- title: 'Tree',
13
- options: {
14
- referenceTo: ['image']
15
- }
16
- })
17
- ],
18
- preview: {
19
- select: {
20
- id: '_id',
21
- tree: 'tree'
22
- },
23
- prepare: function (_a) {
24
- var id = _a.id, tree = _a.tree;
25
- return {
26
- title: "Hierarchical documents (ID: ".concat(id, ")"),
27
- subtitle: "".concat((tree === null || tree === void 0 ? void 0 : tree.length) || 0, " document(s) in its list.")
28
- };
29
- }
30
- }
31
- };
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
+ };
package/lib/types.d.ts ADDED
@@ -0,0 +1,128 @@
1
+ import { SanityDocument } from '@sanity/client';
2
+ import { ArraySchemaType, ObjectSchemaType } from '@sanity/types';
3
+ import { NodeRendererProps, TreeItem } from 'react-sortable-tree';
4
+ import { INTERNAL_NODE_TYPE, INTERNAL_NODE_VALUE_TYPE } from './utils/injectNodeTypeInPatches';
5
+ interface SanityReference {
6
+ _type: 'reference';
7
+ _ref: string;
8
+ _weak?: boolean;
9
+ }
10
+ /**
11
+ * Objects saved to tree documents in Sanity's Content Lake
12
+ */
13
+ export interface StoredTreeItem {
14
+ _key: string;
15
+ _type: typeof INTERNAL_NODE_TYPE | string;
16
+ value?: {
17
+ _type: typeof INTERNAL_NODE_VALUE_TYPE | string;
18
+ reference?: SanityReference;
19
+ docType?: string;
20
+ };
21
+ /**
22
+ * _key of parent node
23
+ */
24
+ parent?: string | null;
25
+ }
26
+ /**
27
+ * Tree items enhanced locally in the client with info from `allItems` and `visibilityMap`.
28
+ * `allItems` stop here and never become LocalTreeItems as they aren't added to react-sortable-tree.
29
+ *
30
+ * See `useLocalTree.ts` and `dataToEditorTree()`.
31
+ */
32
+ export interface EnhancedTreeItem extends StoredTreeItem {
33
+ expanded?: boolean | undefined;
34
+ /**
35
+ * Used by DocumentInNode to render the preview for drafts if they exist.
36
+ * Also informs document status icons.
37
+ */
38
+ draftId?: string;
39
+ draftUpdatedAt?: string;
40
+ /**
41
+ * If not present, DocumentInNode will show up an error for invalid document.
42
+ * - undefined `publishedId` could mean the document is either deleted, or it doesn't match GROQ filters anymore
43
+ */
44
+ publishedId?: string;
45
+ publishedUpdatedAt?: string;
46
+ }
47
+ /**
48
+ * Tree items as found in the sortable tree itself.
49
+ */
50
+ export declare type LocalTreeItem = EnhancedTreeItem & Pick<TreeItem, 'title' | 'children'>;
51
+ export interface TreeInputOptions {
52
+ /**
53
+ * What document types this hierarchy can refer to.
54
+ * Similar to the `to` property of the [reference field](https://www.sanity.io/docs/reference-type).
55
+ */
56
+ referenceTo: string[];
57
+ /**
58
+ * Used to provide fine-grained filtering for documents.
59
+ */
60
+ referenceOptions?: {
61
+ /**
62
+ * Static filter to apply to tree document queries.
63
+ */
64
+ filter?: string;
65
+ /**
66
+ * Parameters / variables to pass to the GROQ query ran to fetch documents.
67
+ */
68
+ filterParams?: Record<string, unknown>;
69
+ };
70
+ /**
71
+ * How deep should editors be allowed to nest items.
72
+ */
73
+ maxDepth?: number;
74
+ /**
75
+ * Schema type for your hierarchical documents.
76
+ * Refer to documentation on how to provide these schemas in your studio.
77
+ *
78
+ * Defautlt: 'hierarchy.tree' - this schema is bundled with the plugin
79
+ */
80
+ documentType?: string;
81
+ }
82
+ export interface TreeFieldSchema extends Omit<ArraySchemaType, 'of' | 'type' | 'inputComponent' | 'jsonType'> {
83
+ options: ArraySchemaType['options'] & TreeInputOptions;
84
+ }
85
+ export interface TreeNodeObjectSchema extends Omit<ObjectSchemaType, 'name' | 'fields' | 'type' | 'inputComponent' | 'jsonType'> {
86
+ options: ObjectSchemaType['options'] & TreeInputOptions;
87
+ }
88
+ export interface TreeDeskStructureProps extends TreeInputOptions {
89
+ /**
90
+ * _id of the document that will hold the tree data.
91
+ */
92
+ documentId: string;
93
+ /**
94
+ * (Optional)
95
+ * Key for the field representing the hierarchical tree inside the document.
96
+ * `tree` by default.
97
+ */
98
+ fieldKeyInDocument?: string;
99
+ }
100
+ export interface DocumentPair {
101
+ draft?: SanityDocument;
102
+ published?: SanityDocument;
103
+ }
104
+ export interface AllItems {
105
+ [publishedId: string]: DocumentPair | undefined;
106
+ }
107
+ declare type DocumentOperation<Payload = unknown> = {
108
+ execute?: (payload?: Payload) => void;
109
+ disabled?: boolean | string;
110
+ };
111
+ export interface DocumentOperations {
112
+ patch?: DocumentOperation<unknown[]>;
113
+ commit?: DocumentOperation;
114
+ del?: DocumentOperation;
115
+ delete?: DocumentOperation;
116
+ discardChanges?: DocumentOperation;
117
+ duplicate?: DocumentOperation;
118
+ restore?: DocumentOperation;
119
+ unpublish?: DocumentOperation;
120
+ publish?: DocumentOperation;
121
+ }
122
+ export interface VisibilityMap {
123
+ [_key: string]: boolean;
124
+ }
125
+ export interface NodeProps extends NodeRendererProps {
126
+ node: LocalTreeItem;
127
+ }
128
+ export {};
package/lib/types.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,6 +1,6 @@
1
- import { StoredTreeItem } from '../types';
2
- interface TreeItemWithChildren extends StoredTreeItem {
3
- children?: TreeItemWithChildren[];
4
- }
5
- export default function flatDataToTree(data: StoredTreeItem[]): TreeItemWithChildren[];
6
- export {};
1
+ import { StoredTreeItem } from '../types';
2
+ interface TreeItemWithChildren extends StoredTreeItem {
3
+ children?: TreeItemWithChildren[];
4
+ }
5
+ export default function flatDataToTree(data: StoredTreeItem[]): TreeItemWithChildren[];
6
+ export {};
@@ -1,23 +1,26 @@
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
- import { getTreeFromFlatData } from 'react-sortable-tree';
13
- export default function flatDataToTree(data) {
14
- return getTreeFromFlatData({
15
- flatData: data.map(function (item) { return (__assign(__assign({}, item), {
16
- // if parent: undefined, the tree won't be constructed
17
- parent: item.parent || null })); }),
18
- getKey: function (item) { return item._key; },
19
- getParentKey: function (item) { return item.parent; },
20
- // without rootKey, the tree won't be constructed
21
- rootKey: null
22
- });
23
- }
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
+ var react_sortable_tree_1 = require("react-sortable-tree");
15
+ function flatDataToTree(data) {
16
+ return (0, react_sortable_tree_1.getTreeFromFlatData)({
17
+ flatData: data.map(function (item) { return (__assign(__assign({}, item), {
18
+ // if parent: undefined, the tree won't be constructed
19
+ parent: item.parent || null })); }),
20
+ getKey: function (item) { return item._key; },
21
+ getParentKey: function (item) { return item.parent; },
22
+ // without rootKey, the tree won't be constructed
23
+ rootKey: null
24
+ });
25
+ }
26
+ exports.default = flatDataToTree;
@@ -1,12 +1,12 @@
1
- import { FlatDataItem, TreeItem } from 'react-sortable-tree';
2
- /**
3
- * Gets adjescent non-children nodes of a given treeIndex.
4
- */
5
- export default function getAdjescentNodes({ flatTree, node, treeIndex }: {
6
- flatTree: FlatDataItem[];
7
- node: TreeItem;
8
- treeIndex: number;
9
- }): {
10
- leadingNode?: FlatDataItem;
11
- followingNode?: FlatDataItem;
12
- };
1
+ import { FlatDataItem, TreeItem } from 'react-sortable-tree';
2
+ /**
3
+ * Gets adjescent non-children nodes of a given treeIndex.
4
+ */
5
+ export default function getAdjescentNodes({ flatTree, node, treeIndex }: {
6
+ flatTree: FlatDataItem[];
7
+ node: TreeItem;
8
+ treeIndex: number;
9
+ }): {
10
+ leadingNode?: FlatDataItem;
11
+ followingNode?: FlatDataItem;
12
+ };