@gravity-ui/page-constructor 5.26.0 → 5.26.1

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.
@@ -9,16 +9,30 @@ const icons_1 = require("@gravity-ui/icons");
9
9
  const uikit_1 = require("@gravity-ui/uikit");
10
10
  const constructor_items_1 = require("../../../constructor-items");
11
11
  const utils_1 = require("../../../utils");
12
- const data_1 = tslib_1.__importDefault(require("../../data"));
12
+ const data_1 = require("../../data");
13
13
  const b = (0, utils_1.block)('add-block');
14
14
  const sortedBlockNames = Object.keys(constructor_items_1.blockMap).sort();
15
15
  const AddBlock = ({ onAdd, className }) => {
16
16
  const [isOpened, setIsOpened] = (0, react_1.useState)(false);
17
17
  const [search, setSearch] = (0, react_1.useState)('');
18
+ const [editorBlocksData, setEditorBlocksData] = (0, react_1.useState)(null);
18
19
  const ref = (0, react_1.useRef)(null);
19
- const blocks = (0, react_1.useMemo)(() => sortedBlockNames.filter((blockName) => data_1.default[blockName].meta.title
20
- .toLocaleLowerCase()
21
- .startsWith(search.toLocaleLowerCase())), [search]);
20
+ const blocks = (0, react_1.useMemo)(() => {
21
+ if (!editorBlocksData) {
22
+ return [];
23
+ }
24
+ return sortedBlockNames.filter((blockName) => {
25
+ var _a;
26
+ return (_a = editorBlocksData[blockName]) === null || _a === void 0 ? void 0 : _a.meta.title.toLocaleLowerCase().startsWith(search.toLocaleLowerCase());
27
+ });
28
+ }, [editorBlocksData, search]);
29
+ (0, react_1.useEffect)(() => {
30
+ const loadEditorBlocksData = async () => {
31
+ const data = await (0, data_1.getEditorBlocksData)();
32
+ setEditorBlocksData(data);
33
+ };
34
+ loadEditorBlocksData();
35
+ }, []);
22
36
  return (react_1.default.createElement("div", { className: b(null, className), ref: ref },
23
37
  react_1.default.createElement("button", { className: b('button'), type: "button", onClick: () => {
24
38
  setIsOpened(!isOpened);
@@ -30,8 +44,11 @@ const AddBlock = ({ onAdd, className }) => {
30
44
  react_1.default.createElement(uikit_1.TextInput, { placeholder: "search", type: "text", value: search, size: "l", onUpdate: (value) => setSearch(value) })),
31
45
  react_1.default.createElement("div", { className: b('blocks') }, blocks.map((blockName) => {
32
46
  var _a;
33
- const blockData = data_1.default[blockName];
34
- const Preview = blockData === null || blockData === void 0 ? void 0 : blockData.preview;
47
+ const blockData = editorBlocksData === null || editorBlocksData === void 0 ? void 0 : editorBlocksData[blockName];
48
+ if (!blockData) {
49
+ return null;
50
+ }
51
+ const Preview = blockData.preview;
35
52
  return (react_1.default.createElement("div", { key: blockName, className: b('block'), onClick: () => {
36
53
  onAdd(blockData === null || blockData === void 0 ? void 0 : blockData.template);
37
54
  setIsOpened(false);
@@ -9,5 +9,6 @@ export interface EdiorBlockData {
9
9
  description?: string;
10
10
  };
11
11
  }
12
- declare const EditorBlocksData: Record<BlockType, EdiorBlockData>;
13
- export default EditorBlocksData;
12
+ type EditorBlocksData = Partial<Record<BlockType, EdiorBlockData>>;
13
+ declare function getEditorBlocksData(): Promise<EditorBlocksData>;
14
+ export { EditorBlocksData, getEditorBlocksData };
@@ -1,13 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEditorBlocksData = void 0;
3
4
  const tslib_1 = require("tslib");
4
5
  const models_1 = require("../../models");
5
6
  const utils_1 = require("../utils");
6
7
  const default_preview_1 = tslib_1.__importDefault(require("./previews/default-preview"));
7
- const getBlockTemplate = (blockType) => require(`./templates/${blockType}.json`);
8
+ const header_block_1 = tslib_1.__importDefault(require("./previews/header-block"));
9
+ const getBlockTemplate = (blockType) => { var _a; return (_a = `./templates/${blockType}.json`, Promise.resolve().then(() => tslib_1.__importStar(require(_a)))).then((data) => data.default); };
8
10
  const getBlockPreview = (blockType) => {
9
11
  try {
10
- return require(`./previews/${blockType}.tsx`).default;
12
+ if (blockType === models_1.BlockType.HeaderBlock) {
13
+ return header_block_1.default;
14
+ }
15
+ return default_preview_1.default;
11
16
  }
12
17
  catch (err) {
13
18
  /*eslint-disable no-console */
@@ -15,13 +20,15 @@ const getBlockPreview = (blockType) => {
15
20
  return default_preview_1.default;
16
21
  }
17
22
  };
18
- const EditorBlocksData = Object.values(models_1.BlockType).reduce((previewData, blockType) => {
19
- const template = getBlockTemplate(blockType);
20
- const preview = getBlockPreview(blockType);
21
- template.meta = template.meta || {};
22
- template.meta.title = template.meta.title || (0, utils_1.formatBlockName)(blockType);
23
- /* eslint-disable no-param-reassign */
24
- previewData[blockType] = Object.assign(Object.assign({}, template), { preview });
25
- return previewData;
26
- }, {});
27
- exports.default = EditorBlocksData;
23
+ async function getEditorBlocksData() {
24
+ const EdiorBlockData = {};
25
+ for (const blockType of Object.values(models_1.BlockType)) {
26
+ const template = await getBlockTemplate(blockType);
27
+ const preview = getBlockPreview(blockType);
28
+ template.meta = template.meta || {};
29
+ template.meta.title = template.meta.title || (0, utils_1.formatBlockName)(blockType);
30
+ EdiorBlockData[blockType] = Object.assign(Object.assign({}, template), { preview });
31
+ }
32
+ return EdiorBlockData;
33
+ }
34
+ exports.getEditorBlocksData = getEditorBlocksData;
@@ -1,22 +1,36 @@
1
1
  /* eslint-disable jsx-a11y/no-static-element-interactions */
2
2
  /* eslint-disable jsx-a11y/click-events-have-key-events */
3
3
  // TODO fix in https://github.com/gravity-ui/page-constructor/issues/965
4
- import React, { useMemo, useRef, useState } from 'react';
4
+ import React, { useEffect, useMemo, useRef, useState } from 'react';
5
5
  import { Plus } from '@gravity-ui/icons';
6
6
  import { Popup, TextInput } from '@gravity-ui/uikit';
7
7
  import { blockMap } from '../../../constructor-items';
8
8
  import { block } from '../../../utils';
9
- import EditorBlocksData from '../../data';
9
+ import { getEditorBlocksData } from '../../data';
10
10
  import './AddBlock.css';
11
11
  const b = block('add-block');
12
12
  const sortedBlockNames = Object.keys(blockMap).sort();
13
13
  const AddBlock = ({ onAdd, className }) => {
14
14
  const [isOpened, setIsOpened] = useState(false);
15
15
  const [search, setSearch] = useState('');
16
+ const [editorBlocksData, setEditorBlocksData] = useState(null);
16
17
  const ref = useRef(null);
17
- const blocks = useMemo(() => sortedBlockNames.filter((blockName) => EditorBlocksData[blockName].meta.title
18
- .toLocaleLowerCase()
19
- .startsWith(search.toLocaleLowerCase())), [search]);
18
+ const blocks = useMemo(() => {
19
+ if (!editorBlocksData) {
20
+ return [];
21
+ }
22
+ return sortedBlockNames.filter((blockName) => {
23
+ var _a;
24
+ return (_a = editorBlocksData[blockName]) === null || _a === void 0 ? void 0 : _a.meta.title.toLocaleLowerCase().startsWith(search.toLocaleLowerCase());
25
+ });
26
+ }, [editorBlocksData, search]);
27
+ useEffect(() => {
28
+ const loadEditorBlocksData = async () => {
29
+ const data = await getEditorBlocksData();
30
+ setEditorBlocksData(data);
31
+ };
32
+ loadEditorBlocksData();
33
+ }, []);
20
34
  return (React.createElement("div", { className: b(null, className), ref: ref },
21
35
  React.createElement("button", { className: b('button'), type: "button", onClick: () => {
22
36
  setIsOpened(!isOpened);
@@ -28,8 +42,11 @@ const AddBlock = ({ onAdd, className }) => {
28
42
  React.createElement(TextInput, { placeholder: "search", type: "text", value: search, size: "l", onUpdate: (value) => setSearch(value) })),
29
43
  React.createElement("div", { className: b('blocks') }, blocks.map((blockName) => {
30
44
  var _a;
31
- const blockData = EditorBlocksData[blockName];
32
- const Preview = blockData === null || blockData === void 0 ? void 0 : blockData.preview;
45
+ const blockData = editorBlocksData === null || editorBlocksData === void 0 ? void 0 : editorBlocksData[blockName];
46
+ if (!blockData) {
47
+ return null;
48
+ }
49
+ const Preview = blockData.preview;
33
50
  return (React.createElement("div", { key: blockName, className: b('block'), onClick: () => {
34
51
  onAdd(blockData === null || blockData === void 0 ? void 0 : blockData.template);
35
52
  setIsOpened(false);
@@ -9,5 +9,6 @@ export interface EdiorBlockData {
9
9
  description?: string;
10
10
  };
11
11
  }
12
- declare const EditorBlocksData: Record<BlockType, EdiorBlockData>;
13
- export default EditorBlocksData;
12
+ type EditorBlocksData = Partial<Record<BlockType, EdiorBlockData>>;
13
+ declare function getEditorBlocksData(): Promise<EditorBlocksData>;
14
+ export { EditorBlocksData, getEditorBlocksData };
@@ -1,10 +1,14 @@
1
1
  import { BlockType } from '../../models';
2
2
  import { formatBlockName } from '../utils';
3
3
  import DefaultPreview from './previews/default-preview';
4
- const getBlockTemplate = (blockType) => require(`./templates/${blockType}.json`);
4
+ import HeaderBlock from './previews/header-block';
5
+ const getBlockTemplate = (blockType) => import(`./templates/${blockType}.json`).then((data) => data.default);
5
6
  const getBlockPreview = (blockType) => {
6
7
  try {
7
- return require(`./previews/${blockType}.tsx`).default;
8
+ if (blockType === BlockType.HeaderBlock) {
9
+ return HeaderBlock;
10
+ }
11
+ return DefaultPreview;
8
12
  }
9
13
  catch (err) {
10
14
  /*eslint-disable no-console */
@@ -12,13 +16,15 @@ const getBlockPreview = (blockType) => {
12
16
  return DefaultPreview;
13
17
  }
14
18
  };
15
- const EditorBlocksData = Object.values(BlockType).reduce((previewData, blockType) => {
16
- const template = getBlockTemplate(blockType);
17
- const preview = getBlockPreview(blockType);
18
- template.meta = template.meta || {};
19
- template.meta.title = template.meta.title || formatBlockName(blockType);
20
- /* eslint-disable no-param-reassign */
21
- previewData[blockType] = Object.assign(Object.assign({}, template), { preview });
22
- return previewData;
23
- }, {});
24
- export default EditorBlocksData;
19
+ async function getEditorBlocksData() {
20
+ const EdiorBlockData = {};
21
+ for (const blockType of Object.values(BlockType)) {
22
+ const template = await getBlockTemplate(blockType);
23
+ const preview = getBlockPreview(blockType);
24
+ template.meta = template.meta || {};
25
+ template.meta.title = template.meta.title || formatBlockName(blockType);
26
+ EdiorBlockData[blockType] = Object.assign(Object.assign({}, template), { preview });
27
+ }
28
+ return EdiorBlockData;
29
+ }
30
+ export { getEditorBlocksData };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/page-constructor",
3
- "version": "5.26.0",
3
+ "version": "5.26.1",
4
4
  "description": "Gravity UI Page Constructor",
5
5
  "license": "MIT",
6
6
  "repository": {