UomsPage.tsx 1.25 KB
import { useEffect, useState } from 'react'
import { catalog } from '@/api/client'
import type { Uom } from '@/types/api'
import { PageHeader } from '@/components/PageHeader'
import { Loading } from '@/components/Loading'
import { ErrorBox } from '@/components/ErrorBox'
import { DataTable, type Column } from '@/components/DataTable'

export function UomsPage() {
  const [rows, setRows] = useState<Uom[]>([])
  const [error, setError] = useState<Error | null>(null)
  const [loading, setLoading] = useState(true)

  useEffect(() => {
    catalog
      .listUoms()
      .then(setRows)
      .catch((e: unknown) => setError(e instanceof Error ? e : new Error(String(e))))
      .finally(() => setLoading(false))
  }, [])

  const columns: Column<Uom>[] = [
    { header: 'Code', key: 'code', render: (r) => <span className="font-mono">{r.code}</span> },
    { header: 'Name', key: 'name' },
    { header: 'Dimension', key: 'dimension' },
  ]

  return (
    <div>
      <PageHeader
        title="Units of Measure"
        subtitle="Seeded set of UoMs the catalog and inventory PBCs use to quantify items."
      />
      {loading && <Loading />}
      {error && <ErrorBox error={error} />}
      {!loading && !error && <DataTable rows={rows} columns={columns} />}
    </div>
  )
}