@gravity-ui/page-constructor 3.3.0 → 3.5.0-alpha.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/CHANGELOG.md +0 -20
- package/README.md +0 -2
- package/build/cjs/blocks/Banner/schema.d.ts +21 -63
- package/build/cjs/blocks/CardLayout/schema.d.ts +4 -10
- package/build/cjs/blocks/Companies/schema.d.ts +2 -5
- package/build/cjs/blocks/ContentLayout/ContentLayout.js +2 -3
- package/build/cjs/blocks/ContentLayout/schema.d.ts +61 -107
- package/build/cjs/blocks/ContentLayout/schema.js +18 -23
- package/build/cjs/blocks/ExtendedFeatures/schema.d.ts +4 -31
- package/build/cjs/blocks/ExtendedFeatures/schema.js +3 -2
- package/build/cjs/blocks/FilterBlock/schema.d.ts +5 -13
- package/build/cjs/blocks/FilterBlock/schema.js +2 -13
- package/build/cjs/blocks/Header/Header.css +7 -6
- package/build/cjs/blocks/Header/schema.d.ts +36 -92
- package/build/cjs/blocks/Header/schema.js +0 -1
- package/build/cjs/blocks/HeaderSlider/schema.d.ts +53 -48
- package/build/cjs/blocks/HeaderSlider/schema.js +1 -3
- package/build/cjs/blocks/Icons/schema.d.ts +1 -3
- package/build/cjs/blocks/Icons/schema.js +1 -2
- package/build/cjs/blocks/Info/schema.d.ts +8 -19
- package/build/cjs/blocks/Map/schema.d.ts +6 -17
- package/build/cjs/blocks/Media/schema.d.ts +152 -204
- package/build/cjs/blocks/Media/schema.js +1 -1
- package/build/cjs/blocks/PromoFeaturesBlock/schema.d.ts +8 -22
- package/build/cjs/blocks/PromoFeaturesBlock/schema.js +0 -1
- package/build/cjs/blocks/Questions/schema.d.ts +3 -7
- package/build/cjs/blocks/Slider/schema.d.ts +18 -13
- package/build/cjs/blocks/Slider/schema.js +5 -4
- package/build/cjs/blocks/Table/schema.d.ts +2 -5
- package/build/cjs/blocks/Table/schema.js +2 -12
- package/build/cjs/blocks/Tabs/schema.d.ts +16 -43
- package/build/cjs/components/BlockBase/BlockBase.js +2 -2
- package/build/cjs/components/HeaderBreadcrumbs/HeaderBreadcrumbs.js +1 -1
- package/build/cjs/components/Image/schema.d.ts +0 -1
- package/build/cjs/components/Image/schema.js +2 -3
- package/build/cjs/containers/PageConstructor/components/ConstructorBlock/ConstructorBlock.js +1 -1
- package/build/cjs/containers/PageConstructor/components/ConstructorItem/ConstructorItem.js +1 -1
- package/build/cjs/customization/BlockDecoration.d.ts +1 -1
- package/build/cjs/customization/BlockDecoration.js +6 -5
- package/build/cjs/editor/{components → Components}/AddBlock/AddBlock.css +7 -0
- package/build/cjs/editor/Components/AddBlock/AddBlock.d.ts +7 -0
- package/build/cjs/editor/{components → Components}/AddBlock/AddBlock.js +2 -2
- package/build/cjs/editor/Components/EditBlock/EditBlock.d.ts +4 -0
- package/build/cjs/editor/Components/EditBlock/EditBlock.js +32 -0
- package/build/cjs/editor/Containers/Editor.d.ts +2 -0
- package/build/cjs/editor/Containers/Editor.js +24 -0
- package/build/cjs/editor/index.d.ts +1 -1
- package/build/cjs/editor/index.js +1 -1
- package/build/cjs/editor/store/index.d.ts +11 -8
- package/build/cjs/editor/store/index.js +15 -61
- package/build/cjs/editor/store/reducer.d.ts +9 -17
- package/build/cjs/editor/store/reducer.js +31 -14
- package/build/cjs/editor/store/utils.d.ts +0 -1
- package/build/cjs/editor/store/utils.js +1 -3
- package/build/cjs/editor/types/index.d.ts +9 -11
- package/build/cjs/editor/utils/index.d.ts +3 -4
- package/build/cjs/editor/utils/index.js +4 -6
- package/build/cjs/grid/Col/Col.d.ts +1 -1
- package/build/cjs/models/constructor-items/blocks.d.ts +8 -13
- package/build/cjs/models/constructor.d.ts +2 -2
- package/build/cjs/models/customization.d.ts +8 -3
- package/build/cjs/models/navigation.d.ts +0 -1
- package/build/cjs/navigation/components/Header/Header.css +0 -2
- package/build/cjs/navigation/components/Header/Header.js +4 -15
- package/build/cjs/navigation/schema.d.ts +0 -1
- package/build/cjs/schema/index.d.ts +228 -9
- package/build/cjs/schema/index.js +46 -8
- package/build/cjs/schema/validators/common.d.ts +27 -71
- package/build/cjs/schema/validators/common.js +17 -50
- package/build/cjs/sub-blocks/BackgroundCard/schema.d.ts +5 -12
- package/build/cjs/sub-blocks/BasicCard/schema.d.ts +3 -8
- package/build/cjs/sub-blocks/Content/schema.d.ts +6 -14
- package/build/cjs/sub-blocks/Content/schema.js +1 -9
- package/build/cjs/sub-blocks/LayoutItem/schema.d.ts +9 -23
- package/build/cjs/sub-blocks/MediaCard/schema.d.ts +6 -16
- package/build/cjs/sub-blocks/PriceDetailed/schema.d.ts +0 -1
- package/build/cjs/sub-blocks/PriceDetailed/schema.js +1 -5
- package/build/cjs/sub-blocks/Quote/schema.d.ts +2 -6
- package/build/cjs/text-transform/utils.js +6 -1
- package/build/esm/blocks/Banner/schema.d.ts +21 -63
- package/build/esm/blocks/CardLayout/schema.d.ts +4 -10
- package/build/esm/blocks/Companies/schema.d.ts +2 -5
- package/build/esm/blocks/ContentLayout/ContentLayout.js +2 -3
- package/build/esm/blocks/ContentLayout/schema.d.ts +61 -107
- package/build/esm/blocks/ContentLayout/schema.js +18 -23
- package/build/esm/blocks/ExtendedFeatures/schema.d.ts +4 -31
- package/build/esm/blocks/ExtendedFeatures/schema.js +4 -3
- package/build/esm/blocks/FilterBlock/schema.d.ts +5 -13
- package/build/esm/blocks/FilterBlock/schema.js +2 -13
- package/build/esm/blocks/Header/Header.css +7 -6
- package/build/esm/blocks/Header/schema.d.ts +36 -92
- package/build/esm/blocks/Header/schema.js +0 -1
- package/build/esm/blocks/HeaderSlider/schema.d.ts +53 -48
- package/build/esm/blocks/HeaderSlider/schema.js +1 -2
- package/build/esm/blocks/Icons/schema.d.ts +1 -3
- package/build/esm/blocks/Icons/schema.js +1 -2
- package/build/esm/blocks/Info/schema.d.ts +8 -19
- package/build/esm/blocks/Map/schema.d.ts +6 -17
- package/build/esm/blocks/Media/schema.d.ts +152 -204
- package/build/esm/blocks/Media/schema.js +2 -2
- package/build/esm/blocks/PromoFeaturesBlock/schema.d.ts +8 -22
- package/build/esm/blocks/PromoFeaturesBlock/schema.js +0 -1
- package/build/esm/blocks/Questions/schema.d.ts +3 -7
- package/build/esm/blocks/Slider/schema.d.ts +18 -13
- package/build/esm/blocks/Slider/schema.js +5 -4
- package/build/esm/blocks/Table/schema.d.ts +2 -5
- package/build/esm/blocks/Table/schema.js +2 -12
- package/build/esm/blocks/Tabs/schema.d.ts +16 -43
- package/build/esm/components/BlockBase/BlockBase.js +2 -2
- package/build/esm/components/HeaderBreadcrumbs/HeaderBreadcrumbs.js +1 -1
- package/build/esm/components/Image/schema.d.ts +0 -1
- package/build/esm/components/Image/schema.js +2 -3
- package/build/esm/containers/PageConstructor/components/ConstructorBlock/ConstructorBlock.js +1 -1
- package/build/esm/containers/PageConstructor/components/ConstructorItem/ConstructorItem.js +1 -1
- package/build/esm/customization/BlockDecoration.d.ts +1 -1
- package/build/esm/customization/BlockDecoration.js +6 -6
- package/build/esm/editor/{components → Components}/AddBlock/AddBlock.css +7 -0
- package/build/esm/editor/Components/AddBlock/AddBlock.d.ts +8 -0
- package/build/esm/editor/{components → Components}/AddBlock/AddBlock.js +2 -2
- package/build/esm/editor/Components/EditBlock/EditBlock.d.ts +5 -0
- package/build/esm/editor/Components/EditBlock/EditBlock.js +30 -0
- package/build/esm/editor/Containers/Editor.d.ts +2 -0
- package/build/esm/editor/Containers/Editor.js +20 -0
- package/build/esm/editor/index.d.ts +1 -1
- package/build/esm/editor/index.js +1 -1
- package/build/esm/editor/store/index.d.ts +11 -8
- package/build/esm/editor/store/index.js +17 -63
- package/build/esm/editor/store/reducer.d.ts +9 -17
- package/build/esm/editor/store/reducer.js +29 -12
- package/build/esm/editor/store/utils.d.ts +0 -1
- package/build/esm/editor/store/utils.js +0 -1
- package/build/esm/editor/types/index.d.ts +9 -11
- package/build/esm/editor/utils/index.d.ts +3 -4
- package/build/esm/editor/utils/index.js +3 -4
- package/build/esm/grid/Col/Col.d.ts +1 -1
- package/build/esm/models/constructor-items/blocks.d.ts +8 -13
- package/build/esm/models/constructor.d.ts +2 -2
- package/build/esm/models/customization.d.ts +8 -3
- package/build/esm/models/navigation.d.ts +0 -1
- package/build/esm/navigation/components/Header/Header.css +0 -2
- package/build/esm/navigation/components/Header/Header.js +5 -16
- package/build/esm/navigation/schema.d.ts +0 -1
- package/build/esm/schema/index.d.ts +228 -9
- package/build/esm/schema/index.js +42 -4
- package/build/esm/schema/validators/common.d.ts +27 -71
- package/build/esm/schema/validators/common.js +16 -49
- package/build/esm/sub-blocks/BackgroundCard/schema.d.ts +5 -12
- package/build/esm/sub-blocks/BasicCard/schema.d.ts +3 -8
- package/build/esm/sub-blocks/Content/schema.d.ts +6 -14
- package/build/esm/sub-blocks/Content/schema.js +1 -9
- package/build/esm/sub-blocks/LayoutItem/schema.d.ts +9 -23
- package/build/esm/sub-blocks/MediaCard/schema.d.ts +6 -16
- package/build/esm/sub-blocks/PriceDetailed/schema.d.ts +0 -1
- package/build/esm/sub-blocks/PriceDetailed/schema.js +1 -5
- package/build/esm/sub-blocks/Quote/schema.d.ts +2 -6
- package/build/esm/text-transform/utils.js +6 -1
- package/package.json +4 -5
- package/server/models/constructor-items/blocks.d.ts +8 -13
- package/server/models/constructor.d.ts +2 -2
- package/server/models/customization.d.ts +8 -3
- package/server/models/navigation.d.ts +0 -1
- package/server/text-transform/utils.js +6 -1
- package/build/cjs/editor/components/AddBlock/AddBlock.d.ts +0 -7
- package/build/cjs/editor/components/BlockForm/BlockForm.d.ts +0 -12
- package/build/cjs/editor/components/BlockForm/BlockForm.js +0 -26
- package/build/cjs/editor/components/EditBlock/EditBlock.d.ts +0 -13
- package/build/cjs/editor/components/EditBlock/EditBlock.js +0 -44
- package/build/cjs/editor/components/ErrorBoundary/ErrorBoundary.css +0 -27
- package/build/cjs/editor/components/ErrorBoundary/ErrorBoundary.d.ts +0 -13
- package/build/cjs/editor/components/ErrorBoundary/ErrorBoundary.js +0 -35
- package/build/cjs/editor/components/ErrorBoundary/i18n/en.json +0 -4
- package/build/cjs/editor/components/ErrorBoundary/i18n/index.d.ts +0 -2
- package/build/cjs/editor/components/ErrorBoundary/i18n/index.js +0 -8
- package/build/cjs/editor/components/ErrorBoundary/i18n/ru.json +0 -4
- package/build/cjs/editor/components/PagePropsForm/PagePropsForm.d.ts +0 -10
- package/build/cjs/editor/components/PagePropsForm/PagePropsForm.js +0 -17
- package/build/cjs/editor/containers/Editor/Editor.css +0 -28
- package/build/cjs/editor/containers/Editor/Editor.d.ts +0 -2
- package/build/cjs/editor/containers/Editor/Editor.js +0 -37
- package/build/cjs/editor/containers/Form/Form.css +0 -94
- package/build/cjs/editor/containers/Form/Form.d.ts +0 -11
- package/build/cjs/editor/containers/Form/Form.js +0 -47
- package/build/cjs/editor/containers/Form/dynamic-form-custom.css +0 -0
- package/build/cjs/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.css +0 -27
- package/build/cjs/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.d.ts +0 -19
- package/build/cjs/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.js +0 -72
- package/build/cjs/editor/dynamic-forms-custom/config.d.ts +0 -2
- package/build/cjs/editor/dynamic-forms-custom/config.js +0 -13
- package/build/cjs/editor/dynamic-forms-custom/hooks/useOneOf.d.ts +0 -12
- package/build/cjs/editor/dynamic-forms-custom/hooks/useOneOf.js +0 -75
- package/build/cjs/editor/dynamic-forms-custom/parser/detect.d.ts +0 -9
- package/build/cjs/editor/dynamic-forms-custom/parser/detect.js +0 -36
- package/build/cjs/editor/dynamic-forms-custom/parser/index.d.ts +0 -28
- package/build/cjs/editor/dynamic-forms-custom/parser/index.js +0 -188
- package/build/cjs/editor/dynamic-forms-custom/parser/types.d.ts +0 -29
- package/build/cjs/editor/dynamic-forms-custom/parser/types.js +0 -2
- package/build/cjs/editor/dynamic-forms-custom/parser/views.d.ts +0 -37
- package/build/cjs/editor/dynamic-forms-custom/parser/views.js +0 -46
- package/build/cjs/editor/hooks/useFormSpec.d.ts +0 -2
- package/build/cjs/editor/hooks/useFormSpec.js +0 -13
- package/build/cjs/schema/constants.d.ts +0 -908
- package/build/cjs/schema/constants.js +0 -42
- package/build/esm/editor/components/AddBlock/AddBlock.d.ts +0 -8
- package/build/esm/editor/components/BlockForm/BlockForm.d.ts +0 -12
- package/build/esm/editor/components/BlockForm/BlockForm.js +0 -23
- package/build/esm/editor/components/EditBlock/EditBlock.d.ts +0 -14
- package/build/esm/editor/components/EditBlock/EditBlock.js +0 -41
- package/build/esm/editor/components/ErrorBoundary/ErrorBoundary.css +0 -27
- package/build/esm/editor/components/ErrorBoundary/ErrorBoundary.d.ts +0 -14
- package/build/esm/editor/components/ErrorBoundary/ErrorBoundary.js +0 -31
- package/build/esm/editor/components/ErrorBoundary/i18n/en.json +0 -4
- package/build/esm/editor/components/ErrorBoundary/i18n/index.d.ts +0 -2
- package/build/esm/editor/components/ErrorBoundary/i18n/index.js +0 -5
- package/build/esm/editor/components/ErrorBoundary/i18n/ru.json +0 -4
- package/build/esm/editor/components/PagePropsForm/PagePropsForm.d.ts +0 -10
- package/build/esm/editor/components/PagePropsForm/PagePropsForm.js +0 -13
- package/build/esm/editor/containers/Editor/Editor.css +0 -28
- package/build/esm/editor/containers/Editor/Editor.d.ts +0 -3
- package/build/esm/editor/containers/Editor/Editor.js +0 -34
- package/build/esm/editor/containers/Form/Form.css +0 -94
- package/build/esm/editor/containers/Form/Form.d.ts +0 -12
- package/build/esm/editor/containers/Form/Form.js +0 -45
- package/build/esm/editor/containers/Form/dynamic-form-custom.css +0 -0
- package/build/esm/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.css +0 -27
- package/build/esm/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.d.ts +0 -20
- package/build/esm/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.js +0 -68
- package/build/esm/editor/dynamic-forms-custom/config.d.ts +0 -2
- package/build/esm/editor/dynamic-forms-custom/config.js +0 -9
- package/build/esm/editor/dynamic-forms-custom/hooks/useOneOf.d.ts +0 -12
- package/build/esm/editor/dynamic-forms-custom/hooks/useOneOf.js +0 -69
- package/build/esm/editor/dynamic-forms-custom/parser/detect.d.ts +0 -9
- package/build/esm/editor/dynamic-forms-custom/parser/detect.js +0 -32
- package/build/esm/editor/dynamic-forms-custom/parser/index.d.ts +0 -28
- package/build/esm/editor/dynamic-forms-custom/parser/index.js +0 -186
- package/build/esm/editor/dynamic-forms-custom/parser/types.d.ts +0 -29
- package/build/esm/editor/dynamic-forms-custom/parser/types.js +0 -1
- package/build/esm/editor/dynamic-forms-custom/parser/views.d.ts +0 -37
- package/build/esm/editor/dynamic-forms-custom/parser/views.js +0 -39
- package/build/esm/editor/hooks/useFormSpec.d.ts +0 -2
- package/build/esm/editor/hooks/useFormSpec.js +0 -9
- package/build/esm/schema/constants.d.ts +0 -908
- package/build/esm/schema/constants.js +0 -39
- /package/build/cjs/editor/{components → Components}/EditBlock/EditBlock.css +0 -0
- /package/build/esm/editor/{components → Components}/EditBlock/EditBlock.css +0 -0
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ErrorBoundary = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
-
const utils_1 = require("../../../utils");
|
|
7
|
-
const utils_2 = require("../../utils");
|
|
8
|
-
const i18n_1 = tslib_1.__importDefault(require("./i18n"));
|
|
9
|
-
const b = (0, utils_1.block)('error-boundary');
|
|
10
|
-
class ErrorBoundary extends react_1.default.Component {
|
|
11
|
-
constructor() {
|
|
12
|
-
super(...arguments);
|
|
13
|
-
this.state = {};
|
|
14
|
-
}
|
|
15
|
-
componentDidCatch(error, info) {
|
|
16
|
-
this.setState({ error: `${error.message} ${info === null || info === void 0 ? void 0 : info.componentStack}` });
|
|
17
|
-
}
|
|
18
|
-
render() {
|
|
19
|
-
const { type, index } = this.props;
|
|
20
|
-
const { error } = this.state;
|
|
21
|
-
const header = type
|
|
22
|
-
? (0, i18n_1.default)('error-block-header', { id: (0, utils_2.getBlockId)({ type, index }) })
|
|
23
|
-
: (0, i18n_1.default)('error-page-header');
|
|
24
|
-
if (this.state.error) {
|
|
25
|
-
return (react_1.default.createElement("div", { className: b() },
|
|
26
|
-
react_1.default.createElement("div", { className: b('container') },
|
|
27
|
-
react_1.default.createElement("div", { className: b('image') }),
|
|
28
|
-
react_1.default.createElement("div", { className: b('content') },
|
|
29
|
-
react_1.default.createElement("h2", { className: b('header') }, header),
|
|
30
|
-
react_1.default.createElement("code", { className: b('error') }, error)))));
|
|
31
|
-
}
|
|
32
|
-
return this.props.children;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
exports.ErrorBoundary = ErrorBoundary;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
const registerKeyset_1 = require("../../../../utils/registerKeyset");
|
|
5
|
-
const en_json_1 = tslib_1.__importDefault(require("./en.json"));
|
|
6
|
-
const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
|
|
7
|
-
const COMPONENT = 'ErrorBoundary';
|
|
8
|
-
exports.default = (0, registerKeyset_1.registerKeyset)({ en: en_json_1.default, ru: ru_json_1.default }, COMPONENT);
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { PageContent } from '../../../models';
|
|
3
|
-
import { CustomSpec } from '../../dynamic-forms-custom/parser/types';
|
|
4
|
-
export type PagePropsFormData = Omit<PageContent, 'blocks'>;
|
|
5
|
-
export interface PagePropsFormProps {
|
|
6
|
-
data: PagePropsFormData;
|
|
7
|
-
spec: CustomSpec;
|
|
8
|
-
onChange: (data: PagePropsFormData) => void;
|
|
9
|
-
}
|
|
10
|
-
export declare const PagePropsForm: React.MemoExoticComponent<({ data: content, spec, onChange }: PagePropsFormProps) => JSX.Element>;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PagePropsForm = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
-
const dynamic_forms_1 = require("@gravity-ui/dynamic-forms");
|
|
7
|
-
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
8
|
-
const react_final_form_1 = require("react-final-form");
|
|
9
|
-
const config_1 = require("../../dynamic-forms-custom/config");
|
|
10
|
-
exports.PagePropsForm = (0, react_1.memo)(({ data: content, spec, onChange }) => {
|
|
11
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
12
|
-
const initialValues = (0, react_1.useMemo)(() => ({ content }), []);
|
|
13
|
-
return (react_1.default.createElement(react_final_form_1.Form, { initialValues: initialValues, onSubmit: lodash_1.default.noop }, () => (react_1.default.createElement("div", null,
|
|
14
|
-
react_1.default.createElement(react_final_form_1.FormSpy, { onChange: ({ values }) => onChange(Object.assign({}, values.content)), subscription: { values: true } }),
|
|
15
|
-
react_1.default.createElement(dynamic_forms_1.DynamicField, { name: "content", spec: spec, config: config_1.dynamicConfig })))));
|
|
16
|
-
});
|
|
17
|
-
exports.PagePropsForm.displayName = 'PagePropsForm';
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/* use this for style redefinitions to awoid problems with
|
|
2
|
-
unpredictable css rules order in build */
|
|
3
|
-
.pc-editor__form, .pc-editor__preview {
|
|
4
|
-
--yc-scrollbar-width: 0;
|
|
5
|
-
height: 100vh;
|
|
6
|
-
max-height: 100vh;
|
|
7
|
-
overflow: auto;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
.pc-editor {
|
|
11
|
-
display: flex;
|
|
12
|
-
}
|
|
13
|
-
.pc-editor__form {
|
|
14
|
-
flex: 0 0 auto;
|
|
15
|
-
padding: 20px;
|
|
16
|
-
width: 412px;
|
|
17
|
-
border-right: 12px solid var(--yc-color-line-generic);
|
|
18
|
-
}
|
|
19
|
-
.pc-editor__preview {
|
|
20
|
-
width: 100%;
|
|
21
|
-
}
|
|
22
|
-
.pc-editor__add-button {
|
|
23
|
-
position: fixed;
|
|
24
|
-
bottom: 32px;
|
|
25
|
-
left: calc(50% + 206px);
|
|
26
|
-
transform: translateX(-50%);
|
|
27
|
-
z-index: 110;
|
|
28
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Editor = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
-
const utils_1 = require("../../../utils");
|
|
7
|
-
const AddBlock_1 = tslib_1.__importDefault(require("../../components/AddBlock/AddBlock"));
|
|
8
|
-
const EditBlock_1 = tslib_1.__importDefault(require("../../components/EditBlock/EditBlock"));
|
|
9
|
-
const ErrorBoundary_1 = require("../../components/ErrorBoundary/ErrorBoundary");
|
|
10
|
-
const useFormSpec_1 = tslib_1.__importDefault(require("../../hooks/useFormSpec"));
|
|
11
|
-
const store_1 = require("../../store");
|
|
12
|
-
const utils_2 = require("../../utils");
|
|
13
|
-
const Form_1 = require("../Form/Form");
|
|
14
|
-
const b = (0, utils_1.block)('editor');
|
|
15
|
-
const Editor = (_a) => {
|
|
16
|
-
var { children, customSchema, onChange } = _a, rest = tslib_1.__rest(_a, ["children", "customSchema", "onChange"]);
|
|
17
|
-
const { content, activeBlockIndex, errorBoundaryState, onContentUpdate, onAdd, onSelect, injectEditBlockProps, } = (0, store_1.useEditorState)(rest);
|
|
18
|
-
const constructorProps = (0, react_1.useMemo)(() => ({
|
|
19
|
-
content,
|
|
20
|
-
custom: (0, utils_2.addCustomDecorator)([
|
|
21
|
-
(props) => react_1.default.createElement(EditBlock_1.default, Object.assign({}, injectEditBlockProps(props))),
|
|
22
|
-
// need errorBoundaryState flag to reset error on content update
|
|
23
|
-
(props) => (react_1.default.createElement(ErrorBoundary_1.ErrorBoundary, Object.assign({}, props, { key: `${(0, utils_2.getBlockId)(props)}-${errorBoundaryState}` }))),
|
|
24
|
-
], rest.custom),
|
|
25
|
-
}), [injectEditBlockProps, content, errorBoundaryState, rest.custom]);
|
|
26
|
-
const formSpecs = (0, useFormSpec_1.default)(customSchema);
|
|
27
|
-
(0, react_1.useEffect)(() => {
|
|
28
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(content);
|
|
29
|
-
}, [content, onChange]);
|
|
30
|
-
return (react_1.default.createElement("div", { className: b() },
|
|
31
|
-
react_1.default.createElement("div", { className: b('form') },
|
|
32
|
-
react_1.default.createElement(Form_1.Form, { content: content, onChange: onContentUpdate, activeBlockIndex: activeBlockIndex, onSelect: onSelect, spec: formSpecs })),
|
|
33
|
-
react_1.default.createElement("div", { className: b('preview') },
|
|
34
|
-
react_1.default.createElement(ErrorBoundary_1.ErrorBoundary, { key: errorBoundaryState }, children(constructorProps)),
|
|
35
|
-
react_1.default.createElement(AddBlock_1.default, { onAdd: onAdd, className: b('add-button') }))));
|
|
36
|
-
};
|
|
37
|
-
exports.Editor = Editor;
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
/* use this for style redefinitions to awoid problems with
|
|
2
|
-
unpredictable css rules order in build */
|
|
3
|
-
.pc-editor-form {
|
|
4
|
-
--top-level-font-size: var(--yc-text-display-2-font-size);
|
|
5
|
-
--top-level-line-height: var(--yc-text-display-2-line-height);
|
|
6
|
-
--block-propery-font-size: var(--yc-text-body-3-font-size);
|
|
7
|
-
--block-property-line-height: var(--yc-text-body-3-line-height);
|
|
8
|
-
--nested-property-font-size: var(--yc-text-body-1-font-size);
|
|
9
|
-
--nested-property-line-height: var(--yc-text-body-1-line-height);
|
|
10
|
-
--complex-nested-property-font-size: var(--yc-text-body-2-font-size);
|
|
11
|
-
--complex-nested-property-line-height: var(--yc-text-body-2-line-height);
|
|
12
|
-
--input-min-width: 150px;
|
|
13
|
-
--property-title-width: 140px;
|
|
14
|
-
--button-height: 48px;
|
|
15
|
-
--icon-size: 32px;
|
|
16
|
-
--icon-margin: 42px;
|
|
17
|
-
--property-font-weight: 500;
|
|
18
|
-
--header-text-size: var(--top-level-font-size);
|
|
19
|
-
--header-line-height: var(--top-level-line-height);
|
|
20
|
-
--text-size: var(--top-level-font-size);
|
|
21
|
-
--line-height: var(--top-level-line-height);
|
|
22
|
-
}
|
|
23
|
-
.pc-editor-form .df-use-search .df-use-search {
|
|
24
|
-
--button-height: 32px;
|
|
25
|
-
--icon-size: 20px;
|
|
26
|
-
--icon-margin: 30px;
|
|
27
|
-
--header-text-size: var(--block-propery-font-size);
|
|
28
|
-
--header-line-height: var(--block-property-line-height);
|
|
29
|
-
--text-size: var(--block-propery-font-size);
|
|
30
|
-
--line-height: var(--block-property-line-height);
|
|
31
|
-
}
|
|
32
|
-
.pc-editor-form .df-use-search .df-use-search .df-use-search {
|
|
33
|
-
--button-height: 28px;
|
|
34
|
-
--icon-size: 16px;
|
|
35
|
-
--icon-margin: 25px;
|
|
36
|
-
--property-font-weight: 400;
|
|
37
|
-
--header-text-size: var(--complex-nested-property-font-size);
|
|
38
|
-
--header-line-height: var(--complex-nested-property-line-height);
|
|
39
|
-
--text-size: var(--nested-property-font-size);
|
|
40
|
-
--line-height: var(--nested-property-line-height);
|
|
41
|
-
}
|
|
42
|
-
.pc-editor-form .df-row {
|
|
43
|
-
width: inherit;
|
|
44
|
-
}
|
|
45
|
-
.pc-editor-form .df-row__left {
|
|
46
|
-
width: var(--property-title-width);
|
|
47
|
-
}
|
|
48
|
-
.pc-editor-form .df-row__title {
|
|
49
|
-
font-size: var(--text-size);
|
|
50
|
-
line-height: var(--line-height);
|
|
51
|
-
font-weight: var(--property-font-weight);
|
|
52
|
-
white-space: nowrap;
|
|
53
|
-
}
|
|
54
|
-
.pc-editor-form .df-simple-vertical-accordeon textarea {
|
|
55
|
-
min-width: var(--input-min-width);
|
|
56
|
-
min-height: var(--input-min-width);
|
|
57
|
-
}
|
|
58
|
-
.pc-editor-form .df-simple-vertical-accordeon__header .yc-button {
|
|
59
|
-
font-size: var(--header-text-size);
|
|
60
|
-
line-height: var(--header-line-height);
|
|
61
|
-
}
|
|
62
|
-
.pc-editor-form .df-simple-vertical-accordeon__header .yc-button {
|
|
63
|
-
--yc-button-height: var(--button-height);
|
|
64
|
-
display: flex;
|
|
65
|
-
justify-content: center;
|
|
66
|
-
align-items: center;
|
|
67
|
-
}
|
|
68
|
-
.pc-editor-form .df-simple-vertical-accordeon__header .yc-button .yc-button__icon-inner > svg {
|
|
69
|
-
width: var(--icon-size);
|
|
70
|
-
height: var(--icon-size);
|
|
71
|
-
color: var(--yc-color-text-hint);
|
|
72
|
-
}
|
|
73
|
-
.pc-editor-form .df-simple-vertical-accordeon__header .yc-button .yc-button__icon_side_right ~ .yc-button__text {
|
|
74
|
-
margin-right: var(--icon-margin);
|
|
75
|
-
}
|
|
76
|
-
.pc-editor-form .df-simple-vertical-accordeon__body,
|
|
77
|
-
.pc-editor-form .df-group-indent > .df-use-search {
|
|
78
|
-
margin-top: 0;
|
|
79
|
-
margin-left: 1px;
|
|
80
|
-
padding-top: 12px;
|
|
81
|
-
padding-left: 16px;
|
|
82
|
-
border-left: 1px solid var(--yc-color-line-generic-accent);
|
|
83
|
-
}
|
|
84
|
-
.pc-editor-form .g-select,
|
|
85
|
-
.pc-editor-form .yc-text-input {
|
|
86
|
-
width: var(--input-min-width);
|
|
87
|
-
}
|
|
88
|
-
.pc-editor-form + .pc-editor-form {
|
|
89
|
-
margin-top: 12px;
|
|
90
|
-
}
|
|
91
|
-
.pc-editor-form__tabs {
|
|
92
|
-
--yc-color-base-special: var(--yc-color-promo-base-neon);
|
|
93
|
-
margin-bottom: 20px;
|
|
94
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { PageContent } from '../../../models';
|
|
3
|
-
import { FormSpecs } from '../../dynamic-forms-custom/parser/types';
|
|
4
|
-
export interface FormProps {
|
|
5
|
-
content: PageContent;
|
|
6
|
-
activeBlockIndex: number;
|
|
7
|
-
spec: FormSpecs;
|
|
8
|
-
onChange: (content: PageContent) => void;
|
|
9
|
-
onSelect: (index: number) => void;
|
|
10
|
-
}
|
|
11
|
-
export declare const Form: React.MemoExoticComponent<({ content, onChange, activeBlockIndex, onSelect, spec }: FormProps) => JSX.Element>;
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Form = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
-
const uikit_1 = require("@gravity-ui/uikit");
|
|
7
|
-
const utils_1 = require("../../../utils");
|
|
8
|
-
const BlockForm_1 = require("../../components/BlockForm/BlockForm");
|
|
9
|
-
const PagePropsForm_1 = require("../../components/PagePropsForm/PagePropsForm");
|
|
10
|
-
var FormTab;
|
|
11
|
-
(function (FormTab) {
|
|
12
|
-
FormTab["Blocks"] = "blocks";
|
|
13
|
-
FormTab["Page"] = "page";
|
|
14
|
-
})(FormTab || (FormTab = {}));
|
|
15
|
-
const b = (0, utils_1.block)('editor-form');
|
|
16
|
-
const tabsItems = Object.values(FormTab).map((tab) => ({
|
|
17
|
-
id: tab,
|
|
18
|
-
title: tab,
|
|
19
|
-
}));
|
|
20
|
-
exports.Form = (0, react_1.memo)(({ content, onChange, activeBlockIndex, onSelect, spec }) => {
|
|
21
|
-
const [activeTab, setActiveTab] = react_1.default.useState(FormTab.Blocks);
|
|
22
|
-
const _a = content || {}, { blocks } = _a, page = tslib_1.__rest(_a, ["blocks"]);
|
|
23
|
-
const { blocks: blocksSpec, page: pageSpec } = spec || {};
|
|
24
|
-
let form;
|
|
25
|
-
switch (activeTab) {
|
|
26
|
-
case FormTab.Page: {
|
|
27
|
-
form = (react_1.default.createElement(PagePropsForm_1.PagePropsForm, { spec: pageSpec, data: page, onChange: (data) => {
|
|
28
|
-
return onChange(Object.assign(Object.assign({}, content), data));
|
|
29
|
-
} }));
|
|
30
|
-
break;
|
|
31
|
-
}
|
|
32
|
-
case FormTab.Blocks: {
|
|
33
|
-
form = (react_1.default.createElement(react_1.Fragment, null, blocks.map((blockData, index) => (react_1.default.createElement(BlockForm_1.BlockForm, { spec: blocksSpec[blockData.type], key: (0, utils_1.getBlockKey)(blockData, index), data: blockData, active: activeBlockIndex === index, onChange: (data) => {
|
|
34
|
-
onChange(Object.assign(Object.assign({}, content), { blocks: [
|
|
35
|
-
...blocks.slice(0, index),
|
|
36
|
-
data,
|
|
37
|
-
...blocks.slice(index + 1),
|
|
38
|
-
] }));
|
|
39
|
-
}, onSelect: () => onSelect(index) })))));
|
|
40
|
-
break;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return (react_1.default.createElement("div", { className: b() },
|
|
44
|
-
react_1.default.createElement(uikit_1.Tabs, { activeTab: activeTab, className: b('tabs'), items: tabsItems, onSelectTab: setActiveTab }),
|
|
45
|
-
form));
|
|
46
|
-
});
|
|
47
|
-
exports.Form.displayName = 'Form';
|
|
File without changes
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
.pc-one-of-custom {
|
|
2
|
-
display: flex;
|
|
3
|
-
flex-direction: column;
|
|
4
|
-
}
|
|
5
|
-
.pc-one-of-custom:last-child > .df-group-indent {
|
|
6
|
-
margin-bottom: 0;
|
|
7
|
-
}
|
|
8
|
-
.pc-one-of-custom .df-group-indent {
|
|
9
|
-
all: unset;
|
|
10
|
-
}
|
|
11
|
-
.pc-one-of-custom .df-group-indent > .df-use-search {
|
|
12
|
-
padding-top: 11px;
|
|
13
|
-
padding-left: 20px;
|
|
14
|
-
margin-top: 4px;
|
|
15
|
-
margin-bottom: 20px;
|
|
16
|
-
margin-left: 5px;
|
|
17
|
-
border-left: 1px solid var(--yc-color-line-generic-accent);
|
|
18
|
-
}
|
|
19
|
-
.pc-one-of-custom .df-group-indent > .df-use-search:empty {
|
|
20
|
-
display: none;
|
|
21
|
-
}
|
|
22
|
-
.pc-one-of-custom .df-group-indent > .df-use-search:last-child {
|
|
23
|
-
margin-bottom: 0;
|
|
24
|
-
}
|
|
25
|
-
.pc-one-of-custom .df-group-indent > .df-use-search > .df-simple-vertical-accordeon_view {
|
|
26
|
-
margin-top: -10px;
|
|
27
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { ObjectIndependentInputProps } from '@gravity-ui/dynamic-forms';
|
|
3
|
-
/**
|
|
4
|
-
* Customization of @gravity-ui/dynamic-forms OneOf component
|
|
5
|
-
*
|
|
6
|
-
* Main differences from original component:
|
|
7
|
-
*
|
|
8
|
-
* 1. Custom component can detect initial data type by it's json schema passed it __schema property of spec and
|
|
9
|
-
* shows according input
|
|
10
|
-
*
|
|
11
|
-
* 2. Custom component doesn't create additional nested level of data for each OneOf option and doesn't wraps data value, e.g.
|
|
12
|
-
*
|
|
13
|
-
* custom component: {propertyName: propertyValue}
|
|
14
|
-
* original component: {propertyName: {option1: {value: propertyValue}}}
|
|
15
|
-
*
|
|
16
|
-
* @param {ObjectIndependentInputProps} props - props of original OneOf component
|
|
17
|
-
* @returns {React.FC<ObjectIndependentInputProps>}
|
|
18
|
-
*/
|
|
19
|
-
export declare const OneOfCustom: React.FC<ObjectIndependentInputProps>;
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OneOfCustom = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
-
const dynamic_forms_1 = require("@gravity-ui/dynamic-forms");
|
|
7
|
-
const ajv_1 = tslib_1.__importDefault(require("ajv"));
|
|
8
|
-
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
9
|
-
const utils_1 = require("../../../../utils");
|
|
10
|
-
const useOneOf_1 = require("../../hooks/useOneOf");
|
|
11
|
-
const b = (0, utils_1.block)('one-of-custom');
|
|
12
|
-
const ajv = new ajv_1.default({
|
|
13
|
-
$data: true,
|
|
14
|
-
strict: false,
|
|
15
|
-
strictSchema: false,
|
|
16
|
-
strictTypes: false,
|
|
17
|
-
strictRequired: false,
|
|
18
|
-
});
|
|
19
|
-
const getOneOfCustomSpecDefaultType = (spec) => { var _a, _b; return ((_b = (_a = spec.viewSpec) === null || _a === void 0 ? void 0 : _a.order) === null || _b === void 0 ? void 0 : _b[0]) || Object.keys(spec.properties || {})[0]; };
|
|
20
|
-
// dynamic-forms pass {} as default value for required properties of all types
|
|
21
|
-
// this function replaces {} with default value accordingly to selected OneOf option spec type
|
|
22
|
-
const getControllerDefautValue = (value, valueSpecType) => {
|
|
23
|
-
const isDefaultValue = typeof value === 'object' && lodash_1.default.isEmpty(value);
|
|
24
|
-
const defaultValue = valueSpecType ? (0, useOneOf_1.getSpecTypeDefaultValue)(valueSpecType) : undefined;
|
|
25
|
-
return isDefaultValue ? defaultValue : value;
|
|
26
|
-
};
|
|
27
|
-
/**
|
|
28
|
-
* Customization of @gravity-ui/dynamic-forms OneOf component
|
|
29
|
-
*
|
|
30
|
-
* Main differences from original component:
|
|
31
|
-
*
|
|
32
|
-
* 1. Custom component can detect initial data type by it's json schema passed it __schema property of spec and
|
|
33
|
-
* shows according input
|
|
34
|
-
*
|
|
35
|
-
* 2. Custom component doesn't create additional nested level of data for each OneOf option and doesn't wraps data value, e.g.
|
|
36
|
-
*
|
|
37
|
-
* custom component: {propertyName: propertyValue}
|
|
38
|
-
* original component: {propertyName: {option1: {value: propertyValue}}}
|
|
39
|
-
*
|
|
40
|
-
* @param {ObjectIndependentInputProps} props - props of original OneOf component
|
|
41
|
-
* @returns {React.FC<ObjectIndependentInputProps>}
|
|
42
|
-
*/
|
|
43
|
-
const OneOfCustom = (props) => {
|
|
44
|
-
var _a;
|
|
45
|
-
const { spec, input, name } = props;
|
|
46
|
-
const { properties } = spec;
|
|
47
|
-
//getting oneOf option type from initial value
|
|
48
|
-
const valueType = (0, react_1.useMemo)(() => {
|
|
49
|
-
var _a;
|
|
50
|
-
return (properties &&
|
|
51
|
-
((_a = Object.keys(properties)) === null || _a === void 0 ? void 0 : _a.find((key) => {
|
|
52
|
-
const fieldSchema = (properties === null || properties === void 0 ? void 0 : properties[key]).__schema;
|
|
53
|
-
return fieldSchema && ajv.validate(fieldSchema, (0, dynamic_forms_1.transformArrOut)(input.value));
|
|
54
|
-
}))) ||
|
|
55
|
-
getOneOfCustomSpecDefaultType(spec);
|
|
56
|
-
},
|
|
57
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
58
|
-
[]);
|
|
59
|
-
const { oneOfValue, specProperties, toggler } = (0, useOneOf_1.useOneOf)({
|
|
60
|
-
props: Object.assign(Object.assign({}, props), { input: Object.assign(Object.assign({}, input), { value: valueType ? { [valueType]: input.value } : input.value }) }),
|
|
61
|
-
});
|
|
62
|
-
const parentOnChange = react_1.default.useCallback((_childName, childValue, childErrors) => {
|
|
63
|
-
input.onChange(childValue, childErrors);
|
|
64
|
-
}, [input]);
|
|
65
|
-
const parentOnUnmount = react_1.default.useCallback((childName) => input.onChange((currentValue) => currentValue, { [childName]: false }), [input]);
|
|
66
|
-
const valueSpecType = ((_a = specProperties[oneOfValue]) === null || _a === void 0 ? void 0 : _a.type) || dynamic_forms_1.SpecTypes.Object;
|
|
67
|
-
return (react_1.default.createElement("div", { className: b() },
|
|
68
|
-
react_1.default.createElement("div", null, toggler),
|
|
69
|
-
specProperties[oneOfValue] && (react_1.default.createElement(dynamic_forms_1.GroupIndent, null,
|
|
70
|
-
react_1.default.createElement(dynamic_forms_1.Controller, { value: getControllerDefautValue(input.value, valueSpecType), name: name, spec: specProperties[oneOfValue], parentOnChange: parentOnChange, parentOnUnmount: parentOnUnmount, key: `${name}.${oneOfValue}` })))));
|
|
71
|
-
};
|
|
72
|
-
exports.OneOfCustom = OneOfCustom;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.dynamicConfig = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const dynamic_forms_1 = require("@gravity-ui/dynamic-forms");
|
|
6
|
-
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
7
|
-
const OneOfCustom_1 = require("./components/OneOfCustom/OneOfCustom");
|
|
8
|
-
const getDynamicConfig = () => {
|
|
9
|
-
const dynamicConfig = lodash_1.default.cloneDeep(dynamic_forms_1.dynamicConfig);
|
|
10
|
-
dynamicConfig.object.inputs['oneof_custom'] = { Component: OneOfCustom_1.OneOfCustom, independent: true };
|
|
11
|
-
return dynamicConfig;
|
|
12
|
-
};
|
|
13
|
-
exports.dynamicConfig = getDynamicConfig();
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { ObjectIndependentInputProps, Spec, SpecTypes } from '@gravity-ui/dynamic-forms';
|
|
2
|
-
export interface UseOneOfParams {
|
|
3
|
-
props: ObjectIndependentInputProps;
|
|
4
|
-
onTogglerChange?: (value: string) => void;
|
|
5
|
-
}
|
|
6
|
-
export declare const getSpecTypeDefaultValue: (type: SpecTypes) => {} | undefined;
|
|
7
|
-
export declare const useOneOf: ({ props, onTogglerChange }: UseOneOfParams) => {
|
|
8
|
-
oneOfValue: string;
|
|
9
|
-
specProperties: Record<string, Spec>;
|
|
10
|
-
toggler: JSX.Element;
|
|
11
|
-
togglerInput: JSX.Element;
|
|
12
|
-
};
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.useOneOf = exports.getSpecTypeDefaultValue = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
-
const dynamic_forms_1 = require("@gravity-ui/dynamic-forms");
|
|
7
|
-
const uikit_1 = require("@gravity-ui/uikit");
|
|
8
|
-
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
|
9
|
-
const MAX_TAB_TITLE_LENGTH = 20;
|
|
10
|
-
const getSpecTypeDefaultValue = (type) => {
|
|
11
|
-
switch (type) {
|
|
12
|
-
case dynamic_forms_1.SpecTypes.Array:
|
|
13
|
-
return [];
|
|
14
|
-
case dynamic_forms_1.SpecTypes.Boolean:
|
|
15
|
-
case dynamic_forms_1.SpecTypes.Number:
|
|
16
|
-
case dynamic_forms_1.SpecTypes.String:
|
|
17
|
-
return undefined;
|
|
18
|
-
default:
|
|
19
|
-
return {};
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
exports.getSpecTypeDefaultValue = getSpecTypeDefaultValue;
|
|
23
|
-
const useOneOf = ({ props, onTogglerChange }) => {
|
|
24
|
-
const { name, input, spec, Layout } = props;
|
|
25
|
-
const { order, disabled, oneOfParams } = spec.viewSpec;
|
|
26
|
-
const specProperties = react_1.default.useMemo(() => (lodash_1.default.isObjectLike(spec.properties) ? spec.properties : {}), [spec.properties]);
|
|
27
|
-
const [oneOfValue, setOneOfValue] = react_1.default.useState(() => {
|
|
28
|
-
let valueKeys;
|
|
29
|
-
if (lodash_1.default.isObjectLike(input.value)) {
|
|
30
|
-
const keys = Object.keys(input.value);
|
|
31
|
-
if (keys.length) {
|
|
32
|
-
valueKeys = keys;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return (valueKeys || order || Object.keys(specProperties))[0];
|
|
36
|
-
});
|
|
37
|
-
const onOneOfChange = react_1.default.useCallback(([newValue]) => {
|
|
38
|
-
var _a;
|
|
39
|
-
if (newValue !== oneOfValue) {
|
|
40
|
-
const specType = ((_a = specProperties[newValue]) === null || _a === void 0 ? void 0 : _a.type) || dynamic_forms_1.SpecTypes.Object;
|
|
41
|
-
input.onChange((0, exports.getSpecTypeDefaultValue)(specType));
|
|
42
|
-
setOneOfValue(newValue);
|
|
43
|
-
onTogglerChange === null || onTogglerChange === void 0 ? void 0 : onTogglerChange(newValue);
|
|
44
|
-
}
|
|
45
|
-
}, [setOneOfValue, input, oneOfValue, specProperties, onTogglerChange]);
|
|
46
|
-
const options = react_1.default.useMemo(() => (order || Object.keys(specProperties)).map((value) => {
|
|
47
|
-
var _a, _b;
|
|
48
|
-
const title = ((_a = spec.description) === null || _a === void 0 ? void 0 : _a[value]) ||
|
|
49
|
-
((_b = specProperties[value]) === null || _b === void 0 ? void 0 : _b.viewSpec.layoutTitle) ||
|
|
50
|
-
value ||
|
|
51
|
-
'';
|
|
52
|
-
return {
|
|
53
|
-
value,
|
|
54
|
-
title,
|
|
55
|
-
content: title,
|
|
56
|
-
};
|
|
57
|
-
}), [spec.description, order, specProperties]);
|
|
58
|
-
const togglerInput = react_1.default.useMemo(() => {
|
|
59
|
-
if ((oneOfParams === null || oneOfParams === void 0 ? void 0 : oneOfParams.toggler) !== 'radio' &&
|
|
60
|
-
((oneOfParams === null || oneOfParams === void 0 ? void 0 : oneOfParams.toggler) === 'select' ||
|
|
61
|
-
options.length > 3 ||
|
|
62
|
-
lodash_1.default.some(options, ({ title }) => title.length > MAX_TAB_TITLE_LENGTH))) {
|
|
63
|
-
return (react_1.default.createElement(uikit_1.Select, { width: "max", value: [oneOfValue], onUpdate: onOneOfChange, options: options, disabled: disabled, filterable: options.length > 7, qa: name }));
|
|
64
|
-
}
|
|
65
|
-
return (react_1.default.createElement(uikit_1.RadioButton, { value: oneOfValue, onChange: (event) => onOneOfChange([event.target.value]), disabled: disabled, qa: name }, options.map(({ value, title }) => (react_1.default.createElement(uikit_1.RadioButton.Option, { key: value, value: value }, title)))));
|
|
66
|
-
}, [options, oneOfValue, onOneOfChange, name, oneOfParams === null || oneOfParams === void 0 ? void 0 : oneOfParams.toggler, disabled]);
|
|
67
|
-
const toggler = react_1.default.useMemo(() => {
|
|
68
|
-
if (Layout) {
|
|
69
|
-
return react_1.default.createElement(Layout, Object.assign({}, props), togglerInput);
|
|
70
|
-
}
|
|
71
|
-
return togglerInput;
|
|
72
|
-
}, [Layout, togglerInput, props]);
|
|
73
|
-
return { oneOfValue, specProperties, toggler, togglerInput };
|
|
74
|
-
};
|
|
75
|
-
exports.useOneOf = useOneOf;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.detectParserType = exports.ParserType = void 0;
|
|
4
|
-
const dynamic_forms_1 = require("@gravity-ui/dynamic-forms");
|
|
5
|
-
var ParserType;
|
|
6
|
-
(function (ParserType) {
|
|
7
|
-
ParserType["Object"] = "object";
|
|
8
|
-
ParserType["Array"] = "array";
|
|
9
|
-
ParserType["Children"] = "children";
|
|
10
|
-
ParserType["OneOf"] = "oneOf";
|
|
11
|
-
ParserType["Primitive"] = "primitive";
|
|
12
|
-
})(ParserType = exports.ParserType || (exports.ParserType = {}));
|
|
13
|
-
const isOneOf = (data) => 'oneOf' in data;
|
|
14
|
-
const isObject = (data) => 'properties' in data;
|
|
15
|
-
const isArray = (data) => 'type' in data && data.type === dynamic_forms_1.SpecTypes.Array;
|
|
16
|
-
const isChildren = (data) => 'type' in data &&
|
|
17
|
-
data.type === dynamic_forms_1.SpecTypes.Array &&
|
|
18
|
-
'items' in data &&
|
|
19
|
-
typeof data.items !== 'undefined' &&
|
|
20
|
-
'$ref' in data.items;
|
|
21
|
-
//detector applying order matters!
|
|
22
|
-
const ParserTypeDetectors = [
|
|
23
|
-
{ type: ParserType.OneOf, detector: isOneOf },
|
|
24
|
-
{ type: ParserType.Children, detector: isChildren },
|
|
25
|
-
{ type: ParserType.Object, detector: isObject },
|
|
26
|
-
{ type: ParserType.Array, detector: isArray },
|
|
27
|
-
];
|
|
28
|
-
const detectParserType = (data) => {
|
|
29
|
-
for (const { type, detector } of ParserTypeDetectors) {
|
|
30
|
-
if (detector(data)) {
|
|
31
|
-
return type;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return ParserType.Primitive;
|
|
35
|
-
};
|
|
36
|
-
exports.detectParserType = detectParserType;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { Schema } from '../../../schema';
|
|
2
|
-
import { FormSpecs } from './types';
|
|
3
|
-
declare class FormSpecParser {
|
|
4
|
-
private schema;
|
|
5
|
-
private definitions;
|
|
6
|
-
/**
|
|
7
|
-
* Transforms page-constructor json schema into dynamic-forms specs for each block
|
|
8
|
-
*
|
|
9
|
-
* @param schema {Schema} - page-constructor json schema
|
|
10
|
-
* @returns {FormSpecs} - object containig dynamic-forms specs for each constructor block
|
|
11
|
-
*/
|
|
12
|
-
parse(schema: Schema): FormSpecs;
|
|
13
|
-
private getChildrenSpec;
|
|
14
|
-
private getRequiredProperties;
|
|
15
|
-
private childrenParser;
|
|
16
|
-
private oneOfParser;
|
|
17
|
-
private arrayParser;
|
|
18
|
-
private objectParser;
|
|
19
|
-
private primitiveParser;
|
|
20
|
-
private schemaParserMap;
|
|
21
|
-
private parseSchemaProperty;
|
|
22
|
-
private getBlocksSpec;
|
|
23
|
-
private getPageSpec;
|
|
24
|
-
private getFormSpec;
|
|
25
|
-
private init;
|
|
26
|
-
}
|
|
27
|
-
declare const _default: FormSpecParser;
|
|
28
|
-
export default _default;
|