@byeolnaerim/flex-layout 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +314 -0
- package/README.ko.md +312 -0
- package/README.md +314 -0
- package/dist/flex-layout/components/FlexLayout.cjs +76 -0
- package/dist/flex-layout/components/FlexLayout.cjs.map +1 -0
- package/dist/flex-layout/components/FlexLayout.d.ts +2 -0
- package/dist/flex-layout/components/FlexLayout.js +70 -0
- package/dist/flex-layout/components/FlexLayout.js.map +1 -0
- package/dist/flex-layout/components/FlexLayoutContainer.cjs +196 -0
- package/dist/flex-layout/components/FlexLayoutContainer.cjs.map +1 -0
- package/dist/flex-layout/components/FlexLayoutContainer.d.ts +2 -0
- package/dist/flex-layout/components/FlexLayoutContainer.js +189 -0
- package/dist/flex-layout/components/FlexLayoutContainer.js.map +1 -0
- package/dist/flex-layout/components/FlexLayoutResizePanel.cjs +181 -0
- package/dist/flex-layout/components/FlexLayoutResizePanel.cjs.map +1 -0
- package/dist/flex-layout/components/FlexLayoutResizePanel.d.ts +2 -0
- package/dist/flex-layout/components/FlexLayoutResizePanel.js +175 -0
- package/dist/flex-layout/components/FlexLayoutResizePanel.js.map +1 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreen.cjs +1211 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreen.cjs.map +1 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreen.d.ts +11 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreen.js +1197 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreen.js.map +1 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.cjs +339 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.cjs.map +1 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.d.ts +27 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.js +333 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBox.js.map +1 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.cjs +32 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.cjs.map +1 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.d.ts +5 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.js +25 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxContainer.js.map +1 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.cjs +40 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.cjs.map +1 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.d.ts +8 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.js +34 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxItem.js.map +1 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.cjs +30 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.cjs.map +1 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.d.ts +4 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.js +24 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenDragBoxTitleMore.js.map +1 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.cjs +109 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.cjs.map +1 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.d.ts +9 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.js +103 -0
- package/dist/flex-layout/components/FlexLayoutSplitScreenScrollBox.js.map +1 -0
- package/dist/flex-layout/components/FlexLayoutStickyBox.cjs +226 -0
- package/dist/flex-layout/components/FlexLayoutStickyBox.cjs.map +1 -0
- package/dist/flex-layout/components/FlexLayoutStickyBox.d.ts +29 -0
- package/dist/flex-layout/components/FlexLayoutStickyBox.js +224 -0
- package/dist/flex-layout/components/FlexLayoutStickyBox.js.map +1 -0
- package/dist/flex-layout/components/index.cjs +52 -0
- package/dist/flex-layout/components/index.cjs.map +1 -0
- package/dist/flex-layout/components/index.d.ts +7 -0
- package/dist/flex-layout/components/index.js +9 -0
- package/dist/flex-layout/components/index.js.map +1 -0
- package/dist/flex-layout/hooks/index.cjs +21 -0
- package/dist/flex-layout/hooks/index.cjs.map +1 -0
- package/dist/flex-layout/hooks/index.d.ts +2 -0
- package/dist/flex-layout/hooks/index.js +4 -0
- package/dist/flex-layout/hooks/index.js.map +1 -0
- package/dist/{hooks.cjs → flex-layout/hooks/useDrag.cjs} +15 -208
- package/dist/flex-layout/hooks/useDrag.cjs.map +1 -0
- package/dist/{useDrag-DR01Ob3s.d.ts → flex-layout/hooks/useDrag.d.ts} +22 -25
- package/dist/{hooks.js → flex-layout/hooks/useDrag.js} +13 -203
- package/dist/flex-layout/hooks/useDrag.js.map +1 -0
- package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.cjs +118 -0
- package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.cjs.map +1 -0
- package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.d.ts +28 -0
- package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.js +116 -0
- package/dist/flex-layout/hooks/useFlexLayoutSplitScreen.js.map +1 -0
- package/dist/flex-layout/hooks/useListPaging.cjs +179 -0
- package/dist/flex-layout/hooks/useListPaging.cjs.map +1 -0
- package/dist/{hooks.d.ts → flex-layout/hooks/useListPaging.d.ts} +6 -12
- package/dist/flex-layout/hooks/useListPaging.js +175 -0
- package/dist/flex-layout/hooks/useListPaging.js.map +1 -0
- package/dist/flex-layout/hooks/useSizes.cjs +104 -0
- package/dist/flex-layout/hooks/useSizes.cjs.map +1 -0
- package/dist/flex-layout/hooks/useSizes.d.ts +8 -0
- package/dist/flex-layout/hooks/useSizes.js +101 -0
- package/dist/flex-layout/hooks/useSizes.js.map +1 -0
- package/dist/flex-layout/index.cjs +42 -0
- package/dist/flex-layout/index.cjs.map +1 -0
- package/dist/flex-layout/index.d.ts +5 -0
- package/dist/flex-layout/index.js +7 -0
- package/dist/flex-layout/index.js.map +1 -0
- package/dist/flex-layout/providers/FlexLayoutContext.cjs +26 -0
- package/dist/flex-layout/providers/FlexLayoutContext.cjs.map +1 -0
- package/dist/flex-layout/providers/FlexLayoutContext.d.ts +9 -0
- package/dist/flex-layout/providers/FlexLayoutContext.js +23 -0
- package/dist/flex-layout/providers/FlexLayoutContext.js.map +1 -0
- package/dist/{providers.cjs → flex-layout/providers/FlexLayoutHooks.cjs} +22 -186
- package/dist/flex-layout/providers/FlexLayoutHooks.cjs.map +1 -0
- package/dist/flex-layout/providers/FlexLayoutHooks.d.ts +51 -0
- package/dist/{providers.js → flex-layout/providers/FlexLayoutHooks.js} +14 -178
- package/dist/flex-layout/providers/FlexLayoutHooks.js.map +1 -0
- package/dist/flex-layout/providers/index.cjs +14 -0
- package/dist/flex-layout/providers/index.cjs.map +1 -0
- package/dist/flex-layout/providers/index.d.ts +1 -0
- package/dist/flex-layout/providers/index.js +3 -0
- package/dist/flex-layout/providers/index.js.map +1 -0
- package/dist/{store.cjs → flex-layout/store/FlexLayoutContainerStore.cjs} +20 -21
- package/dist/flex-layout/store/FlexLayoutContainerStore.cjs.map +1 -0
- package/dist/flex-layout/store/FlexLayoutContainerStore.d.ts +62 -0
- package/dist/{store.js → flex-layout/store/FlexLayoutContainerStore.js} +20 -21
- package/dist/flex-layout/store/FlexLayoutContainerStore.js.map +1 -0
- package/dist/flex-layout/store/index.cjs +14 -0
- package/dist/flex-layout/store/index.cjs.map +1 -0
- package/dist/flex-layout/store/index.d.ts +1 -0
- package/dist/flex-layout/store/index.js +3 -0
- package/dist/flex-layout/store/index.js.map +1 -0
- package/dist/flex-layout/styles/FlexLayout.module.css +416 -0
- package/dist/flex-layout/styles/listScroll.module.css +85 -0
- package/dist/flex-layout/styles/shake.module.css +41 -0
- package/dist/flex-layout/types/FlexDirectionTypes.cjs +4 -0
- package/dist/flex-layout/types/FlexDirectionTypes.cjs.map +1 -0
- package/dist/flex-layout/types/FlexDirectionTypes.d.ts +6 -0
- package/dist/flex-layout/types/FlexDirectionTypes.js +3 -0
- package/dist/flex-layout/types/FlexDirectionTypes.js.map +1 -0
- package/dist/flex-layout/types/FlexLayoutTypes.cjs +4 -0
- package/dist/flex-layout/types/FlexLayoutTypes.cjs.map +1 -0
- package/dist/flex-layout/types/FlexLayoutTypes.d.ts +53 -0
- package/dist/flex-layout/types/FlexLayoutTypes.js +3 -0
- package/dist/flex-layout/types/FlexLayoutTypes.js.map +1 -0
- package/dist/{utils.cjs → flex-layout/utils/FlexLayoutUtils.cjs} +3 -4
- package/dist/flex-layout/utils/FlexLayoutUtils.cjs.map +1 -0
- package/dist/flex-layout/utils/FlexLayoutUtils.d.ts +26 -0
- package/dist/{utils.js → flex-layout/utils/FlexLayoutUtils.js} +3 -4
- package/dist/flex-layout/utils/FlexLayoutUtils.js.map +1 -0
- package/dist/flex-layout/utils/index.cjs +14 -0
- package/dist/flex-layout/utils/index.cjs.map +1 -0
- package/dist/flex-layout/utils/index.d.ts +1 -0
- package/dist/flex-layout/utils/index.js +3 -0
- package/dist/flex-layout/utils/index.js.map +1 -0
- package/dist/index.cjs +10 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types/css.d.cjs +4 -0
- package/dist/types/css.d.cjs.map +1 -0
- package/dist/types/css.d.js +3 -0
- package/dist/types/css.d.js.map +1 -0
- package/package.json +27 -44
- package/dist/FlexLayoutSplitScreenDragBox-eCtq4kLd.d.cts +0 -31
- package/dist/FlexLayoutSplitScreenDragBox-eCtq4kLd.d.ts +0 -31
- package/dist/components.cjs +0 -3048
- package/dist/components.cjs.map +0 -1
- package/dist/components.css +0 -471
- package/dist/components.css.map +0 -1
- package/dist/components.d.cts +0 -122
- package/dist/components.d.ts +0 -122
- package/dist/components.js +0 -3036
- package/dist/components.js.map +0 -1
- package/dist/hooks.cjs.map +0 -1
- package/dist/hooks.d.cts +0 -37
- package/dist/hooks.js.map +0 -1
- package/dist/index.d.cts +0 -2
- package/dist/providers.cjs.map +0 -1
- package/dist/providers.d.cts +0 -54
- package/dist/providers.d.ts +0 -54
- package/dist/providers.js.map +0 -1
- package/dist/store.cjs.map +0 -1
- package/dist/store.d.cts +0 -67
- package/dist/store.d.ts +0 -67
- package/dist/store.js.map +0 -1
- package/dist/useDrag-CYQnhUFk.d.cts +0 -108
- package/dist/utils.cjs.map +0 -1
- package/dist/utils.d.cts +0 -28
- package/dist/utils.d.ts +0 -28
- package/dist/utils.js.map +0 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var FlexLayoutHooks = require('./FlexLayoutHooks');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Object.keys(FlexLayoutHooks).forEach(function (k) {
|
|
8
|
+
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function () { return FlexLayoutHooks[k]; }
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=index.cjs.map
|
|
14
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs","sourcesContent":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./FlexLayoutHooks";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
|
|
@@ -8,7 +8,6 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
8
8
|
|
|
9
9
|
var equal__default = /*#__PURE__*/_interopDefault(equal);
|
|
10
10
|
|
|
11
|
-
// src/flex-layout/store/FlexLayoutContainerStore.ts
|
|
12
11
|
function updateScrollStore(subject, newValue) {
|
|
13
12
|
const currentValue = subject.getValue();
|
|
14
13
|
if (!equal__default.default(currentValue, newValue)) {
|
|
@@ -27,9 +26,9 @@ function updateSplitScreenStore(newValue) {
|
|
|
27
26
|
layoutSplitScreenStore.next(newValue);
|
|
28
27
|
}
|
|
29
28
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
const scrollPositions = {};
|
|
30
|
+
const scrollPositionsSubject = new rxjs.BehaviorSubject(scrollPositions);
|
|
31
|
+
const setScrollPosition = (layoutName, position) => {
|
|
33
32
|
const current = scrollPositionsSubject.getValue();
|
|
34
33
|
const prevPos = current[layoutName];
|
|
35
34
|
if (prevPos && prevPos.x === position.x && prevPos.y === position.y) {
|
|
@@ -41,7 +40,7 @@ var setScrollPosition = (layoutName, position) => {
|
|
|
41
40
|
};
|
|
42
41
|
updateScrollStore(scrollPositionsSubject, newPositions);
|
|
43
42
|
};
|
|
44
|
-
|
|
43
|
+
const getScrollPosition = (layoutName) => {
|
|
45
44
|
return scrollPositionsSubject.pipe(
|
|
46
45
|
// 해당 layoutName이 정의되지 않았을 때는 제외
|
|
47
46
|
operators.filter((e) => e[layoutName] !== void 0),
|
|
@@ -51,14 +50,14 @@ var getScrollPosition = (layoutName) => {
|
|
|
51
50
|
)
|
|
52
51
|
);
|
|
53
52
|
};
|
|
54
|
-
|
|
53
|
+
const removeScrollPosition = (layoutName) => {
|
|
55
54
|
const current = scrollPositionsSubject.getValue();
|
|
56
55
|
delete current[layoutName];
|
|
57
56
|
const newPositions = { ...current };
|
|
58
57
|
updateScrollStore(scrollPositionsSubject, newPositions);
|
|
59
58
|
};
|
|
60
|
-
|
|
61
|
-
|
|
59
|
+
const layoutSplitScreenStore = new rxjs.BehaviorSubject({});
|
|
60
|
+
const setSplitScreen = (rootName, layoutName, newComponents) => {
|
|
62
61
|
const current = layoutSplitScreenStore.getValue();
|
|
63
62
|
const updatedLayout = { ...current[rootName] || {} };
|
|
64
63
|
updatedLayout[layoutName] = newComponents;
|
|
@@ -68,7 +67,7 @@ var setSplitScreen = (rootName, layoutName, newComponents) => {
|
|
|
68
67
|
};
|
|
69
68
|
updateSplitScreenStore(newStoreValue);
|
|
70
69
|
};
|
|
71
|
-
|
|
70
|
+
const resetRootSplitScreen = (rootName) => {
|
|
72
71
|
const current = layoutSplitScreenStore.getValue();
|
|
73
72
|
const newStoreValue = {
|
|
74
73
|
...current,
|
|
@@ -76,7 +75,7 @@ var resetRootSplitScreen = (rootName) => {
|
|
|
76
75
|
};
|
|
77
76
|
updateSplitScreenStore(newStoreValue);
|
|
78
77
|
};
|
|
79
|
-
|
|
78
|
+
const removeSplitScreenChild = (rootName, layoutName) => {
|
|
80
79
|
const current = layoutSplitScreenStore.getValue();
|
|
81
80
|
if (!current[rootName]) return;
|
|
82
81
|
const updatedLayout = { ...current[rootName] };
|
|
@@ -87,12 +86,12 @@ var removeSplitScreenChild = (rootName, layoutName) => {
|
|
|
87
86
|
};
|
|
88
87
|
updateSplitScreenStore(newStoreValue);
|
|
89
88
|
};
|
|
90
|
-
|
|
89
|
+
const getCurrentSplitScreenComponents = (rootName, layoutName) => {
|
|
91
90
|
const current = layoutSplitScreenStore.getValue();
|
|
92
91
|
if (!current[rootName]) return;
|
|
93
92
|
return current[rootName][layoutName];
|
|
94
93
|
};
|
|
95
|
-
|
|
94
|
+
const getSplitScreen = (rootName, layoutName) => {
|
|
96
95
|
return layoutSplitScreenStore.pipe(
|
|
97
96
|
operators.map((splitScreen) => splitScreen[rootName][layoutName]),
|
|
98
97
|
operators.distinctUntilChanged((prev, curr) => {
|
|
@@ -104,9 +103,9 @@ var getSplitScreen = (rootName, layoutName) => {
|
|
|
104
103
|
})
|
|
105
104
|
);
|
|
106
105
|
};
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
106
|
+
const flexContainerStore = new rxjs.BehaviorSubject({});
|
|
107
|
+
const flexResizePanelStore = new rxjs.BehaviorSubject({});
|
|
108
|
+
const setContainerRef = (layoutName, containerName, ref) => {
|
|
110
109
|
const currentRefs = flexContainerStore.getValue();
|
|
111
110
|
const updatedLayoutRefs = { ...currentRefs[layoutName] || {} };
|
|
112
111
|
if (ref === null) {
|
|
@@ -120,7 +119,7 @@ var setContainerRef = (layoutName, containerName, ref) => {
|
|
|
120
119
|
};
|
|
121
120
|
updateRefStore(flexContainerStore, newRefs);
|
|
122
121
|
};
|
|
123
|
-
|
|
122
|
+
const setResizePanelRef = (layoutName, containerName, ref) => {
|
|
124
123
|
const currentRefs = flexResizePanelStore.getValue();
|
|
125
124
|
const updatedLayoutRefs = { ...currentRefs[layoutName] || {} };
|
|
126
125
|
if (ref === null) {
|
|
@@ -134,7 +133,7 @@ var setResizePanelRef = (layoutName, containerName, ref) => {
|
|
|
134
133
|
};
|
|
135
134
|
updateRefStore(flexResizePanelStore, newRefs);
|
|
136
135
|
};
|
|
137
|
-
|
|
136
|
+
const getLayoutInfos = (layoutName) => {
|
|
138
137
|
return rxjs.combineLatest([flexContainerStore, flexResizePanelStore]).pipe(
|
|
139
138
|
operators.map(([containerRefs, resizePanelRefs]) => {
|
|
140
139
|
const containerData = containerRefs[layoutName] || {};
|
|
@@ -148,7 +147,7 @@ var getLayoutInfos = (layoutName) => {
|
|
|
148
147
|
// 빈 객체 제외
|
|
149
148
|
);
|
|
150
149
|
};
|
|
151
|
-
|
|
150
|
+
const getContainerRef = ({
|
|
152
151
|
containerName,
|
|
153
152
|
layoutName
|
|
154
153
|
}) => {
|
|
@@ -165,7 +164,7 @@ var getContainerRef = ({
|
|
|
165
164
|
operators.filter((ref) => ref !== null)
|
|
166
165
|
);
|
|
167
166
|
};
|
|
168
|
-
|
|
167
|
+
const getResizePanelRef = ({
|
|
169
168
|
containerName,
|
|
170
169
|
layoutName
|
|
171
170
|
}) => {
|
|
@@ -200,5 +199,5 @@ exports.setContainerRef = setContainerRef;
|
|
|
200
199
|
exports.setResizePanelRef = setResizePanelRef;
|
|
201
200
|
exports.setScrollPosition = setScrollPosition;
|
|
202
201
|
exports.setSplitScreen = setSplitScreen;
|
|
203
|
-
//# sourceMappingURL=
|
|
204
|
-
//# sourceMappingURL=
|
|
202
|
+
//# sourceMappingURL=FlexLayoutContainerStore.cjs.map
|
|
203
|
+
//# sourceMappingURL=FlexLayoutContainerStore.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/flex-layout/store/FlexLayoutContainerStore.ts"],"names":["equal","BehaviorSubject","filter","map","distinctUntilChanged","combineLatest"],"mappings":"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","file":"FlexLayoutContainerStore.cjs","sourcesContent":["\"use client\";\r\nimport equal from \"fast-deep-equal\";\r\nimport { RefObject } from \"react\";\r\nimport { BehaviorSubject, combineLatest } from \"rxjs\";\r\nimport { distinctUntilChanged, filter, map } from \"rxjs/operators\";\r\nimport { DropTargetComponent } from \"../hooks/useDrag\";\r\n\r\n/**\r\n * 이전 값과 새 값이 동일하지 않을 때만 store를 업데이트하는 유틸 함수\r\n */\r\nfunction updateScrollStore<T>(subject: BehaviorSubject<T>, newValue: T) {\r\n\tconst currentValue = subject.getValue();\r\n\t// deep 비교를 통해 실제 변경이 있는 경우만 next\r\n\tif (!equal(currentValue, newValue)) {\r\n\t\tsubject.next(newValue);\r\n\t}\r\n}\r\n// 동일한지 확인 후 업데이트하는 유틸\r\nfunction updateRefStore(store: BehaviorSubject<RefStore>, newState: RefStore) {\r\n\tconst prevState = store.getValue();\r\n\tif (!equal(prevState, newState)) {\r\n\t\tstore.next(newState);\r\n\t}\r\n}\r\n\r\nfunction updateSplitScreenStore(newValue: LayoutSplitScreenState) {\r\n\tconst prevValue = layoutSplitScreenStore.getValue();\r\n\t// deep-equal 로 비교\r\n\tif (!equal(prevValue, newValue)) {\r\n\t\tlayoutSplitScreenStore.next(newValue);\r\n\t}\r\n}\r\n\r\n// 구독 시 이전 상태들을 축적하여 관리\r\n// const stateWithHistory$ = flexContainerStore.pipe(\r\n// scan((acc, newState) => [...acc, newState], [] as RefStore[])\r\n// );\r\n\r\nexport interface ScrollPosition {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\nexport const scrollPositions: Record<string, ScrollPosition> = {};\r\n\r\nconst scrollPositionsSubject = new BehaviorSubject<\r\n\tRecord<string, ScrollPosition>\r\n>(scrollPositions);\r\n\r\n/**\r\n * 스크롤 위치 업데이트 함수\r\n *\r\n * 기존: 항상 store.next()가 호출됨 → 바뀌지 않았다면 건너뛰도록 변경\r\n */\r\nexport const setScrollPosition = (\r\n\tlayoutName: string,\r\n\tposition: ScrollPosition,\r\n) => {\r\n\tconst current = scrollPositionsSubject.getValue();\r\n\tconst prevPos = current[layoutName];\r\n\r\n\t// x, y 모두 동일하면 업데이트할 필요가 없으므로 조기 반환\r\n\tif (prevPos && prevPos.x === position.x && prevPos.y === position.y) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// 변경사항이 있으면 새 객체를 만들어 넘김\r\n\tconst newPositions = {\r\n\t\t...current,\r\n\t\t[layoutName]: position,\r\n\t};\r\n\r\n\tupdateScrollStore(scrollPositionsSubject, newPositions);\r\n};\r\n\r\n/**\r\n * 스크롤 위치 구독\r\n */\r\nexport const getScrollPosition = (layoutName: string) => {\r\n\treturn scrollPositionsSubject.pipe(\r\n\t\t// 해당 layoutName이 정의되지 않았을 때는 제외\r\n\t\tfilter((e) => e[layoutName] !== undefined),\r\n\t\tmap((positions) => positions[layoutName]),\r\n\t\tdistinctUntilChanged(\r\n\t\t\t(prev, curr) => prev?.x === curr?.x && prev?.y === curr?.y,\r\n\t\t),\r\n\t);\r\n};\r\n\r\nexport const removeScrollPosition = (layoutName: string) => {\r\n\tconst current = scrollPositionsSubject.getValue();\r\n\tdelete current[layoutName];\r\n\r\n\t// 꼭 삭제 후에도 이전 상태와 달라졌는지 확인\r\n\tconst newPositions = { ...current };\r\n\tupdateScrollStore(scrollPositionsSubject, newPositions);\r\n};\r\n\r\nexport type SplitScreenComponents = {\r\n\tafterDropTargetComponent: DropTargetComponent[];\r\n\tbeforeDropTargetComponent: DropTargetComponent[];\r\n\tcenterDropTargetComponent: DropTargetComponent[];\r\n\tdirection: \"row\" | \"column\";\r\n};\r\n\r\nexport type LayoutSplitScreenState = Record<\r\n\tstring,\r\n\tRecord<string, SplitScreenComponents>\r\n>;\r\n\r\nexport const layoutSplitScreenStore =\r\n\tnew BehaviorSubject<LayoutSplitScreenState>({});\r\n\r\nexport const setSplitScreen = (\r\n\trootName: string,\r\n\tlayoutName: string,\r\n\tnewComponents: SplitScreenComponents,\r\n) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\tconst updatedLayout = { ...(current[rootName] || {}) };\r\n\tupdatedLayout[layoutName] = newComponents;\r\n\r\n\tconst newStoreValue = {\r\n\t\t...current,\r\n\t\t[rootName]: updatedLayout,\r\n\t};\r\n\tupdateSplitScreenStore(newStoreValue);\r\n};\r\n\r\nexport const resetRootSplitScreen = (rootName: string) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\t// rootName 아래만 초기화\r\n\tconst newStoreValue = {\r\n\t\t...current,\r\n\t\t[rootName]: {},\r\n\t};\r\n\tupdateSplitScreenStore(newStoreValue);\r\n};\r\n\r\nexport const removeSplitScreenChild = (\r\n\trootName: string,\r\n\tlayoutName: string,\r\n) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\tif (!current[rootName]) return;\r\n\r\n\tconst updatedLayout = { ...current[rootName] };\r\n\tdelete updatedLayout[layoutName];\r\n\r\n\tconst newStoreValue = {\r\n\t\t...current,\r\n\t\t[rootName]: updatedLayout,\r\n\t};\r\n\tupdateSplitScreenStore(newStoreValue);\r\n};\r\n\r\nexport const getCurrentSplitScreenComponents = (\r\n\trootName: string,\r\n\tlayoutName: string,\r\n) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\tif (!current[rootName]) return;\r\n\treturn current[rootName][layoutName];\r\n};\r\n\r\nexport const getSplitScreen = (rootName: string, layoutName: string) => {\r\n\treturn layoutSplitScreenStore.pipe(\r\n\t\tmap((splitScreen) => splitScreen[rootName][layoutName]),\r\n\t\tdistinctUntilChanged((prev, curr) => {\r\n\t\t\t// 이전 상태와 현재 상태를 비교하여 동일하면 필터링\r\n\t\t\tconst filterChildren = (obj: any) => {\r\n\t\t\t\t// 객체 복사 후 children 속성 제거\r\n\t\t\t\tconst { children, component, targetComponent, x, y, ...rest } =\r\n\t\t\t\t\tobj || {};\r\n\t\t\t\treturn rest;\r\n\t\t\t};\r\n\t\t\treturn equal(filterChildren(prev), filterChildren(curr));\r\n\t\t}),\r\n\t);\r\n};\r\n\r\n// 중첩된 객체 구조로 ref를 관리하는 타입\r\ntype RefStore = {\r\n\t[layoutName: string]: {\r\n\t\t[containerName: string]: RefObject<HTMLElement | null>;\r\n\t};\r\n};\r\n\r\n// 초기값으로 빈 객체를 설정한 BehaviorSubject 생성\r\nexport const flexContainerStore = new BehaviorSubject<RefStore>({});\r\n\r\nexport const flexResizePanelStore = new BehaviorSubject<RefStore>({});\r\n/**\r\n * ref를 업데이트하는 함수\r\n * - 기존: 무조건 next() → 새/이전 상태 비교 후 다를 경우에만 next()\r\n */\r\nexport const setContainerRef = <T extends HTMLElement>(\r\n\tlayoutName: string,\r\n\tcontainerName: string,\r\n\tref: RefObject<T | null> | null,\r\n) => {\r\n\tconst currentRefs = flexContainerStore.getValue();\r\n\tconst updatedLayoutRefs = { ...(currentRefs[layoutName] || {}) };\r\n\r\n\tif (ref === null) {\r\n\t\tdelete updatedLayoutRefs[containerName];\r\n\t} else {\r\n\t\tupdatedLayoutRefs[containerName] = ref;\r\n\t}\r\n\r\n\tconst newRefs: RefStore = {\r\n\t\t...currentRefs,\r\n\t\t[layoutName]: updatedLayoutRefs,\r\n\t};\r\n\r\n\tupdateRefStore(flexContainerStore, newRefs);\r\n};\r\n\r\nexport const setResizePanelRef = <T extends HTMLElement>(\r\n\tlayoutName: string,\r\n\tcontainerName: string,\r\n\tref: RefObject<T | null> | null,\r\n) => {\r\n\tconst currentRefs = flexResizePanelStore.getValue();\r\n\tconst updatedLayoutRefs = { ...(currentRefs[layoutName] || {}) };\r\n\r\n\tif (ref === null) {\r\n\t\tdelete updatedLayoutRefs[containerName];\r\n\t} else {\r\n\t\tupdatedLayoutRefs[containerName] = ref;\r\n\t}\r\n\r\n\tconst newRefs: RefStore = {\r\n\t\t...currentRefs,\r\n\t\t[layoutName]: updatedLayoutRefs,\r\n\t};\r\n\r\n\tupdateRefStore(flexResizePanelStore, newRefs);\r\n};\r\n\r\nexport const getLayoutInfos = (layoutName: string) => {\r\n\treturn combineLatest([flexContainerStore, flexResizePanelStore]).pipe(\r\n\t\tmap(([containerRefs, resizePanelRefs]) => {\r\n\t\t\t// 두 Store에서 layoutName에 해당하는 값을 병합\r\n\t\t\tconst containerData = containerRefs[layoutName] || {};\r\n\t\t\tconst resizePanelData = resizePanelRefs[layoutName] || {};\r\n\r\n\t\t\t// container와 resizePanel 데이터 합치기\r\n\t\t\treturn {\r\n\t\t\t\tcontainer: containerData,\r\n\t\t\t\tresizePanel: resizePanelData,\r\n\t\t\t};\r\n\t\t}),\r\n\t\tfilter((result) => result.container !== null), // 빈 객체 제외\r\n\t);\r\n};\r\n\r\n// 특정 containerName의 ref를 구독하는 함수\r\n// layoutName이 지정되지 않으면 전체 layout에서 해당하는 containerName의 ref를 찾음\r\nexport const getContainerRef = ({\r\n\tcontainerName,\r\n\tlayoutName,\r\n}: {\r\n\tcontainerName: string;\r\n\tlayoutName?: string;\r\n}) => {\r\n\treturn flexContainerStore.pipe(\r\n\t\tmap((refs: RefStore) => {\r\n\t\t\tif (layoutName) {\r\n\t\t\t\t// 지정된 layoutName에서 해당 containerName의 ref 반환\r\n\t\t\t\treturn refs[layoutName]?.[containerName] || null;\r\n\t\t\t} else {\r\n\t\t\t\t// 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t\treturn Object.entries(refs).find(\r\n\t\t\t\t\t([key, value]) => refs[key][containerName],\r\n\t\t\t\t)?.[1][containerName];\r\n\t\t\t}\r\n\t\t\t// else {\r\n\t\t\t// // 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t// for (const layout in refs) {\r\n\t\t\t// if (refs[layout][containerName]) {\r\n\t\t\t// return refs[layout][containerName];\r\n\t\t\t// }\r\n\t\t\t// }\r\n\t\t\t// return null;\r\n\t\t\t// }\r\n\t\t}),\r\n\t\tfilter((ref) => ref !== null),\r\n\t);\r\n};\r\n\r\nexport const getResizePanelRef = ({\r\n\tcontainerName,\r\n\tlayoutName,\r\n}: {\r\n\tcontainerName: string;\r\n\tlayoutName?: string;\r\n}) => {\r\n\treturn flexResizePanelStore.pipe(\r\n\t\tmap((refs: RefStore) => {\r\n\t\t\tif (layoutName) {\r\n\t\t\t\t// 지정된 layoutName에서 해당 containerName의 ref 반환\r\n\t\t\t\treturn refs[layoutName]?.[containerName] || null;\r\n\t\t\t} else {\r\n\t\t\t\t// 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t\treturn Object.entries(refs).find(\r\n\t\t\t\t\t([key, value]) => refs[key][containerName],\r\n\t\t\t\t)?.[1][containerName];\r\n\t\t\t}\r\n\t\t\t// else {\r\n\t\t\t// // 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t// for (const layout in refs) {\r\n\t\t\t// if (refs[layout][containerName]) {\r\n\t\t\t// return refs[layout][containerName];\r\n\t\t\t// }\r\n\t\t\t// }\r\n\t\t\t// return null;\r\n\t\t\t// }\r\n\t\t}),\r\n\t\tfilter((ref) => ref !== null),\r\n\t);\r\n};\r\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { RefObject } from "react";
|
|
2
|
+
import { BehaviorSubject } from "rxjs";
|
|
3
|
+
import { DropTargetComponent } from "../hooks/useDrag";
|
|
4
|
+
export interface ScrollPosition {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const scrollPositions: Record<string, ScrollPosition>;
|
|
9
|
+
/**
|
|
10
|
+
* 스크롤 위치 업데이트 함수
|
|
11
|
+
*
|
|
12
|
+
* 기존: 항상 store.next()가 호출됨 → 바뀌지 않았다면 건너뛰도록 변경
|
|
13
|
+
*/
|
|
14
|
+
export declare const setScrollPosition: (layoutName: string, position: ScrollPosition) => void;
|
|
15
|
+
/**
|
|
16
|
+
* 스크롤 위치 구독
|
|
17
|
+
*/
|
|
18
|
+
export declare const getScrollPosition: (layoutName: string) => import("rxjs").Observable<ScrollPosition>;
|
|
19
|
+
export declare const removeScrollPosition: (layoutName: string) => void;
|
|
20
|
+
export type SplitScreenComponents = {
|
|
21
|
+
afterDropTargetComponent: DropTargetComponent[];
|
|
22
|
+
beforeDropTargetComponent: DropTargetComponent[];
|
|
23
|
+
centerDropTargetComponent: DropTargetComponent[];
|
|
24
|
+
direction: "row" | "column";
|
|
25
|
+
};
|
|
26
|
+
export type LayoutSplitScreenState = Record<string, Record<string, SplitScreenComponents>>;
|
|
27
|
+
export declare const layoutSplitScreenStore: BehaviorSubject<LayoutSplitScreenState>;
|
|
28
|
+
export declare const setSplitScreen: (rootName: string, layoutName: string, newComponents: SplitScreenComponents) => void;
|
|
29
|
+
export declare const resetRootSplitScreen: (rootName: string) => void;
|
|
30
|
+
export declare const removeSplitScreenChild: (rootName: string, layoutName: string) => void;
|
|
31
|
+
export declare const getCurrentSplitScreenComponents: (rootName: string, layoutName: string) => SplitScreenComponents | undefined;
|
|
32
|
+
export declare const getSplitScreen: (rootName: string, layoutName: string) => import("rxjs").Observable<SplitScreenComponents>;
|
|
33
|
+
type RefStore = {
|
|
34
|
+
[layoutName: string]: {
|
|
35
|
+
[containerName: string]: RefObject<HTMLElement | null>;
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
export declare const flexContainerStore: BehaviorSubject<RefStore>;
|
|
39
|
+
export declare const flexResizePanelStore: BehaviorSubject<RefStore>;
|
|
40
|
+
/**
|
|
41
|
+
* ref를 업데이트하는 함수
|
|
42
|
+
* - 기존: 무조건 next() → 새/이전 상태 비교 후 다를 경우에만 next()
|
|
43
|
+
*/
|
|
44
|
+
export declare const setContainerRef: <T extends HTMLElement>(layoutName: string, containerName: string, ref: RefObject<T | null> | null) => void;
|
|
45
|
+
export declare const setResizePanelRef: <T extends HTMLElement>(layoutName: string, containerName: string, ref: RefObject<T | null> | null) => void;
|
|
46
|
+
export declare const getLayoutInfos: (layoutName: string) => import("rxjs").Observable<{
|
|
47
|
+
container: {
|
|
48
|
+
[containerName: string]: RefObject<HTMLElement | null>;
|
|
49
|
+
};
|
|
50
|
+
resizePanel: {
|
|
51
|
+
[containerName: string]: RefObject<HTMLElement | null>;
|
|
52
|
+
};
|
|
53
|
+
}>;
|
|
54
|
+
export declare const getContainerRef: ({ containerName, layoutName, }: {
|
|
55
|
+
containerName: string;
|
|
56
|
+
layoutName?: string;
|
|
57
|
+
}) => import("rxjs").Observable<RefObject<HTMLElement | null> | undefined>;
|
|
58
|
+
export declare const getResizePanelRef: ({ containerName, layoutName, }: {
|
|
59
|
+
containerName: string;
|
|
60
|
+
layoutName?: string;
|
|
61
|
+
}) => import("rxjs").Observable<RefObject<HTMLElement | null> | undefined>;
|
|
62
|
+
export {};
|
|
@@ -2,7 +2,6 @@ import equal from 'fast-deep-equal';
|
|
|
2
2
|
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
3
3
|
import { filter, map, distinctUntilChanged } from 'rxjs/operators';
|
|
4
4
|
|
|
5
|
-
// src/flex-layout/store/FlexLayoutContainerStore.ts
|
|
6
5
|
function updateScrollStore(subject, newValue) {
|
|
7
6
|
const currentValue = subject.getValue();
|
|
8
7
|
if (!equal(currentValue, newValue)) {
|
|
@@ -21,9 +20,9 @@ function updateSplitScreenStore(newValue) {
|
|
|
21
20
|
layoutSplitScreenStore.next(newValue);
|
|
22
21
|
}
|
|
23
22
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
const scrollPositions = {};
|
|
24
|
+
const scrollPositionsSubject = new BehaviorSubject(scrollPositions);
|
|
25
|
+
const setScrollPosition = (layoutName, position) => {
|
|
27
26
|
const current = scrollPositionsSubject.getValue();
|
|
28
27
|
const prevPos = current[layoutName];
|
|
29
28
|
if (prevPos && prevPos.x === position.x && prevPos.y === position.y) {
|
|
@@ -35,7 +34,7 @@ var setScrollPosition = (layoutName, position) => {
|
|
|
35
34
|
};
|
|
36
35
|
updateScrollStore(scrollPositionsSubject, newPositions);
|
|
37
36
|
};
|
|
38
|
-
|
|
37
|
+
const getScrollPosition = (layoutName) => {
|
|
39
38
|
return scrollPositionsSubject.pipe(
|
|
40
39
|
// 해당 layoutName이 정의되지 않았을 때는 제외
|
|
41
40
|
filter((e) => e[layoutName] !== void 0),
|
|
@@ -45,14 +44,14 @@ var getScrollPosition = (layoutName) => {
|
|
|
45
44
|
)
|
|
46
45
|
);
|
|
47
46
|
};
|
|
48
|
-
|
|
47
|
+
const removeScrollPosition = (layoutName) => {
|
|
49
48
|
const current = scrollPositionsSubject.getValue();
|
|
50
49
|
delete current[layoutName];
|
|
51
50
|
const newPositions = { ...current };
|
|
52
51
|
updateScrollStore(scrollPositionsSubject, newPositions);
|
|
53
52
|
};
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
const layoutSplitScreenStore = new BehaviorSubject({});
|
|
54
|
+
const setSplitScreen = (rootName, layoutName, newComponents) => {
|
|
56
55
|
const current = layoutSplitScreenStore.getValue();
|
|
57
56
|
const updatedLayout = { ...current[rootName] || {} };
|
|
58
57
|
updatedLayout[layoutName] = newComponents;
|
|
@@ -62,7 +61,7 @@ var setSplitScreen = (rootName, layoutName, newComponents) => {
|
|
|
62
61
|
};
|
|
63
62
|
updateSplitScreenStore(newStoreValue);
|
|
64
63
|
};
|
|
65
|
-
|
|
64
|
+
const resetRootSplitScreen = (rootName) => {
|
|
66
65
|
const current = layoutSplitScreenStore.getValue();
|
|
67
66
|
const newStoreValue = {
|
|
68
67
|
...current,
|
|
@@ -70,7 +69,7 @@ var resetRootSplitScreen = (rootName) => {
|
|
|
70
69
|
};
|
|
71
70
|
updateSplitScreenStore(newStoreValue);
|
|
72
71
|
};
|
|
73
|
-
|
|
72
|
+
const removeSplitScreenChild = (rootName, layoutName) => {
|
|
74
73
|
const current = layoutSplitScreenStore.getValue();
|
|
75
74
|
if (!current[rootName]) return;
|
|
76
75
|
const updatedLayout = { ...current[rootName] };
|
|
@@ -81,12 +80,12 @@ var removeSplitScreenChild = (rootName, layoutName) => {
|
|
|
81
80
|
};
|
|
82
81
|
updateSplitScreenStore(newStoreValue);
|
|
83
82
|
};
|
|
84
|
-
|
|
83
|
+
const getCurrentSplitScreenComponents = (rootName, layoutName) => {
|
|
85
84
|
const current = layoutSplitScreenStore.getValue();
|
|
86
85
|
if (!current[rootName]) return;
|
|
87
86
|
return current[rootName][layoutName];
|
|
88
87
|
};
|
|
89
|
-
|
|
88
|
+
const getSplitScreen = (rootName, layoutName) => {
|
|
90
89
|
return layoutSplitScreenStore.pipe(
|
|
91
90
|
map((splitScreen) => splitScreen[rootName][layoutName]),
|
|
92
91
|
distinctUntilChanged((prev, curr) => {
|
|
@@ -98,9 +97,9 @@ var getSplitScreen = (rootName, layoutName) => {
|
|
|
98
97
|
})
|
|
99
98
|
);
|
|
100
99
|
};
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
100
|
+
const flexContainerStore = new BehaviorSubject({});
|
|
101
|
+
const flexResizePanelStore = new BehaviorSubject({});
|
|
102
|
+
const setContainerRef = (layoutName, containerName, ref) => {
|
|
104
103
|
const currentRefs = flexContainerStore.getValue();
|
|
105
104
|
const updatedLayoutRefs = { ...currentRefs[layoutName] || {} };
|
|
106
105
|
if (ref === null) {
|
|
@@ -114,7 +113,7 @@ var setContainerRef = (layoutName, containerName, ref) => {
|
|
|
114
113
|
};
|
|
115
114
|
updateRefStore(flexContainerStore, newRefs);
|
|
116
115
|
};
|
|
117
|
-
|
|
116
|
+
const setResizePanelRef = (layoutName, containerName, ref) => {
|
|
118
117
|
const currentRefs = flexResizePanelStore.getValue();
|
|
119
118
|
const updatedLayoutRefs = { ...currentRefs[layoutName] || {} };
|
|
120
119
|
if (ref === null) {
|
|
@@ -128,7 +127,7 @@ var setResizePanelRef = (layoutName, containerName, ref) => {
|
|
|
128
127
|
};
|
|
129
128
|
updateRefStore(flexResizePanelStore, newRefs);
|
|
130
129
|
};
|
|
131
|
-
|
|
130
|
+
const getLayoutInfos = (layoutName) => {
|
|
132
131
|
return combineLatest([flexContainerStore, flexResizePanelStore]).pipe(
|
|
133
132
|
map(([containerRefs, resizePanelRefs]) => {
|
|
134
133
|
const containerData = containerRefs[layoutName] || {};
|
|
@@ -142,7 +141,7 @@ var getLayoutInfos = (layoutName) => {
|
|
|
142
141
|
// 빈 객체 제외
|
|
143
142
|
);
|
|
144
143
|
};
|
|
145
|
-
|
|
144
|
+
const getContainerRef = ({
|
|
146
145
|
containerName,
|
|
147
146
|
layoutName
|
|
148
147
|
}) => {
|
|
@@ -159,7 +158,7 @@ var getContainerRef = ({
|
|
|
159
158
|
filter((ref) => ref !== null)
|
|
160
159
|
);
|
|
161
160
|
};
|
|
162
|
-
|
|
161
|
+
const getResizePanelRef = ({
|
|
163
162
|
containerName,
|
|
164
163
|
layoutName
|
|
165
164
|
}) => {
|
|
@@ -178,5 +177,5 @@ var getResizePanelRef = ({
|
|
|
178
177
|
};
|
|
179
178
|
|
|
180
179
|
export { flexContainerStore, flexResizePanelStore, getContainerRef, getCurrentSplitScreenComponents, getLayoutInfos, getResizePanelRef, getScrollPosition, getSplitScreen, layoutSplitScreenStore, removeScrollPosition, removeSplitScreenChild, resetRootSplitScreen, scrollPositions, setContainerRef, setResizePanelRef, setScrollPosition, setSplitScreen };
|
|
181
|
-
//# sourceMappingURL=
|
|
182
|
-
//# sourceMappingURL=
|
|
180
|
+
//# sourceMappingURL=FlexLayoutContainerStore.js.map
|
|
181
|
+
//# sourceMappingURL=FlexLayoutContainerStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/flex-layout/store/FlexLayoutContainerStore.ts"],"names":[],"mappings":"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","file":"FlexLayoutContainerStore.js","sourcesContent":["\"use client\";\r\nimport equal from \"fast-deep-equal\";\r\nimport { RefObject } from \"react\";\r\nimport { BehaviorSubject, combineLatest } from \"rxjs\";\r\nimport { distinctUntilChanged, filter, map } from \"rxjs/operators\";\r\nimport { DropTargetComponent } from \"../hooks/useDrag\";\r\n\r\n/**\r\n * 이전 값과 새 값이 동일하지 않을 때만 store를 업데이트하는 유틸 함수\r\n */\r\nfunction updateScrollStore<T>(subject: BehaviorSubject<T>, newValue: T) {\r\n\tconst currentValue = subject.getValue();\r\n\t// deep 비교를 통해 실제 변경이 있는 경우만 next\r\n\tif (!equal(currentValue, newValue)) {\r\n\t\tsubject.next(newValue);\r\n\t}\r\n}\r\n// 동일한지 확인 후 업데이트하는 유틸\r\nfunction updateRefStore(store: BehaviorSubject<RefStore>, newState: RefStore) {\r\n\tconst prevState = store.getValue();\r\n\tif (!equal(prevState, newState)) {\r\n\t\tstore.next(newState);\r\n\t}\r\n}\r\n\r\nfunction updateSplitScreenStore(newValue: LayoutSplitScreenState) {\r\n\tconst prevValue = layoutSplitScreenStore.getValue();\r\n\t// deep-equal 로 비교\r\n\tif (!equal(prevValue, newValue)) {\r\n\t\tlayoutSplitScreenStore.next(newValue);\r\n\t}\r\n}\r\n\r\n// 구독 시 이전 상태들을 축적하여 관리\r\n// const stateWithHistory$ = flexContainerStore.pipe(\r\n// scan((acc, newState) => [...acc, newState], [] as RefStore[])\r\n// );\r\n\r\nexport interface ScrollPosition {\r\n\tx: number;\r\n\ty: number;\r\n}\r\n\r\nexport const scrollPositions: Record<string, ScrollPosition> = {};\r\n\r\nconst scrollPositionsSubject = new BehaviorSubject<\r\n\tRecord<string, ScrollPosition>\r\n>(scrollPositions);\r\n\r\n/**\r\n * 스크롤 위치 업데이트 함수\r\n *\r\n * 기존: 항상 store.next()가 호출됨 → 바뀌지 않았다면 건너뛰도록 변경\r\n */\r\nexport const setScrollPosition = (\r\n\tlayoutName: string,\r\n\tposition: ScrollPosition,\r\n) => {\r\n\tconst current = scrollPositionsSubject.getValue();\r\n\tconst prevPos = current[layoutName];\r\n\r\n\t// x, y 모두 동일하면 업데이트할 필요가 없으므로 조기 반환\r\n\tif (prevPos && prevPos.x === position.x && prevPos.y === position.y) {\r\n\t\treturn;\r\n\t}\r\n\r\n\t// 변경사항이 있으면 새 객체를 만들어 넘김\r\n\tconst newPositions = {\r\n\t\t...current,\r\n\t\t[layoutName]: position,\r\n\t};\r\n\r\n\tupdateScrollStore(scrollPositionsSubject, newPositions);\r\n};\r\n\r\n/**\r\n * 스크롤 위치 구독\r\n */\r\nexport const getScrollPosition = (layoutName: string) => {\r\n\treturn scrollPositionsSubject.pipe(\r\n\t\t// 해당 layoutName이 정의되지 않았을 때는 제외\r\n\t\tfilter((e) => e[layoutName] !== undefined),\r\n\t\tmap((positions) => positions[layoutName]),\r\n\t\tdistinctUntilChanged(\r\n\t\t\t(prev, curr) => prev?.x === curr?.x && prev?.y === curr?.y,\r\n\t\t),\r\n\t);\r\n};\r\n\r\nexport const removeScrollPosition = (layoutName: string) => {\r\n\tconst current = scrollPositionsSubject.getValue();\r\n\tdelete current[layoutName];\r\n\r\n\t// 꼭 삭제 후에도 이전 상태와 달라졌는지 확인\r\n\tconst newPositions = { ...current };\r\n\tupdateScrollStore(scrollPositionsSubject, newPositions);\r\n};\r\n\r\nexport type SplitScreenComponents = {\r\n\tafterDropTargetComponent: DropTargetComponent[];\r\n\tbeforeDropTargetComponent: DropTargetComponent[];\r\n\tcenterDropTargetComponent: DropTargetComponent[];\r\n\tdirection: \"row\" | \"column\";\r\n};\r\n\r\nexport type LayoutSplitScreenState = Record<\r\n\tstring,\r\n\tRecord<string, SplitScreenComponents>\r\n>;\r\n\r\nexport const layoutSplitScreenStore =\r\n\tnew BehaviorSubject<LayoutSplitScreenState>({});\r\n\r\nexport const setSplitScreen = (\r\n\trootName: string,\r\n\tlayoutName: string,\r\n\tnewComponents: SplitScreenComponents,\r\n) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\tconst updatedLayout = { ...(current[rootName] || {}) };\r\n\tupdatedLayout[layoutName] = newComponents;\r\n\r\n\tconst newStoreValue = {\r\n\t\t...current,\r\n\t\t[rootName]: updatedLayout,\r\n\t};\r\n\tupdateSplitScreenStore(newStoreValue);\r\n};\r\n\r\nexport const resetRootSplitScreen = (rootName: string) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\t// rootName 아래만 초기화\r\n\tconst newStoreValue = {\r\n\t\t...current,\r\n\t\t[rootName]: {},\r\n\t};\r\n\tupdateSplitScreenStore(newStoreValue);\r\n};\r\n\r\nexport const removeSplitScreenChild = (\r\n\trootName: string,\r\n\tlayoutName: string,\r\n) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\tif (!current[rootName]) return;\r\n\r\n\tconst updatedLayout = { ...current[rootName] };\r\n\tdelete updatedLayout[layoutName];\r\n\r\n\tconst newStoreValue = {\r\n\t\t...current,\r\n\t\t[rootName]: updatedLayout,\r\n\t};\r\n\tupdateSplitScreenStore(newStoreValue);\r\n};\r\n\r\nexport const getCurrentSplitScreenComponents = (\r\n\trootName: string,\r\n\tlayoutName: string,\r\n) => {\r\n\tconst current = layoutSplitScreenStore.getValue();\r\n\tif (!current[rootName]) return;\r\n\treturn current[rootName][layoutName];\r\n};\r\n\r\nexport const getSplitScreen = (rootName: string, layoutName: string) => {\r\n\treturn layoutSplitScreenStore.pipe(\r\n\t\tmap((splitScreen) => splitScreen[rootName][layoutName]),\r\n\t\tdistinctUntilChanged((prev, curr) => {\r\n\t\t\t// 이전 상태와 현재 상태를 비교하여 동일하면 필터링\r\n\t\t\tconst filterChildren = (obj: any) => {\r\n\t\t\t\t// 객체 복사 후 children 속성 제거\r\n\t\t\t\tconst { children, component, targetComponent, x, y, ...rest } =\r\n\t\t\t\t\tobj || {};\r\n\t\t\t\treturn rest;\r\n\t\t\t};\r\n\t\t\treturn equal(filterChildren(prev), filterChildren(curr));\r\n\t\t}),\r\n\t);\r\n};\r\n\r\n// 중첩된 객체 구조로 ref를 관리하는 타입\r\ntype RefStore = {\r\n\t[layoutName: string]: {\r\n\t\t[containerName: string]: RefObject<HTMLElement | null>;\r\n\t};\r\n};\r\n\r\n// 초기값으로 빈 객체를 설정한 BehaviorSubject 생성\r\nexport const flexContainerStore = new BehaviorSubject<RefStore>({});\r\n\r\nexport const flexResizePanelStore = new BehaviorSubject<RefStore>({});\r\n/**\r\n * ref를 업데이트하는 함수\r\n * - 기존: 무조건 next() → 새/이전 상태 비교 후 다를 경우에만 next()\r\n */\r\nexport const setContainerRef = <T extends HTMLElement>(\r\n\tlayoutName: string,\r\n\tcontainerName: string,\r\n\tref: RefObject<T | null> | null,\r\n) => {\r\n\tconst currentRefs = flexContainerStore.getValue();\r\n\tconst updatedLayoutRefs = { ...(currentRefs[layoutName] || {}) };\r\n\r\n\tif (ref === null) {\r\n\t\tdelete updatedLayoutRefs[containerName];\r\n\t} else {\r\n\t\tupdatedLayoutRefs[containerName] = ref;\r\n\t}\r\n\r\n\tconst newRefs: RefStore = {\r\n\t\t...currentRefs,\r\n\t\t[layoutName]: updatedLayoutRefs,\r\n\t};\r\n\r\n\tupdateRefStore(flexContainerStore, newRefs);\r\n};\r\n\r\nexport const setResizePanelRef = <T extends HTMLElement>(\r\n\tlayoutName: string,\r\n\tcontainerName: string,\r\n\tref: RefObject<T | null> | null,\r\n) => {\r\n\tconst currentRefs = flexResizePanelStore.getValue();\r\n\tconst updatedLayoutRefs = { ...(currentRefs[layoutName] || {}) };\r\n\r\n\tif (ref === null) {\r\n\t\tdelete updatedLayoutRefs[containerName];\r\n\t} else {\r\n\t\tupdatedLayoutRefs[containerName] = ref;\r\n\t}\r\n\r\n\tconst newRefs: RefStore = {\r\n\t\t...currentRefs,\r\n\t\t[layoutName]: updatedLayoutRefs,\r\n\t};\r\n\r\n\tupdateRefStore(flexResizePanelStore, newRefs);\r\n};\r\n\r\nexport const getLayoutInfos = (layoutName: string) => {\r\n\treturn combineLatest([flexContainerStore, flexResizePanelStore]).pipe(\r\n\t\tmap(([containerRefs, resizePanelRefs]) => {\r\n\t\t\t// 두 Store에서 layoutName에 해당하는 값을 병합\r\n\t\t\tconst containerData = containerRefs[layoutName] || {};\r\n\t\t\tconst resizePanelData = resizePanelRefs[layoutName] || {};\r\n\r\n\t\t\t// container와 resizePanel 데이터 합치기\r\n\t\t\treturn {\r\n\t\t\t\tcontainer: containerData,\r\n\t\t\t\tresizePanel: resizePanelData,\r\n\t\t\t};\r\n\t\t}),\r\n\t\tfilter((result) => result.container !== null), // 빈 객체 제외\r\n\t);\r\n};\r\n\r\n// 특정 containerName의 ref를 구독하는 함수\r\n// layoutName이 지정되지 않으면 전체 layout에서 해당하는 containerName의 ref를 찾음\r\nexport const getContainerRef = ({\r\n\tcontainerName,\r\n\tlayoutName,\r\n}: {\r\n\tcontainerName: string;\r\n\tlayoutName?: string;\r\n}) => {\r\n\treturn flexContainerStore.pipe(\r\n\t\tmap((refs: RefStore) => {\r\n\t\t\tif (layoutName) {\r\n\t\t\t\t// 지정된 layoutName에서 해당 containerName의 ref 반환\r\n\t\t\t\treturn refs[layoutName]?.[containerName] || null;\r\n\t\t\t} else {\r\n\t\t\t\t// 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t\treturn Object.entries(refs).find(\r\n\t\t\t\t\t([key, value]) => refs[key][containerName],\r\n\t\t\t\t)?.[1][containerName];\r\n\t\t\t}\r\n\t\t\t// else {\r\n\t\t\t// // 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t// for (const layout in refs) {\r\n\t\t\t// if (refs[layout][containerName]) {\r\n\t\t\t// return refs[layout][containerName];\r\n\t\t\t// }\r\n\t\t\t// }\r\n\t\t\t// return null;\r\n\t\t\t// }\r\n\t\t}),\r\n\t\tfilter((ref) => ref !== null),\r\n\t);\r\n};\r\n\r\nexport const getResizePanelRef = ({\r\n\tcontainerName,\r\n\tlayoutName,\r\n}: {\r\n\tcontainerName: string;\r\n\tlayoutName?: string;\r\n}) => {\r\n\treturn flexResizePanelStore.pipe(\r\n\t\tmap((refs: RefStore) => {\r\n\t\t\tif (layoutName) {\r\n\t\t\t\t// 지정된 layoutName에서 해당 containerName의 ref 반환\r\n\t\t\t\treturn refs[layoutName]?.[containerName] || null;\r\n\t\t\t} else {\r\n\t\t\t\t// 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t\treturn Object.entries(refs).find(\r\n\t\t\t\t\t([key, value]) => refs[key][containerName],\r\n\t\t\t\t)?.[1][containerName];\r\n\t\t\t}\r\n\t\t\t// else {\r\n\t\t\t// // 모든 layout에서 해당 containerName의 ref 찾기\r\n\t\t\t// for (const layout in refs) {\r\n\t\t\t// if (refs[layout][containerName]) {\r\n\t\t\t// return refs[layout][containerName];\r\n\t\t\t// }\r\n\t\t\t// }\r\n\t\t\t// return null;\r\n\t\t\t// }\r\n\t\t}),\r\n\t\tfilter((ref) => ref !== null),\r\n\t);\r\n};\r\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var FlexLayoutContainerStore = require('./FlexLayoutContainerStore');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
Object.keys(FlexLayoutContainerStore).forEach(function (k) {
|
|
8
|
+
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function () { return FlexLayoutContainerStore[k]; }
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=index.cjs.map
|
|
14
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs","sourcesContent":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./FlexLayoutContainerStore";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js","sourcesContent":[]}
|