mirror of
https://github.com/foomo/contentfultree.git
synced 2025-10-16 12:25:41 +00:00
feat: remove useImmer
This commit is contained in:
parent
e2656c8d4e
commit
f6065c38eb
12
dist/ContentTree.d.ts
vendored
12
dist/ContentTree.d.ts
vendored
@ -1,16 +1,14 @@
|
||||
import { PlainClientAPI } from 'contentful-management';
|
||||
import { PageExtensionSDK } from 'contentful-ui-extensions-sdk';
|
||||
import { ReactElement } from 'react';
|
||||
import { type PlainClientAPI } from 'contentful-management';
|
||||
import { type PageAppSDK } from 'contentful-ui-extensions-sdk';
|
||||
import { type ReactElement } from 'react';
|
||||
export interface ContentTreeProps {
|
||||
sdkInstance: PageExtensionSDK;
|
||||
sdkInstance: PageAppSDK;
|
||||
cma: PlainClientAPI;
|
||||
rootType: string;
|
||||
nodeContentTypes: string[];
|
||||
titleFields: string[];
|
||||
locales: string[];
|
||||
indentation?: number;
|
||||
iconRegistry?: {
|
||||
[index: string]: string;
|
||||
};
|
||||
iconRegistry?: Record<string, string>;
|
||||
}
|
||||
export declare const ContentTree: ({ sdkInstance, cma, rootType, nodeContentTypes, titleFields, locales, indentation, iconRegistry, }: ContentTreeProps) => ReactElement;
|
||||
|
||||
3
dist/ContentTree.js
vendored
3
dist/ContentTree.js
vendored
@ -61,13 +61,12 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ContentTree = void 0;
|
||||
var react_1 = __importStar(require("react"));
|
||||
var use_immer_1 = require("use-immer");
|
||||
var ContentTreeRoot_1 = require("./ContentTreeRoot");
|
||||
var ContentTreeUtils_1 = require("./ContentTreeUtils");
|
||||
var ContentTree = function (_a) {
|
||||
var sdkInstance = _a.sdkInstance, cma = _a.cma, rootType = _a.rootType, nodeContentTypes = _a.nodeContentTypes, titleFields = _a.titleFields, locales = _a.locales, _b = _a.indentation, indentation = _b === void 0 ? 1 : _b, iconRegistry = _a.iconRegistry;
|
||||
var stLocale = (0, react_1.useState)(locales[0])[0];
|
||||
var _c = (0, use_immer_1.useImmer)([(0, ContentTreeUtils_1.emptyNodeProps)()]), rootNodes = _c[0], setRootNodes = _c[1];
|
||||
var _c = (0, react_1.useState)([(0, ContentTreeUtils_1.emptyNodeProps)()]), rootNodes = _c[0], setRootNodes = _c[1];
|
||||
(0, react_1.useEffect)(function () {
|
||||
if (sdkInstance) {
|
||||
loadData().catch(function (err) {
|
||||
|
||||
2
dist/ContentTree.styled.js
vendored
2
dist/ContentTree.styled.js
vendored
@ -32,6 +32,6 @@ var getPublishingStatusColors = function (status) {
|
||||
};
|
||||
}
|
||||
};
|
||||
exports.StyledContentTreeNodePublishingStatus = styled_components_1.default.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n display: inline-block;\n font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;\n font-weight: 600;\n font-size: 80%;\n text-transform: uppercase;\n letter-spacing: 0.06rem;\n border-radius: 4px;\n padding: 0 0.2rem;\n color: ", " !important;\n background-color: ", " !important;\n}\n"], ["\n display: inline-block;\n font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;\n font-weight: 600;\n font-size: 80%;\n text-transform: uppercase;\n letter-spacing: 0.06rem;\n border-radius: 4px;\n padding: 0 0.2rem;\n color: ", " !important;\n background-color: ", " !important;\n}\n"])), function (props) { var _a; return (_a = getPublishingStatusColors(props.status)) === null || _a === void 0 ? void 0 : _a.publishingStatusFg; }, function (props) { var _a; return (_a = getPublishingStatusColors(props.status)) === null || _a === void 0 ? void 0 : _a.publishingStatusBg; });
|
||||
exports.StyledContentTreeNodePublishingStatus = styled_components_1.default.div(templateObject_5 || (templateObject_5 = __makeTemplateObject(["\n\tdisplay: inline-block;\n\tfont-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n\t\tsans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;\n\tfont-weight: 600;\n\tfont-size: 80%;\n\ttext-transform: uppercase;\n\tletter-spacing: 0.06rem;\n\tborder-radius: 4px;\n\tpadding: 0 0.2rem;\n\tcolor: ", " !important;\n\tbackground-color: ", " !important;\n"], ["\n\tdisplay: inline-block;\n\tfont-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\n\t\tsans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;\n\tfont-weight: 600;\n\tfont-size: 80%;\n\ttext-transform: uppercase;\n\tletter-spacing: 0.06rem;\n\tborder-radius: 4px;\n\tpadding: 0 0.2rem;\n\tcolor: ", " !important;\n\tbackground-color: ", " !important;\n"])), function (props) { var _a; return (_a = getPublishingStatusColors(props.status)) === null || _a === void 0 ? void 0 : _a.publishingStatusFg; }, function (props) { var _a; return (_a = getPublishingStatusColors(props.status)) === null || _a === void 0 ? void 0 : _a.publishingStatusBg; });
|
||||
exports.StyledSpinner = styled_components_1.default.div(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n\tdisplay: inline-block;\n\twidth: 1em;\n\tanimation: rotate 1s infinite;\n\t@keyframes rotate {\n\t\tfrom {\n\t\t\ttransform: rotate(0deg);\n\t\t}\n\t\tto {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n"], ["\n\tdisplay: inline-block;\n\twidth: 1em;\n\tanimation: rotate 1s infinite;\n\t@keyframes rotate {\n\t\tfrom {\n\t\t\ttransform: rotate(0deg);\n\t\t}\n\t\tto {\n\t\t\ttransform: rotate(360deg);\n\t\t}\n\t}\n"])));
|
||||
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6;
|
||||
|
||||
2
dist/ContentTreeNode.d.ts
vendored
2
dist/ContentTreeNode.d.ts
vendored
@ -1,4 +1,4 @@
|
||||
import { ReactElement } from 'react';
|
||||
import { type ReactElement } from 'react';
|
||||
export interface ContentTreeNodeProps {
|
||||
id: string;
|
||||
name: string;
|
||||
|
||||
10
dist/ContentTreeNode.js
vendored
10
dist/ContentTreeNode.js
vendored
@ -91,10 +91,16 @@ var ContentTreeNode = function (props) {
|
||||
return (react_1.default.createElement(react_1.default.Fragment, null,
|
||||
react_1.default.createElement("tr", null,
|
||||
react_1.default.createElement(ContentTree_styled_1.StyledContentTreeTableNodeCell, { depth: props.depth },
|
||||
react_1.default.createElement(ContentTree_styled_1.StyledContentTreeNodeWedge, null, loading ? (react_1.default.createElement(ContentTree_styled_1.StyledSpinner, null, "-")) : props.node.hasChildNodes ? (props.node.expand ? (react_1.default.createElement("a", { onClick: function () { return handleAddChildren(props.node); } }, "+")) : (react_1.default.createElement("a", { onClick: function () { return props.removeChildNodes(props.node); } }, "-"))) : null),
|
||||
react_1.default.createElement(ContentTree_styled_1.StyledContentTreeNodeWedge, null, loading ? (react_1.default.createElement(ContentTree_styled_1.StyledSpinner, null, "-")) : props.node.hasChildNodes ? (props.node.expand ? (react_1.default.createElement("a", { onClick: function () {
|
||||
handleAddChildren(props.node);
|
||||
} }, "+")) : (react_1.default.createElement("a", { onClick: function () {
|
||||
props.removeChildNodes(props.node);
|
||||
} }, "-"))) : null),
|
||||
react_1.default.createElement(Icons_1.Icon, { id: props.node.icon }),
|
||||
react_1.default.createElement(ContentTree_styled_1.StyledContentTreeNodeName, null,
|
||||
react_1.default.createElement("a", { onClick: function () { return handleEditEntry(); }, title: props.node.id }, props.node.name))),
|
||||
react_1.default.createElement("a", { onClick: function () {
|
||||
handleEditEntry();
|
||||
}, title: props.node.id }, props.node.name))),
|
||||
react_1.default.createElement("td", null, props.node.contentType),
|
||||
react_1.default.createElement("td", null,
|
||||
react_1.default.createElement(ContentTree_styled_1.StyledContentTreeNodePublishingStatus, { status: (_a = props.node.publishingStatus) !== null && _a !== void 0 ? _a : '' }, props.node.publishingStatus)),
|
||||
|
||||
14
dist/ContentTreeRoot.d.ts
vendored
14
dist/ContentTreeRoot.d.ts
vendored
@ -1,17 +1,15 @@
|
||||
import { PlainClientAPI } from 'contentful-management';
|
||||
import { PageExtensionSDK } from 'contentful-ui-extensions-sdk';
|
||||
import { ReactElement } from 'react';
|
||||
import { ContentTreeNodeProps } from './ContentTreeNode';
|
||||
import { type PlainClientAPI } from 'contentful-management';
|
||||
import { type PageAppSDK } from 'contentful-ui-extensions-sdk';
|
||||
import { type ReactElement } from 'react';
|
||||
import { type ContentTreeNodeProps } from './ContentTreeNode';
|
||||
export interface ContentTreeRootProps {
|
||||
node: ContentTreeNodeProps;
|
||||
sdkInstance: PageExtensionSDK;
|
||||
sdkInstance: PageAppSDK;
|
||||
cma: PlainClientAPI;
|
||||
nodeContentTypes: string[];
|
||||
titleFields: string[];
|
||||
locales: string[];
|
||||
depth: number;
|
||||
iconRegistry?: {
|
||||
[index: string]: string;
|
||||
};
|
||||
iconRegistry?: Record<string, string>;
|
||||
}
|
||||
export declare const ContentTreeRoot: ({ node, sdkInstance, cma, nodeContentTypes, titleFields, locales, depth, iconRegistry, }: ContentTreeRootProps) => ReactElement;
|
||||
|
||||
26
dist/ContentTreeRoot.js
vendored
26
dist/ContentTreeRoot.js
vendored
@ -1,4 +1,15 @@
|
||||
"use strict";
|
||||
var __assign = (this && this.__assign) || function () {
|
||||
__assign = Object.assign || function(t) {
|
||||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||
s = arguments[i];
|
||||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
||||
t[p] = s[p];
|
||||
}
|
||||
return t;
|
||||
};
|
||||
return __assign.apply(this, arguments);
|
||||
};
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
@ -73,14 +84,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ContentTreeRoot = void 0;
|
||||
var react_1 = __importStar(require("react"));
|
||||
var use_immer_1 = require("use-immer");
|
||||
var ContentTree_styled_1 = require("./ContentTree.styled");
|
||||
var ContentTreeNode_1 = __importDefault(require("./ContentTreeNode"));
|
||||
var ContentTreeUtils_1 = require("./ContentTreeUtils");
|
||||
var ContentTreeRoot = function (_a) {
|
||||
var node = _a.node, sdkInstance = _a.sdkInstance, cma = _a.cma, nodeContentTypes = _a.nodeContentTypes, titleFields = _a.titleFields, locales = _a.locales, depth = _a.depth, iconRegistry = _a.iconRegistry;
|
||||
var stLocale = (0, react_1.useState)(locales[0])[0];
|
||||
var _b = (0, use_immer_1.useImmer)((0, ContentTreeUtils_1.emptyNodeProps)()), stRoot = _b[0], setStRoot = _b[1];
|
||||
var _b = (0, react_1.useState)((0, ContentTreeUtils_1.emptyNodeProps)()), stRoot = _b[0], setStRoot = _b[1];
|
||||
(0, react_1.useEffect)(function () {
|
||||
if (node.id) {
|
||||
loadRootData(node).catch(function (err) {
|
||||
@ -133,11 +143,13 @@ var ContentTreeRoot = function (_a) {
|
||||
case 1:
|
||||
cfChildren = _a.sent();
|
||||
childNodes = (0, ContentTreeUtils_1.cfEntriesToNodes)(cfChildren, titleFields, stLocale, locales, nodeContentTypes, iconRegistry, node.id);
|
||||
setStRoot(function (draft) {
|
||||
setStRoot(function (prevState) {
|
||||
var newState = __assign({}, prevState);
|
||||
recursiveProcessNodes(node.id, function (targetNode) {
|
||||
targetNode.childNodes = childNodes;
|
||||
targetNode.expand = false;
|
||||
}, draft);
|
||||
}, newState);
|
||||
return newState;
|
||||
});
|
||||
return [2];
|
||||
}
|
||||
@ -226,11 +238,13 @@ var ContentTreeRoot = function (_a) {
|
||||
});
|
||||
}); };
|
||||
var removeChildNodes = function (node) {
|
||||
setStRoot(function (draft) {
|
||||
setStRoot(function (prevState) {
|
||||
var newState = __assign({}, prevState);
|
||||
recursiveProcessNodes(node.id, function (targetNode) {
|
||||
targetNode.childNodes = [];
|
||||
targetNode.expand = true;
|
||||
}, draft);
|
||||
}, newState);
|
||||
return newState;
|
||||
});
|
||||
};
|
||||
return (react_1.default.createElement(react_1.default.Fragment, null,
|
||||
|
||||
8
dist/ContentTreeUtils.d.ts
vendored
8
dist/ContentTreeUtils.d.ts
vendored
@ -1,6 +1,4 @@
|
||||
import { EntryProps, KeyValueMap } from 'contentful-management';
|
||||
import { ContentTreeNodeProps } from './ContentTreeNode';
|
||||
import { type EntryProps, type KeyValueMap } from 'contentful-management';
|
||||
import { type ContentTreeNodeProps } from './ContentTreeNode';
|
||||
export declare const emptyNodeProps: () => ContentTreeNodeProps;
|
||||
export declare const cfEntriesToNodes: (entries: Array<EntryProps<KeyValueMap>>, titleFields: string[], stLocale: string, locales: string[], nodeContentTypes: string[], iconRegistry?: {
|
||||
[index: string]: string;
|
||||
} | undefined, parentId?: string) => ContentTreeNodeProps[];
|
||||
export declare const cfEntriesToNodes: (entries: Array<EntryProps<KeyValueMap>>, titleFields: string[], stLocale: string, locales: string[], nodeContentTypes: string[], iconRegistry?: Record<string, string>, parentId?: string) => ContentTreeNodeProps[];
|
||||
|
||||
2
dist/Icons.d.ts
vendored
2
dist/Icons.d.ts
vendored
@ -1,4 +1,4 @@
|
||||
import { FC, ReactElement, SVGProps } from 'react';
|
||||
import { type FC, type ReactElement, type SVGProps } from 'react';
|
||||
export type SVGIcon = FC<SVGProps<SVGSVGElement>>;
|
||||
export interface IconProps {
|
||||
icon?: SVGIcon;
|
||||
|
||||
11
package.json
11
package.json
@ -26,13 +26,13 @@
|
||||
"eslint-config-standard-with-typescript": "^34.0.0",
|
||||
"eslint-plugin-import": "^2.27.5",
|
||||
"eslint-plugin-json": "3.1.0",
|
||||
"eslint-plugin-n": "^15.6.1",
|
||||
"eslint-plugin-n": "^16.0.0",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-react": "^7.32.2",
|
||||
"install-peers": "^1.0.4",
|
||||
"prettier": "2.8.4",
|
||||
"typescript": "4.9.5"
|
||||
"prettier": "2.8.8",
|
||||
"typescript": "5.0.4"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"install-peers": "^1.0.4"
|
||||
@ -40,9 +40,8 @@
|
||||
"dependencies": {
|
||||
"contentful-management": "10.35.4",
|
||||
"contentful-ui-extensions-sdk": "4.17.2",
|
||||
"immer": "9.0.19",
|
||||
"immer": "10.0.2",
|
||||
"react": "18.2.0",
|
||||
"styled-components": "5.3.6",
|
||||
"use-immer": "0.8.1"
|
||||
"styled-components": "5.3.11"
|
||||
}
|
||||
}
|
||||
|
||||
@ -81,19 +81,19 @@ const getPublishingStatusColors = (status: string): UiPalette | undefined => {
|
||||
export const StyledContentTreeNodePublishingStatus = styled.div<{
|
||||
status: string;
|
||||
}>`
|
||||
display: inline-block;
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
|
||||
font-weight: 600;
|
||||
font-size: 80%;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06rem;
|
||||
border-radius: 4px;
|
||||
padding: 0 0.2rem;
|
||||
color: ${(props) =>
|
||||
display: inline-block;
|
||||
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,
|
||||
sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;
|
||||
font-weight: 600;
|
||||
font-size: 80%;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06rem;
|
||||
border-radius: 4px;
|
||||
padding: 0 0.2rem;
|
||||
color: ${(props) =>
|
||||
getPublishingStatusColors(props.status)?.publishingStatusFg} !important;
|
||||
background-color: ${(props) =>
|
||||
background-color: ${(props) =>
|
||||
getPublishingStatusColors(props.status)?.publishingStatusBg} !important;
|
||||
}
|
||||
`;
|
||||
|
||||
export const StyledSpinner = styled.div`
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
import { PlainClientAPI } from 'contentful-management';
|
||||
import { PageAppSDK } from 'contentful-ui-extensions-sdk';
|
||||
import React, { ReactElement, useEffect, useState } from 'react';
|
||||
import { useImmer } from 'use-immer';
|
||||
import { type PlainClientAPI } from 'contentful-management';
|
||||
import { type PageAppSDK } from 'contentful-ui-extensions-sdk';
|
||||
import React, { type ReactElement, useEffect, useState } from 'react';
|
||||
import { ContentTreeRoot } from './ContentTreeRoot';
|
||||
import { emptyNodeProps, cfEntriesToNodes } from './ContentTreeUtils';
|
||||
|
||||
@ -13,7 +12,7 @@ export interface ContentTreeProps {
|
||||
titleFields: string[];
|
||||
locales: string[]; // the first is the default locale
|
||||
indentation?: number;
|
||||
iconRegistry?: { [index: string]: string };
|
||||
iconRegistry?: Record<string, string>;
|
||||
}
|
||||
|
||||
export const ContentTree = ({
|
||||
@ -27,7 +26,7 @@ export const ContentTree = ({
|
||||
iconRegistry,
|
||||
}: ContentTreeProps): ReactElement => {
|
||||
const [stLocale] = useState(locales[0]);
|
||||
const [rootNodes, setRootNodes] = useImmer([emptyNodeProps()]);
|
||||
const [rootNodes, setRootNodes] = useState([emptyNodeProps()]);
|
||||
|
||||
useEffect(() => {
|
||||
if (sdkInstance) {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import React, { ReactElement, useState } from 'react';
|
||||
import React, { type ReactElement, useState } from 'react';
|
||||
|
||||
import {
|
||||
StyledContentTreeNodeName,
|
||||
@ -59,15 +59,32 @@ const ContentTreeNode = (props: {
|
||||
<StyledSpinner>-</StyledSpinner>
|
||||
) : props.node.hasChildNodes ? (
|
||||
props.node.expand ? (
|
||||
<a onClick={() => handleAddChildren(props.node)}>+</a>
|
||||
<a
|
||||
onClick={() => {
|
||||
handleAddChildren(props.node);
|
||||
}}
|
||||
>
|
||||
+
|
||||
</a>
|
||||
) : (
|
||||
<a onClick={() => props.removeChildNodes(props.node)}>-</a>
|
||||
<a
|
||||
onClick={() => {
|
||||
props.removeChildNodes(props.node);
|
||||
}}
|
||||
>
|
||||
-
|
||||
</a>
|
||||
)
|
||||
) : null}
|
||||
</StyledContentTreeNodeWedge>
|
||||
<Icon id={props.node.icon}></Icon>
|
||||
<StyledContentTreeNodeName>
|
||||
<a onClick={() => handleEditEntry()} title={props.node.id}>
|
||||
<a
|
||||
onClick={() => {
|
||||
handleEditEntry();
|
||||
}}
|
||||
title={props.node.id}
|
||||
>
|
||||
{props.node.name}
|
||||
</a>
|
||||
</StyledContentTreeNodeName>
|
||||
|
||||
@ -1,16 +1,15 @@
|
||||
import {
|
||||
EntryProps,
|
||||
KeyValueMap,
|
||||
Link,
|
||||
PlainClientAPI,
|
||||
type EntryProps,
|
||||
type KeyValueMap,
|
||||
type Link,
|
||||
type PlainClientAPI,
|
||||
} from 'contentful-management';
|
||||
import { PageAppSDK } from 'contentful-ui-extensions-sdk';
|
||||
import React, { ReactElement, useEffect, useState } from 'react';
|
||||
import { useImmer } from 'use-immer';
|
||||
import { type PageAppSDK } from 'contentful-ui-extensions-sdk';
|
||||
import React, { type ReactElement, useEffect, useState } from 'react';
|
||||
|
||||
import { StyledContentTreeTable } from './ContentTree.styled';
|
||||
import ContentTreeNode, { ContentTreeNodeProps } from './ContentTreeNode';
|
||||
import { emptyNodeProps, cfEntriesToNodes } from './ContentTreeUtils';
|
||||
import ContentTreeNode, { type ContentTreeNodeProps } from './ContentTreeNode';
|
||||
import { cfEntriesToNodes, emptyNodeProps } from './ContentTreeUtils';
|
||||
|
||||
export interface ContentTreeRootProps {
|
||||
node: ContentTreeNodeProps;
|
||||
@ -20,7 +19,7 @@ export interface ContentTreeRootProps {
|
||||
titleFields: string[];
|
||||
locales: string[]; // the first is the default locale
|
||||
depth: number;
|
||||
iconRegistry?: { [index: string]: string };
|
||||
iconRegistry?: Record<string, string>;
|
||||
}
|
||||
|
||||
export const ContentTreeRoot = ({
|
||||
@ -34,7 +33,7 @@ export const ContentTreeRoot = ({
|
||||
iconRegistry,
|
||||
}: ContentTreeRootProps): ReactElement => {
|
||||
const [stLocale] = useState(locales[0]);
|
||||
const [stRoot, setStRoot] = useImmer(emptyNodeProps());
|
||||
const [stRoot, setStRoot] = useState(emptyNodeProps());
|
||||
|
||||
useEffect(() => {
|
||||
if (node.id) {
|
||||
@ -93,15 +92,18 @@ export const ContentTreeRoot = ({
|
||||
iconRegistry,
|
||||
node.id
|
||||
);
|
||||
setStRoot((draft) => {
|
||||
|
||||
setStRoot((prevState) => {
|
||||
const newState = { ...prevState };
|
||||
recursiveProcessNodes(
|
||||
node.id,
|
||||
(targetNode) => {
|
||||
targetNode.childNodes = childNodes;
|
||||
targetNode.expand = false;
|
||||
},
|
||||
draft
|
||||
newState
|
||||
);
|
||||
return newState;
|
||||
});
|
||||
};
|
||||
|
||||
@ -161,7 +163,7 @@ export const ContentTreeRoot = ({
|
||||
}
|
||||
}
|
||||
const cfChildren: Array<EntryProps<KeyValueMap>> = [];
|
||||
const idPositionMap: { [index: string]: number } = allItems.reduce(
|
||||
const idPositionMap: Record<string, number> = allItems.reduce(
|
||||
(acc: any, el, i) => {
|
||||
acc[el.sys.id] = i;
|
||||
return acc;
|
||||
@ -177,15 +179,17 @@ export const ContentTreeRoot = ({
|
||||
};
|
||||
|
||||
const removeChildNodes = (node: ContentTreeNodeProps): void => {
|
||||
setStRoot((draft) => {
|
||||
setStRoot((prevState) => {
|
||||
const newState = { ...prevState };
|
||||
recursiveProcessNodes(
|
||||
node.id,
|
||||
(targetNode) => {
|
||||
targetNode.childNodes = [];
|
||||
targetNode.expand = true;
|
||||
},
|
||||
draft
|
||||
newState
|
||||
);
|
||||
return newState;
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { EntryProps, KeyValueMap } from 'contentful-management';
|
||||
import { ContentTreeNodeProps } from './ContentTreeNode';
|
||||
import { type EntryProps, type KeyValueMap } from 'contentful-management';
|
||||
import { type ContentTreeNodeProps } from './ContentTreeNode';
|
||||
|
||||
export const emptyNodeProps = (): ContentTreeNodeProps => {
|
||||
return { id: '', name: '', expand: false, parentId: '' };
|
||||
@ -36,7 +36,7 @@ export const cfEntriesToNodes = (
|
||||
stLocale: string,
|
||||
locales: string[],
|
||||
nodeContentTypes: string[],
|
||||
iconRegistry?: { [index: string]: string },
|
||||
iconRegistry?: Record<string, string>,
|
||||
parentId?: string
|
||||
): ContentTreeNodeProps[] => {
|
||||
if (entries.length === 0) {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
import React, { FC, ReactElement, SVGProps } from 'react';
|
||||
import React, { type FC, type ReactElement, type SVGProps } from 'react';
|
||||
import styled from 'styled-components';
|
||||
|
||||
export type SVGIcon = FC<SVGProps<SVGSVGElement>>;
|
||||
|
||||
118
yarn.lock
118
yarn.lock
@ -138,14 +138,14 @@
|
||||
resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed"
|
||||
integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
|
||||
|
||||
"@eslint-community/eslint-utils@^4.2.0":
|
||||
"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0":
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
|
||||
integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==
|
||||
dependencies:
|
||||
eslint-visitor-keys "^3.3.0"
|
||||
|
||||
"@eslint-community/regexpp@^4.4.0":
|
||||
"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.0":
|
||||
version "4.5.1"
|
||||
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884"
|
||||
integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==
|
||||
@ -873,13 +873,13 @@ eslint-module-utils@^2.7.4:
|
||||
dependencies:
|
||||
debug "^3.2.7"
|
||||
|
||||
eslint-plugin-es@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz#f0822f0c18a535a97c3e714e89f88586a7641ec9"
|
||||
integrity sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==
|
||||
eslint-plugin-es-x@^6.1.0:
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-6.2.1.tgz#34c9abc22483d7d49ff9ca8b5db29d54442d2e6b"
|
||||
integrity sha512-uR34zUhZ9EBoiSD2DdV5kHLpydVEvwWqjteUr9sXRgJknwbKZJZhdJ7uFnaTtd+Nr/2G3ceJHnHXrFhJ67n3Tw==
|
||||
dependencies:
|
||||
eslint-utils "^2.0.0"
|
||||
regexpp "^3.0.0"
|
||||
"@eslint-community/eslint-utils" "^4.1.2"
|
||||
"@eslint-community/regexpp" "^4.5.0"
|
||||
|
||||
eslint-plugin-import@^2.27.5:
|
||||
version "2.27.5"
|
||||
@ -910,19 +910,19 @@ eslint-plugin-json@3.1.0:
|
||||
lodash "^4.17.21"
|
||||
vscode-json-languageservice "^4.1.6"
|
||||
|
||||
eslint-plugin-n@^15.6.1:
|
||||
version "15.7.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz#e29221d8f5174f84d18f2eb94765f2eeea033b90"
|
||||
integrity sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==
|
||||
eslint-plugin-n@^16.0.0:
|
||||
version "16.0.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.0.0.tgz#de39e4dd6cf04fd78fd6f49cb39ecb20ea0167ff"
|
||||
integrity sha512-akkZTE3hsHBrq6CwmGuYCzQREbVUrA855kzcHqe6i0FLBkeY7Y/6tThCVkjUnjhvRBAlc+8lILcSe5QvvDpeZQ==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.4.0"
|
||||
builtins "^5.0.1"
|
||||
eslint-plugin-es "^4.1.0"
|
||||
eslint-utils "^3.0.0"
|
||||
eslint-plugin-es-x "^6.1.0"
|
||||
ignore "^5.1.1"
|
||||
is-core-module "^2.11.0"
|
||||
is-core-module "^2.12.0"
|
||||
minimatch "^3.1.2"
|
||||
resolve "^1.22.1"
|
||||
semver "^7.3.8"
|
||||
resolve "^1.22.2"
|
||||
semver "^7.5.0"
|
||||
|
||||
eslint-plugin-prettier@^4.2.1:
|
||||
version "4.2.1"
|
||||
@ -973,30 +973,6 @@ eslint-scope@^7.2.0:
|
||||
esrecurse "^4.3.0"
|
||||
estraverse "^5.2.0"
|
||||
|
||||
eslint-utils@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
|
||||
integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
|
||||
dependencies:
|
||||
eslint-visitor-keys "^1.1.0"
|
||||
|
||||
eslint-utils@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
|
||||
integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
|
||||
dependencies:
|
||||
eslint-visitor-keys "^2.0.0"
|
||||
|
||||
eslint-visitor-keys@^1.1.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
|
||||
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
|
||||
|
||||
eslint-visitor-keys@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
|
||||
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
|
||||
|
||||
eslint-visitor-keys@^3.3.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
|
||||
@ -1398,10 +1374,10 @@ ignore@^5.1.1, ignore@^5.2.0:
|
||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
|
||||
integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
|
||||
|
||||
immer@9.0.19:
|
||||
version "9.0.19"
|
||||
resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.19.tgz#67fb97310555690b5f9cd8380d38fc0aabb6b38b"
|
||||
integrity sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==
|
||||
immer@10.0.2:
|
||||
version "10.0.2"
|
||||
resolved "https://registry.yarnpkg.com/immer/-/immer-10.0.2.tgz#11636c5b77acf529e059582d76faf338beb56141"
|
||||
integrity sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==
|
||||
|
||||
import-fresh@^3.0.0, import-fresh@^3.2.1:
|
||||
version "3.3.0"
|
||||
@ -1490,6 +1466,13 @@ is-core-module@^2.11.0:
|
||||
dependencies:
|
||||
has "^1.0.3"
|
||||
|
||||
is-core-module@^2.12.0:
|
||||
version "2.12.1"
|
||||
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd"
|
||||
integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==
|
||||
dependencies:
|
||||
has "^1.0.3"
|
||||
|
||||
is-core-module@^2.9.0:
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed"
|
||||
@ -1902,10 +1885,10 @@ prettier-linter-helpers@^1.0.0:
|
||||
dependencies:
|
||||
fast-diff "^1.1.2"
|
||||
|
||||
prettier@2.8.4:
|
||||
version "2.8.4"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.4.tgz#34dd2595629bfbb79d344ac4a91ff948694463c3"
|
||||
integrity sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==
|
||||
prettier@2.8.8:
|
||||
version "2.8.8"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
|
||||
integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
|
||||
|
||||
prop-types@^15.8.1:
|
||||
version "15.8.1"
|
||||
@ -1954,11 +1937,6 @@ regexp.prototype.flags@^1.4.3:
|
||||
define-properties "^1.1.3"
|
||||
functions-have-names "^1.2.2"
|
||||
|
||||
regexpp@^3.0.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
|
||||
integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
|
||||
|
||||
resolve-from@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
|
||||
@ -1973,6 +1951,15 @@ resolve@^1.22.1:
|
||||
path-parse "^1.0.7"
|
||||
supports-preserve-symlinks-flag "^1.0.0"
|
||||
|
||||
resolve@^1.22.2:
|
||||
version "1.22.2"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f"
|
||||
integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==
|
||||
dependencies:
|
||||
is-core-module "^2.11.0"
|
||||
path-parse "^1.0.7"
|
||||
supports-preserve-symlinks-flag "^1.0.0"
|
||||
|
||||
resolve@^2.0.0-next.4:
|
||||
version "2.0.0-next.4"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660"
|
||||
@ -2022,7 +2009,7 @@ semver@^7.0.0, semver@^7.3.7:
|
||||
dependencies:
|
||||
lru-cache "^6.0.0"
|
||||
|
||||
semver@^7.3.8:
|
||||
semver@^7.5.0:
|
||||
version "7.5.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec"
|
||||
integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==
|
||||
@ -2127,10 +2114,10 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
|
||||
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
|
||||
|
||||
styled-components@5.3.6:
|
||||
version "5.3.6"
|
||||
resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.6.tgz#27753c8c27c650bee9358e343fc927966bfd00d1"
|
||||
integrity sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==
|
||||
styled-components@5.3.11:
|
||||
version "5.3.11"
|
||||
resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.11.tgz#9fda7bf1108e39bf3f3e612fcc18170dedcd57a8"
|
||||
integrity sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.0.0"
|
||||
"@babel/traverse" "^7.4.5"
|
||||
@ -2227,10 +2214,10 @@ typed-array-length@^1.0.4:
|
||||
for-each "^0.3.3"
|
||||
is-typed-array "^1.1.9"
|
||||
|
||||
typescript@4.9.5:
|
||||
version "4.9.5"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
|
||||
integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
|
||||
typescript@5.0.4:
|
||||
version "5.0.4"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b"
|
||||
integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==
|
||||
|
||||
unbox-primitive@^1.0.2:
|
||||
version "1.0.2"
|
||||
@ -2249,11 +2236,6 @@ uri-js@^4.2.2:
|
||||
dependencies:
|
||||
punycode "^2.1.0"
|
||||
|
||||
use-immer@0.8.1:
|
||||
version "0.8.1"
|
||||
resolved "https://registry.yarnpkg.com/use-immer/-/use-immer-0.8.1.tgz#db7442bdd64ecf826ce274a91aa8cf821945cf0f"
|
||||
integrity sha512-OfTFf1pL+ICjjcLPn9+ZnaJO/Yg4MBzYZtACEe2mZ/W2A5col28PNUnwowOAaBuOogACOK/37TU17KgsIhUpOw==
|
||||
|
||||
vscode-json-languageservice@^4.1.6:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz#94b6f471ece193bf4a1ef37f6ab5cce86d50a8b4"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user