@doyourjob/gravity-ui-page-constructor 5.31.58 → 5.31.59

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.
Files changed (35) hide show
  1. package/build/cjs/blocks/FormWallBlock/FormWallBlock.css +11 -0
  2. package/build/cjs/blocks/FormWallBlock/FormWallBlock.d.ts +4 -0
  3. package/build/cjs/blocks/FormWallBlock/FormWallBlock.js +55 -0
  4. package/build/cjs/blocks/FormWallBlock/schema.d.ts +52 -0
  5. package/build/cjs/blocks/FormWallBlock/schema.js +19 -0
  6. package/build/cjs/blocks/index.d.ts +1 -0
  7. package/build/cjs/blocks/index.js +3 -1
  8. package/build/cjs/constructor-items.d.ts +1 -0
  9. package/build/cjs/constructor-items.js +1 -0
  10. package/build/cjs/containers/PageConstructor/components/ConstructorBlocks/ConstructorBlocks.js +3 -0
  11. package/build/cjs/models/constructor-items/blocks.d.ts +9 -1
  12. package/build/cjs/models/constructor-items/blocks.js +1 -0
  13. package/build/cjs/schema/constants.js +2 -1
  14. package/build/cjs/schema/validators/blocks.d.ts +1 -0
  15. package/build/cjs/schema/validators/blocks.js +1 -0
  16. package/build/esm/blocks/FormWallBlock/FormWallBlock.css +11 -0
  17. package/build/esm/blocks/FormWallBlock/FormWallBlock.d.ts +5 -0
  18. package/build/esm/blocks/FormWallBlock/FormWallBlock.js +52 -0
  19. package/build/esm/blocks/FormWallBlock/schema.d.ts +52 -0
  20. package/build/esm/blocks/FormWallBlock/schema.js +16 -0
  21. package/build/esm/blocks/index.d.ts +1 -0
  22. package/build/esm/blocks/index.js +1 -0
  23. package/build/esm/constructor-items.d.ts +1 -0
  24. package/build/esm/constructor-items.js +2 -1
  25. package/build/esm/containers/PageConstructor/components/ConstructorBlocks/ConstructorBlocks.js +3 -0
  26. package/build/esm/models/constructor-items/blocks.d.ts +9 -1
  27. package/build/esm/models/constructor-items/blocks.js +1 -0
  28. package/build/esm/schema/constants.js +3 -2
  29. package/build/esm/schema/validators/blocks.d.ts +1 -0
  30. package/build/esm/schema/validators/blocks.js +1 -0
  31. package/package.json +1 -1
  32. package/schema/index.js +1 -1
  33. package/server/models/constructor-items/blocks.d.ts +9 -1
  34. package/server/models/constructor-items/blocks.js +1 -0
  35. package/widget/index.js +1 -1
@@ -0,0 +1,11 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .pc-form-wall-block {
4
+ backdrop-filter: blur(5px);
5
+ }
6
+ .pc-form-wall-block__container {
7
+ background-color: var(--g-color-base-background);
8
+ border-radius: var(--pc-border-radius);
9
+ padding: 32px;
10
+ height: 100%;
11
+ }
@@ -0,0 +1,4 @@
1
+ import { FormWallBlockProps } from '../../models';
2
+ export declare const FORM_WALL_BLOCK_STORAGE_KEY = "FORM_WALL_BLOCK_STORAGE_KEY";
3
+ declare const FormWallBlock: (props: FormWallBlockProps) => JSX.Element;
4
+ export default FormWallBlock;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FORM_WALL_BLOCK_STORAGE_KEY = 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 formListContext_1 = require("../../context/formListContext");
8
+ const formsContext_1 = require("../../context/formsContext");
9
+ const theme_1 = require("../../context/theme");
10
+ const sub_blocks_1 = require("../../sub-blocks");
11
+ const utils_1 = require("../../utils");
12
+ exports.FORM_WALL_BLOCK_STORAGE_KEY = 'FORM_WALL_BLOCK_STORAGE_KEY';
13
+ const b = (0, utils_1.block)('form-wall-block');
14
+ const FormWallBlock = (props) => {
15
+ const [showForm, setShowForm] = (0, react_1.useState)(false);
16
+ const { formData, slug } = props;
17
+ const formList = (0, react_1.useContext)(formListContext_1.FormListContext);
18
+ const formsConfig = (0, react_1.useContext)(formsContext_1.FormsContext);
19
+ const form = (0, react_1.useMemo)(() => formList.items.find((item) => item.slug === slug), [slug, formList.items]);
20
+ const theme = (0, theme_1.useTheme)();
21
+ const localStorageKey = (0, react_1.useMemo)(() => { var _a; return String(slug || ((_a = formData === null || formData === void 0 ? void 0 : formData.hubspot) === null || _a === void 0 ? void 0 : _a.formId) || window.location.pathname); }, [slug, formData]);
22
+ const handleSubmit = (0, react_1.useCallback)(() => {
23
+ setShowForm(false);
24
+ try {
25
+ const storageData = JSON.parse(window.localStorage.getItem(exports.FORM_WALL_BLOCK_STORAGE_KEY) || '{}');
26
+ storageData[localStorageKey] = true;
27
+ window.localStorage.setItem(exports.FORM_WALL_BLOCK_STORAGE_KEY, JSON.stringify(storageData));
28
+ }
29
+ catch (e) {
30
+ // eslint-disable-next-line no-console
31
+ console.log(e);
32
+ }
33
+ }, [localStorageKey]);
34
+ const data = (0, react_1.useMemo)(() => {
35
+ return form ? form : formData.hubspot;
36
+ }, [form, formData.hubspot]);
37
+ (0, react_1.useEffect)(() => {
38
+ try {
39
+ const storageData = JSON.parse(window.localStorage.getItem(exports.FORM_WALL_BLOCK_STORAGE_KEY) || '{}');
40
+ if (!storageData[localStorageKey]) {
41
+ setShowForm(true);
42
+ }
43
+ }
44
+ catch (e) {
45
+ // eslint-disable-next-line no-console
46
+ console.log(e);
47
+ }
48
+ // eslint-disable-next-line react-hooks/exhaustive-deps
49
+ }, []);
50
+ const themedFormData = (0, utils_1.getThemedValue)(data, theme);
51
+ return (react_1.default.createElement(uikit_1.Modal, { open: showForm, className: b(), disableEscapeKeyDown: true, disableOutsideClick: true },
52
+ react_1.default.createElement("div", { className: b('container') },
53
+ react_1.default.createElement(sub_blocks_1.HubspotForm, Object.assign({ createDOMElement: true }, formsConfig.hubspot, themedFormData, { onSubmit: handleSubmit })))));
54
+ };
55
+ exports.default = FormWallBlock;
@@ -0,0 +1,52 @@
1
+ export declare const FormWallBlock: {
2
+ 'form-wall-block': {
3
+ additionalProperties: boolean;
4
+ properties: {
5
+ slug: {
6
+ type: string;
7
+ };
8
+ formData: {
9
+ type: string;
10
+ optionName: string;
11
+ properties: {
12
+ hubspot: {
13
+ oneOf: (({
14
+ type: string;
15
+ required: string[];
16
+ properties: {
17
+ region: {
18
+ type: string;
19
+ };
20
+ portalId: {
21
+ type: string;
22
+ };
23
+ formId: {
24
+ type: string;
25
+ };
26
+ formInstanceId: {
27
+ type: string;
28
+ };
29
+ type: {};
30
+ when: {
31
+ type: string;
32
+ };
33
+ };
34
+ } & {
35
+ optionName: string;
36
+ }) | {
37
+ type: string;
38
+ additionalProperties: boolean;
39
+ required: import("../..").Theme[];
40
+ properties: {};
41
+ optionName: string;
42
+ })[];
43
+ };
44
+ };
45
+ };
46
+ type: {};
47
+ when: {
48
+ type: string;
49
+ };
50
+ };
51
+ };
52
+ };
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FormWallBlock = void 0;
4
+ const common_1 = require("../../schema/validators/common");
5
+ const schema_1 = require("../../sub-blocks/HubspotForm/schema");
6
+ exports.FormWallBlock = {
7
+ 'form-wall-block': {
8
+ additionalProperties: false,
9
+ properties: Object.assign(Object.assign({}, common_1.BaseProps), { slug: {
10
+ type: 'string',
11
+ }, formData: {
12
+ type: 'object',
13
+ optionName: 'hubspot',
14
+ properties: {
15
+ hubspot: (0, common_1.withTheme)(schema_1.HubspotFormProps),
16
+ },
17
+ } }),
18
+ },
19
+ };
@@ -21,6 +21,7 @@ export { default as MarqueeLinksBlock } from './MarqueeLinks/MarqueeLinks';
21
21
  export { default as SolutionsBlock } from './Solutions/Solutions';
22
22
  export { default as ServicesBlock } from './Services/Services';
23
23
  export { default as QuotesBlock } from './Quotes/Quotes';
24
+ export { default as FormWallBlock } from './FormWallBlock/FormWallBlock';
24
25
  export { default as LinkTableBlock } from './LinkTable/LinkTable';
25
26
  export { default as EventsFeedBlock } from './EventsFeed/EventsFeed';
26
27
  export { default as BlogFeedBlock } from './BlogFeed/BlogFeed';
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.HighlightTableBlock = exports.PressReleasesBlock = exports.RelevantPostsBlock = exports.BlogFeedBlock = exports.EventsFeedBlock = exports.LinkTableBlock = exports.QuotesBlock = exports.ServicesBlock = exports.SolutionsBlock = exports.MarqueeLinksBlock = exports.FormBlock = exports.FilterBlock = exports.ShareBlock = exports.ContentLayoutBlock = exports.CardLayoutBlock = exports.HeaderSliderBlock = exports.IconsBlock = exports.HeaderBlock = exports.TabsBlock = exports.TableBlock = exports.QuestionsBlock = exports.PromoFeaturesBlock = exports.ExtendedFeaturesBlock = exports.SliderBlock = exports.MapBlock = exports.MediaBlock = exports.InfoBlock = exports.CompaniesBlock = exports.BannerBlock = void 0;
6
+ exports.HighlightTableBlock = exports.PressReleasesBlock = exports.RelevantPostsBlock = exports.BlogFeedBlock = exports.EventsFeedBlock = exports.LinkTableBlock = exports.FormWallBlock = exports.QuotesBlock = exports.ServicesBlock = exports.SolutionsBlock = exports.MarqueeLinksBlock = exports.FormBlock = exports.FilterBlock = exports.ShareBlock = exports.ContentLayoutBlock = exports.CardLayoutBlock = exports.HeaderSliderBlock = exports.IconsBlock = exports.HeaderBlock = exports.TabsBlock = exports.TableBlock = exports.QuestionsBlock = exports.PromoFeaturesBlock = exports.ExtendedFeaturesBlock = exports.SliderBlock = exports.MapBlock = exports.MediaBlock = exports.InfoBlock = exports.CompaniesBlock = exports.BannerBlock = void 0;
7
7
  var Banner_1 = require("./Banner/Banner");
8
8
  Object.defineProperty(exports, "BannerBlock", { enumerable: true, get: function () { return __importDefault(Banner_1).default; } });
9
9
  var Companies_1 = require("./Companies/Companies");
@@ -50,6 +50,8 @@ var Services_1 = require("./Services/Services");
50
50
  Object.defineProperty(exports, "ServicesBlock", { enumerable: true, get: function () { return __importDefault(Services_1).default; } });
51
51
  var Quotes_1 = require("./Quotes/Quotes");
52
52
  Object.defineProperty(exports, "QuotesBlock", { enumerable: true, get: function () { return __importDefault(Quotes_1).default; } });
53
+ var FormWallBlock_1 = require("./FormWallBlock/FormWallBlock");
54
+ Object.defineProperty(exports, "FormWallBlock", { enumerable: true, get: function () { return __importDefault(FormWallBlock_1).default; } });
53
55
  var LinkTable_1 = require("./LinkTable/LinkTable");
54
56
  Object.defineProperty(exports, "LinkTableBlock", { enumerable: true, get: function () { return __importDefault(LinkTable_1).default; } });
55
57
  var EventsFeed_1 = require("./EventsFeed/EventsFeed");
@@ -28,6 +28,7 @@ export declare const blockMap: {
28
28
  "link-table-block": ({ title, items }: import("./models").LinkTableBlockProps) => JSX.Element;
29
29
  "services-block": ({ title, serviceLinkType }: import("./models").ServicesBlockProps) => JSX.Element;
30
30
  "quotes-block": ({ theme: localTheme, items, background, backgroundColor, }: import("./models").QuotesBlockProps) => JSX.Element;
31
+ "form-wall-block": (props: import("./models").FormWallBlockProps) => JSX.Element;
31
32
  "slider-new-block": ({ animated, title, description, type, anchorId, arrows, adaptive, autoplay: autoplayMs, dots, className, dotsClassName, disclaimer, children, blockClassName, arrowSize, slidesToShow, onSlideChange, onSlideChangeTransitionStart, onSlideChangeTransitionEnd, onActiveIndexChange, onBreakpoint, }: import("react").PropsWithChildren<import("./blocks/SliderNew/Slider").SliderNewProps>) => JSX.Element;
32
33
  };
33
34
  export declare const subBlockMap: {
@@ -38,6 +38,7 @@ exports.blockMap = {
38
38
  [models_1.BlockType.LinkTableBlock]: blocks_1.LinkTableBlock,
39
39
  [models_1.BlockType.ServicesBlock]: blocks_1.ServicesBlock,
40
40
  [models_1.BlockType.QuotesBlock]: blocks_1.QuotesBlock,
41
+ [models_1.BlockType.FormWallBlock]: blocks_1.FormWallBlock,
41
42
  // unstable
42
43
  [models_1.BlockType.SliderNewBlock]: unstable_1.SliderNewBlock,
43
44
  };
@@ -48,6 +48,9 @@ const ConstructorBlocks = ({ items }) => {
48
48
  }
49
49
  const styles = (0, utils_1.getBlockBackgroundStyles)(('blockBackground' in item &&
50
50
  item.blockBackground));
51
+ if (item.type === models_1.BlockType.FormWallBlock) {
52
+ return react_1.default.createElement(react_1.default.Fragment, { key: blockId }, itemElement);
53
+ }
51
54
  return (react_1.default.createElement(grid_1.Grid, { key: blockId, className: b({
52
55
  'no-horizontal-scroll': item.type === models_1.BlockType.QuotesBlock ||
53
56
  ('backgroundFull' in item && Boolean(item.backgroundFull)),
@@ -29,6 +29,7 @@ export declare enum BlockType {
29
29
  SolutionsBlock = "solutions-block",
30
30
  ServicesBlock = "services-block",
31
31
  QuotesBlock = "quotes-block",
32
+ FormWallBlock = "form-wall-block",
32
33
  LinkTableBlock = "link-table-block",
33
34
  EventsFeedBlock = "events-feed-block",
34
35
  BlogFeedBlock = "blog-feed-block",
@@ -292,6 +293,10 @@ export interface TableBlockProps {
292
293
  links?: LinkProps[];
293
294
  buttons?: ButtonProps[];
294
295
  }
296
+ export interface FormWallBlockProps {
297
+ formData: FormBlockHubspotData;
298
+ slug?: string;
299
+ }
295
300
  export interface HighlightTableData {
296
301
  content: string[][];
297
302
  customColumnWidth?: (12 | 6 | 4 | 3 | 2)[];
@@ -582,10 +587,13 @@ export type RelevantPostsBlockModel = {
582
587
  export type PressReleasesBlockModel = {
583
588
  type: BlockType.PressReleasesBlock;
584
589
  } & PressReleasesBlockProps;
590
+ export type FormWallBlockModel = {
591
+ type: BlockType.FormWallBlock;
592
+ } & FormWallBlockProps;
585
593
  export type SliderNewBlockModel = {
586
594
  type: BlockType.SliderNewBlock;
587
595
  } & SliderNewProps;
588
- type BlockModels = SliderBlockModel | ExtendedFeaturesBlockModel | PromoFeaturesBlockModel | QuestionsBlockModel | BannerBlockModel | CompaniesBlockModel | MediaBlockModel | MapBlockModel | InfoBlockModel | TableBlockModel | HighlightTableBlockModel | TabsBlockModel | HeaderBlockModel | IconsBlockModel | HeaderSliderBlockModel | CardLayoutBlockModel | ContentLayoutBlockModel | ShareBLockModel | FilterBlockModel | FormBlockModel | MarqueeLinksBlockModel | SolutionsBlockModel | ServicesBlockModel | QuotesBlockModel | LinkTableBlockModel | EventsFeedBlockModel | BlogFeedBlockModel | RelevantPostsBlockModel | PressReleasesBlockModel;
596
+ type BlockModels = SliderBlockModel | ExtendedFeaturesBlockModel | PromoFeaturesBlockModel | QuestionsBlockModel | BannerBlockModel | CompaniesBlockModel | MediaBlockModel | MapBlockModel | InfoBlockModel | TableBlockModel | HighlightTableBlockModel | TabsBlockModel | HeaderBlockModel | IconsBlockModel | HeaderSliderBlockModel | CardLayoutBlockModel | ContentLayoutBlockModel | ShareBLockModel | FilterBlockModel | FormBlockModel | MarqueeLinksBlockModel | SolutionsBlockModel | ServicesBlockModel | QuotesBlockModel | LinkTableBlockModel | EventsFeedBlockModel | BlogFeedBlockModel | RelevantPostsBlockModel | PressReleasesBlockModel | FormWallBlockModel;
589
597
  type UnstableBlockModels = SliderNewBlockModel;
590
598
  export type Block = (BlockModels | UnstableBlockModels) & BlockBaseProps;
591
599
  export {};
@@ -26,6 +26,7 @@ var BlockType;
26
26
  BlockType["SolutionsBlock"] = "solutions-block";
27
27
  BlockType["ServicesBlock"] = "services-block";
28
28
  BlockType["QuotesBlock"] = "quotes-block";
29
+ BlockType["FormWallBlock"] = "form-wall-block";
29
30
  BlockType["LinkTableBlock"] = "link-table-block";
30
31
  BlockType["EventsFeedBlock"] = "events-feed-block";
31
32
  BlockType["BlogFeedBlock"] = "blog-feed-block";
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.constructorCardSchemaNames = exports.constructorBlockSchemaNames = exports.cardSchemas = exports.blockSchemas = void 0;
4
4
  const blocks_1 = require("./validators/blocks");
5
5
  const sub_blocks_1 = require("./validators/sub-blocks");
6
- exports.blockSchemas = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, sub_blocks_1.Divider), blocks_1.ExtendedFeaturesBlock), blocks_1.PromoFeaturesBlock), blocks_1.SliderBlock), blocks_1.QuestionsBlock), blocks_1.HeaderBlock), blocks_1.BannerBlock), blocks_1.CompaniesBlock), blocks_1.MediaBlock), blocks_1.MapBlock), blocks_1.InfoBlock), blocks_1.TableBlock), blocks_1.HighlightTableBlock), blocks_1.TabsBlock), blocks_1.HeaderSliderBlock), blocks_1.IconsBlock), blocks_1.CardLayoutBlock), blocks_1.ContentLayoutBlock), blocks_1.ShareBlock), blocks_1.FilterBlock), blocks_1.FormBlock), blocks_1.SliderNewBlock), blocks_1.MarqueeLinksBlock), blocks_1.SolutionsBlock), blocks_1.ServicesBlock), blocks_1.QuotesBlock), blocks_1.LinkTableBlock), blocks_1.EventsFeedBlock), blocks_1.BlogFeedBlock), blocks_1.RelevantPostsBlock), blocks_1.PressReleasesBlock);
6
+ exports.blockSchemas = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, sub_blocks_1.Divider), blocks_1.ExtendedFeaturesBlock), blocks_1.PromoFeaturesBlock), blocks_1.SliderBlock), blocks_1.QuestionsBlock), blocks_1.HeaderBlock), blocks_1.BannerBlock), blocks_1.CompaniesBlock), blocks_1.MediaBlock), blocks_1.MapBlock), blocks_1.InfoBlock), blocks_1.TableBlock), blocks_1.HighlightTableBlock), blocks_1.TabsBlock), blocks_1.HeaderSliderBlock), blocks_1.IconsBlock), blocks_1.CardLayoutBlock), blocks_1.ContentLayoutBlock), blocks_1.ShareBlock), blocks_1.FilterBlock), blocks_1.FormBlock), blocks_1.SliderNewBlock), blocks_1.MarqueeLinksBlock), blocks_1.SolutionsBlock), blocks_1.ServicesBlock), blocks_1.QuotesBlock), blocks_1.LinkTableBlock), blocks_1.EventsFeedBlock), blocks_1.BlogFeedBlock), blocks_1.RelevantPostsBlock), blocks_1.PressReleasesBlock), blocks_1.FormWallBlock);
7
7
  exports.cardSchemas = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, sub_blocks_1.MediaCardBlock), blocks_1.BannerCard), sub_blocks_1.PriceDetailedBlock), sub_blocks_1.BackgroundCard), sub_blocks_1.Quote), sub_blocks_1.BasicCard), sub_blocks_1.PriceCardBlock), sub_blocks_1.ImageCard), sub_blocks_1.ContentLayoutCard), sub_blocks_1.Card), sub_blocks_1.PostCard), sub_blocks_1.FeedCard), sub_blocks_1.EventPersonCard), sub_blocks_1.AttachmentCard), sub_blocks_1.CaseStudyCard);
8
8
  exports.constructorBlockSchemaNames = [
9
9
  'divider',
@@ -20,6 +20,7 @@ exports.constructorBlockSchemaNames = [
20
20
  'media-block',
21
21
  'map-block',
22
22
  'info-block',
23
+ 'form-wall-block',
23
24
  'table-block',
24
25
  'tabs-block',
25
26
  'marquee-links-block',
@@ -26,5 +26,6 @@ export * from '../../blocks/LinkTable/schema';
26
26
  export * from '../../blocks/EventsFeed/schema';
27
27
  export * from '../../blocks/BlogFeed/schema';
28
28
  export * from '../../blocks/RelevantPosts/schema';
29
+ export * from '../../blocks/FormWallBlock/schema';
29
30
  export * from '../../blocks/PressReleases/schema';
30
31
  export * from '../../blocks/HighlightTable/schema';
@@ -29,5 +29,6 @@ tslib_1.__exportStar(require("../../blocks/LinkTable/schema"), exports);
29
29
  tslib_1.__exportStar(require("../../blocks/EventsFeed/schema"), exports);
30
30
  tslib_1.__exportStar(require("../../blocks/BlogFeed/schema"), exports);
31
31
  tslib_1.__exportStar(require("../../blocks/RelevantPosts/schema"), exports);
32
+ tslib_1.__exportStar(require("../../blocks/FormWallBlock/schema"), exports);
32
33
  tslib_1.__exportStar(require("../../blocks/PressReleases/schema"), exports);
33
34
  tslib_1.__exportStar(require("../../blocks/HighlightTable/schema"), exports);
@@ -0,0 +1,11 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .pc-form-wall-block {
4
+ backdrop-filter: blur(5px);
5
+ }
6
+ .pc-form-wall-block__container {
7
+ background-color: var(--g-color-base-background);
8
+ border-radius: var(--pc-border-radius);
9
+ padding: 32px;
10
+ height: 100%;
11
+ }
@@ -0,0 +1,5 @@
1
+ import { FormWallBlockProps } from '../../models';
2
+ import './FormWallBlock.css';
3
+ export declare const FORM_WALL_BLOCK_STORAGE_KEY = "FORM_WALL_BLOCK_STORAGE_KEY";
4
+ declare const FormWallBlock: (props: FormWallBlockProps) => JSX.Element;
5
+ export default FormWallBlock;
@@ -0,0 +1,52 @@
1
+ import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react';
2
+ import { Modal } from '@gravity-ui/uikit';
3
+ import { FormListContext } from '../../context/formListContext';
4
+ import { FormsContext } from '../../context/formsContext';
5
+ import { useTheme } from '../../context/theme';
6
+ import { HubspotForm } from '../../sub-blocks';
7
+ import { block, getThemedValue } from '../../utils';
8
+ import './FormWallBlock.css';
9
+ export const FORM_WALL_BLOCK_STORAGE_KEY = 'FORM_WALL_BLOCK_STORAGE_KEY';
10
+ const b = block('form-wall-block');
11
+ const FormWallBlock = (props) => {
12
+ const [showForm, setShowForm] = useState(false);
13
+ const { formData, slug } = props;
14
+ const formList = useContext(FormListContext);
15
+ const formsConfig = useContext(FormsContext);
16
+ const form = useMemo(() => formList.items.find((item) => item.slug === slug), [slug, formList.items]);
17
+ const theme = useTheme();
18
+ const localStorageKey = useMemo(() => { var _a; return String(slug || ((_a = formData === null || formData === void 0 ? void 0 : formData.hubspot) === null || _a === void 0 ? void 0 : _a.formId) || window.location.pathname); }, [slug, formData]);
19
+ const handleSubmit = useCallback(() => {
20
+ setShowForm(false);
21
+ try {
22
+ const storageData = JSON.parse(window.localStorage.getItem(FORM_WALL_BLOCK_STORAGE_KEY) || '{}');
23
+ storageData[localStorageKey] = true;
24
+ window.localStorage.setItem(FORM_WALL_BLOCK_STORAGE_KEY, JSON.stringify(storageData));
25
+ }
26
+ catch (e) {
27
+ // eslint-disable-next-line no-console
28
+ console.log(e);
29
+ }
30
+ }, [localStorageKey]);
31
+ const data = useMemo(() => {
32
+ return form ? form : formData.hubspot;
33
+ }, [form, formData.hubspot]);
34
+ useEffect(() => {
35
+ try {
36
+ const storageData = JSON.parse(window.localStorage.getItem(FORM_WALL_BLOCK_STORAGE_KEY) || '{}');
37
+ if (!storageData[localStorageKey]) {
38
+ setShowForm(true);
39
+ }
40
+ }
41
+ catch (e) {
42
+ // eslint-disable-next-line no-console
43
+ console.log(e);
44
+ }
45
+ // eslint-disable-next-line react-hooks/exhaustive-deps
46
+ }, []);
47
+ const themedFormData = getThemedValue(data, theme);
48
+ return (React.createElement(Modal, { open: showForm, className: b(), disableEscapeKeyDown: true, disableOutsideClick: true },
49
+ React.createElement("div", { className: b('container') },
50
+ React.createElement(HubspotForm, Object.assign({ createDOMElement: true }, formsConfig.hubspot, themedFormData, { onSubmit: handleSubmit })))));
51
+ };
52
+ export default FormWallBlock;
@@ -0,0 +1,52 @@
1
+ export declare const FormWallBlock: {
2
+ 'form-wall-block': {
3
+ additionalProperties: boolean;
4
+ properties: {
5
+ slug: {
6
+ type: string;
7
+ };
8
+ formData: {
9
+ type: string;
10
+ optionName: string;
11
+ properties: {
12
+ hubspot: {
13
+ oneOf: (({
14
+ type: string;
15
+ required: string[];
16
+ properties: {
17
+ region: {
18
+ type: string;
19
+ };
20
+ portalId: {
21
+ type: string;
22
+ };
23
+ formId: {
24
+ type: string;
25
+ };
26
+ formInstanceId: {
27
+ type: string;
28
+ };
29
+ type: {};
30
+ when: {
31
+ type: string;
32
+ };
33
+ };
34
+ } & {
35
+ optionName: string;
36
+ }) | {
37
+ type: string;
38
+ additionalProperties: boolean;
39
+ required: import("../..").Theme[];
40
+ properties: {};
41
+ optionName: string;
42
+ })[];
43
+ };
44
+ };
45
+ };
46
+ type: {};
47
+ when: {
48
+ type: string;
49
+ };
50
+ };
51
+ };
52
+ };
@@ -0,0 +1,16 @@
1
+ import { BaseProps, withTheme } from '../../schema/validators/common';
2
+ import { HubspotFormProps } from '../../sub-blocks/HubspotForm/schema';
3
+ export const FormWallBlock = {
4
+ 'form-wall-block': {
5
+ additionalProperties: false,
6
+ properties: Object.assign(Object.assign({}, BaseProps), { slug: {
7
+ type: 'string',
8
+ }, formData: {
9
+ type: 'object',
10
+ optionName: 'hubspot',
11
+ properties: {
12
+ hubspot: withTheme(HubspotFormProps),
13
+ },
14
+ } }),
15
+ },
16
+ };
@@ -21,6 +21,7 @@ export { default as MarqueeLinksBlock } from './MarqueeLinks/MarqueeLinks';
21
21
  export { default as SolutionsBlock } from './Solutions/Solutions';
22
22
  export { default as ServicesBlock } from './Services/Services';
23
23
  export { default as QuotesBlock } from './Quotes/Quotes';
24
+ export { default as FormWallBlock } from './FormWallBlock/FormWallBlock';
24
25
  export { default as LinkTableBlock } from './LinkTable/LinkTable';
25
26
  export { default as EventsFeedBlock } from './EventsFeed/EventsFeed';
26
27
  export { default as BlogFeedBlock } from './BlogFeed/BlogFeed';
@@ -21,6 +21,7 @@ export { default as MarqueeLinksBlock } from './MarqueeLinks/MarqueeLinks';
21
21
  export { default as SolutionsBlock } from './Solutions/Solutions';
22
22
  export { default as ServicesBlock } from './Services/Services';
23
23
  export { default as QuotesBlock } from './Quotes/Quotes';
24
+ export { default as FormWallBlock } from './FormWallBlock/FormWallBlock';
24
25
  export { default as LinkTableBlock } from './LinkTable/LinkTable';
25
26
  export { default as EventsFeedBlock } from './EventsFeed/EventsFeed';
26
27
  export { default as BlogFeedBlock } from './BlogFeed/BlogFeed';
@@ -28,6 +28,7 @@ export declare const blockMap: {
28
28
  "link-table-block": ({ title, items }: import("./models").LinkTableBlockProps) => JSX.Element;
29
29
  "services-block": ({ title, serviceLinkType }: import("./models").ServicesBlockProps) => JSX.Element;
30
30
  "quotes-block": ({ theme: localTheme, items, background, backgroundColor, }: import("./models").QuotesBlockProps) => JSX.Element;
31
+ "form-wall-block": (props: import("./models").FormWallBlockProps) => JSX.Element;
31
32
  "slider-new-block": ({ animated, title, description, type, anchorId, arrows, adaptive, autoplay: autoplayMs, dots, className, dotsClassName, disclaimer, children, blockClassName, arrowSize, slidesToShow, onSlideChange, onSlideChangeTransitionStart, onSlideChangeTransitionEnd, onActiveIndexChange, onBreakpoint, }: import("react").PropsWithChildren<import("./blocks/SliderNew/Slider").SliderNewProps>) => JSX.Element;
32
33
  };
33
34
  export declare const subBlockMap: {
@@ -1,4 +1,4 @@
1
- import { BannerBlock, BlogFeedBlock, CardLayoutBlock, CompaniesBlock, ContentLayoutBlock, EventsFeedBlock, ExtendedFeaturesBlock, FilterBlock, FormBlock, HeaderBlock, HeaderSliderBlock, HighlightTableBlock, IconsBlock, InfoBlock, LinkTableBlock, MapBlock, MarqueeLinksBlock, MediaBlock, PressReleasesBlock, PromoFeaturesBlock, QuestionsBlock, QuotesBlock, RelevantPostsBlock, ServicesBlock, ShareBlock, SliderBlock, SolutionsBlock, TableBlock, TabsBlock, } from './blocks';
1
+ import { BannerBlock, BlogFeedBlock, CardLayoutBlock, CompaniesBlock, ContentLayoutBlock, EventsFeedBlock, ExtendedFeaturesBlock, FilterBlock, FormBlock, FormWallBlock, HeaderBlock, HeaderSliderBlock, HighlightTableBlock, IconsBlock, InfoBlock, LinkTableBlock, MapBlock, MarqueeLinksBlock, MediaBlock, PressReleasesBlock, PromoFeaturesBlock, QuestionsBlock, QuotesBlock, RelevantPostsBlock, ServicesBlock, ShareBlock, SliderBlock, SolutionsBlock, TableBlock, TabsBlock, } from './blocks';
2
2
  import { SliderNewBlock } from './blocks/unstable';
3
3
  import { BlockType, NavigationItemType, SubBlockType } from './models';
4
4
  import { GithubButton, NavigationButton, NavigationDropdown, NavigationLink, } from './navigation/components/NavigationItem';
@@ -34,6 +34,7 @@ export const blockMap = {
34
34
  [BlockType.LinkTableBlock]: LinkTableBlock,
35
35
  [BlockType.ServicesBlock]: ServicesBlock,
36
36
  [BlockType.QuotesBlock]: QuotesBlock,
37
+ [BlockType.FormWallBlock]: FormWallBlock,
37
38
  // unstable
38
39
  [BlockType.SliderNewBlock]: SliderNewBlock,
39
40
  };
@@ -45,6 +45,9 @@ export const ConstructorBlocks = ({ items }) => {
45
45
  }
46
46
  const styles = getBlockBackgroundStyles(('blockBackground' in item &&
47
47
  item.blockBackground));
48
+ if (item.type === BlockType.FormWallBlock) {
49
+ return React.createElement(React.Fragment, { key: blockId }, itemElement);
50
+ }
48
51
  return (React.createElement(Grid, { key: blockId, className: b({
49
52
  'no-horizontal-scroll': item.type === BlockType.QuotesBlock ||
50
53
  ('backgroundFull' in item && Boolean(item.backgroundFull)),
@@ -29,6 +29,7 @@ export declare enum BlockType {
29
29
  SolutionsBlock = "solutions-block",
30
30
  ServicesBlock = "services-block",
31
31
  QuotesBlock = "quotes-block",
32
+ FormWallBlock = "form-wall-block",
32
33
  LinkTableBlock = "link-table-block",
33
34
  EventsFeedBlock = "events-feed-block",
34
35
  BlogFeedBlock = "blog-feed-block",
@@ -292,6 +293,10 @@ export interface TableBlockProps {
292
293
  links?: LinkProps[];
293
294
  buttons?: ButtonProps[];
294
295
  }
296
+ export interface FormWallBlockProps {
297
+ formData: FormBlockHubspotData;
298
+ slug?: string;
299
+ }
295
300
  export interface HighlightTableData {
296
301
  content: string[][];
297
302
  customColumnWidth?: (12 | 6 | 4 | 3 | 2)[];
@@ -582,10 +587,13 @@ export type RelevantPostsBlockModel = {
582
587
  export type PressReleasesBlockModel = {
583
588
  type: BlockType.PressReleasesBlock;
584
589
  } & PressReleasesBlockProps;
590
+ export type FormWallBlockModel = {
591
+ type: BlockType.FormWallBlock;
592
+ } & FormWallBlockProps;
585
593
  export type SliderNewBlockModel = {
586
594
  type: BlockType.SliderNewBlock;
587
595
  } & SliderNewProps;
588
- type BlockModels = SliderBlockModel | ExtendedFeaturesBlockModel | PromoFeaturesBlockModel | QuestionsBlockModel | BannerBlockModel | CompaniesBlockModel | MediaBlockModel | MapBlockModel | InfoBlockModel | TableBlockModel | HighlightTableBlockModel | TabsBlockModel | HeaderBlockModel | IconsBlockModel | HeaderSliderBlockModel | CardLayoutBlockModel | ContentLayoutBlockModel | ShareBLockModel | FilterBlockModel | FormBlockModel | MarqueeLinksBlockModel | SolutionsBlockModel | ServicesBlockModel | QuotesBlockModel | LinkTableBlockModel | EventsFeedBlockModel | BlogFeedBlockModel | RelevantPostsBlockModel | PressReleasesBlockModel;
596
+ type BlockModels = SliderBlockModel | ExtendedFeaturesBlockModel | PromoFeaturesBlockModel | QuestionsBlockModel | BannerBlockModel | CompaniesBlockModel | MediaBlockModel | MapBlockModel | InfoBlockModel | TableBlockModel | HighlightTableBlockModel | TabsBlockModel | HeaderBlockModel | IconsBlockModel | HeaderSliderBlockModel | CardLayoutBlockModel | ContentLayoutBlockModel | ShareBLockModel | FilterBlockModel | FormBlockModel | MarqueeLinksBlockModel | SolutionsBlockModel | ServicesBlockModel | QuotesBlockModel | LinkTableBlockModel | EventsFeedBlockModel | BlogFeedBlockModel | RelevantPostsBlockModel | PressReleasesBlockModel | FormWallBlockModel;
589
597
  type UnstableBlockModels = SliderNewBlockModel;
590
598
  export type Block = (BlockModels | UnstableBlockModels) & BlockBaseProps;
591
599
  export {};
@@ -23,6 +23,7 @@ export var BlockType;
23
23
  BlockType["SolutionsBlock"] = "solutions-block";
24
24
  BlockType["ServicesBlock"] = "services-block";
25
25
  BlockType["QuotesBlock"] = "quotes-block";
26
+ BlockType["FormWallBlock"] = "form-wall-block";
26
27
  BlockType["LinkTableBlock"] = "link-table-block";
27
28
  BlockType["EventsFeedBlock"] = "events-feed-block";
28
29
  BlockType["BlogFeedBlock"] = "blog-feed-block";
@@ -1,6 +1,6 @@
1
- import { BannerBlock, BannerCard, BlogFeedBlock, CardLayoutBlock, CompaniesBlock, ContentLayoutBlock, EventsFeedBlock, ExtendedFeaturesBlock, FilterBlock, FormBlock, HeaderBlock, HeaderSliderBlock, HighlightTableBlock, IconsBlock, InfoBlock, LinkTableBlock, MapBlock, MarqueeLinksBlock, MediaBlock, PressReleasesBlock, PromoFeaturesBlock, QuestionsBlock, QuotesBlock, RelevantPostsBlock, ServicesBlock, ShareBlock, SliderBlock, SliderNewBlock, SolutionsBlock, TableBlock, TabsBlock, } from './validators/blocks';
1
+ import { BannerBlock, BannerCard, BlogFeedBlock, CardLayoutBlock, CompaniesBlock, ContentLayoutBlock, EventsFeedBlock, ExtendedFeaturesBlock, FilterBlock, FormBlock, FormWallBlock, HeaderBlock, HeaderSliderBlock, HighlightTableBlock, IconsBlock, InfoBlock, LinkTableBlock, MapBlock, MarqueeLinksBlock, MediaBlock, PressReleasesBlock, PromoFeaturesBlock, QuestionsBlock, QuotesBlock, RelevantPostsBlock, ServicesBlock, ShareBlock, SliderBlock, SliderNewBlock, SolutionsBlock, TableBlock, TabsBlock, } from './validators/blocks';
2
2
  import { AttachmentCard, BackgroundCard, BasicCard, Card, CaseStudyCard, ContentLayoutCard, Divider, EventPersonCard, FeedCard, ImageCard, MediaCardBlock, PostCard, PriceCardBlock, PriceDetailedBlock, Quote, } from './validators/sub-blocks';
3
- export const blockSchemas = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, Divider), ExtendedFeaturesBlock), PromoFeaturesBlock), SliderBlock), QuestionsBlock), HeaderBlock), BannerBlock), CompaniesBlock), MediaBlock), MapBlock), InfoBlock), TableBlock), HighlightTableBlock), TabsBlock), HeaderSliderBlock), IconsBlock), CardLayoutBlock), ContentLayoutBlock), ShareBlock), FilterBlock), FormBlock), SliderNewBlock), MarqueeLinksBlock), SolutionsBlock), ServicesBlock), QuotesBlock), LinkTableBlock), EventsFeedBlock), BlogFeedBlock), RelevantPostsBlock), PressReleasesBlock);
3
+ export const blockSchemas = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, Divider), ExtendedFeaturesBlock), PromoFeaturesBlock), SliderBlock), QuestionsBlock), HeaderBlock), BannerBlock), CompaniesBlock), MediaBlock), MapBlock), InfoBlock), TableBlock), HighlightTableBlock), TabsBlock), HeaderSliderBlock), IconsBlock), CardLayoutBlock), ContentLayoutBlock), ShareBlock), FilterBlock), FormBlock), SliderNewBlock), MarqueeLinksBlock), SolutionsBlock), ServicesBlock), QuotesBlock), LinkTableBlock), EventsFeedBlock), BlogFeedBlock), RelevantPostsBlock), PressReleasesBlock), FormWallBlock);
4
4
  export const cardSchemas = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, MediaCardBlock), BannerCard), PriceDetailedBlock), BackgroundCard), Quote), BasicCard), PriceCardBlock), ImageCard), ContentLayoutCard), Card), PostCard), FeedCard), EventPersonCard), AttachmentCard), CaseStudyCard);
5
5
  export const constructorBlockSchemaNames = [
6
6
  'divider',
@@ -17,6 +17,7 @@ export const constructorBlockSchemaNames = [
17
17
  'media-block',
18
18
  'map-block',
19
19
  'info-block',
20
+ 'form-wall-block',
20
21
  'table-block',
21
22
  'tabs-block',
22
23
  'marquee-links-block',
@@ -26,5 +26,6 @@ export * from '../../blocks/LinkTable/schema';
26
26
  export * from '../../blocks/EventsFeed/schema';
27
27
  export * from '../../blocks/BlogFeed/schema';
28
28
  export * from '../../blocks/RelevantPosts/schema';
29
+ export * from '../../blocks/FormWallBlock/schema';
29
30
  export * from '../../blocks/PressReleases/schema';
30
31
  export * from '../../blocks/HighlightTable/schema';
@@ -26,5 +26,6 @@ export * from '../../blocks/LinkTable/schema';
26
26
  export * from '../../blocks/EventsFeed/schema';
27
27
  export * from '../../blocks/BlogFeed/schema';
28
28
  export * from '../../blocks/RelevantPosts/schema';
29
+ export * from '../../blocks/FormWallBlock/schema';
29
30
  export * from '../../blocks/PressReleases/schema';
30
31
  export * from '../../blocks/HighlightTable/schema';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doyourjob/gravity-ui-page-constructor",
3
- "version": "5.31.58",
3
+ "version": "5.31.59",
4
4
  "description": "Gravity UI Page Constructor",
5
5
  "license": "MIT",
6
6
  "repository": {