組織詳細ブロック
ViewOrganizationコンポーネントは、React、TypeScript、MUIで構築された完全にカスタマイズ可能でアクセシブルな組織表示コンポーネントです。モダンなデザインパターン、柔軟なレイアウトオプション、包括的なカスタマイズ機能を備えた組織情報表示のための完全なインターフェースを提供します。
🚀 インストール
npm install @nodeblocks/frontend-view-organization-block@0.2.0
📖 使用法
import {ViewOrganization} from '@nodeblocks/frontend-view-organization-block';
- 基本的な使用法
- 高度な使用法
function BasicViewOrganization() { return ( <ViewOrganization labels={{ companyAbout: '会社について', companyActivities: '事業内容', companyRegisteredInformation: '登録情報', }} companyLogoUrl="/img/icon.png" companyName="テック・ソリューション株式会社" companyTags={[ {icon: undefined, value: 'テクノロジー'}, {icon: undefined, value: '東京'}, ]} companyAbout="私たちは革新的なソリューションに焦点を当てた業界をリードするテクノロジー企業です。" companyActivities="ソフトウェア開発、コンサルティング、デジタルトランスフォーメーションサービス。" companyRegisteredInformation={[ {label: '法人番号:', value: '12345678'}, {label: '税務ID:', value: 'TAX-987654321'}, {label: '設立年:', value: '2010'}, ]} > <ViewOrganization.CompanyBanner /> <ViewOrganization.CompanyName /> <ViewOrganization.Tags /> <ViewOrganization.AboutCompany /> <ViewOrganization.BusinessActivities /> <ViewOrganization.CorporateInformation /> </ViewOrganization> ); }
function AdvancedViewOrganization() { return ( <ViewOrganization labels={{ companyAbout: '企業概要', companyActivities: '事業内容', companyRegisteredInformation: '登録情報', }} companyLogoUrl="/img/icon.png" companyName="株式会社テクノロジー・イノベーション" companyTags={[ {icon: undefined, value: 'テクノロジー'}, {icon: undefined, value: '東京都渋谷区'}, {icon: undefined, value: '従業員500名'}, {icon: undefined, value: '上場企業'}, ]} companyAbout="私たちは、最新のテクノロジーを活用して企業のデジタル変革を支援する革新的な技術企業です。" companyActivities="ソフトウェア開発、AIソリューション、クラウドインフラストラクチャ、デジタルトランスフォーメーションコンサルティング" companyRegisteredInformation={[ {label: '法人番号:', value: '1234567890123'}, {label: '資本金:', value: '10億円'}, {label: '設立年月日:', value: '2008年4月1日'}, {label: '本店所在地:', value: '東京都渋谷区神宮前1-1-1'}, ]} sx={{ background: 'linear-gradient(145deg, #f8fafc 0%, #f1f5f9 100%)', borderRadius: '20px', border: '1px solid #e2e8f0', }} > {({defaultBlocks, defaultBlockOrder}) => ({ blocks: { companyBanner: { ...defaultBlocks.companyBanner, props: { ...defaultBlocks.companyBanner.props, sx: { background: 'linear-gradient(135deg, #0f172a 0%, #1e293b 100%)', borderRadius: '14px', padding: '24px', textAlign: 'center', }, }, }, companyName: { ...defaultBlocks.companyName, props: { ...defaultBlocks.companyName.props, sx: { textAlign: 'center', '& .MuiTypography-root': { color: '#0f172a', fontSize: '1.5rem', }, }, }, }, aboutCompany: { ...defaultBlocks.aboutCompany, props: { ...defaultBlocks.aboutCompany.props, sx: { background: 'white', borderRadius: '14px', padding: '20px', border: '1px solid #e2e8f0', }, }, }, businessActivities: { ...defaultBlocks.businessActivities, props: { ...defaultBlocks.businessActivities.props, sx: { background: 'white', borderRadius: '14px', padding: '20px', border: '1px solid #e2e8f0', }, }, }, corporateInformation: { ...defaultBlocks.corporateInformation, props: { ...defaultBlocks.corporateInformation.props, sx: { background: 'white', borderRadius: '14px', padding: '20px', border: '1px solid #e2e8f0', }, }, }, }, blockOrder: defaultBlockOrder, })} </ViewOrganization> ); }
🔧 プロパティリファレンス
メインコンポーネントのプロパティ
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
labels | Labels | 必須 | 異なるセクションのラベル設定 |
labels.companyAbout | ReactNode | undefined | 会社概要セクションのラベル |
labels.companyActivities | ReactNode | undefined | 会社活動セクションのラベル |
labels.companyRegisteredInformation | ReactNode | undefined | 登録情報セクションのラベル |
companyLogoUrl | string | undefined | 会社ロゴ画像のURL |
companyName | ReactNode | undefined | 表示する会社名 |
companyTags | Array<{icon?: SvgIconComponent, value: string}> | undefined | MUIアイコンと値を持つタグの配列 |
companyAbout | ReactNode | undefined | 会社概要説明コンテンツ |
companyActivities | ReactNode | undefined | 会社活動説明コンテンツ |
companyRegisteredInformation | Array<{label: ReactNode, value: string}> | undefined | 登録情報項目の配列 |
children | BlocksOverride | undefined | デフォルトブロックをオーバーライドする関数 |
className | string | undefined | コンテナスタイリング用の追加CSSクラス名 |
注意: メインコンポーネントはMUI Stack プロパティを継承します。ルートコンテナはデフォルトで direction="column"、spacing={3}、sx={{ p: 3 }} を使用します。
サブコンポーネント
ViewOrganizationコンポーネントは複数のサブコンポーネントを提供します。すべてのサブコンポーネントは、メインコンポーネントのコンテキストからデフォルト値を受け取り、プロパティを通じてこれらの値をオーバーライドできます。
ViewOrganization.Tag
オプションのアイコンを持つ単一のタグを表示します。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
icon | SvgIconComponent | undefined | 表示するMUIアイコンコンポーネント |
label | ReactNode | undefined | タグのテキストコンテンツ(複数の値の場合は配列) |
className | string | undefined | スタイリング用の追加CSSクラス名 |
注意: このコンポーネントはMUI Box プロパティを継承します。display: 'inline-flex'、alignItems: 'center'、gap: 1.5 を使用します。
ViewOrganization.Title
組織のタイトル/名前を表示します。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
prefix | ReactNode | undefined | タイトルの前に表示するコンテンツ |
companyName | ReactNode | コンテキストから | タイトルとして表示する会社名 |
children | ReactNode | companyName | タイトルコンテンツ - 提供された場合companyNameをオーバーライド |
className | string | undefined | スタイリング用の追加CSSクラス名 |
注意: このコンポーネントはMUI Box プロパティを継承します。variant="h6"、component="h6"、fontWeight="bold" のTypographyを使用します。
ViewOrganization.DescriptionDetailBlock
オプションのアイコンを持つラベル付きコンテンツを表示する再利用可能なブロックです。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
icon | SvgIconComponent | StickyNote2Outlined | ラベル用のMUIアイコンコンポーネント |
label | ReactNode | undefined | 詳細ブロックのラベルテキスト |
value | ReactNode | undefined | 詳細ブロックの値コンテンツ |
children | ReactNode | デフォルトレイアウト | カスタムコンテンツ - デフォルトのラベル/値レイアウトをオーバーライド |
className | string | undefined | スタイリング用の追加CSSクラス名 |
注意: このコンポーネントは direction="column"、spacing={2} を持つMUI Stack プロパティを継承します。
ViewOrganization.CompanyBanner
会社のロゴ/バナー画像を表示します。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
companyLogoUrl | string | コンテキストから | 会社ロゴ画像のURL |
className | string | undefined | スタイリング用の追加CSSクラス名 |
注意: このコンポーネントは DescriptionDetailBlock プロパティを継承します。ロゴ画像はデフォルトで height: 60 を持ちます。
ViewOrganization.CompanyName
Titleコンポーネントを使用して会社名を表示します。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
companyName | ReactNode | コンテキストから | 表示する会社名 |
children | ReactNode | companyName | コンテンツ - 提供された場合companyNameをオーバーライド |
className | string | undefined | スタイリング用の追加CSSクラス名 |
注意: このコンポーネントは ViewOrganization.Title プロパティを継承します。
ViewOrganization.Tags
会社タグのリストを表示します。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
companyTags | Array<{icon?: SvgIconComponent, value: string}> | コンテキストから | 表示するタグの配列 |
children | ReactNode | デフォルトタグ | カスタムタグコンテンツ - 提供された場合companyTagsをオーバーライド |
className | string | undefined | スタイリング用の追加CSSクラス名 |
注意: このコンポーネントは direction="column"、spacing={0.5} を持つMUI Stack プロパティを継承します。
ViewOrganization.AboutCompany
会社概要セクションを表示します。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
companyAbout | ReactNode | コンテキストから | 会社概要コンテンツ |
labels | Labels | コンテキストから | セクションタイトル用のラベル |
className | string | undefined | スタイリング用の追加CSSクラス名 |
注意: このコンポーネントは DescriptionDetailBlock プロパティを継承します。デフォルトで BusinessOutlined アイコンを使用します。デフォルトラベルは "About" です。
ViewOrganization.BusinessActivities
会社の事業活動セクションを表示します。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
companyActivities | ReactNode | コンテキストから | 会社活動コンテンツ |
labels | Labels | コンテキストから | セクションタイトル用のラベル |
className | string | undefined | スタイリング用の追加CSSクラス名 |
注意: このコンポーネントは DescriptionDetailBlock プロパティを継承します。デフォルトで StickyNote2Outlined アイコンを使用します。デフォルトラベルは "Business Activities" です。
ViewOrganization.CorporateInformation
登録/企業情報をテーブル形式で表示します。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
companyRegisteredInformation | Array<{label: ReactNode, value: string}> | コンテキストから | 登録情報項目の配列 |
className | string | undefined | スタイリング用の追加CSSクラス名 |
注意: このコンポーネントは DescriptionDetailBlock プロパティを継承します。項目はラベル(幅: 204px)と値の列を持つ行としてレンダリングされます。
🎨 Configuration examples
Custom Styled Components
import {Typography} from '@mui/material';
function StyledViewOrganizationComponents() {
return (
<ViewOrganization
labels={{
companyAbout: '会社について',
companyActivities: '事業内容',
companyRegisteredInformation: '情報',
}}
companyLogoUrl="/logo.png"
companyName="スタイル付き会社"
companyTags={[{icon: undefined, value: 'タグ1'}]}
companyAbout="会社概要テキスト"
companyActivities="事業内容テキスト"
companyRegisteredInformation={[{label: 'ID:', value: '123'}]}
>
<ViewOrganization.CompanyBanner
sx={{
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
borderRadius: '16px',
p: 4,
}}
/>
<ViewOrganization.CompanyName>
<Typography variant="h4" fontWeight="bold" color="primary">
カスタム会社名
</Typography>
</ViewOrganization.CompanyName>
<ViewOrganization.Tags />
<ViewOrganization.AboutCompany />
<ViewOrganization.BusinessActivities />
<ViewOrganization.CorporateInformation />
</ViewOrganization>
);
}
Block Override Pattern
function BlockOverrideViewOrganization() {
return (
<ViewOrganization
labels={{
companyAbout: '会社について',
companyActivities: '事業内容',
companyRegisteredInformation: '情報',
}}
companyLogoUrl="/logo.png"
companyName="会社"
companyTags={[{icon: undefined, value: 'タグ'}]}
companyAbout="会社概要"
companyActivities="事業内容"
companyRegisteredInformation={[{label: 'ID:', value: '1'}]}
>
{({defaultBlocks, defaultBlockOrder}) => ({
blocks: {
aboutCompany: {
...defaultBlocks.aboutCompany,
props: {
...defaultBlocks.aboutCompany.props,
sx: {
background: 'linear-gradient(135deg, #f5f7fa 0%, #e4e8eb 100%)',
borderRadius: '16px',
p: 3,
},
},
},
},
blockOrder: defaultBlockOrder,
})}
</ViewOrganization>
);
}
Comprehensive Organization Display
function ComprehensiveOrganization() {
const registeredInfo = [
{label: '会社登録:', value: 'REG-2024-12345'},
{label: '税務識別番号:', value: 'TIN-987654321'},
{label: '設立:', value: '2010年1月'},
{label: '本社:', value: '東京都渋谷区'},
{label: '従業員数:', value: '500名以上'},
{label: '業界:', value: 'テクノロジー / ソフトウェア'},
];
return (
<ViewOrganization
labels={{
companyAbout: '🏢 私たちの会社について',
companyActivities: '💼 私たちのサービス',
companyRegisteredInformation: '📋 企業情報',
}}
companyLogoUrl="/img/logo-large.png"
companyName="グローバルテックソリューション株式会社"
companyTags={[
{icon: undefined, value: '🌍 グローバル展開'},
{icon: undefined, value: '🏆 業界リーダー'},
{icon: undefined, value: '🚀 イノベーション推進'},
{icon: undefined, value: '👥 500名以上の従業員'},
]}
companyAbout={
<div>
<p>
グローバルテックソリューション株式会社は、革新的なデジタルソリューションを通じて企業の変革に取り組む業界をリードするテクノロジー企業です。10年以上の経験を持つ私たちは、数百社の企業がデジタルトランスフォーメーションの目標を達成するのを支援してきました。
</p>
<p style={{marginTop: '12px'}}>
エキスパートエンジニア、デザイナー、コンサルタントのチームが協力して、ビジネスの成長と効率を促進する最先端のソリューションを提供しています。
</p>
</div>
}
companyActivities={
<ul style={{margin: 0, paddingLeft: '20px'}}>
<li>エンタープライズソフトウェア開発</li>
<li>クラウドインフラストラクチャソリューション</li>
<li>AI & 機械学習サービス</li>
<li>デジタルトランスフォーメーションコンサルティング</li>
<li>サイバーセキュリティサービス</li>
<li>24/7 テクニカルサポート</li>
</ul>
}
companyRegisteredInformation={registeredInfo}
sx={{maxWidth: '800px', mx: 'auto'}}
>
<ViewOrganization.CompanyBanner />
<ViewOrganization.CompanyName />
<ViewOrganization.Tags />
<ViewOrganization.AboutCompany />
<ViewOrganization.BusinessActivities />
<ViewOrganization.CorporateInformation />
</ViewOrganization>
);
}
🔧 TypeScript サポート
包括的な型定義による完全なTypeScriptサポート:
import {SvgIconComponent} from '@mui/icons-material';
import {StackProps} from '@mui/material';
import {ViewOrganization} from '@nodeblocks/frontend-view-organization-block';
import {ReactNode} from 'react';
// Labels interface
interface Labels {
companyAbout?: ReactNode;
companyActivities?: ReactNode;
companyRegisteredInformation?: ReactNode;
}
// Tag interface
interface CompanyTag {
icon: SvgIconComponent | undefined;
value: string;
}
// Registered information interface
interface RegisteredInfo {
label: ReactNode;
value: string;
}
// Main component props interface
interface ViewOrganizationProps extends Omit<StackProps, 'children'> {
labels: Labels;
companyLogoUrl?: string;
companyName?: ReactNode;
companyTags?: CompanyTag[];
companyAbout?: ReactNode;
companyActivities?: ReactNode;
companyRegisteredInformation?: RegisteredInfo[];
}
function TypedViewOrganizationExample() {
const organizationData: Omit<ViewOrganizationProps, 'children'> = {
labels: {
companyAbout: '私たちの会社について',
companyActivities: '事業内容',
companyRegisteredInformation: '法的情報',
},
companyLogoUrl: 'https://example.com/logo.png',
companyName: 'テック・ソリューション株式会社',
companyTags: [
{icon: undefined, value: 'テクノロジー'},
{icon: undefined, value: '東京'},
],
companyAbout: '私たちは業界をリードするテクノロジー企業です...',
companyActivities: 'ソフトウェア開発、コンサルティング...',
companyRegisteredInformation: [
{label: '法人番号:', value: '12345678'},
{label: '税務ID:', value: 'TAX-987654321'},
],
};
return (
<ViewOrganization {...organizationData}>
<ViewOrganization.CompanyBanner />
<ViewOrganization.CompanyName />
<ViewOrganization.Tags />
<ViewOrganization.AboutCompany />
<ViewOrganization.BusinessActivities />
<ViewOrganization.CorporateInformation />
</ViewOrganization>
);
}
📝 注意事項
- ルートコンポーネントは
direction="column"、spacing={3}、sx={{ p: 3 }}のパディングを持つMUIのStackを使用します - アイコンはMUI
SvgIconComponent型でなければなりません(例:BusinessOutlined、LocationOnOutlined) ViewOrganization.TagはfontSize="small"とcolor="primary"でアイコンを表示しますViewOrganization.Titleはvariant="h6"とfontWeight="bold"を持つMUI Typographyを使用しますViewOrganization.DescriptionDetailBlockはAboutCompany、BusinessActivities、CorporateInformationの基本コンポーネントですViewOrganization.AboutCompanyはデフォルトでBusinessOutlinedアイコンを使用し、フォールバックラベルは "About" ですViewOrganization.BusinessActivitiesはデフォルトでStickyNote2Outlinedアイコンを使用し、フォールバックラベルは "Business Activities" ですViewOrganization.CorporateInformationは境界線と固定ラベル幅(204px)を持つ行として項目をレンダリングします- 会社バナーロゴはデフォルトで60pxの高さを持ちます
- すべてのサブコンポーネントはそれぞれのMUIコンポーネントプロパティを継承し、スタイリング用の
sxプロパティをサポートします - ブロックオーバーライドパターンにより、デフォルトブロックのカスタマイズ、置換、並べ替えが可能です
React、TypeScript、MUIを使用して❤️で構築されました。