@uxf/cms 11.42.0 → 11.42.1
Sign up to get free protection for your applications and to get access to all the features.
- package/content-builder/content-builder.d.ts +14 -0
- package/content-builder/content-builder.js +51 -0
- package/content-builder/form-wrapper.d.ts +11 -0
- package/content-builder/form-wrapper.js +47 -0
- package/content-builder/forms/content-builder-basic-form.d.ts +10 -0
- package/content-builder/forms/content-builder-basic-form.js +46 -0
- package/content-builder/forms/content-builder-seo-form.d.ts +10 -0
- package/content-builder/forms/content-builder-seo-form.js +20 -0
- package/content-builder/index.d.ts +4 -0
- package/content-builder/index.js +20 -0
- package/content-builder/map-content-response-to-form-data.d.ts +3 -0
- package/content-builder/map-content-response-to-form-data.js +38 -0
- package/content-builder/map-form-data-to-content-request.d.ts +2 -0
- package/content-builder/map-form-data-to-content-request.js +28 -0
- package/content-builder/sidebar.d.ts +7 -0
- package/content-builder/sidebar.js +12 -0
- package/content-builder/types.d.ts +182 -0
- package/content-builder/types.js +2 -0
- package/content-builder/use-content-builder-form-api.d.ts +3 -0
- package/content-builder/use-content-builder-form-api.js +7 -0
- package/package.json +2 -2
- package/pages/content-builder/content-builder-page.d.ts +1 -0
- package/pages/content-builder/content-builder-page.js +1 -0
- package/pages/content-builder/types.d.ts +3 -0
@@ -0,0 +1,14 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { SubmitHandler, UseFormReturn } from "react-hook-form";
|
3
|
+
import { ContentComponent } from "../pages/content-builder";
|
4
|
+
import { ContentBuilderFormData, FieldsConfiguration } from "./types";
|
5
|
+
interface ContentBuilderProps {
|
6
|
+
id?: string;
|
7
|
+
formApi: UseFormReturn<ContentBuilderFormData>;
|
8
|
+
onSubmit: SubmitHandler<ContentBuilderFormData>;
|
9
|
+
ContentComponents: ContentComponent<any>[];
|
10
|
+
uploadNamespace?: string;
|
11
|
+
fields?: FieldsConfiguration;
|
12
|
+
}
|
13
|
+
export declare function ContentBuilder(props: ContentBuilderProps): React.JSX.Element;
|
14
|
+
export {};
|
@@ -0,0 +1,51 @@
|
|
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.ContentBuilder = ContentBuilder;
|
27
|
+
const tabs_1 = require("@uxf/ui/tabs");
|
28
|
+
const react_1 = __importStar(require("react"));
|
29
|
+
const content_builder_1 = require("../pages/content-builder");
|
30
|
+
const form_wrapper_1 = require("./form-wrapper");
|
31
|
+
const content_builder_basic_form_1 = require("./forms/content-builder-basic-form");
|
32
|
+
const content_builder_seo_form_1 = require("./forms/content-builder-seo-form");
|
33
|
+
const sidebar_1 = require("./sidebar");
|
34
|
+
var TabName;
|
35
|
+
(function (TabName) {
|
36
|
+
TabName["Basic"] = "basic";
|
37
|
+
TabName["Seo"] = "seo";
|
38
|
+
})(TabName || (TabName = {}));
|
39
|
+
function ContentBuilder(props) {
|
40
|
+
var _a;
|
41
|
+
const generatedId = (0, react_1.useId)();
|
42
|
+
const [activeTab, setActiveTab] = (0, react_1.useState)(TabName.Basic);
|
43
|
+
return (react_1.default.createElement(form_wrapper_1.FormWrapper, { formApi: props.formApi, id: (_a = props.id) !== null && _a !== void 0 ? _a : generatedId, onSubmit: props.onSubmit },
|
44
|
+
react_1.default.createElement(content_builder_1.ContentField, { contentComponents: props.ContentComponents, control: props.formApi.control, name: "content" }),
|
45
|
+
react_1.default.createElement(sidebar_1.Sidebar, { title: "Nastaven\u00ED" },
|
46
|
+
react_1.default.createElement(tabs_1.Tabs, { onChange: setActiveTab, value: activeTab },
|
47
|
+
react_1.default.createElement(tabs_1.Tabs.Panel, { isAlwaysMounted: true, label: "Z\u00E1kladn\u00ED", name: TabName.Basic },
|
48
|
+
react_1.default.createElement(content_builder_basic_form_1.ContentBuilderBasicForm, { className: "space-y-8", fields: props.fields, formApi: props.formApi, uploadNamespace: props.uploadNamespace })),
|
49
|
+
react_1.default.createElement(tabs_1.Tabs.Panel, { isAlwaysMounted: true, label: "SEO", name: TabName.Seo },
|
50
|
+
react_1.default.createElement(content_builder_seo_form_1.ContentBuilderSeoForm, { className: "space-y-8", fields: props.fields, formApi: props.formApi, uploadNamespace: props.uploadNamespace }))))));
|
51
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import React, { ReactNode } from "react";
|
2
|
+
import { FieldValues, SubmitErrorHandler, SubmitHandler, UseFormReturn } from "react-hook-form";
|
3
|
+
interface Props<FormData extends FieldValues> {
|
4
|
+
id: string;
|
5
|
+
children: ReactNode;
|
6
|
+
formApi: UseFormReturn<FormData>;
|
7
|
+
onSubmit: SubmitHandler<FormData>;
|
8
|
+
onError?: SubmitErrorHandler<FormData>;
|
9
|
+
}
|
10
|
+
export declare function FormWrapper<FormData extends FieldValues>(props: Props<FormData>): React.JSX.Element;
|
11
|
+
export {};
|
@@ -0,0 +1,47 @@
|
|
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
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { UseFormReturn } from "react-hook-form";
|
3
|
+
import { ContentBuilderFormData, FieldsConfiguration } from "../types";
|
4
|
+
export interface ContentBuilderBasicFormProps {
|
5
|
+
formApi: UseFormReturn<ContentBuilderFormData>;
|
6
|
+
className?: string;
|
7
|
+
uploadNamespace?: string;
|
8
|
+
fields?: FieldsConfiguration;
|
9
|
+
}
|
10
|
+
export declare function ContentBuilderBasicForm(props: ContentBuilderBasicFormProps): React.JSX.Element;
|
@@ -0,0 +1,46 @@
|
|
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.ContentBuilderBasicForm = ContentBuilderBasicForm;
|
7
|
+
const is_empty_1 = require("@uxf/core/utils/is-empty");
|
8
|
+
const is_nil_1 = require("@uxf/core/utils/is-nil");
|
9
|
+
const is_not_nil_1 = require("@uxf/core/utils/is-not-nil");
|
10
|
+
const slugify_1 = require("@uxf/core/utils/slugify");
|
11
|
+
const checkbox_input_1 = require("@uxf/form/checkbox-input");
|
12
|
+
const combobox_1 = require("@uxf/form/combobox");
|
13
|
+
const datetime_picker_input_1 = require("@uxf/form/datetime-picker-input");
|
14
|
+
const file_input_1 = require("@uxf/form/file-input");
|
15
|
+
const multi_combobox_1 = require("@uxf/form/multi-combobox");
|
16
|
+
const select_1 = require("@uxf/form/select");
|
17
|
+
const text_input_1 = require("@uxf/form/text-input");
|
18
|
+
const textarea_1 = require("@uxf/form/textarea");
|
19
|
+
const react_1 = __importDefault(require("react"));
|
20
|
+
const api_1 = require("../../api");
|
21
|
+
const visibilityLevelOptions = [
|
22
|
+
{ id: "PRIVATE", label: "Privátní" },
|
23
|
+
{ id: "PUBLIC_WITHOUT_SITEMAP", label: "Veřejný bez sitemapy" },
|
24
|
+
{ id: "PUBLIC", label: "Veřejný" },
|
25
|
+
];
|
26
|
+
function ContentBuilderBasicForm(props) {
|
27
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1;
|
28
|
+
const seoName = props.formApi.watch("seo.name");
|
29
|
+
const onBlurName = (event) => {
|
30
|
+
if ((0, is_nil_1.isNil)(seoName) || (0, is_empty_1.isEmpty)(seoName)) {
|
31
|
+
props.formApi.setValue("seo.name", (0, slugify_1.slugify)(event.target.value));
|
32
|
+
}
|
33
|
+
};
|
34
|
+
return (react_1.default.createElement("div", { className: props.className },
|
35
|
+
((_b = (_a = props.fields) === null || _a === void 0 ? void 0 : _a.type) === null || _b === void 0 ? void 0 : _b.options) && (react_1.default.createElement(select_1.Select, { control: props.formApi.control, isReadOnly: props.fields.type.isReadOnly, isRequired: true, label: "Typ", name: "type", options: props.fields.type.options })),
|
36
|
+
react_1.default.createElement(text_input_1.TextInput, { control: props.formApi.control, isRequired: true, label: "Nadpis", name: "name", onBlur: onBlurName, type: "text" }),
|
37
|
+
!((_d = (_c = props.fields) === null || _c === void 0 ? void 0 : _c.publishedAt) === null || _d === void 0 ? void 0 : _d.isHidden) && (react_1.default.createElement(datetime_picker_input_1.DatetimePickerInput, { control: props.formApi.control, isRequired: true, label: "Datum publikace", name: "publishedAt" })),
|
38
|
+
!((_f = (_e = props.fields) === null || _e === void 0 ? void 0 : _e.perex) === null || _f === void 0 ? void 0 : _f.isHidden) && (react_1.default.createElement(textarea_1.Textarea, { control: props.formApi.control, label: "Perex", name: "perex", rows: 3 })),
|
39
|
+
!((_h = (_g = props.fields) === null || _g === void 0 ? void 0 : _g.author) === null || _h === void 0 ? void 0 : _h.isHidden) && ((_k = (_j = props.fields) === null || _j === void 0 ? void 0 : _j.author) === null || _k === void 0 ? void 0 : _k.autocomplete) && (react_1.default.createElement(combobox_1.Combobox, { control: props.formApi.control, label: "Autor", loadOptions: props.fields.author.autocomplete, name: "author" })),
|
40
|
+
!((_m = (_l = props.fields) === null || _l === void 0 ? void 0 : _l.category) === null || _m === void 0 ? void 0 : _m.isHidden) && ((_p = (_o = props.fields) === null || _o === void 0 ? void 0 : _o.category) === null || _p === void 0 ? void 0 : _p.autocomplete) && (react_1.default.createElement(combobox_1.Combobox, { control: props.formApi.control, label: "Kategorie", loadOptions: props.fields.category.autocomplete, name: "category" })),
|
41
|
+
!((_r = (_q = props.fields) === null || _q === void 0 ? void 0 : _q.tags) === null || _r === void 0 ? void 0 : _r.isHidden) && ((_t = (_s = props.fields) === null || _s === void 0 ? void 0 : _s.tags) === null || _t === void 0 ? void 0 : _t.autocomplete) && (react_1.default.createElement(multi_combobox_1.MultiCombobox, { control: props.formApi.control, label: "Tagy", loadOptions: props.fields.tags.autocomplete, name: "tags" })),
|
42
|
+
!((_v = (_u = props.fields) === null || _u === void 0 ? void 0 : _u.image) === null || _v === void 0 ? void 0 : _v.isHidden) && (react_1.default.createElement(file_input_1.FileInput, { control: props.formApi.control, id: "image", label: "Hlavn\u00ED obr\u00E1zek", name: "image", onUploadFile: (file) => (0, api_1.uploadFile)(file, props.uploadNamespace) })),
|
43
|
+
!((_x = (_w = props.fields) === null || _w === void 0 ? void 0 : _w.isActive) === null || _x === void 0 ? void 0 : _x.isHidden) && (react_1.default.createElement(checkbox_input_1.CheckboxInput, { control: props.formApi.control, label: "Aktivn\u00ED", name: "isActive" })),
|
44
|
+
!((_z = (_y = props.fields) === null || _y === void 0 ? void 0 : _y.visibilityLevel) === null || _z === void 0 ? void 0 : _z.isHidden) && (react_1.default.createElement(select_1.Select, { control: props.formApi.control, isRequired: true, label: "Viditelnost", name: "visibilityLevel", options: visibilityLevelOptions })),
|
45
|
+
(0, is_not_nil_1.isNotNil)((_1 = (_0 = props.fields) === null || _0 === void 0 ? void 0 : _0.parent) === null || _1 === void 0 ? void 0 : _1.autocomplete) && (react_1.default.createElement(combobox_1.Combobox, { control: props.formApi.control, label: "Nad\u0159azen\u00FD \u010Dl\u00E1nek", loadOptions: props.fields.parent.autocomplete, name: "parent" }))));
|
46
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { UseFormReturn } from "react-hook-form";
|
3
|
+
import { ContentBuilderFormData, FieldsConfiguration } from "../types";
|
4
|
+
export interface ContentBuilderSeoFormProps {
|
5
|
+
formApi: UseFormReturn<ContentBuilderFormData>;
|
6
|
+
className?: string;
|
7
|
+
uploadNamespace?: string;
|
8
|
+
fields?: FieldsConfiguration;
|
9
|
+
}
|
10
|
+
export declare function ContentBuilderSeoForm(props: ContentBuilderSeoFormProps): React.JSX.Element;
|
@@ -0,0 +1,20 @@
|
|
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.ContentBuilderSeoForm = ContentBuilderSeoForm;
|
7
|
+
const file_input_1 = require("@uxf/form/file-input");
|
8
|
+
const text_input_1 = require("@uxf/form/text-input");
|
9
|
+
const react_1 = __importDefault(require("react"));
|
10
|
+
const api_1 = require("../../api");
|
11
|
+
function ContentBuilderSeoForm(props) {
|
12
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
13
|
+
return (react_1.default.createElement("div", { className: props.className },
|
14
|
+
!((_c = (_b = (_a = props.fields) === null || _a === void 0 ? void 0 : _a.seo) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.isHidden) && (react_1.default.createElement(text_input_1.TextInput, { control: props.formApi.control, helperText: "Slug = unik\u00E1tn\u00ED koncovka URL adresy", isRequired: true, label: "Slug", name: "seo.name", type: "text" })),
|
15
|
+
!((_f = (_e = (_d = props.fields) === null || _d === void 0 ? void 0 : _d.seo) === null || _e === void 0 ? void 0 : _e.title) === null || _f === void 0 ? void 0 : _f.isHidden) && (react_1.default.createElement(text_input_1.TextInput, { control: props.formApi.control, label: "Nadpis", name: "seo.title", type: "text" })),
|
16
|
+
!((_j = (_h = (_g = props.fields) === null || _g === void 0 ? void 0 : _g.seo) === null || _h === void 0 ? void 0 : _h.description) === null || _j === void 0 ? void 0 : _j.isHidden) && (react_1.default.createElement(text_input_1.TextInput, { control: props.formApi.control, label: "Popis", name: "seo.description", type: "text" })),
|
17
|
+
!((_m = (_l = (_k = props.fields) === null || _k === void 0 ? void 0 : _k.seo) === null || _l === void 0 ? void 0 : _l.ogTitle) === null || _m === void 0 ? void 0 : _m.isHidden) && (react_1.default.createElement(text_input_1.TextInput, { control: props.formApi.control, helperText: "Nadpis kter\u00FD bude zobrazen p\u0159i sd\u00EDlen\u00ED na Facebooku, ...", label: "OG nadpis", name: "seo.ogTitle", type: "text" })),
|
18
|
+
!((_q = (_p = (_o = props.fields) === null || _o === void 0 ? void 0 : _o.seo) === null || _p === void 0 ? void 0 : _p.ogDescription) === null || _q === void 0 ? void 0 : _q.isHidden) && (react_1.default.createElement(text_input_1.TextInput, { control: props.formApi.control, helperText: "Popis kter\u00FD bude zobrazen p\u0159i sd\u00EDlen\u00ED na Facebooku, ...", label: "OG popis", name: "seo.ogDescription", type: "text" })),
|
19
|
+
!((_t = (_s = (_r = props.fields) === null || _r === void 0 ? void 0 : _r.seo) === null || _s === void 0 ? void 0 : _s.ogImage) === null || _t === void 0 ? void 0 : _t.isHidden) && (react_1.default.createElement(file_input_1.FileInput, { control: props.formApi.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: (file) => (0, api_1.uploadFile)(file, props.uploadNamespace) }))));
|
20
|
+
}
|
@@ -0,0 +1,20 @@
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
__exportStar(require("./content-builder"), exports);
|
18
|
+
__exportStar(require("./form-wrapper"), exports);
|
19
|
+
__exportStar(require("./map-content-response-to-form-data"), exports);
|
20
|
+
__exportStar(require("./map-form-data-to-content-request"), exports);
|
@@ -0,0 +1,38 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.mapContentResponseToFormData = mapContentResponseToFormData;
|
4
|
+
function mapContentResponseToFormData(content) {
|
5
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
6
|
+
return {
|
7
|
+
name: (_a = content === null || content === void 0 ? void 0 : content.name) !== null && _a !== void 0 ? _a : "",
|
8
|
+
visibilityLevel: (_b = content === null || content === void 0 ? void 0 : content.visibilityLevel) !== null && _b !== void 0 ? _b : null,
|
9
|
+
author: (content === null || content === void 0 ? void 0 : content.author)
|
10
|
+
? {
|
11
|
+
id: content.author.id,
|
12
|
+
label: `${content.author.firstName} ${content.author.surname}`,
|
13
|
+
}
|
14
|
+
: null,
|
15
|
+
image: (_c = content === null || content === void 0 ? void 0 : content.image) !== null && _c !== void 0 ? _c : null,
|
16
|
+
publishedAt: (_d = content === null || content === void 0 ? void 0 : content.publishedAt) !== null && _d !== void 0 ? _d : null,
|
17
|
+
type: (_e = content === null || content === void 0 ? void 0 : content.type) !== null && _e !== void 0 ? _e : null,
|
18
|
+
category: (content === null || content === void 0 ? void 0 : content.category)
|
19
|
+
? {
|
20
|
+
id: content.category.id,
|
21
|
+
label: content.category.name,
|
22
|
+
}
|
23
|
+
: null,
|
24
|
+
parent: (_f = content === null || content === void 0 ? void 0 : content.parent) !== null && _f !== void 0 ? _f : null,
|
25
|
+
isActive: !(content === null || content === void 0 ? void 0 : content.hidden),
|
26
|
+
perex: (_g = content === null || content === void 0 ? void 0 : content.perex) !== null && _g !== void 0 ? _g : null,
|
27
|
+
tags: (_h = content === null || content === void 0 ? void 0 : content.tags) !== null && _h !== void 0 ? _h : [],
|
28
|
+
seo: {
|
29
|
+
name: (_j = content === null || content === void 0 ? void 0 : content.seo.name) !== null && _j !== void 0 ? _j : "",
|
30
|
+
title: (_k = content === null || content === void 0 ? void 0 : content.seo.title) !== null && _k !== void 0 ? _k : "",
|
31
|
+
description: (_l = content === null || content === void 0 ? void 0 : content.seo.description) !== null && _l !== void 0 ? _l : "",
|
32
|
+
ogTitle: (_m = content === null || content === void 0 ? void 0 : content.seo.ogTitle) !== null && _m !== void 0 ? _m : "",
|
33
|
+
ogDescription: (_o = content === null || content === void 0 ? void 0 : content.seo.ogDescription) !== null && _o !== void 0 ? _o : "",
|
34
|
+
ogImage: (_p = content === null || content === void 0 ? void 0 : content.seo.ogImage) !== null && _p !== void 0 ? _p : null,
|
35
|
+
},
|
36
|
+
content: { data: (_q = content === null || content === void 0 ? void 0 : content.content) !== null && _q !== void 0 ? _q : [], search: "" },
|
37
|
+
};
|
38
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.mapFormDataToContentRequest = mapFormDataToContentRequest;
|
4
|
+
function mapFormDataToContentRequest(values) {
|
5
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
6
|
+
return {
|
7
|
+
author: (_b = (_a = values.author) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : null,
|
8
|
+
category: (_c = values.category) === null || _c === void 0 ? void 0 : _c.id,
|
9
|
+
content: values.content,
|
10
|
+
hidden: !values.isActive,
|
11
|
+
image: (_e = (_d = values.image) === null || _d === void 0 ? void 0 : _d.id) !== null && _e !== void 0 ? _e : null,
|
12
|
+
name: (_f = values.name) !== null && _f !== void 0 ? _f : "",
|
13
|
+
parent: (_g = values.parent) === null || _g === void 0 ? void 0 : _g.id,
|
14
|
+
perex: (_h = values.perex) !== null && _h !== void 0 ? _h : "",
|
15
|
+
publishedAt: values.publishedAt,
|
16
|
+
seo: {
|
17
|
+
description: (_j = values.seo.description) !== null && _j !== void 0 ? _j : "",
|
18
|
+
name: values.seo.name,
|
19
|
+
ogDescription: (_k = values.seo.ogDescription) !== null && _k !== void 0 ? _k : "",
|
20
|
+
ogImage: (_m = (_l = values.seo.ogImage) === null || _l === void 0 ? void 0 : _l.id) !== null && _m !== void 0 ? _m : null,
|
21
|
+
ogTitle: (_o = values.seo.ogTitle) !== null && _o !== void 0 ? _o : "",
|
22
|
+
title: (_p = values.seo.title) !== null && _p !== void 0 ? _p : "",
|
23
|
+
},
|
24
|
+
tags: (_r = (_q = values.tags) === null || _q === void 0 ? void 0 : _q.map((tag) => tag.id)) !== null && _r !== void 0 ? _r : [],
|
25
|
+
type: (_s = values.type) !== null && _s !== void 0 ? _s : "",
|
26
|
+
visibilityLevel: (_t = values.visibilityLevel) !== null && _t !== void 0 ? _t : "PRIVATE",
|
27
|
+
};
|
28
|
+
}
|
@@ -0,0 +1,12 @@
|
|
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.Sidebar = Sidebar;
|
7
|
+
const react_1 = __importDefault(require("react"));
|
8
|
+
function Sidebar(props) {
|
9
|
+
return (react_1.default.createElement("div", { className: "shrink-0 basis-[500px] bg-white px-4 pb-8 xl:overflow-y-auto dark:bg-gray-950" },
|
10
|
+
react_1.default.createElement("h2", { className: "uxf-typo-h5 px-4 pb-4 pt-6" }, props.title),
|
11
|
+
props.children));
|
12
|
+
}
|
@@ -0,0 +1,182 @@
|
|
1
|
+
import { CheckboxInputValue } from "@uxf/form/checkbox-input";
|
2
|
+
import { ComboboxValue } from "@uxf/form/combobox";
|
3
|
+
import { DatetimePickerInputValue } from "@uxf/form/datetime-picker-input";
|
4
|
+
import { FileInputValue } from "@uxf/form/file-input";
|
5
|
+
import { MultiComboboxValue } from "@uxf/form/multi-combobox";
|
6
|
+
import { SelectValue } from "@uxf/form/select";
|
7
|
+
import { TextInputValue } from "@uxf/form/text-input";
|
8
|
+
import { TextareaValue } from "@uxf/form/textarea";
|
9
|
+
import { SelectOption } from "@uxf/ui/select";
|
10
|
+
export type ContentBuilderFormData = {
|
11
|
+
author: ComboboxValue<number>;
|
12
|
+
category: ComboboxValue<number>;
|
13
|
+
content: {
|
14
|
+
data: any[];
|
15
|
+
search: string;
|
16
|
+
};
|
17
|
+
image: FileInputValue;
|
18
|
+
isActive: CheckboxInputValue;
|
19
|
+
name: TextInputValue;
|
20
|
+
parent: ComboboxValue<number>;
|
21
|
+
perex: TextareaValue;
|
22
|
+
publishedAt: DatetimePickerInputValue;
|
23
|
+
seo: {
|
24
|
+
description: TextInputValue;
|
25
|
+
name: TextInputValue;
|
26
|
+
ogDescription: TextInputValue;
|
27
|
+
ogImage: FileInputValue;
|
28
|
+
ogTitle: TextInputValue;
|
29
|
+
title: TextInputValue;
|
30
|
+
};
|
31
|
+
tags: MultiComboboxValue<number>;
|
32
|
+
type: SelectValue<string>;
|
33
|
+
visibilityLevel: SelectValue<VisibilityLevel>;
|
34
|
+
};
|
35
|
+
export type FieldsConfiguration = {
|
36
|
+
parent?: {
|
37
|
+
autocomplete?: Autocomplete;
|
38
|
+
};
|
39
|
+
type?: {
|
40
|
+
options?: SelectOption[];
|
41
|
+
isReadOnly?: boolean;
|
42
|
+
};
|
43
|
+
publishedAt?: {
|
44
|
+
isHidden?: boolean;
|
45
|
+
};
|
46
|
+
perex?: {
|
47
|
+
isHidden?: boolean;
|
48
|
+
};
|
49
|
+
author?: {
|
50
|
+
autocomplete?: Autocomplete;
|
51
|
+
isHidden?: boolean;
|
52
|
+
};
|
53
|
+
category?: {
|
54
|
+
autocomplete?: Autocomplete;
|
55
|
+
isHidden?: boolean;
|
56
|
+
};
|
57
|
+
tags?: {
|
58
|
+
autocomplete?: Autocomplete;
|
59
|
+
isHidden?: boolean;
|
60
|
+
};
|
61
|
+
image?: {
|
62
|
+
isHidden?: boolean;
|
63
|
+
};
|
64
|
+
visibilityLevel?: {
|
65
|
+
isHidden?: boolean;
|
66
|
+
};
|
67
|
+
isActive?: {
|
68
|
+
isHidden?: boolean;
|
69
|
+
};
|
70
|
+
seo?: {
|
71
|
+
isHidden?: boolean;
|
72
|
+
name?: {
|
73
|
+
isHidden?: boolean;
|
74
|
+
};
|
75
|
+
title?: {
|
76
|
+
isHidden?: boolean;
|
77
|
+
};
|
78
|
+
description?: {
|
79
|
+
isHidden?: boolean;
|
80
|
+
};
|
81
|
+
ogTitle?: {
|
82
|
+
isHidden?: boolean;
|
83
|
+
};
|
84
|
+
ogDescription?: {
|
85
|
+
isHidden?: boolean;
|
86
|
+
};
|
87
|
+
ogImage?: {
|
88
|
+
isHidden?: boolean;
|
89
|
+
};
|
90
|
+
};
|
91
|
+
};
|
92
|
+
export type VisibilityLevel = "PUBLIC" | "PUBLIC_WITHOUT_SITEMAP" | "PRIVATE";
|
93
|
+
export interface AutocompleteResponse {
|
94
|
+
id: number;
|
95
|
+
label: string;
|
96
|
+
}
|
97
|
+
export interface StorageImageResponse {
|
98
|
+
id: number;
|
99
|
+
uuid: string;
|
100
|
+
type: string;
|
101
|
+
extension: string;
|
102
|
+
name: string;
|
103
|
+
namespace: string;
|
104
|
+
width: number;
|
105
|
+
height: number;
|
106
|
+
size: number;
|
107
|
+
createdAt: string;
|
108
|
+
fileType: "image";
|
109
|
+
}
|
110
|
+
interface ContentSeo {
|
111
|
+
name: string | null;
|
112
|
+
title: string;
|
113
|
+
description: string;
|
114
|
+
ogTitle: string;
|
115
|
+
ogDescription: string;
|
116
|
+
ogImage: number | null;
|
117
|
+
}
|
118
|
+
interface ContentSeoResponse {
|
119
|
+
name: string | null;
|
120
|
+
title: string;
|
121
|
+
description: string;
|
122
|
+
ogTitle: string;
|
123
|
+
ogDescription: string;
|
124
|
+
ogImage: StorageImageResponse | null;
|
125
|
+
}
|
126
|
+
export interface ContentLite {
|
127
|
+
data: Array<any>;
|
128
|
+
search: string;
|
129
|
+
}
|
130
|
+
export interface ContentRequestBody {
|
131
|
+
type: string;
|
132
|
+
name: string;
|
133
|
+
perex: string;
|
134
|
+
seo: ContentSeo;
|
135
|
+
visibilityLevel: VisibilityLevel;
|
136
|
+
hidden: boolean;
|
137
|
+
image: number | null;
|
138
|
+
publishedAt: string | null;
|
139
|
+
author: number | null;
|
140
|
+
content: ContentLite;
|
141
|
+
tags: Array<number>;
|
142
|
+
parent?: number | null;
|
143
|
+
category?: number | null;
|
144
|
+
}
|
145
|
+
export interface ContentCategoryResponse {
|
146
|
+
id: number;
|
147
|
+
name: string;
|
148
|
+
}
|
149
|
+
export interface ContentPreviewResponse {
|
150
|
+
id: number;
|
151
|
+
name: string;
|
152
|
+
label: string;
|
153
|
+
}
|
154
|
+
export interface ContentAuthorResponse {
|
155
|
+
id: number;
|
156
|
+
firstName: string;
|
157
|
+
surname: string;
|
158
|
+
avatar: StorageImageResponse | null;
|
159
|
+
}
|
160
|
+
export interface ContentResponse {
|
161
|
+
id: number;
|
162
|
+
type: string;
|
163
|
+
name: string;
|
164
|
+
perex: string;
|
165
|
+
seo: ContentSeoResponse;
|
166
|
+
visibilityLevel: VisibilityLevel;
|
167
|
+
hidden: boolean;
|
168
|
+
image: StorageImageResponse | null;
|
169
|
+
publishedAt: string | null;
|
170
|
+
author: ContentAuthorResponse | null;
|
171
|
+
parent: ContentPreviewResponse | null;
|
172
|
+
category: ContentCategoryResponse | null;
|
173
|
+
content: Array<any>;
|
174
|
+
tags: Array<AutocompleteResponse>;
|
175
|
+
createdAt: string;
|
176
|
+
updatedAt: string;
|
177
|
+
}
|
178
|
+
export type Autocomplete = (value: string) => Promise<Array<{
|
179
|
+
id: string | number;
|
180
|
+
label: string;
|
181
|
+
}>>;
|
182
|
+
export {};
|
@@ -0,0 +1,3 @@
|
|
1
|
+
import { UseFormProps } from "react-hook-form";
|
2
|
+
import { ContentBuilderFormData } from "./types";
|
3
|
+
export declare function useContentBuilderFormApi(props: UseFormProps<ContentBuilderFormData>): import("react-hook-form").UseFormReturn<ContentBuilderFormData, any, undefined>;
|
@@ -0,0 +1,7 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.useContentBuilderFormApi = useContentBuilderFormApi;
|
4
|
+
const react_hook_form_1 = require("react-hook-form");
|
5
|
+
function useContentBuilderFormApi(props) {
|
6
|
+
return (0, react_hook_form_1.useForm)(props);
|
7
|
+
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@uxf/cms",
|
3
|
-
"version": "11.42.
|
3
|
+
"version": "11.42.1",
|
4
4
|
"description": "UXF Cms",
|
5
5
|
"author": "UXFans <dev@uxf.cz>",
|
6
6
|
"homepage": "https://gitlab.com/uxf-npm/cms#readme",
|
@@ -33,7 +33,7 @@
|
|
33
33
|
"@uxf/core": "11.42.0",
|
34
34
|
"@uxf/core-react": "11.42.0",
|
35
35
|
"@uxf/data-grid": "11.42.0",
|
36
|
-
"@uxf/form": "11.42.
|
36
|
+
"@uxf/form": "11.42.1",
|
37
37
|
"@uxf/router": "11.42.0",
|
38
38
|
"@uxf/ui": "11.42.0",
|
39
39
|
"@uxf/wysiwyg": "11.42.0",
|
@@ -1,2 +1,3 @@
|
|
1
1
|
import { Content, ContentBuilderConfig } from "./types";
|
2
|
+
/** @deprecated use ContentBuilder from @uxf/cms/content-builder */
|
2
3
|
export declare const ContentBuilderPage: <T extends Content<string, any>>(config: ContentBuilderConfig<T>) => import("next").NextComponentType<import("../../deprecated/types/app").IAppContext, object, object>;
|
@@ -88,6 +88,7 @@ const ContentBuilderPageComponent = (props) => {
|
|
88
88
|
react_1.default.createElement(form_1.Form, { config: props.config, defaultValues: props.initialValues, id: props.id, onSubmit: handleSubmit }))));
|
89
89
|
};
|
90
90
|
ContentBuilderPageComponent.displayName = "ContentBuilderComponent";
|
91
|
+
/** @deprecated use ContentBuilder from @uxf/cms/content-builder */
|
91
92
|
const ContentBuilderPage = (config) => {
|
92
93
|
const Page = (props) => {
|
93
94
|
return react_1.default.createElement(ContentBuilderPageComponent, { config: config, id: props.id, initialValues: props.initialValues });
|
@@ -5,6 +5,9 @@ import { NextPageContext } from "next";
|
|
5
5
|
import { FC, PropsWithChildren, ReactNode } from "react";
|
6
6
|
import { Control, ControllerRenderProps } from "react-hook-form";
|
7
7
|
import { ContentResponse, ContentTagResponse } from "../../api";
|
8
|
+
export type KeysOfType<T, U> = {
|
9
|
+
[K in keyof T]: T[K] extends U ? K : never;
|
10
|
+
}[keyof T];
|
8
11
|
export type VisibilityLevel = "PUBLIC" | "PUBLIC_WITHOUT_SITEMAP" | "PRIVATE";
|
9
12
|
export interface Content<Type extends string, ContentType> {
|
10
13
|
type: Type;
|