Table、List、チャート

自作の行を、並べ替え可能なTableとレイアウトがずれないチャートに置き換えます。

この章のアプリはコンソールで動作しています。⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥Cで開き(先に開発者向け機能を有効化)、試してください。
章の動画を見る3:05

この章の内容

  • 並べ替え可能なテーブル
  • テーブルの上にチャートを配置
  • その他のコンポーネント

手書きの行をコンポーネントに置き換えます。キーボード操作と並べ替えに対応した <Table>、仮想スクロールに対応した <List>、1/8ブロックと四分区画のドットで描くチャートを使います。

並べ替え可能なテーブル

列はオブジェクトの配列です。width のない列は grow に応じて残りのスペースを分け合い、value は並べ替えで比較する値を指定し、render はセルを描画します。

app/deployments/page.tsx+10-1tsx
追加:import { Table, type SortState, type TableColumn } from "@textjs/app";追加:追加:const COLUMNS: TableColumn<Deployment>[] = [追加:  { key: "status", header: "Status", width: 11, render: (d) => <Status status={d.status} /> },追加:  { key: "commit", header: "Commit", grow: 2 },追加:  { key: "project", header: "Project", width: 10 },追加:  { key: "duration", header: "Build", width: 6, align: "right", value: (d) => d.duration, render: (d) => <Text>{`${d.duration}s`}</Text> },追加:];export default function DeploymentsPage() {追加:  const [sort, setSort] = useState<SortState | null>(null);  …削除:  return rows.map((d) => …);追加:  return <Table columns={COLUMNS} rows={rows} getRowKey={(d) => d.id} sortable sort={sort} onSortChange={setSort} autoFocus />;}

テーブルにフォーカスがあるとき、↑ ↓ でハイライトを移動し、s で並べ替えの列を順に切り替え、S で方向を反転し、Enter で onSelect を呼び出します。長いテーブルでは、表示されている行のみを描画します。

テーブルの上にチャートを配置

<Sparkline> は最新のデータ点でボックスを埋めます。<BarChart> はラベルと値を揃えます。

app/deployments/page.tsx+15tsx
追加:import { BarChart, Sparkline } from "@textjs/app";追加:追加:  const [chart, setChart] = useState<"spark" | "bars">("spark");追加:  useInput((e) => {追加:    if (e.input === "c") setChart((c) => (c === "spark" ? "bars" : "spark"));追加:  });追加:  return (    <Box className="flex-col grow gap-1">追加:      <Box className="flex-col" height={4}>追加:        <Text color="subtle">Build time, last 24 deployments</Text>追加:        {chart === "spark" ? (追加:          <Sparkline data={buildTimes} height={3} color="accent" />追加:        ) : (追加:          <BarChart data={byProject} formatValue={(v) => `${v}s`} />追加:        )}追加:      </Box>      <Table … />    </Box>  );

チャートのボックスは高さが固定されているため、チャートを切り替えてもテーブルは移動せず、その行が再エンコードされることもありません。

その他のコンポーネント

<List>、<Tree>、<Tabs>、<Select>、<Input>、<Modal>、<Toaster>、<CommandPalette>、<ProgressBar>、<LineChart> などは、コンポーネントで説明しています。

試す

これは章の終わりに完成するAcme Deploysで、DevToolsで動作しています。パッドをクリックして、以下のキーを使います。

▼ 07 · Table、List、チャート

コンソールを開く

⌘⌥J
CtrlShiftJ
⌘⌥K
CtrlShiftK
⌘⌥C

アプリはDevToolsに描画されます。まずSafariの「設定」→「詳細」で「Webデベロッパ用の機能を表示」をオンにします。 次にここをクリックして、sを押します。

デスクトップで開く

このアプリはDevToolsのコンソールに描画されるため、デスクトップブラウザーが必要です。

クイズ

2問

すべての問題に回答すると章を完了できます。

並べ替え可能なTableにフォーカスがあるとき、sは何をしますか?

 

チャートのボックスの高さを固定する理由は何ですか?