2025-09-20 23:17:18 +00:00
|
|
|
import { useLocation, useParams, useSearchParams } from 'react-router-dom'
|
2025-09-21 14:42:24 +00:00
|
|
|
import { useState } from 'react'
|
2025-09-20 21:39:53 +00:00
|
|
|
import Container from '@/components/shared/Container'
|
2025-05-06 06:45:49 +00:00
|
|
|
import Grid from './Grid'
|
2025-09-20 23:17:18 +00:00
|
|
|
import { FaList, FaTh, FaUser } from 'react-icons/fa'
|
2025-09-20 21:39:53 +00:00
|
|
|
import { useStoreState } from '@/store/store'
|
|
|
|
|
import classNames from 'classnames'
|
|
|
|
|
import { useLocalization } from '@/utils/hooks/useLocalization'
|
|
|
|
|
import { GridDto } from '@/proxy/form/models'
|
2025-09-21 14:42:24 +00:00
|
|
|
import Card from './Card'
|
2025-09-20 22:01:15 +00:00
|
|
|
import { Button } from '@/components/ui'
|
2025-09-20 23:17:18 +00:00
|
|
|
import navigationIcon from '@/configs/navigation-icon.config'
|
|
|
|
|
import { navigationTreeToFlat } from '@/utils/navigation'
|
2025-05-06 06:45:49 +00:00
|
|
|
|
2025-09-20 21:39:53 +00:00
|
|
|
const List = () => {
|
2025-05-06 06:45:49 +00:00
|
|
|
const params = useParams()
|
2025-09-20 21:39:53 +00:00
|
|
|
const { translate } = useLocalization()
|
2025-05-06 06:45:49 +00:00
|
|
|
const [searchParams] = useSearchParams()
|
2025-09-20 21:39:53 +00:00
|
|
|
const listFormCode = params?.listFormCode ?? ''
|
|
|
|
|
const [viewMode, setViewMode] = useState<'grid' | 'card'>('grid')
|
|
|
|
|
const mode = useStoreState((state) => state.theme.mode)
|
|
|
|
|
const [gridDto, setGridDto] = useState<GridDto>()
|
2025-09-20 23:17:18 +00:00
|
|
|
const mainMenu = useStoreState((state) => state.abpConfig.menu.mainMenu)
|
|
|
|
|
const location = useLocation()
|
2025-05-06 06:45:49 +00:00
|
|
|
|
2025-09-20 21:39:53 +00:00
|
|
|
if (!listFormCode) return null
|
|
|
|
|
|
2025-09-20 23:17:18 +00:00
|
|
|
const getCurrentMenuIcon = (className = 'w-6 h-6'): JSX.Element => {
|
|
|
|
|
const menus = navigationTreeToFlat(mainMenu)
|
|
|
|
|
const currentMenu = menus.find((menu) => menu.path === location.pathname)
|
|
|
|
|
|
|
|
|
|
if (currentMenu?.icon) {
|
|
|
|
|
const IconComponent = navigationIcon[currentMenu.icon] || FaUser
|
|
|
|
|
return <IconComponent className={className} />
|
|
|
|
|
}
|
|
|
|
|
return <FaUser className={className} />
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-20 21:39:53 +00:00
|
|
|
return (
|
2025-05-06 06:45:49 +00:00
|
|
|
<Container>
|
2025-09-20 21:39:53 +00:00
|
|
|
<div
|
2025-09-21 21:42:21 +00:00
|
|
|
className={classNames('flex items-center border-solid gap-1 pb-1', {
|
2025-09-20 21:39:53 +00:00
|
|
|
'border-gray-100': mode === 'light',
|
|
|
|
|
'border-neutral-700': mode === 'dark',
|
|
|
|
|
})}
|
|
|
|
|
>
|
2025-09-20 23:17:18 +00:00
|
|
|
<div className="flex items-center gap-2">
|
|
|
|
|
{getCurrentMenuIcon('w-6 h-6')}
|
|
|
|
|
<h3>{translate('::' + gridDto?.gridOptions?.title)}</h3>
|
|
|
|
|
</div>
|
2025-09-20 21:39:53 +00:00
|
|
|
|
|
|
|
|
{gridDto?.gridOptions?.description === gridDto?.gridOptions?.title ? (
|
|
|
|
|
<p className="text-gray-600 mr-auto pt-1 ml-2"></p>
|
|
|
|
|
) : (
|
|
|
|
|
<p className="text-gray-600 mr-auto pt-1 ml-2">
|
|
|
|
|
{translate('::' + gridDto?.gridOptions?.description)}
|
|
|
|
|
</p>
|
|
|
|
|
)}
|
|
|
|
|
|
|
|
|
|
<div className="flex gap-1">
|
|
|
|
|
<Button
|
|
|
|
|
size="xs"
|
|
|
|
|
variant={viewMode === 'grid' ? 'solid' : 'default'}
|
|
|
|
|
onClick={() => setViewMode('grid')}
|
|
|
|
|
title="Grid Görünümü"
|
|
|
|
|
>
|
|
|
|
|
<FaList className="w-4 h-4" />
|
|
|
|
|
</Button>
|
|
|
|
|
<Button
|
|
|
|
|
size="xs"
|
|
|
|
|
variant={viewMode === 'card' ? 'solid' : 'default'}
|
|
|
|
|
onClick={() => setViewMode('card')}
|
|
|
|
|
title="Kart Görünümü"
|
|
|
|
|
>
|
|
|
|
|
<FaTh className="w-4 h-4" />
|
|
|
|
|
</Button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
{viewMode === 'grid' ? (
|
|
|
|
|
<Grid
|
|
|
|
|
listFormCode={listFormCode}
|
|
|
|
|
searchParams={searchParams}
|
|
|
|
|
isSubForm={false}
|
|
|
|
|
onGridDtoLoad={setGridDto}
|
|
|
|
|
/>
|
|
|
|
|
) : (
|
2025-09-21 14:42:24 +00:00
|
|
|
<Card listFormCode={listFormCode} searchParams={searchParams} />
|
2025-09-20 21:39:53 +00:00
|
|
|
)}
|
2025-05-06 06:45:49 +00:00
|
|
|
</Container>
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default List
|