Compare commits

...

5 Commits

Author SHA1 Message Date
Moaz Dawalibi
c47b78df76 Merge branch 'dev' of into dev 2024-09-16 12:35:12 +03:00
Moaz Dawalibi
bbf290fee1 fixes 2024-09-16 12:33:53 +03:00
Moaz Dawalibi
a987ec7dad fixes and role page 2024-09-16 12:23:13 +03:00
Moaz Dawalibi
c5c484d5c3 Merge branch 'dev' of https://git.point-dev.net/Karimaldeen/Quiz_dashboard into dev 2024-09-16 09:54:57 +03:00
Moaz Dawalibi
f7d8e62b89 fixes 2024-09-16 09:54:50 +03:00
28 changed files with 475 additions and 119 deletions

View File

@ -1,6 +1,7 @@
import React, { useState, useEffect, useRef } from "react"; import React, { useState, useEffect, useRef } from "react";
import { IoSearch } from "react-icons/io5"; // import { IoSearch } from "react-icons/io5";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { LuSearch } from "react-icons/lu";
interface Option { interface Option {
label: string; label: string;
@ -60,7 +61,7 @@ const SearchFieldWithSelect: React.FC<Props> = ({
return ( return (
<div ref={node} className={`search-field ${isOpen ? "open" : ""}`}> <div ref={node} className={`search-field ${isOpen ? "open" : ""}`}>
<div className="search-header" onClick={toggleDropdown}> <div className="search-header" onClick={toggleDropdown}>
{withIcon && <IoSearch className="search__icon" />} {withIcon && <LuSearch className="search__icon" />}
{/* <p className="search__input_text">{placeholder}</p> */} {/* <p className="search__input_text">{placeholder}</p> */}
<input <input

View File

@ -1,6 +1,5 @@
import React, { useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Divider, Select } from "antd"; import { Select } from "antd";
import { TbReorder } from "react-icons/tb"; import { TbReorder } from "react-icons/tb";
import { useFilterStateState } from "../../zustand/Filter"; import { useFilterStateState } from "../../zustand/Filter";

View File

@ -23,9 +23,7 @@ const NavBarRightSide = () => {
// const translateArray = translateOptions(search_array, t); // const translateArray = translateOptions(search_array, t);
const { handel_open_model } = useModalHandler(); const { handel_open_model } = useModalHandler();
const handleEdit = () => {
handel_open_model(ModalEnum.CHANGE_PASSWORD);
};
return ( return (
<article> <article>
<span className="header_icons"> <span className="header_icons">
@ -40,6 +38,7 @@ const NavBarRightSide = () => {
icon={<CiCirclePlus size={25} />} icon={<CiCirclePlus size={25} />}
/> />
<TooltipComp <TooltipComp
onClick={()=>(Navigate('/notifications'))}
className="NotificationsIcon" className="NotificationsIcon"
note="notification" note="notification"
color="#E0E0E0" color="#E0E0E0"

View File

@ -10,11 +10,13 @@ const TooltipComp = ({
color, color,
icon, icon,
className = "", className = "",
onClick,
}: { }: {
note: string; note: string;
color: string; color: string;
icon: any; icon: any;
className?: string; className?: string;
onClick?:() => void
}) => { }) => {
const [t] = useTranslation(); const [t] = useTranslation();
const { handel_open_model } = useModalHandler(); const { handel_open_model } = useModalHandler();
@ -23,11 +25,12 @@ const TooltipComp = ({
handel_open_model(ModalEnum.CHANGE_PASSWORD); handel_open_model(ModalEnum.CHANGE_PASSWORD);
}; };
return ( return (
<div className={className}> <div className={className} onClick={onClick}>
<Tooltip <Tooltip
placement="top" placement="top"
title={<div onClick={handleEdit}>{t(`header.${note}`)}</div>} title={<div onClick={handleEdit}>{t(`header.${note}`)}</div>}
color={color} color={color}
> >
<div className={`gear `}>{icon}</div> <div className={`gear `}>{icon}</div>
</Tooltip> </Tooltip>

View File

@ -16,13 +16,15 @@ const FilterLayout = ({
sub_children, sub_children,
search_by = "name", search_by = "name",
width = "500px", width = "500px",
haveFilter=true haveFilter = true,
haveOrder = true
}: { }: {
filterTitle: string; filterTitle: string;
sub_children: any; sub_children: any;
search_by?:string search_by?:string;
width?:string width?:string;
haveFilter?:boolean haveFilter?:boolean;
haveOrder?:boolean
}) => { }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const translateArray = translateOptions(search_array, t); const translateArray = translateOptions(search_array, t);
@ -63,7 +65,7 @@ const FilterLayout = ({
</span> </span>
<span> <span>
<OrderBySelect /> {haveOrder && <OrderBySelect />}
</span> </span>
</div> </div>
</div> </div>

View File

@ -1,7 +1,6 @@
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { FaStore } from "react-icons/fa"; import { FaStore } from "react-icons/fa";
import ValidationField from "../../../../Components/ValidationField/ValidationField"; import ValidationField from "../../../../Components/ValidationField/ValidationField";
import { CiEdit } from "react-icons/ci";
import HeaderForm from "./HeaderForm"; import HeaderForm from "./HeaderForm";
const PasswordDetailsForm = () => { const PasswordDetailsForm = () => {

View File

@ -35,7 +35,6 @@ const TableHeader = () => {
} }
const deleteMutation = useDeleteReseller(); const deleteMutation = useDeleteReseller();
return ( return (
<div className="TableWithHeader single_student"> <div className="TableWithHeader single_student">
<Suspense fallback={<Spin />}> <Suspense fallback={<Spin />}>
@ -43,7 +42,7 @@ const TableHeader = () => {
pageTitle="reseller_details" pageTitle="reseller_details"
/> />
<div className="single_student_body"> <div className="single_student_body">
<div className="student_info"> <div className="student_info reseller_info">
<InfoCard <InfoCard
withButton={true} withButton={true}
data={ReSellerParamInfo} data={ReSellerParamInfo}

View File

@ -0,0 +1,33 @@
import React from "react";
import { getInitialValues, getValidationSchema } from "./formUtil";
import { ModalEnum } from "../../../../enums/Model";
import LayoutModel from "../../../../Layout/Dashboard/LayoutModel";
import { QueryStatusEnum } from "../../../../enums/QueryStatus";
import ModelForm from "./ModelForm";
import { useAddRole } from "../../../../api/role";
const AddModel: React.FC = () => {
const { mutate, status } = useAddRole();
const handleSubmit = (values: any) => {
mutate({
...values,
});
};
return (
<>
<LayoutModel
status={status as QueryStatusEnum}
ModelEnum={ModalEnum.ROLE_ADD}
modelTitle="role"
handleSubmit={handleSubmit}
getInitialValues={getInitialValues({})}
getValidationSchema={getValidationSchema}
>
<ModelForm />
</LayoutModel>
</>
);
};
export default AddModel;

View File

@ -0,0 +1,36 @@
import React from "react";
import { getInitialValues, getValidationSchema } from "./formUtil";
import { ModalEnum } from "../../../../enums/Model";
import LayoutModel from "../../../../Layout/Dashboard/LayoutModel";
import ModelForm from "./ModelForm";
import { QueryStatusEnum } from "../../../../enums/QueryStatus";
import { useObjectToEdit } from "../../../../zustand/ObjectToEditState";
import { useUpdateRole } from "../../../../api/role";
const EditModel: React.FC = () => {
const { mutate, status } = useUpdateRole();
const { objectToEdit } = useObjectToEdit((state) => state);
const handleSubmit = (values: any) => {
mutate({
...values,
});
};
return (
<>
<LayoutModel
status={status as QueryStatusEnum}
ModelEnum={ModalEnum.ROLE_EDIT}
modelTitle="role_details"
handleSubmit={handleSubmit}
getInitialValues={getInitialValues(objectToEdit)}
getValidationSchema={getValidationSchema}
isAddModal={false}
>
<ModelForm />
</LayoutModel>
</>
);
};
export default EditModel;

View File

@ -0,0 +1,18 @@
import React from "react";
import ValidationField from "../../../../Components/ValidationField/ValidationField";
import { Col, Row } from "reactstrap";
const FilterForm = () => {
return (
<div>
<Row>
<Col>
<ValidationField placeholder="name" label="name" name="name" />
<ValidationField placeholder="created_at" label="created_at" name="created_at" />
</Col>
</Row>
</div>
);
};
export default FilterForm;

View File

@ -0,0 +1,15 @@
import { Col, Row } from "reactstrap";
import ValidationField from "../../../../Components/ValidationField/ValidationField";
const Form = () => {
return (
<Row className="w-100">
<Col>
<ValidationField placeholder="name" label="name" name="name" />
<ValidationField placeholder="created_at" label="created_at" name="created_at" />
</Col>
</Row>
);
};
export default Form;

View File

@ -0,0 +1,13 @@
import * as Yup from "yup";
export const getInitialValues = (objectToEdit: any): any => {
return {
id: objectToEdit?.id ?? null,
name: objectToEdit?.name ?? null,
};
};
export const getValidationSchema = () => {
return Yup.object().shape({
name: Yup.string().required("validation.required"),
});
};

View File

@ -0,0 +1,52 @@
import { ModalEnum } from "../../../enums/Model";
import { useTranslation } from "react-i18next";
import { lazy, Suspense } from "react";
import { Spin } from "antd";
import { canAddRole, canAddTags } from "../../../utils/hasAbilityFn";
import useSetPageTitle from "../../../Hooks/useSetPageTitle";
import PageHeader from "../../../Layout/Dashboard/PageHeader";
import FilterLayout from "../../../Layout/Dashboard/FilterLayout";
import FilterForm from "./Model/FilterForm";
import { useDeleteRole } from "../../../api/role";
const Table = lazy(() => import("./Table"));
const AddModalForm = lazy(() => import("./Model/AddModel"));
const EditModalForm = lazy(() => import("./Model/EditModel"));
const DeleteModalForm = lazy(
() => import("../../../Layout/Dashboard/DeleteModels"),
);
const TableHeader = () => {
const [t] = useTranslation();
useSetPageTitle([
{name:`${t(`page_header.home`)}`, path:"/"},
{name:`${t(`page_header.role`)}`, path:"role"}
]);
const deleteMutation = useDeleteRole();
return (
<div className="TableWithHeader">
<Suspense fallback={<Spin />}>
<PageHeader
pageTitle="role"
ModelAbility={ModalEnum?.ROLE_ADD}
canAdd={canAddRole}
/>
<FilterLayout
sub_children={<FilterForm />}
filterTitle="sidebar.role"
haveFilter={false}
/>
<Table />
<DeleteModalForm
deleteMutation={deleteMutation}
ModelEnum={ModalEnum?.ROLE_DELETE}
/>
<AddModalForm />
<EditModalForm />
</Suspense>
</div>
);
};
export default TableHeader;

View File

@ -0,0 +1,25 @@
import React from "react";
import { useGetAllTag } from "../../../api/tags";
import DataTable from "../../../Layout/Dashboard/Table/DataTable";
import { useColumns } from "./useTableColumns";
import { useFilterState } from "../../../Components/Utils/Filter/FilterState";
import { useFilterStateState } from "../../../zustand/Filter";
import { useGetAllRole } from "../../../api/role";
const App: React.FC = () => {
const { filterState } = useFilterState();
const { Filter } = useFilterStateState();
const name = Filter?.name ;
const sort_by = Filter?.sort_by ;
const response = useGetAllRole({
pagination: true,
name,
sort_by,
...filterState,
});
return <DataTable response={response} useColumns={useColumns} />;
};
export default App;

View File

@ -0,0 +1,17 @@
import { useColumns } from "./useTableColumns";
import Table from "./Table";
import { FaPlus } from "react-icons/fa";
import AddModalForm from "./Model/AddModel";
import EditModalForm from "./Model/EditModel";
// import DeleteModalForm from "../../";
export {
Table,
useColumns,
AddModalForm,
EditModalForm,
// DeleteModalForm,
FaPlus,
};

View File

@ -0,0 +1,65 @@
import { TableColumnsType } from "antd";
import { ModalEnum } from "../../../enums/Model";
import { useObjectToEdit } from "../../../zustand/ObjectToEditState";
import { useModalState } from "../../../zustand/Modal";
import { useTranslation } from "react-i18next";
import { canDeleteRole,canEditRole } from "../../../utils/hasAbilityFn";
import ActionButtons from "../../../Components/Table/ActionButtons";
import { Role } from "../../../types/App";
export const useColumns = () => {
const [t] = useTranslation();
const { setIsOpen } = useModalState((state) => state);
const { setObjectToEdit } = useObjectToEdit((state) => state);
const handelDelete = (record: any) => {
setObjectToEdit(record);
setIsOpen(ModalEnum?.ROLE_DELETE);
};
const handleEdit = (record: any) => {
setObjectToEdit(record);
setIsOpen(ModalEnum?.ROLE_EDIT);
};
const columns: TableColumnsType<Role> = [
{
title: t("columns.id"),
dataIndex: "id",
key: "id",
align: "center",
},
{
title: t("columns.name"),
dataIndex: "name",
key: "name",
align: "center",
},
{
title: t("columns.created_at"),
dataIndex: "created_at",
key: "created_at",
align: "center",
},
{
title: t("columns.procedure"),
key: "actions",
align: "center",
width: "25vw",
render: (_text, record, index) => {
return (
<ActionButtons
canDelete={canEditRole}
canEdit={canDeleteRole}
index={index}
onDelete={() => handelDelete(record)}
onEdit={() => handleEdit(record)}
/>
);
},
},
];
return columns;
};

View File

@ -1,5 +1,7 @@
import { TCrudRoute, TMenuItem } from "./types/App"; import { TCrudRoute, TMenuItem } from "./types/App";
import { FaCashRegister, FaHome, FaMoneyBill, FaPaperclip, FaSellcast, FaTag, FaUser } from "react-icons/fa"; import { FaCashRegister, FaHome, FaMoneyBill, FaPaperclip, FaSellcast, FaTag, FaUser,FaUserShield } from "react-icons/fa";
import { CiSquareQuestion } from "react-icons/ci";
import { GrGroup } from "react-icons/gr";
import React from "react"; import React from "react";
const Dummy = React.lazy(() => import("./Pages/Home/Dummy")); const Dummy = React.lazy(() => import("./Pages/Home/Dummy"));
@ -36,6 +38,7 @@ const Param = React.lazy(() => import("./Pages/Admin/Param/Page"));
const QuestionBank = React.lazy(() => import("./Pages/Admin/QuestionBank/Page")); const QuestionBank = React.lazy(() => import("./Pages/Admin/QuestionBank/Page"));
const Notifications = React.lazy(() => import("./Pages/Admin/Notifications/Page")); const Notifications = React.lazy(() => import("./Pages/Admin/Notifications/Page"));
const Profile = React.lazy(() => import("./Pages/Admin/Profile/Page")); const Profile = React.lazy(() => import("./Pages/Admin/Profile/Page"));
const Roles = React.lazy(() => import("./Pages/Admin/Roles/Page"));
/// RESELLER /// /// RESELLER ///
const Student_Package = React.lazy( const Student_Package = React.lazy(
@ -95,7 +98,7 @@ export const menuItems: TMenuItem[] = [
{ {
header: "page_header.student", header: "page_header.student",
element: <Student />, element: <Student />,
icon: <MdGrade />, icon: <GrGroup />,
text: "sidebar.student", text: "sidebar.student",
path: `/${ABILITIES_ENUM?.STUDENT}`, path: `/${ABILITIES_ENUM?.STUDENT}`,
abilities: ABILITIES_ENUM?.STUDENT, abilities: ABILITIES_ENUM?.STUDENT,
@ -136,7 +139,7 @@ export const menuItems: TMenuItem[] = [
{ {
header: "page_header.questionBank", header: "page_header.questionBank",
element: <QuestionBank />, element: <QuestionBank />,
icon: <FaSellcast />, icon: <CiSquareQuestion />,
text: "sidebar.questionBank", text: "sidebar.questionBank",
path: `/${ABILITIES_ENUM?.QUESTION}`, path: `/${ABILITIES_ENUM?.QUESTION}`,
abilities: ABILITIES_ENUM?.QUESTION, abilities: ABILITIES_ENUM?.QUESTION,
@ -144,12 +147,12 @@ export const menuItems: TMenuItem[] = [
prevPath: 0, prevPath: 0,
}, },
{ {
header: "page_header.notifications", header: "page_header.roles",
element: <Notifications />, element: <Roles />,
icon: <FaSellcast />, icon: <FaUserShield />,
text: "sidebar.notifications", text: "sidebar.role",
path: `/${ABILITIES_ENUM?.NOTIFICATIONS}`, path: `/${ABILITIES_ENUM?.ROLE}`,
abilities: ABILITIES_ENUM?.NOTIFICATIONS, abilities: ABILITIES_ENUM?.ROLE,
abilities_value: ABILITIES_VALUES_ENUM.INDEX, abilities_value: ABILITIES_VALUES_ENUM.INDEX,
prevPath: 0, prevPath: 0,
}, },
@ -262,7 +265,15 @@ export const CrudRoute: TCrudRoute[] = [
abilities: ABILITIES_ENUM?.PROFILE, abilities: ABILITIES_ENUM?.PROFILE,
abilities_value: ABILITIES_VALUES_ENUM.INDEX, abilities_value: ABILITIES_VALUES_ENUM.INDEX,
prevPath: 0, prevPath: 0,
} },
{
header: "page_header.notifications",
element: <Notifications />,
path: `/${ABILITIES_ENUM?.NOTIFICATIONS}`,
abilities: ABILITIES_ENUM?.NOTIFICATIONS,
abilities_value: ABILITIES_VALUES_ENUM.INDEX,
prevPath: 0,
},
]; ];
export const AppRoutes: Record<string, string> = Object.fromEntries( export const AppRoutes: Record<string, string> = Object.fromEntries(

View File

@ -54,8 +54,8 @@
outline: none; outline: none;
border: none; border: none;
width: 120px; width: 120px;
border-radius: 10px; border-radius: 7px;
padding: 10px; padding: 7px;
font-weight: bold; font-weight: bold;
background: var(--primary); background: var(--primary);
color: var(--white); color: var(--white);

View File

@ -49,7 +49,7 @@
border: none; border: none;
min-width: 120px; min-width: 120px;
border-radius: 6px; border-radius: 6px;
padding: 6px 10px; padding: 9px !important;
font-weight: bold; font-weight: bold;
background: var(--primary); background: var(--primary);
color: var(--white); color: var(--white);

View File

@ -1,10 +1,9 @@
.search-field { .search-field {
position: relative; position: relative;
z-index: 999; z-index: 999;
border-radius: 10px; border-radius: 8px;
// box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.001); width: 280px;
width: 220px; direction: ltr;
// direction: ltr;
color: #6a7287b2; color: #6a7287b2;
} }
.NavBar { .NavBar {
@ -12,9 +11,14 @@
color: var(--white) !important; color: var(--white) !important;
background-color: inherit; background-color: inherit;
border-radius: 8px; border-radius: 8px;
border: 2px solid var(--borderColor); border: 1px solid var(--borderColor);
svg{
font-size: 24px;
}
input { input {
color: #fff !important; color: #fff !important;
text-align: end;
font-size: 16px;
} }
} }
} }
@ -28,7 +32,6 @@
background-color: var(--bg); background-color: var(--bg);
font-weight: bold; font-weight: bold;
border-radius: 10px; border-radius: 10px;
// width: 18vw;
height: 40px; height: 40px;
transition: 0.5s ease-in-out; transition: 0.5s ease-in-out;
} }

View File

@ -1,7 +1,7 @@
.DataTable { .DataTable {
width: 100%; width: 100%;
border-radius: 0 0 10px 10px; border-radius: 0 0 10px 10px;
// box-shadow: 2px 2px 8px 3px rgba(0, 0, 0, 0.1); box-shadow: 2px 2px 8px 3px rgba(0, 0, 0, 0.1);
} }
.ant-table-cell { .ant-table-cell {

View File

@ -1,6 +1,8 @@
.filter_header { .filter_header {
padding: 20px 20px; padding: 20px 20px;
border-radius: 10px 10px 0 0; border-radius: 10px 10px 0 0;
box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.1);
> div { > div {
display: flex; display: flex;
align-items: center; align-items: center;
@ -30,16 +32,18 @@
span { span {
display: flex; display: flex;
align-items: center; align-items: center;
color: #6a7287; color: #6A7287;
.pagination_select, .pagination_select,
.order_by_select, .order_by_select,
.filter_modal_select { .filter_modal_select {
border: 1px solid var(--opacity); border: 1px solid var(--opacity);
border-radius: 10px; border-radius: 10px;
// padding-bottom: 46.5px;
.addition_select_icon { .addition_select_icon {
font-size: 25px; font-size: 25px;
} }
div{
color: #6A7287;
}
} }
p { p {
padding-inline: 10px; padding-inline: 10px;
@ -47,8 +51,11 @@
} }
} }
.search-field { .search-field {
// box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.1);
border: 1px solid rgba(0, 0, 0, 0.1); border: 1px solid rgba(0, 0, 0, 0.1);
.search__input{
width: 90%;
text-align: end ;
}
.search__icon { .search__icon {
color: var(--primary); color: var(--primary);
} }
@ -89,3 +96,15 @@
.model_sub_children{ .model_sub_children{
padding-bottom: 30px; padding-bottom: 30px;
} }
.ant-select-selection-search{
color: #6A7287 !important;
display: none !important;
}
:where(.css-dev-only-do-not-override-oad6qy).ant-select-single.ant-select-lg .ant-select-selector .ant-select-selection-search{
input{
}
}
:where(.css-dev-only-do-not-override-oad6qy).ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input{
}

View File

@ -17,7 +17,11 @@
} }
.filter_header_top { .filter_header_top {
color: #202c4b; h4{
color: var(--secondary);
font-weight:600;
font-size: 18px;
}
} }

View File

@ -120,7 +120,7 @@
.address_card { .address_card {
width: 50%; width: 50%;
margin-block: 0 !important; margin-block: 0 !important;
max-height: 17vw; min-height: 30vh;
} }
.info_card { .info_card {
@ -131,6 +131,35 @@
.student_table { .student_table {
width: 100%; width: 100%;
} }
.reseller_info{
display: flex; flex-wrap: wrap;
.address_card,
.attachments_card,
.info_card{
width: 45%;
div{
span{
font-size: 1.6vw !important;
}
h4{
font-size: 1.8vw;
}
h2{
font-size: 1.6vw !important;
}
h6{
font-size: 1.6vw !important;
}
p{
font-size: 1.6vw !important;
}
}
}
.address_card,
.attachments_card{
max-height: 40vh !important;
}
}
} }
} }
} }

View File

@ -48,6 +48,7 @@
} }
/* pagination */ /* pagination */
.ant-spin-nested-loading ul { .ant-spin-nested-loading ul {
} }
/* Ant tabs tab active */ /* Ant tabs tab active */

View File

@ -12,4 +12,5 @@ export enum ParamsEnum {
QUESTION_ID = "question_id", QUESTION_ID = "question_id",
CHILDREN_QUESTION_ID = "children_question_id", CHILDREN_QUESTION_ID = "children_question_id",
RE_SELLER_ID = "re_seller_id", RE_SELLER_ID = "re_seller_id",
ROLE_ID = "role_id",
} }

View File

@ -122,7 +122,7 @@
"sort_by": "ترتيب حسب", "sort_by": "ترتيب حسب",
"filter": "تصفية", "filter": "تصفية",
"per_page": "صف لكل صفحة", "per_page": "صف لكل صفحة",
"entries": "ادخالات", "entries": "إدخالات",
"personal_information": "المعلومات الشخصية", "personal_information": "المعلومات الشخصية",
"address": "العنوان", "address": "العنوان",
"attachment": "المرفق", "attachment": "المرفق",
@ -135,7 +135,8 @@
"attachments": "المرفقات", "attachments": "المرفقات",
"password": "كلمة المرور", "password": "كلمة المرور",
"edit": "تعديل", "edit": "تعديل",
"change":"تغيير" "change": "تغيير",
"role_list": "قائمة الأدوار"
}, },
"columns": { "columns": {
"id": "الرقم التعريفي", "id": "الرقم التعريفي",
@ -182,7 +183,7 @@
"min_mark_to_pass": "علامة النجاح", "min_mark_to_pass": "علامة النجاح",
"isBase": "سؤال رئيسي", "isBase": "سؤال رئيسي",
"question_options_count": "عدد الخيارات", "question_options_count": "عدد الخيارات",
"procedure": "اجراء", "procedure": "إجراء",
"icon": "الايقونة", "icon": "الايقونة",
"canAnswersBeShuffled": "يمكن خلط الإجابات", "canAnswersBeShuffled": "يمكن خلط الإجابات",
"phone_number": "رقم الهاتف", "phone_number": "رقم الهاتف",
@ -210,7 +211,8 @@
"ID": "ID", "ID": "ID",
"residual": "المتبقي", "residual": "المتبقي",
"date_of_receipt": "تاريخ الاستلام", "date_of_receipt": "تاريخ الاستلام",
"amount":"مبلغ" "amount": "مبلغ",
"created_at": "تم إنشاؤه في"
}, },
"practical": { "practical": {
"to_confirm_deletion_please_re_enter": "لتأكيد الحذف، يرجى إعادة الإدخال", "to_confirm_deletion_please_re_enter": "لتأكيد الحذف، يرجى إعادة الإدخال",
@ -341,7 +343,9 @@
"reseller": "البائعين", "reseller": "البائعين",
"student_package": "حزمة الطالب", "student_package": "حزمة الطالب",
"collection": "تحصيل", "collection": "تحصيل",
"profile":"الملف الشخصي" "profile": "الملف الشخصي",
"role_details": "تفاصيل الأدوار",
"created_at": "تم إنشاؤه في"
}, },
"education_class_actions": { "education_class_actions": {
"Student_Records": "سجلات الطلاب", "Student_Records": "سجلات الطلاب",
@ -464,7 +468,8 @@
"date_of_receipt": "تاريخ الاستلام", "date_of_receipt": "تاريخ الاستلام",
"amount_value": "قيمة المبلغ", "amount_value": "قيمة المبلغ",
"email_address": "عنوان البريد الإلكتروني", "email_address": "عنوان البريد الإلكتروني",
"current_password":"كلمة المرور الحالية" "current_password": "كلمة المرور الحالية",
"created_at": "تم إنشاؤه في"
}, },
"select": { "select": {
"enums": { "enums": {
@ -721,7 +726,6 @@
"admin": "المسؤول", "admin": "المسؤول",
"branchAdmin": "مسؤول الفروع" "branchAdmin": "مسؤول الفروع"
}, },
"array": { "array": {
"Period": { "Period": {
"Today": "اليوم", "Today": "اليوم",
@ -762,7 +766,6 @@
"waiting": "قيد الانتظار", "waiting": "قيد الانتظار",
"done": "انتهى" "done": "انتهى"
}, },
"sidebar": { "sidebar": {
"dashboard": "لوحة القيادة", "dashboard": "لوحة القيادة",
"course": "الصفوف", "course": "الصفوف",
@ -775,7 +778,7 @@
"subject_details": "تفاصيل المادة", "subject_details": "تفاصيل المادة",
"logout": "تسجيل الخروج", "logout": "تسجيل الخروج",
"branch": "الفروع", "branch": "الفروع",
"role": "الادوار", "role": "الأدوار",
"admin": "المسؤولون", "admin": "المسؤولون",
"subject": "المواد", "subject": "المواد",
"tags": "كلمات مفتاحية", "tags": "كلمات مفتاحية",
@ -812,7 +815,7 @@
"teacher": "المعلمون", "teacher": "المعلمون",
"payment": "الدفعات", "payment": "الدفعات",
"branch": "الفروع", "branch": "الفروع",
"role": "الادوار", "role": "الأدوار",
"admin": "المسؤولون", "admin": "المسؤولون",
"note": "ملاحظات", "note": "ملاحظات",
"status": "حالة", "status": "حالة",
@ -844,7 +847,7 @@
"teacher": " المعلمون", "teacher": " المعلمون",
"payment": " الدفعات", "payment": " الدفعات",
"branch": " الفروع", "branch": " الفروع",
"role": " الادوار", "role": " الأدوار",
"student": " قائمة الطلاب ", "student": " قائمة الطلاب ",
"admin": " المسؤولون", "admin": " المسؤولون",
"student_details": "تفاصيل الطالب", "student_details": "تفاصيل الطالب",
@ -877,7 +880,8 @@
"QuestionBank": "بنك الأسئلة", "QuestionBank": "بنك الأسئلة",
"reseller_details": "تفاصيل البائع", "reseller_details": "تفاصيل البائع",
"notifications": "الإشعارات", "notifications": "الإشعارات",
"profile":"الملف الشخصي" "profile": "الملف الشخصي",
"user": "مستخدم"
}, },
"table": { "table": {
"student": "قائمة الطلاب", "student": "قائمة الطلاب",

View File

@ -0,0 +1,8 @@
export type FilterLayout = {
filterTitle: string;
sub_children: any;
search_by?:string
width?:string
haveFilter?:boolean
};