@uxf/cms 11.36.0 → 11.38.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
}
|