admin apis and fixes
This commit is contained in:
parent
e3c93c2330
commit
4675311fce
|
|
@ -15,6 +15,7 @@ const DataTable: React.FC<DataTableProps> = ({
|
|||
...props
|
||||
}) => {
|
||||
const data: any[] = response?.data?.data || [];
|
||||
|
||||
const columns = useColumns();
|
||||
const { pagination, handlePageChange } = usePagination(response?.data);
|
||||
const [t] = useTranslation();
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
import { useTranslation } from "react-i18next";
|
||||
import useSetPageTitle from "../../../../Hooks/useSetPageTitle";
|
||||
import PageHeader from "../../../../Layout/Dashboard/PageHeader";
|
||||
import { Suspense } from "react";
|
||||
import { Suspense, useEffect } from "react";
|
||||
import { Spin } from "antd";
|
||||
import { ModalEnum } from "../../../../enums/Model";
|
||||
import { canAddReSeller } from "../../../../utils/hasAbilityFn";
|
||||
import PersonalDetailsForm from "../Form/PersonalDetailsForm";
|
||||
import { Formik, Form } from "formik";
|
||||
import { getInitialValues, getValidationSchema } from "../Form/formUtils";
|
||||
|
|
@ -12,15 +10,27 @@ import TitleDetailsForm from "../Form/TitleDetailsForm";
|
|||
import AttachmentForm from "../Form/AttachmentForm";
|
||||
import { useAddManager } from "../../../../api/manager";
|
||||
import { QueryStatusEnum } from "../../../../enums/QueryStatus";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
|
||||
const TableHeader = () => {
|
||||
const [t] = useTranslation();
|
||||
useSetPageTitle(t(`page_header.add_reseller`));
|
||||
const Navigate = useNavigate();
|
||||
const {mutate,status } = useAddManager();
|
||||
const handelSubmit = (values: any) => {
|
||||
console.log(values, "values");
|
||||
mutate({...values});
|
||||
};
|
||||
const handleCancel = () => {
|
||||
Navigate(-1);
|
||||
};
|
||||
console.log(status);
|
||||
|
||||
useEffect(() => {
|
||||
if(status === QueryStatusEnum.SUCCESS){
|
||||
handleCancel();
|
||||
}
|
||||
}, [status])
|
||||
|
||||
return (
|
||||
<div className="TableWithHeader">
|
||||
<Suspense fallback={<Spin />}>
|
||||
|
|
@ -40,7 +50,7 @@ const TableHeader = () => {
|
|||
<TitleDetailsForm />
|
||||
<AttachmentForm />
|
||||
<div className="resellerButton">
|
||||
<button type="button">{t("practical.cancel")}</button>
|
||||
<button type="button" onClick={handleCancel}>{t("practical.cancel")}</button>
|
||||
<button type="submit">
|
||||
{t("practical.add")} {t("models.reseller")}
|
||||
{status === QueryStatusEnum.LOADING && (
|
||||
|
|
|
|||
|
|
@ -1,23 +1,36 @@
|
|||
import { useTranslation } from "react-i18next";
|
||||
import useSetPageTitle from "../../../../Hooks/useSetPageTitle";
|
||||
import PageHeader from "../../../../Layout/Dashboard/PageHeader";
|
||||
import { Suspense } from "react";
|
||||
import { Suspense, useEffect } from "react";
|
||||
import { Spin } from "antd";
|
||||
import { ModalEnum } from "../../../../enums/Model";
|
||||
import { canAddReSeller } from "../../../../utils/hasAbilityFn";
|
||||
import PersonalDetailsForm from "../Form/PersonalDetailsForm";
|
||||
import { Formik, Form } from "formik";
|
||||
import { getInitialValues, getValidationSchema } from "../Form/formUtils";
|
||||
import TitleDetailsForm from "../Form/TitleDetailsForm";
|
||||
import AttachmentForm from "../Form/AttachmentForm";
|
||||
import PasswordDetailsForm from "../Form/PasswordDetailsForm";
|
||||
import { useObjectToEdit } from "../../../../zustand/ObjectToEditState";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
import { useUpdateManager } from "../../../../api/manager";
|
||||
import { QueryStatusEnum } from "../../../../enums/QueryStatus";
|
||||
|
||||
const TableHeader = () => {
|
||||
const [t] = useTranslation();
|
||||
useSetPageTitle(t(`page_header.add_reseller`));
|
||||
const {objectToEdit} = useObjectToEdit();
|
||||
const Navigate = useNavigate();
|
||||
const {mutate,status } = useUpdateManager();
|
||||
const handelSubmit = (values: any) => {
|
||||
console.log(values, "values");
|
||||
mutate({...values});
|
||||
};
|
||||
const handleCancel = () => {
|
||||
Navigate(-1);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
if(status === QueryStatusEnum.SUCCESS){
|
||||
handleCancel();
|
||||
}
|
||||
}, [status])
|
||||
return (
|
||||
<div className="TableWithHeader">
|
||||
<Suspense fallback={<Spin />}>
|
||||
|
|
@ -28,19 +41,24 @@ const TableHeader = () => {
|
|||
/>
|
||||
<div>
|
||||
<Formik
|
||||
initialValues={getInitialValues({})}
|
||||
initialValues={getInitialValues(objectToEdit)}
|
||||
validationSchema={getValidationSchema}
|
||||
onSubmit={handelSubmit}
|
||||
>
|
||||
<Form className="Form_details_container">
|
||||
<PersonalDetailsForm />
|
||||
<PersonalDetailsForm isEdit={true}/>
|
||||
<TitleDetailsForm />
|
||||
<PasswordDetailsForm/>
|
||||
<AttachmentForm />
|
||||
<div className="resellerButton">
|
||||
<button type="button">{t("practical.cancel")}</button>
|
||||
<button type="button" onClick={handleCancel}>{t("practical.cancel")}</button>
|
||||
<button type="submit">
|
||||
{t("practical.save_changes")}
|
||||
{t("practical.add")} {t("models.reseller")}
|
||||
{status === QueryStatusEnum.LOADING && (
|
||||
<span className="Spinier_Div">
|
||||
<Spin />
|
||||
</span>
|
||||
)}
|
||||
</button>
|
||||
</div>
|
||||
</Form>
|
||||
|
|
|
|||
|
|
@ -7,11 +7,11 @@ import { userTypeOptions } from "../../../../config/userTypeOptions";
|
|||
import { statusType } from "../../../../config/statusType";
|
||||
import { useGetRole } from "../../../../api/role";
|
||||
|
||||
const PersonalDetailsForm = () => {
|
||||
const PersonalDetailsForm = ({isEdit= false}:{isEdit?:boolean}) => {
|
||||
const [t] = useTranslation();
|
||||
const {data} = useGetRole();
|
||||
const RoleData = data?.data
|
||||
console.log(RoleData);
|
||||
|
||||
const sex = [
|
||||
{ name: "male", id: "male" },
|
||||
{ name: "female", id: "female" },
|
||||
|
|
@ -24,56 +24,28 @@ const PersonalDetailsForm = () => {
|
|||
</header>
|
||||
<main className="main_form_body">
|
||||
<ValidationField
|
||||
name={"first_name"}
|
||||
name={"username"}
|
||||
placeholder={"_"}
|
||||
label={"first_name"}
|
||||
label={"username"}
|
||||
/>
|
||||
<ValidationField
|
||||
name={"last_name"}
|
||||
name={"name"}
|
||||
placeholder={"_"}
|
||||
// type="Date"
|
||||
label={"last_name"}
|
||||
/>
|
||||
label={"name"}
|
||||
/>
|
||||
<ValidationField
|
||||
name={"status"}
|
||||
name={"contact_number"}
|
||||
placeholder={"_"}
|
||||
label={"Status"}
|
||||
type="Select"
|
||||
option={statusType}
|
||||
label={"contact_number"}
|
||||
type="number"
|
||||
/>
|
||||
|
||||
{!isEdit && (
|
||||
<ValidationField
|
||||
name={"sex"}
|
||||
name={"password"}
|
||||
placeholder={"_"}
|
||||
label={"sex"}
|
||||
type="Select"
|
||||
option={sex}
|
||||
/>
|
||||
<ValidationField
|
||||
name={"phone_number"}
|
||||
placeholder={"_"}
|
||||
label={"Phone Number"}
|
||||
type="text"
|
||||
/>
|
||||
<ValidationField
|
||||
name={"email_address"}
|
||||
placeholder={"_"}
|
||||
label={"email_address"}
|
||||
type="email"
|
||||
/>
|
||||
|
||||
<ValidationField
|
||||
name={"birthday"}
|
||||
placeholder={"_"}
|
||||
label={"birthday"}
|
||||
type="Date"
|
||||
/>
|
||||
<ValidationField
|
||||
name={"join_date"}
|
||||
placeholder={"_"}
|
||||
label={"join_date"}
|
||||
type="Date"
|
||||
label={"password"}
|
||||
/>
|
||||
)}
|
||||
<ValidationField
|
||||
name={"role"}
|
||||
placeholder={"_"}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,25 @@
|
|||
import * as Yup from "yup";
|
||||
|
||||
export const getInitialValues = (objectToEdit: Partial<any>) => {
|
||||
console.log(objectToEdit);
|
||||
|
||||
return {
|
||||
id: objectToEdit?.id ?? null,
|
||||
name: objectToEdit?.name ?? null,
|
||||
username: objectToEdit?.user?.username ?? null,
|
||||
contact_number: objectToEdit?.contact_number ?? null,
|
||||
role_id: objectToEdit?.role_id ?? null,
|
||||
password: objectToEdit?.password ?? null,
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
export const getValidationSchema = () => {
|
||||
// validate input
|
||||
return Yup.object().shape({});
|
||||
return Yup.object().shape({
|
||||
// name: Yup.string().required("validation.required"),
|
||||
// username: Yup.string().required("validation.required"),
|
||||
// contact_number: Yup.mixed().required("validation.required"),
|
||||
// role_id: Yup.mixed().required("validation.required"),
|
||||
});
|
||||
};
|
||||
|
|
|
|||
|
|
@ -10,8 +10,6 @@ import FilterForm from "./Model/FilterForm";
|
|||
import { useDeleteManager } from "../../../api/manager";
|
||||
|
||||
const Table = lazy(() => import("./Table"));
|
||||
const AddModalForm = lazy(() => import("./Model/AddModel"));
|
||||
const EditModalForm = lazy(() => import("./Model/EditModel"));
|
||||
const DeleteModalForm = lazy(
|
||||
() => import("../../../Layout/Dashboard/DeleteModels"),
|
||||
);
|
||||
|
|
@ -40,8 +38,6 @@ const TableHeader = () => {
|
|||
filterTitle="table.managers_list"
|
||||
/>
|
||||
<Table />
|
||||
<AddModalForm />
|
||||
<EditModalForm />
|
||||
<DeleteModalForm
|
||||
deleteMutation={deleteMutation}
|
||||
ModelEnum={ModalEnum?.MANAGER_DELETE}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ const App: React.FC = () => {
|
|||
pagination: true,
|
||||
...filterState,
|
||||
});
|
||||
|
||||
|
||||
return <DataTable response={response} useColumns={useColumns} />;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import {
|
|||
} from "../../../utils/hasAbilityFn";
|
||||
import ActionButtons from "../../../Components/Table/ActionButtons";
|
||||
import { Manager } from "../../../types/Manager";
|
||||
import { ABILITIES_ENUM } from "../../../enums/abilities";
|
||||
|
||||
export const useColumns = () => {
|
||||
const { handel_open_model } = useModalHandler();
|
||||
|
|
@ -23,7 +24,7 @@ export const useColumns = () => {
|
|||
const navigate = useNavigate();
|
||||
|
||||
const handelShow = (record: Manager) => {
|
||||
navigate(`${record?.user_id}`);
|
||||
navigate(`${record?.id}`);
|
||||
};
|
||||
|
||||
const handelDelete = (data: Manager) => {
|
||||
|
|
@ -31,9 +32,10 @@ export const useColumns = () => {
|
|||
handel_open_model(ModalEnum?.MANAGER_DELETE);
|
||||
};
|
||||
|
||||
const handleEdit = (record: Student) => {
|
||||
const handleEdit = (record: Manager) => {
|
||||
setObjectToEdit(record);
|
||||
handel_open_model(ModalEnum?.MANAGER_EDIT);
|
||||
navigate(`/${ABILITIES_ENUM?.MANAGERS}/${record?.id}/edit`)
|
||||
|
||||
};
|
||||
const [t] = useTranslation();
|
||||
|
||||
|
|
@ -43,28 +45,28 @@ export const useColumns = () => {
|
|||
dataIndex: "id",
|
||||
key: "id",
|
||||
align: "center",
|
||||
render: (_text, record) => record?.user_id,
|
||||
render: (_text, record) => record?.id,
|
||||
},
|
||||
{
|
||||
title: `${t("columns.first_name")}`,
|
||||
dataIndex: "first_name",
|
||||
key: "first_name",
|
||||
title: `${t("columns.name")}`,
|
||||
dataIndex: "name",
|
||||
key: "name",
|
||||
align: "center",
|
||||
render: (_text, record) => record?.first_name,
|
||||
render: (_text, record) => record?.name,
|
||||
},
|
||||
{
|
||||
title: `${t("columns.last_name")}`,
|
||||
dataIndex: "last_name",
|
||||
key: "last_name",
|
||||
title: `${t("columns.username")}`,
|
||||
dataIndex: "username",
|
||||
key: "username",
|
||||
align: "center",
|
||||
render: (_text, record) => record?.last_name,
|
||||
render: (_text, record) => record?.user.username ,
|
||||
},
|
||||
{
|
||||
title: `${t("columns.sex")}`,
|
||||
dataIndex: "sex",
|
||||
key: "sex",
|
||||
title: `${t("columns.phone_number")}`,
|
||||
dataIndex: "contact_number",
|
||||
key: "contact_number",
|
||||
align: "center",
|
||||
render: (_text, record) => record?.sex,
|
||||
render: (_text, record) => record?.contact_number,
|
||||
},
|
||||
|
||||
{
|
||||
|
|
@ -77,7 +79,7 @@ export const useColumns = () => {
|
|||
<ActionButtons
|
||||
canDelete={canDeleteManager}
|
||||
canEdit={canEditManager}
|
||||
canShow={canShowManager}
|
||||
// canShow={canShowManager}
|
||||
index={index}
|
||||
onDelete={() => handelDelete(record)}
|
||||
onEdit={() => handleEdit(record)}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,8 @@
|
|||
export const formatAbilityData = (Data: any[]) => {
|
||||
const newArray: Array<{ name: any; [key: string]: boolean }> = [];
|
||||
console.log(Data, "Data");
|
||||
|
||||
for (let i = 0; i < Data.length; i++) {
|
||||
const currentObject = Data?.[i];
|
||||
console.log(currentObject);
|
||||
const newObjectShape = {
|
||||
name: currentObject?.name,
|
||||
delete: typeof currentObject?.delete === "boolean" ? false : "disabled",
|
||||
|
|
@ -12,10 +11,9 @@ export const formatAbilityData = (Data: any[]) => {
|
|||
store: typeof currentObject?.store === "boolean" ? false : "disabled",
|
||||
update: typeof currentObject?.update === "boolean" ? false : "disabled",
|
||||
} as any;
|
||||
console.log(newObjectShape);
|
||||
|
||||
newArray.push(newObjectShape);
|
||||
}
|
||||
|
||||
return newArray;
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,11 +1,12 @@
|
|||
export const transformPermissions = (Data: string[]) => {
|
||||
const newArray: Array<{ name: any; [key: string]: boolean }> = [];
|
||||
const hashMap = new Map<string, number>();
|
||||
|
||||
|
||||
for (let i = 0; i < Data.length; i++) {
|
||||
const [permission, value] = Data[i].split("::");
|
||||
const [permission, value] = Data[i].split("::");
|
||||
const existingIndex = hashMap.get(permission);
|
||||
|
||||
// console.log(hashMap);
|
||||
|
||||
if (existingIndex !== undefined) {
|
||||
if (value) {
|
||||
newArray[existingIndex][value] = true;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import { lazy, Suspense } from "react";
|
|||
import { Spin } from "antd";
|
||||
import useSetPageTitle from "../../../../Hooks/useSetPageTitle";
|
||||
import PageHeader from "../../../../Layout/Dashboard/PageHeader";
|
||||
import FilterLayout from "../../../../Layout/Dashboard/FilterLayout";
|
||||
const Table = lazy(() => import("./Table"));
|
||||
|
||||
const TableHeader = () => {
|
||||
|
|
@ -22,12 +21,6 @@ const TableHeader = () => {
|
|||
pageTitle="role"
|
||||
addModal={false}
|
||||
/>
|
||||
{/* <FilterLayout
|
||||
sub_children={""}
|
||||
filterTitle="page_header.permissions"
|
||||
haveFilter={false}
|
||||
/> */}
|
||||
|
||||
<Table />
|
||||
</Suspense>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ const App: React.FC = () => {
|
|||
});
|
||||
const { data, isLoading } = useGetAllAbility();
|
||||
const AllAbilityData = data?.data ?? [];
|
||||
|
||||
const currentData = response?.data?.data?.abilities ?? [];
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -6,9 +6,12 @@ import { useFormikContext } from "formik";
|
|||
export const useColumns = () => {
|
||||
const [t] = useTranslation();
|
||||
const {values,setValues} = useFormikContext<any>()
|
||||
console.log(values);
|
||||
|
||||
const onChange = (type:any,index:any) => {
|
||||
const cloneValue = JSON.parse(JSON.stringify(values))
|
||||
console.log(cloneValue);
|
||||
|
||||
if (!cloneValue[index]) {
|
||||
cloneValue[index] = {};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -375,7 +375,7 @@ export const CrudRoute: TCrudRoute[] = [
|
|||
{
|
||||
header: "page_header.edit_manager",
|
||||
element: <EditManager />,
|
||||
path: `/${ABILITIES_ENUM?.MANAGERS}/edit`,
|
||||
path: `/${ABILITIES_ENUM?.MANAGERS}/:${ParamsEnum?.Manager_ID}/edit`,
|
||||
abilities: ABILITIES_ENUM?.MANAGERS,
|
||||
abilities_value: ABILITIES_VALUES_ENUM.INDEX,
|
||||
prevPath: 0,
|
||||
|
|
|
|||
|
|
@ -4,15 +4,13 @@ import useGetQuery from "./helper/useGetQuery";
|
|||
import useUpdateMutation from "./helper/useUpdateMutation";
|
||||
|
||||
const API = {
|
||||
GET: "/manager",
|
||||
ADD: "/manager",
|
||||
DELETE: "/manager",
|
||||
UPDATE: "/manager",
|
||||
MOVE: "/manager/moveManagers",
|
||||
IMPORT: "/manager/importManagers",
|
||||
GET: "/admin",
|
||||
ADD: "/admin",
|
||||
DELETE: "/admin",
|
||||
UPDATE: "/admin",
|
||||
};
|
||||
|
||||
const KEY = "manager";
|
||||
const KEY = "ADMIN";
|
||||
|
||||
export const useGetAllManager = (params?: any, options?: any) =>
|
||||
useGetQuery(KEY, API.GET, params);
|
||||
|
|
@ -26,6 +24,3 @@ export const useUpdateManager = (params?: any) =>
|
|||
|
||||
export const useDeleteManager = (params?: any) =>
|
||||
useDeleteMutation(KEY, API.DELETE);
|
||||
|
||||
export const useMoveManager = () => useAddMutation(KEY, API.MOVE);
|
||||
export const useImportManager = () => useAddMutation(KEY, API.IMPORT);
|
||||
|
|
|
|||
|
|
@ -14,5 +14,8 @@ export enum ParamsEnum {
|
|||
RE_SELLER_ID = "re_seller_id",
|
||||
ROLE_ID = "role_id",
|
||||
CITY_ID = "city_id",
|
||||
Collection_ID = "collection_id"
|
||||
Collection_ID = "collection_id",
|
||||
Manager_ID = "manager_id",
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -563,7 +563,8 @@
|
|||
"reseller":"البائعين",
|
||||
"activation_date":"تاريخ التنشيط",
|
||||
"expiration_date":"تاريخ الالغاء",
|
||||
"package":"حزمة"
|
||||
"package":"حزمة",
|
||||
"contact_number":"رقم الهاتف"
|
||||
},
|
||||
"select": {
|
||||
"enums": {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { DateType } from "./App";
|
||||
|
||||
export interface Manager {
|
||||
first_name: string; // The first name of the user
|
||||
name: string; // The first name of the user
|
||||
last_name: string; // The last name of the user
|
||||
city: string | null; // The city of the user, can be null
|
||||
sex: string; // The sex of the user, using a union type for possible values
|
||||
|
|
@ -10,5 +10,5 @@ export interface Manager {
|
|||
card: string | null; // The card information, can be null
|
||||
birthday: DateType; // The birthday of the user, can be null
|
||||
grade_id: number | string; // The ID of the user's grade
|
||||
user_id: number; // The unique ID of the user
|
||||
id: number; // The unique ID of the user
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user