diff --git a/Client/package-lock.json b/Client/package-lock.json index 454b381c9..79ac309a3 100644 --- a/Client/package-lock.json +++ b/Client/package-lock.json @@ -13,6 +13,9 @@ "@fontsource/roboto": "^5.0.13", "@mui/icons-material": "^5.15.16", "@mui/material": "^5.15.16", + "@mui/x-data-grid": "7.3.2", + "@mui/x-date-pickers": "7.3.2", + "dayjs": "1.11.11", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router": "^6.23.0", @@ -1338,6 +1341,96 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, + "node_modules/@mui/x-data-grid": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@mui/x-data-grid/-/x-data-grid-7.3.2.tgz", + "integrity": "sha512-seuRiZ2yyhzeUa7Thzap0xvvizGPSEwJRNOjY9kffjUr+0iXGF3PZGEsMoJ7jCjZ2peHX7FjfqBdssDvizxIDQ==", + "dependencies": { + "@babel/runtime": "^7.24.0", + "@mui/system": "^5.15.14", + "@mui/utils": "^5.15.14", + "clsx": "^2.1.0", + "prop-types": "^15.8.1", + "reselect": "^4.1.8" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^5.15.14", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@mui/x-date-pickers": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.3.2.tgz", + "integrity": "sha512-i7JaDs1eXSZWyJihfszUHVV0t/C2HvtdMv5tHwv3E3enMx5Hup1vkJ64vZAH2fgGrTHQH8mjxvVsmI6jhDXIUg==", + "dependencies": { + "@babel/runtime": "^7.24.0", + "@mui/base": "^5.0.0-beta.40", + "@mui/system": "^5.15.14", + "@mui/utils": "^5.15.14", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.15.14", + "date-fns": "^2.25.0 || ^3.2.0", + "date-fns-jalali": "^2.13.0-0", + "dayjs": "^1.10.7", + "luxon": "^3.0.2", + "moment": "^2.29.4", + "moment-hijri": "^2.1.2", + "moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "date-fns": { + "optional": true + }, + "date-fns-jalali": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + }, + "moment-hijri": { + "optional": true + }, + "moment-jalaali": { + "optional": true + } + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2179,6 +2272,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/dayjs": { + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -4213,6 +4311,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/reselect": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz", + "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==" + }, "node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", diff --git a/Client/package.json b/Client/package.json index f8025f1de..7d5c47a8d 100644 --- a/Client/package.json +++ b/Client/package.json @@ -15,6 +15,9 @@ "@fontsource/roboto": "^5.0.13", "@mui/icons-material": "^5.15.16", "@mui/material": "^5.15.16", + "@mui/x-data-grid": "7.3.2", + "@mui/x-date-pickers": "7.3.2", + "dayjs": "1.11.11", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router": "^6.23.0", diff --git a/Client/src/App.jsx b/Client/src/App.jsx index 1c388ab5d..b47c3082e 100644 --- a/Client/src/App.jsx +++ b/Client/src/App.jsx @@ -1,24 +1,23 @@ - -import { Routes, Route } from 'react-router-dom' -import './App.css' -import NotFound from './Pages/NotFound' -import Login from './Pages/Login' -import Register from './Pages/Register' -import HomeLayout from './Layouts/HomeLayout' - +import { Routes, Route } from "react-router-dom"; +import "./App.css"; +import NotFound from "./Pages/NotFound"; +import Login from "./Pages/Login"; +import Register from "./Pages/Register"; +import HomeLayout from "./Layouts/HomeLayout"; +import Demo from "./Pages/Demo/Demo"; function App() { return ( <> - } /> - } /> - } /> - } /> + } /> + } /> + } /> + } /> + } /> - ) + ); } -export default App - +export default App; diff --git a/Client/src/Components/Label/BaseLabel.css b/Client/src/Components/Label/BaseLabel.css index 6aed6326d..961e6c128 100644 --- a/Client/src/Components/Label/BaseLabel.css +++ b/Client/src/Components/Label/BaseLabel.css @@ -3,4 +3,5 @@ display: inline-flex; justify-content: center; align-items: center; + line-height: normal; } diff --git a/Client/src/Pages/Demo/Demo.css b/Client/src/Pages/Demo/Demo.css new file mode 100644 index 000000000..e69de29bb diff --git a/Client/src/Pages/Demo/Demo.jsx b/Client/src/Pages/Demo/Demo.jsx new file mode 100644 index 000000000..d810efd54 --- /dev/null +++ b/Client/src/Pages/Demo/Demo.jsx @@ -0,0 +1,217 @@ +import React from "react"; +import Button from "../../Components/Button"; +import Link from "../../Components/Link"; +import ColoredLabel from "../../Components/Label/ColoredLabel"; +import { + useTheme, + Switch, + Checkbox, + FormControl, + FormLabel, + FormControlLabel, + Radio, + RadioGroup, + Tab, + Tabs, +} from "@mui/material"; +import StatusLabel from "../../Components/Label/StautsLabel"; +import Avatar from "../../Components/Avatar/Avatar"; +import avatarImage from "../../assets/Images/avatar_placeholder.png"; +import { DataGrid } from "@mui/x-data-grid"; + +import { DatePicker } from "@mui/x-date-pickers/DatePicker"; +import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider"; +import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs"; + +const cols = [ + { + field: "name", + headerName: "Name", + renderCell: (params) => { + return ( +
+ +
+ {params.value.firstName} {params.value.lastName} +
+
+ ); + }, + flex: 1, + }, + { + field: "status", + headerName: "Status", + renderCell: (params) => { + return ; + }, + flex: 1, + }, + { field: "role", headerName: "Role", flex: 1 }, + { field: "team", headerName: "Team", flex: 1 }, + { field: "hireDate", headerName: "Hire date", flex: 1 }, +]; + +const rows = ((count) => { + const arr = []; + for (let i = 0; i < count; i++) { + let row = { + id: i, + name: { + avatarImage: i % 2 === 0 ? avatarImage : null, + firstName: "Placeholder Name", + lastName: i.toString(), + }, + status: "Active", + role: "Product Designer", + team: "Marketing", + hireDate: new Date().toLocaleDateString(), + }; + arr.push(row); + } + return arr; +})(100); + +const Demo = () => { + const [radio, setRadio] = React.useState(1); + const [tab, setTab] = React.useState("departments"); + const [date, setDate] = React.useState("Pick a date!"); + + const handleRadio = (event) => { + setRadio(event.target.value); + }; + + const handleTab = (event, newValue) => { + setTab(newValue); + }; + + const handleDate = (newValue) => { + setDate(newValue.toString()); + }; + + const change = (event, type) => { + alert(event.target.checked ? `${type} checked` : `${type} unchecked`); + }; + + const theme = useTheme(); + return ( +
+

Buttons

+
+
+

Disabled Buttons

+
+
+
+ +
+

Labels

+
+ + + + +
+ +

Status Lables

+
+ + + + +
+

Avatar

+
+ + + + +
+

Switches

+
+ change(event, "Switch")} /> + + + +
+

Checkboxes

+
+ change(event, "Checkbox")} /> + + + +
+

Radio

+
+ + Demo Radio + +
+ } label="1" /> + } label="2" /> + } + label="3" + /> + } + label="4" + /> +
+
+
+
+

Table

+
+ +
+

Tabs

+
+ {" "} + + + + + + +
+ +

Date Picker

+
+ + + +

{date}

+
+
+ ); +}; +export default Demo; diff --git a/Client/src/Pages/Home/index.jsx b/Client/src/Pages/Home/index.jsx index 604051995..28d7d6ac4 100644 --- a/Client/src/Pages/Home/index.jsx +++ b/Client/src/Pages/Home/index.jsx @@ -1,69 +1,11 @@ import DropdownTeamMember from "../../Components/DropdownTeamMember"; import "./index.css"; -import Button from "../../Components/Button"; -import Link from "../../Components/Link"; -import ColoredLabel from "../../Components/Label/ColoredLabel"; -import { useTheme } from "@mui/material"; -import StatusLabel from "../../Components/Label/StautsLabel"; -import Avatar from "../../Components/Avatar/Avatar"; -import avatarImage from "../../assets/Images/avatar_placeholder.png"; const Home = () => { - const theme = useTheme(); return ( <>
Home
-
-

Buttons

-
-
-

Disabled Buttons

-
-
-
- -
-

Labels

-
- - - - -
- -

Status Lables

-
- - - - -
-

Avatar

-
- - - - -
-
); };