parent
99a2893d51
commit
726d1f9ac3
File diff suppressed because one or more lines are too long
@ -0,0 +1,74 @@ |
||||
'use client'; |
||||
|
||||
import Guard from '@/components/guard'; |
||||
import { Button } from '@/components/ui/button'; |
||||
import { |
||||
Table, |
||||
TableBody, |
||||
TableCell, |
||||
TableHead, |
||||
TableHeader, |
||||
TableRow, |
||||
} from '@/components/ui/table'; |
||||
import { useSensorData } from '@/hooks/useSensorData'; |
||||
import { useRouter, useSearchParams } from 'next/navigation'; |
||||
|
||||
export default function InnerSensorDataPage() { |
||||
const searchParams = useSearchParams(); |
||||
const rawSensorId = searchParams.get('sensorId'); |
||||
const router = useRouter(); |
||||
|
||||
const sensorId = (() => { |
||||
if (!rawSensorId) return 0; |
||||
const n = Number(rawSensorId); |
||||
return Number.isNaN(n) || !Number.isFinite(n) || !Number.isInteger(n) || n <= 0 ? 0 : n; |
||||
})(); |
||||
const { data, isLoading, isError, refetch } = useSensorData(sensorId); |
||||
|
||||
return ( |
||||
<Guard> |
||||
<div className="mb-4 flex items-center justify-between"> |
||||
<div className="flex items-center gap-2"> |
||||
<Button variant="ghost" onClick={() => router.back()}> |
||||
〈 |
||||
</Button> |
||||
<h1 className="text-xl font-semibold">센서{sensorId} 데이터</h1> |
||||
</div> |
||||
<Button onClick={() => refetch()}>새로고침</Button> |
||||
</div> |
||||
|
||||
{isLoading && <p className="text-gray-500">불러오는 중...</p>} |
||||
{isError && <p className="text-red-600">불러오지 못했습니다.</p>} |
||||
{!isLoading && !isError && ( |
||||
<div className="overflow-x-auto rounded border"> |
||||
<Table> |
||||
<TableHeader> |
||||
<TableRow> |
||||
<TableHead className="px-4 py-2 text-center">ID</TableHead> |
||||
<TableHead className="px-4 py-2 text-center">값</TableHead> |
||||
<TableHead className="px-4 py-2 text-center">시간</TableHead> |
||||
</TableRow> |
||||
</TableHeader> |
||||
<TableBody> |
||||
{data && data.length > 0 ? ( |
||||
data.map((s) => ( |
||||
<TableRow key={s.id}> |
||||
<TableCell className="px-4 py-2 text-center">{s.id}</TableCell> |
||||
<TableCell className="px-4 py-2 text-center">{s.value}</TableCell> |
||||
<TableCell className="px-4 py-2 text-center">{s.recordedAt ?? '-'}</TableCell> |
||||
</TableRow> |
||||
)) |
||||
) : ( |
||||
<TableRow> |
||||
<TableCell colSpan={4} className="px-4 py-6 text-center text-gray-500"> |
||||
데이터가 없습니다. |
||||
</TableCell> |
||||
</TableRow> |
||||
)} |
||||
</TableBody> |
||||
</Table> |
||||
</div> |
||||
)} |
||||
</Guard> |
||||
); |
||||
} |
@ -0,0 +1,12 @@ |
||||
import { Suspense } from 'react'; |
||||
import InnerSensorDataPage from './innerPage'; |
||||
|
||||
export default function SensorDataPage() { |
||||
return ( |
||||
<Suspense |
||||
fallback={<div className="mb-4 flex items-center justify-between">불러오는 중...</div>} |
||||
> |
||||
<InnerSensorDataPage /> |
||||
</Suspense> |
||||
); |
||||
} |
@ -0,0 +1,12 @@ |
||||
import { Suspense } from 'react'; |
||||
import InnerGroupSensorsPage from './innerPage'; |
||||
|
||||
export default function GroupSensorsPage() { |
||||
return ( |
||||
<Suspense |
||||
fallback={<div className="mb-4 flex items-center justify-between">불러오는 중...</div>} |
||||
> |
||||
<InnerGroupSensorsPage /> |
||||
</Suspense> |
||||
); |
||||
} |
@ -1,21 +0,0 @@ |
||||
'use client'; |
||||
|
||||
import Guard from '@/components/guard'; |
||||
import { useParams, useRouter, useSearchParams } from 'next/navigation'; |
||||
|
||||
export default function SensorDetailPage() { |
||||
const params = useParams(); |
||||
const router = useRouter(); |
||||
const search = useSearchParams(); |
||||
const sensorId = Number(params?.sensorId); |
||||
|
||||
const limit = search.get('limit') ? Number(search.get('limit')) : undefined; |
||||
|
||||
return ( |
||||
<Guard> |
||||
<main> |
||||
<div></div> |
||||
</main> |
||||
</Guard> |
||||
); |
||||
} |
Loading…
Reference in new issue