diff --git a/.env b/.env new file mode 100644 index 0000000..eed0cd2 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +VITE_BASE_URL="https://nerd-back.point-dev.net/api/" \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..74afdbd --- /dev/null +++ b/.env.example @@ -0,0 +1 @@ +REACT_APP_BASE_URL= \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index 2935dfa..10d1b07 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -33,7 +33,7 @@ const App = () => { /> {renderRoutesRecursively(menuItems)} - + {CrudRoute.map((route) => { const useAbility = hasAbility(route.abilities, route.abilities_value); if (!RoleByType(route)) { diff --git a/src/Components/Routes/RenderRoutesRecursively.tsx b/src/Components/Routes/RenderRoutesRecursively.tsx index 9769870..2f2aec2 100644 --- a/src/Components/Routes/RenderRoutesRecursively.tsx +++ b/src/Components/Routes/RenderRoutesRecursively.tsx @@ -10,6 +10,7 @@ export const renderRoutesRecursively = (routes: TMenuItem[]) => if (!useAbility) { return false; } + return ( diff --git a/src/Components/Ui/ReportTableIcon.tsx b/src/Components/Ui/ReportTableIcon.tsx new file mode 100644 index 0000000..b192d00 --- /dev/null +++ b/src/Components/Ui/ReportTableIcon.tsx @@ -0,0 +1,22 @@ +import { Tooltip } from 'antd' +import React from 'react' +import { useTranslation } from 'react-i18next'; +import { FaPaperclip } from 'react-icons/fa' + +interface ReportButtonsProps { + editTooltipTitle?: any; + onClick?: () => void; + } + +const ReportTableIcon = ({editTooltipTitle,onClick}:ReportButtonsProps) => { + const {t} = useTranslation(); + return ( + + + + + + ) +} + +export default ReportTableIcon \ No newline at end of file diff --git a/src/Layout/Dashboard/PageHeader.tsx b/src/Layout/Dashboard/PageHeader.tsx index 3340984..2ed927d 100644 --- a/src/Layout/Dashboard/PageHeader.tsx +++ b/src/Layout/Dashboard/PageHeader.tsx @@ -14,7 +14,8 @@ const PageHeader = ({ pageTitle, openModel = true, locationToNavigate, - addModal = true + addModal = true, + modelButtonTitle = "add", }: { canAdd?: any; ModelAbility?: any; @@ -22,6 +23,7 @@ const PageHeader = ({ openModel?: boolean; locationToNavigate?: string | any; addModal?:boolean; + modelButtonTitle?:string }) => { const navigate = useNavigate(); const { handel_open_model } = useModalHandler(); @@ -57,7 +59,7 @@ const PageHeader = ({ className="add_button" > - {t(`practical.add`)} + {t(`practical.${modelButtonTitle}`)} ) :""} diff --git a/src/Pages/Admin/Notifications/AddNotification/Page.tsx b/src/Pages/Admin/Notifications/AddNotification/Page.tsx index 151b82d..f600b15 100644 --- a/src/Pages/Admin/Notifications/AddNotification/Page.tsx +++ b/src/Pages/Admin/Notifications/AddNotification/Page.tsx @@ -32,7 +32,9 @@ const TableHeader = () => { pageTitle="notification" ModelAbility={ModalEnum?.NOTIFICATION_ADD} canAdd={canAddNotification} + modelButtonTitle="add_notification" /> + } filterTitle="table.notification" /> diff --git a/src/Pages/Admin/Notifications/AddNotification/useTableColumns.tsx b/src/Pages/Admin/Notifications/AddNotification/useTableColumns.tsx index d446938..912d28f 100644 --- a/src/Pages/Admin/Notifications/AddNotification/useTableColumns.tsx +++ b/src/Pages/Admin/Notifications/AddNotification/useTableColumns.tsx @@ -40,19 +40,11 @@ export const useColumns = () => { const columns: TableColumnsType = [ { - title: t("columns.id"), - dataIndex: "id", - key: "id", + title: t("columns.created_at"), + dataIndex: "created_at", + key: "created_at", align: "center", - render: (_text, record) => record?.id, - }, - { - title: `${t("columns.body")}`, - dataIndex: "body", - key: "body", - align: "center", - render: (_text, record) => record?.body, - ellipsis:true + render: (_text, record) => record?.created_at, }, { title: `${t("columns.seen")}`, @@ -62,6 +54,14 @@ export const useColumns = () => { render: (_text, record) => record?.seen, ellipsis:true }, + { + title: `${t("columns.title")}`, + dataIndex: "title", + key: "title", + align: "center", + render: (_text, record) => record?.title, + ellipsis:true + }, { title: `${t("columns.notifiable_type")}`, dataIndex: "notifiable_type", @@ -71,23 +71,12 @@ export const useColumns = () => { ellipsis:true }, { - - title: t("columns.procedure"), - key: "actions", + title: `${t("columns.body")}`, + dataIndex: "body", + key: "body", align: "center", - width: "25vw", - render: (_text, record, index) => { - return ( - handelDelete(record)} - onEdit={() => handleEdit(record)} - onShow={() => handelShow(record)} - /> - ); - }, + render: (_text, record) => record?.body, + // ellipsis:true }, ]; diff --git a/src/Pages/Admin/Notifications/Card.tsx b/src/Pages/Admin/Notifications/Card.tsx index e936b14..a0b0c03 100644 --- a/src/Pages/Admin/Notifications/Card.tsx +++ b/src/Pages/Admin/Notifications/Card.tsx @@ -1,11 +1,7 @@ -import TrashButton from "../../../Components/Ui/TrashButton" import { notifications } from "../../../types/Notifications" -const Card = ({name,date,image,id,pop,setPop}:notifications) => { - const handleDeleteOne = () => { - setPop(pop?.filter((item:any)=> item?.id !== id)) - } +const Card = ({name,date,image,id}:notifications) => { return (
@@ -16,12 +12,6 @@ const Card = ({name,date,image,id,pop,setPop}:notifications) => {

{date}

-
- -
) } diff --git a/src/Pages/Admin/Notifications/Page.tsx b/src/Pages/Admin/Notifications/Page.tsx index 8fb0b22..814d756 100644 --- a/src/Pages/Admin/Notifications/Page.tsx +++ b/src/Pages/Admin/Notifications/Page.tsx @@ -1,48 +1,32 @@ import { Divider } from 'antd'; import { useTranslation } from 'react-i18next' -import { NotificationArray } from './NotificationArray'; import { notifications } from '../../../types/Notifications'; import Card from './Card'; -import TrashButton from '../../../Components/Ui/TrashButton'; -import { useEffect, useState } from 'react'; +import { useGetAllNotificationMine } from '../../../api/notification'; const Page = () => { const {t} = useTranslation(); - const [pop, setPop] = useState(NotificationArray); - const [isEmpty, setIsEmpty] = useState(pop.length < 1 ? true : false); + const {data} = useGetAllNotificationMine(); + console.log(data); - const handleDeleteAll = () => { - setPop([]) - } - - useEffect(()=>{ - if(pop.length < 1){ - setIsEmpty(true); - }else{ - setIsEmpty(false); - } - },[pop]) return (

{t("header.notifications")}

- +
{ - isEmpty === false + !!data?.data ?
- {pop?.map((not:notifications)=>( + {data?.data?.map((not:notifications)=>( + date={not?.date} + image={not?.image} + /> ))}
: diff --git a/src/Pages/Admin/QuestionBank/useTableColumns.tsx b/src/Pages/Admin/QuestionBank/useTableColumns.tsx index fdadc72..12b9c7e 100644 --- a/src/Pages/Admin/QuestionBank/useTableColumns.tsx +++ b/src/Pages/Admin/QuestionBank/useTableColumns.tsx @@ -12,6 +12,9 @@ import { } from "../../../utils/hasAbilityFn"; import ActionButtons from "../../../Components/Table/ActionButtons"; import { useFilterStateState } from "../../../zustand/Filter"; +import { FaPaperclip } from "react-icons/fa"; +import { ParamsEnum } from "../../../enums/params"; +import ReportTableIcon from "../../../Components/Ui/ReportTableIcon"; export const useColumns = () => { const { setObjectToEdit } = useObjectToEdit((state) => state); @@ -24,6 +27,13 @@ export const useColumns = () => { setIsOpen(ModalEnum?.QUESTION_DELETE); }; + + const handleNavigateToReport = (record: any) => { + setFilter({}) + // console.log(record); + + navigate(`/report/${record?.report?.id}`); + }; const handleEdit = (record: any) => { console.log(record,"record"); const lesson = record?.lessons?.[0] ; @@ -170,8 +180,9 @@ export const useColumns = () => { key: "actions", align: "center", - render: (_text, record, index) => { + render: ({_text, record, index}:any) => { return ( +
{ onDelete={() => handelDelete(record)} onEdit={() => handleEdit(record)} /> + { + !!record?.report?.content + ? handleNavigateToReport(record)}/> + : "" + } +
); }, }, diff --git a/src/Pages/Admin/Report/Show/ReportInfo.tsx b/src/Pages/Admin/Report/Show/ReportInfo.tsx index 463195f..a15d9c5 100644 --- a/src/Pages/Admin/Report/Show/ReportInfo.tsx +++ b/src/Pages/Admin/Report/Show/ReportInfo.tsx @@ -10,6 +10,7 @@ const ReportInfo = () => { const {data} = useGetAllReport({ show:report_id }) + const {t} = useTranslation(); return ( diff --git a/src/Pages/Admin/Report/Table.tsx b/src/Pages/Admin/Report/Table.tsx index b7c5d7b..d0c365f 100644 --- a/src/Pages/Admin/Report/Table.tsx +++ b/src/Pages/Admin/Report/Table.tsx @@ -4,19 +4,23 @@ import { useColumns } from "./useTableColumns"; import { useGetAllReport } from "../../../api/report"; import { useFilterState } from "../../../Components/Utils/Filter/FilterState"; import { useFilterStateState } from "../../../zustand/Filter"; +import { useParams } from "react-router-dom"; +import { ParamsEnum } from "../../../enums/params"; const App: React.FC = () => { const { filterState } = useFilterState(); const { Filter } = useFilterStateState(); const name = Filter?.name ; const sort_by = Filter?.sort_by ; - + const { question_id } = useParams(); + const response = useGetAllReport({ name, sort_by, pagination: true, ...filterState, + question_id:question_id }); return ; diff --git a/src/Pages/Admin/Reseller/Add/Page.tsx b/src/Pages/Admin/Reseller/Add/Page.tsx index 88e066a..50748cb 100644 --- a/src/Pages/Admin/Reseller/Add/Page.tsx +++ b/src/Pages/Admin/Reseller/Add/Page.tsx @@ -49,14 +49,14 @@ const TableHeader = () => { validationSchema={getValidationSchema} onSubmit={handleSubmit} > - {({ resetForm }) => ( + {({ dirty }) => (
- -