pds-dev-kit-web 2.2.49 → 2.2.50

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 (50) hide show
  1. package/dist/src/sub/DynamicLayout/DynamicLayout.d.ts +1 -1
  2. package/dist/src/sub/DynamicLayout/DynamicLayout.js +4 -3
  3. package/dist/src/sub/DynamicLayout/components/EditModeSectionMatcher/EditModeSectionMatcher.d.ts +3 -2
  4. package/dist/src/sub/DynamicLayout/components/EditModeSectionMatcher/EditModeSectionMatcher.js +18 -6
  5. package/dist/src/sub/DynamicLayout/components/Section/components/CustomSectionBackground.js +3 -2
  6. package/dist/src/sub/DynamicLayout/hooks/useCustomSectionShortcut/useCustomSectionShortcut.d.ts +6 -0
  7. package/dist/src/sub/DynamicLayout/hooks/useCustomSectionShortcut/useCustomSectionShortcut.js +50 -0
  8. package/dist/src/sub/DynamicLayout/pagesPreviewMock.d.ts +1236 -2
  9. package/dist/src/sub/DynamicLayout/pagesPreviewMock.js +2298 -6
  10. package/dist/src/sub/DynamicLayout/sectionActionTypes.d.ts +23 -1
  11. package/dist/src/sub/DynamicLayout/sections/CustomSection/CustomSection.d.ts +10 -2
  12. package/dist/src/sub/DynamicLayout/sections/CustomSection/CustomSection.js +273 -26
  13. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/ComponentBlock.d.ts +2 -1
  14. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/ComponentBlock.js +2 -2
  15. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/ComponentBlockMatcher.d.ts +2 -1
  16. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/ComponentBlockMatcher.js +11 -10
  17. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Button/Button.d.ts +2 -2
  18. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Button/Button.js +4 -2
  19. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Divider/Divider.d.ts +2 -2
  20. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Divider/Divider.js +4 -2
  21. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Image/Image.d.ts +2 -2
  22. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Image/Image.js +4 -2
  23. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/RichText/RichText.d.ts +2 -2
  24. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/RichText/RichText.js +4 -2
  25. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Text/Text.d.ts +2 -2
  26. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Text/Text.js +5 -2
  27. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Twitter/Twitter.d.ts +2 -2
  28. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Twitter/Twitter.js +4 -2
  29. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Youtube/Youtube.d.ts +2 -2
  30. package/dist/src/sub/DynamicLayout/sections/CustomSection/components/ComponentBlock/componentBlocks/Youtube/Youtube.js +5 -3
  31. package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useGroupDrag/index.d.ts +1 -0
  32. package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useGroupDrag/index.js +8 -0
  33. package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useGroupDrag/useGroupDrag.d.ts +22 -0
  34. package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useGroupDrag/useGroupDrag.js +273 -0
  35. package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useGroupDrag/utils.d.ts +13 -0
  36. package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useGroupDrag/utils.js +127 -0
  37. package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useIntersectionObserver.d.ts +1 -1
  38. package/dist/src/sub/DynamicLayout/sections/CustomSection/hooks/useIntersectionObserver.js +21 -9
  39. package/dist/src/sub/DynamicLayout/sections/CustomSection/types.d.ts +29 -7
  40. package/dist/src/sub/DynamicLayout/sections/CustomSection/util/parseJsonProperties.d.ts +1 -1
  41. package/dist/src/sub/DynamicLayout/sections/CustomSection/util/parsePlacement.js +2 -2
  42. package/dist/src/sub/DynamicLayout/sections/CustomSection/util/types.d.ts +3 -0
  43. package/dist/src/sub/DynamicLayout/types.d.ts +25 -19
  44. package/dist/src/sub/DynamicLayout/utils/deepCopy.d.ts +1 -0
  45. package/dist/src/sub/DynamicLayout/utils/deepCopy.js +15 -0
  46. package/package.json +2 -2
  47. package/release-note.md +19 -25
  48. package/dist/src/sub/DynamicLayout/mock_customSection.d.ts +0 -2
  49. package/dist/src/sub/DynamicLayout/mock_customSection.js +0 -840
  50. package/dist/src/sub/DynamicLayout/nakedMocks.json +0 -847
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  type Props = {
3
3
  ani: string;
4
4
  children: React.ReactNode;
5
+ index: number;
5
6
  };
6
- declare function ComponentBlock({ ani, children }: Props): JSX.Element;
7
+ declare function ComponentBlock({ ani, children, index }: Props): JSX.Element;
7
8
  export default ComponentBlock;
@@ -43,9 +43,9 @@ var react_1 = require("react");
43
43
  var styled_components_1 = __importStar(require("styled-components"));
44
44
  var hooks_1 = require("../../hooks");
45
45
  function ComponentBlock(_a) {
46
- var ani = _a.ani, children = _a.children;
46
+ var ani = _a.ani, children = _a.children, index = _a.index;
47
47
  var ref = (0, react_1.useRef)(null);
48
- var entry = (0, hooks_1.useIntersectionObserver)(ref, { threshold: 0 });
48
+ var entry = (0, hooks_1.useIntersectionObserver)(ref, { threshold: 0 }, [index]);
49
49
  var isInViewport = !!(entry === null || entry === void 0 ? void 0 : entry.isIntersecting);
50
50
  return ((0, jsx_runtime_1.jsx)(S_CBWrapper, { children: (0, jsx_runtime_1.jsx)(S_CBBox, __assign({ ref: ref, isInViewport: isInViewport, animationName: ani }, { children: children })) }));
51
51
  }
@@ -4,6 +4,7 @@ import type { Device } from '../../util/types';
4
4
  type Props = {
5
5
  cbProps: ComponentBlock;
6
6
  device: Device;
7
+ index: number;
7
8
  };
8
- export default function ComponentBlockMatcher({ cbProps, device }: Props): JSX.Element;
9
+ export default function ComponentBlockMatcher({ cbProps, device, index }: Props): JSX.Element;
9
10
  export {};
@@ -15,6 +15,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  var jsx_runtime_1 = require("react/jsx-runtime");
18
+ require("react");
18
19
  var newUtils_1 = require("../../newUtils");
19
20
  var types_1 = require("../../types");
20
21
  var Button_1 = __importDefault(require("./componentBlocks/Button/Button"));
@@ -25,24 +26,24 @@ var Text_1 = __importDefault(require("./componentBlocks/Text/Text"));
25
26
  var Twitter_1 = __importDefault(require("./componentBlocks/Twitter/Twitter"));
26
27
  var Youtube_1 = require("./componentBlocks/Youtube");
27
28
  function ComponentBlockMatcher(_a) {
28
- var cbProps = _a.cbProps, device = _a.device;
29
- var componentBlockCode = cbProps.componentBlockCode, properties = cbProps.properties;
30
- var propsWithValue = device === 'MOBILE' ? (0, newUtils_1.replaceUndefinedValues)(properties) : properties;
29
+ var cbProps = _a.cbProps, device = _a.device, index = _a.index;
30
+ var componentBlockCode = cbProps.componentBlockCode, data = cbProps.jsonProperties.data;
31
+ var propsWithValue = device === 'MOBILE' ? (0, newUtils_1.replaceUndefinedValues)(data) : data;
31
32
  switch (componentBlockCode) {
32
33
  case types_1.CB_ALL_CODES.CB_BTN:
33
- return (0, jsx_runtime_1.jsx)(Button_1.default, __assign({}, propsWithValue));
34
+ return (0, jsx_runtime_1.jsx)(Button_1.default, __assign({}, propsWithValue, { index: index }));
34
35
  case types_1.CB_ALL_CODES.CB_TEXT:
35
- return (0, jsx_runtime_1.jsx)(Text_1.default, __assign({}, propsWithValue));
36
+ return (0, jsx_runtime_1.jsx)(Text_1.default, __assign({}, propsWithValue, { index: index }));
36
37
  case types_1.CB_ALL_CODES.CB_RICHTEXT:
37
- return (0, jsx_runtime_1.jsx)(RichText_1.RichText, __assign({}, propsWithValue));
38
+ return (0, jsx_runtime_1.jsx)(RichText_1.RichText, __assign({}, propsWithValue, { index: index }));
38
39
  case types_1.CB_ALL_CODES.CB_DIVIDER:
39
- return (0, jsx_runtime_1.jsx)(Divider_1.default, __assign({}, propsWithValue));
40
+ return (0, jsx_runtime_1.jsx)(Divider_1.default, __assign({}, propsWithValue, { index: index }));
40
41
  case types_1.CB_ALL_CODES.CB_IMG:
41
- return (0, jsx_runtime_1.jsx)(Image_1.default, __assign({}, propsWithValue));
42
+ return (0, jsx_runtime_1.jsx)(Image_1.default, __assign({}, propsWithValue, { index: index }));
42
43
  case types_1.CB_ALL_CODES.CB_TWITTER:
43
- return (0, jsx_runtime_1.jsx)(Twitter_1.default, __assign({}, propsWithValue));
44
+ return (0, jsx_runtime_1.jsx)(Twitter_1.default, __assign({}, propsWithValue, { index: index }));
44
45
  case types_1.CB_ALL_CODES.CB_YOUTUBE:
45
- return (0, jsx_runtime_1.jsx)(Youtube_1.Youtube, __assign({}, propsWithValue));
46
+ return (0, jsx_runtime_1.jsx)(Youtube_1.Youtube, __assign({}, propsWithValue, { index: index }));
46
47
  default:
47
48
  return (0, jsx_runtime_1.jsx)("div", { children: "Error: not supported CB" });
48
49
  }
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import type { CB_BTN_PROPERTIES_TYPE } from '../../../../../../../DynamicLayout/sections/CustomSection/util/types';
3
- type Props = CB_BTN_PROPERTIES_TYPE;
2
+ import type { CB_BTN_PROPERTIES_TYPE, IndexForIntersection } from '../../../../../../../DynamicLayout/sections/CustomSection/util/types';
3
+ type Props = CB_BTN_PROPERTIES_TYPE & IndexForIntersection;
4
4
  declare function Button(props: Props): JSX.Element;
5
5
  export default Button;
@@ -40,7 +40,7 @@ var S_HiddenCover_1 = require("../components/S_HiddenCover");
40
40
  var useCLINK_1 = __importDefault(require("../hooks/useCLINK"));
41
41
  function Button(props) {
42
42
  var _a = (0, react_1.useContext)(DynamicLayout_1.dynamicLayoutContext), device = _a.device, mode = _a.mode;
43
- var CB_STYLE_PROP_BTNCOLOR = props.CB_STYLE_PROP_BTNCOLOR, _b = props.CB_CONTENT_PROP_CLINK, CB_CONTENT_PROP_CLINK_SPEC_SRC = _b.CB_CONTENT_PROP_CLINK_SPEC_SRC, CB_CONTENT_PROP_CLINK_SPEC_TYPE = _b.CB_CONTENT_PROP_CLINK_SPEC_TYPE, CB_CONTENT_PROP_CLINK_SPEC_NEWTAB = _b.CB_CONTENT_PROP_CLINK_SPEC_NEWTAB, CB_CONTENT_PROP_CLINK_SPEC_INTERNALSRC = _b.CB_CONTENT_PROP_CLINK_SPEC_INTERNALSRC, CB_STYLE_PROP_SHADOW = props.CB_STYLE_PROP_SHADOW, CB_EFFECT_PROP_ENTANIM = props.CB_EFFECT_PROP_ENTANIM;
43
+ var index = props.index, CB_STYLE_PROP_BTNCOLOR = props.CB_STYLE_PROP_BTNCOLOR, _b = props.CB_CONTENT_PROP_CLINK, CB_CONTENT_PROP_CLINK_SPEC_SRC = _b.CB_CONTENT_PROP_CLINK_SPEC_SRC, CB_CONTENT_PROP_CLINK_SPEC_TYPE = _b.CB_CONTENT_PROP_CLINK_SPEC_TYPE, CB_CONTENT_PROP_CLINK_SPEC_NEWTAB = _b.CB_CONTENT_PROP_CLINK_SPEC_NEWTAB, CB_CONTENT_PROP_CLINK_SPEC_INTERNALSRC = _b.CB_CONTENT_PROP_CLINK_SPEC_INTERNALSRC, CB_STYLE_PROP_SHADOW = props.CB_STYLE_PROP_SHADOW, CB_EFFECT_PROP_ENTANIM = props.CB_EFFECT_PROP_ENTANIM;
44
44
  var _c = (0, useCLINK_1.default)({
45
45
  src: CB_CONTENT_PROP_CLINK_SPEC_SRC,
46
46
  type: CB_CONTENT_PROP_CLINK_SPEC_TYPE,
@@ -57,7 +57,9 @@ function Button(props) {
57
57
  propsStyle.visibility = 'visible';
58
58
  }
59
59
  var cbRef = (0, react_1.useRef)(null);
60
- var entry = (0, hooks_1.useIntersectionObserver)(cbRef, { threshold: 0.2, freezeOnceVisible: false });
60
+ var entry = (0, hooks_1.useIntersectionObserver)(cbRef, { threshold: 0.2, freezeOnceVisible: false }, [
61
+ index
62
+ ]);
61
63
  var isVisible = !!(entry === null || entry === void 0 ? void 0 : entry.isIntersecting);
62
64
  var effectCssProperties = isVisible ? effect : {};
63
65
  var isNoneEffectType = device === 'DESKTOP'
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import type { CB_DIVIDER_PROPERTIES_TYPE } from '../../../../util/types';
3
- type Props = CB_DIVIDER_PROPERTIES_TYPE;
2
+ import type { CB_DIVIDER_PROPERTIES_TYPE, IndexForIntersection } from '../../../../util/types';
3
+ type Props = CB_DIVIDER_PROPERTIES_TYPE & IndexForIntersection;
4
4
  declare function Divider(props: Props): JSX.Element;
5
5
  export default Divider;
@@ -49,14 +49,16 @@ var S_CB_Box_1 = require("../components/S_CB_Box");
49
49
  var S_HiddenCover_1 = require("../components/S_HiddenCover");
50
50
  function Divider(props) {
51
51
  var _a = (0, react_1.useContext)(DynamicLayout_1.dynamicLayoutContext), device = _a.device, mode = _a.mode;
52
- var CB_EFFECT_PROP_ENTANIM = props.CB_EFFECT_PROP_ENTANIM;
52
+ var index = props.index, CB_EFFECT_PROP_ENTANIM = props.CB_EFFECT_PROP_ENTANIM;
53
53
  var _b = (0, util_1.parseProperties)(props, device), propsStyle = _b.style, propsHoverStyle = _b.hoverStyle, layoutStyle = _b.layout, effect = _b.effect;
54
54
  var isEditModeAndHidden = propsStyle.visibility === 'hidden' && mode === 'EDIT';
55
55
  if (mode === 'EDIT') {
56
56
  propsStyle.visibility = 'visible';
57
57
  }
58
58
  var cbRef = (0, react_1.useRef)(null);
59
- var entry = (0, hooks_1.useIntersectionObserver)(cbRef, { threshold: 0.2, freezeOnceVisible: false });
59
+ var entry = (0, hooks_1.useIntersectionObserver)(cbRef, { threshold: 0.2, freezeOnceVisible: false }, [
60
+ index
61
+ ]);
60
62
  var isVisible = !!(entry === null || entry === void 0 ? void 0 : entry.isIntersecting);
61
63
  var effectCssProperties = isVisible ? effect : {};
62
64
  var isNoneEffectType = device === 'DESKTOP'
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import type { CB_IMG_PROPERTIES_TYPE } from '../../../../util/types';
3
- type Props = CB_IMG_PROPERTIES_TYPE;
2
+ import type { CB_IMG_PROPERTIES_TYPE, IndexForIntersection } from '../../../../util/types';
3
+ type Props = CB_IMG_PROPERTIES_TYPE & IndexForIntersection;
4
4
  declare function Image(props: Props): JSX.Element;
5
5
  export default Image;
@@ -53,7 +53,7 @@ var S_HiddenCover_1 = require("../components/S_HiddenCover");
53
53
  var useCLINK_1 = __importDefault(require("../hooks/useCLINK"));
54
54
  function Image(props) {
55
55
  var _a = (0, react_1.useContext)(DynamicLayout_1.dynamicLayoutContext), device = _a.device, mode = _a.mode;
56
- var CB_CONTENT_PROP_IMAGE = props.CB_CONTENT_PROP_IMAGE, _b = props.CB_CONTENT_PROP_CLINK, CB_CONTENT_PROP_CLINK_SPEC_SRC = _b.CB_CONTENT_PROP_CLINK_SPEC_SRC, CB_CONTENT_PROP_CLINK_SPEC_TYPE = _b.CB_CONTENT_PROP_CLINK_SPEC_TYPE, CB_CONTENT_PROP_CLINK_SPEC_NEWTAB = _b.CB_CONTENT_PROP_CLINK_SPEC_NEWTAB, CB_CONTENT_PROP_CLINK_SPEC_INTERNALSRC = _b.CB_CONTENT_PROP_CLINK_SPEC_INTERNALSRC, CB_STYLE_PROP_SHADOW = props.CB_STYLE_PROP_SHADOW, CB_EFFECT_PROP_ENTANIM = props.CB_EFFECT_PROP_ENTANIM;
56
+ var index = props.index, CB_CONTENT_PROP_IMAGE = props.CB_CONTENT_PROP_IMAGE, _b = props.CB_CONTENT_PROP_CLINK, CB_CONTENT_PROP_CLINK_SPEC_SRC = _b.CB_CONTENT_PROP_CLINK_SPEC_SRC, CB_CONTENT_PROP_CLINK_SPEC_TYPE = _b.CB_CONTENT_PROP_CLINK_SPEC_TYPE, CB_CONTENT_PROP_CLINK_SPEC_NEWTAB = _b.CB_CONTENT_PROP_CLINK_SPEC_NEWTAB, CB_CONTENT_PROP_CLINK_SPEC_INTERNALSRC = _b.CB_CONTENT_PROP_CLINK_SPEC_INTERNALSRC, CB_STYLE_PROP_SHADOW = props.CB_STYLE_PROP_SHADOW, CB_EFFECT_PROP_ENTANIM = props.CB_EFFECT_PROP_ENTANIM;
57
57
  var _c = (0, useCLINK_1.default)({
58
58
  src: CB_CONTENT_PROP_CLINK_SPEC_SRC,
59
59
  type: CB_CONTENT_PROP_CLINK_SPEC_TYPE,
@@ -64,7 +64,9 @@ function Image(props) {
64
64
  var _e = parseImageCBStyle(style, hoverStyle, mode), boxStyle = _e.boxStyle, imgStyle = _e.imgStyle;
65
65
  var isEditModeAndHidden = style.visibility === 'hidden' && mode === 'EDIT';
66
66
  var cbRef = (0, react_1.useRef)(null);
67
- var entry = (0, hooks_1.useIntersectionObserver)(cbRef, { threshold: 0.2, freezeOnceVisible: false });
67
+ var entry = (0, hooks_1.useIntersectionObserver)(cbRef, { threshold: 0.2, freezeOnceVisible: false }, [
68
+ index
69
+ ]);
68
70
  var isVisible = !!(entry === null || entry === void 0 ? void 0 : entry.isIntersecting);
69
71
  var effectCssProperties = isVisible ? effect : {};
70
72
  var isNoneEffectType = device === 'DESKTOP'
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import type { CB_RICHTEXT_PROPERTIES_TYPE } from '../../../../../../../DynamicLayout/sections/CustomSection/util/types';
3
- type Props = CB_RICHTEXT_PROPERTIES_TYPE;
2
+ import type { CB_RICHTEXT_PROPERTIES_TYPE, IndexForIntersection } from '../../../../../../../DynamicLayout/sections/CustomSection/util/types';
3
+ type Props = CB_RICHTEXT_PROPERTIES_TYPE & IndexForIntersection;
4
4
  declare function RichText(props: Props): JSX.Element;
5
5
  export default RichText;
@@ -32,7 +32,7 @@ var S_CB_BoxWithShadow_1 = require("../components/S_CB_BoxWithShadow");
32
32
  var S_HiddenCover_1 = require("../components/S_HiddenCover");
33
33
  function RichText(props) {
34
34
  var _a = (0, react_1.useContext)(DynamicLayout_1.dynamicLayoutContext), device = _a.device, mode = _a.mode;
35
- var CB_STYLE_PROP_BGCOLOR = props.CB_STYLE_PROP_BGCOLOR, CB_STYLE_PROP_SHADOW = props.CB_STYLE_PROP_SHADOW, CB_EFFECT_PROP_ENTANIM = props.CB_EFFECT_PROP_ENTANIM;
35
+ var index = props.index, CB_STYLE_PROP_BGCOLOR = props.CB_STYLE_PROP_BGCOLOR, CB_STYLE_PROP_SHADOW = props.CB_STYLE_PROP_SHADOW, CB_EFFECT_PROP_ENTANIM = props.CB_EFFECT_PROP_ENTANIM;
36
36
  var _b = (0, util_1.parseProperties)(props, device), propsStyle = _b.style, propsHoverStyle = _b.hoverStyle, layoutStyle = _b.layout, effect = _b.effect;
37
37
  var _c = getBGColorStyles(CB_STYLE_PROP_BGCOLOR, device), bgColorStyle = _c.style, bgColorHoverStyle = _c.hoverStyle;
38
38
  var isEditModeAndHidden = propsStyle.visibility === 'hidden' && mode === 'EDIT';
@@ -40,7 +40,9 @@ function RichText(props) {
40
40
  propsStyle.visibility = 'visible';
41
41
  }
42
42
  var cbRef = (0, react_1.useRef)(null);
43
- var entry = (0, hooks_1.useIntersectionObserver)(cbRef, { threshold: 0.2, freezeOnceVisible: false });
43
+ var entry = (0, hooks_1.useIntersectionObserver)(cbRef, { threshold: 0.2, freezeOnceVisible: false }, [
44
+ index
45
+ ]);
44
46
  var isVisible = !!(entry === null || entry === void 0 ? void 0 : entry.isIntersecting);
45
47
  var effectCssProperties = isVisible ? effect : {};
46
48
  var isNoneEffectType = device === 'DESKTOP'
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import type { CB_TEXT_PROPERTIES_TYPE } from '../../../../util/types';
3
- type Props = CB_TEXT_PROPERTIES_TYPE;
2
+ import type { CB_TEXT_PROPERTIES_TYPE, IndexForIntersection } from '../../../../util/types';
3
+ type Props = CB_TEXT_PROPERTIES_TYPE & IndexForIntersection;
4
4
  declare function Text(props: Props): JSX.Element;
5
5
  export default Text;
@@ -15,6 +15,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  var jsx_runtime_1 = require("react/jsx-runtime");
18
+ /* eslint-disable no-console */
18
19
  /* eslint-disable react/destructuring-assignment */
19
20
  var react_1 = require("react");
20
21
  var DynamicLayout_1 = require("../../../../../../../DynamicLayout");
@@ -29,7 +30,7 @@ var S_HiddenCover_1 = require("../components/S_HiddenCover");
29
30
  var useCLINK_1 = __importDefault(require("../hooks/useCLINK"));
30
31
  function Text(props) {
31
32
  var _a = (0, react_1.useContext)(DynamicLayout_1.dynamicLayoutContext), device = _a.device, mode = _a.mode;
32
- var _b = props.CB_CONTENT_PROP_CLINK, CB_CONTENT_PROP_CLINK_SPEC_SRC = _b.CB_CONTENT_PROP_CLINK_SPEC_SRC, CB_CONTENT_PROP_CLINK_SPEC_TYPE = _b.CB_CONTENT_PROP_CLINK_SPEC_TYPE, CB_CONTENT_PROP_CLINK_SPEC_NEWTAB = _b.CB_CONTENT_PROP_CLINK_SPEC_NEWTAB, CB_CONTENT_PROP_CLINK_SPEC_INTERNALSRC = _b.CB_CONTENT_PROP_CLINK_SPEC_INTERNALSRC, CB_EFFECT_PROP_ENTANIM = props.CB_EFFECT_PROP_ENTANIM;
33
+ var index = props.index, _b = props.CB_CONTENT_PROP_CLINK, CB_CONTENT_PROP_CLINK_SPEC_SRC = _b.CB_CONTENT_PROP_CLINK_SPEC_SRC, CB_CONTENT_PROP_CLINK_SPEC_TYPE = _b.CB_CONTENT_PROP_CLINK_SPEC_TYPE, CB_CONTENT_PROP_CLINK_SPEC_NEWTAB = _b.CB_CONTENT_PROP_CLINK_SPEC_NEWTAB, CB_CONTENT_PROP_CLINK_SPEC_INTERNALSRC = _b.CB_CONTENT_PROP_CLINK_SPEC_INTERNALSRC, CB_EFFECT_PROP_ENTANIM = props.CB_EFFECT_PROP_ENTANIM;
33
34
  var _c = (0, useCLINK_1.default)({
34
35
  src: CB_CONTENT_PROP_CLINK_SPEC_SRC,
35
36
  type: CB_CONTENT_PROP_CLINK_SPEC_TYPE,
@@ -45,7 +46,9 @@ function Text(props) {
45
46
  propsStyle.visibility = 'visible';
46
47
  }
47
48
  var cbRef = (0, react_1.useRef)(null);
48
- var entry = (0, hooks_1.useIntersectionObserver)(cbRef, { threshold: 0.2, freezeOnceVisible: false });
49
+ var entry = (0, hooks_1.useIntersectionObserver)(cbRef, { threshold: 0.2, freezeOnceVisible: false }, [
50
+ index
51
+ ]);
49
52
  var isVisible = !!(entry === null || entry === void 0 ? void 0 : entry.isIntersecting);
50
53
  var effectCssProperties = isVisible ? effect : {};
51
54
  var isNoneEffectType = device === 'DESKTOP'
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import type { CB_TWITTER_PROPERTIES_TYPE } from '../../../../util/types';
3
- type Props = CB_TWITTER_PROPERTIES_TYPE;
2
+ import type { CB_TWITTER_PROPERTIES_TYPE, IndexForIntersection } from '../../../../util/types';
3
+ type Props = CB_TWITTER_PROPERTIES_TYPE & IndexForIntersection;
4
4
  declare function Twitter(props: Props): JSX.Element;
5
5
  export default Twitter;
@@ -22,7 +22,7 @@ var S_CB_BoxWithShadow_1 = require("../components/S_CB_BoxWithShadow");
22
22
  function Twitter(props) {
23
23
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
24
24
  var _a = (0, react_1.useContext)(DynamicLayout_1.dynamicLayoutContext), device = _a.device, mode = _a.mode;
25
- var CB_EFFECT_PROP_ENTANIM = props.CB_EFFECT_PROP_ENTANIM;
25
+ var CB_EFFECT_PROP_ENTANIM = props.CB_EFFECT_PROP_ENTANIM, index = props.index;
26
26
  var CB_CONTENT_PROP_TWITTER_SPEC_SRC = props.CB_CONTENT_PROP_TWITTER.CB_CONTENT_PROP_TWITTER_SPEC_SRC, CB_STYLE_PROP_TWITTER_SPEC_THEME = props.CB_STYLE_PROP_TWITTER.CB_STYLE_PROP_TWITTER_SPEC_THEME, CB_STYLE_PROP_SHADOW = props.CB_STYLE_PROP_SHADOW;
27
27
  var _b = (0, util_1.parseProperties)(props, device), style = _b.style, hoverStyle = _b.hoverStyle, layout = _b.layout, effect = _b.effect;
28
28
  var userId = CB_CONTENT_PROP_TWITTER_SPEC_SRC.replace('https://twitter.com/', '');
@@ -37,7 +37,9 @@ function Twitter(props) {
37
37
  delete layout.justifyContent;
38
38
  }
39
39
  var cbRef = (0, react_1.useRef)(null);
40
- var entry = (0, hooks_1.useIntersectionObserver)(cbRef, { threshold: 0.2, freezeOnceVisible: false });
40
+ var entry = (0, hooks_1.useIntersectionObserver)(cbRef, { threshold: 0.2, freezeOnceVisible: false }, [
41
+ index
42
+ ]);
41
43
  var isVisible = !!(entry === null || entry === void 0 ? void 0 : entry.isIntersecting);
42
44
  var effectCssProperties = isVisible ? effect : {};
43
45
  var editModeStyle = mode === 'EDIT' ? { pointerEvents: 'none' } : {};
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
- import type { CB_YOUTUBE_PROPERTIES_TYPE } from '../../../../../../../DynamicLayout/sections/CustomSection/util/types';
3
- type Props = CB_YOUTUBE_PROPERTIES_TYPE;
2
+ import type { CB_YOUTUBE_PROPERTIES_TYPE, IndexForIntersection } from '../../../../../../../DynamicLayout/sections/CustomSection/util/types';
3
+ type Props = CB_YOUTUBE_PROPERTIES_TYPE & IndexForIntersection;
4
4
  export type YOUTUBE_AUTOPLAY_TRIGGER_POINT = 'ALWAYS' | 'VIEWPORT-FREEZE' | 'VIEWPORT';
5
5
  declare function Youtube(props: Props): JSX.Element;
6
6
  export default Youtube;
@@ -32,7 +32,7 @@ var parseYoutubeContentProp_1 = __importDefault(require("./parseYoutubeContentPr
32
32
  var YOUTUBE_AUTOPLAY_TRIGGER_POINT = 'VIEWPORT';
33
33
  function Youtube(props) {
34
34
  var _a = (0, react_1.useContext)(DynamicLayout_1.dynamicLayoutContext), device = _a.device, mode = _a.mode;
35
- var CB_CONTENT_PROP_YOUTUBE = props.CB_CONTENT_PROP_YOUTUBE, CB_STYLE_PROP_BGCOLOR = props.CB_STYLE_PROP_BGCOLOR, CB_STYLE_PROP_SHADOW = props.CB_STYLE_PROP_SHADOW, CB_EFFECT_PROP_ENTANIM = props.CB_EFFECT_PROP_ENTANIM;
35
+ var index = props.index, CB_CONTENT_PROP_YOUTUBE = props.CB_CONTENT_PROP_YOUTUBE, CB_STYLE_PROP_BGCOLOR = props.CB_STYLE_PROP_BGCOLOR, CB_STYLE_PROP_SHADOW = props.CB_STYLE_PROP_SHADOW, CB_EFFECT_PROP_ENTANIM = props.CB_EFFECT_PROP_ENTANIM;
36
36
  var _b = (0, parseYoutubeContentProp_1.default)(CB_CONTENT_PROP_YOUTUBE, device, YOUTUBE_AUTOPLAY_TRIGGER_POINT), youtubeSrc = _b.youtubeSrc, thumbnailSrc = _b.thumbnailSrc, id = _b.id, cbAutoplayMode = _b.cbAutoplayMode;
37
37
  var isEditMode = mode === 'EDIT';
38
38
  var _c = getBGColorStyles(CB_STYLE_PROP_BGCOLOR, device), bgColorStyle = _c.style, bgColorHoverStyle = _c.hoverStyle;
@@ -42,7 +42,9 @@ function Youtube(props) {
42
42
  propsStyle.visibility = 'visible';
43
43
  }
44
44
  var cbRef = (0, react_1.useRef)(null);
45
- var entry = (0, hooks_1.useIntersectionObserver)(cbRef, { threshold: 0.2, freezeOnceVisible: false });
45
+ var entry = (0, hooks_1.useIntersectionObserver)(cbRef, { threshold: 0.2, freezeOnceVisible: false }, [
46
+ index
47
+ ]);
46
48
  var isVisible = !!(entry === null || entry === void 0 ? void 0 : entry.isIntersecting);
47
49
  var effectCssProperties = isVisible ? effect : {};
48
50
  var isNoneEffectType = device === 'DESKTOP'
@@ -54,7 +56,7 @@ function Youtube(props) {
54
56
  var autoplayRef = (0, react_1.useRef)(null);
55
57
  var autoplayEntry = (0, hooks_1.useIntersectionObserver)(autoplayRef, {
56
58
  freezeOnceVisible: YOUTUBE_AUTOPLAY_TRIGGER_POINT === 'VIEWPORT-FREEZE' ? true : false
57
- });
59
+ }, [index]);
58
60
  var onLoadIframe = function () {
59
61
  var _a;
60
62
  if (!((_a = iframeRef.current) === null || _a === void 0 ? void 0 : _a.contentWindow)) {
@@ -0,0 +1 @@
1
+ export { default as useGroupDrag } from './useGroupDrag';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.useGroupDrag = void 0;
7
+ var useGroupDrag_1 = require("./useGroupDrag");
8
+ Object.defineProperty(exports, "useGroupDrag", { enumerable: true, get: function () { return __importDefault(useGroupDrag_1).default; } });
@@ -0,0 +1,22 @@
1
+ /// <reference types="react" />
2
+ import { LayoutItemWithGroupType } from './utils';
3
+ import type { LayoutsType } from '../../CustomSection';
4
+ import type { Device } from '../../util/types';
5
+ import type { DynamicLayoutProps } from '../../../../../DynamicLayout/types';
6
+ import type { Layout, LayoutItem } from 'publ-echo/dist/lib';
7
+ type Props = {
8
+ device: Device;
9
+ setLayouts: React.Dispatch<React.SetStateAction<LayoutsType>>;
10
+ sectionActionHandler: DynamicLayoutProps['sectionActionHandler'];
11
+ };
12
+ declare function useGroupDrag({ device, setLayouts, sectionActionHandler }: Props): {
13
+ setGroupCB: (selectedId: number | 'group', newId: number) => void;
14
+ breakGroupCB: () => void;
15
+ makeAllInOneGroup: () => void;
16
+ escapeFromGroup: (id: string) => void;
17
+ makeCollisionGroup: (id: number, selectedCBId?: number) => void;
18
+ makeCollisionOfBulk: () => void;
19
+ };
20
+ export declare function getGroupCB(layout: Layout): LayoutItemWithGroupType | null;
21
+ export declare const filterItemsById: (layout: Layout, idsToRemove: Array<string>) => LayoutItem[];
22
+ export default useGroupDrag;
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
+ if (ar || !(i in from)) {
16
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
+ ar[i] = from[i];
18
+ }
19
+ }
20
+ return to.concat(ar || Array.prototype.slice.call(from));
21
+ };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.filterItemsById = exports.getGroupCB = void 0;
27
+ // eslint-disable-next-line import/no-extraneous-dependencies
28
+ var renderHelpers_1 = require("publ-echo/dist/lib/GridLayoutEditor/utils/renderHelpers");
29
+ var react_1 = require("react");
30
+ var deepCopy_1 = __importDefault(require("../../../../../DynamicLayout/utils/deepCopy"));
31
+ var utils_1 = require("./utils");
32
+ function useGroupDrag(_a) {
33
+ var device = _a.device, setLayouts = _a.setLayouts, sectionActionHandler = _a.sectionActionHandler;
34
+ var layoutByDevice = device === 'DESKTOP' ? 'lg' : 'sm';
35
+ function makeAllInOneGroup() {
36
+ setLayouts(function (prev) {
37
+ var _a, _b;
38
+ var _c;
39
+ // TODO: 임시용 카피
40
+ var currentLayoutCopy = (0, deepCopy_1.default)(prev[layoutByDevice]);
41
+ if (currentLayoutCopy.length === 0) {
42
+ return prev;
43
+ }
44
+ var groupIdx = currentLayoutCopy.findIndex(function (item) { return item.i === 'group'; });
45
+ // NOTE: 그룹이 없는 경우
46
+ if (groupIdx < 0) {
47
+ var group_1 = (0, utils_1.getGroupForMultiple)(currentLayoutCopy);
48
+ sectionActionHandler &&
49
+ sectionActionHandler({
50
+ type: '@CUSTOMSECTION/GROUP_CREATED',
51
+ payload: {
52
+ message: 'group generated',
53
+ data: group_1
54
+ }
55
+ });
56
+ return __assign(__assign({}, prev), (_a = {}, _a[layoutByDevice] = [group_1], _a));
57
+ }
58
+ // NOTE: 그룹이 이미 있는경우
59
+ var groupItem = currentLayoutCopy.splice(groupIdx, 1)[0];
60
+ if (!groupItem.groupLayouts) {
61
+ return prev;
62
+ }
63
+ var groupItems = (_c = groupItem.groupLayouts.map(function (each) { return (__assign(__assign({}, each), { x: groupItem.x + each.x, y: groupItem.y + each.y })); })) !== null && _c !== void 0 ? _c : [];
64
+ currentLayoutCopy.push.apply(currentLayoutCopy, groupItems);
65
+ var group = (0, utils_1.getGroupForMultiple)(currentLayoutCopy);
66
+ sectionActionHandler &&
67
+ sectionActionHandler({
68
+ type: '@CUSTOMSECTION/GROUP_CREATED',
69
+ payload: {
70
+ message: 'group generated',
71
+ data: group
72
+ }
73
+ });
74
+ return __assign(__assign({}, prev), (_b = {}, _b[layoutByDevice] = [group], _b));
75
+ });
76
+ }
77
+ function escapeFromGroup(id) {
78
+ setLayouts(function (prev) {
79
+ var _a;
80
+ // TODO: 임시용 카피
81
+ var currentLayoutCopy = (0, deepCopy_1.default)(prev[layoutByDevice]);
82
+ var groupIdx = currentLayoutCopy.findIndex(function (item) { return item.i === 'group'; });
83
+ var group = currentLayoutCopy[groupIdx];
84
+ if (!group || !group.groupLayouts) {
85
+ return prev;
86
+ }
87
+ var escapeIndex = group.groupLayouts.findIndex(function (each) { return each.i === id; });
88
+ if (escapeIndex < 0) {
89
+ return prev;
90
+ }
91
+ var escapedItem = group.groupLayouts.splice(escapeIndex, 1)[0];
92
+ escapedItem.x += group.x;
93
+ escapedItem.y += group.y;
94
+ currentLayoutCopy.push(escapedItem);
95
+ var newGroup = (0, utils_1.recalculatedGroup)(group);
96
+ currentLayoutCopy.splice(groupIdx, 1, newGroup);
97
+ sectionActionHandler &&
98
+ sectionActionHandler({
99
+ type: '@CUSTOMSECTION/ESCAPE_ONE_FROM_GROUP',
100
+ payload: {
101
+ id: id
102
+ }
103
+ });
104
+ return __assign(__assign({}, prev), (_a = {}, _a[layoutByDevice] = currentLayoutCopy, _a));
105
+ });
106
+ }
107
+ function setGroupCB(selectedId, newId) {
108
+ setLayouts(function (prev) {
109
+ var _a;
110
+ var currentLayoutCopy = (0, deepCopy_1.default)(prev[layoutByDevice]);
111
+ var firstIdx = currentLayoutCopy.findIndex(function (item) {
112
+ if (selectedId === 'group') {
113
+ return item.i === 'group';
114
+ }
115
+ if (Number(item.i) === selectedId) {
116
+ return true;
117
+ }
118
+ return false;
119
+ });
120
+ var firstElem = currentLayoutCopy.splice(firstIdx, 1)[0];
121
+ var secondIdx = currentLayoutCopy.findIndex(function (item) { return Number(item.i) === newId; });
122
+ var secondElem = currentLayoutCopy.splice(secondIdx, 1)[0];
123
+ var group = (0, utils_1.getGroupData)(firstElem, secondElem);
124
+ currentLayoutCopy.unshift(group);
125
+ sectionActionHandler &&
126
+ sectionActionHandler({
127
+ type: '@CUSTOMSECTION/GROUP_CREATED',
128
+ payload: {
129
+ message: 'group generated',
130
+ data: group
131
+ }
132
+ });
133
+ return __assign(__assign({}, prev), (_a = {}, _a[layoutByDevice] = currentLayoutCopy, _a));
134
+ });
135
+ }
136
+ var breakGroupCB = (0, react_1.useCallback)(function () {
137
+ setLayouts(function (prev) {
138
+ var _a;
139
+ var _b;
140
+ // TODO: 임시용 카피
141
+ var currentLayoutCopy = (0, deepCopy_1.default)(prev[layoutByDevice]);
142
+ var groupIdx = currentLayoutCopy.findIndex(function (item) { return item.i === 'group'; });
143
+ if (groupIdx < 0) {
144
+ return prev;
145
+ }
146
+ var groupItem = currentLayoutCopy.splice(groupIdx, 1)[0];
147
+ if (!groupItem.groupLayouts) {
148
+ return prev;
149
+ }
150
+ var groupItems = (_b = groupItem.groupLayouts.map(function (each) { return (__assign(__assign({}, each), { x: groupItem.x + each.x, y: groupItem.y + each.y })); })) !== null && _b !== void 0 ? _b : [];
151
+ currentLayoutCopy.push.apply(currentLayoutCopy, groupItems);
152
+ return __assign(__assign({}, prev), (_a = {}, _a[layoutByDevice] = currentLayoutCopy, _a));
153
+ });
154
+ sectionActionHandler &&
155
+ sectionActionHandler({
156
+ type: '@CUSTOMSECTION/GROUP_DISMISSED',
157
+ payload: {
158
+ message: 'group dismissed'
159
+ }
160
+ });
161
+ }, []);
162
+ function makeCollisionGroup(id, selectedCBId) {
163
+ setLayouts(function (prev) {
164
+ var _a, _b;
165
+ var _c, _d;
166
+ var currentLayoutCopy = (0, deepCopy_1.default)(prev[layoutByDevice]);
167
+ var additionalSelectedCBLayout = (function () {
168
+ if (selectedCBId === undefined) {
169
+ return null;
170
+ }
171
+ if (id === selectedCBId) {
172
+ return null;
173
+ }
174
+ return (0, renderHelpers_1.getLayoutItem)(currentLayoutCopy, selectedCBId.toString());
175
+ })();
176
+ var layout = (0, renderHelpers_1.getLayoutItem)(currentLayoutCopy, id.toString());
177
+ if (!layout) {
178
+ return prev;
179
+ }
180
+ var prevGroupIdx = currentLayoutCopy.findIndex(function (item) { return item.i === 'group'; });
181
+ if (prevGroupIdx < 0) {
182
+ var collisions = (0, renderHelpers_1.getAllCollisions)(currentLayoutCopy, layout);
183
+ var groupLayouts = __spreadArray([layout], collisions, true);
184
+ if (collisions.length === 0 && !additionalSelectedCBLayout) {
185
+ sectionActionHandler &&
186
+ sectionActionHandler({
187
+ type: '@CUSTOMSECTION/COLLISION_NOT_FOUND',
188
+ payload: {
189
+ message: '겹치는 부분이 없어, 아무련 변화가 없습니다.'
190
+ }
191
+ });
192
+ return prev;
193
+ }
194
+ if (additionalSelectedCBLayout) {
195
+ var alreadyHas = collisions.some(function (each) { return each.i === additionalSelectedCBLayout.i; });
196
+ !alreadyHas && groupLayouts.push(additionalSelectedCBLayout);
197
+ }
198
+ var group_2 = (0, utils_1.getGroupForMultiple)(groupLayouts);
199
+ var filtered = currentLayoutCopy.filter(function (layout) { return !group_2.childrenIds.includes(layout.i); });
200
+ sectionActionHandler &&
201
+ sectionActionHandler({
202
+ type: '@CUSTOMSECTION/GROUP_CREATED',
203
+ payload: {
204
+ message: 'group generated with collision detect',
205
+ data: group_2
206
+ }
207
+ });
208
+ return __assign(__assign({}, prev), (_a = {}, _a[layoutByDevice] = __spreadArray([group_2], filtered, true), _a));
209
+ }
210
+ var groupItem = currentLayoutCopy.splice(prevGroupIdx, 1)[0];
211
+ if (groupItem) {
212
+ var collisions = (0, renderHelpers_1.getAllCollisions)(currentLayoutCopy, layout);
213
+ var groupItems = (_d = (_c = groupItem.groupLayouts) === null || _c === void 0 ? void 0 : _c.map(function (each) { return (__assign(__assign({}, each), { x: groupItem.x + each.x, y: groupItem.y + each.y })); })) !== null && _d !== void 0 ? _d : [];
214
+ var newGroup_1 = (0, utils_1.getGroupForMultiple)([layout].concat(collisions).concat(groupItems));
215
+ var filtered = currentLayoutCopy.filter(function (layout) { return !newGroup_1.childrenIds.includes(layout.i); });
216
+ sectionActionHandler &&
217
+ sectionActionHandler({
218
+ type: '@CUSTOMSECTION/GROUP_CREATED',
219
+ payload: {
220
+ message: 'group generated with collision detect',
221
+ data: newGroup_1
222
+ }
223
+ });
224
+ return __assign(__assign({}, prev), (_b = {}, _b[layoutByDevice] = __spreadArray([newGroup_1], filtered, true), _b));
225
+ }
226
+ return prev;
227
+ });
228
+ }
229
+ function makeCollisionOfBulk() {
230
+ setLayouts(function (prev) {
231
+ var _a;
232
+ var _b, _c;
233
+ var currentLayoutCopy = (0, deepCopy_1.default)(prev[layoutByDevice]);
234
+ var prevGroupIdx = currentLayoutCopy.findIndex(function (item) { return item.i === 'group'; });
235
+ var groupItem = currentLayoutCopy.splice(prevGroupIdx, 1)[0];
236
+ var collisions = (0, renderHelpers_1.getAllCollisions)(currentLayoutCopy, groupItem);
237
+ var groupItems = (_c = (_b = groupItem.groupLayouts) === null || _b === void 0 ? void 0 : _b.map(function (each) { return (__assign(__assign({}, each), { x: groupItem.x + each.x, y: groupItem.y + each.y })); })) !== null && _c !== void 0 ? _c : [];
238
+ var newGroup = (0, utils_1.getGroupForMultiple)(groupItems.concat(collisions));
239
+ var filtered = currentLayoutCopy.filter(function (layout) { return !newGroup.childrenIds.includes(layout.i); });
240
+ sectionActionHandler &&
241
+ sectionActionHandler({
242
+ type: '@CUSTOMSECTION/GROUP_CREATED',
243
+ payload: {
244
+ message: 'group generated with collision detect',
245
+ data: newGroup
246
+ }
247
+ });
248
+ return __assign(__assign({}, prev), (_a = {}, _a[layoutByDevice] = __spreadArray([newGroup], filtered, true), _a));
249
+ });
250
+ }
251
+ return {
252
+ setGroupCB: setGroupCB,
253
+ breakGroupCB: breakGroupCB,
254
+ makeAllInOneGroup: makeAllInOneGroup,
255
+ escapeFromGroup: escapeFromGroup,
256
+ makeCollisionGroup: makeCollisionGroup,
257
+ makeCollisionOfBulk: makeCollisionOfBulk
258
+ };
259
+ }
260
+ function getGroupCB(layout) {
261
+ var groupIdx = layout.findIndex(function (item) { return item.i === 'group'; });
262
+ if (groupIdx < 0) {
263
+ return null;
264
+ }
265
+ var groupItem = layout[groupIdx];
266
+ return groupItem;
267
+ }
268
+ exports.getGroupCB = getGroupCB;
269
+ var filterItemsById = function (layout, idsToRemove) {
270
+ return layout.filter(function (item) { return !idsToRemove.includes(item.i); });
271
+ };
272
+ exports.filterItemsById = filterItemsById;
273
+ exports.default = useGroupDrag;
@@ -0,0 +1,13 @@
1
+ import type { ComponentBlock } from '../../types';
2
+ import type { LayoutItem } from 'publ-echo/dist/lib';
3
+ export interface LayoutItemWithGroupType extends LayoutItem {
4
+ childrenIds: string[];
5
+ keepInLastIndex?: boolean;
6
+ }
7
+ export declare function getGroupData(elem1: LayoutItemWithGroupType, elem2: LayoutItemWithGroupType): LayoutItemWithGroupType;
8
+ export declare function recalculatedGroup(group: LayoutItemWithGroupType): LayoutItemWithGroupType;
9
+ export declare function getGroupForMultiple(elems: LayoutItem[]): LayoutItemWithGroupType;
10
+ export declare function splitComponentBlocksByGroup(componentBlocks: ComponentBlock[], groupIds: string[]): {
11
+ inGroup: ComponentBlock[];
12
+ notInGroup: ComponentBlock[];
13
+ };