NewsFilter.astro カテゴリごとのラジオボタンでフィルタリング条件を選択できるUI。
NewsList.astro
フィルター結果に応じたニュース記事リストを表示。
データはdata-sort-data属性で非表示領域にJSONとして埋め込まれる。
Pager.astro 記事数が多い場合のページ送りUI。
NewsItem.astro 各ニュース記事の表示コンポーネント。 JSでリンク先やカテゴリ、アイコンの制御を行う。
初期化
data-sort属性を持つ要素を起点に、Sort.tsのJSクラスが初期化される。testData.json)がNewsListに渡され、data-sort-data属性にJSONで埋め込まれる。フィルター操作
NewsFilterのラジオボタン(data-sort-item)の選択が変わると、Sort.tsが現在の選択状態を取得。NewsListのstore.showDataに反映。ページネーション
Pager.tsでページ送りを制御。NewsListに表示される。URLパラメータ連携
リンク先の設定
data-news-item-hrefに格納された値を<a>タグのhref属性にセット。
カテゴリの表示
data-news-item-categoryに格納されたカテゴリ配列をもとに、
.categoryJa).categoryEn)
をそれぞれ生成・挿入。アイコンの切り替え
data-news-item-typeの値がpdfの場合はPDFアイコンを表示し、通常は矢印アイコンを表示。
フィルタやページ切り替え時の再描画対応
sortChangedイベントを監視し、フィルタやページ送りでリストが切り替わった際にも上記処理を再実行。
data-sort-*やdata-news-item-*属性が付与されており、JS側でDOMを探索・制御しやすい設計。このような構成・仕組みで、ユーザーが直感的にニュースを絞り込めるフィルタリング機能を実装しています。