admin apis and fixes

This commit is contained in:
Moaz Dawalibi 2024-10-22 16:56:30 +03:00
parent e3c93c2330
commit 4675311fce
18 changed files with 114 additions and 107 deletions

View File

@ -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();

View File

@ -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 && (

View File

@ -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>

View File

@ -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={"_"}

View File

@ -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"),
});
};

View File

@ -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}

View File

@ -20,6 +20,7 @@ const App: React.FC = () => {
pagination: true,
...filterState,
});
return <DataTable response={response} useColumns={useColumns} />;
};

View File

@ -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)}

View File

@ -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;
};
};

View File

@ -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;

View File

@ -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>

View File

@ -31,6 +31,7 @@ const App: React.FC = () => {
});
const { data, isLoading } = useGetAllAbility();
const AllAbilityData = data?.data ?? [];
const currentData = response?.data?.data?.abilities ?? [];

View File

@ -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] = {};
}

View File

@ -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,

View File

@ -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);

View File

@ -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",
}

View File

@ -563,7 +563,8 @@
"reseller":"البائعين",
"activation_date":"تاريخ التنشيط",
"expiration_date":"تاريخ الالغاء",
"package":"حزمة"
"package":"حزمة",
"contact_number":"رقم الهاتف"
},
"select": {
"enums": {

View File

@ -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
}