import { useId, useState } from 'react' import type { Connection } from '#/features/connections/model' import { ColumnSourceEditor, defaultColumnSource, rebindColumnSource, } from './column-source-editor' import { columnSchema, type DeckColumn } from './model' export function ColumnEditor({ column, connections, onSave, onCancel, }: { column?: DeckColumn connections: Connection[] onSave: (column: DeckColumn) => Promise onCancel: () => void }) { const available = connections.filter( (connection) => connection.status === 'connected', ) const formId = useId() const [error, setError] = useState() const [connectionId, setConnectionId] = useState( column?.connectionId ?? available[0]?.id ?? '', ) const [source, setSource] = useState( column?.source ?? defaultColumnSource(available[0]?.platform ?? 'twitter'), ) const validConnection = available.some( (connection) => connection.id === connectionId, ) return (
{ event.preventDefault() setError(undefined) const data = new FormData(event.currentTarget) const parsed = columnSchema.safeParse({ id: column?.id ?? crypto.getRandomValues(new Uint32Array(4)).join('-'), title: data.get('title'), connectionId, source, }) if (!parsed.success || !validConnection) { setError( parsed.success ? '接続プロファイルを選択してください。' : parsed.error.issues[0]?.message, ) return } await onSave(parsed.data) }} >

このカラムは選択した接続プロファイルで取得します。

{error && (

{error}

)}
) }