erp-platform/ui/src/views/Home.tsx

120 lines
3.4 KiB
TypeScript
Raw Normal View History

2025-05-06 06:45:49 +00:00
import { useLocalization } from '@/utils/hooks/useLocalization'
import { Helmet } from 'react-helmet'
import { useCallback, useEffect, useState } from 'react'
import WidgetFilter from './dashboard/WidgetFilter'
import { getDashboardWidgetList } from '@/proxy/dashboard/widgets'
import dayjs from 'dayjs'
import { WidgetsData } from './dashboard/models'
import Widgets from './dashboard/Widgets'
import WidgetProgress from './dashboard/WidgetProgress'
import WidgetBarChart from './dashboard/WidgetBarChart'
const Home = () => {
const { translate } = useLocalization()
const [loading, setLoading] = useState(false)
const [widgetData, setWidgetData] = useState<WidgetsData[]>()
const [startDate, setStartDate] = useState<number>(dayjs().subtract(30, 'day').unix())
const [endDate, setEndDate] = useState<number>(dayjs().unix())
const startDateFormat = dayjs(startDate * 1000).format('YYYY-MM-DD')
const endDateFormat = dayjs(endDate * 1000).format('YYYY-MM-DD')
const [chartKey, setChartKey] = useState(0)
const handleDateChange = ([start, end]: [Date | null, Date | null]) => {
if (start && end) {
setStartDate(dayjs(start).unix())
setEndDate(dayjs(end).unix())
}
}
const getPerformancePercent = () => {
const orders = widgetData?.find((a) => a.label == 'Orders')?.datavalue ?? 0
const shipment = widgetData?.find((a) => a.label == 'Shipment')?.datavalue ?? 0
if (shipment > orders)
return (orders / shipment * 100.0)
else
return (shipment / orders * 100.0)
}
const getDashboardWidgets = useCallback(async () => {
const dashboardWidgetsRequestDto = {
tarih1: startDateFormat,
tarih2: endDateFormat,
}
setChartKey((prevKey) => prevKey + 1)
try {
setLoading(true)
const response = await getDashboardWidgetList(dashboardWidgetsRequestDto)
if (response?.data) {
setWidgetData(
response.data.map((a) => ({
id: a.id,
label: a.label,
datavalue: a.dataValue,
datagrowShrink: a.dataGrowShrink,
valuePrefix: a.valuePrefix,
date: a.date,
})),
)
}
} catch (error) {
console.error('Dashboard widget yüklenirken hata oluştu:', error)
} finally {
setLoading(false)
}
}, [startDateFormat, endDateFormat])
useEffect(() => {
getDashboardWidgets()
}, [])
return (
<>
<Helmet
2025-05-06 11:03:45 +00:00
titleTemplate="%s | Kurs Platform"
2025-05-06 06:45:49 +00:00
title={translate('::' + 'Home')}
2025-05-06 11:03:45 +00:00
defaultTitle="Kurs Platform"
2025-05-06 06:45:49 +00:00
></Helmet>
<WidgetFilter
onFilter={getDashboardWidgets}
handleDateChange={handleDateChange}
startDate={startDate}
endDate={endDate}
/>
<Widgets loading={loading} widgetData={widgetData} />
<div className="grid grid-cols-1 lg:grid-cols-3 gap-4 mt-4">
<WidgetBarChart
chartKey={`Chart-${chartKey}`}
startDateFormat={startDateFormat}
endDateFormat={endDateFormat}
/>
<WidgetProgress percent={getPerformancePercent()} />
</div>
{/* <Button
onClick={() => {
// x.setConfig({
// component: 'RolesPermission',
// props: { name: 'admin' },
// })
// apiService.fetchData({
// method: 'GET',
// url: '/api/app/test/test',
// })
}}
>
FIRE
</Button> */}
</>
)
}
export default Home