📝
Notion to Mattermost focalboard - インポート時のフィールドタイプを動的に切り替える実装
CSVファイルからデータをインポートする際、すべてのカラムを同じフィールドタイプ(例:テキストフィールドやセレクトボックス)として扱うのではなく、カラムによって異なるフィールドタイプを設定したいケースがあります。
この記事では、特定のカラムのみをセレクトボックスとして扱い、それ以外のカラムをテキストフィールドとして扱う実装について解説します。
前提条件
具体的な Notion から Mattermost focalboard については公式のドキュメントをご覧ください。
その中で実行する importNotion.ts を書き換えて、実行します。
実装の概要
今回の実装では以下の要件を満たすようにします:
- category, status カラムはセレクトボックスとして扱う
- その他のカラムはテキストフィールドとして扱う
全体の実装
下記のGistに全体の実装を記載しています:
実装の変更点の説明
セレクトボックスとして扱うカラムの定義
まず、セレクトボックスとして扱うカラムを定義します:
const SELECT_COLUMNS = ['category', 'status']
プロパティタイプの設定
カラムに応じて適切なプロパティタイプを設定します:
const cardProperty: IPropertyTemplate = {
id: Utils.createGuid(),
name: column,
// 変更前
// type: 'select',
type: SELECT_COLUMNS.includes(column) ? 'select' : 'text',
options: []
}
カードのプロパティ値設定
カードのプロパティ値を設定する際、カラムのタイプに応じて異なる処理を行います:
// 変更前
// outCard.fields.properties[cardProperty.id] = option.id
if (SELECT_COLUMNS.includes(key)) {
// セレクトボックスの場合
outCard.fields.properties[cardProperty.id] = option.id
} else {
// テキストフィールドの場合
outCard.fields.properties[cardProperty.id] = value
}
まとめ
CSVインポート時のフィールドタイプを動的に切り替えることで、より柔軟なデータインポートが可能になりました。特定のカラムのみをセレクトボックスとして扱い、残りをテキストフィールドとして扱うことで、データの性質に応じた適切な入力形式を提供できます。
また、この実装は環境変数での設定や自動判定機能の追加など、さらなる拡張の余地も残されています。
参考
Discussion