メインコンテンツまでスキップ

ListOrderブロック

ListOrder は、MUI の Stack とカード上に構築された注文リストで、任意のチップ、ステータスバナー、もっと読み込む動作、複合子またはブロックのオーバーライドによる構成を備えています。

インストール

npm install @nodeblocks/frontend-list-order-block

必要なもの

項目用途
ordersレンダリングする行(idlogoUrltitlesubtitledate、任意の chipsdisabledstatus
hasMoreLoadMoreButton がレンダリングするかどうかを判断するために使用
onClickOrder (任意)デフォルトの OrderCard / OrderListSection で使用される行クリックハンドラー
onClickLoadMore (任意)LoadMoreButton が使用するもっと読み込むハンドラー
isLoadingList (任意)OrderLoadingCircle を切り替え、LoadMoreButton を無効化
リスト状態はアプリ側で管理する

ListOrder はリストの状態を保持しません。ordershasMore、ローディング状態をアプリ側で管理し、ブロックに渡してください。一般的なパターンは、onClickLoadMore で次のページをスライス/取得し、行を追加して hasMore を更新することです。

コード例

ライブエディター
function Example() {
  const allOrders = Array.from({length: 12}, (_, i) => ({
    id: String(i + 1),
    logoUrl: 'https://unsplash.it/16',
    title: `注文 #${i + 1}`,
    subtitle: `組織 ${i + 1}`,
    date: new Date(2024, 0, i + 1).toLocaleDateString(),
    chips: i % 3 === 0 ? [{label: '保留中'}] : [{label: '承認済み'}],
  }));

  const [displayedOrders, setDisplayedOrders] = React.useState(allOrders.slice(0, 5));
  const [hasMore, setHasMore] = React.useState(true);
  const [lastAction, setLastAction] = React.useState('注文をクリックすると、ここにフィードバックが表示されます。');

  const handleLoadMore = () => {
    const next = allOrders.slice(0, displayedOrders.length + 5);
    setDisplayedOrders(next);
    setHasMore(next.length < allOrders.length);
  };

  return (
    <>
      <ListOrder
        orders={displayedOrders}
        hasMore={hasMore}
        onClickOrder={(order) => setLastAction(`クリック: ${order.title}`)}
        onClickLoadMore={handleLoadMore}
        sx={{bgcolor: 'background.default'}}
      >
        <ListOrder.OrderListSection />
        <ListOrder.OrderLoadingCircle />
        <ListOrder.LoadMoreButton />
      </ListOrder>
      <div style={{marginTop: 12, color: '#475569', fontSize: 13}}>{lastAction}</div>
    </>
  );
}
結果
Loading...

主要プロパティ

コアプロパティ

プロパティ必須デフォルト説明
ordersOrder[]はい-注文行
hasMorebooleanはい-LoadMoreButton が自身の表示/非表示を判断するために使用するコンテキスト値
onClickOrder(order: Order) => voidいいえundefined行がクリックされたときに呼び出される
onClickLoadMore() => voidいいえundefinedもっと読み込むアクションのハンドラー
isLoadingListbooleanいいえundefinedOrderLoadingCircle を表示し、LoadMoreButton を無効化する

Order の形状:

プロパティ必須デフォルト説明
idstringはい-一意の行 ID
logoUrlstringはい-組織ロゴの URL
titlestringはい-メインテキスト
subtitlestringはい-サブテキスト
datestringはい-日付テキスト
chips({ label: string } & ChipProps)[]いいえundefined日付の上に表示する任意のチップ
disabledbooleanいいえundefined無効化されたカードスタイルを適用する(bgcolor: grey.75
statusstringいいえundefined任意のステータスバナーテキスト(sm+ のみ)

コンテンツプロパティ

コンポーネントプロパティ必須デフォルト説明
OrderListSectionordersOrder[]いいえルートの ordersデフォルトのリストマッピングで使用する行
OrderListSectiononClickOrder(order: Order) => voidいいえルートのハンドラー子が省略された場合の行クリックフォールバック
OrderListSectionchildrenReactNodeいいえordersOrderCard にマッピングカスタムリストコンテンツ
OrderCardorderOrderはい-1 枚のカード用の行データ
OrderCardonClickCardProps['onClick']いいえルートの onClickOrder(order)クリックハンドラーのオーバーライド
OrderCardchildrenReactNodeいいえorder から構築されたカードコンテンツカスタムカード本体
OrderLoadingCircleisLoadingListbooleanいいえルートの isLoadingListtrue の場合のみスピナーをレンダリング
LoadMoreButtonhasMorebooleanいいえルートの hasMoretrue の場合のみレンダリング
LoadMoreButtononClickButtonProps['onClick']いいえルートの onClickLoadMoreクリックハンドラーのオーバーライド
LoadMoreButtonisLoadingListbooleanいいえルートの isLoadingListローディング中にボタンを無効化
LoadMoreButtonchildrenReactNodeいいえRead Moreボタンのラベル/コンテンツ
OrderLogosrcstringいいえorder.logoUrl からロゴ画像のソース
OrderLogoaltstringいいえundefined画像の alt テキスト
OrderTitlechildrenReactNodeいいえorder.title からタイトルコンテンツ
OrderSubtitlechildrenReactNodeいいえorder.subtitle からサブタイトルコンテンツ
OrderDatechildrenReactNodeいいえorder.date から日付コンテンツ
OrderStatusBannerchildrenReactNodeいいえorder.status からステータスコンテンツ

OrderListSectionOrderCardOrderLoadingCircleLoadMoreButtonOrderLogoOrderTitleOrderSubtitleOrderDateOrderStatusBannerListOrder.OrderListSection などです。

レイアウトと構成プロパティ

プロパティ必須デフォルト説明
childrenBlocksOverride | ReactNodeいいえundefined複合 JSX の子、または blocksblockOrder を返す関数オーバーライド
classNamestringいいえundefinedルートクラス(デフォルトで nbb-list-order が適用される)
sxSxPropsいいえundefinedルートリスト用の MUI システムスタイル

ListOrderStackPropschildren を除く)を継承し、ルートのデフォルトは spacing={2}p: 2 です。defaultBlockOrderorderListSectionorderLoadingCircleloadMoreButtonorderCardorderLogoorderSubtitleorderDateorderStatusBanner です。

デフォルト UI ブロック

ブロックベース備考
ListOrder (ルート)Stackルートリストコンテナ
ListOrder.OrderListSectionStackデフォルトの注文リストセクション
ListOrder.OrderCardCard + CardActionArea + CardContentorder から構築されたカード行
ListOrder.OrderLogoBox (component="img")円形のロゴ画像
ListOrder.OrderTitleTypographyタイトル(variant="h6"
ListOrder.OrderSubtitleTypographyサブタイトル(variant="body1"
ListOrder.OrderDateBoxセカンダリカラーの日付テキスト
ListOrder.OrderStatusBannerBox + Typographyステータスバナー(sm+
ListOrder.OrderLoadingCircleCircularProgressローディングスピナー
ListOrder.LoadMoreButtonButton全幅アクション、デフォルトテキスト Read More
デフォルト OrderCard 内のチップChiporder.chips のエントリを使用(label 必須)

TypeScript

import { ListOrder, type Order } from '@nodeblocks/frontend-list-order-block';

const orders: Order[] = [
{
id: '1',
logoUrl: 'https://unsplash.it/16',
title: '注文 #1',
subtitle: '組織 1',
date: '2024年1月1日',
chips: [{label: '保留中'}],
status: 'Processing',
},
];

<ListOrder
orders={orders}
hasMore={false}
onClickOrder={() => {}}
/>;