accept pager

This commit is contained in:
hamid zarghami
2025-12-10 16:04:50 +03:30
parent e1f6499ba0
commit 6b2d0d149d
2 changed files with 41 additions and 52 deletions
+9
View File
@@ -9,6 +9,7 @@ import type { RowDataType } from '@/components/types/TableTypes'
import { useGetPagers } from './hooks/usePagerData' import { useGetPagers } from './hooks/usePagerData'
import PagerDetailModal from './components/PagerDetailModal' import PagerDetailModal from './components/PagerDetailModal'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { PagerStatus } from './enum/Enum'
const PagersList: FC = () => { const PagersList: FC = () => {
const { t } = useTranslation('global') const { t } = useTranslation('global')
@@ -56,6 +57,13 @@ const PagersList: FC = () => {
const columns = getPagerTableColumns({ onViewDetails: handleViewDetails, t }) const columns = getPagerTableColumns({ onViewDetails: handleViewDetails, t })
const filterFields = usePagerFiltersFields() const filterFields = usePagerFiltersFields()
const getRowClassName = (item: Pager & RowDataType) => {
if (item.status !== PagerStatus.Pending) {
return 'opacity-30'
}
return ''
}
return ( return (
<div className='mt-5'> <div className='mt-5'>
<div className='flex justify-between items-center'> <div className='flex justify-between items-center'>
@@ -75,6 +83,7 @@ const PagersList: FC = () => {
columns={columns} columns={columns}
data={paginatedPagers as (Pager & RowDataType)[]} data={paginatedPagers as (Pager & RowDataType)[]}
isloading={isLoading} isloading={isLoading}
rowClassName={getRowClassName}
pagination={{ pagination={{
currentPage, currentPage,
totalPages: totalPagesCount, totalPages: totalPagesCount,
+20 -40
View File
@@ -1,14 +1,12 @@
import { type FC, useState, useEffect } from 'react' import { type FC } from 'react'
import DefaulModal from '@/components/DefaulModal' import DefaulModal from '@/components/DefaulModal'
import type { Pager } from '../types/Types' import type { Pager } from '../types/Types'
import { formatOptionalDate } from '@/helpers/func' import { formatOptionalDate } from '@/helpers/func'
import Status from '@/components/Status' import Status from '@/components/Status'
import Select from '@/components/Select'
import Button from '@/components/Button' import Button from '@/components/Button'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import { useUpdatePagerStatus } from '../hooks/usePagerData' import { useUpdatePagerStatus } from '../hooks/usePagerData'
import { PagerStatus } from '../enum/Enum' import { PagerStatus } from '../enum/Enum'
import type { ItemsSelectType } from '@/components/Select'
interface Props { interface Props {
open: boolean open: boolean
@@ -18,24 +16,10 @@ interface Props {
const PagerDetailModal: FC<Props> = ({ open, close, pager }) => { const PagerDetailModal: FC<Props> = ({ open, close, pager }) => {
const { t } = useTranslation('global') const { t } = useTranslation('global')
const [selectedStatus, setSelectedStatus] = useState<string>('')
const { mutate: updateStatus, isPending } = useUpdatePagerStatus() const { mutate: updateStatus, isPending } = useUpdatePagerStatus()
useEffect(() => {
if (pager) {
setSelectedStatus(pager.status)
}
}, [pager])
if (!pager) return null if (!pager) return null
const statusOptions: ItemsSelectType[] = [
{ value: PagerStatus.Pending, label: t('pager.status.pending') },
{ value: PagerStatus.Acknowledged, label: t('pager.status.acknowledged') },
{ value: PagerStatus.Rejected, label: t('pager.status.rejected') },
{ value: PagerStatus.Completed, label: t('pager.status.completed') },
]
const getStatusVariant = (status: string) => { const getStatusVariant = (status: string) => {
switch (status) { switch (status) {
case PagerStatus.Pending: case PagerStatus.Pending:
@@ -52,14 +36,23 @@ const PagerDetailModal: FC<Props> = ({ open, close, pager }) => {
} }
const getStatusLabel = (status: string) => { const getStatusLabel = (status: string) => {
const option = statusOptions.find(opt => opt.value === status) switch (status) {
return option?.label || status case PagerStatus.Pending:
return t('pager.status.pending')
case PagerStatus.Acknowledged:
return t('pager.status.acknowledged')
case PagerStatus.Rejected:
return t('pager.status.rejected')
case PagerStatus.Completed:
return t('pager.status.completed')
default:
return status
}
} }
const handleSaveStatus = () => { const handleMarkAsCompleted = () => {
if (selectedStatus && selectedStatus !== pager.status) {
updateStatus( updateStatus(
{ id: pager.id, status: selectedStatus as PagerStatus }, { id: pager.id, status: PagerStatus.Completed },
{ {
onSuccess: () => { onSuccess: () => {
close() close()
@@ -67,7 +60,6 @@ const PagerDetailModal: FC<Props> = ({ open, close, pager }) => {
} }
) )
} }
}
const statusVariant = getStatusVariant(pager.status) const statusVariant = getStatusVariant(pager.status)
const statusLabel = getStatusLabel(pager.status) const statusLabel = getStatusLabel(pager.status)
@@ -138,28 +130,16 @@ const PagerDetailModal: FC<Props> = ({ open, close, pager }) => {
</p> </p>
</div> </div>
<div className='border-t border-gray-200 pt-4'> {pager.status === PagerStatus.Pending && (
<label className="text-sm text-gray-500 mb-1 block"> <div className="flex justify-end mt-6 border-t border-gray-200 pt-4">
{t('pager.change_status')}
</label>
<Select
key={pager.id}
items={statusOptions}
defaultValue={selectedStatus}
onChange={(e) => setSelectedStatus(e.target.value)}
className="mt-1"
/>
</div>
<div className="flex justify-end mt-6">
<Button <Button
label={t('pager.save')} label="متوجه شدم"
onClick={handleSaveStatus} onClick={handleMarkAsCompleted}
isloading={isPending} isloading={isPending}
disabled={selectedStatus === pager.status || !selectedStatus}
className="w-fit px-6" className="w-fit px-6"
/> />
</div> </div>
)}
</div> </div>
</DefaulModal> </DefaulModal>
) )