recode and add editor config file

This commit is contained in:
Amirhossein Mahmoodi
2023-07-31 09:34:59 +03:30
parent ba91b97e7c
commit 51b21957b9
108 changed files with 5993 additions and 5770 deletions

View File

@@ -1,14 +1,14 @@
import { createContext } from "react";
import {createContext} from "react";
import useDataTable from "../hooks/useDatatable";
export const DataTableContext = createContext();
export const DataTableProvider = (props) => {
const contextValue = useDataTable();
const contextValue = useDataTable();
return (
<DataTableContext.Provider value={contextValue}>
{props.children}
</DataTableContext.Provider>
);
return (
<DataTableContext.Provider value={contextValue}>
{props.children}
</DataTableContext.Provider>
);
};

View File

@@ -1,15 +1,15 @@
import { createContext, useState } from "react";
import {createContext, useState} from "react";
export const ReloadDataTableContext = createContext();
export const ReloadDataTableProvider = ({ children }) => {
const [reloadDataTable, setReloadDataTable] = useState(false);
export const ReloadDataTableProvider = ({children}) => {
const [reloadDataTable, setReloadDataTable] = useState(false);
return (
<ReloadDataTableContext.Provider
value={{ reloadDataTable, setReloadDataTable }}
>
{children}
</ReloadDataTableContext.Provider>
);
return (
<ReloadDataTableContext.Provider
value={{reloadDataTable, setReloadDataTable}}
>
{children}
</ReloadDataTableContext.Provider>
);
};

View File

@@ -1,99 +1,99 @@
import { FA_DATATABLE_LOCALIZATION } from "&/locales/fa/datatable";
import { useRouter } from "next/router";
import { createContext, useEffect, useState } from "react";
import {FA_DATATABLE_LOCALIZATION} from "&/locales/fa/datatable";
import {useRouter} from "next/router";
import {createContext, useEffect, useState} from "react";
import useUser from "../hooks/useUser";
export const LanguageContext = createContext();
export const LanguageProvider = ({ children }) => {
const router = useRouter();
const languageList = [
{
key: "fa",
dir: "rtl",
name: "فارسی",
fontFamily: `IRANSans, sans-serif`,
tableLocalization: FA_DATATABLE_LOCALIZATION,
}
];
const { user, userChangedLanguage, changeLanguageState } = useUser();
const [languageIsReady, setLanguageIsReady] = useState(false);
const [languageApp, setLanguageApp] = useState();
const [directionApp, setDirectionApp] = useState(
process.env.NEXT_PUBLIC_DEFAULT_DIRECTION
);
useEffect(() => {
const lang = localStorage.getItem("_language");
if (!lang && !languageApp) {
setLanguageApp(process.env.NEXT_PUBLIC_DEFAULT_LANGUAGE);
} else if (lang) {
setLanguageApp(lang);
}
}, []);
useEffect(() => {
if (!languageApp) return;
const lang = localStorage.getItem("_language");
if (!lang) {
localStorage.setItem("_language", languageApp);
} else {
if (languageApp != lang) {
localStorage.setItem("_language", languageApp);
}
}
}, [languageApp]);
useEffect(() => {
if (!router.isReady) return;
if (user.user_language) {
if (user.user_language != languageApp) {
setLanguageApp(user.user_language);
return;
}
}
if (languageApp != router.locale) {
router.replace(
{ pathname: router.pathname, query: router.query },
router.asPath,
export const LanguageProvider = ({children}) => {
const router = useRouter();
const languageList = [
{
locale: languageApp,
key: "fa",
dir: "rtl",
name: "فارسی",
fontFamily: `IRANSans, sans-serif`,
tableLocalization: FA_DATATABLE_LOCALIZATION,
}
);
return;
}
for (const lang of languageList) {
if (languageApp != lang.key) continue;
setDirectionApp(lang.dir);
document.dir = lang.dir;
}
];
const {user, userChangedLanguage, changeLanguageState} = useUser();
const [languageIsReady, setLanguageIsReady] = useState(false);
const [languageApp, setLanguageApp] = useState();
const [directionApp, setDirectionApp] = useState(
process.env.NEXT_PUBLIC_DEFAULT_DIRECTION
);
const timer = setTimeout(() => {
changeLanguageState(false);
setLanguageIsReady(true);
}, 1000);
useEffect(() => {
const lang = localStorage.getItem("_language");
return () => {
clearTimeout(timer);
};
}, [router.locale, router.isReady, userChangedLanguage, languageApp]);
if (!lang && !languageApp) {
setLanguageApp(process.env.NEXT_PUBLIC_DEFAULT_LANGUAGE);
} else if (lang) {
setLanguageApp(lang);
}
}, []);
return (
<LanguageContext.Provider
value={{
languageApp,
setLanguageApp,
directionApp,
languageIsReady,
setLanguageIsReady,
languageList,
}}
>
{children}
</LanguageContext.Provider>
);
useEffect(() => {
if (!languageApp) return;
const lang = localStorage.getItem("_language");
if (!lang) {
localStorage.setItem("_language", languageApp);
} else {
if (languageApp != lang) {
localStorage.setItem("_language", languageApp);
}
}
}, [languageApp]);
useEffect(() => {
if (!router.isReady) return;
if (user.user_language) {
if (user.user_language != languageApp) {
setLanguageApp(user.user_language);
return;
}
}
if (languageApp != router.locale) {
router.replace(
{pathname: router.pathname, query: router.query},
router.asPath,
{
locale: languageApp,
}
);
return;
}
for (const lang of languageList) {
if (languageApp != lang.key) continue;
setDirectionApp(lang.dir);
document.dir = lang.dir;
}
const timer = setTimeout(() => {
changeLanguageState(false);
setLanguageIsReady(true);
}, 1000);
return () => {
clearTimeout(timer);
};
}, [router.locale, router.isReady, userChangedLanguage, languageApp]);
return (
<LanguageContext.Provider
value={{
languageApp,
setLanguageApp,
directionApp,
languageIsReady,
setLanguageIsReady,
languageList,
}}
>
{children}
</LanguageContext.Provider>
);
};

View File

@@ -1,14 +1,14 @@
import LoadingHardPage from "@/core/components/LoadingHardPage";
import { createContext, useState } from "react";
import {createContext, useState} from "react";
export const LoadingContext = createContext();
export const LoadingProvider = ({ children }) => {
const [loadingPage, setLoadingPage] = useState(false);
return (
<LoadingContext.Provider value={{ loadingPage, setLoadingPage }}>
<LoadingHardPage loading={loadingPage} />
{children}
</LoadingContext.Provider>
);
export const LoadingProvider = ({children}) => {
const [loadingPage, setLoadingPage] = useState(false);
return (
<LoadingContext.Provider value={{loadingPage, setLoadingPage}}>
<LoadingHardPage loading={loadingPage}/>
{children}
</LoadingContext.Provider>
);
};

View File

@@ -1,124 +1,122 @@
import {
GET_USER_ROUTE,
SET_LANGUAGE
} from "@/core/data/apiRoutes";
import {GET_USER_ROUTE} from "@/core/data/apiRoutes";
import axios from "axios";
import { createContext, useCallback, useEffect, useReducer } from "react";
import {createContext, useCallback, useEffect, useReducer} from "react";
const initialUser = {
isAuth: false,
userChangedLanguage: false,
token: null,
user: {},
isAuth: false,
userChangedLanguage: false,
token: null,
user: {},
};
const reducer = (state, action) => {
switch (action.type) {
case "CLEAR_USER":
return { ...state, user: {} };
case "CHANGE_USER":
return { ...state, user: action.user };
case "CHANGE_USER_LANGUAGE":
return {
...state,
user: { ...state.user, user_language: action.language },
};
case "CHANGE_AUTH_STATE":
return { ...state, isAuth: action.isAuth };
case "CHANGE_LANGUAGE_STATE":
return { ...state, userChangedLanguage: action.userChangedLanguage };
case "CLEAR_TOKEN":
localStorage.removeItem("_token");
return { ...state, token: null };
case "SET_TOKEN":
localStorage.setItem("_token", action.token);
return { ...state, token: action.token };
default:
return state;
}
switch (action.type) {
case "CLEAR_USER":
return {...state, user: {}};
case "CHANGE_USER":
return {...state, user: action.user};
case "CHANGE_USER_LANGUAGE":
return {
...state,
user: {...state.user, user_language: action.language},
};
case "CHANGE_AUTH_STATE":
return {...state, isAuth: action.isAuth};
case "CHANGE_LANGUAGE_STATE":
return {...state, userChangedLanguage: action.userChangedLanguage};
case "CLEAR_TOKEN":
localStorage.removeItem("_token");
return {...state, token: null};
case "SET_TOKEN":
localStorage.setItem("_token", action.token);
return {...state, token: action.token};
default:
return state;
}
};
export const UserContext = createContext();
export const UserProvider = ({ children }) => {
const [state, dispatch] = useReducer(reducer, initialUser);
export const UserProvider = ({children}) => {
const [state, dispatch] = useReducer(reducer, initialUser);
const clearUser = useCallback(() => {
dispatch({ type: "CLEAR_USER" });
}, []);
const clearUser = useCallback(() => {
dispatch({type: "CLEAR_USER"});
}, []);
const changeUser = useCallback((user) => {
dispatch({ type: "CHANGE_USER", user });
}, []);
const changeUser = useCallback((user) => {
dispatch({type: "CHANGE_USER", user});
}, []);
const changeUserLanguage = useCallback(/* use in multi language app */);
const changeUserLanguage = useCallback(/* use in multi language app */);
const changeAuthState = useCallback((isAuth) => {
dispatch({ type: "CHANGE_AUTH_STATE", isAuth });
}, []);
const changeAuthState = useCallback((isAuth) => {
dispatch({type: "CHANGE_AUTH_STATE", isAuth});
}, []);
const changeLanguageState = useCallback((userChangedLanguage) => {
dispatch({ type: "CHANGE_LANGUAGE_STATE", userChangedLanguage });
}, []);
const changeLanguageState = useCallback((userChangedLanguage) => {
dispatch({type: "CHANGE_LANGUAGE_STATE", userChangedLanguage});
}, []);
const clearToken = useCallback(() => {
dispatch({ type: "CLEAR_TOKEN" });
}, []);
const clearToken = useCallback(() => {
dispatch({type: "CLEAR_TOKEN"});
}, []);
const setToken = useCallback((token) => {
dispatch({ type: "SET_TOKEN", token });
}, []);
const setToken = useCallback((token) => {
dispatch({type: "SET_TOKEN", token});
}, []);
const getUser = useCallback(
(callback = () => {}) => {
axios
.get(GET_USER_ROUTE, {
headers: { authorization: `Bearer ${state.token}` },
})
.then(({ data }) => {
if (typeof callback === "function") callback(data);
const getUser = useCallback(
(callback = () => {
}) => {
axios
.get(GET_USER_ROUTE, {
headers: {authorization: `Bearer ${state.token}`},
})
.then(({data}) => {
if (typeof callback === "function") callback(data);
});
},
[state.token]
);
useEffect(() => {
const localToken = localStorage.getItem("_token");
if (localToken) dispatch({type: "SET_TOKEN", token: localToken});
}, []);
useEffect(() => {
if (!state.token) {
clearUser();
changeAuthState(false);
changeLanguageState(false);
return;
}
getUser((data) => {
changeUser(data);
changeAuthState(true);
changeLanguageState(true);
});
},
[state.token]
);
}, [state.token]);
useEffect(() => {
const localToken = localStorage.getItem("_token");
if (localToken) dispatch({ type: "SET_TOKEN", token: localToken });
}, []);
useEffect(() => {
if (!state.token) {
clearUser();
changeAuthState(false);
changeLanguageState(false);
return;
}
getUser((data) => {
changeUser(data);
changeAuthState(true);
changeLanguageState(true);
});
}, [state.token]);
return (
<UserContext.Provider
value={{
isAuth: state.isAuth,
userChangedLanguage: state.userChangedLanguage,
token: state.token,
user: state.user,
getUser,
clearUser,
changeUser,
changeUserLanguage,
changeAuthState,
changeLanguageState,
clearToken,
setToken,
}}
>
{children}
</UserContext.Provider>
);
return (
<UserContext.Provider
value={{
isAuth: state.isAuth,
userChangedLanguage: state.userChangedLanguage,
token: state.token,
user: state.user,
getUser,
clearUser,
changeUser,
changeUserLanguage,
changeAuthState,
changeLanguageState,
clearToken,
setToken,
}}
>
{children}
</UserContext.Provider>
);
};

View File

@@ -1,113 +1,113 @@
import axios from "axios";
import { useCallback, useContext, useReducer, useState } from "react";
import { ReloadDataTableContext } from "../contexts/ReloadDatatableContext";
import {useCallback, useContext, useReducer, useState} from "react";
import {ReloadDataTableContext} from "../contexts/ReloadDatatableContext";
import useUser from "./useUser";
import Notifications from "@/core/components/notifications";
import useDirection from "./useDirection";
import { useTranslations } from "next-intl";
import {useTranslations} from "next-intl";
const initialValues = {
url: "",
rowID: "",
values: {},
url: "",
rowID: "",
values: {},
};
const reducer = (state, action) => {
switch (action.type) {
case "CONFIRM_DATA":
return {
...state,
url: action.url,
rowID: action.rowID,
};
case "REJECT_DATA":
return {
...state,
url: action.url,
rowID: action.rowID,
values: {},
};
default:
return state;
}
switch (action.type) {
case "CONFIRM_DATA":
return {
...state,
url: action.url,
rowID: action.rowID,
};
case "REJECT_DATA":
return {
...state,
url: action.url,
rowID: action.rowID,
values: {},
};
default:
return state;
}
};
const useDataTable = () => {
const { setReloadDataTable } = useContext(ReloadDataTableContext);
const [state, dispatch] = useReducer(reducer, initialValues);
const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
const [openRejectDialog, setOpenRejectDialog] = useState(false);
const [rowId, setRowId] = useState(null);
const { directionApp } = useDirection();
const t = useTranslations();
const {setReloadDataTable} = useContext(ReloadDataTableContext);
const [state, dispatch] = useReducer(reducer, initialValues);
const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
const [openRejectDialog, setOpenRejectDialog] = useState(false);
const [rowId, setRowId] = useState(null);
const {directionApp} = useDirection();
const t = useTranslations();
const { token } = useUser();
const {token} = useUser();
const confirmData = useCallback(async (url, rowID, values) => {
dispatch({ type: "CONFIRM_DATA", url: url, rowID: rowID, values: values });
axios
.post(`${url}/${rowID}`, values, {
headers: { authorization: `Bearer ${token}` },
})
.then((response) => {
setReloadDataTable(true);
Notifications(directionApp, response, t);
})
.catch((error) => {
Notifications(directionApp, error.response, t);
});
}, []);
const confirmData = useCallback(async (url, rowID, values) => {
dispatch({type: "CONFIRM_DATA", url: url, rowID: rowID, values: values});
axios
.post(`${url}/${rowID}`, values, {
headers: {authorization: `Bearer ${token}`},
})
.then((response) => {
setReloadDataTable(true);
Notifications(directionApp, response, t);
})
.catch((error) => {
Notifications(directionApp, error.response, t);
});
}, []);
const rejectData = useCallback(async (url, rowID, values) => {
dispatch({ type: "REJECT_DATA", url: url, rowID: rowID, values: values });
axios
.post(`${url}/${rowID}`, values, {
headers: { authorization: `Bearer ${token}` },
})
.then((response) => {
setReloadDataTable(true);
Notifications(directionApp, response, t);
})
.catch((error) => {
console.log(error);
Notifications(directionApp, error.response, t);
});
}, []);
const rejectData = useCallback(async (url, rowID, values) => {
dispatch({type: "REJECT_DATA", url: url, rowID: rowID, values: values});
axios
.post(`${url}/${rowID}`, values, {
headers: {authorization: `Bearer ${token}`},
})
.then((response) => {
setReloadDataTable(true);
Notifications(directionApp, response, t);
})
.catch((error) => {
console.log(error);
Notifications(directionApp, error.response, t);
});
}, []);
//Confirm Data
const handleOpenConfirmDialog = (row) => {
setRowId(row.getValue("id"));
setOpenConfirmDialog(true);
};
//Confirm Data
const handleOpenConfirmDialog = (row) => {
setRowId(row.getValue("id"));
setOpenConfirmDialog(true);
};
const handleCloseConfirmDialog = () => {
setOpenConfirmDialog(false);
};
//End Confirm Data
const handleCloseConfirmDialog = () => {
setOpenConfirmDialog(false);
};
//End Confirm Data
// Reject Data
const handleOpenRejectDialog = (row) => {
setRowId(row.getValue("id"));
setOpenRejectDialog(true);
};
// Reject Data
const handleOpenRejectDialog = (row) => {
setRowId(row.getValue("id"));
setOpenRejectDialog(true);
};
const handleCloseRejectDialog = () => {
setOpenRejectDialog(false);
};
// End Reject Data
const handleCloseRejectDialog = () => {
setOpenRejectDialog(false);
};
// End Reject Data
const contextValue = {
handleOpenConfirmDialog,
handleCloseConfirmDialog,
handleOpenRejectDialog,
handleCloseRejectDialog,
rowId,
openConfirmDialog,
openRejectDialog,
rejectData,
confirmData,
};
return contextValue;
const contextValue = {
handleOpenConfirmDialog,
handleCloseConfirmDialog,
handleOpenRejectDialog,
handleCloseRejectDialog,
rowId,
openConfirmDialog,
openRejectDialog,
rejectData,
confirmData,
};
return contextValue;
};
export default useDataTable;

View File

@@ -1,10 +1,10 @@
import { useContext } from "react";
import { LanguageContext } from "../contexts/language";
import {useContext} from "react";
import {LanguageContext} from "../contexts/language";
const useDirection = () => {
const { directionApp } = useContext(LanguageContext);
const {directionApp} = useContext(LanguageContext);
return { directionApp };
return {directionApp};
};
export default useDirection;

View File

@@ -1,28 +1,28 @@
import { useContext } from "react";
import { LanguageContext } from "../contexts/language";
import {useContext} from "react";
import {LanguageContext} from "../contexts/language";
import useUser from "./useUser";
const useLanguage = () => {
const { isAuth, changeUserLanguage } = useUser();
const {
languageApp,
setLanguageApp,
languageIsReady,
setLanguageIsReady,
languageList,
} = useContext(LanguageContext);
const {isAuth, changeUserLanguage} = useUser();
const {
languageApp,
setLanguageApp,
languageIsReady,
setLanguageIsReady,
languageList,
} = useContext(LanguageContext);
const changeLanguage = (lang) => {
if (lang == languageApp) return;
const changeLanguage = (lang) => {
if (lang == languageApp) return;
setLanguageIsReady(false);
setLanguageApp(lang);
if (isAuth) {
changeUserLanguage(lang);
}
};
setLanguageIsReady(false);
setLanguageApp(lang);
if (isAuth) {
changeUserLanguage(lang);
}
};
return { languageApp, changeLanguage, languageIsReady, languageList };
return {languageApp, changeLanguage, languageIsReady, languageList};
};
export default useLanguage;

View File

@@ -1,10 +1,10 @@
import { useContext } from "react";
import { LoadingContext } from "../contexts/loading";
import {useContext} from "react";
import {LoadingContext} from "../contexts/loading";
const useLoading = () => {
const { setLoadingPage } = useContext(LoadingContext);
const {setLoadingPage} = useContext(LoadingContext);
return { setLoadingPage };
return {setLoadingPage};
};
export default useLoading;

View File

@@ -1,34 +1,34 @@
import { useContext } from "react";
import { UserContext } from "../contexts/user";
import {useContext} from "react";
import {UserContext} from "../contexts/user";
const useUser = () => {
const {
isAuth,
userChangedLanguage,
token,
user,
getUser,
clearUser,
changeUser,
changeAuthState,
changeLanguageState,
clearToken,
setToken,
} = useContext(UserContext);
const {
isAuth,
userChangedLanguage,
token,
user,
getUser,
clearUser,
changeUser,
changeAuthState,
changeLanguageState,
clearToken,
setToken,
} = useContext(UserContext);
return {
isAuth,
userChangedLanguage,
token,
user,
getUser,
clearUser,
changeUser,
changeAuthState,
changeLanguageState,
clearToken,
setToken,
};
return {
isAuth,
userChangedLanguage,
token,
user,
getUser,
clearUser,
changeUser,
changeAuthState,
changeLanguageState,
clearToken,
setToken,
};
};
export default useUser;