@uxf/cms 11.36.0 → 11.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/pages/content-builder/components/form-root-fields.d.ts +7 -4
- package/pages/content-builder/components/form-root-fields.js +49 -61
- package/pages/content-builder/components/form.d.ts +3 -3
- package/pages/content-builder/components/form.js +34 -8
- package/pages/content-builder/components/header.d.ts +2 -2
- package/pages/content-builder/components/header.js +8 -36
- package/pages/content-builder/constants.d.ts +4 -0
- package/pages/content-builder/constants.js +6 -1
- package/pages/content-builder/content/gallery.js +2 -2
- package/pages/content-builder/content-header.js +2 -20
- package/pages/form-page/base-field.js +2 -2
- package/pages/grid-page/grid-page.js +1 -1
- package/utils/remove-confirm-handler.d.ts +1 -0
- package/utils/remove-confirm-handler.js +27 -0
- package/utils/on-remove-confirm.d.ts +0 -1
- package/utils/on-remove-confirm.js +0 -18
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@uxf/cms",
|
3
|
-
"version": "11.
|
3
|
+
"version": "11.38.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.35.0",
|
34
34
|
"@uxf/core-react": "11.36.0",
|
35
|
-
"@uxf/data-grid": "11.
|
36
|
-
"@uxf/form": "11.
|
35
|
+
"@uxf/data-grid": "11.38.0",
|
36
|
+
"@uxf/form": "11.37.0",
|
37
37
|
"@uxf/router": "11.32.0",
|
38
|
-
"@uxf/ui": "11.
|
39
|
-
"@uxf/wysiwyg": "11.
|
38
|
+
"@uxf/ui": "11.37.0",
|
39
|
+
"@uxf/wysiwyg": "11.37.0",
|
40
40
|
"axios": "1.7.5",
|
41
41
|
"axios-hooks": "5.0.2",
|
42
42
|
"es6-error": "4.1.1",
|
@@ -1,11 +1,14 @@
|
|
1
|
-
import {
|
1
|
+
import React, { Dispatch, ReactNode, SetStateAction } from "react";
|
2
2
|
import { Control } from "react-hook-form";
|
3
|
+
import { ContentBuilderTabs } from "../constants";
|
3
4
|
import { ContentBuilderConfig } from "../types";
|
4
5
|
interface Props {
|
5
|
-
|
6
|
-
id: number | null;
|
6
|
+
activeTab: ContentBuilderTabs;
|
7
7
|
children?: ReactNode;
|
8
|
+
config: ContentBuilderConfig<any>;
|
8
9
|
control: Control<any>;
|
10
|
+
id: number | null;
|
11
|
+
setActiveTab: Dispatch<SetStateAction<ContentBuilderTabs>>;
|
9
12
|
}
|
10
|
-
export declare
|
13
|
+
export declare function FormRootFields(props: Props): React.JSX.Element;
|
11
14
|
export {};
|
@@ -1,29 +1,10 @@
|
|
1
1
|
"use strict";
|
2
|
-
var
|
3
|
-
|
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;
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
24
4
|
};
|
25
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
-
exports.FormRootFields =
|
6
|
+
exports.FormRootFields = FormRootFields;
|
7
|
+
const hide_1 = require("@uxf/core-react/components/hide");
|
27
8
|
const is_not_nil_1 = require("@uxf/core/utils/is-not-nil");
|
28
9
|
const checkbox_input_1 = require("@uxf/form/checkbox-input");
|
29
10
|
const combobox_1 = require("@uxf/form/combobox/combobox");
|
@@ -34,57 +15,64 @@ const select_1 = require("@uxf/form/select");
|
|
34
15
|
const text_input_1 = require("@uxf/form/text-input");
|
35
16
|
const textarea_1 = require("@uxf/form/textarea");
|
36
17
|
const tabs_1 = require("@uxf/ui/tabs");
|
37
|
-
const react_1 =
|
18
|
+
const react_1 = __importDefault(require("react"));
|
38
19
|
const api_1 = require("../../../api");
|
39
20
|
const on_upload_file_1 = require("../../../forms/utils/on-upload-file");
|
21
|
+
const constants_1 = require("../constants");
|
40
22
|
const options = [
|
41
23
|
{ id: "PRIVATE", label: "Privátní" },
|
42
24
|
{ id: "PUBLIC_WITHOUT_SITEMAP", label: "Veřejný bez sitemapy" },
|
43
25
|
{ id: "PUBLIC", label: "Veřejný" },
|
44
26
|
];
|
45
|
-
|
27
|
+
function FormRootFields(props) {
|
46
28
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
47
|
-
// eslint-disable-next-line react/destructuring-assignment
|
48
|
-
const { children, config, id, control } = props;
|
49
|
-
const [activeTab, setActiveTab] = (0, react_1.useState)("basic");
|
50
29
|
return (react_1.default.createElement("div", { className: "pb-2 pt-4" },
|
51
|
-
react_1.default.createElement(tabs_1.Tabs, { onChange: setActiveTab, value: activeTab },
|
52
|
-
react_1.default.createElement(tabs_1.Tabs.Panel, { label: "Z\u00E1kladn\u00ED", name:
|
30
|
+
react_1.default.createElement(tabs_1.Tabs, { onChange: props.setActiveTab, value: props.activeTab },
|
31
|
+
react_1.default.createElement(tabs_1.Tabs.Panel, { isAlwaysMounted: true, label: "Z\u00E1kladn\u00ED", name: constants_1.ContentBuilderTabs.Basic },
|
53
32
|
react_1.default.createElement("div", { className: "space-y-8 px-4 pb-4" },
|
54
|
-
config.allowedTypes && (react_1.default.createElement("div", null,
|
55
|
-
react_1.default.createElement(select_1.Select, { control: control, isReadOnly: (0, is_not_nil_1.isNotNil)(id), isRequired: true, label: "Typ", name: "type", options: config.allowedTypes }))),
|
33
|
+
props.config.allowedTypes && (react_1.default.createElement("div", null,
|
34
|
+
react_1.default.createElement(select_1.Select, { control: props.control, isReadOnly: (0, is_not_nil_1.isNotNil)(props.id), isRequired: true, label: "Typ", name: "type", options: props.config.allowedTypes }))),
|
56
35
|
react_1.default.createElement("div", null,
|
57
|
-
react_1.default.createElement(text_input_1.TextInput, { control: control, isRequired: true, label: "Nadpis", name: "name" })),
|
58
|
-
|
59
|
-
react_1.default.createElement(
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
react_1.default.createElement(
|
36
|
+
react_1.default.createElement(text_input_1.TextInput, { control: props.control, isRequired: true, label: "Nadpis", name: "name", type: "text" })),
|
37
|
+
react_1.default.createElement(hide_1.Hide, { when: Boolean((_a = props.config.hide) === null || _a === void 0 ? void 0 : _a.publishedAt) },
|
38
|
+
react_1.default.createElement("div", null,
|
39
|
+
react_1.default.createElement(datetime_picker_input_1.DatetimePickerInput, { control: props.control, isRequired: true, label: "Datum publikace", name: "publishedAt" }))),
|
40
|
+
react_1.default.createElement(hide_1.Hide, { when: Boolean((_b = props.config.hide) === null || _b === void 0 ? void 0 : _b.perex) },
|
41
|
+
react_1.default.createElement("div", null,
|
42
|
+
react_1.default.createElement(textarea_1.Textarea, { control: props.control, label: "Perex", name: "perex", rows: 3 }))),
|
43
|
+
react_1.default.createElement(hide_1.Hide, { when: Boolean((_c = props.config.hide) === null || _c === void 0 ? void 0 : _c.author) },
|
44
|
+
react_1.default.createElement("div", null,
|
45
|
+
react_1.default.createElement(combobox_1.Combobox, { control: props.control, label: "Autor", loadOptions: (term) => (0, api_1.autocomplete)(null, { name: "content-author" }, { term }).then((r) => r.data), name: "author" }))),
|
46
|
+
react_1.default.createElement(hide_1.Hide, { when: Boolean((_d = props.config.hide) === null || _d === void 0 ? void 0 : _d.category) },
|
47
|
+
react_1.default.createElement("div", null,
|
48
|
+
react_1.default.createElement(combobox_1.Combobox, { control: props.control, label: "Kategorie", loadOptions: (term) => (0, api_1.autocomplete)(null, { name: "content-category" }, { term }).then((r) => r.data), name: "category" }))),
|
66
49
|
react_1.default.createElement("div", null,
|
67
|
-
react_1.default.createElement(multi_combobox_1.MultiCombobox, { control: control, label: "Tagy", loadOptions: (term) => (0, api_1.autocomplete)(null, { name: "content-tag" }, { term }).then((r) => r.data), name: "tags" })),
|
68
|
-
|
69
|
-
react_1.default.createElement(
|
50
|
+
react_1.default.createElement(multi_combobox_1.MultiCombobox, { control: props.control, label: "Tagy", loadOptions: (term) => (0, api_1.autocomplete)(null, { name: "content-tag" }, { term }).then((r) => r.data), name: "tags" })),
|
51
|
+
react_1.default.createElement(hide_1.Hide, { when: Boolean((_e = props.config.hide) === null || _e === void 0 ? void 0 : _e.image) },
|
52
|
+
react_1.default.createElement("div", null,
|
53
|
+
react_1.default.createElement(file_input_1.FileInput, { control: props.control, id: "image", label: "Hlavn\u00ED obr\u00E1zek", name: "image", onUploadFile: on_upload_file_1.onUploadFile }))),
|
70
54
|
react_1.default.createElement("div", null,
|
71
|
-
react_1.default.createElement(checkbox_input_1.CheckboxInput, { control: control, label: "Aktivn\u00ED", name: "active" })),
|
55
|
+
react_1.default.createElement(checkbox_input_1.CheckboxInput, { control: props.control, label: "Aktivn\u00ED", name: "active" })),
|
72
56
|
react_1.default.createElement("div", null,
|
73
|
-
react_1.default.createElement(select_1.Select, { control: control, isRequired: true, label: "Viditelnost", name: "visibilityLevel", options: options })))),
|
74
|
-
react_1.default.createElement(tabs_1.Tabs.Panel, { label: "SEO", name:
|
57
|
+
react_1.default.createElement(select_1.Select, { control: props.control, isRequired: true, label: "Viditelnost", name: "visibilityLevel", options: options })))),
|
58
|
+
react_1.default.createElement(tabs_1.Tabs.Panel, { isAlwaysMounted: true, label: "SEO", name: constants_1.ContentBuilderTabs.Seo },
|
75
59
|
react_1.default.createElement("div", { className: "space-y-8 px-4 pb-4" },
|
76
60
|
react_1.default.createElement("div", null,
|
77
|
-
react_1.default.createElement(text_input_1.TextInput, { control: control, helperText: "Slug = unik\u00E1tn\u00ED koncovka URL adresy", label: "Slug", name: "seo.name" })),
|
78
|
-
|
79
|
-
react_1.default.createElement(
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
react_1.default.createElement(
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
}
|
90
|
-
|
61
|
+
react_1.default.createElement(text_input_1.TextInput, { control: props.control, helperText: "Slug = unik\u00E1tn\u00ED koncovka URL adresy", isRequired: true, label: "Slug", name: "seo.name", type: "text" })),
|
62
|
+
react_1.default.createElement(hide_1.Hide, { when: Boolean((_g = (_f = props.config.hide) === null || _f === void 0 ? void 0 : _f.seo) === null || _g === void 0 ? void 0 : _g.title) },
|
63
|
+
react_1.default.createElement("div", null,
|
64
|
+
react_1.default.createElement(text_input_1.TextInput, { control: props.control, label: "Nadpis", name: "seo.title", type: "text" }))),
|
65
|
+
react_1.default.createElement(hide_1.Hide, { when: Boolean((_j = (_h = props.config.hide) === null || _h === void 0 ? void 0 : _h.seo) === null || _j === void 0 ? void 0 : _j.description) },
|
66
|
+
react_1.default.createElement("div", null,
|
67
|
+
react_1.default.createElement(text_input_1.TextInput, { control: props.control, label: "Popis", name: "seo.description", type: "text" }))),
|
68
|
+
react_1.default.createElement(hide_1.Hide, { when: Boolean((_l = (_k = props.config.hide) === null || _k === void 0 ? void 0 : _k.seo) === null || _l === void 0 ? void 0 : _l.ogTitle) },
|
69
|
+
react_1.default.createElement("div", null,
|
70
|
+
react_1.default.createElement(text_input_1.TextInput, { control: props.control, helperText: "Nadpis kter\u00FD bude zobrazen p\u0159i sd\u00EDlen\u00ED na Facebooku, ...", label: "OG nadpis", name: "seo.ogTitle", type: "text" }))),
|
71
|
+
react_1.default.createElement(hide_1.Hide, { when: Boolean((_o = (_m = props.config.hide) === null || _m === void 0 ? void 0 : _m.seo) === null || _o === void 0 ? void 0 : _o.ogDescription) },
|
72
|
+
react_1.default.createElement("div", null,
|
73
|
+
react_1.default.createElement(text_input_1.TextInput, { control: props.control, helperText: "Popis kter\u00FD bude zobrazen p\u0159i sd\u00EDlen\u00ED na Facebooku, ...", label: "OG popis", name: "seo.ogDescription", type: "text" }))),
|
74
|
+
react_1.default.createElement(hide_1.Hide, { when: Boolean((_q = (_p = props.config.hide) === null || _p === void 0 ? void 0 : _p.seo) === null || _q === void 0 ? void 0 : _q.ogImage) },
|
75
|
+
react_1.default.createElement("div", null,
|
76
|
+
react_1.default.createElement(file_input_1.FileInput, { control: props.control, helperText: "Obr\u00E1zek kter\u00FD bude zobrazen p\u0159i sd\u00EDlen\u00ED na Facebooku, ...", id: "seo.ogImage", label: "OG obr\u00E1zek", name: "seo.ogImage", onUploadFile: on_upload_file_1.onUploadFile })))))),
|
77
|
+
props.children));
|
78
|
+
}
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import { FormProps as UXFFormProps } from "@uxf/form/form";
|
2
|
-
import
|
2
|
+
import React from "react";
|
3
3
|
import { DefaultValues } from "react-hook-form";
|
4
4
|
import { ContentBuilderConfig, RootContent } from "../types";
|
5
|
-
export interface FormProps extends Omit<UXFFormProps<RootContent<any>>, "children" | "formApi" | "id" | "
|
5
|
+
export interface FormProps extends Omit<UXFFormProps<RootContent<any>>, "children" | "formApi" | "id" | "shouldOmitSubmitInput"> {
|
6
6
|
config: ContentBuilderConfig<any>;
|
7
7
|
id: number | null;
|
8
8
|
defaultValues?: DefaultValues<any>;
|
9
9
|
}
|
10
|
-
export declare
|
10
|
+
export declare function Form(props: FormProps): React.JSX.Element;
|
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
23
23
|
return result;
|
24
24
|
};
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
-
exports.Form =
|
26
|
+
exports.Form = Form;
|
27
27
|
const form_1 = require("@uxf/form/form");
|
28
28
|
const rem_1 = require("@uxf/styles/units/rem");
|
29
29
|
const react_1 = __importStar(require("react"));
|
@@ -33,10 +33,28 @@ const constants_1 = require("../constants");
|
|
33
33
|
const content_field_1 = require("../content-field");
|
34
34
|
const details_visibility_context_1 = require("../context/details-visibility-context");
|
35
35
|
const form_root_fields_1 = require("./form-root-fields");
|
36
|
-
|
37
|
-
|
36
|
+
// TODO: Mapování inputů na taby, asi by šlo udělat lépe
|
37
|
+
const INPUT_TAB_MAP = {
|
38
|
+
active: constants_1.ContentBuilderTabs.Basic,
|
39
|
+
author: constants_1.ContentBuilderTabs.Basic,
|
40
|
+
category: constants_1.ContentBuilderTabs.Basic,
|
41
|
+
content: constants_1.ContentBuilderTabs.Basic,
|
42
|
+
image: constants_1.ContentBuilderTabs.Basic,
|
43
|
+
name: constants_1.ContentBuilderTabs.Basic,
|
44
|
+
perex: constants_1.ContentBuilderTabs.Basic,
|
45
|
+
publishedAt: constants_1.ContentBuilderTabs.Basic,
|
46
|
+
seo: constants_1.ContentBuilderTabs.Seo,
|
47
|
+
tags: constants_1.ContentBuilderTabs.Basic,
|
48
|
+
type: constants_1.ContentBuilderTabs.Basic,
|
49
|
+
visibilityLevel: constants_1.ContentBuilderTabs.Basic,
|
50
|
+
};
|
51
|
+
function Form(props) {
|
52
|
+
const formApi = (0, react_hook_form_1.useForm)({
|
53
|
+
defaultValues: props.defaultValues,
|
54
|
+
});
|
38
55
|
const viewportHeight = (0, use_viewport_height_1.useViewportHeight)(true);
|
39
56
|
const [headerHeight, setHeaderHeight] = (0, react_1.useState)(0);
|
57
|
+
const [activeTab, setActiveTab] = (0, react_1.useState)(constants_1.ContentBuilderTabs.Basic);
|
40
58
|
(0, react_1.useEffect)(() => {
|
41
59
|
const header = document.getElementById(constants_1.CONTENT_BUILDER_PAGE_HEADER_ID);
|
42
60
|
if (header) {
|
@@ -44,12 +62,20 @@ const Form = (props) => {
|
|
44
62
|
}
|
45
63
|
}, []);
|
46
64
|
const height = viewportHeight === "100vh" ? viewportHeight : (0, rem_1.rem)(viewportHeight);
|
47
|
-
|
65
|
+
const handleError = (errors) => {
|
66
|
+
//TODO: přepnutí na tab s chybou, asi by šlo udělat lépe
|
67
|
+
for (const inputName in errors) {
|
68
|
+
if (inputName in INPUT_TAB_MAP) {
|
69
|
+
setActiveTab(INPUT_TAB_MAP[inputName]);
|
70
|
+
break;
|
71
|
+
}
|
72
|
+
}
|
73
|
+
};
|
74
|
+
return (react_1.default.createElement(form_1.Form, { formApi: formApi, id: constants_1.CONTENT_BUILDER_FORM_ID, onError: handleError, onSubmit: props.onSubmit },
|
48
75
|
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) } },
|
49
76
|
react_1.default.createElement(details_visibility_context_1.DetailsVisibilityProvider, null,
|
50
77
|
react_1.default.createElement(content_field_1.ContentField, { contentComponents: props.config.contentComponents, control: formApi.control, name: "content" })),
|
51
|
-
react_1.default.createElement("div", { className: "basis-[500px] bg-white px-4 pb-8 xl:overflow-y-auto dark:bg-gray-950" },
|
78
|
+
react_1.default.createElement("div", { className: "shrink-0 basis-[500px] bg-white px-4 pb-8 xl:overflow-y-auto dark:bg-gray-950" },
|
52
79
|
react_1.default.createElement("h2", { className: "uxf-typo-h5 px-4 pb-4 pt-6" }, "Nastaven\u00ED"),
|
53
|
-
react_1.default.createElement(form_root_fields_1.FormRootFields, { config: props.config, control: formApi.control, id: props.id })))));
|
54
|
-
}
|
55
|
-
exports.Form = Form;
|
80
|
+
react_1.default.createElement(form_root_fields_1.FormRootFields, { activeTab: activeTab, config: props.config, control: formApi.control, id: props.id, setActiveTab: setActiveTab })))));
|
81
|
+
}
|
@@ -1,44 +1,16 @@
|
|
1
1
|
"use strict";
|
2
|
-
var
|
3
|
-
|
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;
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
24
4
|
};
|
25
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
-
exports.Header =
|
27
|
-
const
|
28
|
-
const button_group_1 = require("@uxf/ui/button-group");
|
29
|
-
const react_1 = __importStar(require("react"));
|
6
|
+
exports.Header = Header;
|
7
|
+
const react_1 = __importDefault(require("react"));
|
30
8
|
const layout_container_1 = require("../../../lib/layout/layout-container");
|
31
9
|
const constants_1 = require("../constants");
|
32
|
-
|
33
|
-
const [language, setLanguage] = (0, react_1.useState)("cs");
|
10
|
+
function Header(props) {
|
34
11
|
return (react_1.default.createElement("div", { className: "sticky top-0 z-10 bg-white shadow-md dark:bg-gray-950", id: constants_1.CONTENT_BUILDER_PAGE_HEADER_ID },
|
35
12
|
react_1.default.createElement(layout_container_1.LayoutContainer, { className: "flex items-center justify-between py-4" },
|
36
13
|
react_1.default.createElement("h1", { className: "uxf-typo-h5" }, props.title),
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
react_1.default.createElement(button_1.Button, { onClick: () => setLanguage("en"), size: "sm", variant: language === "en" ? "default" : "secondary" }, "EN"),
|
41
|
-
react_1.default.createElement(button_1.Button, { onClick: () => setLanguage("de"), size: "sm", variant: language === "de" ? "default" : "secondary" }, "DE")),
|
42
|
-
react_1.default.createElement("button", { className: "uxf-button uxf-button--color-default uxf-button--size-default uxf-button--variant-default is-hoverable", form: constants_1.CONTENT_BUILDER_FORM_ID, type: "submit" }, "Ulo\u017Eit")))));
|
43
|
-
};
|
44
|
-
exports.Header = Header;
|
14
|
+
" ",
|
15
|
+
react_1.default.createElement("button", { className: "uxf-button uxf-button--color-default uxf-button--size-default uxf-button--variant-default is-hoverable", form: constants_1.CONTENT_BUILDER_FORM_ID, type: "submit" }, "Ulo\u017Eit"))));
|
16
|
+
}
|
@@ -1,5 +1,10 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.CONTENT_BUILDER_PAGE_HEADER_ID = exports.CONTENT_BUILDER_FORM_ID = void 0;
|
3
|
+
exports.ContentBuilderTabs = exports.CONTENT_BUILDER_PAGE_HEADER_ID = exports.CONTENT_BUILDER_FORM_ID = void 0;
|
4
4
|
exports.CONTENT_BUILDER_FORM_ID = "content-builder-form";
|
5
5
|
exports.CONTENT_BUILDER_PAGE_HEADER_ID = "content-builder-page-header";
|
6
|
+
var ContentBuilderTabs;
|
7
|
+
(function (ContentBuilderTabs) {
|
8
|
+
ContentBuilderTabs["Basic"] = "basic";
|
9
|
+
ContentBuilderTabs["Seo"] = "seo";
|
10
|
+
})(ContentBuilderTabs || (exports.ContentBuilderTabs = ContentBuilderTabs = {}));
|
@@ -8,7 +8,7 @@ const dropzone_input_1 = require("@uxf/form/dropzone/dropzone-input");
|
|
8
8
|
const dropzone_list_1 = require("@uxf/form/dropzone/dropzone-list");
|
9
9
|
const react_1 = __importDefault(require("react"));
|
10
10
|
const on_upload_dropzone_file_1 = require("../../../forms/utils/on-upload-dropzone-file");
|
11
|
-
const
|
11
|
+
const remove_confirm_handler_1 = require("../../../utils/remove-confirm-handler");
|
12
12
|
const content_header_1 = require("../content-header");
|
13
13
|
const details_visibility_context_1 = require("../context/details-visibility-context");
|
14
14
|
const Gallery = (props) => {
|
@@ -17,7 +17,7 @@ const Gallery = (props) => {
|
|
17
17
|
react_1.default.createElement(content_header_1.ContentHeader, { ...props }),
|
18
18
|
visibility && (react_1.default.createElement("div", { className: "p-4" },
|
19
19
|
react_1.default.createElement(dropzone_input_1.DropzoneInput, { control: props.control, name: `${props.name}.images`, onUploadFile: on_upload_dropzone_file_1.onUploadDropzoneFile }),
|
20
|
-
react_1.default.createElement(dropzone_list_1.DropzoneList, { control: props.control, name: `${props.name}.images`, onRemoveConfirm:
|
20
|
+
react_1.default.createElement(dropzone_list_1.DropzoneList, { className: "mt-4", control: props.control, name: `${props.name}.images`, onRemoveConfirm: remove_confirm_handler_1.removeConfirmHandler })))));
|
21
21
|
};
|
22
22
|
exports.Gallery = Gallery;
|
23
23
|
exports.Gallery.getConfig = () => ({
|
@@ -25,16 +25,11 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
26
26
|
exports.ContentHeader = void 0;
|
27
27
|
const use_clickable_props_1 = require("@uxf/core-react/hooks/use-clickable-props");
|
28
|
-
const button_1 = require("@uxf/ui/button");
|
29
|
-
const datetime_picker_input_1 = require("@uxf/ui/datetime-picker-input");
|
30
28
|
const icon_1 = require("@uxf/ui/icon");
|
31
|
-
const
|
32
|
-
const paper_1 = require("@uxf/ui/paper/paper");
|
29
|
+
const icon_button_1 = require("@uxf/ui/icon-button");
|
33
30
|
const react_1 = __importStar(require("react"));
|
34
31
|
const details_visibility_context_1 = require("./context/details-visibility-context");
|
35
32
|
const ContentHeader = (props) => {
|
36
|
-
const [validityFrom, setValidityFrom] = (0, react_1.useState)(null);
|
37
|
-
const [validityTo, setValidityTo] = (0, react_1.useState)(null);
|
38
33
|
const [visibility, toggleVisibility] = (0, details_visibility_context_1.useDetailsVisibilityForSection)(props.id);
|
39
34
|
const removeHandler = (0, react_1.useCallback)((event) => {
|
40
35
|
event.stopPropagation();
|
@@ -49,23 +44,10 @@ const ContentHeader = (props) => {
|
|
49
44
|
className: "flex w-full cursor-pointer flex-row items-center justify-between p-4",
|
50
45
|
onClick: toggleVisibility,
|
51
46
|
});
|
52
|
-
const setVisibilityHandler = (event) => {
|
53
|
-
event.stopPropagation();
|
54
|
-
(0, modal_service_1.openModal)({
|
55
|
-
children: (react_1.default.createElement(paper_1.Paper, { className: "space-y-4 p-4 dark:bg-gray-950" },
|
56
|
-
react_1.default.createElement(datetime_picker_input_1.DatetimePickerInput, { label: "Platnost od", name: "visibilityFrom", onChange: (value) => setValidityFrom(value), value: validityFrom }),
|
57
|
-
react_1.default.createElement(datetime_picker_input_1.DatetimePickerInput, { label: "Platnost do", name: "visibilityTo", onChange: (value) => setValidityTo(value), value: validityTo }))),
|
58
|
-
width: "sm",
|
59
|
-
});
|
60
|
-
};
|
61
47
|
return (react_1.default.createElement("div", { ...clickableProps },
|
62
48
|
react_1.default.createElement("h3", { className: "uxf-typo-h6" }, props.title),
|
63
49
|
react_1.default.createElement("div", { className: "flex items-center space-x-4" },
|
64
|
-
react_1.default.createElement("
|
65
|
-
react_1.default.createElement(button_1.Button, { isIconButton: true, onClick: (event) => setVisibilityHandler(event), size: "sm", variant: "secondary" },
|
66
|
-
react_1.default.createElement(icon_1.Icon, { name: "calendar" })),
|
67
|
-
react_1.default.createElement(button_1.Button, { isIconButton: true, onClick: (event) => removeHandler(event), size: "sm", variant: "secondary" },
|
68
|
-
react_1.default.createElement(icon_1.Icon, { name: "delete" }))),
|
50
|
+
react_1.default.createElement(icon_button_1.IconButton, { iconName: "delete", label: "d", onClick: removeHandler, size: "sm", variant: "secondary" }),
|
69
51
|
react_1.default.createElement(icon_1.Icon, { name: `${visibility ? "chevronUp" : "chevronDown"}`, size: 16 }))));
|
70
52
|
};
|
71
53
|
exports.ContentHeader = ContentHeader;
|
@@ -23,7 +23,7 @@ const react_1 = __importDefault(require("react"));
|
|
23
23
|
const api_1 = require("../../api");
|
24
24
|
const on_upload_dropzone_file_1 = require("../../forms/utils/on-upload-dropzone-file");
|
25
25
|
const on_upload_file_1 = require("../../forms/utils/on-upload-file");
|
26
|
-
const
|
26
|
+
const remove_confirm_handler_1 = require("../../utils/remove-confirm-handler");
|
27
27
|
const field_array_1 = require("./field-array"); // eslint-disable-line import/no-cycle
|
28
28
|
const content_1 = require("./field/content");
|
29
29
|
// eslint-disable-next-line complexity
|
@@ -58,7 +58,7 @@ const BaseField = (props) => {
|
|
58
58
|
react_1.default.createElement(label_1.Label, null, label),
|
59
59
|
react_1.default.createElement("div", { className: "mb-3" },
|
60
60
|
react_1.default.createElement(dropzone_input_1.DropzoneInput, { control: control, label: label, name: fieldName, onUploadFile: on_upload_dropzone_file_1.onUploadDropzoneFile })),
|
61
|
-
react_1.default.createElement(dropzone_list_1.DropzoneList, { control: control, errorText: "Soubor se nepoda\u0159ilo nahr\u00E1t.", name: fieldName, onRemoveConfirm:
|
61
|
+
react_1.default.createElement(dropzone_list_1.DropzoneList, { control: control, errorText: "Soubor se nepoda\u0159ilo nahr\u00E1t.", name: fieldName, onRemoveConfirm: remove_confirm_handler_1.removeConfirmHandler })));
|
62
62
|
case "manyToMany":
|
63
63
|
return (react_1.default.createElement(multi_combobox_1.MultiCombobox, { control: control, isDisabled: disabled, isRequired: required, label: label, loadOptions: (term) => { var _a; return (0, api_1.autocomplete)(null, { name: (_a = fieldSchema.autocomplete) !== null && _a !== void 0 ? _a : "" }, { term }).then((r) => r.data); }, name: fieldName }));
|
64
64
|
case "manyToOne":
|
@@ -129,7 +129,7 @@ const GridPageComponent = (props) => {
|
|
129
129
|
: undefined);
|
130
130
|
return (react_1.default.createElement(Layout, { key: props.entityAlias, title: (_j = (_g = props.title) !== null && _g !== void 0 ? _g : (_h = props.metaSchema) === null || _h === void 0 ? void 0 : _h.title) !== null && _j !== void 0 ? _j : "" },
|
131
131
|
react_1.default.createElement("div", { className: "mb-10" },
|
132
|
-
react_1.default.createElement(data_grid_1.DataGrid, { NoRowsFallback: (_k = props.ui) === null || _k === void 0 ? void 0 : _k.NoRowsFallback, SelectedRowsToolbarActions: (_l = props.ui) === null || _l === void 0 ? void 0 : _l.SelectedRowsToolbarActions, actionCell: actionCell, actions: actions, bodyCells: (_m = props.ui) === null || _m === void 0 ? void 0 : _m.BodyCells, customActions: cActions, data: data, error: error, filterHandlers: (_o = props.ui) === null || _o === void 0 ? void 0 : _o.FilterHandlers, gridName: props.entityAlias, isLoading: isLoading, isRowSelectable: props.selectable,
|
132
|
+
react_1.default.createElement(data_grid_1.DataGrid, { NoRowsFallback: (_k = props.ui) === null || _k === void 0 ? void 0 : _k.NoRowsFallback, SelectedRowsToolbarActions: (_l = props.ui) === null || _l === void 0 ? void 0 : _l.SelectedRowsToolbarActions, actionCell: actionCell, actions: actions, bodyCells: (_m = props.ui) === null || _m === void 0 ? void 0 : _m.BodyCells, customActions: cActions, data: data, error: error, filterHandlers: (_o = props.ui) === null || _o === void 0 ? void 0 : _o.FilterHandlers, gridName: props.entityAlias, isLoading: isLoading, isRowSelectable: props.selectable, onCsvDownload: (r) => window.open(`/api/cms/datagrid/export/${props.entityAlias}?${(0, qs_1.stringify)(r)}`), onReload: onReload, rowHeight: props.rowHeight, schema: props.gridSchema, state: state }))));
|
133
133
|
};
|
134
134
|
GridPageComponent.displayName = "GridPageComponent";
|
135
135
|
const GridPage = (config) => {
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare function removeConfirmHandler(): Promise<boolean>;
|
@@ -0,0 +1,27 @@
|
|
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.removeConfirmHandler = removeConfirmHandler;
|
7
|
+
const button_1 = require("@uxf/ui/button");
|
8
|
+
const modal_1 = require("@uxf/ui/modal");
|
9
|
+
const modal_dialog_1 = require("@uxf/ui/modal-dialog/modal-dialog");
|
10
|
+
const react_1 = __importDefault(require("react"));
|
11
|
+
function removeConfirmHandler() {
|
12
|
+
return new Promise((resolve) => {
|
13
|
+
(0, modal_1.openModal)({
|
14
|
+
disableBackdropClose: true,
|
15
|
+
children: (react_1.default.createElement(modal_dialog_1.ModalDialog, { footer: react_1.default.createElement(react_1.default.Fragment, null,
|
16
|
+
react_1.default.createElement(button_1.Button, { onClick: () => {
|
17
|
+
resolve(false);
|
18
|
+
(0, modal_1.closeModal)();
|
19
|
+
} }, "Zru\u0161it"),
|
20
|
+
react_1.default.createElement(button_1.Button, { color: "negative", onClick: () => {
|
21
|
+
resolve(true);
|
22
|
+
(0, modal_1.closeModal)();
|
23
|
+
} }, "Ano, smazat")), title: "Opravdu chcete smazat tento soubor?" })),
|
24
|
+
width: "sm",
|
25
|
+
});
|
26
|
+
});
|
27
|
+
}
|
@@ -1 +0,0 @@
|
|
1
|
-
export declare function onRemoveConfirm(): Promise<boolean>;
|
@@ -1,18 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.onRemoveConfirm = onRemoveConfirm;
|
4
|
-
const message_1 = require("@uxf/ui/message");
|
5
|
-
function onRemoveConfirm() {
|
6
|
-
return new Promise((resolve) => {
|
7
|
-
message_1.MessageService.openConfirm({
|
8
|
-
acceptLabel: "Yes, delete",
|
9
|
-
cancelLabel: "Cancel",
|
10
|
-
title: "Do you want to delete the file?",
|
11
|
-
color: "error",
|
12
|
-
variant: "centered",
|
13
|
-
onAccept: () => resolve(true),
|
14
|
-
onCancel: () => resolve(false),
|
15
|
-
CustomIconComponent: null,
|
16
|
-
});
|
17
|
-
});
|
18
|
-
}
|