@4i/modal-manager 1.0.0 → 1.0.2
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/lib/components/modal-provider.js +169 -0
- package/lib/index.js +31 -0
- package/lib/utils/config/modal-actions.js +22 -0
- package/lib/utils/config/modal-list.js +22 -0
- package/lib/utils/service/Manager.js +25 -0
- package/lib/utils/service/ModalManager.js +62 -0
- package/package.json +10 -4
- package/src/components/modal-provider.d.ts +6 -0
- package/src/components/modal-provider.js +125 -0
- package/src/components/modal-provider.tsx +24 -17
- package/src/index.d.ts +6 -0
- package/src/index.js +16 -0
- package/src/styles.css +44 -0
- package/src/utils/config/modal-actions.d.ts +6 -0
- package/src/utils/config/modal-actions.js +20 -0
- package/src/utils/config/modal-list.d.ts +6 -0
- package/src/utils/config/modal-list.js +20 -0
- package/src/utils/config/modal-list.ts +3 -3
- package/src/utils/service/Manager.d.ts +13 -0
- package/src/utils/service/Manager.js +22 -0
- package/src/utils/service/Manager.ts +2 -0
- package/src/utils/service/ModalManager.d.ts +11 -0
- package/src/utils/service/ModalManager.js +47 -0
- package/src/utils/service/ModalManager.ts +1 -1
- package/tsconfig.json +16 -0
- package/.babelrc +0 -3
- /package/{src/components/backdrop.css → lib/styles.css} +0 -0
@@ -0,0 +1,169 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var __assign = this && this.__assign || function () {
|
4
|
+
__assign = Object.assign || function (t) {
|
5
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
6
|
+
s = arguments[i];
|
7
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
var __createBinding = this && this.__createBinding || (Object.create ? function (o, m, k, k2) {
|
14
|
+
if (k2 === undefined) k2 = k;
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
17
|
+
desc = {
|
18
|
+
enumerable: true,
|
19
|
+
get: function () {
|
20
|
+
return m[k];
|
21
|
+
}
|
22
|
+
};
|
23
|
+
}
|
24
|
+
Object.defineProperty(o, k2, desc);
|
25
|
+
} : function (o, m, k, k2) {
|
26
|
+
if (k2 === undefined) k2 = k;
|
27
|
+
o[k2] = m[k];
|
28
|
+
});
|
29
|
+
var __setModuleDefault = this && this.__setModuleDefault || (Object.create ? function (o, v) {
|
30
|
+
Object.defineProperty(o, "default", {
|
31
|
+
enumerable: true,
|
32
|
+
value: v
|
33
|
+
});
|
34
|
+
} : function (o, v) {
|
35
|
+
o["default"] = v;
|
36
|
+
});
|
37
|
+
var __importStar = this && this.__importStar || function (mod) {
|
38
|
+
if (mod && mod.__esModule) return mod;
|
39
|
+
var result = {};
|
40
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
41
|
+
__setModuleDefault(result, mod);
|
42
|
+
return result;
|
43
|
+
};
|
44
|
+
var __spreadArray = this && this.__spreadArray || function (to, from, pack) {
|
45
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
46
|
+
if (ar || !(i in from)) {
|
47
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
48
|
+
ar[i] = from[i];
|
49
|
+
}
|
50
|
+
}
|
51
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
52
|
+
};
|
53
|
+
var __importDefault = this && this.__importDefault || function (mod) {
|
54
|
+
return mod && mod.__esModule ? mod : {
|
55
|
+
"default": mod
|
56
|
+
};
|
57
|
+
};
|
58
|
+
Object.defineProperty(exports, "__esModule", {
|
59
|
+
value: true
|
60
|
+
});
|
61
|
+
var react_1 = __importStar(require("react"));
|
62
|
+
var ModalManager_1 = __importDefault(require("../utils/service/ModalManager"));
|
63
|
+
var ModalManager_2 = __importDefault(require("../utils/service/ModalManager"));
|
64
|
+
var modal_list_1 = __importDefault(require("../utils/config/modal-list"));
|
65
|
+
var ModalProvider = function (_a) {
|
66
|
+
var CustomComponent = _a.CustomComponent;
|
67
|
+
var _b = (0, react_1.useState)([]),
|
68
|
+
data = _b[0],
|
69
|
+
setData = _b[1];
|
70
|
+
var _c = (0, react_1.useState)([]),
|
71
|
+
names = _c[0],
|
72
|
+
setNames = _c[1];
|
73
|
+
var modalRef = (0, react_1.useRef)([]);
|
74
|
+
(0, react_1.useEffect)(function () {
|
75
|
+
var handleOpenModal = function (name, data) {
|
76
|
+
setData(function (prev) {
|
77
|
+
return __spreadArray(__spreadArray([], prev, true), [data], false);
|
78
|
+
});
|
79
|
+
setNames(function (prev) {
|
80
|
+
return __spreadArray(__spreadArray([], prev, true), [name], false);
|
81
|
+
});
|
82
|
+
};
|
83
|
+
var handleClose = function (position) {
|
84
|
+
if (position === "all") {
|
85
|
+
setData([]);
|
86
|
+
setNames([]);
|
87
|
+
return;
|
88
|
+
}
|
89
|
+
if (position === -1) {
|
90
|
+
// remove last
|
91
|
+
setData(function (prev) {
|
92
|
+
return prev.filter(function (_, index) {
|
93
|
+
return index !== prev.length - 1;
|
94
|
+
});
|
95
|
+
});
|
96
|
+
setNames(function (prev) {
|
97
|
+
return prev.filter(function (_, index) {
|
98
|
+
return index !== prev.length - 1;
|
99
|
+
});
|
100
|
+
});
|
101
|
+
return;
|
102
|
+
}
|
103
|
+
if (position === 0) {
|
104
|
+
// remove first
|
105
|
+
setData(function (prev) {
|
106
|
+
return prev.filter(function (_, index) {
|
107
|
+
return index !== 0;
|
108
|
+
});
|
109
|
+
});
|
110
|
+
setNames(function (prev) {
|
111
|
+
return prev.filter(function (_, index) {
|
112
|
+
return index !== 0;
|
113
|
+
});
|
114
|
+
});
|
115
|
+
return;
|
116
|
+
}
|
117
|
+
// remove position index
|
118
|
+
setData(function (prev) {
|
119
|
+
return prev.filter(function (_, index) {
|
120
|
+
return index !== prev.length - 1;
|
121
|
+
});
|
122
|
+
});
|
123
|
+
setNames(function (prev) {
|
124
|
+
return prev.filter(function (_, index) {
|
125
|
+
return index !== prev.length - 1;
|
126
|
+
});
|
127
|
+
});
|
128
|
+
};
|
129
|
+
ModalManager_1.default.addEventListener("change", handleOpenModal);
|
130
|
+
ModalManager_1.default.addEventListener("close", handleClose);
|
131
|
+
return function () {
|
132
|
+
ModalManager_1.default.removeEventListener("change", handleOpenModal);
|
133
|
+
ModalManager_1.default.removeEventListener("close", handleClose);
|
134
|
+
};
|
135
|
+
}, []);
|
136
|
+
var activeModals = names.map(function (name) {
|
137
|
+
var Component = modal_list_1.default[name] || function () {
|
138
|
+
return react_1.default.createElement(react_1.default.Fragment, null);
|
139
|
+
};
|
140
|
+
return Component;
|
141
|
+
});
|
142
|
+
var handleCloseModal = function (index, e) {
|
143
|
+
if (modalRef.current[index] && !modalRef.current[index].contains(e.target)) {
|
144
|
+
ModalManager_2.default.close(index);
|
145
|
+
}
|
146
|
+
};
|
147
|
+
var refReducer = function (index, value) {
|
148
|
+
modalRef.current[index] = value;
|
149
|
+
};
|
150
|
+
return activeModals.length !== 0 && activeModals.map(function (Component, i) {
|
151
|
+
var Modal = Component;
|
152
|
+
return react_1.default.createElement(react_1.default.Fragment, null, CustomComponent ? react_1.default.createElement(CustomComponent, __assign({
|
153
|
+
key: i
|
154
|
+
}, data[i])) : react_1.default.createElement("div", {
|
155
|
+
key: i,
|
156
|
+
className: "backdrop_modal_manager",
|
157
|
+
onClick: function (e) {
|
158
|
+
handleCloseModal(i, e);
|
159
|
+
}
|
160
|
+
}, react_1.default.createElement("div", {
|
161
|
+
ref: function (ref) {
|
162
|
+
refReducer(i, ref);
|
163
|
+
}
|
164
|
+
}, react_1.default.createElement(Modal, __assign({
|
165
|
+
key: i
|
166
|
+
}, data[i])))));
|
167
|
+
});
|
168
|
+
};
|
169
|
+
exports.default = ModalProvider;
|
package/lib/index.js
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var __importDefault = this && this.__importDefault || function (mod) {
|
4
|
+
return mod && mod.__esModule ? mod : {
|
5
|
+
"default": mod
|
6
|
+
};
|
7
|
+
};
|
8
|
+
Object.defineProperty(exports, "__esModule", {
|
9
|
+
value: true
|
10
|
+
});
|
11
|
+
exports.setModalActions = exports.setModalList = exports.ModalProvider = exports.modal = exports.Manager = void 0;
|
12
|
+
var Manager_1 = __importDefault(require("./utils/service/Manager"));
|
13
|
+
exports.Manager = Manager_1.default;
|
14
|
+
var ModalManager_1 = __importDefault(require("./utils/service/ModalManager"));
|
15
|
+
exports.modal = ModalManager_1.default;
|
16
|
+
var modal_provider_1 = __importDefault(require("./components/modal-provider"));
|
17
|
+
exports.ModalProvider = modal_provider_1.default;
|
18
|
+
var modal_list_1 = require("./utils/config/modal-list");
|
19
|
+
Object.defineProperty(exports, "setModalList", {
|
20
|
+
enumerable: true,
|
21
|
+
get: function () {
|
22
|
+
return modal_list_1.setModalList;
|
23
|
+
}
|
24
|
+
});
|
25
|
+
var modal_actions_1 = require("./utils/config/modal-actions");
|
26
|
+
Object.defineProperty(exports, "setModalActions", {
|
27
|
+
enumerable: true,
|
28
|
+
get: function () {
|
29
|
+
return modal_actions_1.setModalActions;
|
30
|
+
}
|
31
|
+
});
|
@@ -0,0 +1,22 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var __assign = this && this.__assign || function () {
|
4
|
+
__assign = Object.assign || function (t) {
|
5
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
6
|
+
s = arguments[i];
|
7
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
Object.defineProperty(exports, "__esModule", {
|
14
|
+
value: true
|
15
|
+
});
|
16
|
+
exports.setModalActions = void 0;
|
17
|
+
var modalActions = {};
|
18
|
+
var setModalActions = function (actionList) {
|
19
|
+
modalActions = __assign(__assign({}, modalActions), actionList);
|
20
|
+
};
|
21
|
+
exports.setModalActions = setModalActions;
|
22
|
+
exports.default = modalActions;
|
@@ -0,0 +1,22 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var __assign = this && this.__assign || function () {
|
4
|
+
__assign = Object.assign || function (t) {
|
5
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
6
|
+
s = arguments[i];
|
7
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
Object.defineProperty(exports, "__esModule", {
|
14
|
+
value: true
|
15
|
+
});
|
16
|
+
exports.setModalList = void 0;
|
17
|
+
var modalList = {};
|
18
|
+
var setModalList = function (_modalList) {
|
19
|
+
modalList = __assign(__assign({}, modalList), _modalList);
|
20
|
+
};
|
21
|
+
exports.setModalList = setModalList;
|
22
|
+
exports.default = modalList;
|
@@ -0,0 +1,25 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
var events_1 = require("events");
|
7
|
+
var Constants = {
|
8
|
+
CHANGE: "change",
|
9
|
+
CLOSE: "close"
|
10
|
+
};
|
11
|
+
var Manager = /** @class */function () {
|
12
|
+
function Manager() {
|
13
|
+
this.name = "";
|
14
|
+
this.data = {};
|
15
|
+
this.emitter = new events_1.EventEmitter();
|
16
|
+
}
|
17
|
+
Manager.prototype.addEventListener = function (event, listener) {
|
18
|
+
this.emitter.addListener(event, listener);
|
19
|
+
};
|
20
|
+
Manager.prototype.removeEventListener = function (event, listener) {
|
21
|
+
this.emitter.removeListener(event, listener);
|
22
|
+
};
|
23
|
+
return Manager;
|
24
|
+
}();
|
25
|
+
exports.default = Manager;
|
@@ -0,0 +1,62 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var __extends = this && this.__extends || function () {
|
4
|
+
var extendStatics = function (d, b) {
|
5
|
+
extendStatics = Object.setPrototypeOf || {
|
6
|
+
__proto__: []
|
7
|
+
} instanceof Array && function (d, b) {
|
8
|
+
d.__proto__ = b;
|
9
|
+
} || function (d, b) {
|
10
|
+
for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
|
11
|
+
};
|
12
|
+
return extendStatics(d, b);
|
13
|
+
};
|
14
|
+
return function (d, b) {
|
15
|
+
if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
16
|
+
extendStatics(d, b);
|
17
|
+
function __() {
|
18
|
+
this.constructor = d;
|
19
|
+
}
|
20
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
21
|
+
};
|
22
|
+
}();
|
23
|
+
var __importDefault = this && this.__importDefault || function (mod) {
|
24
|
+
return mod && mod.__esModule ? mod : {
|
25
|
+
"default": mod
|
26
|
+
};
|
27
|
+
};
|
28
|
+
Object.defineProperty(exports, "__esModule", {
|
29
|
+
value: true
|
30
|
+
});
|
31
|
+
var Manager_1 = __importDefault(require("./Manager"));
|
32
|
+
var uuid_1 = require("uuid");
|
33
|
+
var constants = {
|
34
|
+
CHANGE: "change",
|
35
|
+
CLOSE: "close"
|
36
|
+
};
|
37
|
+
var ModalManager = /** @class */function (_super) {
|
38
|
+
__extends(ModalManager, _super);
|
39
|
+
function ModalManager() {
|
40
|
+
return _super.call(this) || this;
|
41
|
+
}
|
42
|
+
ModalManager.prototype.create = function (name, data) {
|
43
|
+
this.name = name;
|
44
|
+
this.data = data;
|
45
|
+
this.emitter.emit(constants.CHANGE);
|
46
|
+
};
|
47
|
+
ModalManager.prototype.call = function (name, data) {
|
48
|
+
if (data === void 0) {
|
49
|
+
data = {};
|
50
|
+
}
|
51
|
+
this.create(name, {
|
52
|
+
modalId: (0, uuid_1.v4)(),
|
53
|
+
data: data
|
54
|
+
});
|
55
|
+
};
|
56
|
+
ModalManager.prototype.close = function (position) {
|
57
|
+
this.emitter.emit(constants.CLOSE, position);
|
58
|
+
};
|
59
|
+
return ModalManager;
|
60
|
+
}(Manager_1.default);
|
61
|
+
var modal = new ModalManager();
|
62
|
+
exports.default = modal;
|
package/package.json
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "@4i/modal-manager",
|
3
|
-
"version": "1.0.
|
3
|
+
"version": "1.0.2",
|
4
4
|
"description": "",
|
5
|
-
"main": "
|
5
|
+
"main": "lib/index.js",
|
6
6
|
"scripts": {
|
7
7
|
"test": "echo \"Error: no test specified\" && exit 1",
|
8
|
-
"build": "babel src -
|
8
|
+
"build": "npm run clean && tsc && babel src --out-dir lib && cp src/styles.css lib/",
|
9
|
+
"clean": "rm -rf lib"
|
9
10
|
},
|
10
11
|
"repository": {
|
11
12
|
"type": "git",
|
@@ -28,8 +29,13 @@
|
|
28
29
|
"devDependencies": {
|
29
30
|
"@babel/cli": "^7.23.4",
|
30
31
|
"@babel/core": "^7.23.5",
|
32
|
+
"@babel/plugin-transform-typescript": "^7.23.5",
|
31
33
|
"@babel/preset-env": "^7.23.5",
|
32
34
|
"@babel/preset-react": "^7.23.3",
|
33
|
-
"@
|
35
|
+
"@babel/preset-typescript": "^7.23.3",
|
36
|
+
"@types/node": "^20.10.2",
|
37
|
+
"@types/react": "^18.2.40",
|
38
|
+
"@types/uuid": "^9.0.7",
|
39
|
+
"typescript": "^5.3.2"
|
34
40
|
}
|
35
41
|
}
|
@@ -0,0 +1,125 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
14
|
+
if (k2 === undefined) k2 = k;
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
18
|
+
}
|
19
|
+
Object.defineProperty(o, k2, desc);
|
20
|
+
}) : (function(o, m, k, k2) {
|
21
|
+
if (k2 === undefined) k2 = k;
|
22
|
+
o[k2] = m[k];
|
23
|
+
}));
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
26
|
+
}) : function(o, v) {
|
27
|
+
o["default"] = v;
|
28
|
+
});
|
29
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
30
|
+
if (mod && mod.__esModule) return mod;
|
31
|
+
var result = {};
|
32
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
33
|
+
__setModuleDefault(result, mod);
|
34
|
+
return result;
|
35
|
+
};
|
36
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
37
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
38
|
+
if (ar || !(i in from)) {
|
39
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
40
|
+
ar[i] = from[i];
|
41
|
+
}
|
42
|
+
}
|
43
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
44
|
+
};
|
45
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
46
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
47
|
+
};
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
49
|
+
var react_1 = __importStar(require("react"));
|
50
|
+
var ModalManager_1 = __importDefault(require("../utils/service/ModalManager"));
|
51
|
+
var ModalManager_2 = __importDefault(require("../utils/service/ModalManager"));
|
52
|
+
var modal_list_1 = __importDefault(require("../utils/config/modal-list"));
|
53
|
+
var ModalProvider = function (_a) {
|
54
|
+
var CustomComponent = _a.CustomComponent;
|
55
|
+
var _b = (0, react_1.useState)([]), data = _b[0], setData = _b[1];
|
56
|
+
var _c = (0, react_1.useState)([]), names = _c[0], setNames = _c[1];
|
57
|
+
var modalRef = (0, react_1.useRef)([]);
|
58
|
+
(0, react_1.useEffect)(function () {
|
59
|
+
var handleOpenModal = function (name, data) {
|
60
|
+
setData(function (prev) { return __spreadArray(__spreadArray([], prev, true), [data], false); });
|
61
|
+
setNames(function (prev) { return __spreadArray(__spreadArray([], prev, true), [name], false); });
|
62
|
+
};
|
63
|
+
var handleClose = function (position) {
|
64
|
+
if (position === "all") {
|
65
|
+
setData([]);
|
66
|
+
setNames([]);
|
67
|
+
return;
|
68
|
+
}
|
69
|
+
if (position === -1) {
|
70
|
+
// remove last
|
71
|
+
setData(function (prev) {
|
72
|
+
return prev.filter(function (_, index) { return index !== prev.length - 1; });
|
73
|
+
});
|
74
|
+
setNames(function (prev) {
|
75
|
+
return prev.filter(function (_, index) { return index !== prev.length - 1; });
|
76
|
+
});
|
77
|
+
return;
|
78
|
+
}
|
79
|
+
if (position === 0) {
|
80
|
+
// remove first
|
81
|
+
setData(function (prev) { return prev.filter(function (_, index) { return index !== 0; }); });
|
82
|
+
setNames(function (prev) { return prev.filter(function (_, index) { return index !== 0; }); });
|
83
|
+
return;
|
84
|
+
}
|
85
|
+
// remove position index
|
86
|
+
setData(function (prev) {
|
87
|
+
return prev.filter(function (_, index) { return index !== prev.length - 1; });
|
88
|
+
});
|
89
|
+
setNames(function (prev) {
|
90
|
+
return prev.filter(function (_, index) { return index !== prev.length - 1; });
|
91
|
+
});
|
92
|
+
};
|
93
|
+
ModalManager_1.default.addEventListener("change", handleOpenModal);
|
94
|
+
ModalManager_1.default.addEventListener("close", handleClose);
|
95
|
+
return function () {
|
96
|
+
ModalManager_1.default.removeEventListener("change", handleOpenModal);
|
97
|
+
ModalManager_1.default.removeEventListener("close", handleClose);
|
98
|
+
};
|
99
|
+
}, []);
|
100
|
+
var activeModals = names.map(function (name) {
|
101
|
+
var Component = modal_list_1.default[name] || (function () { return react_1.default.createElement(react_1.default.Fragment, null); });
|
102
|
+
return Component;
|
103
|
+
});
|
104
|
+
var handleCloseModal = function (index, e) {
|
105
|
+
if (modalRef.current[index] &&
|
106
|
+
!modalRef.current[index].contains(e.target)) {
|
107
|
+
ModalManager_2.default.close(index);
|
108
|
+
}
|
109
|
+
};
|
110
|
+
var refReducer = function (index, value) {
|
111
|
+
modalRef.current[index] = value;
|
112
|
+
};
|
113
|
+
return (activeModals.length !== 0 &&
|
114
|
+
activeModals.map(function (Component, i) {
|
115
|
+
var Modal = Component;
|
116
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, CustomComponent ? (react_1.default.createElement(CustomComponent, __assign({ key: i }, data[i]))) : (react_1.default.createElement("div", { key: i, className: "backdrop_modal_manager", onClick: function (e) {
|
117
|
+
handleCloseModal(i, e);
|
118
|
+
} },
|
119
|
+
react_1.default.createElement("div", { ref: function (ref) {
|
120
|
+
refReducer(i, ref);
|
121
|
+
} },
|
122
|
+
react_1.default.createElement(Modal, __assign({ key: i }, data[i])))))));
|
123
|
+
}));
|
124
|
+
};
|
125
|
+
exports.default = ModalProvider;
|
@@ -1,6 +1,5 @@
|
|
1
1
|
import React, { useEffect, useRef, useState } from "react";
|
2
2
|
import manager from "../utils/service/ModalManager";
|
3
|
-
import "./backdrop.css";
|
4
3
|
import modal from "../utils/service/ModalManager";
|
5
4
|
import modalList from "../utils/config/modal-list";
|
6
5
|
|
@@ -8,18 +7,20 @@ interface ModalProviderProps {
|
|
8
7
|
CustomComponent?: React.ComponentType;
|
9
8
|
}
|
10
9
|
|
10
|
+
type TData = { [key: string]: any };
|
11
|
+
|
11
12
|
const ModalProvider = ({ CustomComponent }: ModalProviderProps) => {
|
12
|
-
const [data, setData] = useState([]);
|
13
|
-
const [names, setNames] = useState([]);
|
14
|
-
const modalRef = useRef([]);
|
13
|
+
const [data, setData] = useState<TData[]>([]);
|
14
|
+
const [names, setNames] = useState<string[]>([]);
|
15
|
+
const modalRef = useRef<any[]>([]);
|
15
16
|
|
16
17
|
useEffect(() => {
|
17
|
-
const handleOpenModal = (name, data) => {
|
18
|
-
setData((prev) => [...prev, data]);
|
19
|
-
setNames((prev) => [...prev, name]);
|
18
|
+
const handleOpenModal = (name: string, data: TData) => {
|
19
|
+
setData((prev: TData[]) => [...prev, data]);
|
20
|
+
setNames((prev: string[]) => [...prev, name]);
|
20
21
|
};
|
21
22
|
|
22
|
-
const handleClose = (position) => {
|
23
|
+
const handleClose = (position: number | string) => {
|
23
24
|
if (position === "all") {
|
24
25
|
setData([]);
|
25
26
|
setNames([]);
|
@@ -28,8 +29,10 @@ const ModalProvider = ({ CustomComponent }: ModalProviderProps) => {
|
|
28
29
|
|
29
30
|
if (position === -1) {
|
30
31
|
// remove last
|
31
|
-
setData((prev
|
32
|
-
|
32
|
+
setData((prev: TData[]) =>
|
33
|
+
prev.filter((_, index) => index !== prev.length - 1)
|
34
|
+
);
|
35
|
+
setNames((prev: string[]) =>
|
33
36
|
prev.filter((_, index) => index !== prev.length - 1)
|
34
37
|
);
|
35
38
|
return;
|
@@ -37,14 +40,18 @@ const ModalProvider = ({ CustomComponent }: ModalProviderProps) => {
|
|
37
40
|
|
38
41
|
if (position === 0) {
|
39
42
|
// remove first
|
40
|
-
setData((prev) => prev.filter((_, index) => index !== 0));
|
41
|
-
setNames((prev) => prev.filter((_, index) => index !== 0));
|
43
|
+
setData((prev: TData[]) => prev.filter((_, index) => index !== 0));
|
44
|
+
setNames((prev: string[]) => prev.filter((_, index) => index !== 0));
|
42
45
|
return;
|
43
46
|
}
|
44
47
|
|
45
48
|
// remove position index
|
46
|
-
setData((prev
|
47
|
-
|
49
|
+
setData((prev: TData[]) =>
|
50
|
+
prev.filter((_, index) => index !== prev.length - 1)
|
51
|
+
);
|
52
|
+
setNames((prev: string[]) =>
|
53
|
+
prev.filter((_, index) => index !== prev.length - 1)
|
54
|
+
);
|
48
55
|
};
|
49
56
|
|
50
57
|
manager.addEventListener("change", handleOpenModal);
|
@@ -55,12 +62,12 @@ const ModalProvider = ({ CustomComponent }: ModalProviderProps) => {
|
|
55
62
|
};
|
56
63
|
}, []);
|
57
64
|
|
58
|
-
const activeModals = names.map((name) => {
|
65
|
+
const activeModals = names.map((name: string) => {
|
59
66
|
const Component = modalList[name] || (() => <></>);
|
60
67
|
return Component;
|
61
68
|
});
|
62
69
|
|
63
|
-
const handleCloseModal = (index, e) => {
|
70
|
+
const handleCloseModal = (index: number, e: any) => {
|
64
71
|
if (
|
65
72
|
modalRef.current[index] &&
|
66
73
|
!modalRef.current[index].contains(e.target)
|
@@ -69,7 +76,7 @@ const ModalProvider = ({ CustomComponent }: ModalProviderProps) => {
|
|
69
76
|
}
|
70
77
|
};
|
71
78
|
|
72
|
-
const refReducer = (index, value) => {
|
79
|
+
const refReducer = (index: number, value: any) => {
|
73
80
|
modalRef.current[index] = value;
|
74
81
|
};
|
75
82
|
|
package/src/index.d.ts
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
import Manager from "./utils/service/Manager";
|
2
|
+
import modal from "./utils/service/ModalManager";
|
3
|
+
import ModalProvider from "./components/modal-provider";
|
4
|
+
import { setModalList } from "./utils/config/modal-list";
|
5
|
+
import { setModalActions } from "./utils/config/modal-actions";
|
6
|
+
export { Manager, modal, ModalProvider, setModalList, setModalActions };
|
package/src/index.js
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.setModalActions = exports.setModalList = exports.ModalProvider = exports.modal = exports.Manager = void 0;
|
7
|
+
var Manager_1 = __importDefault(require("./utils/service/Manager"));
|
8
|
+
exports.Manager = Manager_1.default;
|
9
|
+
var ModalManager_1 = __importDefault(require("./utils/service/ModalManager"));
|
10
|
+
exports.modal = ModalManager_1.default;
|
11
|
+
var modal_provider_1 = __importDefault(require("./components/modal-provider"));
|
12
|
+
exports.ModalProvider = modal_provider_1.default;
|
13
|
+
var modal_list_1 = require("./utils/config/modal-list");
|
14
|
+
Object.defineProperty(exports, "setModalList", { enumerable: true, get: function () { return modal_list_1.setModalList; } });
|
15
|
+
var modal_actions_1 = require("./utils/config/modal-actions");
|
16
|
+
Object.defineProperty(exports, "setModalActions", { enumerable: true, get: function () { return modal_actions_1.setModalActions; } });
|
package/src/styles.css
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
@keyframes bg_opacity_scale {
|
2
|
+
from {
|
3
|
+
transform: scale(0.8);
|
4
|
+
}
|
5
|
+
to {
|
6
|
+
transform: scale(1);
|
7
|
+
}
|
8
|
+
}
|
9
|
+
|
10
|
+
@keyframes bg_opacity {
|
11
|
+
from {
|
12
|
+
opacity: 0;
|
13
|
+
}
|
14
|
+
to {
|
15
|
+
opacity: 1;
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
.backdrop_modal_manager {
|
20
|
+
position: absolute;
|
21
|
+
display: flex;
|
22
|
+
justify-content: center;
|
23
|
+
align-items: center;
|
24
|
+
top: 0;
|
25
|
+
left: 0;
|
26
|
+
right: 0;
|
27
|
+
bottom: 0;
|
28
|
+
width: 100%;
|
29
|
+
height: 100%;
|
30
|
+
background-color: rgba(0, 0, 0, 0.5);
|
31
|
+
position: fixed;
|
32
|
+
z-index: 1000;
|
33
|
+
opacity: 0;
|
34
|
+
animation: bg_opacity 150ms ease-in-out forwards;
|
35
|
+
}
|
36
|
+
|
37
|
+
.backdrop_modal_manager > div {
|
38
|
+
animation: bg_opacity_scale 150ms ease-in-out forwards;
|
39
|
+
}
|
40
|
+
|
41
|
+
.main_container_modal_manager {
|
42
|
+
opacity: 0;
|
43
|
+
animation: bg_opacity 250ms forwards;
|
44
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
14
|
+
exports.setModalActions = void 0;
|
15
|
+
var modalActions = {};
|
16
|
+
var setModalActions = function (actionList) {
|
17
|
+
modalActions = __assign(__assign({}, modalActions), actionList);
|
18
|
+
};
|
19
|
+
exports.setModalActions = setModalActions;
|
20
|
+
exports.default = modalActions;
|
@@ -0,0 +1,20 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
3
|
+
__assign = Object.assign || function(t) {
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
5
|
+
s = arguments[i];
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
7
|
+
t[p] = s[p];
|
8
|
+
}
|
9
|
+
return t;
|
10
|
+
};
|
11
|
+
return __assign.apply(this, arguments);
|
12
|
+
};
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
14
|
+
exports.setModalList = void 0;
|
15
|
+
var modalList = {};
|
16
|
+
var setModalList = function (_modalList) {
|
17
|
+
modalList = __assign(__assign({}, modalList), _modalList);
|
18
|
+
};
|
19
|
+
exports.setModalList = setModalList;
|
20
|
+
exports.default = modalList;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
import { EventEmitter } from "events";
|
3
|
+
declare class Manager {
|
4
|
+
emitter: EventEmitter;
|
5
|
+
name: string;
|
6
|
+
data: {
|
7
|
+
[key: string]: any;
|
8
|
+
};
|
9
|
+
constructor();
|
10
|
+
addEventListener(event: string, listener: (...args: any[]) => void): void;
|
11
|
+
removeEventListener(event: string, listener: (...args: any[]) => void): void;
|
12
|
+
}
|
13
|
+
export default Manager;
|
@@ -0,0 +1,22 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
var events_1 = require("events");
|
4
|
+
var Constants = {
|
5
|
+
CHANGE: "change",
|
6
|
+
CLOSE: "close",
|
7
|
+
};
|
8
|
+
var Manager = /** @class */ (function () {
|
9
|
+
function Manager() {
|
10
|
+
this.name = "";
|
11
|
+
this.data = {};
|
12
|
+
this.emitter = new events_1.EventEmitter();
|
13
|
+
}
|
14
|
+
Manager.prototype.addEventListener = function (event, listener) {
|
15
|
+
this.emitter.addListener(event, listener);
|
16
|
+
};
|
17
|
+
Manager.prototype.removeEventListener = function (event, listener) {
|
18
|
+
this.emitter.removeListener(event, listener);
|
19
|
+
};
|
20
|
+
return Manager;
|
21
|
+
}());
|
22
|
+
exports.default = Manager;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import Manager from "./Manager";
|
2
|
+
declare class ModalManager extends Manager {
|
3
|
+
constructor();
|
4
|
+
create(name: string, data: {
|
5
|
+
[key: string]: any;
|
6
|
+
}): void;
|
7
|
+
call(name: string, data?: any): void;
|
8
|
+
close(position?: number): void;
|
9
|
+
}
|
10
|
+
declare const modal: ModalManager;
|
11
|
+
export default modal;
|
@@ -0,0 +1,47 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
3
|
+
var extendStatics = function (d, b) {
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
7
|
+
return extendStatics(d, b);
|
8
|
+
};
|
9
|
+
return function (d, b) {
|
10
|
+
if (typeof b !== "function" && b !== null)
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
12
|
+
extendStatics(d, b);
|
13
|
+
function __() { this.constructor = d; }
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
15
|
+
};
|
16
|
+
})();
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
19
|
+
};
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
21
|
+
var Manager_1 = __importDefault(require("./Manager"));
|
22
|
+
var uuid_1 = require("uuid");
|
23
|
+
var constants = {
|
24
|
+
CHANGE: "change",
|
25
|
+
CLOSE: "close",
|
26
|
+
};
|
27
|
+
var ModalManager = /** @class */ (function (_super) {
|
28
|
+
__extends(ModalManager, _super);
|
29
|
+
function ModalManager() {
|
30
|
+
return _super.call(this) || this;
|
31
|
+
}
|
32
|
+
ModalManager.prototype.create = function (name, data) {
|
33
|
+
this.name = name;
|
34
|
+
this.data = data;
|
35
|
+
this.emitter.emit(constants.CHANGE);
|
36
|
+
};
|
37
|
+
ModalManager.prototype.call = function (name, data) {
|
38
|
+
if (data === void 0) { data = {}; }
|
39
|
+
this.create(name, { modalId: (0, uuid_1.v4)(), data: data });
|
40
|
+
};
|
41
|
+
ModalManager.prototype.close = function (position) {
|
42
|
+
this.emitter.emit(constants.CLOSE, position);
|
43
|
+
};
|
44
|
+
return ModalManager;
|
45
|
+
}(Manager_1.default));
|
46
|
+
var modal = new ModalManager();
|
47
|
+
exports.default = modal;
|
package/tsconfig.json
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
{
|
2
|
+
"compilerOptions": {
|
3
|
+
"target": "es5",
|
4
|
+
"module": "commonjs",
|
5
|
+
"jsx": "react",
|
6
|
+
"strict": true,
|
7
|
+
"esModuleInterop": true,
|
8
|
+
"skipLibCheck": true,
|
9
|
+
"forceConsistentCasingInFileNames": true,
|
10
|
+
"moduleResolution": "node",
|
11
|
+
"declaration": true,
|
12
|
+
"outDir": "./src"
|
13
|
+
},
|
14
|
+
"include": ["src/**/*.ts", "src/**/*.tsx"],
|
15
|
+
"exclude": ["node_modules"]
|
16
|
+
}
|
package/.babelrc
DELETED
File without changes
|