Skip to content

Commit 2bfced6

Browse files
committed
admin app
1 parent fe77303 commit 2bfced6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+6989
-3704
lines changed

.gitignore

+3-1
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ admin/node_modules
1616
*.out
1717

1818
# Dependency directories (remove the comment below to include it)
19-
# vendor/
19+
# vendor/
20+
admin/src/pages/Accounts.tsx
21+
.DS_Store

admin/package-lock.json

+5,497-3,552
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

admin/package.json

+34-11
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,43 @@
11
{
2-
"name": "admin",
2+
"name": "client",
33
"version": "0.1.0",
44
"private": true,
55
"dependencies": {
6-
"@testing-library/jest-dom": "^5.16.5",
7-
"@testing-library/react": "^13.4.0",
8-
"@testing-library/user-event": "^13.5.0",
6+
"@date-io/date-fns": "^2.14.0",
7+
"@date-io/moment": "^2.14.0",
8+
"@emotion/react": "^11.9.3",
9+
"@emotion/styled": "^11.9.3",
10+
"@hookform/resolvers": "^2.9.7",
11+
"@mui/icons-material": "^5.8.4",
12+
"@mui/lab": "^5.0.0-alpha.92",
13+
"@mui/material": "^5.9.2",
14+
"@mui/x-data-grid": "^5.15.0",
15+
"@mui/x-date-pickers": "^5.0.0-beta.3",
16+
"@nivo/line": "^0.79.1",
17+
"@nivo/pie": "^0.79.1",
18+
"@nivo/tooltip": "^0.79.0",
19+
"@types/axios": "^0.14.0",
920
"@types/jest": "^27.5.2",
10-
"@types/node": "^16.18.3",
11-
"@types/react": "^18.0.25",
12-
"@types/react-dom": "^18.0.8",
13-
"react": "^18.2.0",
14-
"react-dom": "^18.2.0",
21+
"@types/jwt-decode": "^3.1.0",
22+
"@types/node": "^17.0.45",
23+
"@types/react": "^18.0.15",
24+
"axios": "^0.27.2",
25+
"d3-scale": "^4.0.2",
26+
"date-fns": "^2.29.1",
27+
"date-fns-tz": "^1.3.6",
28+
"dayjs-plugin-utc": "^0.1.2",
29+
"jwt-decode": "^3.1.2",
30+
"moment": "^2.29.4",
31+
"moment-timezone": "^0.5.34",
32+
"react": "^17.0.2",
33+
"react-dom": "^17.0.2",
34+
"react-hook-form": "^7.33.1",
35+
"react-redux": "^8.0.2",
36+
"react-router-dom": "^6.3.0",
1537
"react-scripts": "5.0.1",
16-
"typescript": "^4.8.4",
17-
"web-vitals": "^2.1.4"
38+
"typescript": "^4.7.4",
39+
"web-vitals": "^2.1.4",
40+
"yup": "^0.32.11"
1841
},
1942
"scripts": {
2043
"start": "react-scripts start",

admin/src/App.css

-38
This file was deleted.

admin/src/App.test.tsx

-9
This file was deleted.

admin/src/App.tsx

+48-18
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,54 @@
1-
import React from 'react';
2-
import logo from './logo.svg';
3-
import './App.css';
1+
// @ts-nocheck
2+
import { createTheme, CssBaseline, ThemeProvider } from "@mui/material";
3+
import React from "react";
4+
import { AuthContext, AuthProvider } from "./context/AuthProvider";
5+
import { AppRoutes } from "./router/Routes";
6+
import "./index.css";
7+
import "./axiosConfig";
48

59
function App() {
10+
const { palette } = createTheme();
11+
const theme = createTheme({
12+
palette: {
13+
background: {
14+
default: "#inherit",
15+
},
16+
mode: "dark",
17+
primary: {
18+
main: "#17C6B1",
19+
},
20+
secondary: {
21+
main: "#72E8C9",
22+
},
23+
mycolor: { main: "red" },
24+
},
25+
components: {
26+
MuiButton: {
27+
styleOverrides: {
28+
root: {
29+
// borderRadius: "1000px",
30+
},
31+
},
32+
},
33+
MuiCard: {
34+
styleOverrides: {
35+
root: {
36+
backgroundImage: 'none',
37+
backgroundColor: "#161616",
38+
borderRadius: "20px",
39+
},
40+
},
41+
},
42+
},
43+
});
644
return (
7-
<div className="App">
8-
<header className="App-header">
9-
<img src={logo} className="App-logo" alt="logo" />
10-
<p>
11-
Edit <code>src/App.tsx</code> and save to reload.
12-
</p>
13-
<a
14-
className="App-link"
15-
href="https://reactjs.org"
16-
target="_blank"
17-
rel="noopener noreferrer"
18-
>
19-
Learn React
20-
</a>
21-
</header>
45+
<div>
46+
<AuthProvider>
47+
<ThemeProvider theme={theme}>
48+
<CssBaseline />
49+
<AppRoutes />
50+
</ThemeProvider>
51+
</AuthProvider>
2252
</div>
2353
);
2454
}

admin/src/axiosConfig.ts

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import plainAxios from "axios";
2+
import { deleteAllCookies } from "./helpers/authHelper";
3+
4+
const axios = plainAxios.create({
5+
baseURL: "/api",
6+
withCredentials: true,
7+
timeout: 20000,
8+
});
9+
10+
axios.interceptors.request.use(
11+
(req) => {
12+
const token = window.localStorage.getItem("token");
13+
if (token !== null) {
14+
req.headers!["token"] = token;
15+
}
16+
return req;
17+
},
18+
(error) => {
19+
return Promise.reject(error);
20+
}
21+
);
22+
23+
axios.interceptors.response.use(
24+
(response) => {
25+
return response;
26+
},
27+
(error) => {
28+
console.log(error);
29+
if (error.response.status === 401) {
30+
deleteAllCookies();
31+
window.location.reload();
32+
}
33+
return Promise.reject(error);
34+
}
35+
);
36+
37+
export default axios;

admin/src/components/Cards/MyCard.tsx

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { Card, CardActionArea, CardContent } from "@mui/material";
2+
import React from "react";
3+
4+
interface IMyCardProps {
5+
children: React.ReactNode;
6+
[x: string]: any;
7+
}
8+
9+
export const MyCard = ({ children, rest }: IMyCardProps) => {
10+
return (
11+
<Card elevation={7} sx={{ height: "100%" }} {...rest}>
12+
<CardContent sx={{ height: "100%" }}>{children}</CardContent>
13+
</Card>
14+
);
15+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import DateFnsUtils from "@date-io/date-fns";
2+
import { Controller } from "react-hook-form";
3+
import { TextField } from "@mui/material";
4+
import { DatePicker, LocalizationProvider } from "@mui/x-date-pickers";
5+
import { format } from "date-fns";
6+
import { zonedTimeToUtc } from "date-fns-tz";
7+
import { getUtcIso } from "../../helpers/date";
8+
9+
interface ControlledDatePickerProps {
10+
name: string;
11+
label: string;
12+
defaultValue?: any;
13+
control: any;
14+
rest?: any;
15+
}
16+
17+
export function ControlledDatePicker({
18+
name,
19+
label,
20+
defaultValue,
21+
control,
22+
rest,
23+
}: ControlledDatePickerProps) {
24+
return (
25+
<Controller
26+
control={control}
27+
name={name}
28+
defaultValue={getUtcIso(defaultValue)}
29+
render={({ field: { onChange, value } }) => (
30+
<LocalizationProvider dateAdapter={DateFnsUtils}>
31+
<DatePicker
32+
label={label}
33+
value={value}
34+
onChange={onChange}
35+
renderInput={(params: any) => (
36+
<TextField fullWidth sx={{ minWidth: 150 }} {...params} />
37+
)}
38+
inputFormat="dd/MM/yyyy"
39+
/>
40+
</LocalizationProvider>
41+
)}
42+
/>
43+
);
44+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import { TextField } from "@mui/material";
2+
import { useRef } from "react";
3+
import { Controller } from "react-hook-form";
4+
5+
interface ControlledTextFieldProps {
6+
name: string;
7+
label: string;
8+
defaultValue?: any;
9+
control: any;
10+
rules?: any;
11+
disabled?: boolean;
12+
autofill?: string;
13+
type?: string;
14+
}
15+
16+
export function ControlledTextField({
17+
control,
18+
name,
19+
label,
20+
defaultValue,
21+
rules,
22+
type,
23+
autofill,
24+
...rest
25+
}: ControlledTextFieldProps) {
26+
const textFieldRef = useRef<any>(null);
27+
28+
return (
29+
<Controller
30+
control={control}
31+
name={name}
32+
defaultValue={defaultValue || (type === "number" ? 0 : "")}
33+
rules={rules}
34+
render={({ field: { onChange, value }, fieldState: { error } }) => {
35+
return (
36+
<>
37+
<TextField
38+
fullWidth
39+
type={type}
40+
variant="outlined"
41+
autoComplete={autofill || "off"}
42+
label={label}
43+
value={value || ""}
44+
onInput={ (e: any) => onChange(e.target.value) }
45+
onChange={(val) => {
46+
// val.target.value =
47+
// type === "number"
48+
// ? parseInt(val.target.value)
49+
// : val.target.value;
50+
onChange(val);
51+
}}
52+
error={!!error}
53+
helperText={error?.message}
54+
55+
ref={textFieldRef}
56+
{...rest}
57+
/>
58+
</>
59+
);
60+
}}
61+
/>
62+
);
63+
}
64+
ControlledTextField.defaultProps = {
65+
defaultValue: "",
66+
};

0 commit comments

Comments
 (0)