@alpaca-editor/core 1.0.0 → 1.0.3764-editor-mono
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/dist/client-components/api.js +6 -0
- package/dist/client-components/index.js +36 -0
- package/dist/components/ActionButton.js +9 -0
- package/dist/components/Error.js +28 -0
- package/dist/config/config.js +654 -0
- package/dist/config/types.js +2 -0
- package/dist/editor/ComponentInfo.js +31 -0
- package/dist/editor/ConfirmationDialog.js +32 -0
- package/dist/editor/ContentTree.js +406 -0
- package/dist/editor/ContextMenu.js +117 -0
- package/dist/editor/Editor.js +55 -0
- package/dist/editor/EditorWarning.js +13 -0
- package/dist/editor/EditorWarnings.js +24 -0
- package/dist/editor/FieldEditorPopup.js +24 -0
- package/dist/editor/FieldHistory.js +40 -0
- package/dist/editor/FieldList.js +63 -0
- package/dist/editor/FieldListField.js +164 -0
- package/dist/editor/FieldListFieldWithFallbacks.js +114 -0
- package/dist/editor/FloatingToolbar.js +92 -0
- package/dist/editor/ImageEditor.js +55 -0
- package/dist/editor/InsertMenu.js +164 -0
- package/dist/editor/ItemInfo.js +30 -0
- package/dist/editor/LinkEditorDialog.js +89 -0
- package/dist/editor/MainLayout.js +46 -0
- package/dist/editor/NewEditorClient.js +9 -0
- package/dist/editor/PictureCropper.js +332 -0
- package/dist/editor/PictureEditor.js +104 -0
- package/dist/editor/PictureEditorDialog.js +194 -0
- package/dist/editor/ScrollingContentTree.js +30 -0
- package/dist/editor/Terminal.js +109 -0
- package/dist/editor/Titlebar.js +11 -0
- package/dist/editor/ai/AiPopup.js +25 -0
- package/dist/editor/ai/AiResponseMessage.js +24 -0
- package/dist/editor/ai/AiTerminal.js +241 -0
- package/dist/editor/ai/AiToolCall.js +18 -0
- package/dist/editor/ai/EditorAiTerminal.js +9 -0
- package/dist/editor/ai/editorAiContext.js +14 -0
- package/dist/editor/client/DialogContext.js +29 -0
- package/dist/editor/client/EditorClient.js +1336 -0
- package/dist/editor/client/GenericDialog.js +27 -0
- package/dist/editor/client/editContext.js +59 -0
- package/dist/editor/client/helpers.js +31 -0
- package/dist/editor/client/itemsRepository.js +255 -0
- package/dist/editor/client/operations.js +398 -0
- package/dist/editor/client/pageModelBuilder.js +129 -0
- package/dist/editor/commands/commands.js +2 -0
- package/dist/editor/commands/componentCommands.js +277 -0
- package/dist/editor/commands/createVersionCommand.js +26 -0
- package/dist/editor/commands/deleteVersionCommand.js +55 -0
- package/dist/editor/commands/itemCommands.js +134 -0
- package/dist/editor/commands/localizeItem/LocalizeItemDialog.js +94 -0
- package/dist/editor/commands/undo.js +32 -0
- package/dist/editor/component-designer/ComponentDesigner.js +58 -0
- package/dist/editor/component-designer/ComponentDesignerAiTerminal.js +9 -0
- package/dist/editor/component-designer/ComponentDesignerMenu.js +67 -0
- package/dist/editor/component-designer/ComponentEditor.js +59 -0
- package/dist/editor/component-designer/ComponentRenderingCodeEditor.js +16 -0
- package/dist/editor/component-designer/ComponentRenderingEditor.js +71 -0
- package/dist/editor/component-designer/ComponentsDropdown.js +22 -0
- package/dist/editor/component-designer/PlaceholdersEditor.js +70 -0
- package/dist/editor/component-designer/RenderingsDropdown.js +25 -0
- package/dist/editor/component-designer/TemplateEditor.js +144 -0
- package/dist/editor/component-designer/aiContext.js +18 -0
- package/dist/editor/componentTreeHelper.js +97 -0
- package/dist/editor/control-center/ControlCenterMenu.js +59 -0
- package/dist/editor/control-center/IndexOverview.js +27 -0
- package/dist/editor/control-center/IndexSettings.js +106 -0
- package/dist/editor/control-center/Status.js +7 -0
- package/dist/editor/editor-warnings/ItemLocked.js +40 -0
- package/dist/editor/editor-warnings/NoLanguageWriteAccess.js +16 -0
- package/dist/editor/editor-warnings/NoWorkflowWriteAccess.js +16 -0
- package/dist/editor/editor-warnings/NoWriteAccess.js +14 -0
- package/dist/editor/editor-warnings/ValidationErrors.js +27 -0
- package/dist/editor/field-types/AttachmentEditor.js +7 -0
- package/dist/editor/field-types/CheckboxEditor.js +32 -0
- package/dist/editor/field-types/DropLinkEditor.js +51 -0
- package/dist/editor/field-types/DropListEditor.js +58 -0
- package/dist/editor/field-types/ImageFieldEditor.js +36 -0
- package/dist/editor/field-types/InternalLinkFieldEditor.js +64 -0
- package/dist/editor/field-types/LinkFieldEditor.js +58 -0
- package/dist/editor/field-types/MultiLineText.js +35 -0
- package/dist/editor/field-types/PictureFieldEditor.js +59 -0
- package/dist/editor/field-types/RawEditor.js +33 -0
- package/dist/editor/field-types/ReactQuill.js +366 -0
- package/dist/editor/field-types/RichTextEditor.js +46 -0
- package/dist/editor/field-types/RichTextEditorComponent.js +72 -0
- package/dist/editor/field-types/SingleLineText.js +92 -0
- package/dist/editor/field-types/TreeListEditor.js +137 -0
- package/dist/editor/fieldTypes.js +2 -0
- package/dist/editor/media-selector/AiImageSearch.js +110 -0
- package/dist/editor/media-selector/AiImageSearchPrompt.js +58 -0
- package/dist/editor/media-selector/MediaSelector.js +11 -0
- package/dist/editor/media-selector/Preview.js +9 -0
- package/dist/editor/media-selector/Thumbnails.js +11 -0
- package/dist/editor/media-selector/TreeSelector.js +171 -0
- package/dist/editor/media-selector/UploadZone.js +80 -0
- package/dist/editor/menubar/ActionsMenu.js +33 -0
- package/dist/editor/menubar/ActiveUsers.js +13 -0
- package/dist/editor/menubar/ApproveAndPublish.js +13 -0
- package/dist/editor/menubar/BrowseHistory.js +14 -0
- package/dist/editor/menubar/ItemLanguageVersion.js +36 -0
- package/dist/editor/menubar/LanguageSelector.js +33 -0
- package/dist/editor/menubar/Menu.js +65 -0
- package/dist/editor/menubar/NavButtons.js +43 -0
- package/dist/editor/menubar/PageSelector.js +50 -0
- package/dist/editor/menubar/PageViewerControls.js +37 -0
- package/dist/editor/menubar/Separator.js +8 -0
- package/dist/editor/menubar/SiteInfo.js +26 -0
- package/dist/editor/menubar/User.js +18 -0
- package/dist/editor/menubar/VersionSelector.js +49 -0
- package/dist/editor/page-editor-chrome/CommentHighlighting.js +214 -0
- package/dist/editor/page-editor-chrome/CommentHighlightings.js +17 -0
- package/dist/editor/page-editor-chrome/FieldActionIndicator.js +27 -0
- package/dist/editor/page-editor-chrome/FieldActionIndicators.js +15 -0
- package/dist/editor/page-editor-chrome/FieldEditedIndicator.js +27 -0
- package/dist/editor/page-editor-chrome/FieldEditedIndicators.js +15 -0
- package/dist/editor/page-editor-chrome/FrameMenu.js +178 -0
- package/dist/editor/page-editor-chrome/FrameMenus.js +24 -0
- package/dist/editor/page-editor-chrome/InlineEditor.js +101 -0
- package/dist/editor/page-editor-chrome/LockedFieldIndicator.js +35 -0
- package/dist/editor/page-editor-chrome/NoLayout.js +21 -0
- package/dist/editor/page-editor-chrome/PageEditorChrome.js +65 -0
- package/dist/editor/page-editor-chrome/PictureEditorOverlay.js +109 -0
- package/dist/editor/page-editor-chrome/PlaceholderDropZone.js +82 -0
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +147 -0
- package/dist/editor/page-viewer/DeviceToolbar.js +21 -0
- package/dist/editor/page-viewer/EditorForm.js +130 -0
- package/dist/editor/page-viewer/MiniMap.js +257 -0
- package/dist/editor/page-viewer/PageViewer.js +64 -0
- package/dist/editor/page-viewer/PageViewerFrame.js +696 -0
- package/dist/editor/page-viewer/pageViewContext.js +117 -0
- package/dist/editor/pageModel.js +2 -0
- package/dist/editor/picture-shared.js +28 -0
- package/dist/editor/reviews/Comment.js +112 -0
- package/dist/editor/reviews/Comments.js +24 -0
- package/dist/editor/reviews/PreviewInfo.js +13 -0
- package/dist/editor/reviews/Reviews.js +165 -0
- package/dist/editor/reviews/reviewCommands.js +44 -0
- package/dist/editor/reviews/useReviews.js +48 -0
- package/dist/editor/services/aiService.js +99 -0
- package/dist/editor/services/componentDesignerService.js +79 -0
- package/dist/editor/services/contentService.js +104 -0
- package/dist/editor/services/editService.js +322 -0
- package/dist/editor/services/indexService.js +25 -0
- package/dist/editor/services/reviewsService.js +43 -0
- package/dist/editor/services/serviceHelper.js +67 -0
- package/dist/editor/services/systemService.js +7 -0
- package/dist/editor/services/translationService.js +15 -0
- package/dist/editor/services-server/api.js +119 -0
- package/dist/editor/services-server/graphQL.js +56 -0
- package/dist/editor/sidebar/ComponentPalette.js +55 -0
- package/dist/editor/sidebar/ComponentTree.js +362 -0
- package/dist/editor/sidebar/Debug.js +60 -0
- package/dist/editor/sidebar/DictionaryEditor.js +160 -0
- package/dist/editor/sidebar/EditHistory.js +74 -0
- package/dist/editor/sidebar/GraphQL.js +115 -0
- package/dist/editor/sidebar/Insert.js +24 -0
- package/dist/editor/sidebar/MainContentTree.js +52 -0
- package/dist/editor/sidebar/Performance.js +34 -0
- package/dist/editor/sidebar/Sessions.js +31 -0
- package/dist/editor/sidebar/Sidebar.js +15 -0
- package/dist/editor/sidebar/SidebarView.js +76 -0
- package/dist/editor/sidebar/Translations.js +160 -0
- package/dist/editor/sidebar/Validation.js +52 -0
- package/dist/editor/sidebar/ViewSelector.js +15 -0
- package/dist/editor/sidebar/Workbox.js +80 -0
- package/dist/editor/ui/CenteredMessage.js +7 -0
- package/dist/editor/ui/CopyToClipboardButton.js +17 -0
- package/dist/editor/ui/DialogButtons.js +7 -0
- package/dist/editor/ui/Icons.js +75 -0
- package/dist/editor/ui/ItemNameDialog.js +45 -0
- package/dist/editor/ui/ItemNameDialogNew.js +61 -0
- package/dist/editor/ui/ItemSearch.js +93 -0
- package/dist/editor/ui/PerfectTree.js +223 -0
- package/dist/editor/ui/Section.js +12 -0
- package/dist/editor/ui/SimpleIconButton.js +11 -0
- package/dist/editor/ui/SimpleMenu.js +9 -0
- package/dist/editor/ui/SimpleTable.js +11 -0
- package/dist/editor/ui/SimpleTabs.js +21 -0
- package/dist/editor/ui/SimpleToolbar.js +7 -0
- package/dist/editor/ui/Spinner.js +7 -0
- package/dist/editor/ui/Splitter.js +187 -0
- package/dist/editor/ui/StackedPanels.js +69 -0
- package/dist/editor/ui/Toolbar.js +7 -0
- package/dist/editor/utils/id-helper.js +7 -0
- package/dist/editor/utils/insertOptions.js +45 -0
- package/dist/editor/utils/itemutils.js +25 -0
- package/dist/editor/utils/useMemoDebug.js +20 -0
- package/dist/editor/utils.js +328 -0
- package/dist/editor/views/CompareView.js +147 -0
- package/dist/editor/views/EditView.js +17 -0
- package/dist/editor/views/ItemEditor.js +24 -0
- package/dist/editor/views/SingleEditView.js +25 -0
- package/dist/index.js +22 -0
- package/dist/page-wizard/PageWizard.js +62 -0
- package/dist/page-wizard/SelectWizard.js +43 -0
- package/dist/page-wizard/WizardSteps.js +71 -0
- package/dist/page-wizard/service.js +26 -0
- package/dist/page-wizard/startPageWizardCommand.js +23 -0
- package/dist/page-wizard/steps/BuildPageStep.js +138 -0
- package/dist/page-wizard/steps/CollectStep.js +124 -0
- package/dist/page-wizard/steps/ComponentTypesSelector.js +211 -0
- package/dist/page-wizard/steps/Components.js +94 -0
- package/dist/page-wizard/steps/CreatePage.js +142 -0
- package/dist/page-wizard/steps/CreatePageAndLayoutStep.js +230 -0
- package/dist/page-wizard/steps/EditButton.js +7 -0
- package/dist/page-wizard/steps/FieldEditor.js +30 -0
- package/dist/page-wizard/steps/Generate.js +11 -0
- package/dist/page-wizard/steps/ImagesStep.js +159 -0
- package/dist/page-wizard/steps/LayoutStep.js +120 -0
- package/dist/page-wizard/steps/SelectStep.js +150 -0
- package/dist/page-wizard/steps/schema.js +140 -0
- package/dist/page-wizard/steps/usePageCreator.js +194 -0
- package/dist/splash-screen/NewPage.js +131 -0
- package/dist/splash-screen/SectionHeadline.js +9 -0
- package/dist/splash-screen/SplashScreen.js +81 -0
- package/dist/tour/Tour.js +321 -0
- package/dist/tour/default-tour.js +231 -0
- package/dist/tour/preview-tour.js +93 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/types.js +2 -0
- package/package.json +1 -1
- package/src/editor/sidebar/ComponentTree.tsx +512 -512
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StackedPanels = StackedPanels;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
require("allotment/dist/style.css");
|
|
6
|
+
const allotment_1 = require("allotment");
|
|
7
|
+
const react_1 = require("react");
|
|
8
|
+
const utils_1 = require("primereact/utils");
|
|
9
|
+
function StackedPanels({ panels }) {
|
|
10
|
+
const splitter = (0, react_1.useRef)(null);
|
|
11
|
+
const [sizes, setSizes] = (0, react_1.useState)([]);
|
|
12
|
+
const [preferredSizes, setPreferredSizes] = (0, react_1.useState)(undefined);
|
|
13
|
+
const [panelsExpanded, setPanelsExpanded] = (0, react_1.useState)([]);
|
|
14
|
+
const [sizeToSet, setSizeToSet] = (0, react_1.useState)();
|
|
15
|
+
const panelHeaderSize = 30;
|
|
16
|
+
const toggle = (panelIndex) => {
|
|
17
|
+
const newSize = panelsExpanded[panelIndex]
|
|
18
|
+
? panelHeaderSize
|
|
19
|
+
: (preferredSizes || sizes)[panelIndex];
|
|
20
|
+
resizePanel(panelIndex, newSize);
|
|
21
|
+
setPanelsExpanded((x) => {
|
|
22
|
+
const newState = [...x];
|
|
23
|
+
newState[panelIndex] = !newState[panelIndex];
|
|
24
|
+
return newState;
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
(0, react_1.useEffect)(() => {
|
|
28
|
+
setPanelsExpanded(panels.map(() => true));
|
|
29
|
+
setPreferredSizes(() => panels.map((x) => x.initialSize));
|
|
30
|
+
}, [panels]);
|
|
31
|
+
const resizePanel = (panelIndex, newSize) => {
|
|
32
|
+
const totalSize = sizes.reduce((a, b) => a + b, 0);
|
|
33
|
+
const totalOther = totalSize - sizes[panelIndex];
|
|
34
|
+
const tmpSizes = [...sizes];
|
|
35
|
+
tmpSizes[panelIndex] = newSize;
|
|
36
|
+
const percentages = tmpSizes.map((x) => x / totalOther);
|
|
37
|
+
percentages[panelIndex] = 0;
|
|
38
|
+
const remaining = totalSize - newSize;
|
|
39
|
+
const newSizes = percentages.map((x) => x * remaining);
|
|
40
|
+
newSizes[panelIndex] = newSize;
|
|
41
|
+
setSizes(newSizes);
|
|
42
|
+
setSizeToSet(newSizes);
|
|
43
|
+
};
|
|
44
|
+
(0, react_1.useEffect)(() => {
|
|
45
|
+
if (sizeToSet)
|
|
46
|
+
splitter.current?.resize(sizeToSet);
|
|
47
|
+
}, [sizeToSet]);
|
|
48
|
+
const getHeader = (panel, index) => {
|
|
49
|
+
if (panel.header)
|
|
50
|
+
return panel.header({ panel, index });
|
|
51
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: (0, utils_1.classNames)("p-1.5 bg-gray-50 uppercase text-gray-500 text-xs flex justify items-center cursor-pointer", panelsExpanded[index] ? "border-b" : ""), onClick: () => toggle(index), children: [panel.icon &&
|
|
52
|
+
(typeof panel.icon === "string" ? ((0, jsx_runtime_1.jsx)("i", { className: (0, utils_1.classNames)(panel.icon, "pi mr-1.5") })) : ((0, jsx_runtime_1.jsx)("div", { className: "w-4 h-4 mr-1.5", children: panel.icon }))), (0, jsx_runtime_1.jsx)("div", { className: "mr-auto", children: panel.title }), (0, jsx_runtime_1.jsx)("i", { className: (0, utils_1.classNames)(panelsExpanded[index] ? "pi-chevron-up" : "pi-chevron-down", "pi text-sm") })] }));
|
|
53
|
+
};
|
|
54
|
+
const initalSizes = panels.map((x) => x.initialSize);
|
|
55
|
+
return ((0, jsx_runtime_1.jsx)(allotment_1.Allotment, { vertical: true, snap: true, ref: splitter, defaultSizes: initalSizes, onChange: (s) => {
|
|
56
|
+
if (sizes.join(",") != s.join(","))
|
|
57
|
+
setSizes(s);
|
|
58
|
+
const newPreferred = [...(preferredSizes || s)];
|
|
59
|
+
s.forEach((x, i) => {
|
|
60
|
+
if (x > panelHeaderSize)
|
|
61
|
+
newPreferred[i] = x;
|
|
62
|
+
});
|
|
63
|
+
setPreferredSizes(newPreferred);
|
|
64
|
+
}, children: panels.map((panel, index) => ((0, jsx_runtime_1.jsx)(allotment_1.Allotment.Pane, {
|
|
65
|
+
// preferredSize={(preferredSizes || initalSizes)[index] + "%"}
|
|
66
|
+
maxSize: panelsExpanded.length <= index || panelsExpanded[index]
|
|
67
|
+
? 10000
|
|
68
|
+
: panelHeaderSize, children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col h-full", children: [getHeader(panel, index), panelsExpanded[index] && ((0, jsx_runtime_1.jsx)("div", { className: "overflow-hidden relative flex-1", children: (0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.classNames)("inset-0 absolute", panel.noOverflow ? "" : "overflow-y-auto"), children: panel.content }) }))] }) }, index))) }));
|
|
69
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Toolbar = Toolbar;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
function Toolbar({ children }) {
|
|
6
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "bg-gray-50 flex gap-1 p-0.5 border-b items-center", children: children }));
|
|
7
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getInsertOptionsForCurrentSelection = getInsertOptionsForCurrentSelection;
|
|
4
|
+
const componentTreeHelper_1 = require("../componentTreeHelper");
|
|
5
|
+
function getInsertOptionsForCurrentSelection(editContext) {
|
|
6
|
+
const page = editContext.page;
|
|
7
|
+
if (!page)
|
|
8
|
+
return [];
|
|
9
|
+
const insertingPlaceholderKeys = [editContext.selectedForInsertion]
|
|
10
|
+
.map((x) => (0, componentTreeHelper_1.getComponentById)(x, editContext.page))
|
|
11
|
+
.filter((x) => x)
|
|
12
|
+
.reduce((a, x) => a.concat(x.placeholders?.map((y) => y.key) || []), []);
|
|
13
|
+
const selectedPlaceholderKeys = [
|
|
14
|
+
//...selection.filter((x) => x.indexOf("_") > 0),
|
|
15
|
+
...insertingPlaceholderKeys,
|
|
16
|
+
];
|
|
17
|
+
function collectInsertOptions(page, placeholderKeys) {
|
|
18
|
+
const insertOptionsMap = new Map();
|
|
19
|
+
function traverse(placeholders) {
|
|
20
|
+
for (const placeholder of placeholders) {
|
|
21
|
+
if (placeholder &&
|
|
22
|
+
(placeholderKeys.length === 0 ||
|
|
23
|
+
placeholderKeys.includes(placeholder.key))) {
|
|
24
|
+
for (const option of placeholder.insertOptions) {
|
|
25
|
+
insertOptionsMap.set(option.typeId, option);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
for (const component of placeholder.components) {
|
|
29
|
+
if (component.placeholders)
|
|
30
|
+
traverse(component.placeholders);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
traverse(page.rootComponent.placeholders);
|
|
35
|
+
// Convert the map back into an array of objects
|
|
36
|
+
const insertOptionsArray = Array.from(insertOptionsMap.values());
|
|
37
|
+
insertOptionsArray.sort((a, b) => a.name.localeCompare(b.name));
|
|
38
|
+
return insertOptionsArray;
|
|
39
|
+
}
|
|
40
|
+
const currentInsertOptions = page
|
|
41
|
+
? collectInsertOptions(page, selectedPlaceholderKeys)
|
|
42
|
+
: [];
|
|
43
|
+
// console.log(currentInsertOptions, selectedPlaceholderKeys, page);
|
|
44
|
+
return currentInsertOptions;
|
|
45
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.confirmCreateVersion = void 0;
|
|
4
|
+
const createVersionCommand_1 = require("../commands/createVersionCommand");
|
|
5
|
+
const confirmCreateVersion = (editContext, language) => {
|
|
6
|
+
editContext.confirm({
|
|
7
|
+
message: "This page has no version in language " +
|
|
8
|
+
language.name +
|
|
9
|
+
" (" +
|
|
10
|
+
language.languageCode +
|
|
11
|
+
"). Do you want to create a new version?",
|
|
12
|
+
header: "Create Language Version?",
|
|
13
|
+
icon: "pi pi-exclamation-triangle",
|
|
14
|
+
acceptLabel: "Yes, create version",
|
|
15
|
+
rejectLabel: "No",
|
|
16
|
+
accept: async () => {
|
|
17
|
+
await editContext?.executeCommand({
|
|
18
|
+
command: (0, createVersionCommand_1.getCreateAndSwitchToNewVersionCommand)({
|
|
19
|
+
language: language.languageCode,
|
|
20
|
+
}),
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
exports.confirmCreateVersion = confirmCreateVersion;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useMemoWithDebug = useMemoWithDebug;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
// Generic type for the return value of the memoized factory
|
|
6
|
+
function useMemoWithDebug(factory, dependencies) {
|
|
7
|
+
const previousDependenciesRef = (0, react_1.useRef)([]);
|
|
8
|
+
const hasChanged = dependencies.some((dep, index) => {
|
|
9
|
+
return dep !== previousDependenciesRef.current[index];
|
|
10
|
+
});
|
|
11
|
+
if (hasChanged) {
|
|
12
|
+
dependencies.forEach((dep, index) => {
|
|
13
|
+
if (dep !== previousDependenciesRef.current[index]) {
|
|
14
|
+
console.log(`Dependency at index ${index} changed:`, "\nPrevious:", previousDependenciesRef.current[index], "\nCurrent:", dep);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
previousDependenciesRef.current = dependencies;
|
|
19
|
+
return (0, react_1.useMemo)(factory, dependencies);
|
|
20
|
+
}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAbsolutePosition = exports.useLocalStorage = void 0;
|
|
4
|
+
exports.useEventListenerExt = useEventListenerExt;
|
|
5
|
+
exports.isFieldActionExecuting = isFieldActionExecuting;
|
|
6
|
+
exports.getItemDescriptor = getItemDescriptor;
|
|
7
|
+
exports.getAbsoluteIconUrl = getAbsoluteIconUrl;
|
|
8
|
+
exports.findParentWithAttribute = findParentWithAttribute;
|
|
9
|
+
exports.parsePlaceholderKey = parsePlaceholderKey;
|
|
10
|
+
exports.hasFieldLock = hasFieldLock;
|
|
11
|
+
exports.getSessionWithFieldLock = getSessionWithFieldLock;
|
|
12
|
+
exports.getFieldDescriptorFromElement = getFieldDescriptorFromElement;
|
|
13
|
+
exports.findNearestComponentId = findNearestComponentId;
|
|
14
|
+
exports.findFieldElement = findFieldElement;
|
|
15
|
+
exports.findComponentRect = findComponentRect;
|
|
16
|
+
exports.findParentComponentId = findParentComponentId;
|
|
17
|
+
exports.normalizeGuid = normalizeGuid;
|
|
18
|
+
exports.formatDate = formatDate;
|
|
19
|
+
exports.findClosestFieldElement = findClosestFieldElement;
|
|
20
|
+
const react_1 = require("react");
|
|
21
|
+
const react_2 = require("react");
|
|
22
|
+
// Hook
|
|
23
|
+
function useEventListenerExt(eventName, handler, element, capture = false) {
|
|
24
|
+
// Create a ref that stores handler
|
|
25
|
+
const savedHandler = (0, react_2.useRef)(undefined);
|
|
26
|
+
// Update ref.current value if handler changes.
|
|
27
|
+
// This allows our effect below to always get latest handler ...
|
|
28
|
+
// ... without us needing to pass it in effect deps array ...
|
|
29
|
+
// ... and potentially cause effect to re-run every render.
|
|
30
|
+
(0, react_2.useEffect)(() => {
|
|
31
|
+
savedHandler.current = handler;
|
|
32
|
+
}, [handler]);
|
|
33
|
+
(0, react_2.useEffect)(() => {
|
|
34
|
+
// Make sure element supports addEventListener
|
|
35
|
+
// On
|
|
36
|
+
const isSupported = element && element.addEventListener;
|
|
37
|
+
if (!isSupported)
|
|
38
|
+
return;
|
|
39
|
+
// Create event listener that calls handler function stored in ref
|
|
40
|
+
const eventListener = (event) => savedHandler.current(event);
|
|
41
|
+
// Add event listener
|
|
42
|
+
element.addEventListener(eventName, eventListener, { capture: capture });
|
|
43
|
+
// Remove event listener on cleanup
|
|
44
|
+
return () => {
|
|
45
|
+
element.removeEventListener(eventName, eventListener);
|
|
46
|
+
};
|
|
47
|
+
}, [eventName, element] // Re-run if eventName or element changes
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
const useLocalStorage = (storageKey, fallbackState) => {
|
|
51
|
+
const [value, setValue] = (0, react_1.useState)(JSON.parse(typeof window !== "undefined"
|
|
52
|
+
? localStorage.getItem(storageKey) ?? JSON.stringify(fallbackState)
|
|
53
|
+
: JSON.stringify(fallbackState)));
|
|
54
|
+
(0, react_2.useEffect)(() => {
|
|
55
|
+
if (typeof window !== "undefined")
|
|
56
|
+
localStorage.setItem(storageKey, JSON.stringify(value));
|
|
57
|
+
}, [value, storageKey]);
|
|
58
|
+
return [value, setValue];
|
|
59
|
+
};
|
|
60
|
+
exports.useLocalStorage = useLocalStorage;
|
|
61
|
+
function isFieldActionExecuting(field, editContext) {
|
|
62
|
+
const fieldItem = field.descriptor.item;
|
|
63
|
+
if (!fieldItem) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
var action = editContext.activeFieldActions.find((x) => x.field.fieldId == field.id &&
|
|
67
|
+
x.field.item?.id == fieldItem.id &&
|
|
68
|
+
x.field.item?.language == fieldItem.language &&
|
|
69
|
+
x.field.item?.version == fieldItem.version);
|
|
70
|
+
return action?.state == "running";
|
|
71
|
+
}
|
|
72
|
+
function getItemDescriptor(item) {
|
|
73
|
+
if (!item)
|
|
74
|
+
throw new Error("Item is null");
|
|
75
|
+
if ("descriptor" in item) {
|
|
76
|
+
return item.descriptor;
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
id: item.id,
|
|
80
|
+
language: item.language,
|
|
81
|
+
version: item.version,
|
|
82
|
+
name: item.name,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function getAbsoluteIconUrl(url) {
|
|
86
|
+
//return configuration.services.editorService.baseUrl + url;
|
|
87
|
+
return url;
|
|
88
|
+
}
|
|
89
|
+
function findParentWithAttribute(element, attr) {
|
|
90
|
+
while (element && element !== document.documentElement) {
|
|
91
|
+
if (element.hasAttribute(attr)) {
|
|
92
|
+
return element;
|
|
93
|
+
}
|
|
94
|
+
element = element.parentElement;
|
|
95
|
+
}
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
function parsePlaceholderKey(key) {
|
|
99
|
+
const placeholderKeyComponents = key.split("_");
|
|
100
|
+
const placeholderName = placeholderKeyComponents.length === 1
|
|
101
|
+
? placeholderKeyComponents[0]
|
|
102
|
+
: placeholderKeyComponents[1];
|
|
103
|
+
const parentId = placeholderKeyComponents.length === 1
|
|
104
|
+
? undefined
|
|
105
|
+
: placeholderKeyComponents[0];
|
|
106
|
+
return {
|
|
107
|
+
name: placeholderName,
|
|
108
|
+
componentId: parentId,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// export function getFieldRawValue(field: Field, editContext: EditContextType) {
|
|
112
|
+
// return (
|
|
113
|
+
// getModifiedField(field.descriptor, editContext)?.rawValue ??
|
|
114
|
+
// field.rawValue ??
|
|
115
|
+
// field.value
|
|
116
|
+
// );
|
|
117
|
+
// }
|
|
118
|
+
// export function getFieldValue(field: Field, editContext: EditContextType) {
|
|
119
|
+
// return getModifiedField(field.descriptor, editContext)?.value ?? field.value;
|
|
120
|
+
// }
|
|
121
|
+
// export function getModifiedField(
|
|
122
|
+
// field: FieldDescriptor,
|
|
123
|
+
// editContext: EditContextType
|
|
124
|
+
// ) {
|
|
125
|
+
// const modifiedField = editContext.modifiedFields.find(
|
|
126
|
+
// (x) =>
|
|
127
|
+
// x.field.fieldId === field.fieldId &&
|
|
128
|
+
// x.field.item.id === field.item.id &&
|
|
129
|
+
// x.field.item.language === field.item.language &&
|
|
130
|
+
// x.field.item.version === field.item.version
|
|
131
|
+
// );
|
|
132
|
+
// return modifiedField;
|
|
133
|
+
// }
|
|
134
|
+
// export function getModifiedFieldValue(
|
|
135
|
+
// field: FieldDescriptor,
|
|
136
|
+
// editContext: EditContextType
|
|
137
|
+
// ) {
|
|
138
|
+
// return getModifiedField(field, editContext)?.value;
|
|
139
|
+
// }
|
|
140
|
+
// export function setModifiedFieldValue(
|
|
141
|
+
// field: FieldDescriptor,
|
|
142
|
+
// value: string,
|
|
143
|
+
// editContext: EditContextType
|
|
144
|
+
// ) {
|
|
145
|
+
// const modifiedValue = editContext.modifiedFields.find(
|
|
146
|
+
// (x) =>
|
|
147
|
+
// x.field.fieldId === field.fieldId &&
|
|
148
|
+
// x.field.item.id === field.item.id &&
|
|
149
|
+
// x.field.item.language === field.item.language &&
|
|
150
|
+
// x.field.item.version === field.item.version
|
|
151
|
+
// );
|
|
152
|
+
// if (modifiedValue) {
|
|
153
|
+
// modifiedValue.value = value;
|
|
154
|
+
// } else {
|
|
155
|
+
// editContext.modifiedFields.push({
|
|
156
|
+
// field: field,
|
|
157
|
+
// value: value,
|
|
158
|
+
// });
|
|
159
|
+
// }
|
|
160
|
+
// editContext.setModifiedFields([...editContext.modifiedFields]);
|
|
161
|
+
// }
|
|
162
|
+
function hasFieldLock(field, editContext) {
|
|
163
|
+
if (!editContext.lockedField) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
return (editContext.lockedField.fieldId === field.fieldId &&
|
|
167
|
+
editContext.lockedField.item.id === field.item.id &&
|
|
168
|
+
editContext.lockedField.item.language === field.item.language &&
|
|
169
|
+
editContext.lockedField.item.version === field.item.version);
|
|
170
|
+
}
|
|
171
|
+
function getSessionWithFieldLock(field, editContext) {
|
|
172
|
+
return editContext.activeSessions.find((s) => s.fieldLock?.fieldId === field.fieldId &&
|
|
173
|
+
s.fieldLock?.fieldId === field.fieldId &&
|
|
174
|
+
s.fieldLock?.item.id === field.item.id &&
|
|
175
|
+
s.fieldLock?.item.language === field.item.language &&
|
|
176
|
+
s.fieldLock?.item.version === field.item.version);
|
|
177
|
+
}
|
|
178
|
+
function getFieldDescriptorFromElement(element) {
|
|
179
|
+
return {
|
|
180
|
+
item: {
|
|
181
|
+
id: element.getAttribute("data-itemid"),
|
|
182
|
+
version: parseInt(element.getAttribute("data-version")),
|
|
183
|
+
language: element.getAttribute("data-language"),
|
|
184
|
+
},
|
|
185
|
+
fieldId: element.getAttribute("data-fieldid"),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function findNearestComponentId(startElement) {
|
|
189
|
+
let element = startElement;
|
|
190
|
+
while (element) {
|
|
191
|
+
if (element.hasAttribute("data-component-start")) {
|
|
192
|
+
return element.getAttribute("data-component-start") ?? undefined;
|
|
193
|
+
}
|
|
194
|
+
const prev = element.previousElementSibling;
|
|
195
|
+
if (!prev) {
|
|
196
|
+
element = element.parentElement;
|
|
197
|
+
}
|
|
198
|
+
else
|
|
199
|
+
element = prev;
|
|
200
|
+
}
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
function findFieldElement(iframe, fieldDescriptor) {
|
|
204
|
+
if (!iframe.contentWindow?.document.body)
|
|
205
|
+
return undefined;
|
|
206
|
+
const fieldElement = iframe.contentWindow?.document.body.querySelector("[data-itemid='" +
|
|
207
|
+
fieldDescriptor.item.id +
|
|
208
|
+
"'][data-language='" +
|
|
209
|
+
fieldDescriptor.item.language +
|
|
210
|
+
"'][data-version='" +
|
|
211
|
+
fieldDescriptor.item.version +
|
|
212
|
+
"'][data-fieldid='" +
|
|
213
|
+
fieldDescriptor.fieldId +
|
|
214
|
+
"']");
|
|
215
|
+
return fieldElement;
|
|
216
|
+
}
|
|
217
|
+
function findComponentRect(iframe, componentId, takeScrollPositionIntoAccount = false) {
|
|
218
|
+
if (!iframe.contentWindow?.document.body)
|
|
219
|
+
return undefined;
|
|
220
|
+
const componentStart = iframe.contentWindow?.document.body.querySelector("[data-component-start='" + componentId + "']");
|
|
221
|
+
const componentEnd = iframe?.contentWindow?.document.body.querySelector("[data-component-end='" + componentId + "']");
|
|
222
|
+
if (!componentStart || !componentEnd) {
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
let startElement = componentStart.nextElementSibling;
|
|
226
|
+
while (startElement && startElement.tagName === "SCRIPT") {
|
|
227
|
+
startElement = startElement.nextElementSibling;
|
|
228
|
+
}
|
|
229
|
+
if (!startElement) {
|
|
230
|
+
console.error("No start element found for component " + componentId);
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
const startRect = takeScrollPositionIntoAccount
|
|
234
|
+
? (0, exports.getAbsolutePosition)(startElement, iframe)
|
|
235
|
+
: startElement.getBoundingClientRect();
|
|
236
|
+
let endElement = componentEnd.previousElementSibling;
|
|
237
|
+
while (endElement && endElement.tagName === "SCRIPT") {
|
|
238
|
+
endElement = endElement.previousElementSibling;
|
|
239
|
+
}
|
|
240
|
+
if (!endElement)
|
|
241
|
+
return null;
|
|
242
|
+
const endRect = takeScrollPositionIntoAccount
|
|
243
|
+
? (0, exports.getAbsolutePosition)(endElement, iframe)
|
|
244
|
+
: endElement.getBoundingClientRect();
|
|
245
|
+
const elements = startElement === endElement ? [startElement] : [startElement, endElement];
|
|
246
|
+
// console.log(
|
|
247
|
+
// "start rect",
|
|
248
|
+
// startRect,
|
|
249
|
+
// startElement,
|
|
250
|
+
// iframe.contentWindow?.scrollY,
|
|
251
|
+
// takeScrollPositionIntoAccount
|
|
252
|
+
// );
|
|
253
|
+
return {
|
|
254
|
+
rect: {
|
|
255
|
+
x: startRect.x,
|
|
256
|
+
y: startRect.y,
|
|
257
|
+
width: endRect.x + endRect.width - startRect.x,
|
|
258
|
+
height: endRect.y + endRect.height - startRect.y,
|
|
259
|
+
},
|
|
260
|
+
elements: elements,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
const getAbsolutePosition = (element, iframe) => {
|
|
264
|
+
const rect = element.getBoundingClientRect();
|
|
265
|
+
const scrollLeft = iframe.contentWindow?.scrollX ||
|
|
266
|
+
iframe.contentDocument?.documentElement.scrollLeft || 0;
|
|
267
|
+
const scrollTop = iframe.contentWindow?.scrollY ||
|
|
268
|
+
iframe.contentDocument?.documentElement.scrollTop || 0;
|
|
269
|
+
return {
|
|
270
|
+
x: rect.left + scrollLeft,
|
|
271
|
+
y: rect.top + scrollTop,
|
|
272
|
+
width: rect.width,
|
|
273
|
+
height: rect.height,
|
|
274
|
+
};
|
|
275
|
+
};
|
|
276
|
+
exports.getAbsolutePosition = getAbsolutePosition;
|
|
277
|
+
function findParentComponentId(element) {
|
|
278
|
+
while (element && element !== document.documentElement) {
|
|
279
|
+
const startElement = findStartElement(element);
|
|
280
|
+
if (startElement) {
|
|
281
|
+
return startElement.getAttribute("data-component-start");
|
|
282
|
+
}
|
|
283
|
+
element = element.parentElement;
|
|
284
|
+
}
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
function findStartElement(element) {
|
|
288
|
+
let prev = element;
|
|
289
|
+
while (prev) {
|
|
290
|
+
prev = prev.previousElementSibling;
|
|
291
|
+
if (prev?.getAttribute("data-component-start")) {
|
|
292
|
+
return prev;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return null;
|
|
296
|
+
}
|
|
297
|
+
function normalizeGuid(id) {
|
|
298
|
+
id = id.toUpperCase();
|
|
299
|
+
if (id.length && id[0] === "{")
|
|
300
|
+
return id;
|
|
301
|
+
return "{" + id + "}";
|
|
302
|
+
}
|
|
303
|
+
const dateOptions = {
|
|
304
|
+
year: "numeric",
|
|
305
|
+
month: "numeric",
|
|
306
|
+
day: "numeric",
|
|
307
|
+
hour: "numeric",
|
|
308
|
+
minute: "numeric",
|
|
309
|
+
second: "numeric",
|
|
310
|
+
hour12: false,
|
|
311
|
+
};
|
|
312
|
+
const dateFormat = Intl.DateTimeFormat(typeof navigator !== 'undefined' ? navigator.language : 'en', dateOptions);
|
|
313
|
+
function formatDate(date) {
|
|
314
|
+
return dateFormat.format(date);
|
|
315
|
+
}
|
|
316
|
+
function findClosestFieldElement(node) {
|
|
317
|
+
let current = node;
|
|
318
|
+
while (current) {
|
|
319
|
+
if (current.nodeType === Node.ELEMENT_NODE) {
|
|
320
|
+
const element = current;
|
|
321
|
+
if (element.hasAttribute("data-fieldid")) {
|
|
322
|
+
return element;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
current = current.parentNode;
|
|
326
|
+
}
|
|
327
|
+
return null;
|
|
328
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CompareView = CompareView;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const editContext_1 = require("../client/editContext");
|
|
7
|
+
const LanguageSelector_1 = require("../menubar/LanguageSelector");
|
|
8
|
+
const VersionSelector_1 = require("../menubar/VersionSelector");
|
|
9
|
+
const pageViewContext_1 = require("../page-viewer/pageViewContext");
|
|
10
|
+
const navigation_1 = require("next/navigation");
|
|
11
|
+
const navigation_2 = require("next/navigation");
|
|
12
|
+
const SingleEditView_1 = require("./SingleEditView");
|
|
13
|
+
const contentService_1 = require("../services/contentService");
|
|
14
|
+
const allotment_1 = require("allotment");
|
|
15
|
+
const ItemEditor_1 = require("./ItemEditor");
|
|
16
|
+
function CompareView() {
|
|
17
|
+
const editContext = (0, editContext_1.useEditContext)();
|
|
18
|
+
const searchParams = (0, navigation_1.useSearchParams)();
|
|
19
|
+
const router = (0, navigation_2.useRouter)();
|
|
20
|
+
if (!editContext)
|
|
21
|
+
return;
|
|
22
|
+
const [compareToItem, setCompareToItem] = (0, react_1.useState)();
|
|
23
|
+
const [compareToVersions, setCompareToVersions] = (0, react_1.useState)([]);
|
|
24
|
+
const compareTo = editContext.compareTo;
|
|
25
|
+
const setCompareTo = editContext.setCompareTo;
|
|
26
|
+
const comparePageViewContext = (0, pageViewContext_1.usePageViewContext)({
|
|
27
|
+
pageItemDescriptor: compareToItem?.descriptor,
|
|
28
|
+
itemsRepository: editContext.itemsRepository,
|
|
29
|
+
configuration: editContext.configuration,
|
|
30
|
+
});
|
|
31
|
+
(0, react_1.useEffect)(() => {
|
|
32
|
+
comparePageViewContext.setDevice(editContext.pageView.device);
|
|
33
|
+
}, [editContext.pageView.device]);
|
|
34
|
+
const updateCompareToVersions = async () => {
|
|
35
|
+
if (!compareTo || !compareTo.id || !compareTo.language) {
|
|
36
|
+
setCompareToVersions([]);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const result = await (0, contentService_1.getLanguagesAndVersions)(compareTo);
|
|
40
|
+
if (result?.data) {
|
|
41
|
+
const versions = result.data.versions.reverse();
|
|
42
|
+
setCompareToVersions(versions);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
(0, react_1.useEffect)(() => {
|
|
46
|
+
const updateCompareTo = async () => {
|
|
47
|
+
if (!editContext)
|
|
48
|
+
return;
|
|
49
|
+
if (editContext.contentEditorItem) {
|
|
50
|
+
let urlLanguage = searchParams.get("compareLanguage") ||
|
|
51
|
+
editContext.contentEditorItem.descriptor.language;
|
|
52
|
+
let urlVersion = parseInt(searchParams.get("compareVersion") || "0") ||
|
|
53
|
+
editContext.currentItemDescriptor?.version;
|
|
54
|
+
const language = editContext.itemLanguages.find((x) => x.languageCode === urlLanguage);
|
|
55
|
+
if (!language || !language.versions) {
|
|
56
|
+
urlLanguage = "";
|
|
57
|
+
}
|
|
58
|
+
if (!editContext.currentItemDescriptor?.id || !language) {
|
|
59
|
+
setCompareTo(undefined);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const result = await (0, contentService_1.getLanguagesAndVersions)({
|
|
63
|
+
id: editContext.currentItemDescriptor?.id,
|
|
64
|
+
language: language.languageCode,
|
|
65
|
+
version: 0,
|
|
66
|
+
});
|
|
67
|
+
if (result?.data) {
|
|
68
|
+
const versions = [...result.data.versions].reverse();
|
|
69
|
+
const version = versions.find((x) => x.version === urlVersion);
|
|
70
|
+
setCompareTo({
|
|
71
|
+
id: editContext.contentEditorItem.descriptor.id,
|
|
72
|
+
language: urlLanguage,
|
|
73
|
+
version: version?.version || 0,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
updateCompareTo();
|
|
79
|
+
}, [searchParams, editContext?.itemLanguages]);
|
|
80
|
+
(0, react_1.useEffect)(() => {
|
|
81
|
+
const updateCompareToItem = async () => {
|
|
82
|
+
if (!compareTo || !compareTo.id || !compareTo.language) {
|
|
83
|
+
setCompareToItem(undefined);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const item = await editContext?.itemsRepository.getItem(compareTo);
|
|
87
|
+
setCompareToItem(item);
|
|
88
|
+
};
|
|
89
|
+
updateCompareToItem();
|
|
90
|
+
updateCompareToVersions();
|
|
91
|
+
}, [compareTo]);
|
|
92
|
+
function updateCompareTo(compareToItemDescriptor) {
|
|
93
|
+
if (compareToItemDescriptor) {
|
|
94
|
+
const newParams = new URLSearchParams(searchParams.toString());
|
|
95
|
+
newParams.set("compareLanguage", compareToItemDescriptor.language);
|
|
96
|
+
newParams.set("compareVersion", compareToItemDescriptor.version.toString());
|
|
97
|
+
router.push(`?${newParams.toString()}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const originalSelector = ((0, jsx_runtime_1.jsxs)("div", { className: "flex-1 bg-gray-100 border-b flex items-center justify-center flex-shrink-0 text-sm text-gray-600 p-1", children: [(0, jsx_runtime_1.jsx)(LanguageSelector_1.LanguageSelector, { selectedLanguage: editContext.contentEditorItem?.descriptor?.language, showAllLanguagesSwitch: false, darkMode: true, onLanguageSelected: (language) => {
|
|
101
|
+
if (!editContext.contentEditorItem)
|
|
102
|
+
return;
|
|
103
|
+
editContext.loadItem({
|
|
104
|
+
id: editContext.contentEditorItem.descriptor.id,
|
|
105
|
+
language: language.languageCode,
|
|
106
|
+
version: 0,
|
|
107
|
+
});
|
|
108
|
+
} }), compareTo?.language && ((0, jsx_runtime_1.jsx)(VersionSelector_1.VersionSelector, { darkMode: true, readOnly: true, versions: editContext.itemVersions, itemDescriptor: editContext.currentItemDescriptor, actualVersion: editContext.contentEditorItem?.version, onVersionSelected: (version) => {
|
|
109
|
+
if (!editContext.contentEditorItem)
|
|
110
|
+
return;
|
|
111
|
+
editContext.loadItem({
|
|
112
|
+
id: editContext.contentEditorItem.descriptor.id,
|
|
113
|
+
language: editContext.contentEditorItem.descriptor.language,
|
|
114
|
+
version,
|
|
115
|
+
});
|
|
116
|
+
} }))] }));
|
|
117
|
+
const compareToSelector = ((0, jsx_runtime_1.jsxs)("div", { className: "flex-1 bg-gray-100 border-b flex items-center justify-center flex-shrink-0 text-sm text-gray-600 p-1", children: [(0, jsx_runtime_1.jsx)(LanguageSelector_1.LanguageSelector, { selectedLanguage: compareTo?.language, showAllLanguagesSwitch: false, darkMode: true, onLanguageSelected: (language) => {
|
|
118
|
+
if (!compareTo?.id)
|
|
119
|
+
return;
|
|
120
|
+
updateCompareTo({
|
|
121
|
+
id: compareTo.id,
|
|
122
|
+
language: language.languageCode,
|
|
123
|
+
version: compareTo.version,
|
|
124
|
+
});
|
|
125
|
+
} }), compareTo?.language && ((0, jsx_runtime_1.jsx)(VersionSelector_1.VersionSelector, { darkMode: true, readOnly: true, versions: compareToVersions, itemDescriptor: compareTo, actualVersion: compareToItem?.version, onVersionSelected: (version) => {
|
|
126
|
+
if (!compareTo?.id)
|
|
127
|
+
return;
|
|
128
|
+
updateCompareTo({
|
|
129
|
+
id: compareTo.id,
|
|
130
|
+
language: compareTo.language,
|
|
131
|
+
version,
|
|
132
|
+
});
|
|
133
|
+
} }))] }));
|
|
134
|
+
if ((compareToItem && !compareToItem.hasLayout) ||
|
|
135
|
+
comparePageViewContext.device === "")
|
|
136
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col h-full w-full items-stretch", children: [(0, jsx_runtime_1.jsxs)("div", { className: "flex w-full", children: [originalSelector, compareToSelector] }), (0, jsx_runtime_1.jsx)("div", { className: "flex-1 relative", children: (0, jsx_runtime_1.jsx)("div", { className: "absolute w-full h-full", children: (0, jsx_runtime_1.jsx)(ItemEditor_1.ItemEditor, { pageViewContext: editContext.pageView, compareToItem: compareToItem }) }) })] }));
|
|
137
|
+
return ((0, jsx_runtime_1.jsxs)(allotment_1.Allotment, { className: "flex h-full w-full", children: [(0, jsx_runtime_1.jsx)(allotment_1.Allotment.Pane, { children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col h-full w-full items-stretch", children: [originalSelector, (0, jsx_runtime_1.jsx)(SingleEditView_1.SingleEditView, { name: "original", mode: editContext?.previewMode ? "view" : "edit", pageViewContext: editContext.pageView, itemDescriptor: editContext.contentEditorItem?.descriptor }, "original")] }) }), (0, jsx_runtime_1.jsx)(allotment_1.Allotment.Pane, { children: (0, jsx_runtime_1.jsxs)("div", { className: "flex flex-col h-full w-full items-stretch", children: [compareToSelector, compareTo?.language && ((0, jsx_runtime_1.jsx)(SingleEditView_1.SingleEditView, { name: "compareTo", mode: compareToItem?.id ===
|
|
138
|
+
editContext.contentEditorItem?.descriptor.id &&
|
|
139
|
+
compareToItem?.language ===
|
|
140
|
+
editContext.contentEditorItem?.descriptor.language &&
|
|
141
|
+
compareToItem?.version ===
|
|
142
|
+
editContext.contentEditorItem?.descriptor.version
|
|
143
|
+
? editContext?.previewMode
|
|
144
|
+
? "view"
|
|
145
|
+
: "edit"
|
|
146
|
+
: "compare", pageViewContext: comparePageViewContext, itemDescriptor: compareTo }, "compareTo")), !compareTo?.language && ((0, jsx_runtime_1.jsx)("div", { className: "flex flex-col h-full w-full items-center justify-center", children: (0, jsx_runtime_1.jsx)("div", { className: "text-gray-400", children: "Select a language and version to compare" }) }))] }) })] }));
|
|
147
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EditView = EditView;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const editContext_1 = require("../client/editContext");
|
|
6
|
+
const CompareView_1 = require("./CompareView");
|
|
7
|
+
const SingleEditView_1 = require("./SingleEditView");
|
|
8
|
+
function EditView() {
|
|
9
|
+
const editContext = (0, editContext_1.useEditContext)();
|
|
10
|
+
if (!editContext)
|
|
11
|
+
return null;
|
|
12
|
+
if (!editContext.contentEditorItem?.descriptor)
|
|
13
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "grid items-center justify-center h-full w-full", children: (0, jsx_runtime_1.jsx)("div", { className: "text-sm text-gray-500", children: "Not item selected" }) }));
|
|
14
|
+
if (editContext.compareMode)
|
|
15
|
+
return (0, jsx_runtime_1.jsx)(CompareView_1.CompareView, {});
|
|
16
|
+
return ((0, jsx_runtime_1.jsx)(SingleEditView_1.SingleEditView, { name: "single", mode: editContext?.previewMode ? "view" : "edit", pageViewContext: editContext.pageView, itemDescriptor: editContext.contentEditorItem?.descriptor }, "single"));
|
|
17
|
+
}
|