@uxf/cms 11.48.3 → 11.49.0
Sign up to get free protection for your applications and to get access to all the features.
- package/content-builder/content-builder-body.d.ts +6 -0
- package/content-builder/content-builder-body.js +10 -0
- package/content-builder/content-builder-header.d.ts +7 -0
- package/content-builder/content-builder-header.js +13 -0
- package/content-builder/{form-wrapper.d.ts → content-builder-root.d.ts} +2 -2
- package/content-builder/content-builder-root.js +13 -0
- package/content-builder/{sidebar.d.ts → content-builder-sidebar.d.ts} +1 -1
- package/content-builder/{sidebar.js → content-builder-sidebar.js} +4 -4
- package/content-builder/content-builder.css +49 -0
- package/content-builder/content-builder.d.ts +1 -2
- package/content-builder/content-builder.js +14 -10
- package/content-builder/index.d.ts +1 -1
- package/content-builder/index.js +1 -1
- package/package.json +5 -5
- package/pages/content-builder/components/form-content.js +5 -4
- package/pages/content-builder/content-field.js +7 -6
- package/utils/remove-confirm-handler.js +11 -10
- package/content-builder/form-wrapper.js +0 -47
@@ -0,0 +1,10 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.ContentBuilderBody = ContentBuilderBody;
|
7
|
+
const react_1 = __importDefault(require("react"));
|
8
|
+
function ContentBuilderBody(props) {
|
9
|
+
return react_1.default.createElement("div", { className: "uxf-cb__body" }, props.children);
|
10
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.ContentBuilderHeader = ContentBuilderHeader;
|
7
|
+
const button_1 = require("@uxf/ui/button");
|
8
|
+
const react_1 = __importDefault(require("react"));
|
9
|
+
function ContentBuilderHeader(props) {
|
10
|
+
return (react_1.default.createElement("div", { className: "uxf-cb__header" },
|
11
|
+
react_1.default.createElement("h1", { className: "uxg-cb__header-title uxf-typo-h5" }, props.title),
|
12
|
+
react_1.default.createElement(button_1.Button, { type: "submit" }, "Ulo\u017Eit")));
|
13
|
+
}
|
@@ -1,11 +1,11 @@
|
|
1
1
|
import React, { ReactNode } from "react";
|
2
2
|
import { FieldValues, SubmitErrorHandler, SubmitHandler, UseFormReturn } from "react-hook-form";
|
3
|
-
interface
|
3
|
+
interface ContentBuilderRootProps<FormData extends FieldValues> {
|
4
4
|
id: string;
|
5
5
|
children: ReactNode;
|
6
6
|
formApi: UseFormReturn<FormData>;
|
7
7
|
onSubmit: SubmitHandler<FormData>;
|
8
8
|
onError?: SubmitErrorHandler<FormData>;
|
9
9
|
}
|
10
|
-
export declare function
|
10
|
+
export declare function ContentBuilderRoot<FormData extends FieldValues>(props: ContentBuilderRootProps<FormData>): React.JSX.Element;
|
11
11
|
export {};
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.ContentBuilderRoot = ContentBuilderRoot;
|
7
|
+
const form_1 = require("@uxf/form/form");
|
8
|
+
const react_1 = __importDefault(require("react"));
|
9
|
+
const details_visibility_context_1 = require("../pages/content-builder/context/details-visibility-context");
|
10
|
+
function ContentBuilderRoot(props) {
|
11
|
+
return (react_1.default.createElement(form_1.Form, { className: "uxf-cb", formApi: props.formApi, id: props.id, onError: props.onError, onSubmit: props.onSubmit },
|
12
|
+
react_1.default.createElement(details_visibility_context_1.DetailsVisibilityProvider, null, props.children)));
|
13
|
+
}
|
@@ -3,10 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.
|
6
|
+
exports.ContentBuilderSidebar = ContentBuilderSidebar;
|
7
7
|
const react_1 = __importDefault(require("react"));
|
8
|
-
function
|
9
|
-
return (react_1.default.createElement("div", { className: "
|
10
|
-
react_1.default.createElement("h2", { className: "uxf-typo-h5
|
8
|
+
function ContentBuilderSidebar(props) {
|
9
|
+
return (react_1.default.createElement("div", { className: "uxf-cb__sidebar" },
|
10
|
+
react_1.default.createElement("h2", { className: "uxf-typo-h5" }, props.title),
|
11
11
|
props.children));
|
12
12
|
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
:root {
|
2
|
+
--uxf-cb-header-height: theme("height.14");
|
3
|
+
}
|
4
|
+
|
5
|
+
.uxf-cb {
|
6
|
+
&__header {
|
7
|
+
align-items: center;
|
8
|
+
background-color: theme("colors.white");
|
9
|
+
display: flex;
|
10
|
+
height: var(--uxf-cb-header-height);
|
11
|
+
justify-content: space-between;
|
12
|
+
padding: theme("space.2") theme("space.4");
|
13
|
+
position: sticky;
|
14
|
+
top: 0;
|
15
|
+
z-index: theme("zIndex.30");
|
16
|
+
|
17
|
+
@apply shadow-md;
|
18
|
+
}
|
19
|
+
|
20
|
+
&__body {
|
21
|
+
display: flex;
|
22
|
+
flex-direction: column-reverse;
|
23
|
+
|
24
|
+
@screen sm {
|
25
|
+
flex-direction: row;
|
26
|
+
height: calc(100vh - var(--uxf-cb-header-height));
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
&__content {
|
31
|
+
overflow-y: auto;
|
32
|
+
padding: theme("space.4");
|
33
|
+
|
34
|
+
@screen sm {
|
35
|
+
flex-grow: 1;
|
36
|
+
overflow-y: auto;
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
&__content-header {
|
41
|
+
margin-top: 0;
|
42
|
+
}
|
43
|
+
|
44
|
+
&__sidebar {
|
45
|
+
background-color: theme("colors.white");
|
46
|
+
overflow-y: auto;
|
47
|
+
padding: theme("space.4") theme("space.4") theme("space.16");
|
48
|
+
}
|
49
|
+
}
|
@@ -2,7 +2,7 @@ import React from "react";
|
|
2
2
|
import { SubmitHandler, UseFormReturn } from "react-hook-form";
|
3
3
|
import { ContentComponent } from "../pages/content-builder";
|
4
4
|
import { ContentBuilderFormData, FieldsConfiguration } from "./types";
|
5
|
-
interface ContentBuilderProps {
|
5
|
+
export interface ContentBuilderProps {
|
6
6
|
id?: string;
|
7
7
|
formApi: UseFormReturn<ContentBuilderFormData>;
|
8
8
|
onSubmit: SubmitHandler<ContentBuilderFormData>;
|
@@ -11,4 +11,3 @@ interface ContentBuilderProps {
|
|
11
11
|
fields?: FieldsConfiguration;
|
12
12
|
}
|
13
13
|
export declare function ContentBuilder(props: ContentBuilderProps): React.JSX.Element;
|
14
|
-
export {};
|
@@ -27,10 +27,12 @@ exports.ContentBuilder = ContentBuilder;
|
|
27
27
|
const tabs_1 = require("@uxf/ui/tabs");
|
28
28
|
const react_1 = __importStar(require("react"));
|
29
29
|
const content_builder_1 = require("../pages/content-builder");
|
30
|
-
const
|
30
|
+
const content_builder_body_1 = require("./content-builder-body");
|
31
|
+
const content_builder_header_1 = require("./content-builder-header");
|
32
|
+
const content_builder_root_1 = require("./content-builder-root");
|
33
|
+
const content_builder_sidebar_1 = require("./content-builder-sidebar");
|
31
34
|
const content_builder_basic_form_1 = require("./forms/content-builder-basic-form");
|
32
35
|
const content_builder_seo_form_1 = require("./forms/content-builder-seo-form");
|
33
|
-
const sidebar_1 = require("./sidebar");
|
34
36
|
var TabName;
|
35
37
|
(function (TabName) {
|
36
38
|
TabName["Basic"] = "basic";
|
@@ -40,12 +42,14 @@ function ContentBuilder(props) {
|
|
40
42
|
var _a;
|
41
43
|
const generatedId = (0, react_1.useId)();
|
42
44
|
const [activeTab, setActiveTab] = (0, react_1.useState)(TabName.Basic);
|
43
|
-
return (react_1.default.createElement(
|
44
|
-
react_1.default.createElement(
|
45
|
-
react_1.default.createElement(
|
46
|
-
react_1.default.createElement(
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
45
|
+
return (react_1.default.createElement(content_builder_root_1.ContentBuilderRoot, { formApi: props.formApi, id: (_a = props.id) !== null && _a !== void 0 ? _a : generatedId, onSubmit: props.onSubmit },
|
46
|
+
react_1.default.createElement(content_builder_header_1.ContentBuilderHeader, { title: "\u010Cl\u00E1nek knihovny" }),
|
47
|
+
react_1.default.createElement(content_builder_body_1.ContentBuilderBody, null,
|
48
|
+
react_1.default.createElement(content_builder_1.ContentField, { contentComponents: props.ContentComponents, control: props.formApi.control, name: "content" }),
|
49
|
+
react_1.default.createElement(content_builder_sidebar_1.ContentBuilderSidebar, { title: "Nastaven\u00ED" },
|
50
|
+
react_1.default.createElement(tabs_1.Tabs, { onChange: setActiveTab, value: activeTab },
|
51
|
+
react_1.default.createElement(tabs_1.Tabs.Panel, { isAlwaysMounted: true, label: "Z\u00E1kladn\u00ED", name: TabName.Basic },
|
52
|
+
react_1.default.createElement(content_builder_basic_form_1.ContentBuilderBasicForm, { className: "space-y-8", fields: props.fields, formApi: props.formApi, uploadNamespace: props.uploadNamespace })),
|
53
|
+
react_1.default.createElement(tabs_1.Tabs.Panel, { isAlwaysMounted: true, label: "SEO", name: TabName.Seo },
|
54
|
+
react_1.default.createElement(content_builder_seo_form_1.ContentBuilderSeoForm, { className: "space-y-8", fields: props.fields, formApi: props.formApi, uploadNamespace: props.uploadNamespace })))))));
|
51
55
|
}
|
package/content-builder/index.js
CHANGED
@@ -15,6 +15,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
15
15
|
};
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
17
17
|
__exportStar(require("./content-builder"), exports);
|
18
|
-
__exportStar(require("./
|
18
|
+
__exportStar(require("./content-builder-root"), exports);
|
19
19
|
__exportStar(require("./map-content-response-to-form-data"), exports);
|
20
20
|
__exportStar(require("./map-form-data-to-content-request"), exports);
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@uxf/cms",
|
3
|
-
"version": "11.
|
3
|
+
"version": "11.49.0",
|
4
4
|
"description": "UXF Cms",
|
5
5
|
"author": "UXFans <dev@uxf.cz>",
|
6
6
|
"homepage": "https://gitlab.com/uxf-npm/cms#readme",
|
@@ -32,11 +32,11 @@
|
|
32
32
|
"@redux-devtools/extension": "3.3.0",
|
33
33
|
"@uxf/core": "11.47.0",
|
34
34
|
"@uxf/core-react": "11.47.0",
|
35
|
-
"@uxf/data-grid": "11.
|
36
|
-
"@uxf/form": "11.
|
35
|
+
"@uxf/data-grid": "11.49.0",
|
36
|
+
"@uxf/form": "11.49.0",
|
37
37
|
"@uxf/router": "11.46.0",
|
38
|
-
"@uxf/ui": "11.
|
39
|
-
"@uxf/wysiwyg": "11.
|
38
|
+
"@uxf/ui": "11.49.0",
|
39
|
+
"@uxf/wysiwyg": "11.49.0",
|
40
40
|
"axios": "1.7.5",
|
41
41
|
"axios-hooks": "5.0.2",
|
42
42
|
"es6-error": "4.1.1",
|
@@ -7,6 +7,7 @@ exports.FormContent = void 0;
|
|
7
7
|
const sortable_1 = require("@dnd-kit/sortable");
|
8
8
|
const utilities_1 = require("@dnd-kit/utilities");
|
9
9
|
const button_1 = require("@uxf/ui/button");
|
10
|
+
const dialog_panel_1 = require("@uxf/ui/dialog/dialog-panel");
|
10
11
|
const icon_1 = require("@uxf/ui/icon");
|
11
12
|
const modal_service_1 = require("@uxf/ui/modal/modal-service");
|
12
13
|
const paper_1 = require("@uxf/ui/paper/paper");
|
@@ -18,10 +19,10 @@ const getSection = (sections, type) => {
|
|
18
19
|
const AddSectionButton = (props) => {
|
19
20
|
return (react_1.default.createElement("div", { className: "mt-4 flex justify-center" },
|
20
21
|
react_1.default.createElement(button_1.Button, { onClick: () => (0, modal_service_1.openModal)({
|
21
|
-
children: (react_1.default.createElement(
|
22
|
-
react_1.default.createElement("
|
23
|
-
|
24
|
-
|
22
|
+
children: (react_1.default.createElement(dialog_panel_1.DialogPanel, { width: "sm" },
|
23
|
+
react_1.default.createElement("div", { className: "px-4 py-6" },
|
24
|
+
react_1.default.createElement("h2", { className: "uxf-typo-h5 mb-4" }, "P\u0159idat sekci"),
|
25
|
+
react_1.default.createElement("div", { className: "space-y-4" }, props.contentComponents.map((component) => (react_1.default.createElement(button_1.Button, { isFullWidth: true, key: component.getConfig().type, onClick: () => props.createSection(component, props.index), variant: "secondary" }, component.getConfig().label))))))),
|
25
26
|
}), size: "sm", variant: "secondary" }, "P\u0159idat sekci")));
|
26
27
|
};
|
27
28
|
const FormContent = (props) => {
|
@@ -7,6 +7,7 @@ exports.ContentField = void 0;
|
|
7
7
|
const core_1 = require("@dnd-kit/core");
|
8
8
|
const sortable_1 = require("@dnd-kit/sortable");
|
9
9
|
const button_1 = require("@uxf/ui/button");
|
10
|
+
const dialog_panel_1 = require("@uxf/ui/dialog/dialog-panel");
|
10
11
|
const icon_1 = require("@uxf/ui/icon");
|
11
12
|
const modal_service_1 = require("@uxf/ui/modal/modal-service");
|
12
13
|
const react_1 = __importDefault(require("react"));
|
@@ -29,8 +30,8 @@ const ContentField = (props) => {
|
|
29
30
|
});
|
30
31
|
const activeItemIndex = fields.findIndex((f) => f.id === (activeItem === null || activeItem === void 0 ? void 0 : activeItem.id));
|
31
32
|
const setVisibilityForAll = (0, details_visibility_context_1.useDetailsVisibilityControls)();
|
32
|
-
return (react_1.default.createElement("div", { className: "
|
33
|
-
react_1.default.createElement("div", { className: "mb-4 mt-6 flex flex-wrap items-center justify-between gap-4" },
|
33
|
+
return (react_1.default.createElement("div", { className: "uxf-cb__content" },
|
34
|
+
react_1.default.createElement("div", { className: "uxf-cb__content-header mb-4 mt-6 flex flex-wrap items-center justify-between gap-4" },
|
34
35
|
react_1.default.createElement("h2", { className: "uxf-typo-h5" }, "Obsah"),
|
35
36
|
fields.length > 1 && (react_1.default.createElement("div", { className: "flex justify-end space-x-4" },
|
36
37
|
react_1.default.createElement(button_1.Button, { onClick: () => setVisibilityForAll(true), size: "sm", variant: "secondary" },
|
@@ -50,10 +51,10 @@ const ContentField = (props) => {
|
|
50
51
|
react_1.default.createElement(core_1.DragOverlay, { dropAnimation: dropAnimationConfig }, activeItem ? (react_1.default.createElement(form_content_1.FormContent, { ...activeItem, contentComponents: props.contentComponents, control: props.control, createSection: createSection, index: activeItemIndex, name: `${props.name}.data[${activeItemIndex}]`, showAddButton: false })) : null)),
|
51
52
|
fields.length < 1 && (react_1.default.createElement("div", null,
|
52
53
|
react_1.default.createElement(button_1.Button, { className: "h-20 border-2 border-dashed border-gray-600", isFullWidth: true, onClick: () => (0, modal_service_1.openModal)({
|
53
|
-
children: (react_1.default.createElement(
|
54
|
-
react_1.default.createElement("
|
55
|
-
|
56
|
-
|
54
|
+
children: (react_1.default.createElement(dialog_panel_1.DialogPanel, { width: "sm" },
|
55
|
+
react_1.default.createElement("div", { className: "px-4 py-6" },
|
56
|
+
react_1.default.createElement("h2", { className: "uxf-typo-h5 mb-4" }, "P\u0159idat sekci"),
|
57
|
+
react_1.default.createElement("div", { className: "space-y-4" }, props.contentComponents.map((component) => (react_1.default.createElement(button_1.Button, { isFullWidth: true, key: component.getConfig().type, onClick: () => createSection(component, 0), variant: "secondary" }, component.getConfig().label))))))),
|
57
58
|
}), size: "lg", variant: "text" },
|
58
59
|
react_1.default.createElement(icon_1.Icon, { className: "mr-3", name: "plus", size: 16 }),
|
59
60
|
"P\u0159idat sekci")))));
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
exports.removeConfirmHandler = removeConfirmHandler;
|
7
7
|
const button_1 = require("@uxf/ui/button");
|
8
|
+
const dialog_panel_1 = require("@uxf/ui/dialog/dialog-panel");
|
8
9
|
const modal_1 = require("@uxf/ui/modal");
|
9
10
|
const modal_dialog_1 = require("@uxf/ui/modal-dialog/modal-dialog");
|
10
11
|
const react_1 = __importDefault(require("react"));
|
@@ -12,16 +13,16 @@ function removeConfirmHandler() {
|
|
12
13
|
return new Promise((resolve) => {
|
13
14
|
(0, modal_1.openModal)({
|
14
15
|
isBackdropCloseDisabled: true,
|
15
|
-
children: (react_1.default.createElement(
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
16
|
+
children: (react_1.default.createElement(dialog_panel_1.DialogPanel, { width: "sm" },
|
17
|
+
react_1.default.createElement(modal_dialog_1.ModalDialog, { footer: react_1.default.createElement(react_1.default.Fragment, null,
|
18
|
+
react_1.default.createElement(button_1.Button, { onClick: () => {
|
19
|
+
resolve(false);
|
20
|
+
(0, modal_1.closeModal)();
|
21
|
+
} }, "Zru\u0161it"),
|
22
|
+
react_1.default.createElement(button_1.Button, { color: "negative", onClick: () => {
|
23
|
+
resolve(true);
|
24
|
+
(0, modal_1.closeModal)();
|
25
|
+
} }, "Ano, smazat")), title: "Opravdu chcete smazat tento soubor?" }))),
|
25
26
|
});
|
26
27
|
});
|
27
28
|
}
|
@@ -1,47 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
-
if (k2 === undefined) k2 = k;
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
-
}
|
8
|
-
Object.defineProperty(o, k2, desc);
|
9
|
-
}) : (function(o, m, k, k2) {
|
10
|
-
if (k2 === undefined) k2 = k;
|
11
|
-
o[k2] = m[k];
|
12
|
-
}));
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
-
}) : function(o, v) {
|
16
|
-
o["default"] = v;
|
17
|
-
});
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
-
if (mod && mod.__esModule) return mod;
|
20
|
-
var result = {};
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
-
__setModuleDefault(result, mod);
|
23
|
-
return result;
|
24
|
-
};
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
-
exports.FormWrapper = FormWrapper;
|
27
|
-
const form_1 = require("@uxf/form/form");
|
28
|
-
const rem_1 = require("@uxf/styles/units/rem");
|
29
|
-
const react_1 = __importStar(require("react"));
|
30
|
-
const constants_1 = require("../pages/content-builder/constants");
|
31
|
-
const details_visibility_context_1 = require("../pages/content-builder/context/details-visibility-context");
|
32
|
-
const use_viewport_height_1 = require("../utils/use-viewport-height");
|
33
|
-
function FormWrapper(props) {
|
34
|
-
const [headerHeight, setHeaderHeight] = (0, react_1.useState)(0);
|
35
|
-
const viewportHeight = (0, use_viewport_height_1.useViewportHeight)(true);
|
36
|
-
const height = viewportHeight === "100vh" ? viewportHeight : (0, rem_1.rem)(viewportHeight);
|
37
|
-
(0, react_1.useEffect)(() => {
|
38
|
-
const header = document.getElementById(constants_1.CONTENT_BUILDER_PAGE_HEADER_ID);
|
39
|
-
if (header) {
|
40
|
-
setHeaderHeight(header.offsetHeight);
|
41
|
-
}
|
42
|
-
}, []);
|
43
|
-
return (react_1.default.createElement(form_1.Form, { formApi: props.formApi, id: props.id, onError: props.onError, onSubmit: props.onSubmit },
|
44
|
-
react_1.default.createElement("div", { className: "flex flex-col-reverse overflow-hidden xl:h-[calc(var(--viewport-height)-var(--header-height))] xl:flex-row", style: { "--viewport-height": height, "--header-height": (0, rem_1.rem)(headerHeight) } },
|
45
|
-
react_1.default.createElement(details_visibility_context_1.DetailsVisibilityProvider, null, props.children),
|
46
|
-
" ")));
|
47
|
-
}
|