@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/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
- const event = createEvent(RMU_EVENTS.open, {
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
- const event = createEvent(RMU_EVENTS.close, { modalId, outletId });
35
- window.dispatchEvent(event);
28
+ emitter.emit(RMU_EVENTS.close, { modalId, outletId });
36
29
  };
package/src/index.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { RMUProvider } from './rmu-provider';
2
2
  export { RMUOutlet } from './rmu-outlet';
3
- export { openModal, closeModal } from './events';
3
+ export { openModal, closeModal } from './events';
@@ -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 components three');
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
 
@@ -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: (event: any) => ctx.openModal(event.detail),
8
- close: (event: any) => ctx.closeModal(event.detail),
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
- //@ts-ignore
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
- //@ts-ignore
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
  };
@@ -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
- const outletNotFound = !state.outlets[outletId];
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
- ...state.outlets[outletId],
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
- delete modalOutlet[modalId];
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
- outlet: modalOutlet,
54
+ [outletId]: restModals,
52
55
  },
53
56
  };
54
57
  }
55
58
  case ACTIONS.addOutlet: {
56
59
  const { outletId } = action.payload;
57
60
 
58
- const alreadyExists = !!state.outlets[outletId];
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'];
@@ -1,3 +0,0 @@
1
- /// <reference types="react" />
2
- import { RMUContextState } from './types';
3
- export declare const RMUContext: import("react").Context<RMUContextState | null>;
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- export declare const RMUOutlet: ({ outletId }: {
3
- outletId?: string | undefined;
4
- }) => React.JSX.Element;
5
- export default RMUOutlet;
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- export declare const RMUProvider: ({ children }: {
3
- children: React.ReactNode;
4
- }) => React.JSX.Element;
@@ -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"}