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

ListUsersブロック

ListUsers は、MUI の Table プリミティブ上に構築されたユーザーディレクトリテーブルです。ステータスフィルタリングタブ、解除可能な検索チップフィルター、ステータス変更ドロップダウンアクション、ページネーション、および複合子要素またはブロックオーバーライドによる直接的なレイアウトカスタマイズをサポートします。

インストール

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

必要なもの

項目用途
listUsersTitleテーブルセクションの見出しテキストまたは React ノード
dataListUsersRowDataidnamecreatedAtstatus)に一致するユーザーレコードの配列
labelsヘッダー、検索プレースホルダー、行アクション、空状態をマッピングするテキストラベルオブジェクト
プレゼンテーションコンポーネント

ListUsers はリストの状態を保持しません。現在のページ、アクティブな検索値、検索チップ、タブフィルターなどのパラメーターをアプリケーションの状態で管理し、コールバックイベントで処理してください。

コード例

ライブエディター
function Example() {
  const [page, setPage] = React.useState(1);

  const users = [
    {
      id: '1',
      name: '田中太郎',
      createdAt: '2026-01-15T10:30:00Z',
      status: 'active'
    },
    {
      id: '2',
      name: '佐藤花子',
      createdAt: '2026-01-14T09:15:00Z',
      status: 'inactive'
    }
  ];

  const labels = {
    emptyStateMessage: 'ユーザーが見つかりません',
    searchFieldPlaceholder: 'ユーザーを検索...',
    headerRow: {
      name: '名前',
      createdAt: '作成日',
      status: 'ステータス',
    },
    cellData: {
      statusActive: 'アクティブ',
      statusInactive: '非アクティブ',
    },
  };
  const [lastAction, setLastAction] = React.useState('ナビゲーションのフィードバックがここに表示されます。');

  return (
    <div style={{ minHeight: 400 }}>
      {/** ナビゲーション用のインラインフィードバック */}
      <ListUsers
        listUsersTitle="ユーザーディレクトリ"
        labels={labels}
        data={users}
        onNavigate={(to) => setLastAction(`ナビゲート: ${to}`)}
        rowHref={(row) => `#users/${row.id}`}
        pagination={{
          currentPage: page,
          totalPages: 1,
          onPageChange: setPage,
        }}
      />
      <div style={{marginTop: 12, color: '#475569', fontSize: 13}}>{lastAction}</div>
    </div>
  );
}
結果
Loading...

主要プロパティ

コアプロパティ

プロパティ必須デフォルト説明
dataListUsersRowData[]はい-ユーザーレコードオブジェクトの配列
isLoadingbooleanいいえundefinedtrue のとき、デフォルトのコンテンツ領域の代わりに円形ローダーをレンダリングする
onNavigate(to: string) => voidいいえundefined行クリックなどのクリックアクションでトリガーされるナビゲーションコールバック
onItemActivate(rowId: string) => voidいいえundefined「有効化」アクションドロップダウンオプションを選択したときにトリガーされるコールバック
onItemDeactivate(rowId: string) => voidいいえundefined「無効化」アクションドロップダウンオプションを選択したときにトリガーされるコールバック
resolveRowAction(row: ListUsersRowData) => ('activate' | 'deactivate')[] | undefinedいいえundefined行ごとにアクティブなアカウントオプションを評価する直接チェック
shouldShowDropdownMenu(row: ListUsersRowData) => booleanいいえundefinedアクションドロップダウンボタンを完全に表示するかどうかを決定するチェック
statusMatch{ inUse: string; notInUse: string }いいえ{ inUse: 'active', notInUse: 'inactive' }生の row.status 値を生成されるステータス列のアクティブ/非アクティブテキストにマッピングする
paginationPaginationPropsいいえundefinedステートフルなページネーションコントロール: { currentPage, totalPages, onPageChange, className? }

コンテンツプロパティ

プロパティ必須デフォルト説明
listUsersTitleReactNodeはい-Title サブブロック内にレンダリングされる見出しテキストまたはコンポーネント
labels{ emptyStateMessage: string; searchFieldPlaceholder: string; rowActions?: { activate: string; deactivate: string }; headerRow: { createdAt: string; name: string; status: string }; cellData: { statusActive: string; statusInactive: string } }はい-レイアウトの翻訳と文言マッピング
rowHref(row: ListUsersRowData) => stringいいえundefined行 href URL を生成する直接コールバック
tabs{ key: string; label: string; isDisabled?: boolean; subtitle?: string }[]いいえundefinedタブフィルターカテゴリ項目
currentTabstringいいえundefined現在選択されているタブ識別子
onTabChange(tab: string) => voidいいえundefinedカテゴリタブクリックでトリガーされるコールバック
searchValuestringいいえundefined検索テキスト入力の値
onSearchFieldChange(value: string) => voidいいえundefined検索テキスト入力への入力時にトリガーされるコールバック
onSearchSubmit() => voidいいえundefined検索ボタンのクリックまたは Enter 送信時にトリガーされる
searchChipsTitleReactNodeいいえundefinedアクティブなチップフィルターバッジの横に表示されるラベル
searchChipsBaseTableSearchChip[]いいえundefined解除可能な検索チップバー内にマッピングされるフィルター
onSearchChipDelete(chip: BaseTableSearchChip, index: number, event: SyntheticEvent) => voidいいえundefinedアクティブなチップの解除時にトリガーされるコールバック

labels 構造

次のレイアウト構造に一致する labels オブジェクト内に正確な文言キーを提供します:

{
emptyStateMessage: string;
searchFieldPlaceholder: string;
rowActions?: {
activate: string;
deactivate: string;
};
headerRow: {
createdAt: string;
name: string;
status: string;
};
cellData: {
statusActive: string;
statusInactive: string;
};
}

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

プロパティ必須デフォルト説明
childrenBlocksOverride | ReactNodeいいえundefined複合子要素またはオーバーライド関数の子
classNamestringいいえundefined外側コンテナに適用されるスタイリングクラス
sxSxPropsいいえundefined外側 Stack に渡される MUI SX スタイリングオーバーライド

ListUsersStackPropschildren を除く)をすべて継承します。デフォルトのブロック順序は ['header', 'searchChips', 'content', 'pagination']defaultBlockOrder)です。

デフォルト UI ブロック

ブロックベース備考
ListUsers (ルート)BaseTableテーマコンテキストを確立する直接テーブルラッパー
ListUsers.HeaderBaseTable.HeaderTitle と検索 Actions を保持する Flex コンテナ
ListUsers.TitleBaseTable.Header.Titleメイン見出しテキストをレンダリングする
ListUsers.ActionBaseTable.Header.Actionsユーザー検索入力コンポーネントをラップする
ListUsers.SearchChipsBaseTable.SearchChipsアクティブな検索フィルターを保持するコンテナ
ListUsers.TabsBaseTable.Tabs複合/オーバーライドレイアウトで利用可能。ルートの tabs からタブ定義を読み取る
ListUsers.ContentBaseTable.Contentローダーまたは表形式データグリッドを保持するコンテナブロック
ListUsers.LoaderBaseTable.Content.Loaderロード中に表示されるプログレススピナー
ListUsers.TableBaseTable.Content.Gridユーザー名、作成日、ステータスセル、アクションを表示する
ListUsers.PaginationBaseTable.Pagination下部にマッピングされる標準的なページネーションコントロール

TypeScript

import { ListUsers } from '@nodeblocks/frontend-list-users-block';
import type { ListUsersRowData } from '@nodeblocks/frontend-list-users-block';

const users: ListUsersRowData[] = [
{
id: 'usr_001',
name: '佐藤健二',
createdAt: '2026-05-27T01:00:00Z',
status: 'active',
}
];

const labels = {
emptyStateMessage: '従業員が見つかりません',
searchFieldPlaceholder: 'データベースを検索',
rowActions: { activate: '有効化', deactivate: '停止' },
headerRow: {
name: 'メンバー',
createdAt: '参加日',
status: 'ステータス',
},
cellData: { statusActive: 'アクティブ', statusInactive: '停止中' },
};

<ListUsers
listUsersTitle="企業レジストリ"
labels={labels}
data={users}
/>;