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 PagerDetailModal from './components/PagerDetailModal'
import { useTranslation } from 'react-i18next'
import { PagerStatus } from './enum/Enum'
const PagersList: FC = () => {
const { t } = useTranslation('global')
@@ -56,6 +57,13 @@ const PagersList: FC = () => {
const columns = getPagerTableColumns({ onViewDetails: handleViewDetails, t })
const filterFields = usePagerFiltersFields()
const getRowClassName = (item: Pager & RowDataType) => {
if (item.status !== PagerStatus.Pending) {
return 'opacity-30'
}
return ''
}
return (
<div className='mt-5'>
<div className='flex justify-between items-center'>
@@ -75,6 +83,7 @@ const PagersList: FC = () => {
columns={columns}
data={paginatedPagers as (Pager & RowDataType)[]}
isloading={isLoading}
rowClassName={getRowClassName}
pagination={{
currentPage,
totalPages: totalPagesCount,
+32 -52
View File
@@ -1,14 +1,12 @@
import { type FC, useState, useEffect } from 'react'
import { type FC } from 'react'
import DefaulModal from '@/components/DefaulModal'
import type { Pager } from '../types/Types'
import { formatOptionalDate } from '@/helpers/func'
import Status from '@/components/Status'
import Select from '@/components/Select'
import Button from '@/components/Button'
import { useTranslation } from 'react-i18next'
import { useUpdatePagerStatus } from '../hooks/usePagerData'
import { PagerStatus } from '../enum/Enum'
import type { ItemsSelectType } from '@/components/Select'
interface Props {
open: boolean
@@ -18,24 +16,10 @@ interface Props {
const PagerDetailModal: FC<Props> = ({ open, close, pager }) => {
const { t } = useTranslation('global')
const [selectedStatus, setSelectedStatus] = useState<string>('')
const { mutate: updateStatus, isPending } = useUpdatePagerStatus()
useEffect(() => {
if (pager) {
setSelectedStatus(pager.status)
}
}, [pager])
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) => {
switch (status) {
case PagerStatus.Pending:
@@ -52,21 +36,29 @@ const PagerDetailModal: FC<Props> = ({ open, close, pager }) => {
}
const getStatusLabel = (status: string) => {
const option = statusOptions.find(opt => opt.value === status)
return option?.label || status
switch (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 = () => {
if (selectedStatus && selectedStatus !== pager.status) {
updateStatus(
{ id: pager.id, status: selectedStatus as PagerStatus },
{
onSuccess: () => {
close()
},
}
)
}
const handleMarkAsCompleted = () => {
updateStatus(
{ id: pager.id, status: PagerStatus.Completed },
{
onSuccess: () => {
close()
},
}
)
}
const statusVariant = getStatusVariant(pager.status)
@@ -138,28 +130,16 @@ const PagerDetailModal: FC<Props> = ({ open, close, pager }) => {
</p>
</div>
<div className='border-t border-gray-200 pt-4'>
<label className="text-sm text-gray-500 mb-1 block">
{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
label={t('pager.save')}
onClick={handleSaveStatus}
isloading={isPending}
disabled={selectedStatus === pager.status || !selectedStatus}
className="w-fit px-6"
/>
</div>
{pager.status === PagerStatus.Pending && (
<div className="flex justify-end mt-6 border-t border-gray-200 pt-4">
<Button
label="متوجه شدم"
onClick={handleMarkAsCompleted}
isloading={isPending}
className="w-fit px-6"
/>
</div>
)}
</div>
</DefaulModal>
)