@gravity-ui/page-constructor 3.8.2 → 3.9.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.
Files changed (101) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +22 -0
  3. package/build/cjs/blocks/Banner/schema.d.ts +9 -3
  4. package/build/cjs/blocks/CardLayout/schema.d.ts +6 -2
  5. package/build/cjs/blocks/Companies/schema.d.ts +3 -1
  6. package/build/cjs/blocks/ContentLayout/schema.d.ts +3 -1
  7. package/build/cjs/blocks/ExtendedFeatures/schema.d.ts +6 -2
  8. package/build/cjs/blocks/FilterBlock/schema.d.ts +6 -2
  9. package/build/cjs/blocks/Header/schema.d.ts +3 -1
  10. package/build/cjs/blocks/HeaderSlider/schema.d.ts +3 -1
  11. package/build/cjs/blocks/Icons/schema.d.ts +6 -2
  12. package/build/cjs/blocks/Info/schema.d.ts +3 -1
  13. package/build/cjs/blocks/Map/schema.d.ts +3 -1
  14. package/build/cjs/blocks/Media/schema.d.ts +6 -2
  15. package/build/cjs/blocks/PromoFeaturesBlock/schema.d.ts +3 -1
  16. package/build/cjs/blocks/Questions/schema.d.ts +3 -1
  17. package/build/cjs/blocks/Share/schema.d.ts +3 -1
  18. package/build/cjs/blocks/Slider/schema.d.ts +3 -1
  19. package/build/cjs/blocks/Table/schema.d.ts +6 -2
  20. package/build/cjs/blocks/Tabs/schema.d.ts +6 -2
  21. package/build/cjs/components/Author/schema.d.ts +3 -1
  22. package/build/cjs/editor/components/AddBlock/AddBlock.css +1 -1
  23. package/build/cjs/editor/components/BlockForm/BlockForm.js +2 -2
  24. package/build/cjs/editor/components/ControlPanel/ControlPanel.css +2 -1
  25. package/build/cjs/editor/components/EditBlock/EditBlock.css +6 -6
  26. package/build/cjs/editor/components/Layout/Layout.css +4 -1
  27. package/build/cjs/editor/components/Layout/Layout.js +3 -1
  28. package/build/cjs/editor/containers/Editor/Editor.js +5 -5
  29. package/build/cjs/editor/containers/Form/Form.css +36 -18
  30. package/build/cjs/editor/containers/Form/Form.js +8 -7
  31. package/build/cjs/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.css +1 -1
  32. package/build/cjs/editor/types/index.d.ts +4 -1
  33. package/build/cjs/schema/constants.d.ts +18 -6
  34. package/build/cjs/schema/validators/common.d.ts +9 -3
  35. package/build/cjs/schema/validators/common.js +3 -1
  36. package/build/cjs/sub-blocks/BackgroundCard/schema.d.ts +3 -1
  37. package/build/cjs/sub-blocks/BasicCard/schema.d.ts +3 -1
  38. package/build/cjs/sub-blocks/Divider/schema.d.ts +3 -1
  39. package/build/cjs/sub-blocks/LayoutItem/schema.d.ts +3 -1
  40. package/build/cjs/sub-blocks/MediaCard/schema.d.ts +3 -1
  41. package/build/cjs/sub-blocks/PriceDetailed/schema.d.ts +3 -1
  42. package/build/cjs/sub-blocks/Quote/schema.d.ts +3 -1
  43. package/build/cjs/text-transform/filter.d.ts +20 -0
  44. package/build/cjs/text-transform/filter.js +61 -0
  45. package/build/cjs/text-transform/index.d.ts +1 -0
  46. package/build/cjs/text-transform/index.js +1 -0
  47. package/build/cjs/text-transform/transformers.d.ts +2 -0
  48. package/build/cjs/text-transform/transformers.js +3 -2
  49. package/build/esm/blocks/Banner/schema.d.ts +9 -3
  50. package/build/esm/blocks/CardLayout/schema.d.ts +6 -2
  51. package/build/esm/blocks/Companies/schema.d.ts +3 -1
  52. package/build/esm/blocks/ContentLayout/schema.d.ts +3 -1
  53. package/build/esm/blocks/ExtendedFeatures/schema.d.ts +6 -2
  54. package/build/esm/blocks/FilterBlock/schema.d.ts +6 -2
  55. package/build/esm/blocks/Header/schema.d.ts +3 -1
  56. package/build/esm/blocks/HeaderSlider/schema.d.ts +3 -1
  57. package/build/esm/blocks/Icons/schema.d.ts +6 -2
  58. package/build/esm/blocks/Info/schema.d.ts +3 -1
  59. package/build/esm/blocks/Map/schema.d.ts +3 -1
  60. package/build/esm/blocks/Media/schema.d.ts +6 -2
  61. package/build/esm/blocks/PromoFeaturesBlock/schema.d.ts +3 -1
  62. package/build/esm/blocks/Questions/schema.d.ts +3 -1
  63. package/build/esm/blocks/Share/schema.d.ts +3 -1
  64. package/build/esm/blocks/Slider/schema.d.ts +3 -1
  65. package/build/esm/blocks/Table/schema.d.ts +6 -2
  66. package/build/esm/blocks/Tabs/schema.d.ts +6 -2
  67. package/build/esm/components/Author/schema.d.ts +3 -1
  68. package/build/esm/editor/components/AddBlock/AddBlock.css +1 -1
  69. package/build/esm/editor/components/BlockForm/BlockForm.js +3 -3
  70. package/build/esm/editor/components/ControlPanel/ControlPanel.css +2 -1
  71. package/build/esm/editor/components/EditBlock/EditBlock.css +6 -6
  72. package/build/esm/editor/components/Layout/Layout.css +4 -1
  73. package/build/esm/editor/components/Layout/Layout.js +3 -1
  74. package/build/esm/editor/containers/Editor/Editor.js +5 -5
  75. package/build/esm/editor/containers/Form/Form.css +36 -18
  76. package/build/esm/editor/containers/Form/Form.js +8 -7
  77. package/build/esm/editor/dynamic-forms-custom/components/OneOfCustom/OneOfCustom.css +1 -1
  78. package/build/esm/editor/types/index.d.ts +4 -1
  79. package/build/esm/schema/constants.d.ts +18 -6
  80. package/build/esm/schema/validators/common.d.ts +9 -3
  81. package/build/esm/schema/validators/common.js +3 -1
  82. package/build/esm/sub-blocks/BackgroundCard/schema.d.ts +3 -1
  83. package/build/esm/sub-blocks/BasicCard/schema.d.ts +3 -1
  84. package/build/esm/sub-blocks/Divider/schema.d.ts +3 -1
  85. package/build/esm/sub-blocks/LayoutItem/schema.d.ts +3 -1
  86. package/build/esm/sub-blocks/MediaCard/schema.d.ts +3 -1
  87. package/build/esm/sub-blocks/PriceDetailed/schema.d.ts +3 -1
  88. package/build/esm/sub-blocks/Quote/schema.d.ts +3 -1
  89. package/build/esm/text-transform/filter.d.ts +20 -0
  90. package/build/esm/text-transform/filter.js +56 -0
  91. package/build/esm/text-transform/index.d.ts +1 -0
  92. package/build/esm/text-transform/index.js +1 -0
  93. package/build/esm/text-transform/transformers.d.ts +2 -0
  94. package/build/esm/text-transform/transformers.js +3 -2
  95. package/package.json +1 -1
  96. package/server/text-transform/filter.d.ts +20 -0
  97. package/server/text-transform/filter.js +63 -0
  98. package/server/text-transform/index.d.ts +1 -0
  99. package/server/text-transform/index.js +1 -0
  100. package/server/text-transform/transformers.d.ts +2 -0
  101. package/server/text-transform/transformers.js +3 -2
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /* eslint-disable no-param-reassign */
3
+ /* eslint-disable no-not-accumulator-reassign/no-not-accumulator-reassign */
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.filterContent = void 0;
9
+ const evaluation_1 = __importDefault(require("@doc-tools/transform/lib/liquid/evaluation"));
10
+ function filterItems(items, vars, propertyName) {
11
+ if (!Array.isArray(items)) {
12
+ throw new Error(`Error while filtering: items has invalid key '${propertyName}' equals ${JSON.stringify(items)}`);
13
+ }
14
+ return items.reduce((result, item) => {
15
+ const passedFiltration = checkWhenCondition(item.when, vars);
16
+ if (passedFiltration) {
17
+ const property = propertyName && item[propertyName];
18
+ if (property === undefined) {
19
+ result.push(item);
20
+ }
21
+ else {
22
+ const filteredProperty = filterItems(property, vars, propertyName);
23
+ if (filteredProperty.length !== 0) {
24
+ result.push(Object.assign(Object.assign({}, item), { [propertyName]: filteredProperty }));
25
+ }
26
+ }
27
+ }
28
+ return result;
29
+ }, []);
30
+ }
31
+ function checkWhenCondition(whenValue, vars) {
32
+ return (whenValue === true ||
33
+ whenValue === undefined ||
34
+ (typeof whenValue === 'string' && (!whenValue || (0, evaluation_1.default)(whenValue, vars))));
35
+ }
36
+ function isItemArray(content) {
37
+ return Array.isArray(content);
38
+ }
39
+ function isItem(content) {
40
+ return content && typeof content === 'object' && !Array.isArray(content);
41
+ }
42
+ /**
43
+ * Filters content recoursively by result of it's 'when' property evaluation applied to vars argument.
44
+ * e.g. property {..., when: 'someVar == "someValue"' } will be included in result only if vars.someVar === 'someValue'
45
+ * @param {FilterableContent} content
46
+ * @param {ContentVariables} vars
47
+ * @return {FilteredContent}
48
+ */
49
+ function filterContent(content, vars) {
50
+ if (isItemArray(content)) {
51
+ return filterItems(content, vars).map((item) => filterContent(item, vars));
52
+ }
53
+ else if (isItem(content)) {
54
+ return Object.entries(content).reduce((acc, [key, value]) => {
55
+ acc[key] = filterContent(value, vars);
56
+ return acc;
57
+ }, {});
58
+ }
59
+ else {
60
+ return content;
61
+ }
62
+ }
63
+ exports.filterContent = filterContent;
@@ -2,3 +2,4 @@ export * from './utils';
2
2
  export * from './config';
3
3
  export * from './common';
4
4
  export * from './transformers';
5
+ export * from './filter';
@@ -18,3 +18,4 @@ __exportStar(require("./utils"), exports);
18
18
  __exportStar(require("./config"), exports);
19
19
  __exportStar(require("./common"), exports);
20
20
  __exportStar(require("./transformers"), exports);
21
+ __exportStar(require("./filter"), exports);
@@ -1,5 +1,6 @@
1
1
  import { ConstructorBlock } from '../models/constructor';
2
2
  import { Lang } from '../utils/configure';
3
+ export type ContentVariables = Record<string, string>;
3
4
  export type ContentTransformerProps = {
4
5
  content: {
5
6
  blocks?: ConstructorBlock[];
@@ -7,6 +8,7 @@ export type ContentTransformerProps = {
7
8
  options: {
8
9
  lang: Lang;
9
10
  customConfig?: {};
11
+ vars?: ContentVariables;
10
12
  };
11
13
  };
12
14
  export declare const contentTransformer: ({ content, options }: ContentTransformerProps) => {
@@ -8,6 +8,7 @@ exports.contentTransformer = void 0;
8
8
  /* eslint-disable no-not-accumulator-reassign/no-not-accumulator-reassign */
9
9
  const lodash_1 = __importDefault(require("lodash"));
10
10
  const config_1 = require("./config");
11
+ const filter_1 = require("./filter");
11
12
  function transformBlocks(blocks, lang, customConfig = {}) {
12
13
  const fullConfig = Object.assign(Object.assign({}, config_1.config), customConfig);
13
14
  const clonedBlocks = lodash_1.default.cloneDeep(blocks);
@@ -48,8 +49,8 @@ function transformBlock(lang, blocksConfig, block) {
48
49
  return block;
49
50
  }
50
51
  const contentTransformer = ({ content, options }) => {
51
- const { lang, customConfig = {} } = options;
52
- const { blocks = [] } = content;
52
+ const { lang, customConfig = {}, vars } = options;
53
+ const { blocks = [] } = (vars ? (0, filter_1.filterContent)(content, vars) : content);
53
54
  const transformedBlocks = transformBlocks(blocks, lang, customConfig);
54
55
  return {
55
56
  blocks: transformedBlocks,