icleafreportui 0.1.1 → 0.1.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/dist/App.js +52 -0
- package/dist/Login.js +177 -0
- package/dist/Reports/CourseReport.js +243 -0
- package/dist/Reports/ExamPackReport.js +559 -0
- package/dist/Reports/ExamReport.js +290 -0
- package/dist/Reports/Report.js +299 -0
- package/dist/api/client.js +44 -0
- package/dist/components/Header.js +147 -0
- package/dist/components/Loader.js +30 -0
- package/dist/components/imagePathUrl.js +17 -0
- package/dist/components/sidebar.js +78 -0
- package/dist/context/TenantProvider.js +34 -0
- package/dist/index.js +19 -0
- package/dist/package.js +101 -0
- package/dist/reportWebVitals.js +27 -0
- package/dist/setupTests.js +3 -0
- package/package.json +11 -3
- package/.env +0 -7
- package/public/favicon.ico +0 -0
- package/public/images/EResourcesImg.png +0 -0
- package/public/images/courseCardImg.png +0 -0
- package/public/images/courseInfo.png +0 -0
- package/public/images/exam-options.png +0 -0
- package/public/images/icleaf-11.png +0 -0
- package/public/images/icleaf_logo.png +0 -0
- package/public/images/template.png +0 -0
- package/public/images/unnamed.png +0 -0
- package/public/images/user.jpg +0 -0
- package/public/images/young-man-studying-library-using-laptop-1.png +0 -0
- package/public/index.html +0 -45
- package/public/logo192.png +0 -0
- package/public/logo512.png +0 -0
- package/public/manifest.json +0 -25
- package/public/robots.txt +0 -3
- package/src/App.js +0 -37
- package/src/Login.js +0 -159
- package/src/Reports/CourseReport.js +0 -209
- package/src/Reports/ExamPackReport.js +0 -554
- package/src/Reports/ExamReport.js +0 -269
- package/src/Reports/Report.js +0 -271
- package/src/api/client.jsx +0 -42
- package/src/components/Header.jsx +0 -192
- package/src/components/Loader.jsx +0 -23
- package/src/components/imagePathUrl.jsx +0 -11
- package/src/components/sidebar.jsx +0 -81
- package/src/context/TenantProvider.jsx +0 -22
- package/src/index.js +0 -21
- package/src/package.js +0 -14
- package/src/reportWebVitals.js +0 -13
- package/src/setupTests.js +0 -5
- /package/{src → dist}/App.css +0 -0
- /package/{src → dist}/components/Header.css +0 -0
- /package/{src → dist}/components/sidebar.css +0 -0
- /package/{src → dist}/fonts/210000.jpg +0 -0
- /package/{src → dist}/fonts/210001.jpg +0 -0
- /package/{src → dist}/fonts/210003.jpg +0 -0
- /package/{src → dist}/fonts/210004.jpg +0 -0
- /package/{src → dist}/fonts/210006.jpg +0 -0
- /package/{src → dist}/fonts/210018.jpg +0 -0
- /package/{src → dist}/fonts/210019.jpg +0 -0
- /package/{src → dist}/fonts/210020.jpg +0 -0
- /package/{src → dist}/fonts/210279.jpg +0 -0
- /package/{src → dist}/fonts/210280.jpg +0 -0
- /package/{src → dist}/fonts/Gilroy-Black.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-BlackItalic.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-Bold.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-BoldItalic.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-ExtraBold.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-ExtraBoldItalic.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-Heavy.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-HeavyItalic.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-Light.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-LightItalic.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-Medium.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-MediumItalic.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-Regular.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-RegularItalic.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-SemiBold.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-SemiBoldItalic.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-Thin.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-ThinItalic.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-UltraLight.ttf +0 -0
- /package/{src → dist}/fonts/Gilroy-UltraLightItalic.ttf +0 -0
- /package/{src → dist}/fonts/Help - Guide Document.pdf +0 -0
- /package/{src → dist}/fonts/License.txt +0 -0
- /package/{src → dist}/fonts/More Free Fonts on fontshmonts.com.url +0 -0
- /package/{src → dist}/fonts/cover.jpg +0 -0
- /package/{src → dist}/index.css +0 -0
- /package/{src → dist}/login.css +0 -0
- /package/{src → dist}/logo.svg +0 -0
- /package/{src → dist}/styles.css +0 -0
- /package/{src → dist}/theme.css +0 -0
package/dist/App.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _Login = _interopRequireDefault(require("./Login"));
|
|
9
|
+
var _Report = _interopRequireDefault(require("./Reports/Report"));
|
|
10
|
+
var _reactRouterDom = require("react-router-dom");
|
|
11
|
+
var _CourseReport = _interopRequireDefault(require("./Reports/CourseReport"));
|
|
12
|
+
var _ExamReport = _interopRequireDefault(require("./Reports/ExamReport"));
|
|
13
|
+
var _ExamPackReport = _interopRequireDefault(require("./Reports/ExamPackReport"));
|
|
14
|
+
var _TenantProvider = require("./context/TenantProvider");
|
|
15
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
17
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
18
|
+
// ADD THIS
|
|
19
|
+
|
|
20
|
+
const App = () => {
|
|
21
|
+
const userToken = localStorage.getItem("token");
|
|
22
|
+
|
|
23
|
+
// Configuration for API calls
|
|
24
|
+
const config = {
|
|
25
|
+
baseURL: process.env.REACT_APP_BASE_URL || 'http://192.168.2.203:8080/icleafreport',
|
|
26
|
+
tenantToken: 'tn_852cf0d3242a11f19d84005056575b50' // Your test token
|
|
27
|
+
};
|
|
28
|
+
return /*#__PURE__*/_react.default.createElement(_TenantProvider.TenantProvider, {
|
|
29
|
+
config: config
|
|
30
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
31
|
+
className: "App"
|
|
32
|
+
}, /*#__PURE__*/_react.default.createElement(_reactRouterDom.HashRouter, null, /*#__PURE__*/_react.default.createElement(_reactRouterDom.Routes, null, /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
|
|
33
|
+
path: "/",
|
|
34
|
+
element: userToken != null ? /*#__PURE__*/_react.default.createElement(_Report.default, null) : /*#__PURE__*/_react.default.createElement(_Login.default, null)
|
|
35
|
+
}), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
|
|
36
|
+
path: "/login",
|
|
37
|
+
element: userToken != null ? /*#__PURE__*/_react.default.createElement(_Report.default, null) : /*#__PURE__*/_react.default.createElement(_Login.default, null)
|
|
38
|
+
}), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
|
|
39
|
+
path: "/report",
|
|
40
|
+
element: /*#__PURE__*/_react.default.createElement(_Report.default, null)
|
|
41
|
+
}), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
|
|
42
|
+
path: "/coursereport",
|
|
43
|
+
element: /*#__PURE__*/_react.default.createElement(_CourseReport.default, null)
|
|
44
|
+
}), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
|
|
45
|
+
path: "/examReport",
|
|
46
|
+
element: /*#__PURE__*/_react.default.createElement(_ExamReport.default, null)
|
|
47
|
+
}), /*#__PURE__*/_react.default.createElement(_reactRouterDom.Route, {
|
|
48
|
+
path: "/examPackReport",
|
|
49
|
+
element: /*#__PURE__*/_react.default.createElement(_ExamPackReport.default, null)
|
|
50
|
+
})))));
|
|
51
|
+
};
|
|
52
|
+
var _default = exports.default = App;
|
package/dist/Login.js
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _axios = _interopRequireDefault(require("axios"));
|
|
9
|
+
var _reactRouterDom = require("react-router-dom");
|
|
10
|
+
var _imagePathUrl = require("./components/imagePathUrl");
|
|
11
|
+
var _ri = require("react-icons/ri");
|
|
12
|
+
var _ai = require("react-icons/ai");
|
|
13
|
+
require("bootstrap/dist/css/bootstrap.css");
|
|
14
|
+
require("./login.css");
|
|
15
|
+
var _material = require("@mui/material");
|
|
16
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
18
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
19
|
+
// Correct import statement for useHistory
|
|
20
|
+
|
|
21
|
+
const Login = () => {
|
|
22
|
+
const [username, setUsername] = (0, _react.useState)('');
|
|
23
|
+
const [password, setPassword] = (0, _react.useState)('');
|
|
24
|
+
const [showPassword, setShowPassword] = (0, _react.useState)(false);
|
|
25
|
+
const [error, setError] = (0, _react.useState)('');
|
|
26
|
+
const [openAlert, setOpenAlert] = (0, _react.useState)(false);
|
|
27
|
+
const navigate = (0, _reactRouterDom.useNavigate)(); // Initialize useHistory
|
|
28
|
+
|
|
29
|
+
// const getSubDomain = () => {
|
|
30
|
+
// const hostname = window.location.hostname;
|
|
31
|
+
// const parts = hostname.split('.');
|
|
32
|
+
// if (parts.length > 2) {
|
|
33
|
+
// return parts [0];
|
|
34
|
+
// }
|
|
35
|
+
// }
|
|
36
|
+
|
|
37
|
+
const getSubDomain = () => {
|
|
38
|
+
const hostname = window.location.hostname;
|
|
39
|
+
console.log("Hostname:", hostname); // debug
|
|
40
|
+
|
|
41
|
+
// For localhost without subdomain
|
|
42
|
+
if (hostname === "localhost" || hostname === "127.0.0.1") {
|
|
43
|
+
return "icleaf";
|
|
44
|
+
}
|
|
45
|
+
const parts = hostname.split('.');
|
|
46
|
+
if (parts.length > 2) {
|
|
47
|
+
return parts[0]; // Returns subdomain
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// If no subdomain found
|
|
51
|
+
return "icleaf";
|
|
52
|
+
};
|
|
53
|
+
const baseURL = process.env.REACT_APP_BASE_URL;
|
|
54
|
+
const handleLogin = async e => {
|
|
55
|
+
e.preventDefault();
|
|
56
|
+
const subdomain = getSubDomain();
|
|
57
|
+
try {
|
|
58
|
+
// const response = await axios.get(`${baseURL}` + "api/login?userName=" + username + "&password=" + password);
|
|
59
|
+
const response = await _axios.default.get(`${baseURL}api/login?userName=${username}&password=${password}&subdomain=${subdomain}`);
|
|
60
|
+
console.log(response, "response");
|
|
61
|
+
if (response.data) {
|
|
62
|
+
var res = response.data;
|
|
63
|
+
if (res == "User Not Found") {
|
|
64
|
+
setError(res);
|
|
65
|
+
setOpenAlert(true);
|
|
66
|
+
} else if (res == "UserName or Password cannot be empty") {
|
|
67
|
+
setError(res);
|
|
68
|
+
setOpenAlert(true);
|
|
69
|
+
} else {
|
|
70
|
+
localStorage.setItem("token", response.data);
|
|
71
|
+
localStorage.setItem("subdomain", subdomain);
|
|
72
|
+
navigate('/Report');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
} catch (error) {
|
|
76
|
+
setError('User Not Found');
|
|
77
|
+
setOpenAlert(true);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const togglePasswordVisibility = () => {
|
|
81
|
+
setShowPassword(!showPassword);
|
|
82
|
+
};
|
|
83
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
84
|
+
className: "row page_container"
|
|
85
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
86
|
+
className: "col-6 login_container1"
|
|
87
|
+
}, /*#__PURE__*/_react.default.createElement("img", {
|
|
88
|
+
className: "login_img",
|
|
89
|
+
src: _imagePathUrl.youngMan
|
|
90
|
+
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
91
|
+
className: "col-6 login_container2_bg"
|
|
92
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
93
|
+
className: "login_form_container"
|
|
94
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
95
|
+
className: "logo_container"
|
|
96
|
+
}, /*#__PURE__*/_react.default.createElement("img", {
|
|
97
|
+
className: "logo_img",
|
|
98
|
+
src: _imagePathUrl.logo,
|
|
99
|
+
alt: "Login logo Image"
|
|
100
|
+
})), /*#__PURE__*/_react.default.createElement("text", {
|
|
101
|
+
className: "welcome_text"
|
|
102
|
+
}, "Welcome"), /*#__PURE__*/_react.default.createElement("form", {
|
|
103
|
+
onSubmit: handleLogin
|
|
104
|
+
}, /*#__PURE__*/_react.default.createElement("label", {
|
|
105
|
+
className: "login_label"
|
|
106
|
+
}, "Username"), /*#__PURE__*/_react.default.createElement("div", {
|
|
107
|
+
className: "input_contanier"
|
|
108
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
109
|
+
className: "input_icons"
|
|
110
|
+
}, /*#__PURE__*/_react.default.createElement(_ri.RiMailLine, null)), /*#__PURE__*/_react.default.createElement("input", {
|
|
111
|
+
type: "username",
|
|
112
|
+
id: "username",
|
|
113
|
+
name: "username",
|
|
114
|
+
className: "input_box",
|
|
115
|
+
placeholder: "Username"
|
|
116
|
+
// onBlur={(e) => validateForm(e.target.value, language.enterUsername, "userName")}
|
|
117
|
+
,
|
|
118
|
+
value: username,
|
|
119
|
+
onChange: e => {
|
|
120
|
+
setUsername(e.target.value);
|
|
121
|
+
// validateForm(e.target.value, language.enterUsername, "userName")
|
|
122
|
+
}
|
|
123
|
+
})), /*#__PURE__*/_react.default.createElement("label", {
|
|
124
|
+
className: "login_label"
|
|
125
|
+
}, "Password"), /*#__PURE__*/_react.default.createElement("div", {
|
|
126
|
+
className: "input_contanier"
|
|
127
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
128
|
+
className: "input_icons"
|
|
129
|
+
}, /*#__PURE__*/_react.default.createElement(_ri.RiLockLine, null)), /*#__PURE__*/_react.default.createElement("input", {
|
|
130
|
+
type: showPassword ? "text" : "password",
|
|
131
|
+
id: "password",
|
|
132
|
+
name: "password",
|
|
133
|
+
className: "input_box"
|
|
134
|
+
// onBlur={(e) => validateForm(e.target.value, language.enterPass, "password")}
|
|
135
|
+
,
|
|
136
|
+
placeholder: "Password",
|
|
137
|
+
value: password,
|
|
138
|
+
onChange: e => {
|
|
139
|
+
setPassword(e.target.value);
|
|
140
|
+
// validateForm(e.target.value, language.enterPass, "password")
|
|
141
|
+
},
|
|
142
|
+
style: {
|
|
143
|
+
userSelect: "none"
|
|
144
|
+
}
|
|
145
|
+
}), showPassword ? /*#__PURE__*/_react.default.createElement(_ai.AiOutlineEye, {
|
|
146
|
+
onClick: () => togglePasswordVisibility(),
|
|
147
|
+
className: "eye-icon_login"
|
|
148
|
+
}) : /*#__PURE__*/_react.default.createElement(_ai.AiOutlineEyeInvisible, {
|
|
149
|
+
onClick: () => togglePasswordVisibility(),
|
|
150
|
+
className: "eye-icon_login"
|
|
151
|
+
})), /*#__PURE__*/_react.default.createElement("div", {
|
|
152
|
+
className: "login_btn_container"
|
|
153
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Button, {
|
|
154
|
+
variant: "contained",
|
|
155
|
+
style: {
|
|
156
|
+
width: "100%",
|
|
157
|
+
marginTop: "15px",
|
|
158
|
+
padding: "10px"
|
|
159
|
+
},
|
|
160
|
+
type: "submit"
|
|
161
|
+
}, "Login"))))), /*#__PURE__*/_react.default.createElement(_material.Snackbar, {
|
|
162
|
+
open: openAlert,
|
|
163
|
+
autoHideDuration: 6000,
|
|
164
|
+
onClose: () => setOpenAlert(false),
|
|
165
|
+
anchorOrigin: {
|
|
166
|
+
vertical: 'top',
|
|
167
|
+
horizontal: 'center'
|
|
168
|
+
}
|
|
169
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Alert, {
|
|
170
|
+
onClose: () => setOpenAlert(false),
|
|
171
|
+
severity: "info",
|
|
172
|
+
sx: {
|
|
173
|
+
width: '30%'
|
|
174
|
+
}
|
|
175
|
+
}, error))));
|
|
176
|
+
};
|
|
177
|
+
var _default = exports.default = Login;
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _axios = _interopRequireDefault(require("axios"));
|
|
9
|
+
var _material = require("@mui/material");
|
|
10
|
+
var _reactRouterDom = require("react-router-dom");
|
|
11
|
+
var _Header = _interopRequireDefault(require("../components/Header"));
|
|
12
|
+
var _sidebar = _interopRequireDefault(require("../components/sidebar"));
|
|
13
|
+
require("../App.css");
|
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
16
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
17
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
18
|
+
function CourseReport() {
|
|
19
|
+
const [token, setToken] = (0, _react.useState)(localStorage.getItem("token"));
|
|
20
|
+
const navigate = (0, _reactRouterDom.useNavigate)();
|
|
21
|
+
const [subjects, setSubjects] = (0, _react.useState)([]);
|
|
22
|
+
const [courses, setCourses] = (0, _react.useState)([]);
|
|
23
|
+
const [selectedSubject, setSelectedSubject] = (0, _react.useState)(null);
|
|
24
|
+
const [selectedCourse, setSelectedCourse] = (0, _react.useState)(null);
|
|
25
|
+
const [reportTypes] = (0, _react.useState)(['Summary', 'Daywise']);
|
|
26
|
+
const [selectedReportType, setSelectedReportType] = (0, _react.useState)(null);
|
|
27
|
+
const [alertMessage, setAlertMessage] = (0, _react.useState)('');
|
|
28
|
+
const [loading, setLoading] = (0, _react.useState)(false);
|
|
29
|
+
const [alertOpen, setAlertOpen] = (0, _react.useState)(false);
|
|
30
|
+
const baseURL = process.env.REACT_APP_BASE_URL;
|
|
31
|
+
(0, _react.useEffect)(() => {
|
|
32
|
+
if (token == null) {
|
|
33
|
+
navigate("/login");
|
|
34
|
+
} else {
|
|
35
|
+
fetchAllSubjects();
|
|
36
|
+
}
|
|
37
|
+
}, []);
|
|
38
|
+
const fetchAllSubjects = async () => {
|
|
39
|
+
try {
|
|
40
|
+
const response = await (0, _axios.default)({
|
|
41
|
+
method: "get",
|
|
42
|
+
url: `${baseURL}api/showAllSubjects`,
|
|
43
|
+
headers: {
|
|
44
|
+
Authorization: `Bearer ${token}`
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
setSubjects(response.data);
|
|
48
|
+
} catch (error) {
|
|
49
|
+
console.error('Error fetching subjects:', error);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const fetchCourses = async subjectId => {
|
|
53
|
+
try {
|
|
54
|
+
const response = await (0, _axios.default)({
|
|
55
|
+
method: "get",
|
|
56
|
+
params: {
|
|
57
|
+
subjectId
|
|
58
|
+
},
|
|
59
|
+
url: `${baseURL}api/getCoursesBySubject`,
|
|
60
|
+
headers: {
|
|
61
|
+
Authorization: `Bearer ${token}`
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
setCourses(response.data);
|
|
65
|
+
} catch (error) {
|
|
66
|
+
console.error('Error fetching courses:', error);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const handleSubjectChange = (event, newValue) => {
|
|
70
|
+
setSelectedSubject(newValue);
|
|
71
|
+
setSelectedCourse(null);
|
|
72
|
+
setCourses([]);
|
|
73
|
+
if (newValue) {
|
|
74
|
+
fetchCourses(newValue.subjectId);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const handleCourseChange = (event, newValue) => {
|
|
78
|
+
setSelectedCourse(newValue);
|
|
79
|
+
};
|
|
80
|
+
const handleReportTypeChange = (event, newValue) => {
|
|
81
|
+
setSelectedReportType(newValue);
|
|
82
|
+
};
|
|
83
|
+
const handleDownload = async () => {
|
|
84
|
+
setLoading(true);
|
|
85
|
+
try {
|
|
86
|
+
let url;
|
|
87
|
+
if (selectedReportType === 'Summary') {
|
|
88
|
+
url = `${baseURL}api/downloadUserCorpCourseExcel?corpCourseId=${selectedCourse.id}`;
|
|
89
|
+
} else if (selectedReportType === 'Daywise') {
|
|
90
|
+
url = `${baseURL}api/downloadUserCorpCourseExcelDayWise?corpCourseId=${selectedCourse.id}`;
|
|
91
|
+
}
|
|
92
|
+
const response = await _axios.default.get(url, {
|
|
93
|
+
responseType: 'blob',
|
|
94
|
+
headers: {
|
|
95
|
+
Authorization: `Bearer ${token}`
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
const contentDisposition = response.headers['content-disposition'];
|
|
99
|
+
const text = await response.data.text();
|
|
100
|
+
if (text.includes('Course not configured')) {
|
|
101
|
+
setAlertMessage('Course not configured.');
|
|
102
|
+
setAlertOpen(true);
|
|
103
|
+
} else {
|
|
104
|
+
const filename = 'course_report.xlsx';
|
|
105
|
+
const blob = new Blob([response.data], {
|
|
106
|
+
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
|
107
|
+
});
|
|
108
|
+
const blobUrl = URL.createObjectURL(blob);
|
|
109
|
+
const link = document.createElement('a');
|
|
110
|
+
link.href = blobUrl;
|
|
111
|
+
link.setAttribute('download', filename);
|
|
112
|
+
document.body.appendChild(link);
|
|
113
|
+
link.click();
|
|
114
|
+
link.parentNode.removeChild(link);
|
|
115
|
+
URL.revokeObjectURL(blobUrl);
|
|
116
|
+
}
|
|
117
|
+
} catch (error) {
|
|
118
|
+
console.error('Error downloading course report:', error);
|
|
119
|
+
} finally {
|
|
120
|
+
setLoading(false);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Header.default, null), /*#__PURE__*/_react.default.createElement(_sidebar.default, null), /*#__PURE__*/_react.default.createElement("div", {
|
|
124
|
+
style: {
|
|
125
|
+
padding: "100px 0px 0px 100px",
|
|
126
|
+
marginLeft: "140px"
|
|
127
|
+
}
|
|
128
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
129
|
+
sx: {
|
|
130
|
+
maxWidth: 800,
|
|
131
|
+
mx: 'auto',
|
|
132
|
+
my: 4,
|
|
133
|
+
p: 3,
|
|
134
|
+
backgroundColor: '#f5f5f5',
|
|
135
|
+
borderRadius: 2
|
|
136
|
+
}
|
|
137
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Paper, {
|
|
138
|
+
elevation: 6,
|
|
139
|
+
sx: {
|
|
140
|
+
p: 5,
|
|
141
|
+
textAlign: 'center',
|
|
142
|
+
backgroundColor: '#fff'
|
|
143
|
+
}
|
|
144
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Typography, {
|
|
145
|
+
variant: "h4",
|
|
146
|
+
component: "h1",
|
|
147
|
+
gutterBottom: true,
|
|
148
|
+
sx: {
|
|
149
|
+
color: '#3f51b5',
|
|
150
|
+
marginBottom: "20px"
|
|
151
|
+
}
|
|
152
|
+
}, "Course Report"), /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
153
|
+
container: true,
|
|
154
|
+
spacing: 2,
|
|
155
|
+
justifyContent: "center"
|
|
156
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
157
|
+
item: true,
|
|
158
|
+
xs: 12,
|
|
159
|
+
sm: 4
|
|
160
|
+
}, /*#__PURE__*/_react.default.createElement(_material.FormControl, {
|
|
161
|
+
fullWidth: true
|
|
162
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Autocomplete, {
|
|
163
|
+
id: "ddlSubject",
|
|
164
|
+
options: subjects,
|
|
165
|
+
getOptionLabel: option => option.subjectName,
|
|
166
|
+
value: selectedSubject,
|
|
167
|
+
onChange: handleSubjectChange,
|
|
168
|
+
renderInput: params => /*#__PURE__*/_react.default.createElement(_material.TextField, _extends({}, params, {
|
|
169
|
+
label: "Subject"
|
|
170
|
+
}))
|
|
171
|
+
}))), /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
172
|
+
item: true,
|
|
173
|
+
xs: 12,
|
|
174
|
+
sm: 4
|
|
175
|
+
}, /*#__PURE__*/_react.default.createElement(_material.FormControl, {
|
|
176
|
+
fullWidth: true
|
|
177
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Autocomplete, {
|
|
178
|
+
id: "ddlCourse",
|
|
179
|
+
options: courses,
|
|
180
|
+
getOptionLabel: option => option.courseName,
|
|
181
|
+
value: selectedCourse,
|
|
182
|
+
onChange: handleCourseChange,
|
|
183
|
+
renderInput: params => /*#__PURE__*/_react.default.createElement(_material.TextField, _extends({}, params, {
|
|
184
|
+
label: "Course"
|
|
185
|
+
}))
|
|
186
|
+
}))), /*#__PURE__*/_react.default.createElement(_material.Grid, {
|
|
187
|
+
item: true,
|
|
188
|
+
xs: 12,
|
|
189
|
+
sm: 4
|
|
190
|
+
}, /*#__PURE__*/_react.default.createElement(_material.FormControl, {
|
|
191
|
+
fullWidth: true
|
|
192
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Autocomplete, {
|
|
193
|
+
id: "ddlReportType",
|
|
194
|
+
options: reportTypes,
|
|
195
|
+
getOptionLabel: option => option,
|
|
196
|
+
value: selectedReportType,
|
|
197
|
+
onChange: handleReportTypeChange,
|
|
198
|
+
renderInput: params => /*#__PURE__*/_react.default.createElement(_material.TextField, _extends({}, params, {
|
|
199
|
+
label: "Report Type"
|
|
200
|
+
}))
|
|
201
|
+
})))), /*#__PURE__*/_react.default.createElement(_material.Box, {
|
|
202
|
+
sx: {
|
|
203
|
+
mt: 3,
|
|
204
|
+
position: 'relative'
|
|
205
|
+
}
|
|
206
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Button, {
|
|
207
|
+
variant: "contained",
|
|
208
|
+
color: "primary",
|
|
209
|
+
onClick: handleDownload,
|
|
210
|
+
disabled: !selectedSubject || !selectedCourse || !selectedReportType || loading,
|
|
211
|
+
sx: {
|
|
212
|
+
width: 'auto',
|
|
213
|
+
backgroundColor: '#3f51b5',
|
|
214
|
+
'&:hover': {
|
|
215
|
+
backgroundColor: '#303f9f'
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}, loading ? 'Downloading...' : 'Download Report'), loading && /*#__PURE__*/_react.default.createElement(_material.CircularProgress, {
|
|
219
|
+
size: 24,
|
|
220
|
+
sx: {
|
|
221
|
+
position: 'absolute',
|
|
222
|
+
top: '50%',
|
|
223
|
+
left: '50%',
|
|
224
|
+
marginTop: '-12px',
|
|
225
|
+
marginLeft: '-12px'
|
|
226
|
+
}
|
|
227
|
+
})))), /*#__PURE__*/_react.default.createElement(_material.Snackbar, {
|
|
228
|
+
open: alertOpen,
|
|
229
|
+
autoHideDuration: 6000,
|
|
230
|
+
onClose: () => setAlertOpen(false),
|
|
231
|
+
anchorOrigin: {
|
|
232
|
+
vertical: 'top',
|
|
233
|
+
horizontal: 'center'
|
|
234
|
+
}
|
|
235
|
+
}, /*#__PURE__*/_react.default.createElement(_material.Alert, {
|
|
236
|
+
onClose: () => setAlertOpen(false),
|
|
237
|
+
severity: "info",
|
|
238
|
+
sx: {
|
|
239
|
+
width: '100%'
|
|
240
|
+
}
|
|
241
|
+
}, alertMessage))));
|
|
242
|
+
}
|
|
243
|
+
var _default = exports.default = CourseReport;
|