├── public ├── locales │ ├── en │ │ └── translation.json │ └── vi │ │ └── translation.json ├── favicon.png └── index.html ├── src ├── containers │ ├── AdminTemplate │ │ ├── UserDashBoard │ │ │ ├── component │ │ │ │ ├── UserModal │ │ │ │ │ └── style.scss │ │ │ │ └── TableCellList │ │ │ │ │ ├── style.scss │ │ │ │ │ └── index.jsx │ │ │ ├── constants.js │ │ │ └── index.jsx │ │ ├── components │ │ │ ├── AdminFooter │ │ │ │ ├── style.scss │ │ │ │ └── index.jsx │ │ │ ├── Buttons │ │ │ │ ├── style.scss │ │ │ │ └── index.jsx │ │ │ ├── AdminDrawer │ │ │ │ ├── style.scss │ │ │ │ ├── DrawerItems.jsx │ │ │ │ └── index.jsx │ │ │ ├── AdminAppBar │ │ │ │ ├── index.jsx │ │ │ │ └── AccountAvatar │ │ │ │ │ └── index.jsx │ │ │ ├── MuiEnhancedTable │ │ │ │ ├── constants.js │ │ │ │ └── style.scss │ │ │ └── SearchBar │ │ │ │ └── index.jsx │ │ ├── MovieDashBoard │ │ │ ├── style.scss │ │ │ ├── components │ │ │ │ ├── MovieModal │ │ │ │ │ └── style.scss │ │ │ │ └── TableCellList │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── style.scss │ │ │ ├── constants.js │ │ │ ├── index.jsx │ │ │ └── ScheduleModal │ │ │ │ └── index.jsx │ │ └── index.jsx │ ├── HomeTemplate │ │ ├── HomePage │ │ │ ├── style.scss │ │ │ ├── index.jsx │ │ │ ├── CinemaSystem │ │ │ │ ├── MovieSchedule │ │ │ │ │ ├── style.scss │ │ │ │ │ └── index.jsx │ │ │ │ ├── style.scss │ │ │ │ ├── CinemaGroup │ │ │ │ │ └── index.jsx │ │ │ │ └── index.jsx │ │ │ ├── Carousel │ │ │ │ ├── style.scss │ │ │ │ └── index.jsx │ │ │ └── MovieList │ │ │ │ ├── style.scss │ │ │ │ └── index.jsx │ │ ├── TicketBookingPage │ │ │ ├── style.scss │ │ │ ├── SeatSelector │ │ │ │ ├── SeatNote │ │ │ │ │ ├── style.scss │ │ │ │ │ └── index.jsx │ │ │ │ ├── SeatGrid │ │ │ │ │ ├── style.scss │ │ │ │ │ └── index.jsx │ │ │ │ ├── style.scss │ │ │ │ └── index.jsx │ │ │ ├── index.jsx │ │ │ └── TicketBookingCard │ │ │ │ ├── style.scss │ │ │ │ └── index.jsx │ │ ├── ProfilePage │ │ │ ├── TransactionHistory │ │ │ │ ├── style.scss │ │ │ │ └── index.jsx │ │ │ ├── style.scss │ │ │ ├── AccountInfo │ │ │ │ ├── Input │ │ │ │ │ ├── style.scss │ │ │ │ │ └── index.jsx │ │ │ │ └── style.scss │ │ │ └── index.jsx │ │ ├── index.jsx │ │ ├── components │ │ │ ├── Footer │ │ │ │ ├── style.scss │ │ │ │ └── index.jsx │ │ │ └── Navbar │ │ │ │ └── style.scss │ │ └── MovieDetailsPage │ │ │ ├── style.scss │ │ │ └── index.jsx │ ├── AuthTemplate │ │ ├── components │ │ │ ├── Input │ │ │ │ ├── style.scss │ │ │ │ └── index.jsx │ │ │ ├── Footer │ │ │ │ ├── style.scss │ │ │ │ └── index.jsx │ │ │ ├── Background │ │ │ │ ├── index.jsx │ │ │ │ └── style.scss │ │ │ ├── Button │ │ │ │ ├── style.scss │ │ │ │ └── index.jsx │ │ │ ├── Header │ │ │ │ └── index.jsx │ │ │ └── Card │ │ │ │ └── index.jsx │ │ ├── RegisterPage │ │ │ ├── style.scss │ │ │ └── index.jsx │ │ ├── LoginPage │ │ │ ├── style.scss │ │ │ └── index.jsx │ │ └── index.jsx │ └── NotFoundPage │ │ └── style.scss ├── assets │ ├── images │ │ ├── no-img.jpeg │ │ ├── header-logo.png │ │ ├── auth-background.jpg │ │ ├── nauti_heroesim.jpeg │ │ ├── payment_method_pc.png │ │ ├── payment_method_mobile.png │ │ └── index.js │ └── docs-images │ │ ├── finnkino-tech-stack.png │ │ ├── finnkino-detail-mobile.png │ │ ├── finnkino-login-laptop.png │ │ ├── finnkino-booking-laptop.png │ │ ├── finnkino-profile-mobile.png │ │ ├── finnkino-movie-management-laptop.png │ │ └── finnkino-user-management-laptop.png ├── hooks │ ├── index.js │ ├── useScrollToTop.js │ └── useAuth.js ├── components │ ├── GlobalStyles │ │ ├── index.js │ │ └── GlobalStyles.scss │ ├── ReactSlick │ │ ├── MultipleItems.scss │ │ └── MultipleItems.js │ ├── Loader │ │ ├── index.js │ │ └── Loader.scss │ ├── PageLoader │ │ ├── style.scss │ │ └── index.jsx │ ├── Modal │ │ ├── style.scss │ │ └── index.jsx │ ├── Image │ │ └── index.js │ └── MuiPicker │ │ └── index.js ├── constants │ └── index.js ├── api │ ├── index.js │ ├── config │ │ ├── apiConfig.js │ │ └── axiosClient.js │ ├── ticketBookingApi.js │ ├── cinemaApi.js │ ├── movieApi.js │ └── userApi.js ├── store │ ├── constants │ │ ├── userList.js │ │ ├── cinemaSystem.js │ │ ├── userDetails.js │ │ ├── movieBanner.js │ │ ├── movieDetails.js │ │ ├── movieManagement.js │ │ ├── movieList.js │ │ ├── userProfile.js │ │ ├── ticketBooking.js │ │ └── userManagement.js │ ├── index.js │ ├── reducers │ │ ├── userList.js │ │ ├── userDetails.js │ │ ├── cinemaSystem.js │ │ ├── movieBanner.js │ │ ├── movieDetails.js │ │ ├── movieManagement.js │ │ ├── index.js │ │ ├── movieList.js │ │ ├── userManagement.js │ │ ├── userProfile.js │ │ └── ticketBooking.js │ └── actions │ │ ├── userManagement.js │ │ ├── movieBanner.js │ │ ├── cinemaSystem.js │ │ ├── userList.js │ │ ├── movieDetails.js │ │ ├── movieList.js │ │ ├── userDetails.js │ │ ├── userProfile.js │ │ ├── movieManagement.js │ │ └── ticketBooking.js ├── routes │ ├── NotFoundRoute.js │ ├── index.js │ ├── AuthRoutes.js │ ├── AdminRoutes.js │ └── ClientRoutes.js ├── validators │ ├── login.js │ ├── movieScheduleValidator.js │ ├── index.js │ ├── userValidator.js │ ├── register.js │ ├── message │ │ └── index.js │ ├── accountInfoValidator.js │ ├── pattern │ │ └── index.js │ └── movieValidator.js ├── i18n │ └── index.js ├── guard │ └── index.jsx ├── index.js └── App.js ├── .env.development ├── config-overrides.js ├── jsconfig.json ├── .vscode └── settings.json ├── .babelrc ├── .gitignore ├── .prettierrc └── package.json /public/locales/en/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "login": "log in" 3 | } 4 | -------------------------------------------------------------------------------- /public/locales/vi/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "login": "Đăng nhập" 3 | } 4 | -------------------------------------------------------------------------------- /src/containers/AdminTemplate/UserDashBoard/component/UserModal/style.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.env.development: -------------------------------------------------------------------------------- 1 | REACT_APP_BASE_URL = "https://movienew.cybersoft.edu.vn/api/" -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tulna07/finnkino-cinema/HEAD/public/favicon.png -------------------------------------------------------------------------------- /src/containers/HomeTemplate/HomePage/style.scss: -------------------------------------------------------------------------------- 1 | #home-page { 2 | background-color: var(--black); 3 | } 4 | -------------------------------------------------------------------------------- /src/assets/images/no-img.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tulna07/finnkino-cinema/HEAD/src/assets/images/no-img.jpeg -------------------------------------------------------------------------------- /src/assets/images/header-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tulna07/finnkino-cinema/HEAD/src/assets/images/header-logo.png -------------------------------------------------------------------------------- /config-overrides.js: -------------------------------------------------------------------------------- 1 | const { override, useBabelRc } = require("customize-cra"); 2 | 3 | module.exports = override(useBabelRc()); 4 | -------------------------------------------------------------------------------- /src/assets/images/auth-background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tulna07/finnkino-cinema/HEAD/src/assets/images/auth-background.jpg -------------------------------------------------------------------------------- /src/assets/images/nauti_heroesim.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tulna07/finnkino-cinema/HEAD/src/assets/images/nauti_heroesim.jpeg -------------------------------------------------------------------------------- /src/assets/images/payment_method_pc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tulna07/finnkino-cinema/HEAD/src/assets/images/payment_method_pc.png -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "paths": { 5 | "@/*": ["src/*"] 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/assets/images/payment_method_mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tulna07/finnkino-cinema/HEAD/src/assets/images/payment_method_mobile.png -------------------------------------------------------------------------------- /src/assets/docs-images/finnkino-tech-stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tulna07/finnkino-cinema/HEAD/src/assets/docs-images/finnkino-tech-stack.png -------------------------------------------------------------------------------- /src/containers/HomeTemplate/TicketBookingPage/style.scss: -------------------------------------------------------------------------------- 1 | .ticket-booking-page { 2 | background-color: var(--black); 3 | padding: 20px 10px; 4 | } 5 | -------------------------------------------------------------------------------- /src/hooks/index.js: -------------------------------------------------------------------------------- 1 | import useAuth from "./useAuth"; 2 | import useScrollToTop from "./useScrollToTop"; 3 | 4 | export { useAuth, useScrollToTop }; 5 | -------------------------------------------------------------------------------- /src/assets/docs-images/finnkino-detail-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tulna07/finnkino-cinema/HEAD/src/assets/docs-images/finnkino-detail-mobile.png -------------------------------------------------------------------------------- /src/assets/docs-images/finnkino-login-laptop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tulna07/finnkino-cinema/HEAD/src/assets/docs-images/finnkino-login-laptop.png -------------------------------------------------------------------------------- /src/assets/docs-images/finnkino-booking-laptop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tulna07/finnkino-cinema/HEAD/src/assets/docs-images/finnkino-booking-laptop.png -------------------------------------------------------------------------------- /src/assets/docs-images/finnkino-profile-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tulna07/finnkino-cinema/HEAD/src/assets/docs-images/finnkino-profile-mobile.png -------------------------------------------------------------------------------- /src/containers/AuthTemplate/components/Input/style.scss: -------------------------------------------------------------------------------- 1 | .auth-input { 2 | .MuiFormLabel-root, 3 | .MuiInput-input { 4 | font-size: 13px; 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "editor.defaultFormatter": "esbenp.prettier-vscode", 4 | "liveServer.settings.port": 5501 5 | } 6 | -------------------------------------------------------------------------------- /src/containers/AdminTemplate/components/AdminFooter/style.scss: -------------------------------------------------------------------------------- 1 | .admin-footer { 2 | margin: 64px 0 32px; 3 | font-size: 17px; 4 | color: var(--dark-gray); 5 | } 6 | -------------------------------------------------------------------------------- /src/assets/docs-images/finnkino-movie-management-laptop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tulna07/finnkino-cinema/HEAD/src/assets/docs-images/finnkino-movie-management-laptop.png -------------------------------------------------------------------------------- /src/assets/docs-images/finnkino-user-management-laptop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tulna07/finnkino-cinema/HEAD/src/assets/docs-images/finnkino-user-management-laptop.png -------------------------------------------------------------------------------- /src/containers/AuthTemplate/components/Footer/style.scss: -------------------------------------------------------------------------------- 1 | .auth-footer { 2 | margin: 64px 0 32px !important; 3 | font-size: 13px !important; 4 | color: var(--white); 5 | } 6 | -------------------------------------------------------------------------------- /src/components/GlobalStyles/index.js: -------------------------------------------------------------------------------- 1 | import "./GlobalStyles.scss"; 2 | 3 | function GlobalStyles({ children }) { 4 | return children; 5 | } 6 | 7 | export default GlobalStyles; 8 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | [ 4 | "module-resolver", 5 | { 6 | "alias": { 7 | "@": "./src" 8 | } 9 | } 10 | ] 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /src/containers/AdminTemplate/MovieDashBoard/style.scss: -------------------------------------------------------------------------------- 1 | @media (max-width: 739px) { 2 | .movie-dashboard__search { 3 | .search-bar__input { 4 | font-size: 10px; 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/components/ReactSlick/MultipleItems.scss: -------------------------------------------------------------------------------- 1 | .carousel__arrow { 2 | &.carousel__arrow--next { 3 | right: 10%; 4 | } 5 | 6 | &.carousel__arrow--prev { 7 | left: 10%; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/constants/index.js: -------------------------------------------------------------------------------- 1 | export const GROUP_ID = "GP09"; 2 | 3 | export const ROLE = { 4 | ADMIN: "QuanTri", 5 | CLIENT: "KhachHang", 6 | }; 7 | 8 | export const ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 9 | -------------------------------------------------------------------------------- /src/containers/HomeTemplate/ProfilePage/TransactionHistory/style.scss: -------------------------------------------------------------------------------- 1 | .transaction-history { 2 | &__table-head-cell { 3 | padding: { 4 | top: 12px; 5 | bottom: 12px; 6 | } 7 | font-weight: 700; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/containers/HomeTemplate/TicketBookingPage/SeatSelector/SeatNote/style.scss: -------------------------------------------------------------------------------- 1 | .seat-selector__seat-note { 2 | &-box { 3 | width: 13px; 4 | height: 13px; 5 | } 6 | 7 | &-text { 8 | font-size: 13px; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/hooks/useScrollToTop.js: -------------------------------------------------------------------------------- 1 | import { useLayoutEffect } from "react"; 2 | 3 | const useScrollToTop = () => { 4 | useLayoutEffect(() => { 5 | window.scrollTo(0, 0); 6 | }, []); 7 | }; 8 | 9 | export default useScrollToTop; 10 | -------------------------------------------------------------------------------- /src/api/index.js: -------------------------------------------------------------------------------- 1 | import movieApi from "./movieApi"; 2 | import cinemaApi from "./cinemaApi"; 3 | import ticketBookingApi from "./ticketBookingApi"; 4 | import userApi from "./userApi"; 5 | 6 | export { movieApi, cinemaApi, ticketBookingApi, userApi }; 7 | -------------------------------------------------------------------------------- /src/store/constants/userList.js: -------------------------------------------------------------------------------- 1 | export const GET_USER_LIST_REQUEST = "@movieListReducer/GET_USER_LIST_REQUEST "; 2 | export const GET_USER_LIST_SUCCESS = "@movieListReducer/GET_USER_LIST_SUCCESS"; 3 | export const GET_USER_LIST_FAIL = "@movieListReducer/GET_USER_LIST_FAIL"; 4 | -------------------------------------------------------------------------------- /src/containers/AuthTemplate/components/Background/index.jsx: -------------------------------------------------------------------------------- 1 | // Material UI 2 | import { Box } from "@mui/material"; 3 | 4 | // Scss 5 | import "./style.scss"; 6 | 7 | const Background = () => ; 8 | 9 | export default Background; 10 | -------------------------------------------------------------------------------- /src/components/Loader/index.js: -------------------------------------------------------------------------------- 1 | import "./Loader.scss"; 2 | import Box from "@mui/material/Box"; 3 | 4 | const Loader = ({ className = "" }) => ( 5 | 6 |
7 |
8 | ); 9 | 10 | export default Loader; 11 | -------------------------------------------------------------------------------- /src/routes/NotFoundRoute.js: -------------------------------------------------------------------------------- 1 | import { lazy } from "react"; 2 | 3 | // Pages 4 | const NotFoundPage = lazy(() => import("@/containers/NotFoundPage")); 5 | 6 | const NotFoundRoute = { 7 | path: "*", 8 | element: , 9 | }; 10 | 11 | export default NotFoundRoute; 12 | -------------------------------------------------------------------------------- /src/store/constants/cinemaSystem.js: -------------------------------------------------------------------------------- 1 | export const GET_CINEMA_LIST_REQUEST = "@cinemaListReducer/GET_CINEMA_LIST_REQUEST "; 2 | export const GET_CINEMA_LIST_SUCCESS = "@cinemaListReducer/GET_CINEMA_LIST_SUCCESS"; 3 | export const GET_CINEMA_LIST_FAIL = "@cinemaListReducer/GET_CINEMA_LIST_FAIL"; 4 | -------------------------------------------------------------------------------- /src/store/constants/userDetails.js: -------------------------------------------------------------------------------- 1 | export const GET_USER_DETAILS_REQUEST = "@movieListReducer/GET_USER_DETAILS_REQUEST "; 2 | export const GET_USER_DETAILS_SUCCESS = "@movieListReducer/GET_USER_DETAILS_SUCCESS"; 3 | export const GET_USER_DETAILS_FAIL = "@movieListReducer/GET_USER_DETAILS_FAIL"; 4 | -------------------------------------------------------------------------------- /src/store/constants/movieBanner.js: -------------------------------------------------------------------------------- 1 | export const GET_MOVIE_BANNER_REQUEST = "@movieBannerReducer/GET_MOVIE_BANNER_REQUEST"; 2 | export const GET_MOVIE_BANNER_SUCCESS = "@movieBannerReducer/GET_MOVIE_BANNER_SUCCESS"; 3 | export const GET_MOVIE_BANNER_FAIL = "@movieBannerReducer/GET_MOVIE_BANNER_FAIL"; 4 | -------------------------------------------------------------------------------- /src/store/constants/movieDetails.js: -------------------------------------------------------------------------------- 1 | export const GET_MOVIE_DETAILS_REQUEST = "@movieDetailReducer/GET_MOVIE_DETAILS_REQUEST"; 2 | export const GET_MOVIE_DETAILS_SUCCESS = "@movieDetailReducer/GET_MOVIE_DETAILS_SUCCESS"; 3 | export const GET_MOVIE_DETAILS_FAIL = "@movieDetailReducer/GET_MOVIE_DETAILS_FAIL"; 4 | -------------------------------------------------------------------------------- /src/components/PageLoader/style.scss: -------------------------------------------------------------------------------- 1 | .page-loader { 2 | min-width: 200px; 3 | position: fixed; 4 | top: 50%; 5 | left: 50%; 6 | transform: translate(-50%, -50%); 7 | text-align: center; 8 | color: var(--primary); 9 | 10 | .linear-progress { 11 | margin-top: 15px; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/containers/HomeTemplate/ProfilePage/style.scss: -------------------------------------------------------------------------------- 1 | .user-profile-page { 2 | background-color: var(--black); 3 | padding: 20px 10px; 4 | 5 | .tab-user-profile { 6 | color: var(--white) !important; 7 | 8 | &.Mui-selected { 9 | color: var(--primary) !important; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/store/constants/movieManagement.js: -------------------------------------------------------------------------------- 1 | export const GET_MOVIE_MANAGEMENT_REQUEST = "@cinemaListReducer/GET_MOVIE_MANAGEMENT_REQUEST "; 2 | export const GET_MOVIE_MANAGEMENT_SUCCESS = "@cinemaListReducer/GET_MOVIE_MANAGEMENT_SUCCESS"; 3 | export const GET_MOVIE_MANAGEMENT_FAIL = "@cinemaListReducer/GET_MOVIE_MANAGEMENT_FAIL"; 4 | -------------------------------------------------------------------------------- /src/containers/AuthTemplate/RegisterPage/style.scss: -------------------------------------------------------------------------------- 1 | .auth-register-form { 2 | .accept-policies .MuiFormControlLabel-label { 3 | font-size: 13px; 4 | } 5 | } 6 | 7 | .auth-link-to-login { 8 | line-height: 1.43; 9 | letter-spacing: 0.01071em; 10 | font-size: 13px; 11 | a { 12 | color: #1976d2; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/containers/AuthTemplate/components/Button/style.scss: -------------------------------------------------------------------------------- 1 | .auth-button { 2 | padding: 14px; 3 | margin: 15px 0 16px; 4 | background-color: var(--primary); 5 | color: var(--black); 6 | font: { 7 | weight: 700; 8 | size: 15px; 9 | } 10 | 11 | &:hover { 12 | background-color: var(--hover-primary); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/api/config/apiConfig.js: -------------------------------------------------------------------------------- 1 | const apiConfig = { 2 | authToken: 3 | "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5Mb3AiOiJCb290Y2FtcCAyNSIsIkhldEhhblN0cmluZyI6IjE2LzEyLzIwMjIiLCJIZXRIYW5UaW1lIjoiMTY3MTE0ODgwMDAwMCIsIm5iZiI6MTY0MTU3NDgwMCwiZXhwIjoxNjcxMjk2NDAwfQ.cB7cdIfS0TKI1Yx_WRS-tEOt5K5yf3QJCot63SYEOHo", 4 | }; 5 | 6 | export default apiConfig; 7 | -------------------------------------------------------------------------------- /src/containers/AuthTemplate/LoginPage/style.scss: -------------------------------------------------------------------------------- 1 | .auth { 2 | &-login-form { 3 | .remember-login .MuiFormControlLabel-label { 4 | font-size: 13px; 5 | } 6 | } 7 | 8 | &-link-to-register { 9 | line-height: 1.43; 10 | letter-spacing: 0.01071em; 11 | font-size: 13px; 12 | a { 13 | color: #1976d2; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/containers/AdminTemplate/components/Buttons/style.scss: -------------------------------------------------------------------------------- 1 | .modal__submit-btn { 2 | background-color: var(--primary); 3 | color: "var(--dark-gray)"; 4 | 5 | &:hover { 6 | background-color: var(--hover-primary); 7 | opacity: 0.8; 8 | } 9 | } 10 | 11 | @media (max-width: 739px) { 12 | .movie-management__btn-icon { 13 | font-size: 18px; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/validators/login.js: -------------------------------------------------------------------------------- 1 | import * as yup from "yup"; 2 | import pattern from "./pattern"; 3 | import msg from "./message"; 4 | 5 | const loginSchema = yup.object({ 6 | username: yup.string().required(msg.required).matches(pattern.username, msg.username), 7 | password: yup.string().required(msg.required).matches(pattern.password, msg.password), 8 | }); 9 | 10 | export default loginSchema; 11 | -------------------------------------------------------------------------------- /src/containers/AuthTemplate/components/Button/index.jsx: -------------------------------------------------------------------------------- 1 | // Material UI 2 | import { LoadingButton } from "@mui/lab"; 3 | 4 | // Scss 5 | import "./style.scss"; 6 | 7 | const Button = ({ children, ...others }) => ( 8 | 9 | {children} 10 | 11 | ); 12 | 13 | export default Button; 14 | -------------------------------------------------------------------------------- /src/containers/HomeTemplate/index.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Outlet } from "react-router-dom"; 3 | 4 | import Navbar from "./components/Navbar"; 5 | import Footer from "./components/Footer"; 6 | 7 | function HomeTemplate() { 8 | return ( 9 | <> 10 | 11 | 12 |