admin_lsac 1.1.4 → 1.2.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/README.md +2 -2
- package/dist/App.d.ts +3 -1
- package/dist/App.js +38 -4
- package/dist/cjs/App.js +48 -0
- package/dist/cjs/components/GenericForm.js +269 -0
- package/dist/cjs/components/Page.js +106 -0
- package/dist/cjs/index.js +18 -0
- package/dist/cjs/pages/event.js +110 -0
- package/dist/cjs/pages/page.js +343 -0
- package/dist/cjs/reportWebVitals.js +34 -0
- package/dist/cjs/schema/schema.config.js +9 -0
- package/dist/cjs/schema/schema.js +7 -0
- package/dist/cjs/setupTests.js +7 -0
- package/dist/components/GenericForm.js +17 -21
- package/dist/components/Page.js +22 -11
- package/dist/esm/App.js +27 -12
- package/dist/esm/components/GenericForm.js +243 -243
- package/dist/esm/components/Page.js +99 -99
- package/dist/esm/index.js +13 -13
- package/dist/esm/pages/event.js +104 -104
- package/dist/esm/pages/page.js +321 -0
- package/dist/esm/reportWebVitals.js +13 -13
- package/dist/esm/schema/schema.config.js +6 -4
- package/dist/esm/schema/schema.js +3 -3
- package/dist/esm/setupTests.js +5 -5
- package/dist/index.js +1 -1
- package/dist/pages/event.js +1 -1
- package/dist/pages/page.js +343 -0
- package/dist/reportWebVitals.js +1 -5
- package/dist/schema/schema.config.js +3 -1
- package/package.json +1 -1
- package/src/App.tsx +22 -17
- package/src/components/Page.tsx +6 -4
- package/src/index.tsx +20 -20
- package/src/pages/page.ts +291 -0
- package/src/schema/schema.config.ts +2 -0
package/README.md
CHANGED
|
@@ -14,11 +14,11 @@ Export-to-csv package latest version is not working properly, so make sure you h
|
|
|
14
14
|
|
|
15
15
|
You can import this component in the root file of your project (i.e index.js) or in App.js. If your project is TypeScript-based, you need to write the following line as well:
|
|
16
16
|
|
|
17
|
-
### `import PageSchema from 'admin_lsac'`
|
|
17
|
+
### `import { PageSchema } from 'admin_lsac'`
|
|
18
18
|
|
|
19
19
|
You need to create an array of schemas to pass it as props to the component.
|
|
20
20
|
|
|
21
|
-
### `<AdminPanel pages={your_array} />`
|
|
21
|
+
### `<AdminPanel pages={your_array} basePath="where_is_admin_located" />`
|
|
22
22
|
|
|
23
23
|
## What is a schema?
|
|
24
24
|
|
package/dist/App.d.ts
CHANGED
|
@@ -65,13 +65,15 @@ declare module "admin_lsac" {
|
|
|
65
65
|
|
|
66
66
|
interface AdminPanelProps {
|
|
67
67
|
pages: PageSchema[];
|
|
68
|
+
basePath: string;
|
|
68
69
|
}
|
|
69
70
|
|
|
70
|
-
export default function AdminPanel({ pages }: AdminPanelProps): React.ReactElement;
|
|
71
|
+
export default function AdminPanel({ pages, basePath }: AdminPanelProps): React.ReactElement;
|
|
71
72
|
|
|
72
73
|
interface PageProps {
|
|
73
74
|
pages: PageSchema[];
|
|
74
75
|
selectedPage: PageSchema;
|
|
76
|
+
basePath: string;
|
|
75
77
|
}
|
|
76
78
|
|
|
77
79
|
export function Page(props: PageProps): React.ReactElement;
|
package/dist/App.js
CHANGED
|
@@ -1,14 +1,48 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
22
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
23
|
+
if (ar || !(i in from)) {
|
|
24
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
25
|
+
ar[i] = from[i];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
29
|
+
};
|
|
2
30
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
31
|
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
4
32
|
var react_1 = require("@chakra-ui/react");
|
|
5
33
|
var react_router_dom_1 = require("react-router-dom");
|
|
6
34
|
var Page_1 = require("./components/Page");
|
|
7
35
|
var schema_1 = require("./schema/schema");
|
|
36
|
+
var React = __importStar(require("react"));
|
|
37
|
+
var page_1 = require("./pages/page");
|
|
8
38
|
function AdminPanel(_a) {
|
|
9
|
-
var pages = _a.pages;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
39
|
+
var pages = _a.pages, basePath = _a.basePath;
|
|
40
|
+
var _b = React.useState(pages), pagesToDisplay = _b[0], setPagesToDisplay = _b[1];
|
|
41
|
+
React.useEffect(function () {
|
|
42
|
+
setPagesToDisplay(__spreadArray(__spreadArray([], pages, true), [page_1.page], false));
|
|
43
|
+
}, []);
|
|
44
|
+
return ((0, jsx_runtime_1.jsx)(react_1.ChakraProvider, { children: (0, jsx_runtime_1.jsxs)(react_router_dom_1.Routes, { children: [pagesToDisplay.map(function (page) { return ((0, jsx_runtime_1.jsx)(react_router_dom_1.Route, { path: "".concat(basePath, "/").concat((0, schema_1.pageToUrl)(page)), element: (0, jsx_runtime_1.jsx)(Page_1.Page, { pages: pagesToDisplay, selectedPage: page, basePath: basePath }, void 0) }, void 0)); }), pages[0] ?
|
|
45
|
+
(0, jsx_runtime_1.jsx)(react_router_dom_1.Route, { path: "".concat(basePath, "/*"), element: (0, jsx_runtime_1.jsx)(Page_1.Page, { pages: pagesToDisplay, selectedPage: pages[0], basePath: basePath }, void 0) }, void 0)
|
|
46
|
+
: null] }, void 0) }, void 0));
|
|
13
47
|
}
|
|
14
48
|
exports.default = AdminPanel;
|
package/dist/cjs/App.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
22
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
23
|
+
if (ar || !(i in from)) {
|
|
24
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
25
|
+
ar[i] = from[i];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
32
|
+
var react_1 = require("@chakra-ui/react");
|
|
33
|
+
var react_router_dom_1 = require("react-router-dom");
|
|
34
|
+
var Page_1 = require("./components/Page");
|
|
35
|
+
var schema_1 = require("./schema/schema");
|
|
36
|
+
var React = __importStar(require("react"));
|
|
37
|
+
var page_1 = require("./pages/page");
|
|
38
|
+
function AdminPanel(_a) {
|
|
39
|
+
var pages = _a.pages, basePath = _a.basePath;
|
|
40
|
+
var _b = React.useState(pages), pagesToDisplay = _b[0], setPagesToDisplay = _b[1];
|
|
41
|
+
React.useEffect(function () {
|
|
42
|
+
setPagesToDisplay(__spreadArray(__spreadArray([], pages, true), [page_1.page], false));
|
|
43
|
+
}, []);
|
|
44
|
+
return ((0, jsx_runtime_1.jsx)(react_1.ChakraProvider, { children: (0, jsx_runtime_1.jsxs)(react_router_dom_1.Routes, { children: [pagesToDisplay.map(function (page) { return ((0, jsx_runtime_1.jsx)(react_router_dom_1.Route, { path: "".concat(basePath, "/").concat((0, schema_1.pageToUrl)(page)), element: (0, jsx_runtime_1.jsx)(Page_1.Page, { pages: pagesToDisplay, selectedPage: page, basePath: basePath }, void 0) }, void 0)); }), pages[0] ?
|
|
45
|
+
(0, jsx_runtime_1.jsx)(react_router_dom_1.Route, { path: "".concat(basePath, "/*"), element: (0, jsx_runtime_1.jsx)(Page_1.Page, { pages: pagesToDisplay, selectedPage: pages[0], basePath: basePath }, void 0) }, void 0)
|
|
46
|
+
: null] }, void 0) }, void 0));
|
|
47
|
+
}
|
|
48
|
+
exports.default = AdminPanel;
|
|
@@ -0,0 +1,269 @@
|
|
|
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
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
|
+
if (mod && mod.__esModule) return mod;
|
|
27
|
+
var result = {};
|
|
28
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
|
+
__setModuleDefault(result, mod);
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
32
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
33
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
34
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
35
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
36
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
37
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
38
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
42
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
43
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
44
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
45
|
+
function step(op) {
|
|
46
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
47
|
+
while (_) try {
|
|
48
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
49
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
50
|
+
switch (op[0]) {
|
|
51
|
+
case 0: case 1: t = op; break;
|
|
52
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
53
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
54
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
55
|
+
default:
|
|
56
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
57
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
58
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
59
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
60
|
+
if (t[2]) _.ops.pop();
|
|
61
|
+
_.trys.pop(); continue;
|
|
62
|
+
}
|
|
63
|
+
op = body.call(thisArg, _);
|
|
64
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
65
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
69
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
70
|
+
};
|
|
71
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
72
|
+
exports.GenericForm = void 0;
|
|
73
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
74
|
+
var react_1 = require("@chakra-ui/react");
|
|
75
|
+
var formik_1 = require("formik");
|
|
76
|
+
var Yup = __importStar(require("yup"));
|
|
77
|
+
var sweetalert2_1 = __importDefault(require("sweetalert2"));
|
|
78
|
+
var react_2 = require("react");
|
|
79
|
+
function parseValidation(fields) {
|
|
80
|
+
if (!fields) {
|
|
81
|
+
return {};
|
|
82
|
+
}
|
|
83
|
+
return fields.reduce(function (acc, field) {
|
|
84
|
+
if (field.type !== "dropdown" &&
|
|
85
|
+
field.type !== "object" &&
|
|
86
|
+
field.type !== "array") {
|
|
87
|
+
acc[field.name] = field.validationSchema;
|
|
88
|
+
}
|
|
89
|
+
else if (field.type === "array") {
|
|
90
|
+
if (field.element.type === "dropdown") {
|
|
91
|
+
acc[field.name] = Yup.array().of(Yup.string().required());
|
|
92
|
+
}
|
|
93
|
+
else if (field.element.type === "object") {
|
|
94
|
+
acc[field.name] = Yup.array().of(Yup.object(parseValidation(field.element.fields)));
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
acc[field.name] = Yup.array().of(field.element.validationSchema);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else if (field.type === "object") {
|
|
101
|
+
acc[field.name] = Yup.object(parseValidation(field.fields));
|
|
102
|
+
}
|
|
103
|
+
if (field.type === "dropdown") {
|
|
104
|
+
acc[field.name] = Yup.string().required();
|
|
105
|
+
}
|
|
106
|
+
return acc;
|
|
107
|
+
}, {});
|
|
108
|
+
}
|
|
109
|
+
function generateSingleField(formfield, fieldName, key) {
|
|
110
|
+
return ((0, jsx_runtime_1.jsx)(formik_1.Field, __assign({ name: fieldName }, { children: function (_a) {
|
|
111
|
+
var _b;
|
|
112
|
+
var field = _a.field, form = _a.form;
|
|
113
|
+
return ((0, jsx_runtime_1.jsxs)(react_1.FormControl, __assign({ isInvalid: (0, formik_1.getIn)(form.touched, fieldName) && (0, formik_1.getIn)(form.errors, fieldName) }, { children: [(0, jsx_runtime_1.jsx)(react_1.FormLabel, __assign({ marginTop: 2 }, { children: formfield.label }), void 0), formfield.type === "string" || formfield.type === "number" ? ((0, jsx_runtime_1.jsx)(react_1.Input, __assign({}, field, { type: formfield.type === "number" ? "number" : "text", placeholder: "" }), void 0)) : formfield.type === "file" ? ((0, jsx_runtime_1.jsx)(react_1.Input, { type: "file", name: fieldName, onChange: function (event) {
|
|
114
|
+
if (event.currentTarget.files != null) {
|
|
115
|
+
form.setFieldValue(fieldName, event.currentTarget.files[0]);
|
|
116
|
+
}
|
|
117
|
+
} }, void 0)) : ((0, jsx_runtime_1.jsxs)(react_1.Select, __assign({}, field, { defaultValue: "" }, { children: [(0, jsx_runtime_1.jsx)("option", __assign({ disabled: true, value: "" }, { children: "Select an option!" }), void 0), (_b = formfield.options) === null || _b === void 0 ? void 0 : _b.map(function (option, key) { return ((0, jsx_runtime_1.jsx)("option", __assign({ value: "".concat(option.value) }, { children: option.display }), key)); })] }), void 0)), (0, jsx_runtime_1.jsx)(react_1.FormErrorMessage, { children: (0, formik_1.getIn)(form.errors, fieldName) }, void 0)] }), void 0));
|
|
118
|
+
} }), key));
|
|
119
|
+
}
|
|
120
|
+
function parseFields(fields, previous) {
|
|
121
|
+
if (!fields) {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
var computedFields = fields.map(function (formfield, key) {
|
|
125
|
+
var fieldName = previous !== undefined ? previous + "." + formfield.name : formfield.name;
|
|
126
|
+
if (formfield.type === "object") {
|
|
127
|
+
var objectFields = parseFields(formfield.fields, fieldName);
|
|
128
|
+
return (0, jsx_runtime_1.jsx)(react_1.FormControl, { children: objectFields }, fieldName);
|
|
129
|
+
}
|
|
130
|
+
else if (formfield.type === "array") {
|
|
131
|
+
return ((0, jsx_runtime_1.jsx)(formik_1.FieldArray, __assign({ name: fieldName }, { children: function (_a) {
|
|
132
|
+
var remove = _a.remove, push = _a.push, form = _a.form;
|
|
133
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)(react_1.FormLabel, __assign({ marginTop: 2 }, { children: formfield.label }), void 0), (0, formik_1.getIn)(form.values, fieldName).length > 0 &&
|
|
134
|
+
(0, formik_1.getIn)(form.values, fieldName).map(function (element, index) { return ((0, jsx_runtime_1.jsxs)(react_1.Box, __assign({ paddingLeft: 10 }, { children: [(0, jsx_runtime_1.jsx)("h4", { children: (0, jsx_runtime_1.jsx)("b", { children: "".concat(fieldName, ".").concat(index) }, void 0) }, void 0), (0, jsx_runtime_1.jsx)(react_1.Box, __assign({ paddingLeft: 10 }, { children: formfield.element.type === "object"
|
|
135
|
+
? parseFields(formfield.element.fields, "".concat(fieldName, ".").concat(index))
|
|
136
|
+
: generateSingleField(formfield.element, "".concat(fieldName, ".").concat(index), key) }), void 0), (0, jsx_runtime_1.jsxs)(react_1.Button, __assign({ type: "button", colorScheme: "red", marginY: 2, onClick: function () { return remove(index); } }, { children: ["Remove ", "".concat(fieldName, ".").concat(index)] }), void 0)] }), void 0)); }), (0, jsx_runtime_1.jsxs)(react_1.Button, __assign({ type: "button", marginY: 2, colorScheme: "blue", onClick: function () {
|
|
137
|
+
var value = undefined;
|
|
138
|
+
if (formfield.element.type === "object") {
|
|
139
|
+
value = getInitialValues(formfield.element.fields);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
value = getInitialValues([formfield.element])[0];
|
|
143
|
+
}
|
|
144
|
+
push(value);
|
|
145
|
+
} }, { children: ["Add ", fieldName] }), void 0)] }, void 0));
|
|
146
|
+
} }), void 0));
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
return generateSingleField(formfield, fieldName, key);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
return computedFields;
|
|
153
|
+
}
|
|
154
|
+
function getInitialValues(fields) {
|
|
155
|
+
var obj = {};
|
|
156
|
+
if (!fields) {
|
|
157
|
+
return obj;
|
|
158
|
+
}
|
|
159
|
+
fields.forEach(function (field) {
|
|
160
|
+
if (field.type === "array")
|
|
161
|
+
obj[field.name] = [];
|
|
162
|
+
else if (field.type === "object")
|
|
163
|
+
obj[field.name] = getInitialValues(field.fields);
|
|
164
|
+
else if (field.type === "string")
|
|
165
|
+
obj[field.name] = "";
|
|
166
|
+
else if (field.type === "number")
|
|
167
|
+
obj[field.name] = 0;
|
|
168
|
+
else
|
|
169
|
+
obj[field.name] = null;
|
|
170
|
+
});
|
|
171
|
+
return obj;
|
|
172
|
+
}
|
|
173
|
+
function setOptions(fields) {
|
|
174
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
175
|
+
var promises;
|
|
176
|
+
var _this = this;
|
|
177
|
+
return __generator(this, function (_a) {
|
|
178
|
+
switch (_a.label) {
|
|
179
|
+
case 0:
|
|
180
|
+
if (!fields) {
|
|
181
|
+
return [2 /*return*/];
|
|
182
|
+
}
|
|
183
|
+
promises = fields.map(function (field) { return __awaiter(_this, void 0, void 0, function () {
|
|
184
|
+
var _a;
|
|
185
|
+
return __generator(this, function (_b) {
|
|
186
|
+
switch (_b.label) {
|
|
187
|
+
case 0:
|
|
188
|
+
if (!(field.type === "dropdown")) return [3 /*break*/, 2];
|
|
189
|
+
_a = field;
|
|
190
|
+
return [4 /*yield*/, field.getOptions()];
|
|
191
|
+
case 1:
|
|
192
|
+
_a.options = _b.sent();
|
|
193
|
+
return [3 /*break*/, 6];
|
|
194
|
+
case 2:
|
|
195
|
+
if (!(field.type === "array")) return [3 /*break*/, 4];
|
|
196
|
+
return [4 /*yield*/, setOptions([field.element])];
|
|
197
|
+
case 3:
|
|
198
|
+
_b.sent();
|
|
199
|
+
return [3 /*break*/, 6];
|
|
200
|
+
case 4:
|
|
201
|
+
if (!(field.type === "object")) return [3 /*break*/, 6];
|
|
202
|
+
return [4 /*yield*/, setOptions(field.fields)];
|
|
203
|
+
case 5:
|
|
204
|
+
_b.sent();
|
|
205
|
+
_b.label = 6;
|
|
206
|
+
case 6: return [2 /*return*/];
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}); });
|
|
210
|
+
return [4 /*yield*/, Promise.all(promises)];
|
|
211
|
+
case 1:
|
|
212
|
+
_a.sent();
|
|
213
|
+
return [2 /*return*/];
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
function GenericForm(_a) {
|
|
219
|
+
var _this = this;
|
|
220
|
+
var action = _a.action, onClose = _a.onClose, rowId = _a.rowId;
|
|
221
|
+
var _b = (0, react_2.useState)(parseFields(action.fields)), formFields = _b[0], setFormFields = _b[1];
|
|
222
|
+
var initialValues = (0, react_2.useState)(getInitialValues(action.fields))[0];
|
|
223
|
+
var validationSchema = (0, react_2.useState)(parseValidation(action.fields))[0];
|
|
224
|
+
(0, react_2.useEffect)(function () {
|
|
225
|
+
setOptions(action.fields).then(function () {
|
|
226
|
+
setFormFields(parseFields(action.fields));
|
|
227
|
+
});
|
|
228
|
+
}, []);
|
|
229
|
+
if (!action.fields)
|
|
230
|
+
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {}, void 0);
|
|
231
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(formik_1.Formik, __assign({ initialValues: initialValues, validationSchema: Yup.object(validationSchema), onSubmit: function (values) { return __awaiter(_this, void 0, void 0, function () {
|
|
232
|
+
var res, e_1, err;
|
|
233
|
+
return __generator(this, function (_a) {
|
|
234
|
+
switch (_a.label) {
|
|
235
|
+
case 0:
|
|
236
|
+
_a.trys.push([0, 5, , 6]);
|
|
237
|
+
res = void 0;
|
|
238
|
+
if (!rowId) return [3 /*break*/, 2];
|
|
239
|
+
return [4 /*yield*/, action.onSubmit(values, rowId)];
|
|
240
|
+
case 1:
|
|
241
|
+
res = _a.sent();
|
|
242
|
+
return [3 /*break*/, 4];
|
|
243
|
+
case 2: return [4 /*yield*/, action.onSubmit(values)];
|
|
244
|
+
case 3:
|
|
245
|
+
res = _a.sent();
|
|
246
|
+
_a.label = 4;
|
|
247
|
+
case 4:
|
|
248
|
+
if (onClose)
|
|
249
|
+
onClose();
|
|
250
|
+
sweetalert2_1.default.fire("Ok");
|
|
251
|
+
return [3 /*break*/, 6];
|
|
252
|
+
case 5:
|
|
253
|
+
e_1 = _a.sent();
|
|
254
|
+
if (onClose)
|
|
255
|
+
onClose();
|
|
256
|
+
err = e_1.request.response;
|
|
257
|
+
sweetalert2_1.default.fire({
|
|
258
|
+
text: "Error: " + err,
|
|
259
|
+
});
|
|
260
|
+
return [3 /*break*/, 6];
|
|
261
|
+
case 6: return [2 /*return*/];
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
}); } }, { children: function (_a) {
|
|
265
|
+
var isSubmitting = _a.isSubmitting;
|
|
266
|
+
return ((0, jsx_runtime_1.jsxs)(formik_1.Form, { children: [formFields, (0, jsx_runtime_1.jsx)(react_1.Button, __assign({ mt: 4, colorScheme: "teal", isLoading: isSubmitting, type: "submit" }, { children: "Submit" }), void 0)] }, void 0));
|
|
267
|
+
} }), void 0) }, void 0));
|
|
268
|
+
}
|
|
269
|
+
exports.GenericForm = GenericForm;
|
|
@@ -0,0 +1,106 @@
|
|
|
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 __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.Page = void 0;
|
|
18
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
19
|
+
var react_1 = require("react");
|
|
20
|
+
var react_2 = require("@chakra-ui/react");
|
|
21
|
+
var schema_1 = require("../schema/schema");
|
|
22
|
+
var react_3 = require("@chakra-ui/react");
|
|
23
|
+
var GenericForm_1 = require("./GenericForm");
|
|
24
|
+
var react_router_1 = require("react-router");
|
|
25
|
+
var react_4 = require("@emotion/react");
|
|
26
|
+
var styles_1 = require("@mui/material/styles");
|
|
27
|
+
var material_react_table_1 = require("material-react-table");
|
|
28
|
+
var export_to_csv_1 = require("export-to-csv");
|
|
29
|
+
var sweetalert2_1 = __importDefault(require("sweetalert2"));
|
|
30
|
+
var MenuItem_1 = __importDefault(require("@mui/material/MenuItem"));
|
|
31
|
+
function Header(_a) {
|
|
32
|
+
var pages = _a.pages, data = _a.data, basePath = _a.basePath;
|
|
33
|
+
var nav = (0, react_router_1.useNavigate)();
|
|
34
|
+
return ((0, jsx_runtime_1.jsx)(react_3.Box, __assign({ background: "blue.50", padding: 1 }, { children: (0, jsx_runtime_1.jsxs)(react_3.Stack, __assign({ margin: 3, direction: "row", justifyContent: "space-between", alignItems: "center" }, { children: [(0, jsx_runtime_1.jsx)(react_3.Stack, __assign({ margin: 4, gap: 10, direction: "row", alignItems: "center" }, { children: pages.map(function (p) { return ((0, jsx_runtime_1.jsx)(react_3.Box, __assign({ as: "a", href: "".concat(basePath, "/").concat((0, schema_1.pageToUrl)(p)) }, { children: p.name }), void 0)); }) }), void 0), (0, jsx_runtime_1.jsx)(react_3.Stack, __assign({ direction: "row" }, { children: (0, jsx_runtime_1.jsx)(react_3.Button, __assign({ colorScheme: "red", onClick: function () {
|
|
35
|
+
var filename = prompt("Enter filename:");
|
|
36
|
+
if (filename)
|
|
37
|
+
exportToCSV(data, filename);
|
|
38
|
+
} }, { children: "Export Data" }), void 0) }), void 0)] }), void 0) }), void 0));
|
|
39
|
+
}
|
|
40
|
+
function exportToCSV(data, filename) {
|
|
41
|
+
var formatImageData = function (obj) {
|
|
42
|
+
var formattedObj = {};
|
|
43
|
+
for (var key in obj) {
|
|
44
|
+
if (typeof obj[key] !== "object") {
|
|
45
|
+
formattedObj[key] = obj[key];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return formattedObj;
|
|
49
|
+
};
|
|
50
|
+
var formattedData = data.map(formatImageData);
|
|
51
|
+
var csvConfig = (0, export_to_csv_1.mkConfig)({
|
|
52
|
+
useKeysAsHeaders: true,
|
|
53
|
+
filename: filename,
|
|
54
|
+
});
|
|
55
|
+
if (formattedData.length > 0) {
|
|
56
|
+
var csv = (0, export_to_csv_1.generateCsv)(csvConfig)(formattedData);
|
|
57
|
+
(0, export_to_csv_1.download)(csvConfig)(csv);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
sweetalert2_1.default.fire({
|
|
61
|
+
title: "Error while exporting CSV!",
|
|
62
|
+
text: "There is no data to export.",
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
function Page(_a) {
|
|
67
|
+
var _b;
|
|
68
|
+
var pages = _a.pages, selectedPage = _a.selectedPage, basePath = _a.basePath;
|
|
69
|
+
var _c = (0, react_3.useDisclosure)(), isOpen = _c.isOpen, onOpen = _c.onOpen, onClose = _c.onClose;
|
|
70
|
+
var _d = (0, react_1.useState)({}), selectedAction = _d[0], setSelectedAction = _d[1];
|
|
71
|
+
var _e = (0, react_1.useState)([]), data = _e[0], setData = _e[1];
|
|
72
|
+
var _f = (0, react_1.useState)([]), displayData = _f[0], setDisplayData = _f[1];
|
|
73
|
+
var _g = (0, react_1.useState)(), rowId = _g[0], setRowId = _g[1];
|
|
74
|
+
(0, react_1.useEffect)(function () {
|
|
75
|
+
selectedPage.getRequest().then(function (resArray) {
|
|
76
|
+
setData(resArray);
|
|
77
|
+
});
|
|
78
|
+
}, []);
|
|
79
|
+
(0, react_1.useEffect)(function () {
|
|
80
|
+
setDisplayData(data.map(function (table_data) {
|
|
81
|
+
return selectedPage.tableFields.map(function (field) { return field.access(table_data); });
|
|
82
|
+
}));
|
|
83
|
+
}, [data]);
|
|
84
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Header, { pages: pages, data: data, basePath: basePath }, void 0), (0, jsx_runtime_1.jsx)(react_4.ThemeProvider, __assign({ theme: (0, styles_1.createTheme)() }, { children: (0, jsx_runtime_1.jsx)(material_react_table_1.MaterialReactTable, { columns: selectedPage.tableFields.map(function (field, index) { return ({
|
|
85
|
+
accessorFn: function (row) { return row[index]; },
|
|
86
|
+
header: field.name,
|
|
87
|
+
}); }), data: displayData, muiTableContainerProps: { sx: { maxHeight: "70vh" } }, enableColumnResizing: true, enableColumnPinning: true, enableGlobalFilterModes: true, enablePagination: true, paginationDisplayMode: "pages", enableRowVirtualization: true, rowVirtualizerOptions: { overscan: 20 }, renderTopToolbarCustomActions: function () { return ((0, jsx_runtime_1.jsx)(react_2.ChakraProvider, { children: (0, jsx_runtime_1.jsx)(react_3.Stack, __assign({ margin: 0, padding: 3, direction: "row" }, { children: selectedPage.actions.map(function (action) { return ((0, jsx_runtime_1.jsx)(react_3.Button, __assign({ colorScheme: "blue", onClick: function () {
|
|
88
|
+
setSelectedAction(action);
|
|
89
|
+
onOpen();
|
|
90
|
+
} }, { children: action.name }), void 0)); }) }), void 0) }, void 0)); }, enableRowActions: true, renderRowActionMenuItems: function (obj) {
|
|
91
|
+
return selectedPage.rowActions.map(function (rowAction) { return ((0, jsx_runtime_1.jsx)(MenuItem_1.default, __assign({ onClick: function () {
|
|
92
|
+
setSelectedAction(rowAction);
|
|
93
|
+
setRowId(obj.row.original[0]);
|
|
94
|
+
onOpen();
|
|
95
|
+
var rowActionsMenu = document.querySelector(".MuiPaper-root.MuiPopover-paper.MuiMenu-paper");
|
|
96
|
+
if (rowActionsMenu) {
|
|
97
|
+
rowActionsMenu.remove();
|
|
98
|
+
}
|
|
99
|
+
} }, { children: rowAction.name + " " + obj.row.original[0] }), void 0)); });
|
|
100
|
+
} }, void 0) }), void 0), (0, jsx_runtime_1.jsxs)(react_3.Modal, __assign({ size: "6xl", isOpen: isOpen, onClose: onClose }, { children: [(0, jsx_runtime_1.jsx)(react_3.ModalOverlay, {}, void 0), (0, jsx_runtime_1.jsxs)(react_3.ModalContent, { children: [(0, jsx_runtime_1.jsx)(react_3.ModalHeader, { children: selectedAction.name }, void 0), (0, jsx_runtime_1.jsx)(react_3.ModalCloseButton, {}, void 0), (0, jsx_runtime_1.jsxs)(react_3.ModalBody, { children: [selectedAction.fields && ((_b = selectedAction.fields) === null || _b === void 0 ? void 0 : _b.length) > 0 ? ((0, jsx_runtime_1.jsx)(GenericForm_1.GenericForm, { action: selectedAction, onClose: onClose, rowId: rowId }, void 0)) : ((0, jsx_runtime_1.jsx)(react_3.Button, __assign({ colorScheme: "blue", mr: 3, onClick: function () {
|
|
101
|
+
selectedAction.onSubmit(rowId);
|
|
102
|
+
onClose();
|
|
103
|
+
window.location.reload();
|
|
104
|
+
} }, { children: "Confirm Action" }), void 0)), (0, jsx_runtime_1.jsx)(react_3.Button, __assign({ colorScheme: "red", mr: 3, onClick: onClose }, { children: "Close" }), void 0)] }, void 0)] }, void 0)] }), void 0)] }, void 0));
|
|
105
|
+
}
|
|
106
|
+
exports.Page = Page;
|
|
@@ -0,0 +1,18 @@
|
|
|
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
|
+
var jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
|
+
var react_1 = __importDefault(require("react"));
|
|
8
|
+
var client_1 = __importDefault(require("react-dom/client"));
|
|
9
|
+
require("./index.css");
|
|
10
|
+
var App_1 = __importDefault(require("./App"));
|
|
11
|
+
var reportWebVitals_1 = __importDefault(require("./reportWebVitals"));
|
|
12
|
+
var event_1 = require("./pages/event");
|
|
13
|
+
var root = client_1.default.createRoot(document.getElementById("root"));
|
|
14
|
+
root.render((0, jsx_runtime_1.jsx)(react_1.default.StrictMode, { children: (0, jsx_runtime_1.jsx)(App_1.default, { pages: [event_1.event], basePath: "" }, void 0) }, void 0));
|
|
15
|
+
// If you want to start measuring performance in your app, pass a function
|
|
16
|
+
// to log results (for example: reportWebVitals(console.log))
|
|
17
|
+
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
|
|
18
|
+
(0, reportWebVitals_1.default)();
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
39
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.event = void 0;
|
|
43
|
+
var react_1 = __importDefault(require("react"));
|
|
44
|
+
var domain = "http://localhost:3001";
|
|
45
|
+
exports.event = {
|
|
46
|
+
name: "Events",
|
|
47
|
+
actions: [],
|
|
48
|
+
rowActions: [],
|
|
49
|
+
getRequest: function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
50
|
+
return __generator(this, function (_a) {
|
|
51
|
+
// const res = await axios.get(domain + "/events");
|
|
52
|
+
// return res.data;
|
|
53
|
+
return [2 /*return*/, []];
|
|
54
|
+
});
|
|
55
|
+
}); },
|
|
56
|
+
tableFields: [
|
|
57
|
+
{
|
|
58
|
+
name: "Id",
|
|
59
|
+
access: function (obj) { return obj.id; },
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: "Event Name",
|
|
63
|
+
access: function (obj) { return obj.name; },
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: "Description",
|
|
67
|
+
access: function (obj) { return obj.description; },
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: "Category",
|
|
71
|
+
access: function (obj) { return obj.category; },
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: "Ticket Type",
|
|
75
|
+
access: function (obj) { return obj.ticketType; },
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: "Date",
|
|
79
|
+
access: function (obj) { return obj.date; },
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: "Release",
|
|
83
|
+
access: function (obj) { return obj.release; },
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
name: "Is Released",
|
|
87
|
+
access: function (obj) { return (obj.isReleased ? "Is Released" : "Not Released"); },
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
name: "Available Tickets",
|
|
91
|
+
access: function (obj) { return obj.availableTickets; },
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
name: "Max Tickets",
|
|
95
|
+
access: function (obj) { return obj.maxTickets; },
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: "Image",
|
|
99
|
+
access: function (obj) {
|
|
100
|
+
return obj.imgUrl
|
|
101
|
+
? react_1.default.createElement("img", {
|
|
102
|
+
src: obj.imgUrl,
|
|
103
|
+
alt: "ERROR",
|
|
104
|
+
style: { width: "100px" },
|
|
105
|
+
})
|
|
106
|
+
: "No Image Available";
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
};
|