@violice/rmu 0.2.5 → 0.2.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.md +4 -4
- package/dist/index.d.mts +49 -0
- package/dist/index.d.ts +49 -3
- package/dist/index.js +229 -6
- package/dist/index.mjs +204 -0
- package/package.json +37 -30
- package/src/emitter.ts +37 -0
- package/src/events.ts +3 -10
- package/src/index.ts +1 -1
- package/src/rmu-outlet.tsx +2 -2
- package/src/use-rmu-events.ts +8 -9
- package/src/use-rmu-state.ts +13 -13
- package/dist/events.d.ts +0 -13
- package/dist/rmu-context.d.ts +0 -3
- package/dist/rmu-outlet.d.ts +0 -5
- package/dist/rmu-provider.d.ts +0 -4
- package/dist/rmu.cjs.development.js +0 -269
- package/dist/rmu.cjs.development.js.map +0 -1
- package/dist/rmu.cjs.production.min.js +0 -2
- package/dist/rmu.cjs.production.min.js.map +0 -1
- package/dist/rmu.esm.js +0 -259
- package/dist/rmu.esm.js.map +0 -1
- package/dist/types.d.ts +0 -15
- package/dist/use-rmu-events.d.ts +0 -2
- package/dist/use-rmu-state.d.ts +0 -16
package/src/events.ts
CHANGED
|
@@ -1,29 +1,23 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { RMUContextState } from './types';
|
|
3
|
+
import { emitter } from './emitter';
|
|
3
4
|
|
|
4
5
|
export const RMU_EVENTS = {
|
|
5
6
|
open: 'rmu:open-modal',
|
|
6
7
|
close: 'rmu:close-modal',
|
|
7
8
|
} as const;
|
|
8
9
|
|
|
9
|
-
type ValueOf<T> = T[keyof T];
|
|
10
|
-
|
|
11
|
-
const createEvent = (type: ValueOf<typeof RMU_EVENTS>, detail?: any) => {
|
|
12
|
-
return new CustomEvent(type, { detail });
|
|
13
|
-
};
|
|
14
|
-
|
|
15
10
|
export const openModal = (
|
|
16
11
|
modalComponent: ReactNode,
|
|
17
12
|
config: { outletId?: string } = {}
|
|
18
13
|
) => {
|
|
19
14
|
const modalId = `rmu-modal-${new Date().getTime().toString()}`;
|
|
20
15
|
const { outletId = 'rmu-default-outlet' } = config;
|
|
21
|
-
|
|
16
|
+
emitter.emit(RMU_EVENTS.open, {
|
|
22
17
|
modalId,
|
|
23
18
|
modalComponent,
|
|
24
19
|
outletId,
|
|
25
20
|
});
|
|
26
|
-
window.dispatchEvent(event);
|
|
27
21
|
return { modalId, outletId };
|
|
28
22
|
};
|
|
29
23
|
|
|
@@ -31,6 +25,5 @@ export const closeModal: RMUContextState['closeModal'] = ({
|
|
|
31
25
|
modalId,
|
|
32
26
|
outletId,
|
|
33
27
|
}) => {
|
|
34
|
-
|
|
35
|
-
window.dispatchEvent(event);
|
|
28
|
+
emitter.emit(RMU_EVENTS.close, { modalId, outletId });
|
|
36
29
|
};
|
package/src/index.ts
CHANGED
package/src/rmu-outlet.tsx
CHANGED
|
@@ -5,7 +5,7 @@ export const RMUOutlet = ({ outletId = 'rmu-default-outlet' }) => {
|
|
|
5
5
|
const ctx = useContext(RMUContext);
|
|
6
6
|
|
|
7
7
|
if (!ctx) {
|
|
8
|
-
throw new Error('RMUProvider not found in
|
|
8
|
+
throw new Error('RMUProvider not found in component tree');
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
const { outlets, addOutlet, removeOutlet } = ctx;
|
|
@@ -15,7 +15,7 @@ export const RMUOutlet = ({ outletId = 'rmu-default-outlet' }) => {
|
|
|
15
15
|
return () => {
|
|
16
16
|
removeOutlet(outletId);
|
|
17
17
|
};
|
|
18
|
-
}, []);
|
|
18
|
+
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
19
19
|
|
|
20
20
|
const modals = outlets[outletId] ?? {};
|
|
21
21
|
|
package/src/use-rmu-events.ts
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
import { useEffect } from 'react';
|
|
2
2
|
import { RMUContextState } from './types';
|
|
3
3
|
import { RMU_EVENTS } from './events';
|
|
4
|
+
import { emitter } from './emitter';
|
|
4
5
|
|
|
5
6
|
export const useRMUEvents = (ctx: RMUContextState) => {
|
|
6
7
|
const events = {
|
|
7
|
-
open: (
|
|
8
|
-
close: (
|
|
8
|
+
open: (payload: any) => ctx.openModal(payload),
|
|
9
|
+
close: (payload: any) => ctx.closeModal(payload),
|
|
9
10
|
};
|
|
10
11
|
|
|
11
12
|
useEffect(() => {
|
|
12
|
-
Object.keys(events).forEach(event => {
|
|
13
|
-
|
|
14
|
-
window.addEventListener(RMU_EVENTS[event], events[event]);
|
|
13
|
+
(Object.keys(events) as (keyof typeof events)[]).forEach(event => {
|
|
14
|
+
emitter.subscribe(RMU_EVENTS[event], events[event]);
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
return () => {
|
|
18
|
-
Object.keys(events).forEach(event => {
|
|
19
|
-
|
|
20
|
-
window.removeEventListener(RMU_EVENTS[event], events[event]);
|
|
18
|
+
(Object.keys(events) as (keyof typeof events)[]).forEach(event => {
|
|
19
|
+
emitter.unsubscribe(RMU_EVENTS[event], events[event]);
|
|
21
20
|
});
|
|
22
21
|
};
|
|
23
|
-
}, []);
|
|
22
|
+
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
24
23
|
};
|
package/src/use-rmu-state.ts
CHANGED
|
@@ -20,10 +20,9 @@ const reducer = (
|
|
|
20
20
|
switch (action.type) {
|
|
21
21
|
case ACTIONS.openModal: {
|
|
22
22
|
const { modalId, modalComponent, outletId } = action.payload;
|
|
23
|
+
const modalOutlet = state.outlets[outletId];
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (outletNotFound) {
|
|
25
|
+
if (!modalOutlet) {
|
|
27
26
|
throw new Error(`Outlet with id ${outletId} not found`);
|
|
28
27
|
}
|
|
29
28
|
|
|
@@ -32,7 +31,7 @@ const reducer = (
|
|
|
32
31
|
outlets: {
|
|
33
32
|
...state.outlets,
|
|
34
33
|
[outletId]: {
|
|
35
|
-
...
|
|
34
|
+
...modalOutlet,
|
|
36
35
|
[modalId]: modalComponent,
|
|
37
36
|
},
|
|
38
37
|
},
|
|
@@ -42,22 +41,24 @@ const reducer = (
|
|
|
42
41
|
const { modalId, outletId } = action.payload;
|
|
43
42
|
|
|
44
43
|
const modalOutlet = state.outlets[outletId];
|
|
45
|
-
|
|
44
|
+
if (!modalOutlet) {
|
|
45
|
+
throw new Error(`Outlet with id ${outletId} not found`);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const { [modalId]: _removed, ...restModals } = modalOutlet;
|
|
46
49
|
|
|
47
50
|
return {
|
|
48
51
|
...state,
|
|
49
52
|
outlets: {
|
|
50
53
|
...state.outlets,
|
|
51
|
-
|
|
54
|
+
[outletId]: restModals,
|
|
52
55
|
},
|
|
53
56
|
};
|
|
54
57
|
}
|
|
55
58
|
case ACTIONS.addOutlet: {
|
|
56
59
|
const { outletId } = action.payload;
|
|
57
60
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if (alreadyExists) {
|
|
61
|
+
if (!!state.outlets[outletId]) {
|
|
61
62
|
throw new Error(`Outlet with id ${outletId} already exists`);
|
|
62
63
|
}
|
|
63
64
|
|
|
@@ -72,12 +73,11 @@ const reducer = (
|
|
|
72
73
|
case ACTIONS.removeOutlet: {
|
|
73
74
|
const { outletId } = action.payload;
|
|
74
75
|
|
|
76
|
+
const { [outletId]: _removed, ...restOutlets } = state.outlets;
|
|
77
|
+
|
|
75
78
|
return {
|
|
76
79
|
...state,
|
|
77
|
-
outlets:
|
|
78
|
-
...state.outlets,
|
|
79
|
-
[outletId]: undefined,
|
|
80
|
-
},
|
|
80
|
+
outlets: restOutlets,
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
83
|
default:
|
package/dist/events.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
import { RMUContextState } from './types';
|
|
3
|
-
export declare const RMU_EVENTS: {
|
|
4
|
-
readonly open: "rmu:open-modal";
|
|
5
|
-
readonly close: "rmu:close-modal";
|
|
6
|
-
};
|
|
7
|
-
export declare const openModal: (modalComponent: ReactNode, config?: {
|
|
8
|
-
outletId?: string;
|
|
9
|
-
}) => {
|
|
10
|
-
modalId: string;
|
|
11
|
-
outletId: string;
|
|
12
|
-
};
|
|
13
|
-
export declare const closeModal: RMUContextState['closeModal'];
|
package/dist/rmu-context.d.ts
DELETED
package/dist/rmu-outlet.d.ts
DELETED
package/dist/rmu-provider.d.ts
DELETED
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
6
|
-
|
|
7
|
-
var React = require('react');
|
|
8
|
-
var React__default = _interopDefault(React);
|
|
9
|
-
|
|
10
|
-
var RMUContext = /*#__PURE__*/React.createContext(null);
|
|
11
|
-
|
|
12
|
-
var RMU_EVENTS = {
|
|
13
|
-
open: 'rmu:open-modal',
|
|
14
|
-
close: 'rmu:close-modal'
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
var createEvent = function createEvent(type, detail) {
|
|
18
|
-
return new CustomEvent(type, {
|
|
19
|
-
detail: detail
|
|
20
|
-
});
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
var openModal = function openModal(modalComponent, config) {
|
|
24
|
-
if (config === void 0) {
|
|
25
|
-
config = {};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
var modalId = "rmu-modal-" + new Date().getTime().toString();
|
|
29
|
-
var _config = config,
|
|
30
|
-
_config$outletId = _config.outletId,
|
|
31
|
-
outletId = _config$outletId === void 0 ? 'rmu-default-outlet' : _config$outletId;
|
|
32
|
-
var event = createEvent(RMU_EVENTS.open, {
|
|
33
|
-
modalId: modalId,
|
|
34
|
-
modalComponent: modalComponent,
|
|
35
|
-
outletId: outletId
|
|
36
|
-
});
|
|
37
|
-
window.dispatchEvent(event);
|
|
38
|
-
return {
|
|
39
|
-
modalId: modalId,
|
|
40
|
-
outletId: outletId
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
var closeModal = function closeModal(_ref) {
|
|
44
|
-
var modalId = _ref.modalId,
|
|
45
|
-
outletId = _ref.outletId;
|
|
46
|
-
var event = createEvent(RMU_EVENTS.close, {
|
|
47
|
-
modalId: modalId,
|
|
48
|
-
outletId: outletId
|
|
49
|
-
});
|
|
50
|
-
window.dispatchEvent(event);
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
var useRMUEvents = function useRMUEvents(ctx) {
|
|
54
|
-
var events = {
|
|
55
|
-
open: function open(event) {
|
|
56
|
-
return ctx.openModal(event.detail);
|
|
57
|
-
},
|
|
58
|
-
close: function close(event) {
|
|
59
|
-
return ctx.closeModal(event.detail);
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
React.useEffect(function () {
|
|
63
|
-
Object.keys(events).forEach(function (event) {
|
|
64
|
-
//@ts-ignore
|
|
65
|
-
window.addEventListener(RMU_EVENTS[event], events[event]);
|
|
66
|
-
});
|
|
67
|
-
return function () {
|
|
68
|
-
Object.keys(events).forEach(function (event) {
|
|
69
|
-
//@ts-ignore
|
|
70
|
-
window.removeEventListener(RMU_EVENTS[event], events[event]);
|
|
71
|
-
});
|
|
72
|
-
};
|
|
73
|
-
}, []);
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
function _extends() {
|
|
77
|
-
_extends = Object.assign || function (target) {
|
|
78
|
-
for (var i = 1; i < arguments.length; i++) {
|
|
79
|
-
var source = arguments[i];
|
|
80
|
-
|
|
81
|
-
for (var key in source) {
|
|
82
|
-
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
83
|
-
target[key] = source[key];
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
return target;
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
return _extends.apply(this, arguments);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
var ACTIONS = {
|
|
95
|
-
openModal: 'rmu:open-modal',
|
|
96
|
-
closeModal: 'rmu:close-modal',
|
|
97
|
-
addOutlet: 'rmu:add-modal',
|
|
98
|
-
removeOutlet: 'rmu:remove-outlet'
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
var reducer = function reducer(state, action) {
|
|
102
|
-
switch (action.type) {
|
|
103
|
-
case ACTIONS.openModal:
|
|
104
|
-
{
|
|
105
|
-
var _extends2, _extends3;
|
|
106
|
-
|
|
107
|
-
var _action$payload = action.payload,
|
|
108
|
-
modalId = _action$payload.modalId,
|
|
109
|
-
modalComponent = _action$payload.modalComponent,
|
|
110
|
-
outletId = _action$payload.outletId;
|
|
111
|
-
var outletNotFound = !state.outlets[outletId];
|
|
112
|
-
|
|
113
|
-
if (outletNotFound) {
|
|
114
|
-
throw new Error("Outlet with id " + outletId + " not found");
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
return _extends({}, state, {
|
|
118
|
-
outlets: _extends({}, state.outlets, (_extends3 = {}, _extends3[outletId] = _extends({}, state.outlets[outletId], (_extends2 = {}, _extends2[modalId] = modalComponent, _extends2)), _extends3))
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
case ACTIONS.closeModal:
|
|
123
|
-
{
|
|
124
|
-
var _action$payload2 = action.payload,
|
|
125
|
-
_modalId = _action$payload2.modalId,
|
|
126
|
-
_outletId = _action$payload2.outletId;
|
|
127
|
-
var modalOutlet = state.outlets[_outletId];
|
|
128
|
-
delete modalOutlet[_modalId];
|
|
129
|
-
return _extends({}, state, {
|
|
130
|
-
outlets: _extends({}, state.outlets, {
|
|
131
|
-
outlet: modalOutlet
|
|
132
|
-
})
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
case ACTIONS.addOutlet:
|
|
137
|
-
{
|
|
138
|
-
var _extends4;
|
|
139
|
-
|
|
140
|
-
var _outletId2 = action.payload.outletId;
|
|
141
|
-
var alreadyExists = !!state.outlets[_outletId2];
|
|
142
|
-
|
|
143
|
-
if (alreadyExists) {
|
|
144
|
-
throw new Error("Outlet with id " + _outletId2 + " already exists");
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
return _extends({}, state, {
|
|
148
|
-
outlets: _extends({}, state.outlets, (_extends4 = {}, _extends4[_outletId2] = {}, _extends4))
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
case ACTIONS.removeOutlet:
|
|
153
|
-
{
|
|
154
|
-
var _extends5;
|
|
155
|
-
|
|
156
|
-
var _outletId3 = action.payload.outletId;
|
|
157
|
-
return _extends({}, state, {
|
|
158
|
-
outlets: _extends({}, state.outlets, (_extends5 = {}, _extends5[_outletId3] = undefined, _extends5))
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
default:
|
|
163
|
-
return state;
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
var useRMUState = function useRMUState() {
|
|
168
|
-
var _useReducer = React.useReducer(reducer, {
|
|
169
|
-
outlets: {}
|
|
170
|
-
}),
|
|
171
|
-
state = _useReducer[0],
|
|
172
|
-
dispatch = _useReducer[1];
|
|
173
|
-
|
|
174
|
-
var openModal = function openModal(_ref) {
|
|
175
|
-
var modalId = _ref.modalId,
|
|
176
|
-
modalComponent = _ref.modalComponent,
|
|
177
|
-
outletId = _ref.outletId;
|
|
178
|
-
dispatch({
|
|
179
|
-
type: ACTIONS.openModal,
|
|
180
|
-
payload: {
|
|
181
|
-
modalId: modalId,
|
|
182
|
-
modalComponent: modalComponent,
|
|
183
|
-
outletId: outletId
|
|
184
|
-
}
|
|
185
|
-
});
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
var closeModal = function closeModal(_ref2) {
|
|
189
|
-
var modalId = _ref2.modalId,
|
|
190
|
-
outletId = _ref2.outletId;
|
|
191
|
-
dispatch({
|
|
192
|
-
type: ACTIONS.closeModal,
|
|
193
|
-
payload: {
|
|
194
|
-
modalId: modalId,
|
|
195
|
-
outletId: outletId
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
var addOutlet = function addOutlet(outletId) {
|
|
201
|
-
dispatch({
|
|
202
|
-
type: ACTIONS.addOutlet,
|
|
203
|
-
payload: {
|
|
204
|
-
outletId: outletId
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
var removeOutlet = function removeOutlet(outletId) {
|
|
210
|
-
dispatch({
|
|
211
|
-
type: ACTIONS.removeOutlet,
|
|
212
|
-
payload: {
|
|
213
|
-
outletId: outletId
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
};
|
|
217
|
-
|
|
218
|
-
return _extends({}, state, {
|
|
219
|
-
openModal: openModal,
|
|
220
|
-
closeModal: closeModal,
|
|
221
|
-
addOutlet: addOutlet,
|
|
222
|
-
removeOutlet: removeOutlet
|
|
223
|
-
});
|
|
224
|
-
};
|
|
225
|
-
|
|
226
|
-
var RMUProvider = function RMUProvider(_ref) {
|
|
227
|
-
var children = _ref.children;
|
|
228
|
-
var state = useRMUState();
|
|
229
|
-
useRMUEvents(state);
|
|
230
|
-
return React__default.createElement(RMUContext.Provider, {
|
|
231
|
-
value: state
|
|
232
|
-
}, children);
|
|
233
|
-
};
|
|
234
|
-
|
|
235
|
-
var RMUOutlet = function RMUOutlet(_ref) {
|
|
236
|
-
var _outlets$outletId;
|
|
237
|
-
|
|
238
|
-
var _ref$outletId = _ref.outletId,
|
|
239
|
-
outletId = _ref$outletId === void 0 ? 'rmu-default-outlet' : _ref$outletId;
|
|
240
|
-
var ctx = React.useContext(RMUContext);
|
|
241
|
-
|
|
242
|
-
if (!ctx) {
|
|
243
|
-
throw new Error('RMUProvider not found in components three');
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
var outlets = ctx.outlets,
|
|
247
|
-
addOutlet = ctx.addOutlet,
|
|
248
|
-
removeOutlet = ctx.removeOutlet;
|
|
249
|
-
React.useEffect(function () {
|
|
250
|
-
addOutlet(outletId);
|
|
251
|
-
return function () {
|
|
252
|
-
removeOutlet(outletId);
|
|
253
|
-
};
|
|
254
|
-
}, []);
|
|
255
|
-
var modals = (_outlets$outletId = outlets[outletId]) != null ? _outlets$outletId : {};
|
|
256
|
-
return React__default.createElement(React__default.Fragment, null, Object.entries(modals).map(function (_ref2) {
|
|
257
|
-
var modalId = _ref2[0],
|
|
258
|
-
modalComponent = _ref2[1];
|
|
259
|
-
return React__default.createElement(React.Fragment, {
|
|
260
|
-
key: modalId
|
|
261
|
-
}, modalComponent);
|
|
262
|
-
}));
|
|
263
|
-
};
|
|
264
|
-
|
|
265
|
-
exports.RMUOutlet = RMUOutlet;
|
|
266
|
-
exports.RMUProvider = RMUProvider;
|
|
267
|
-
exports.closeModal = closeModal;
|
|
268
|
-
exports.openModal = openModal;
|
|
269
|
-
//# sourceMappingURL=rmu.cjs.development.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rmu.cjs.development.js","sources":["../src/rmu-context.ts","../src/events.ts","../src/use-rmu-events.ts","../src/use-rmu-state.ts","../src/rmu-provider.tsx","../src/rmu-outlet.tsx"],"sourcesContent":["import { createContext } from 'react';\nimport { RMUContextState } from './types';\n\nexport const RMUContext = createContext<RMUContextState | null>(null);\n","import { ReactNode } from 'react';\nimport { RMUContextState } from './types';\n\nexport const RMU_EVENTS = {\n open: 'rmu:open-modal',\n close: 'rmu:close-modal',\n} as const;\n\ntype ValueOf<T> = T[keyof T];\n\nconst createEvent = (type: ValueOf<typeof RMU_EVENTS>, detail?: any) => {\n return new CustomEvent(type, { detail });\n};\n\nexport const openModal = (\n modalComponent: ReactNode,\n config: { outletId?: string } = {}\n) => {\n const modalId = `rmu-modal-${new Date().getTime().toString()}`;\n const { outletId = 'rmu-default-outlet' } = config;\n const event = createEvent(RMU_EVENTS.open, {\n modalId,\n modalComponent,\n outletId,\n });\n window.dispatchEvent(event);\n return { modalId, outletId };\n};\n\nexport const closeModal: RMUContextState['closeModal'] = ({\n modalId,\n outletId,\n}) => {\n const event = createEvent(RMU_EVENTS.close, { modalId, outletId });\n window.dispatchEvent(event);\n};\n","import { useEffect } from 'react';\nimport { RMUContextState } from './types';\nimport { RMU_EVENTS } from './events';\n\nexport const useRMUEvents = (ctx: RMUContextState) => {\n const events = {\n open: (event: any) => ctx.openModal(event.detail),\n close: (event: any) => ctx.closeModal(event.detail),\n };\n\n useEffect(() => {\n Object.keys(events).forEach(event => {\n //@ts-ignore\n window.addEventListener(RMU_EVENTS[event], events[event]);\n });\n\n return () => {\n Object.keys(events).forEach(event => {\n //@ts-ignore\n window.removeEventListener(RMU_EVENTS[event], events[event]);\n });\n };\n }, []);\n};\n","import { useReducer } from 'react';\nimport { RMUContextState } from './types';\n\nconst ACTIONS = {\n openModal: 'rmu:open-modal',\n closeModal: 'rmu:close-modal',\n addOutlet: 'rmu:add-modal',\n removeOutlet: 'rmu:remove-outlet',\n} as const;\n\nconst reducer = (\n state: {\n outlets: RMUContextState['outlets'];\n },\n action: {\n type: string;\n payload: Record<string, any>;\n }\n) => {\n switch (action.type) {\n case ACTIONS.openModal: {\n const { modalId, modalComponent, outletId } = action.payload;\n\n const outletNotFound = !state.outlets[outletId];\n\n if (outletNotFound) {\n throw new Error(`Outlet with id ${outletId} not found`);\n }\n\n return {\n ...state,\n outlets: {\n ...state.outlets,\n [outletId]: {\n ...state.outlets[outletId],\n [modalId]: modalComponent,\n },\n },\n };\n }\n case ACTIONS.closeModal: {\n const { modalId, outletId } = action.payload;\n\n const modalOutlet = state.outlets[outletId];\n delete modalOutlet[modalId];\n\n return {\n ...state,\n outlets: {\n ...state.outlets,\n outlet: modalOutlet,\n },\n };\n }\n case ACTIONS.addOutlet: {\n const { outletId } = action.payload;\n\n const alreadyExists = !!state.outlets[outletId];\n\n if (alreadyExists) {\n throw new Error(`Outlet with id ${outletId} already exists`);\n }\n\n return {\n ...state,\n outlets: {\n ...state.outlets,\n [outletId]: {},\n },\n };\n }\n case ACTIONS.removeOutlet: {\n const { outletId } = action.payload;\n\n return {\n ...state,\n outlets: {\n ...state.outlets,\n [outletId]: undefined,\n },\n };\n }\n default:\n return state;\n }\n};\n\nexport const useRMUState = () => {\n const [state, dispatch] = useReducer(reducer, {\n outlets: {},\n });\n\n const openModal: RMUContextState['openModal'] = ({\n modalId,\n modalComponent,\n outletId,\n }) => {\n dispatch({\n type: ACTIONS.openModal,\n payload: { modalId, modalComponent, outletId },\n });\n };\n\n const closeModal: RMUContextState['closeModal'] = ({ modalId, outletId }) => {\n dispatch({ type: ACTIONS.closeModal, payload: { modalId, outletId } });\n };\n\n const addOutlet: RMUContextState['addOutlet'] = outletId => {\n dispatch({ type: ACTIONS.addOutlet, payload: { outletId } });\n };\n\n const removeOutlet: RMUContextState['removeOutlet'] = outletId => {\n dispatch({ type: ACTIONS.removeOutlet, payload: { outletId } });\n };\n\n return {\n ...state,\n openModal,\n closeModal,\n addOutlet,\n removeOutlet,\n };\n};\n","import React from 'react';\nimport { RMUContext } from './rmu-context';\nimport { useRMUEvents } from './use-rmu-events';\nimport { useRMUState } from './use-rmu-state';\n\nexport const RMUProvider = ({ children }: { children: React.ReactNode }) => {\n const state = useRMUState();\n\n useRMUEvents(state);\n\n return <RMUContext.Provider value={state}>{children}</RMUContext.Provider>;\n};\n","import React, { Fragment, useContext, useEffect } from 'react';\nimport { RMUContext } from './rmu-context';\n\nexport const RMUOutlet = ({ outletId = 'rmu-default-outlet' }) => {\n const ctx = useContext(RMUContext);\n\n if (!ctx) {\n throw new Error('RMUProvider not found in components three');\n }\n\n const { outlets, addOutlet, removeOutlet } = ctx;\n\n useEffect(() => {\n addOutlet(outletId);\n return () => {\n removeOutlet(outletId);\n };\n }, []);\n\n const modals = outlets[outletId] ?? {};\n\n return (\n <>\n {Object.entries(modals).map(([modalId, modalComponent]) => (\n <Fragment key={modalId}>{modalComponent}</Fragment>\n ))}\n </>\n );\n};\n\nexport default RMUOutlet;\n"],"names":["RMUContext","createContext","RMU_EVENTS","open","close","createEvent","type","detail","CustomEvent","openModal","modalComponent","config","modalId","Date","getTime","toString","outletId","event","window","dispatchEvent","closeModal","useRMUEvents","ctx","events","useEffect","Object","keys","forEach","addEventListener","removeEventListener","ACTIONS","addOutlet","removeOutlet","reducer","state","action","payload","outletNotFound","outlets","Error","modalOutlet","outlet","alreadyExists","undefined","useRMUState","useReducer","dispatch","RMUProvider","children","React","Provider","value","RMUOutlet","useContext","modals","entries","map","Fragment","key"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t,e=require("react"),o=(t=e)&&"object"==typeof t&&"default"in t?t.default:t,n=e.createContext(null),l={open:"rmu:open-modal",close:"rmu:close-modal"},r=function(t,e){return new CustomEvent(t,{detail:e})};function u(){return(u=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var o=arguments[e];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(t[n]=o[n])}return t}).apply(this,arguments)}var d=function(t,e){switch(e.type){case"rmu:open-modal":var o,n,l=e.payload,r=l.modalId,d=l.modalComponent,a=l.outletId;if(!t.outlets[a])throw new Error("Outlet with id "+a+" not found");return u({},t,{outlets:u({},t.outlets,(n={},n[a]=u({},t.outlets[a],(o={},o[r]=d,o)),n))});case"rmu:close-modal":var i=e.payload,c=t.outlets[i.outletId];return delete c[i.modalId],u({},t,{outlets:u({},t.outlets,{outlet:c})});case"rmu:add-modal":var s,m=e.payload.outletId;if(t.outlets[m])throw new Error("Outlet with id "+m+" already exists");return u({},t,{outlets:u({},t.outlets,(s={},s[m]={},s))});case"rmu:remove-outlet":var p;return u({},t,{outlets:u({},t.outlets,(p={},p[e.payload.outletId]=void 0,p))});default:return t}};exports.RMUOutlet=function(t){var l,r=t.outletId,u=void 0===r?"rmu-default-outlet":r,d=e.useContext(n);if(!d)throw new Error("RMUProvider not found in components three");var a=d.outlets,i=d.addOutlet,c=d.removeOutlet;e.useEffect((function(){return i(u),function(){c(u)}}),[]);var s=null!=(l=a[u])?l:{};return o.createElement(o.Fragment,null,Object.entries(s).map((function(t){return o.createElement(e.Fragment,{key:t[0]},t[1])})))},exports.RMUProvider=function(t){var r,a,i,c,s=t.children,m=(r=e.useReducer(d,{outlets:{}}),a=r[1],u({},r[0],{openModal:function(t){a({type:"rmu:open-modal",payload:{modalId:t.modalId,modalComponent:t.modalComponent,outletId:t.outletId}})},closeModal:function(t){a({type:"rmu:close-modal",payload:{modalId:t.modalId,outletId:t.outletId}})},addOutlet:function(t){a({type:"rmu:add-modal",payload:{outletId:t}})},removeOutlet:function(t){a({type:"rmu:remove-outlet",payload:{outletId:t}})}}));return i=m,c={open:function(t){return i.openModal(t.detail)},close:function(t){return i.closeModal(t.detail)}},e.useEffect((function(){return Object.keys(c).forEach((function(t){window.addEventListener(l[t],c[t])})),function(){Object.keys(c).forEach((function(t){window.removeEventListener(l[t],c[t])}))}}),[]),o.createElement(n.Provider,{value:m},s)},exports.closeModal=function(t){var e=r(l.close,{modalId:t.modalId,outletId:t.outletId});window.dispatchEvent(e)},exports.openModal=function(t,e){void 0===e&&(e={});var o="rmu-modal-"+(new Date).getTime().toString(),n=e.outletId,u=void 0===n?"rmu-default-outlet":n,d=r(l.open,{modalId:o,modalComponent:t,outletId:u});return window.dispatchEvent(d),{modalId:o,outletId:u}};
|
|
2
|
-
//# sourceMappingURL=rmu.cjs.production.min.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rmu.cjs.production.min.js","sources":["../src/rmu-context.ts","../src/events.ts","../src/use-rmu-state.ts","../src/rmu-outlet.tsx","../src/rmu-provider.tsx","../src/use-rmu-events.ts"],"sourcesContent":["import { createContext } from 'react';\nimport { RMUContextState } from './types';\n\nexport const RMUContext = createContext<RMUContextState | null>(null);\n","import { ReactNode } from 'react';\nimport { RMUContextState } from './types';\n\nexport const RMU_EVENTS = {\n open: 'rmu:open-modal',\n close: 'rmu:close-modal',\n} as const;\n\ntype ValueOf<T> = T[keyof T];\n\nconst createEvent = (type: ValueOf<typeof RMU_EVENTS>, detail?: any) => {\n return new CustomEvent(type, { detail });\n};\n\nexport const openModal = (\n modalComponent: ReactNode,\n config: { outletId?: string } = {}\n) => {\n const modalId = `rmu-modal-${new Date().getTime().toString()}`;\n const { outletId = 'rmu-default-outlet' } = config;\n const event = createEvent(RMU_EVENTS.open, {\n modalId,\n modalComponent,\n outletId,\n });\n window.dispatchEvent(event);\n return { modalId, outletId };\n};\n\nexport const closeModal: RMUContextState['closeModal'] = ({\n modalId,\n outletId,\n}) => {\n const event = createEvent(RMU_EVENTS.close, { modalId, outletId });\n window.dispatchEvent(event);\n};\n","import { useReducer } from 'react';\nimport { RMUContextState } from './types';\n\nconst ACTIONS = {\n openModal: 'rmu:open-modal',\n closeModal: 'rmu:close-modal',\n addOutlet: 'rmu:add-modal',\n removeOutlet: 'rmu:remove-outlet',\n} as const;\n\nconst reducer = (\n state: {\n outlets: RMUContextState['outlets'];\n },\n action: {\n type: string;\n payload: Record<string, any>;\n }\n) => {\n switch (action.type) {\n case ACTIONS.openModal: {\n const { modalId, modalComponent, outletId } = action.payload;\n\n const outletNotFound = !state.outlets[outletId];\n\n if (outletNotFound) {\n throw new Error(`Outlet with id ${outletId} not found`);\n }\n\n return {\n ...state,\n outlets: {\n ...state.outlets,\n [outletId]: {\n ...state.outlets[outletId],\n [modalId]: modalComponent,\n },\n },\n };\n }\n case ACTIONS.closeModal: {\n const { modalId, outletId } = action.payload;\n\n const modalOutlet = state.outlets[outletId];\n delete modalOutlet[modalId];\n\n return {\n ...state,\n outlets: {\n ...state.outlets,\n outlet: modalOutlet,\n },\n };\n }\n case ACTIONS.addOutlet: {\n const { outletId } = action.payload;\n\n const alreadyExists = !!state.outlets[outletId];\n\n if (alreadyExists) {\n throw new Error(`Outlet with id ${outletId} already exists`);\n }\n\n return {\n ...state,\n outlets: {\n ...state.outlets,\n [outletId]: {},\n },\n };\n }\n case ACTIONS.removeOutlet: {\n const { outletId } = action.payload;\n\n return {\n ...state,\n outlets: {\n ...state.outlets,\n [outletId]: undefined,\n },\n };\n }\n default:\n return state;\n }\n};\n\nexport const useRMUState = () => {\n const [state, dispatch] = useReducer(reducer, {\n outlets: {},\n });\n\n const openModal: RMUContextState['openModal'] = ({\n modalId,\n modalComponent,\n outletId,\n }) => {\n dispatch({\n type: ACTIONS.openModal,\n payload: { modalId, modalComponent, outletId },\n });\n };\n\n const closeModal: RMUContextState['closeModal'] = ({ modalId, outletId }) => {\n dispatch({ type: ACTIONS.closeModal, payload: { modalId, outletId } });\n };\n\n const addOutlet: RMUContextState['addOutlet'] = outletId => {\n dispatch({ type: ACTIONS.addOutlet, payload: { outletId } });\n };\n\n const removeOutlet: RMUContextState['removeOutlet'] = outletId => {\n dispatch({ type: ACTIONS.removeOutlet, payload: { outletId } });\n };\n\n return {\n ...state,\n openModal,\n closeModal,\n addOutlet,\n removeOutlet,\n };\n};\n","import React, { Fragment, useContext, useEffect } from 'react';\nimport { RMUContext } from './rmu-context';\n\nexport const RMUOutlet = ({ outletId = 'rmu-default-outlet' }) => {\n const ctx = useContext(RMUContext);\n\n if (!ctx) {\n throw new Error('RMUProvider not found in components three');\n }\n\n const { outlets, addOutlet, removeOutlet } = ctx;\n\n useEffect(() => {\n addOutlet(outletId);\n return () => {\n removeOutlet(outletId);\n };\n }, []);\n\n const modals = outlets[outletId] ?? {};\n\n return (\n <>\n {Object.entries(modals).map(([modalId, modalComponent]) => (\n <Fragment key={modalId}>{modalComponent}</Fragment>\n ))}\n </>\n );\n};\n\nexport default RMUOutlet;\n","import React from 'react';\nimport { RMUContext } from './rmu-context';\nimport { useRMUEvents } from './use-rmu-events';\nimport { useRMUState } from './use-rmu-state';\n\nexport const RMUProvider = ({ children }: { children: React.ReactNode }) => {\n const state = useRMUState();\n\n useRMUEvents(state);\n\n return <RMUContext.Provider value={state}>{children}</RMUContext.Provider>;\n};\n","import { useEffect } from 'react';\nimport { RMUContextState } from './types';\nimport { RMU_EVENTS } from './events';\n\nexport const useRMUEvents = (ctx: RMUContextState) => {\n const events = {\n open: (event: any) => ctx.openModal(event.detail),\n close: (event: any) => ctx.closeModal(event.detail),\n };\n\n useEffect(() => {\n Object.keys(events).forEach(event => {\n //@ts-ignore\n window.addEventListener(RMU_EVENTS[event], events[event]);\n });\n\n return () => {\n Object.keys(events).forEach(event => {\n //@ts-ignore\n window.removeEventListener(RMU_EVENTS[event], events[event]);\n });\n };\n }, []);\n};\n"],"names":["RMUContext","createContext","RMU_EVENTS","open","close","createEvent","type","detail","CustomEvent","reducer","state","action","payload","modalId","modalComponent","outletId","outlets","Error","modalOutlet","outlet","undefined","ctx","useContext","addOutlet","removeOutlet","useEffect","modals","React","Object","entries","map","Fragment","key","dispatch","events","children","useReducer","openModal","closeModal","event","keys","forEach","window","addEventListener","removeEventListener","Provider","value","dispatchEvent","config","Date","getTime","toString"],"mappings":"oJAGaA,EAAaC,gBAAsC,MCAnDC,EAAa,CACxBC,KAAM,iBACNC,MAAO,mBAKHC,EAAc,SAACC,EAAkCC,UAC9C,IAAIC,YAAYF,EAAM,CAAEC,OAAAA,wNCD3BE,EAAU,SACdC,EAGAC,UAKQA,EAAOL,UAfJ,2BAiBuCK,EAAOC,QAA7CC,IAAAA,QAASC,IAAAA,eAAgBC,IAAAA,aAETL,EAAMM,QAAQD,SAG9B,IAAIE,wBAAwBF,4BAI/BL,GACHM,aACKN,EAAMM,gBACRD,QACIL,EAAMM,QAAQD,WAChBF,GAAUC,gBA9BT,wBAoCsBH,EAAOC,QAE/BM,EAAcR,EAAMM,UAFTD,wBAGVG,IAHCL,cAMHH,GACHM,aACKN,EAAMM,SACTG,OAAQD,UA5CL,sBAiDCH,EAAaJ,EAAOC,QAApBG,YAEgBL,EAAMM,QAAQD,SAG9B,IAAIE,wBAAwBF,iCAI/BL,GACHM,aACKN,EAAMM,gBACRD,GAAW,aA5DN,sCAoELL,GACHM,aACKN,EAAMM,gBALQL,EAAOC,QAApBG,eAMQK,uBAKTV,sBChFY,sBAAGK,SAAAA,aAAW,uBAC/BM,EAAMC,aAAWtB,OAElBqB,QACG,IAAIJ,MAAM,iDAGVD,EAAqCK,EAArCL,QAASO,EAA4BF,EAA5BE,UAAWC,EAAiBH,EAAjBG,aAE5BC,aAAU,kBACRF,EAAUR,GACH,WACLS,EAAaT,MAEd,QAEGW,WAASV,EAAQD,MAAa,UAGlCY,gCACGC,OAAOC,QAAQH,GAAQI,KAAI,mBAC1BH,gBAACI,YAASC,yCCnBS,kBFmFXC,EGpFaZ,EACrBa,EDAsBC,IAAAA,SACtBzB,KFkFoB0B,aAAW3B,EAAS,CAC5CO,QAAS,KADGiB,kBA6BZI,UAzB8C,YAK9CJ,EAAS,CACP3B,KA9FO,iBA+FPM,QAAS,CAAEC,UANbA,QAMsBC,iBALtBA,eAKsCC,WAJtCA,aAuBAuB,WAfgD,YAChDL,EAAS,CAAE3B,KAnGD,kBAmG2BM,QAAS,CAAEC,UADGA,QACME,WADGA,aAgB5DQ,UAZ8C,SAAAR,GAC9CkB,EAAS,CAAE3B,KAtGF,gBAsG2BM,QAAS,CAAEG,SAAAA,MAY/CS,aAToD,SAAAT,GACpDkB,EAAS,CAAE3B,KAzGC,oBAyG2BM,QAAS,CAAEG,SAAAA,gBG5GzBM,EDIdX,ECHPwB,EAAS,CACb/B,KAAM,SAACoC,UAAelB,EAAIgB,UAAUE,EAAMhC,SAC1CH,MAAO,SAACmC,UAAelB,EAAIiB,WAAWC,EAAMhC,UAG9CkB,aAAU,kBACRG,OAAOY,KAAKN,GAAQO,SAAQ,SAAAF,GAE1BG,OAAOC,iBAAiBzC,EAAWqC,GAAQL,EAAOK,OAG7C,WACLX,OAAOY,KAAKN,GAAQO,SAAQ,SAAAF,GAE1BG,OAAOE,oBAAoB1C,EAAWqC,GAAQL,EAAOK,UAGxD,IDZIZ,gBAAC3B,EAAW6C,UAASC,MAAOpC,GAAQyB,uBHmBY,gBAIjDI,EAAQlC,EAAYH,EAAWE,MAAO,CAAES,UAH9CA,QAGuDE,WAFvDA,WAGA2B,OAAOK,cAAcR,sBApBE,SACvBzB,EACAkC,YAAAA,IAAAA,EAAgC,QAE1BnC,gBAAuB,IAAIoC,MAAOC,UAAUC,aACNH,EAApCjC,SAAAA,aAAW,uBACbwB,EAAQlC,EAAYH,EAAWC,KAAM,CACzCU,QAAAA,EACAC,eAAAA,EACAC,SAAAA,WAEF2B,OAAOK,cAAcR,GACd,CAAE1B,QAAAA,EAASE,SAAAA"}
|