@intlayer/design-system 4.0.0 → 4.0.3
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 +39 -21
- package/dist/.vite/manifest.json +26 -156
- package/dist/components/Accordion/Accordion.cjs +1 -1
- package/dist/components/Accordion/Accordion.cjs.map +1 -1
- package/dist/components/Accordion/Accordion.mjs +1 -1
- package/dist/components/Accordion/Accordion.mjs.map +1 -1
- package/dist/components/DictionaryEditor/DictionaryEditor.cjs +3 -15
- package/dist/components/DictionaryEditor/DictionaryEditor.cjs.map +1 -1
- package/dist/components/DictionaryEditor/DictionaryEditor.d.ts.map +1 -1
- package/dist/components/DictionaryEditor/DictionaryEditor.mjs +3 -15
- package/dist/components/DictionaryEditor/DictionaryEditor.mjs.map +1 -1
- package/dist/components/DictionaryEditor/NodeWrapper/StringWrapper.cjs +2 -2
- package/dist/components/DictionaryEditor/NodeWrapper/StringWrapper.cjs.map +1 -1
- package/dist/components/DictionaryEditor/NodeWrapper/StringWrapper.d.ts.map +1 -1
- package/dist/components/DictionaryEditor/NodeWrapper/StringWrapper.mjs +1 -1
- package/dist/components/DictionaryEditor/NodeWrapper/StringWrapper.mjs.map +1 -1
- package/dist/components/DictionaryEditor/ValidDictionaryChangeButtons.cjs +2 -8
- package/dist/components/DictionaryEditor/ValidDictionaryChangeButtons.cjs.map +1 -1
- package/dist/components/DictionaryEditor/ValidDictionaryChangeButtons.d.ts.map +1 -1
- package/dist/components/DictionaryEditor/ValidDictionaryChangeButtons.mjs +2 -8
- package/dist/components/DictionaryEditor/ValidDictionaryChangeButtons.mjs.map +1 -1
- package/dist/components/DictionaryEditor/index.cjs +0 -8
- package/dist/components/DictionaryEditor/index.cjs.map +1 -1
- package/dist/components/DictionaryEditor/index.d.ts +0 -2
- package/dist/components/DictionaryEditor/index.d.ts.map +1 -1
- package/dist/components/DictionaryEditor/index.mjs +1 -9
- package/dist/components/DictionaryEditor/index.mjs.map +1 -1
- package/dist/components/DictionaryEditor/useEditedContentStore.d.ts +1 -1
- package/dist/components/DictionaryFieldEditor/DictionariesSelector/DictionariesSelector.cjs +2 -20
- package/dist/components/DictionaryFieldEditor/DictionariesSelector/DictionariesSelector.cjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/DictionariesSelector/DictionariesSelector.d.ts.map +1 -1
- package/dist/components/DictionaryFieldEditor/DictionariesSelector/DictionariesSelector.mjs +2 -20
- package/dist/components/DictionaryFieldEditor/DictionariesSelector/DictionariesSelector.mjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/DictionaryFieldEditor.cjs +7 -24
- package/dist/components/DictionaryFieldEditor/DictionaryFieldEditor.cjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/DictionaryFieldEditor.d.ts.map +1 -1
- package/dist/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs +7 -24
- package/dist/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/EditorView/EditorView.cjs +6 -35
- package/dist/components/DictionaryFieldEditor/EditorView/EditorView.cjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/EditorView/EditorView.d.ts.map +1 -1
- package/dist/components/DictionaryFieldEditor/EditorView/EditorView.mjs +4 -33
- package/dist/components/DictionaryFieldEditor/EditorView/EditorView.mjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/EditorView/TextEditor.cjs +5 -23
- package/dist/components/DictionaryFieldEditor/EditorView/TextEditor.cjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/EditorView/TextEditor.d.ts.map +1 -1
- package/dist/components/DictionaryFieldEditor/EditorView/TextEditor.mjs +5 -23
- package/dist/components/DictionaryFieldEditor/EditorView/TextEditor.mjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/JSONEditor.cjs +2 -29
- package/dist/components/DictionaryFieldEditor/JSONEditor.cjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/JSONEditor.d.ts.map +1 -1
- package/dist/components/DictionaryFieldEditor/JSONEditor.mjs +2 -29
- package/dist/components/DictionaryFieldEditor/JSONEditor.mjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.cjs +8 -33
- package/dist/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.cjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.d.ts.map +1 -1
- package/dist/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs +4 -29
- package/dist/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/NodeEditor.cjs +6 -38
- package/dist/components/DictionaryFieldEditor/NodeEditor.cjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/NodeEditor.d.ts.map +1 -1
- package/dist/components/DictionaryFieldEditor/NodeEditor.mjs +6 -38
- package/dist/components/DictionaryFieldEditor/NodeEditor.mjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/NodeTypeSelector.cjs +3 -27
- package/dist/components/DictionaryFieldEditor/NodeTypeSelector.cjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/NodeTypeSelector.d.ts.map +1 -1
- package/dist/components/DictionaryFieldEditor/NodeTypeSelector.mjs +3 -27
- package/dist/components/DictionaryFieldEditor/NodeTypeSelector.mjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/SaveForm/SaveForm.cjs +2 -14
- package/dist/components/DictionaryFieldEditor/SaveForm/SaveForm.cjs.map +1 -1
- package/dist/components/DictionaryFieldEditor/SaveForm/SaveForm.d.ts.map +1 -1
- package/dist/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs +2 -14
- package/dist/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs.map +1 -1
- package/dist/components/Modal/Modal.cjs +1 -1
- package/dist/components/Modal/Modal.mjs +1 -1
- package/dist/components/Navbar/MobileNavbar.cjs +1 -1
- package/dist/components/Navbar/MobileNavbar.mjs +1 -1
- package/dist/components/RightDrawer/RightDrawer.cjs +2 -3
- package/dist/components/RightDrawer/RightDrawer.cjs.map +1 -1
- package/dist/components/RightDrawer/RightDrawer.mjs +1 -2
- package/dist/components/RightDrawer/RightDrawer.mjs.map +1 -1
- package/dist/components/index.cjs +0 -8
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.mjs +0 -8
- package/dist/components/index.mjs.map +1 -1
- package/dist/hooks/index.cjs +1 -1
- package/dist/hooks/index.mjs +2 -2
- package/dist/hooks/usePersistedStore.cjs +8 -5
- package/dist/hooks/usePersistedStore.cjs.map +1 -1
- package/dist/hooks/usePersistedStore.d.ts +2 -1
- package/dist/hooks/usePersistedStore.d.ts.map +1 -1
- package/dist/hooks/usePersistedStore.mjs +8 -5
- package/dist/hooks/usePersistedStore.mjs.map +1 -1
- package/dist/hooks/useScrollBlockage/index.cjs +5 -31
- package/dist/hooks/useScrollBlockage/index.cjs.map +1 -1
- package/dist/hooks/useScrollBlockage/index.mjs +5 -31
- package/dist/hooks/useScrollBlockage/index.mjs.map +1 -1
- package/dist/hooks/useScrollDetection.cjs +1 -1
- package/dist/hooks/useScrollDetection.mjs +1 -1
- package/dist/index-Cg-S9ry9.cjs +77 -0
- package/dist/index-Cg-S9ry9.cjs.map +1 -0
- package/dist/index-O_7rYrbW.js +78 -0
- package/dist/index-O_7rYrbW.js.map +1 -0
- package/package.json +18 -15
|
@@ -2,32 +2,15 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
4
4
|
const jsxRuntime = require("../../../jsx-runtime-CgFM7lM3.cjs");
|
|
5
|
+
const core = require("@intlayer/core");
|
|
6
|
+
const editorReact = require("@intlayer/editor-react");
|
|
5
7
|
const lucideReact = require("lucide-react");
|
|
6
8
|
const require$$0 = require("react");
|
|
7
9
|
const reactIntlayer = require("react-intlayer");
|
|
8
|
-
const shallow = require("../../../shallow-lhDIFtEp.cjs");
|
|
9
10
|
const components_EditableField_EditableFieldInput = require("../../EditableField/EditableFieldInput.cjs");
|
|
10
11
|
require("../../EditableField/EditableFieldTextArea.cjs");
|
|
11
12
|
const utils_camelCase = require("../../../utils/camelCase.cjs");
|
|
12
|
-
const utils_dictionary = require("../../../utils/dictionary.cjs");
|
|
13
13
|
const components_Button_Button = require("../../Button/Button.cjs");
|
|
14
|
-
const components_DictionaryEditor_useEditedContentStore = require("../../DictionaryEditor/useEditedContentStore.cjs");
|
|
15
|
-
const components_DictionaryEditor_useEditionPanelStore = require("../../DictionaryEditor/useEditionPanelStore.cjs");
|
|
16
|
-
require("@intlayer/core");
|
|
17
|
-
require("clsx");
|
|
18
|
-
require("tailwind-merge");
|
|
19
|
-
require("../../../hooks/useScrollBlockage/useScrollBlockageStore.cjs");
|
|
20
|
-
require("../../../hooks/useAsync/useAsyncStateStore.cjs");
|
|
21
|
-
require("../../../index-DFc7og1d.cjs");
|
|
22
|
-
require("@intlayer/config/client");
|
|
23
|
-
require("../../Toaster/Toast.cjs");
|
|
24
|
-
require("@intlayer/dictionaries-entry");
|
|
25
|
-
require("deepmerge");
|
|
26
|
-
require("../../Form/FormBase.cjs");
|
|
27
|
-
require("../../Form/FormField.cjs");
|
|
28
|
-
require("../../../Form-CSMiPnjC.cjs");
|
|
29
|
-
require("../../DictionaryEditor/validDictionaryChangeButtons.content.cjs");
|
|
30
|
-
require("zod");
|
|
31
14
|
const components_Label_index = require("../../Label/index.cjs");
|
|
32
15
|
const components_DictionaryFieldEditor_editorView_content = require("../editorView.content.cjs");
|
|
33
16
|
const components_DictionaryFieldEditor_getIsEditableSection = require("../getIsEditableSection.cjs");
|
|
@@ -38,12 +21,7 @@ const EditorView = ({
|
|
|
38
21
|
dictionary,
|
|
39
22
|
locales
|
|
40
23
|
}) => {
|
|
41
|
-
const { focusedContent, setFocusedContentKeyPath } =
|
|
42
|
-
shallow.useShallow((s) => ({
|
|
43
|
-
setFocusedContentKeyPath: s.setFocusedContentKeyPath,
|
|
44
|
-
focusedContent: s.focusedContent
|
|
45
|
-
}))
|
|
46
|
-
);
|
|
24
|
+
const { focusedContent, setFocusedContentKeyPath } = editorReact.useFocusDictionary();
|
|
47
25
|
const keyPath = focusedContent?.keyPath ?? [];
|
|
48
26
|
const initialKeyName = keyPath[keyPath.length - 1]?.key ?? "";
|
|
49
27
|
const { titleInput, deleteButton, nodeTypeSelector, restoreButton } = reactIntlayer.useDictionary(components_DictionaryFieldEditor_editorView_content.editorViewContent);
|
|
@@ -52,16 +30,9 @@ const EditorView = ({
|
|
|
52
30
|
renameEditedContent,
|
|
53
31
|
addEditedContent,
|
|
54
32
|
removeEditedContent
|
|
55
|
-
} =
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
renameEditedContent: s.renameEditedContent,
|
|
59
|
-
addEditedContent: s.addEditedContent,
|
|
60
|
-
removeEditedContent: s.removeEditedContent
|
|
61
|
-
}))
|
|
62
|
-
);
|
|
63
|
-
const editedSection = editedContent[dictionaryKey]?.content ? utils_dictionary.getDictionaryValueByKeyPath(editedContent[dictionaryKey].content, keyPath) : void 0;
|
|
64
|
-
const dictionarySection = utils_dictionary.getDictionaryValueByKeyPath(
|
|
33
|
+
} = editorReact.useEditedContent();
|
|
34
|
+
const editedSection = editedContent[dictionaryKey]?.content ? core.getDictionaryValueByKeyPath(editedContent[dictionaryKey].content, keyPath) : void 0;
|
|
35
|
+
const dictionarySection = core.getDictionaryValueByKeyPath(
|
|
65
36
|
dictionary.content,
|
|
66
37
|
keyPath
|
|
67
38
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorView.cjs","sources":["../../../../src/components/DictionaryFieldEditor/EditorView/EditorView.tsx"],"sourcesContent":["'use client';\n\nimport { type Locales } from '@intlayer/config';\nimport {
|
|
1
|
+
{"version":3,"file":"EditorView.cjs","sources":["../../../../src/components/DictionaryFieldEditor/EditorView/EditorView.tsx"],"sourcesContent":["'use client';\n\nimport { type Locales } from '@intlayer/config';\nimport {\n type KeyPath,\n type Dictionary,\n getDictionaryValueByKeyPath,\n} from '@intlayer/core';\nimport { useFocusDictionary, useEditedContent } from '@intlayer/editor-react';\nimport { RotateCcw, X } from 'lucide-react';\nimport { useMemo, type FC } from 'react';\n// @ts-ignore react-intlayer not build yet\nimport { useDictionary } from 'react-intlayer';\nimport { EditableFieldInput } from '../..//EditableField';\nimport {\n camelCaseToSentence,\n sentenceToCamelCase,\n} from '../../../utils/camelCase';\nimport { Button } from '../../Button';\nimport { Label } from '../../Label';\nimport { editorViewContent } from '../editorView.content';\nimport { getIsEditableSection } from '../getIsEditableSection';\nimport { NodeTypeSelector } from '../NodeTypeSelector';\nimport { TextEditor } from './TextEditor';\n\ntype EditorViewProps = {\n dictionaryKey: string;\n dictionary: Dictionary;\n locales: Locales[];\n};\n\nexport const EditorView: FC<EditorViewProps> = ({\n dictionaryKey,\n dictionary,\n locales,\n}) => {\n const { focusedContent, setFocusedContentKeyPath } = useFocusDictionary();\n const keyPath = focusedContent?.keyPath ?? [];\n const initialKeyName = keyPath[keyPath.length - 1]?.key ?? '';\n const { titleInput, deleteButton, nodeTypeSelector, restoreButton } =\n useDictionary(editorViewContent);\n const {\n editedContent,\n renameEditedContent,\n addEditedContent,\n removeEditedContent,\n } = useEditedContent();\n\n const editedSection = editedContent[dictionaryKey]?.content\n ? getDictionaryValueByKeyPath(editedContent[dictionaryKey].content, keyPath)\n : undefined;\n\n const dictionarySection = getDictionaryValueByKeyPath(\n dictionary.content,\n keyPath\n );\n\n const section = editedSection ?? dictionarySection;\n\n const isEdited = useMemo(\n () =>\n editedSection &&\n JSON.stringify(editedSection) !== JSON.stringify(dictionarySection),\n [editedSection, dictionarySection]\n );\n\n const isEditableSection = getIsEditableSection(section);\n\n const handleRenameNodeKey = (keyName: string) => {\n const camelCaseSentence = sentenceToCamelCase(keyName);\n renameEditedContent(dictionaryKey, camelCaseSentence, keyPath);\n const prevKeyPath: KeyPath[] = keyPath.slice(0, -1);\n const lastKeyPath: KeyPath = keyPath[keyPath.length - 1];\n const newKeyPath: KeyPath[] = [\n ...prevKeyPath,\n { ...lastKeyPath, key: camelCaseSentence } as KeyPath,\n ];\n setFocusedContentKeyPath(newKeyPath);\n };\n\n return (\n <>\n {isEditableSection && (\n <TextEditor\n key={keyPath.join('.')}\n keyPath={keyPath}\n section={section}\n dictionary={dictionary}\n locales={locales}\n />\n )}\n\n {keyPath.length > 0 ? (\n <form\n className=\"bg-text text-text-dark dark:bg-text-dark dark:text-text flex w-full flex-col items-start justify-between gap-6 px-4 py-2\"\n key={JSON.stringify(focusedContent?.keyPath)}\n >\n <div className=\"flex w-full flex-wrap items-start justify-between gap-6\">\n {typeof initialKeyName === 'string' && (\n <div className=\"flex flex-col gap-3\">\n <Label>{titleInput.label}</Label>\n <div className=\"flex flex-wrap items-center gap-4\">\n <EditableFieldInput\n name=\"key\"\n aria-label=\"Key\"\n key={initialKeyName}\n placeholder={titleInput.placeholder}\n defaultValue={camelCaseToSentence(initialKeyName)}\n onSave={(value) => handleRenameNodeKey(value)}\n className=\"h-8\"\n variant=\"invisible\"\n />\n <span className=\"text-neutral dark:text-neutral-dark text-sm\">\n ({initialKeyName})\n </span>\n </div>\n </div>\n )}\n\n <div>\n <Label>{nodeTypeSelector.label}</Label>\n\n <NodeTypeSelector\n keyPath={keyPath}\n dictionaryKey={dictionaryKey}\n section={section}\n />\n </div>\n </div>\n {keyPath.length > 0 && (\n <div className=\"ml-auto flex gap-2\">\n {isEdited && (\n <Button\n label={restoreButton.label}\n variant=\"outline\"\n color=\"text-inverse\"\n Icon={RotateCcw}\n onClick={() => removeEditedContent(dictionaryKey, keyPath)}\n >\n {restoreButton.text}\n </Button>\n )}\n <Button\n label={deleteButton.label}\n variant=\"outline\"\n color=\"error\"\n Icon={X}\n onClick={() => {\n addEditedContent(dictionaryKey, undefined, keyPath);\n\n const parentKeyPath: KeyPath[] = keyPath.slice(0, -1);\n setFocusedContentKeyPath(parentKeyPath);\n }}\n >\n {deleteButton.text}\n </Button>\n </div>\n )}\n </form>\n ) : (\n <span className=\"h-8\"></span>\n )}\n </>\n );\n};\n"],"names":["useFocusDictionary","useDictionary","editorViewContent","useEditedContent","getDictionaryValueByKeyPath","useMemo","getIsEditableSection","sentenceToCamelCase","jsxs","Fragment","jsx","TextEditor","Label","EditableFieldInput","camelCaseToSentence","NodeTypeSelector","Button","RotateCcw","X"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorView.d.ts","sourceRoot":"","sources":["../../../../src/components/DictionaryFieldEditor/EditorView/EditorView.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,
|
|
1
|
+
{"version":3,"file":"EditorView.d.ts","sourceRoot":"","sources":["../../../../src/components/DictionaryFieldEditor/EditorView/EditorView.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAEL,KAAK,UAAU,EAEhB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAW,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AAezC,KAAK,eAAe,GAAG;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,OAAO,EAAE,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAqI1C,CAAC"}
|
|
@@ -1,31 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { j as jsxRuntimeExports } from "../../../jsx-runtime-DQkoUcjV.js";
|
|
3
|
+
import { getDictionaryValueByKeyPath } from "@intlayer/core";
|
|
4
|
+
import { useFocusDictionary, useEditedContent } from "@intlayer/editor-react";
|
|
3
5
|
import { RotateCcw, X } from "lucide-react";
|
|
4
6
|
import { useMemo } from "react";
|
|
5
7
|
import { useDictionary } from "react-intlayer";
|
|
6
|
-
import { u as useShallow } from "../../../shallow-m9BpCkKh.js";
|
|
7
8
|
import { EditableFieldInput } from "../../EditableField/EditableFieldInput.mjs";
|
|
8
9
|
import "../../EditableField/EditableFieldTextArea.mjs";
|
|
9
10
|
import { camelCaseToSentence, sentenceToCamelCase } from "../../../utils/camelCase.mjs";
|
|
10
|
-
import { getDictionaryValueByKeyPath } from "../../../utils/dictionary.mjs";
|
|
11
11
|
import { Button } from "../../Button/Button.mjs";
|
|
12
|
-
import { useEditedContentStore } from "../../DictionaryEditor/useEditedContentStore.mjs";
|
|
13
|
-
import { useEditionPanelStore } from "../../DictionaryEditor/useEditionPanelStore.mjs";
|
|
14
|
-
import "@intlayer/core";
|
|
15
|
-
import "clsx";
|
|
16
|
-
import "tailwind-merge";
|
|
17
|
-
import "../../../hooks/useScrollBlockage/useScrollBlockageStore.mjs";
|
|
18
|
-
import "../../../hooks/useAsync/useAsyncStateStore.mjs";
|
|
19
|
-
import "../../../index-DcWYZrJW.js";
|
|
20
|
-
import "@intlayer/config/client";
|
|
21
|
-
import "../../Toaster/Toast.mjs";
|
|
22
|
-
import "@intlayer/dictionaries-entry";
|
|
23
|
-
import "deepmerge";
|
|
24
|
-
import "../../Form/FormBase.mjs";
|
|
25
|
-
import "../../Form/FormField.mjs";
|
|
26
|
-
import "../../../Form-DlqjTz3u.js";
|
|
27
|
-
import "../../DictionaryEditor/validDictionaryChangeButtons.content.mjs";
|
|
28
|
-
import "zod";
|
|
29
12
|
import { Label } from "../../Label/index.mjs";
|
|
30
13
|
import { editorViewContent } from "../editorView.content.mjs";
|
|
31
14
|
import { getIsEditableSection } from "../getIsEditableSection.mjs";
|
|
@@ -36,12 +19,7 @@ const EditorView = ({
|
|
|
36
19
|
dictionary,
|
|
37
20
|
locales
|
|
38
21
|
}) => {
|
|
39
|
-
const { focusedContent, setFocusedContentKeyPath } =
|
|
40
|
-
useShallow((s) => ({
|
|
41
|
-
setFocusedContentKeyPath: s.setFocusedContentKeyPath,
|
|
42
|
-
focusedContent: s.focusedContent
|
|
43
|
-
}))
|
|
44
|
-
);
|
|
22
|
+
const { focusedContent, setFocusedContentKeyPath } = useFocusDictionary();
|
|
45
23
|
const keyPath = focusedContent?.keyPath ?? [];
|
|
46
24
|
const initialKeyName = keyPath[keyPath.length - 1]?.key ?? "";
|
|
47
25
|
const { titleInput, deleteButton, nodeTypeSelector, restoreButton } = useDictionary(editorViewContent);
|
|
@@ -50,14 +28,7 @@ const EditorView = ({
|
|
|
50
28
|
renameEditedContent,
|
|
51
29
|
addEditedContent,
|
|
52
30
|
removeEditedContent
|
|
53
|
-
} =
|
|
54
|
-
useShallow((s) => ({
|
|
55
|
-
editedContent: s.editedContent,
|
|
56
|
-
renameEditedContent: s.renameEditedContent,
|
|
57
|
-
addEditedContent: s.addEditedContent,
|
|
58
|
-
removeEditedContent: s.removeEditedContent
|
|
59
|
-
}))
|
|
60
|
-
);
|
|
31
|
+
} = useEditedContent();
|
|
61
32
|
const editedSection = editedContent[dictionaryKey]?.content ? getDictionaryValueByKeyPath(editedContent[dictionaryKey].content, keyPath) : void 0;
|
|
62
33
|
const dictionarySection = getDictionaryValueByKeyPath(
|
|
63
34
|
dictionary.content,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorView.mjs","sources":["../../../../src/components/DictionaryFieldEditor/EditorView/EditorView.tsx"],"sourcesContent":["'use client';\n\nimport { type Locales } from '@intlayer/config';\nimport {
|
|
1
|
+
{"version":3,"file":"EditorView.mjs","sources":["../../../../src/components/DictionaryFieldEditor/EditorView/EditorView.tsx"],"sourcesContent":["'use client';\n\nimport { type Locales } from '@intlayer/config';\nimport {\n type KeyPath,\n type Dictionary,\n getDictionaryValueByKeyPath,\n} from '@intlayer/core';\nimport { useFocusDictionary, useEditedContent } from '@intlayer/editor-react';\nimport { RotateCcw, X } from 'lucide-react';\nimport { useMemo, type FC } from 'react';\n// @ts-ignore react-intlayer not build yet\nimport { useDictionary } from 'react-intlayer';\nimport { EditableFieldInput } from '../..//EditableField';\nimport {\n camelCaseToSentence,\n sentenceToCamelCase,\n} from '../../../utils/camelCase';\nimport { Button } from '../../Button';\nimport { Label } from '../../Label';\nimport { editorViewContent } from '../editorView.content';\nimport { getIsEditableSection } from '../getIsEditableSection';\nimport { NodeTypeSelector } from '../NodeTypeSelector';\nimport { TextEditor } from './TextEditor';\n\ntype EditorViewProps = {\n dictionaryKey: string;\n dictionary: Dictionary;\n locales: Locales[];\n};\n\nexport const EditorView: FC<EditorViewProps> = ({\n dictionaryKey,\n dictionary,\n locales,\n}) => {\n const { focusedContent, setFocusedContentKeyPath } = useFocusDictionary();\n const keyPath = focusedContent?.keyPath ?? [];\n const initialKeyName = keyPath[keyPath.length - 1]?.key ?? '';\n const { titleInput, deleteButton, nodeTypeSelector, restoreButton } =\n useDictionary(editorViewContent);\n const {\n editedContent,\n renameEditedContent,\n addEditedContent,\n removeEditedContent,\n } = useEditedContent();\n\n const editedSection = editedContent[dictionaryKey]?.content\n ? getDictionaryValueByKeyPath(editedContent[dictionaryKey].content, keyPath)\n : undefined;\n\n const dictionarySection = getDictionaryValueByKeyPath(\n dictionary.content,\n keyPath\n );\n\n const section = editedSection ?? dictionarySection;\n\n const isEdited = useMemo(\n () =>\n editedSection &&\n JSON.stringify(editedSection) !== JSON.stringify(dictionarySection),\n [editedSection, dictionarySection]\n );\n\n const isEditableSection = getIsEditableSection(section);\n\n const handleRenameNodeKey = (keyName: string) => {\n const camelCaseSentence = sentenceToCamelCase(keyName);\n renameEditedContent(dictionaryKey, camelCaseSentence, keyPath);\n const prevKeyPath: KeyPath[] = keyPath.slice(0, -1);\n const lastKeyPath: KeyPath = keyPath[keyPath.length - 1];\n const newKeyPath: KeyPath[] = [\n ...prevKeyPath,\n { ...lastKeyPath, key: camelCaseSentence } as KeyPath,\n ];\n setFocusedContentKeyPath(newKeyPath);\n };\n\n return (\n <>\n {isEditableSection && (\n <TextEditor\n key={keyPath.join('.')}\n keyPath={keyPath}\n section={section}\n dictionary={dictionary}\n locales={locales}\n />\n )}\n\n {keyPath.length > 0 ? (\n <form\n className=\"bg-text text-text-dark dark:bg-text-dark dark:text-text flex w-full flex-col items-start justify-between gap-6 px-4 py-2\"\n key={JSON.stringify(focusedContent?.keyPath)}\n >\n <div className=\"flex w-full flex-wrap items-start justify-between gap-6\">\n {typeof initialKeyName === 'string' && (\n <div className=\"flex flex-col gap-3\">\n <Label>{titleInput.label}</Label>\n <div className=\"flex flex-wrap items-center gap-4\">\n <EditableFieldInput\n name=\"key\"\n aria-label=\"Key\"\n key={initialKeyName}\n placeholder={titleInput.placeholder}\n defaultValue={camelCaseToSentence(initialKeyName)}\n onSave={(value) => handleRenameNodeKey(value)}\n className=\"h-8\"\n variant=\"invisible\"\n />\n <span className=\"text-neutral dark:text-neutral-dark text-sm\">\n ({initialKeyName})\n </span>\n </div>\n </div>\n )}\n\n <div>\n <Label>{nodeTypeSelector.label}</Label>\n\n <NodeTypeSelector\n keyPath={keyPath}\n dictionaryKey={dictionaryKey}\n section={section}\n />\n </div>\n </div>\n {keyPath.length > 0 && (\n <div className=\"ml-auto flex gap-2\">\n {isEdited && (\n <Button\n label={restoreButton.label}\n variant=\"outline\"\n color=\"text-inverse\"\n Icon={RotateCcw}\n onClick={() => removeEditedContent(dictionaryKey, keyPath)}\n >\n {restoreButton.text}\n </Button>\n )}\n <Button\n label={deleteButton.label}\n variant=\"outline\"\n color=\"error\"\n Icon={X}\n onClick={() => {\n addEditedContent(dictionaryKey, undefined, keyPath);\n\n const parentKeyPath: KeyPath[] = keyPath.slice(0, -1);\n setFocusedContentKeyPath(parentKeyPath);\n }}\n >\n {deleteButton.text}\n </Button>\n </div>\n )}\n </form>\n ) : (\n <span className=\"h-8\"></span>\n )}\n </>\n );\n};\n"],"names":["jsxs","Fragment","jsx"],"mappings":";;;;;;;;;;;;;;;;AA+BO,MAAM,aAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,gBAAgB,yBAAyB,IAAI,mBAAmB;AAClE,QAAA,UAAU,gBAAgB,WAAW,CAAC;AAC5C,QAAM,iBAAiB,QAAQ,QAAQ,SAAS,CAAC,GAAG,OAAO;AAC3D,QAAM,EAAE,YAAY,cAAc,kBAAkB,cAAc,IAChE,cAAc,iBAAiB;AAC3B,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,iBAAiB;AAEf,QAAA,gBAAgB,cAAc,aAAa,GAAG,UAChD,4BAA4B,cAAc,aAAa,EAAE,SAAS,OAAO,IACzE;AAEJ,QAAM,oBAAoB;AAAA,IACxB,WAAW;AAAA,IACX;AAAA,EACF;AAEA,QAAM,UAAU,iBAAiB;AAEjC,QAAM,WAAW;AAAA,IACf,MACE,iBACA,KAAK,UAAU,aAAa,MAAM,KAAK,UAAU,iBAAiB;AAAA,IACpE,CAAC,eAAe,iBAAiB;AAAA,EACnC;AAEM,QAAA,oBAAoB,qBAAqB,OAAO;AAEhD,QAAA,sBAAsB,CAAC,YAAoB;AACzC,UAAA,oBAAoB,oBAAoB,OAAO;AACjC,wBAAA,eAAe,mBAAmB,OAAO;AAC7D,UAAM,cAAyB,QAAQ,MAAM,GAAG,EAAE;AAClD,UAAM,cAAuB,QAAQ,QAAQ,SAAS,CAAC;AACvD,UAAM,aAAwB;AAAA,MAC5B,GAAG;AAAA,MACH,EAAE,GAAG,aAAa,KAAK,kBAAkB;AAAA,IAC3C;AACA,6BAAyB,UAAU;AAAA,EACrC;AAEA,SAEKA,kCAAA,KAAAC,4BAAA,EAAA,UAAA;AAAA,IACC,qBAAAC,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAJK,QAAQ,KAAK,GAAG;AAAA,IAKvB;AAAA,IAGD,QAAQ,SAAS,IAChBF,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QAGV,UAAA;AAAA,UAACA,kCAAAA,KAAA,OAAA,EAAI,WAAU,2DACZ,UAAA;AAAA,YAAA,OAAO,mBAAmB,YACxBA,kCAAA,KAAA,OAAA,EAAI,WAAU,uBACb,UAAA;AAAA,cAACE,kCAAAA,IAAA,OAAA,EAAO,qBAAW,MAAM,CAAA;AAAA,cACzBF,kCAAAA,KAAC,OAAI,EAAA,WAAU,qCACb,UAAA;AAAA,gBAAAE,kCAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,cAAW;AAAA,oBAEX,aAAa,WAAW;AAAA,oBACxB,cAAc,oBAAoB,cAAc;AAAA,oBAChD,QAAQ,CAAC,UAAU,oBAAoB,KAAK;AAAA,oBAC5C,WAAU;AAAA,oBACV,SAAQ;AAAA,kBAAA;AAAA,kBALH;AAAA,gBAMP;AAAA,gBACAF,kCAAAA,KAAC,QAAK,EAAA,WAAU,+CAA8C,UAAA;AAAA,kBAAA;AAAA,kBAC1D;AAAA,kBAAe;AAAA,gBAAA,EACnB,CAAA;AAAA,cAAA,EACF,CAAA;AAAA,YAAA,GACF;AAAA,mDAGD,OACC,EAAA,UAAA;AAAA,cAACE,kCAAAA,IAAA,OAAA,EAAO,2BAAiB,MAAM,CAAA;AAAA,cAE/BA,kCAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF,EACF,CAAA;AAAA,UAAA,GACF;AAAA,UACC,QAAQ,SAAS,KACfF,kCAAA,KAAA,OAAA,EAAI,WAAU,sBACZ,UAAA;AAAA,YACC,YAAAE,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO,cAAc;AAAA,gBACrB,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACN,MAAM;AAAA,gBACN,SAAS,MAAM,oBAAoB,eAAe,OAAO;AAAA,gBAExD,UAAc,cAAA;AAAA,cAAA;AAAA,YACjB;AAAA,YAEFA,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO,aAAa;AAAA,gBACpB,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACN,MAAM;AAAA,gBACN,SAAS,MAAM;AACI,mCAAA,eAAe,QAAW,OAAO;AAElD,wBAAM,gBAA2B,QAAQ,MAAM,GAAG,EAAE;AACpD,2CAAyB,aAAa;AAAA,gBACxC;AAAA,gBAEC,UAAa,aAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAChB,EACF,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MA7DG,KAAK,UAAU,gBAAgB,OAAO;AAAA,IAiE7C,IAAAA,sCAAC,QAAK,EAAA,WAAU,MAAM,CAAA;AAAA,EAAA,GAE1B;AAEJ;"}
|
|
@@ -3,30 +3,18 @@
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
4
4
|
const jsxRuntime = require("../../../jsx-runtime-CgFM7lM3.cjs");
|
|
5
5
|
const core = require("@intlayer/core");
|
|
6
|
+
const editorReact = require("@intlayer/editor-react");
|
|
6
7
|
const lucideReact = require("lucide-react");
|
|
7
8
|
const require$$0 = require("react");
|
|
8
9
|
const reactIntlayer = require("react-intlayer");
|
|
9
|
-
const shallow = require("../../../shallow-lhDIFtEp.cjs");
|
|
10
10
|
require("../../../hooks/useScrollBlockage/useScrollBlockageStore.cjs");
|
|
11
11
|
require("../../../hooks/useAsync/useAsyncStateStore.cjs");
|
|
12
12
|
const hooks_intlayerAPIHooks = require("../../../hooks/intlayerAPIHooks.cjs");
|
|
13
13
|
require("@intlayer/dictionaries-entry");
|
|
14
14
|
require("deepmerge");
|
|
15
|
-
const utils_dictionary = require("../../../utils/dictionary.cjs");
|
|
16
15
|
const utils_object = require("../../../utils/object.cjs");
|
|
17
16
|
const components_Button_Button = require("../../Button/Button.cjs");
|
|
18
17
|
const components_ContentEditor_ContentEditorTextArea = require("../../ContentEditor/ContentEditorTextArea.cjs");
|
|
19
|
-
const components_DictionaryEditor_useEditedContentStore = require("../../DictionaryEditor/useEditedContentStore.cjs");
|
|
20
|
-
require("../../DictionaryEditor/useEditionPanelStore.cjs");
|
|
21
|
-
require("clsx");
|
|
22
|
-
require("tailwind-merge");
|
|
23
|
-
require("../../EditableField/EditableFieldInput.cjs");
|
|
24
|
-
require("../../EditableField/EditableFieldTextArea.cjs");
|
|
25
|
-
require("../../Form/FormBase.cjs");
|
|
26
|
-
require("../../Form/FormField.cjs");
|
|
27
|
-
require("../../../Form-CSMiPnjC.cjs");
|
|
28
|
-
require("../../DictionaryEditor/validDictionaryChangeButtons.content.cjs");
|
|
29
|
-
require("zod");
|
|
30
18
|
require("@intlayer/config/client");
|
|
31
19
|
require("fuse.js");
|
|
32
20
|
require("../../Container/index.cjs");
|
|
@@ -47,9 +35,7 @@ const ContentEditorTextArea = ({
|
|
|
47
35
|
locales,
|
|
48
36
|
...props
|
|
49
37
|
}) => {
|
|
50
|
-
const addEditedContent =
|
|
51
|
-
shallow.useShallow((s) => s.addEditedContent)
|
|
52
|
-
);
|
|
38
|
+
const { addEditedContent } = editorReact.useEditedContent();
|
|
53
39
|
const { auditContentDeclarationField, isLoading: isAuditing } = hooks_intlayerAPIHooks.useAuditContentDeclarationField();
|
|
54
40
|
return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
|
|
55
41
|
components_ContentEditor_ContentEditorTextArea.ContentEditorTextArea,
|
|
@@ -159,9 +145,7 @@ const EnumerationTextEditor = ({
|
|
|
159
145
|
dictionary,
|
|
160
146
|
locales
|
|
161
147
|
}) => {
|
|
162
|
-
const addEditedContent =
|
|
163
|
-
shallow.useShallow((s) => s.addEditedContent)
|
|
164
|
-
);
|
|
148
|
+
const { addEditedContent } = editorReact.useEditedContent();
|
|
165
149
|
const { addNewEnumeration } = reactIntlayer.useDictionary(components_DictionaryFieldEditor_NavigationView_navigationViewNode_content.navigationViewContent);
|
|
166
150
|
return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsxs("table", { className: "w-full table-fixed gap-2", children: [
|
|
167
151
|
/* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx("tbody", { className: "divide-y-[1.5px]", children: Object.keys(
|
|
@@ -254,9 +238,7 @@ const ArrayTextEditor = ({
|
|
|
254
238
|
dictionary,
|
|
255
239
|
locales
|
|
256
240
|
}) => {
|
|
257
|
-
const addEditedContent =
|
|
258
|
-
shallow.useShallow((s) => s.addEditedContent)
|
|
259
|
-
);
|
|
241
|
+
const { addEditedContent } = editorReact.useEditedContent();
|
|
260
242
|
const { addNewElement } = reactIntlayer.useDictionary(components_DictionaryFieldEditor_NavigationView_navigationViewNode_content.navigationViewContent);
|
|
261
243
|
return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsxs("table", { className: "w-full gap-2", children: [
|
|
262
244
|
/* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx("tbody", { className: "divide-y-[1.5px]", children: section.map((subSection, index) => /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsxs(
|
|
@@ -316,7 +298,7 @@ const TextEditor = ({
|
|
|
316
298
|
locales
|
|
317
299
|
}) => {
|
|
318
300
|
const { tsxNotEditable } = reactIntlayer.useDictionary(components_DictionaryFieldEditor_NavigationView_navigationViewNode_content.navigationViewContent);
|
|
319
|
-
const nodeType =
|
|
301
|
+
const nodeType = core.getSectionType(section);
|
|
320
302
|
const isEditableSection = components_DictionaryFieldEditor_getIsEditableSection.getIsEditableSection(section);
|
|
321
303
|
if (!isEditableSection) return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(jsxRuntime.jsxRuntimeExports.Fragment, {});
|
|
322
304
|
if (typeof section === "object") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextEditor.cjs","sources":["../../../../src/components/DictionaryFieldEditor/EditorView/TextEditor.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n'use client';\n\nimport { Locales } from '@intlayer/config';\nimport {\n type EnumerationContent,\n type TranslationContent,\n NodeType,\n type KeyPath,\n type DictionaryValue,\n getLocaleName,\n Dictionary,\n} from '@intlayer/core';\nimport { Plus, WandSparkles, X } from 'lucide-react';\nimport {\n createElement,\n type ReactElement,\n type ReactNode,\n type FC,\n} from 'react';\n// @ts-ignore react-intlayer not build yet\nimport { useDictionary, useLocale } from 'react-intlayer';\nimport { useShallow } from 'zustand/react/shallow';\nimport { useAuditContentDeclarationField } from '../../../hooks';\nimport { getSectionType } from '../../../utils/dictionary';\nimport { renameKey } from '../../../utils/object';\nimport { Button } from '../../Button';\nimport {\n ContentEditorTextArea as ContentEditorTextAreaBase,\n ContentEditorTextAreaProps as ContentEditorTextAreaPropsBase,\n} from '../../ContentEditor/ContentEditorTextArea';\nimport { useEditedContentStore } from '../../DictionaryEditor';\nimport { useLocaleSwitcherContent } from '../../LocaleSwitcherContentDropDown';\nimport { EnumKeyInput } from '../EnumKeyInput';\nimport { getIsEditableSection } from '../getIsEditableSection';\nimport { navigationViewContent } from '../NavigationView/navigationViewNode.content';\n\nexport const traceKeys: string[] = ['filePath', 'id', 'nodeType'];\n\ntype ContentEditorTextAreaProps = Omit<\n ContentEditorTextAreaPropsBase,\n 'onContentChange'\n> & {\n keyPath: KeyPath[];\n dictionary: Dictionary;\n locales: Locales[];\n};\n\nconst ContentEditorTextArea: FC<ContentEditorTextAreaProps> = ({\n keyPath,\n dictionary,\n locales,\n ...props\n}) => {\n const addEditedContent = useEditedContentStore(\n useShallow((s) => s.addEditedContent)\n );\n const { auditContentDeclarationField, isLoading: isAuditing } =\n useAuditContentDeclarationField();\n\n return (\n <ContentEditorTextAreaBase\n variant=\"default\"\n onContentChange={(newValue) =>\n addEditedContent(dictionary.key, newValue, keyPath)\n }\n additionalButtons={\n <Button\n Icon={WandSparkles}\n label=\"Audit\"\n variant=\"hoverable\"\n size=\"icon-sm\"\n color=\"text\"\n className=\"cursor-pointer hover:scale-110\"\n isLoading={isAuditing}\n onClick={() => {\n auditContentDeclarationField({\n fileContent: JSON.stringify(dictionary),\n keyPath,\n locales,\n }).then((response) => {\n if (!response.data) return;\n\n try {\n const editedContent = response.data.fileContent as string;\n\n addEditedContent(dictionary.key, editedContent, keyPath);\n } catch (error) {\n console.error(error);\n }\n });\n }}\n />\n }\n {...props}\n />\n );\n};\n\nconst createReactElement = (element: ReactElement) => {\n if (typeof element === 'string') {\n // If it's a string, simply return it (used for text content)\n return element;\n }\n\n const convertChildrenAsArray = (element: ReactElement): ReactElement => {\n if (element?.props && typeof element.props.children === 'object') {\n const childrenResult: ReactNode[] = [];\n const { children } = element.props;\n\n // Create the children elements recursively, if any\n Object.keys(children).forEach((key) =>\n childrenResult.push(createReactElement(children[key]))\n );\n\n return {\n ...element,\n props: { ...element.props, children: childrenResult },\n };\n }\n\n return {\n ...element,\n props: { ...element.props, children: element.props.children },\n };\n };\n\n const fixedElement = convertChildrenAsArray(element);\n\n const { type, props } = fixedElement;\n\n // Create and return the React element\n return createElement(type ?? 'div', props, ...props.children);\n};\n\nexport type TextEditorProps = {\n dictionary: Dictionary;\n keyPath: KeyPath[];\n section: DictionaryValue;\n locales: Locales[];\n};\n\nconst TranslationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}: TextEditorProps) => {\n const { locale } = useLocale();\n const { selectedLocales, availableLocales } = useLocaleSwitcherContent();\n\n const sectionContent = (section as TranslationContent<string>)[\n NodeType.Translation\n ] as Record<Locales, string>;\n\n const sectionContentKeys = Object.keys(sectionContent) as Locales[];\n\n const isFiltered = availableLocales.length > selectedLocales.length;\n\n const localesList = isFiltered\n ? selectedLocales\n : // If the translation include content in other locales, we display all of them\n [...new Set([...availableLocales, ...sectionContentKeys])];\n\n return (\n <table className=\"w-full gap-2\">\n <tbody className=\"divide-y-[1.5px]\">\n {localesList.map((translationKey) => (\n <tr\n key={translationKey}\n className=\"border-text dark:border-text-dark w-full\"\n lang={translationKey}\n >\n <td className=\"flex w-full flex-col p-2\">\n {selectedLocales.length > 1 && (\n <span className=\"w-full p-2 text-xs\">\n {getLocaleName(translationKey, locale)}\n </span>\n )}\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={[\n ...keyPath,\n { type: NodeType.Translation, key: translationKey },\n ]}\n dictionary={dictionary}\n locales={locales}\n >\n {\n (section as TranslationContent<string>)[NodeType.Translation][\n translationKey\n ] as string\n }\n </ContentEditorTextArea>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n};\n\nconst EnumerationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}) => {\n const addEditedContent = useEditedContentStore(\n useShallow((s) => s.addEditedContent)\n );\n const { addNewEnumeration } = useDictionary(navigationViewContent);\n\n return (\n <table className=\"w-full table-fixed gap-2\">\n <tbody className=\"divide-y-[1.5px]\">\n {Object.keys(\n (section as EnumerationContent<DictionaryValue>)[NodeType.Enumeration]\n ).map((enumKey) => (\n <tr\n key={enumKey}\n className=\"border-text dark:border-text-dark w-full\"\n >\n <td className=\"border-text dark:border-text-dark w-44 border-r-[1.5px] p-2\">\n <div className=\"flex gap-1\">\n <Button\n label=\"Remove\"\n variant=\"hoverable\"\n size=\"icon-md\"\n color=\"text\"\n Icon={X}\n className=\"w-16\"\n onClick={() =>\n addEditedContent(dictionary.key, undefined, [\n ...keyPath,\n {\n type: NodeType.Enumeration,\n key: enumKey,\n },\n ])\n }\n />\n <EnumKeyInput\n value={enumKey}\n onChange={(value) => {\n const preValueContent = (\n section as EnumerationContent<string>\n )[NodeType.Enumeration];\n const newValueContent = renameKey(\n preValueContent,\n enumKey as keyof typeof preValueContent,\n value\n );\n const newValue = {\n ...(section as EnumerationContent<string>),\n [NodeType.Enumeration]: newValueContent,\n };\n\n addEditedContent(dictionary.key, newValue, keyPath);\n }}\n />\n </div>\n </td>\n <td className=\"w-full p-2\">\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={[\n ...keyPath,\n { type: NodeType.Enumeration, key: enumKey },\n ]}\n dictionary={dictionary}\n locales={locales}\n >\n {\n (section as EnumerationContent<string>)[NodeType.Enumeration][\n enumKey as any\n ] as string\n }\n </ContentEditorTextArea>\n </td>\n </tr>\n ))}\n </tbody>\n\n <tfoot>\n <Button\n label={addNewEnumeration.label}\n variant=\"hoverable\"\n color=\"neutral\"\n textAlign=\"left\"\n onClick={() =>\n addEditedContent(\n dictionary.key,\n '',\n [...keyPath, { type: NodeType.Enumeration, key: 'unknown' }],\n false\n )\n }\n Icon={Plus}\n className=\"m-2\"\n >\n {addNewEnumeration.text}\n </Button>\n </tfoot>\n </table>\n );\n};\n\nconst ArrayTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}) => {\n const addEditedContent = useEditedContentStore(\n useShallow((s) => s.addEditedContent)\n );\n const { addNewElement } = useDictionary(navigationViewContent);\n\n return (\n <table className=\"w-full gap-2\">\n <tbody className=\"divide-y-[1.5px]\">\n {(section as DictionaryValue[]).map((subSection, index) => (\n <tr\n key={JSON.stringify(subSection)}\n className=\"border-text dark:border-text-dark w-full\"\n >\n <td className=\"p-2\">{index}</td>\n <td className=\"w-full p-2\">\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Array,\n key: index,\n },\n ]}\n dictionary={dictionary}\n locales={locales}\n >\n {subSection as string}\n </ContentEditorTextArea>\n </td>\n </tr>\n ))}\n </tbody>\n <tfoot>\n <Button\n label={addNewElement.label}\n variant=\"hoverable\"\n color=\"neutral\"\n textAlign=\"left\"\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeType.Array,\n key: (section as DictionaryValue[]).length,\n },\n ];\n addEditedContent(dictionary.key, '', newKeyPath, false);\n }}\n Icon={Plus}\n >\n {addNewElement.text}\n </Button>\n </tfoot>\n </table>\n );\n};\n\nexport const TextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}) => {\n const { tsxNotEditable } = useDictionary(navigationViewContent);\n const nodeType = getSectionType(section);\n const isEditableSection = getIsEditableSection(section);\n\n if (!isEditableSection) return <></>;\n\n if (typeof section === 'object') {\n if (nodeType === NodeType.ReactNode) {\n return (\n <>\n {createReactElement(section as unknown as ReactElement)}\n <span className=\"text-neutral dark:text-neutral-dark text-xs\">\n {tsxNotEditable}\n </span>\n </>\n );\n }\n\n if (nodeType === NodeType.Translation) {\n return (\n <TranslationTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n locales={locales}\n />\n );\n }\n\n if (nodeType === NodeType.Enumeration) {\n return (\n <EnumerationTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n locales={locales}\n />\n );\n }\n\n if (nodeType === NodeType.Array) {\n return (\n <ArrayTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n locales={locales}\n />\n );\n }\n }\n\n if (nodeType === NodeType.Text) {\n return (\n <div className=\"border-text dark:border-text-dark w-full border-t-[1.5px] p-2\">\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={keyPath}\n dictionary={dictionary}\n locales={locales}\n >\n {section as string}\n </ContentEditorTextArea>\n </div>\n );\n }\n\n return <>Error loading section</>;\n};\n"],"names":["useEditedContentStore","useShallow","useAuditContentDeclarationField","jsx","ContentEditorTextAreaBase","Button","WandSparkles","element","createElement","useLocale","useLocaleSwitcherContent","NodeType","jsxs","getLocaleName","useDictionary","navigationViewContent","X","EnumKeyInput","renameKey","Plus","getSectionType","getIsEditableSection","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TextEditor.cjs","sources":["../../../../src/components/DictionaryFieldEditor/EditorView/TextEditor.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n'use client';\n\nimport { Locales } from '@intlayer/config';\nimport {\n type EnumerationContent,\n type TranslationContent,\n NodeType,\n type KeyPath,\n type DictionaryValue,\n getLocaleName,\n Dictionary,\n getSectionType,\n} from '@intlayer/core';\nimport { useEditedContent } from '@intlayer/editor-react';\nimport { Plus, WandSparkles, X } from 'lucide-react';\nimport {\n createElement,\n type ReactElement,\n type ReactNode,\n type FC,\n} from 'react';\n// @ts-ignore react-intlayer not build yet\nimport { useDictionary, useLocale } from 'react-intlayer';\nimport { useAuditContentDeclarationField } from '../../../hooks';\nimport { renameKey } from '../../../utils/object';\nimport { Button } from '../../Button';\nimport {\n ContentEditorTextArea as ContentEditorTextAreaBase,\n ContentEditorTextAreaProps as ContentEditorTextAreaPropsBase,\n} from '../../ContentEditor/ContentEditorTextArea';\nimport { useLocaleSwitcherContent } from '../../LocaleSwitcherContentDropDown';\nimport { EnumKeyInput } from '../EnumKeyInput';\nimport { getIsEditableSection } from '../getIsEditableSection';\nimport { navigationViewContent } from '../NavigationView/navigationViewNode.content';\n\nexport const traceKeys: string[] = ['filePath', 'id', 'nodeType'];\n\ntype ContentEditorTextAreaProps = Omit<\n ContentEditorTextAreaPropsBase,\n 'onContentChange'\n> & {\n keyPath: KeyPath[];\n dictionary: Dictionary;\n locales: Locales[];\n};\n\nconst ContentEditorTextArea: FC<ContentEditorTextAreaProps> = ({\n keyPath,\n dictionary,\n locales,\n ...props\n}) => {\n const { addEditedContent } = useEditedContent();\n const { auditContentDeclarationField, isLoading: isAuditing } =\n useAuditContentDeclarationField();\n\n return (\n <ContentEditorTextAreaBase\n variant=\"default\"\n onContentChange={(newValue) =>\n addEditedContent(dictionary.key, newValue, keyPath)\n }\n additionalButtons={\n <Button\n Icon={WandSparkles}\n label=\"Audit\"\n variant=\"hoverable\"\n size=\"icon-sm\"\n color=\"text\"\n className=\"cursor-pointer hover:scale-110\"\n isLoading={isAuditing}\n onClick={() => {\n auditContentDeclarationField({\n fileContent: JSON.stringify(dictionary),\n keyPath,\n locales,\n }).then((response) => {\n if (!response.data) return;\n\n try {\n const editedContent = response.data.fileContent as string;\n\n addEditedContent(dictionary.key, editedContent, keyPath);\n } catch (error) {\n console.error(error);\n }\n });\n }}\n />\n }\n {...props}\n />\n );\n};\n\nconst createReactElement = (element: ReactElement) => {\n if (typeof element === 'string') {\n // If it's a string, simply return it (used for text content)\n return element;\n }\n\n const convertChildrenAsArray = (element: ReactElement): ReactElement => {\n if (element?.props && typeof element.props.children === 'object') {\n const childrenResult: ReactNode[] = [];\n const { children } = element.props;\n\n // Create the children elements recursively, if any\n Object.keys(children).forEach((key) =>\n childrenResult.push(createReactElement(children[key]))\n );\n\n return {\n ...element,\n props: { ...element.props, children: childrenResult },\n };\n }\n\n return {\n ...element,\n props: { ...element.props, children: element.props.children },\n };\n };\n\n const fixedElement = convertChildrenAsArray(element);\n\n const { type, props } = fixedElement;\n\n // Create and return the React element\n return createElement(type ?? 'div', props, ...props.children);\n};\n\nexport type TextEditorProps = {\n dictionary: Dictionary;\n keyPath: KeyPath[];\n section: DictionaryValue;\n locales: Locales[];\n};\n\nconst TranslationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}: TextEditorProps) => {\n const { locale } = useLocale();\n const { selectedLocales, availableLocales } = useLocaleSwitcherContent();\n\n const sectionContent = (section as TranslationContent<string>)[\n NodeType.Translation\n ] as Record<Locales, string>;\n\n const sectionContentKeys = Object.keys(sectionContent) as Locales[];\n\n const isFiltered = availableLocales.length > selectedLocales.length;\n\n const localesList = isFiltered\n ? selectedLocales\n : // If the translation include content in other locales, we display all of them\n [...new Set([...availableLocales, ...sectionContentKeys])];\n\n return (\n <table className=\"w-full gap-2\">\n <tbody className=\"divide-y-[1.5px]\">\n {localesList.map((translationKey) => (\n <tr\n key={translationKey}\n className=\"border-text dark:border-text-dark w-full\"\n lang={translationKey}\n >\n <td className=\"flex w-full flex-col p-2\">\n {selectedLocales.length > 1 && (\n <span className=\"w-full p-2 text-xs\">\n {getLocaleName(translationKey, locale)}\n </span>\n )}\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={[\n ...keyPath,\n { type: NodeType.Translation, key: translationKey },\n ]}\n dictionary={dictionary}\n locales={locales}\n >\n {\n (section as TranslationContent<string>)[NodeType.Translation][\n translationKey\n ] as string\n }\n </ContentEditorTextArea>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n};\n\nconst EnumerationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}) => {\n const { addEditedContent } = useEditedContent();\n const { addNewEnumeration } = useDictionary(navigationViewContent);\n\n return (\n <table className=\"w-full table-fixed gap-2\">\n <tbody className=\"divide-y-[1.5px]\">\n {Object.keys(\n (section as EnumerationContent<DictionaryValue>)[NodeType.Enumeration]\n ).map((enumKey) => (\n <tr\n key={enumKey}\n className=\"border-text dark:border-text-dark w-full\"\n >\n <td className=\"border-text dark:border-text-dark w-44 border-r-[1.5px] p-2\">\n <div className=\"flex gap-1\">\n <Button\n label=\"Remove\"\n variant=\"hoverable\"\n size=\"icon-md\"\n color=\"text\"\n Icon={X}\n className=\"w-16\"\n onClick={() =>\n addEditedContent(dictionary.key, undefined, [\n ...keyPath,\n {\n type: NodeType.Enumeration,\n key: enumKey,\n },\n ])\n }\n />\n <EnumKeyInput\n value={enumKey}\n onChange={(value) => {\n const preValueContent = (\n section as EnumerationContent<string>\n )[NodeType.Enumeration];\n const newValueContent = renameKey(\n preValueContent,\n enumKey as keyof typeof preValueContent,\n value\n );\n const newValue = {\n ...(section as EnumerationContent<string>),\n [NodeType.Enumeration]: newValueContent,\n };\n\n addEditedContent(dictionary.key, newValue, keyPath);\n }}\n />\n </div>\n </td>\n <td className=\"w-full p-2\">\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={[\n ...keyPath,\n { type: NodeType.Enumeration, key: enumKey },\n ]}\n dictionary={dictionary}\n locales={locales}\n >\n {\n (section as EnumerationContent<string>)[NodeType.Enumeration][\n enumKey as any\n ] as string\n }\n </ContentEditorTextArea>\n </td>\n </tr>\n ))}\n </tbody>\n\n <tfoot>\n <Button\n label={addNewEnumeration.label}\n variant=\"hoverable\"\n color=\"neutral\"\n textAlign=\"left\"\n onClick={() =>\n addEditedContent(\n dictionary.key,\n '',\n [...keyPath, { type: NodeType.Enumeration, key: 'unknown' }],\n false\n )\n }\n Icon={Plus}\n className=\"m-2\"\n >\n {addNewEnumeration.text}\n </Button>\n </tfoot>\n </table>\n );\n};\n\nconst ArrayTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}) => {\n const { addEditedContent } = useEditedContent();\n const { addNewElement } = useDictionary(navigationViewContent);\n\n return (\n <table className=\"w-full gap-2\">\n <tbody className=\"divide-y-[1.5px]\">\n {(section as DictionaryValue[]).map((subSection, index) => (\n <tr\n key={JSON.stringify(subSection)}\n className=\"border-text dark:border-text-dark w-full\"\n >\n <td className=\"p-2\">{index}</td>\n <td className=\"w-full p-2\">\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Array,\n key: index,\n },\n ]}\n dictionary={dictionary}\n locales={locales}\n >\n {subSection as string}\n </ContentEditorTextArea>\n </td>\n </tr>\n ))}\n </tbody>\n <tfoot>\n <Button\n label={addNewElement.label}\n variant=\"hoverable\"\n color=\"neutral\"\n textAlign=\"left\"\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeType.Array,\n key: (section as DictionaryValue[]).length,\n },\n ];\n addEditedContent(dictionary.key, '', newKeyPath, false);\n }}\n Icon={Plus}\n >\n {addNewElement.text}\n </Button>\n </tfoot>\n </table>\n );\n};\n\nexport const TextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}) => {\n const { tsxNotEditable } = useDictionary(navigationViewContent);\n const nodeType = getSectionType(section);\n const isEditableSection = getIsEditableSection(section);\n\n if (!isEditableSection) return <></>;\n\n if (typeof section === 'object') {\n if (nodeType === NodeType.ReactNode) {\n return (\n <>\n {createReactElement(section as unknown as ReactElement)}\n <span className=\"text-neutral dark:text-neutral-dark text-xs\">\n {tsxNotEditable}\n </span>\n </>\n );\n }\n\n if (nodeType === NodeType.Translation) {\n return (\n <TranslationTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n locales={locales}\n />\n );\n }\n\n if (nodeType === NodeType.Enumeration) {\n return (\n <EnumerationTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n locales={locales}\n />\n );\n }\n\n if (nodeType === NodeType.Array) {\n return (\n <ArrayTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n locales={locales}\n />\n );\n }\n }\n\n if (nodeType === NodeType.Text) {\n return (\n <div className=\"border-text dark:border-text-dark w-full border-t-[1.5px] p-2\">\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={keyPath}\n dictionary={dictionary}\n locales={locales}\n >\n {section as string}\n </ContentEditorTextArea>\n </div>\n );\n }\n\n return <>Error loading section</>;\n};\n"],"names":["useEditedContent","useAuditContentDeclarationField","jsx","ContentEditorTextAreaBase","Button","WandSparkles","element","createElement","useLocale","useLocaleSwitcherContent","NodeType","jsxs","getLocaleName","useDictionary","navigationViewContent","X","EnumKeyInput","renameKey","Plus","getSectionType","getIsEditableSection","Fragment"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextEditor.d.ts","sourceRoot":"","sources":["../../../../src/components/DictionaryFieldEditor/EditorView/TextEditor.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAIL,KAAK,OAAO,EACZ,KAAK,eAAe,EAEpB,UAAU,
|
|
1
|
+
{"version":3,"file":"TextEditor.d.ts","sourceRoot":"","sources":["../../../../src/components/DictionaryFieldEditor/EditorView/TextEditor.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAIL,KAAK,OAAO,EACZ,KAAK,eAAe,EAEpB,UAAU,EAEX,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAIL,KAAK,EAAE,EACR,MAAM,OAAO,CAAC;AAef,eAAO,MAAM,SAAS,EAAE,MAAM,EAAmC,CAAC;AAgGlE,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,OAAO,EAAE,CAAC;CACpB,CAAC;AAuOF,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CA2E1C,CAAC"}
|
|
@@ -1,30 +1,18 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { j as jsxRuntimeExports } from "../../../jsx-runtime-DQkoUcjV.js";
|
|
3
|
-
import { NodeType, getLocaleName } from "@intlayer/core";
|
|
3
|
+
import { getSectionType, NodeType, getLocaleName } from "@intlayer/core";
|
|
4
|
+
import { useEditedContent } from "@intlayer/editor-react";
|
|
4
5
|
import { WandSparkles, X, Plus } from "lucide-react";
|
|
5
6
|
import { createElement } from "react";
|
|
6
7
|
import { useDictionary, useLocale } from "react-intlayer";
|
|
7
|
-
import { u as useShallow } from "../../../shallow-m9BpCkKh.js";
|
|
8
8
|
import "../../../hooks/useScrollBlockage/useScrollBlockageStore.mjs";
|
|
9
9
|
import "../../../hooks/useAsync/useAsyncStateStore.mjs";
|
|
10
10
|
import { useAuditContentDeclarationField } from "../../../hooks/intlayerAPIHooks.mjs";
|
|
11
11
|
import "@intlayer/dictionaries-entry";
|
|
12
12
|
import "deepmerge";
|
|
13
|
-
import { getSectionType } from "../../../utils/dictionary.mjs";
|
|
14
13
|
import { renameKey } from "../../../utils/object.mjs";
|
|
15
14
|
import { Button } from "../../Button/Button.mjs";
|
|
16
15
|
import { ContentEditorTextArea as ContentEditorTextArea$1 } from "../../ContentEditor/ContentEditorTextArea.mjs";
|
|
17
|
-
import { useEditedContentStore } from "../../DictionaryEditor/useEditedContentStore.mjs";
|
|
18
|
-
import "../../DictionaryEditor/useEditionPanelStore.mjs";
|
|
19
|
-
import "clsx";
|
|
20
|
-
import "tailwind-merge";
|
|
21
|
-
import "../../EditableField/EditableFieldInput.mjs";
|
|
22
|
-
import "../../EditableField/EditableFieldTextArea.mjs";
|
|
23
|
-
import "../../Form/FormBase.mjs";
|
|
24
|
-
import "../../Form/FormField.mjs";
|
|
25
|
-
import "../../../Form-DlqjTz3u.js";
|
|
26
|
-
import "../../DictionaryEditor/validDictionaryChangeButtons.content.mjs";
|
|
27
|
-
import "zod";
|
|
28
16
|
import "@intlayer/config/client";
|
|
29
17
|
import "fuse.js";
|
|
30
18
|
import "../../Container/index.mjs";
|
|
@@ -45,9 +33,7 @@ const ContentEditorTextArea = ({
|
|
|
45
33
|
locales,
|
|
46
34
|
...props
|
|
47
35
|
}) => {
|
|
48
|
-
const addEditedContent =
|
|
49
|
-
useShallow((s) => s.addEditedContent)
|
|
50
|
-
);
|
|
36
|
+
const { addEditedContent } = useEditedContent();
|
|
51
37
|
const { auditContentDeclarationField, isLoading: isAuditing } = useAuditContentDeclarationField();
|
|
52
38
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
53
39
|
ContentEditorTextArea$1,
|
|
@@ -157,9 +143,7 @@ const EnumerationTextEditor = ({
|
|
|
157
143
|
dictionary,
|
|
158
144
|
locales
|
|
159
145
|
}) => {
|
|
160
|
-
const addEditedContent =
|
|
161
|
-
useShallow((s) => s.addEditedContent)
|
|
162
|
-
);
|
|
146
|
+
const { addEditedContent } = useEditedContent();
|
|
163
147
|
const { addNewEnumeration } = useDictionary(navigationViewContent);
|
|
164
148
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("table", { className: "w-full table-fixed gap-2", children: [
|
|
165
149
|
/* @__PURE__ */ jsxRuntimeExports.jsx("tbody", { className: "divide-y-[1.5px]", children: Object.keys(
|
|
@@ -252,9 +236,7 @@ const ArrayTextEditor = ({
|
|
|
252
236
|
dictionary,
|
|
253
237
|
locales
|
|
254
238
|
}) => {
|
|
255
|
-
const addEditedContent =
|
|
256
|
-
useShallow((s) => s.addEditedContent)
|
|
257
|
-
);
|
|
239
|
+
const { addEditedContent } = useEditedContent();
|
|
258
240
|
const { addNewElement } = useDictionary(navigationViewContent);
|
|
259
241
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("table", { className: "w-full gap-2", children: [
|
|
260
242
|
/* @__PURE__ */ jsxRuntimeExports.jsx("tbody", { className: "divide-y-[1.5px]", children: section.map((subSection, index) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextEditor.mjs","sources":["../../../../src/components/DictionaryFieldEditor/EditorView/TextEditor.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n'use client';\n\nimport { Locales } from '@intlayer/config';\nimport {\n type EnumerationContent,\n type TranslationContent,\n NodeType,\n type KeyPath,\n type DictionaryValue,\n getLocaleName,\n Dictionary,\n} from '@intlayer/core';\nimport { Plus, WandSparkles, X } from 'lucide-react';\nimport {\n createElement,\n type ReactElement,\n type ReactNode,\n type FC,\n} from 'react';\n// @ts-ignore react-intlayer not build yet\nimport { useDictionary, useLocale } from 'react-intlayer';\nimport { useShallow } from 'zustand/react/shallow';\nimport { useAuditContentDeclarationField } from '../../../hooks';\nimport { getSectionType } from '../../../utils/dictionary';\nimport { renameKey } from '../../../utils/object';\nimport { Button } from '../../Button';\nimport {\n ContentEditorTextArea as ContentEditorTextAreaBase,\n ContentEditorTextAreaProps as ContentEditorTextAreaPropsBase,\n} from '../../ContentEditor/ContentEditorTextArea';\nimport { useEditedContentStore } from '../../DictionaryEditor';\nimport { useLocaleSwitcherContent } from '../../LocaleSwitcherContentDropDown';\nimport { EnumKeyInput } from '../EnumKeyInput';\nimport { getIsEditableSection } from '../getIsEditableSection';\nimport { navigationViewContent } from '../NavigationView/navigationViewNode.content';\n\nexport const traceKeys: string[] = ['filePath', 'id', 'nodeType'];\n\ntype ContentEditorTextAreaProps = Omit<\n ContentEditorTextAreaPropsBase,\n 'onContentChange'\n> & {\n keyPath: KeyPath[];\n dictionary: Dictionary;\n locales: Locales[];\n};\n\nconst ContentEditorTextArea: FC<ContentEditorTextAreaProps> = ({\n keyPath,\n dictionary,\n locales,\n ...props\n}) => {\n const addEditedContent = useEditedContentStore(\n useShallow((s) => s.addEditedContent)\n );\n const { auditContentDeclarationField, isLoading: isAuditing } =\n useAuditContentDeclarationField();\n\n return (\n <ContentEditorTextAreaBase\n variant=\"default\"\n onContentChange={(newValue) =>\n addEditedContent(dictionary.key, newValue, keyPath)\n }\n additionalButtons={\n <Button\n Icon={WandSparkles}\n label=\"Audit\"\n variant=\"hoverable\"\n size=\"icon-sm\"\n color=\"text\"\n className=\"cursor-pointer hover:scale-110\"\n isLoading={isAuditing}\n onClick={() => {\n auditContentDeclarationField({\n fileContent: JSON.stringify(dictionary),\n keyPath,\n locales,\n }).then((response) => {\n if (!response.data) return;\n\n try {\n const editedContent = response.data.fileContent as string;\n\n addEditedContent(dictionary.key, editedContent, keyPath);\n } catch (error) {\n console.error(error);\n }\n });\n }}\n />\n }\n {...props}\n />\n );\n};\n\nconst createReactElement = (element: ReactElement) => {\n if (typeof element === 'string') {\n // If it's a string, simply return it (used for text content)\n return element;\n }\n\n const convertChildrenAsArray = (element: ReactElement): ReactElement => {\n if (element?.props && typeof element.props.children === 'object') {\n const childrenResult: ReactNode[] = [];\n const { children } = element.props;\n\n // Create the children elements recursively, if any\n Object.keys(children).forEach((key) =>\n childrenResult.push(createReactElement(children[key]))\n );\n\n return {\n ...element,\n props: { ...element.props, children: childrenResult },\n };\n }\n\n return {\n ...element,\n props: { ...element.props, children: element.props.children },\n };\n };\n\n const fixedElement = convertChildrenAsArray(element);\n\n const { type, props } = fixedElement;\n\n // Create and return the React element\n return createElement(type ?? 'div', props, ...props.children);\n};\n\nexport type TextEditorProps = {\n dictionary: Dictionary;\n keyPath: KeyPath[];\n section: DictionaryValue;\n locales: Locales[];\n};\n\nconst TranslationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}: TextEditorProps) => {\n const { locale } = useLocale();\n const { selectedLocales, availableLocales } = useLocaleSwitcherContent();\n\n const sectionContent = (section as TranslationContent<string>)[\n NodeType.Translation\n ] as Record<Locales, string>;\n\n const sectionContentKeys = Object.keys(sectionContent) as Locales[];\n\n const isFiltered = availableLocales.length > selectedLocales.length;\n\n const localesList = isFiltered\n ? selectedLocales\n : // If the translation include content in other locales, we display all of them\n [...new Set([...availableLocales, ...sectionContentKeys])];\n\n return (\n <table className=\"w-full gap-2\">\n <tbody className=\"divide-y-[1.5px]\">\n {localesList.map((translationKey) => (\n <tr\n key={translationKey}\n className=\"border-text dark:border-text-dark w-full\"\n lang={translationKey}\n >\n <td className=\"flex w-full flex-col p-2\">\n {selectedLocales.length > 1 && (\n <span className=\"w-full p-2 text-xs\">\n {getLocaleName(translationKey, locale)}\n </span>\n )}\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={[\n ...keyPath,\n { type: NodeType.Translation, key: translationKey },\n ]}\n dictionary={dictionary}\n locales={locales}\n >\n {\n (section as TranslationContent<string>)[NodeType.Translation][\n translationKey\n ] as string\n }\n </ContentEditorTextArea>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n};\n\nconst EnumerationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}) => {\n const addEditedContent = useEditedContentStore(\n useShallow((s) => s.addEditedContent)\n );\n const { addNewEnumeration } = useDictionary(navigationViewContent);\n\n return (\n <table className=\"w-full table-fixed gap-2\">\n <tbody className=\"divide-y-[1.5px]\">\n {Object.keys(\n (section as EnumerationContent<DictionaryValue>)[NodeType.Enumeration]\n ).map((enumKey) => (\n <tr\n key={enumKey}\n className=\"border-text dark:border-text-dark w-full\"\n >\n <td className=\"border-text dark:border-text-dark w-44 border-r-[1.5px] p-2\">\n <div className=\"flex gap-1\">\n <Button\n label=\"Remove\"\n variant=\"hoverable\"\n size=\"icon-md\"\n color=\"text\"\n Icon={X}\n className=\"w-16\"\n onClick={() =>\n addEditedContent(dictionary.key, undefined, [\n ...keyPath,\n {\n type: NodeType.Enumeration,\n key: enumKey,\n },\n ])\n }\n />\n <EnumKeyInput\n value={enumKey}\n onChange={(value) => {\n const preValueContent = (\n section as EnumerationContent<string>\n )[NodeType.Enumeration];\n const newValueContent = renameKey(\n preValueContent,\n enumKey as keyof typeof preValueContent,\n value\n );\n const newValue = {\n ...(section as EnumerationContent<string>),\n [NodeType.Enumeration]: newValueContent,\n };\n\n addEditedContent(dictionary.key, newValue, keyPath);\n }}\n />\n </div>\n </td>\n <td className=\"w-full p-2\">\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={[\n ...keyPath,\n { type: NodeType.Enumeration, key: enumKey },\n ]}\n dictionary={dictionary}\n locales={locales}\n >\n {\n (section as EnumerationContent<string>)[NodeType.Enumeration][\n enumKey as any\n ] as string\n }\n </ContentEditorTextArea>\n </td>\n </tr>\n ))}\n </tbody>\n\n <tfoot>\n <Button\n label={addNewEnumeration.label}\n variant=\"hoverable\"\n color=\"neutral\"\n textAlign=\"left\"\n onClick={() =>\n addEditedContent(\n dictionary.key,\n '',\n [...keyPath, { type: NodeType.Enumeration, key: 'unknown' }],\n false\n )\n }\n Icon={Plus}\n className=\"m-2\"\n >\n {addNewEnumeration.text}\n </Button>\n </tfoot>\n </table>\n );\n};\n\nconst ArrayTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}) => {\n const addEditedContent = useEditedContentStore(\n useShallow((s) => s.addEditedContent)\n );\n const { addNewElement } = useDictionary(navigationViewContent);\n\n return (\n <table className=\"w-full gap-2\">\n <tbody className=\"divide-y-[1.5px]\">\n {(section as DictionaryValue[]).map((subSection, index) => (\n <tr\n key={JSON.stringify(subSection)}\n className=\"border-text dark:border-text-dark w-full\"\n >\n <td className=\"p-2\">{index}</td>\n <td className=\"w-full p-2\">\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Array,\n key: index,\n },\n ]}\n dictionary={dictionary}\n locales={locales}\n >\n {subSection as string}\n </ContentEditorTextArea>\n </td>\n </tr>\n ))}\n </tbody>\n <tfoot>\n <Button\n label={addNewElement.label}\n variant=\"hoverable\"\n color=\"neutral\"\n textAlign=\"left\"\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeType.Array,\n key: (section as DictionaryValue[]).length,\n },\n ];\n addEditedContent(dictionary.key, '', newKeyPath, false);\n }}\n Icon={Plus}\n >\n {addNewElement.text}\n </Button>\n </tfoot>\n </table>\n );\n};\n\nexport const TextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}) => {\n const { tsxNotEditable } = useDictionary(navigationViewContent);\n const nodeType = getSectionType(section);\n const isEditableSection = getIsEditableSection(section);\n\n if (!isEditableSection) return <></>;\n\n if (typeof section === 'object') {\n if (nodeType === NodeType.ReactNode) {\n return (\n <>\n {createReactElement(section as unknown as ReactElement)}\n <span className=\"text-neutral dark:text-neutral-dark text-xs\">\n {tsxNotEditable}\n </span>\n </>\n );\n }\n\n if (nodeType === NodeType.Translation) {\n return (\n <TranslationTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n locales={locales}\n />\n );\n }\n\n if (nodeType === NodeType.Enumeration) {\n return (\n <EnumerationTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n locales={locales}\n />\n );\n }\n\n if (nodeType === NodeType.Array) {\n return (\n <ArrayTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n locales={locales}\n />\n );\n }\n }\n\n if (nodeType === NodeType.Text) {\n return (\n <div className=\"border-text dark:border-text-dark w-full border-t-[1.5px] p-2\">\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={keyPath}\n dictionary={dictionary}\n locales={locales}\n >\n {section as string}\n </ContentEditorTextArea>\n </div>\n );\n }\n\n return <>Error loading section</>;\n};\n"],"names":["jsx","ContentEditorTextAreaBase","element","jsxs","Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCO,MAAM,YAAsB,CAAC,YAAY,MAAM,UAAU;AAWhE,MAAM,wBAAwD,CAAC;AAAA,EAC7D;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,mBAAmB;AAAA,IACvB,WAAW,CAAC,MAAM,EAAE,gBAAgB;AAAA,EACtC;AACA,QAAM,EAAE,8BAA8B,WAAW,WAAA,IAC/C,gCAAgC;AAGhC,SAAAA,kCAAA;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,iBAAiB,CAAC,aAChB,iBAAiB,WAAW,KAAK,UAAU,OAAO;AAAA,MAEpD,mBACED,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,OAAM;AAAA,UACN,WAAU;AAAA,UACV,WAAW;AAAA,UACX,SAAS,MAAM;AACgB,yCAAA;AAAA,cAC3B,aAAa,KAAK,UAAU,UAAU;AAAA,cACtC;AAAA,cACA;AAAA,YAAA,CACD,EAAE,KAAK,CAAC,aAAa;AAChB,kBAAA,CAAC,SAAS,KAAM;AAEhB,kBAAA;AACI,sBAAA,gBAAgB,SAAS,KAAK;AAEnB,iCAAA,WAAW,KAAK,eAAe,OAAO;AAAA,uBAChD,OAAO;AACd,wBAAQ,MAAM,KAAK;AAAA,cAAA;AAAA,YACrB,CACD;AAAA,UAAA;AAAA,QACH;AAAA,MACF;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EACN;AAEJ;AAEA,MAAM,qBAAqB,CAAC,YAA0B;AAChD,MAAA,OAAO,YAAY,UAAU;AAExB,WAAA;AAAA,EAAA;AAGH,QAAA,yBAAyB,CAACE,aAAwC;AACtE,QAAIA,UAAS,SAAS,OAAOA,SAAQ,MAAM,aAAa,UAAU;AAChE,YAAM,iBAA8B,CAAC;AAC/B,YAAA,EAAE,aAAaA,SAAQ;AAGtB,aAAA,KAAK,QAAQ,EAAE;AAAA,QAAQ,CAAC,QAC7B,eAAe,KAAK,mBAAmB,SAAS,GAAG,CAAC,CAAC;AAAA,MACvD;AAEO,aAAA;AAAA,QACL,GAAGA;AAAAA,QACH,OAAO,EAAE,GAAGA,SAAQ,OAAO,UAAU,eAAe;AAAA,MACtD;AAAA,IAAA;AAGK,WAAA;AAAA,MACL,GAAGA;AAAAA,MACH,OAAO,EAAE,GAAGA,SAAQ,OAAO,UAAUA,SAAQ,MAAM,SAAS;AAAA,IAC9D;AAAA,EACF;AAEM,QAAA,eAAe,uBAAuB,OAAO;AAE7C,QAAA,EAAE,MAAM,MAAA,IAAU;AAGxB,SAAO,cAAc,QAAQ,OAAO,OAAO,GAAG,MAAM,QAAQ;AAC9D;AASA,MAAM,wBAA6C,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAuB;AACf,QAAA,EAAE,OAAO,IAAI,UAAU;AAC7B,QAAM,EAAE,iBAAiB,iBAAiB,IAAI,yBAAyB;AAEjE,QAAA,iBAAkB,QACtB,SAAS,WACX;AAEM,QAAA,qBAAqB,OAAO,KAAK,cAAc;AAE/C,QAAA,aAAa,iBAAiB,SAAS,gBAAgB;AAE7D,QAAM,cAAc,aAChB;AAAA;AAAA,IAEA,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,kBAAkB,GAAG,kBAAkB,CAAC,CAAC;AAAA;AAG3D,SAAAF,kCAAAA,IAAC,SAAM,EAAA,WAAU,gBACf,UAAAA,sCAAC,SAAM,EAAA,WAAU,oBACd,UAAA,YAAY,IAAI,CAAC,mBAChBA,kCAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,WAAU;AAAA,MACV,MAAM;AAAA,MAEN,UAAAG,kCAAA,KAAC,MAAG,EAAA,WAAU,4BACX,UAAA;AAAA,QAAgB,gBAAA,SAAS,KACvBH,kCAAA,IAAA,QAAA,EAAK,WAAU,sBACb,UAAA,cAAc,gBAAgB,MAAM,EACvC,CAAA;AAAA,QAEFA,kCAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,cAAW;AAAA,YACX,SAAS;AAAA,cACP,GAAG;AAAA,cACH,EAAE,MAAM,SAAS,aAAa,KAAK,eAAe;AAAA,YACpD;AAAA,YACA;AAAA,YACA;AAAA,YAGG,UAAuC,QAAA,SAAS,WAAW,EAC1D,cACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAEJ,EACF,CAAA;AAAA,IAAA;AAAA,IA1BK;AAAA,EAAA,CA4BR,GACH,EACF,CAAA;AAEJ;AAEA,MAAM,wBAA6C,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,mBAAmB;AAAA,IACvB,WAAW,CAAC,MAAM,EAAE,gBAAgB;AAAA,EACtC;AACA,QAAM,EAAE,kBAAA,IAAsB,cAAc,qBAAqB;AAG/D,SAAAG,kCAAA,KAAC,SAAM,EAAA,WAAU,4BACf,UAAA;AAAA,IAACH,kCAAA,IAAA,SAAA,EAAM,WAAU,oBACd,UAAO,OAAA;AAAA,MACL,QAAgD,SAAS,WAAW;AAAA,IAAA,EACrE,IAAI,CAAC,YACLG,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAEV,UAAA;AAAA,UAAAH,kCAAAA,IAAC,QAAG,WAAU,+DACZ,UAACG,kCAAA,KAAA,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,YAAAH,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAM;AAAA,gBACN,SAAQ;AAAA,gBACR,MAAK;AAAA,gBACL,OAAM;AAAA,gBACN,MAAM;AAAA,gBACN,WAAU;AAAA,gBACV,SAAS,MACP,iBAAiB,WAAW,KAAK,QAAW;AAAA,kBAC1C,GAAG;AAAA,kBACH;AAAA,oBACE,MAAM,SAAS;AAAA,oBACf,KAAK;AAAA,kBAAA;AAAA,gBAER,CAAA;AAAA,cAAA;AAAA,YAEL;AAAA,YACAA,kCAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,gBACP,UAAU,CAAC,UAAU;AACb,wBAAA,kBACJ,QACA,SAAS,WAAW;AACtB,wBAAM,kBAAkB;AAAA,oBACtB;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF;AACA,wBAAM,WAAW;AAAA,oBACf,GAAI;AAAA,oBACJ,CAAC,SAAS,WAAW,GAAG;AAAA,kBAC1B;AAEiB,mCAAA,WAAW,KAAK,UAAU,OAAO;AAAA,gBAAA;AAAA,cACpD;AAAA,YAAA;AAAA,UACF,EAAA,CACF,EACF,CAAA;AAAA,UACAA,kCAAAA,IAAC,MAAG,EAAA,WAAU,cACZ,UAAAA,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,cAAW;AAAA,cACX,SAAS;AAAA,gBACP,GAAG;AAAA,gBACH,EAAE,MAAM,SAAS,aAAa,KAAK,QAAQ;AAAA,cAC7C;AAAA,cACA;AAAA,cACA;AAAA,cAGG,UAAuC,QAAA,SAAS,WAAW,EAC1D,OACF;AAAA,YAAA;AAAA,UAAA,EAGN,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MA5DK;AAAA,IA8DR,CAAA,GACH;AAAA,0CAEC,SACC,EAAA,UAAAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO,kBAAkB;AAAA,QACzB,SAAQ;AAAA,QACR,OAAM;AAAA,QACN,WAAU;AAAA,QACV,SAAS,MACP;AAAA,UACE,WAAW;AAAA,UACX;AAAA,UACA,CAAC,GAAG,SAAS,EAAE,MAAM,SAAS,aAAa,KAAK,WAAW;AAAA,UAC3D;AAAA,QACF;AAAA,QAEF,MAAM;AAAA,QACN,WAAU;AAAA,QAET,UAAkB,kBAAA;AAAA,MAAA;AAAA,IAAA,EAEvB,CAAA;AAAA,EAAA,GACF;AAEJ;AAEA,MAAM,kBAAuC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,mBAAmB;AAAA,IACvB,WAAW,CAAC,MAAM,EAAE,gBAAgB;AAAA,EACtC;AACA,QAAM,EAAE,cAAA,IAAkB,cAAc,qBAAqB;AAG3D,SAAAG,kCAAA,KAAC,SAAM,EAAA,WAAU,gBACf,UAAA;AAAA,IAAAH,kCAAAA,IAAC,WAAM,WAAU,oBACb,kBAA8B,IAAI,CAAC,YAAY,UAC/CG,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAEV,UAAA;AAAA,UAACH,kCAAA,IAAA,MAAA,EAAG,WAAU,OAAO,UAAM,OAAA;AAAA,UAC3BA,kCAAAA,IAAC,MAAG,EAAA,WAAU,cACZ,UAAAA,kCAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,cAAW;AAAA,cACX,SAAS;AAAA,gBACP,GAAG;AAAA,gBACH;AAAA,kBACE,MAAM,SAAS;AAAA,kBACf,KAAK;AAAA,gBAAA;AAAA,cAET;AAAA,cACA;AAAA,cACA;AAAA,cAEC,UAAA;AAAA,YAAA;AAAA,UAAA,EAEL,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MApBK,KAAK,UAAU,UAAU;AAAA,IAsBjC,CAAA,GACH;AAAA,0CACC,SACC,EAAA,UAAAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO,cAAc;AAAA,QACrB,SAAQ;AAAA,QACR,OAAM;AAAA,QACN,WAAU;AAAA,QACV,SAAS,MAAM;AACb,gBAAM,aAAwB;AAAA,YAC5B,GAAG;AAAA,YACH;AAAA,cACE,MAAM,SAAS;AAAA,cACf,KAAM,QAA8B;AAAA,YAAA;AAAA,UAExC;AACA,2BAAiB,WAAW,KAAK,IAAI,YAAY,KAAK;AAAA,QACxD;AAAA,QACA,MAAM;AAAA,QAEL,UAAc,cAAA;AAAA,MAAA;AAAA,IAAA,EAEnB,CAAA;AAAA,EAAA,GACF;AAEJ;AAEO,MAAM,aAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,eAAA,IAAmB,cAAc,qBAAqB;AACxD,QAAA,WAAW,eAAe,OAAO;AACjC,QAAA,oBAAoB,qBAAqB,OAAO;AAElD,MAAA,CAAC,kBAAmB,QAASA,sCAAAI,kBAAAA,UAAA,CAAA,CAAA;AAE7B,MAAA,OAAO,YAAY,UAAU;AAC3B,QAAA,aAAa,SAAS,WAAW;AACnC,aAEKD,kCAAA,KAAAC,4BAAA,EAAA,UAAA;AAAA,QAAA,mBAAmB,OAAkC;AAAA,QACrDJ,kCAAA,IAAA,QAAA,EAAK,WAAU,+CACb,UACH,eAAA,CAAA;AAAA,MAAA,GACF;AAAA,IAAA;AAIA,QAAA,aAAa,SAAS,aAAa;AAEnC,aAAAA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAIA,QAAA,aAAa,SAAS,aAAa;AAEnC,aAAAA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAIA,QAAA,aAAa,SAAS,OAAO;AAE7B,aAAAA,kCAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AAGE,MAAA,aAAa,SAAS,MAAM;AAE5B,WAAAA,kCAAAA,IAAC,OAAI,EAAA,WAAU,iEACb,UAAAA,kCAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,cAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QAEC,UAAA;AAAA,MAAA;AAAA,IAAA,GAEL;AAAA,EAAA;AAIJ,6EAAS,UAAqB,wBAAA,CAAA;AAChC;"}
|
|
1
|
+
{"version":3,"file":"TextEditor.mjs","sources":["../../../../src/components/DictionaryFieldEditor/EditorView/TextEditor.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n'use client';\n\nimport { Locales } from '@intlayer/config';\nimport {\n type EnumerationContent,\n type TranslationContent,\n NodeType,\n type KeyPath,\n type DictionaryValue,\n getLocaleName,\n Dictionary,\n getSectionType,\n} from '@intlayer/core';\nimport { useEditedContent } from '@intlayer/editor-react';\nimport { Plus, WandSparkles, X } from 'lucide-react';\nimport {\n createElement,\n type ReactElement,\n type ReactNode,\n type FC,\n} from 'react';\n// @ts-ignore react-intlayer not build yet\nimport { useDictionary, useLocale } from 'react-intlayer';\nimport { useAuditContentDeclarationField } from '../../../hooks';\nimport { renameKey } from '../../../utils/object';\nimport { Button } from '../../Button';\nimport {\n ContentEditorTextArea as ContentEditorTextAreaBase,\n ContentEditorTextAreaProps as ContentEditorTextAreaPropsBase,\n} from '../../ContentEditor/ContentEditorTextArea';\nimport { useLocaleSwitcherContent } from '../../LocaleSwitcherContentDropDown';\nimport { EnumKeyInput } from '../EnumKeyInput';\nimport { getIsEditableSection } from '../getIsEditableSection';\nimport { navigationViewContent } from '../NavigationView/navigationViewNode.content';\n\nexport const traceKeys: string[] = ['filePath', 'id', 'nodeType'];\n\ntype ContentEditorTextAreaProps = Omit<\n ContentEditorTextAreaPropsBase,\n 'onContentChange'\n> & {\n keyPath: KeyPath[];\n dictionary: Dictionary;\n locales: Locales[];\n};\n\nconst ContentEditorTextArea: FC<ContentEditorTextAreaProps> = ({\n keyPath,\n dictionary,\n locales,\n ...props\n}) => {\n const { addEditedContent } = useEditedContent();\n const { auditContentDeclarationField, isLoading: isAuditing } =\n useAuditContentDeclarationField();\n\n return (\n <ContentEditorTextAreaBase\n variant=\"default\"\n onContentChange={(newValue) =>\n addEditedContent(dictionary.key, newValue, keyPath)\n }\n additionalButtons={\n <Button\n Icon={WandSparkles}\n label=\"Audit\"\n variant=\"hoverable\"\n size=\"icon-sm\"\n color=\"text\"\n className=\"cursor-pointer hover:scale-110\"\n isLoading={isAuditing}\n onClick={() => {\n auditContentDeclarationField({\n fileContent: JSON.stringify(dictionary),\n keyPath,\n locales,\n }).then((response) => {\n if (!response.data) return;\n\n try {\n const editedContent = response.data.fileContent as string;\n\n addEditedContent(dictionary.key, editedContent, keyPath);\n } catch (error) {\n console.error(error);\n }\n });\n }}\n />\n }\n {...props}\n />\n );\n};\n\nconst createReactElement = (element: ReactElement) => {\n if (typeof element === 'string') {\n // If it's a string, simply return it (used for text content)\n return element;\n }\n\n const convertChildrenAsArray = (element: ReactElement): ReactElement => {\n if (element?.props && typeof element.props.children === 'object') {\n const childrenResult: ReactNode[] = [];\n const { children } = element.props;\n\n // Create the children elements recursively, if any\n Object.keys(children).forEach((key) =>\n childrenResult.push(createReactElement(children[key]))\n );\n\n return {\n ...element,\n props: { ...element.props, children: childrenResult },\n };\n }\n\n return {\n ...element,\n props: { ...element.props, children: element.props.children },\n };\n };\n\n const fixedElement = convertChildrenAsArray(element);\n\n const { type, props } = fixedElement;\n\n // Create and return the React element\n return createElement(type ?? 'div', props, ...props.children);\n};\n\nexport type TextEditorProps = {\n dictionary: Dictionary;\n keyPath: KeyPath[];\n section: DictionaryValue;\n locales: Locales[];\n};\n\nconst TranslationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}: TextEditorProps) => {\n const { locale } = useLocale();\n const { selectedLocales, availableLocales } = useLocaleSwitcherContent();\n\n const sectionContent = (section as TranslationContent<string>)[\n NodeType.Translation\n ] as Record<Locales, string>;\n\n const sectionContentKeys = Object.keys(sectionContent) as Locales[];\n\n const isFiltered = availableLocales.length > selectedLocales.length;\n\n const localesList = isFiltered\n ? selectedLocales\n : // If the translation include content in other locales, we display all of them\n [...new Set([...availableLocales, ...sectionContentKeys])];\n\n return (\n <table className=\"w-full gap-2\">\n <tbody className=\"divide-y-[1.5px]\">\n {localesList.map((translationKey) => (\n <tr\n key={translationKey}\n className=\"border-text dark:border-text-dark w-full\"\n lang={translationKey}\n >\n <td className=\"flex w-full flex-col p-2\">\n {selectedLocales.length > 1 && (\n <span className=\"w-full p-2 text-xs\">\n {getLocaleName(translationKey, locale)}\n </span>\n )}\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={[\n ...keyPath,\n { type: NodeType.Translation, key: translationKey },\n ]}\n dictionary={dictionary}\n locales={locales}\n >\n {\n (section as TranslationContent<string>)[NodeType.Translation][\n translationKey\n ] as string\n }\n </ContentEditorTextArea>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n};\n\nconst EnumerationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}) => {\n const { addEditedContent } = useEditedContent();\n const { addNewEnumeration } = useDictionary(navigationViewContent);\n\n return (\n <table className=\"w-full table-fixed gap-2\">\n <tbody className=\"divide-y-[1.5px]\">\n {Object.keys(\n (section as EnumerationContent<DictionaryValue>)[NodeType.Enumeration]\n ).map((enumKey) => (\n <tr\n key={enumKey}\n className=\"border-text dark:border-text-dark w-full\"\n >\n <td className=\"border-text dark:border-text-dark w-44 border-r-[1.5px] p-2\">\n <div className=\"flex gap-1\">\n <Button\n label=\"Remove\"\n variant=\"hoverable\"\n size=\"icon-md\"\n color=\"text\"\n Icon={X}\n className=\"w-16\"\n onClick={() =>\n addEditedContent(dictionary.key, undefined, [\n ...keyPath,\n {\n type: NodeType.Enumeration,\n key: enumKey,\n },\n ])\n }\n />\n <EnumKeyInput\n value={enumKey}\n onChange={(value) => {\n const preValueContent = (\n section as EnumerationContent<string>\n )[NodeType.Enumeration];\n const newValueContent = renameKey(\n preValueContent,\n enumKey as keyof typeof preValueContent,\n value\n );\n const newValue = {\n ...(section as EnumerationContent<string>),\n [NodeType.Enumeration]: newValueContent,\n };\n\n addEditedContent(dictionary.key, newValue, keyPath);\n }}\n />\n </div>\n </td>\n <td className=\"w-full p-2\">\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={[\n ...keyPath,\n { type: NodeType.Enumeration, key: enumKey },\n ]}\n dictionary={dictionary}\n locales={locales}\n >\n {\n (section as EnumerationContent<string>)[NodeType.Enumeration][\n enumKey as any\n ] as string\n }\n </ContentEditorTextArea>\n </td>\n </tr>\n ))}\n </tbody>\n\n <tfoot>\n <Button\n label={addNewEnumeration.label}\n variant=\"hoverable\"\n color=\"neutral\"\n textAlign=\"left\"\n onClick={() =>\n addEditedContent(\n dictionary.key,\n '',\n [...keyPath, { type: NodeType.Enumeration, key: 'unknown' }],\n false\n )\n }\n Icon={Plus}\n className=\"m-2\"\n >\n {addNewEnumeration.text}\n </Button>\n </tfoot>\n </table>\n );\n};\n\nconst ArrayTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}) => {\n const { addEditedContent } = useEditedContent();\n const { addNewElement } = useDictionary(navigationViewContent);\n\n return (\n <table className=\"w-full gap-2\">\n <tbody className=\"divide-y-[1.5px]\">\n {(section as DictionaryValue[]).map((subSection, index) => (\n <tr\n key={JSON.stringify(subSection)}\n className=\"border-text dark:border-text-dark w-full\"\n >\n <td className=\"p-2\">{index}</td>\n <td className=\"w-full p-2\">\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Array,\n key: index,\n },\n ]}\n dictionary={dictionary}\n locales={locales}\n >\n {subSection as string}\n </ContentEditorTextArea>\n </td>\n </tr>\n ))}\n </tbody>\n <tfoot>\n <Button\n label={addNewElement.label}\n variant=\"hoverable\"\n color=\"neutral\"\n textAlign=\"left\"\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeType.Array,\n key: (section as DictionaryValue[]).length,\n },\n ];\n addEditedContent(dictionary.key, '', newKeyPath, false);\n }}\n Icon={Plus}\n >\n {addNewElement.text}\n </Button>\n </tfoot>\n </table>\n );\n};\n\nexport const TextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n locales,\n}) => {\n const { tsxNotEditable } = useDictionary(navigationViewContent);\n const nodeType = getSectionType(section);\n const isEditableSection = getIsEditableSection(section);\n\n if (!isEditableSection) return <></>;\n\n if (typeof section === 'object') {\n if (nodeType === NodeType.ReactNode) {\n return (\n <>\n {createReactElement(section as unknown as ReactElement)}\n <span className=\"text-neutral dark:text-neutral-dark text-xs\">\n {tsxNotEditable}\n </span>\n </>\n );\n }\n\n if (nodeType === NodeType.Translation) {\n return (\n <TranslationTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n locales={locales}\n />\n );\n }\n\n if (nodeType === NodeType.Enumeration) {\n return (\n <EnumerationTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n locales={locales}\n />\n );\n }\n\n if (nodeType === NodeType.Array) {\n return (\n <ArrayTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n locales={locales}\n />\n );\n }\n }\n\n if (nodeType === NodeType.Text) {\n return (\n <div className=\"border-text dark:border-text-dark w-full border-t-[1.5px] p-2\">\n <ContentEditorTextArea\n variant=\"default\"\n aria-label=\"Edit field\"\n keyPath={keyPath}\n dictionary={dictionary}\n locales={locales}\n >\n {section as string}\n </ContentEditorTextArea>\n </div>\n );\n }\n\n return <>Error loading section</>;\n};\n"],"names":["jsx","ContentEditorTextAreaBase","element","jsxs","Fragment"],"mappings":"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"}
|