Skip to content

Commit d7e8c01

Browse files
authored
Merge pull request #10581 from growilabs/feat/page-tree-virtualization
feat: PageTree Virtualization
2 parents d16a9c0 + 877b8ba commit d7e8c01

File tree

85 files changed

+6263
-1636
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+6263
-1636
lines changed

.serena/memories/apps-app-jotai-directory-structure.md

Lines changed: 67 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ states/
1313
│ ├── untitled-page.ts # 無題ページ状態 ✅
1414
│ ├── page-abilities.ts # ページ権限判定状態 ✅ DERIVED ATOM!
1515
│ ├── unsaved-warning.ts # 未保存警告状態 ✅ JOTAI PATTERN!
16-
│ ├── page-tree-desc-count-map.ts # ページツリー子孫カウント ✅ JOTAI PATTERN!
1716
│ └── modal/ # 個別モーダルファイル ✅
1817
│ ├── page-create.ts # ページ作成モーダル ✅
1918
│ ├── page-delete.ts # ページ削除モーダル ✅
@@ -45,6 +44,25 @@ states/
4544
└── states/ # OpenAI専用状態 ✅
4645
├── index.ts # exports ✅
4746
└── unified-merge-view.ts # UnifiedMergeView状態 ✅
47+
48+
features/ # Feature Directory Pattern ✅
49+
└── page-tree/ # ページツリー機能 ✅ (NEW!)
50+
├── index.ts # メインエクスポート
51+
├── client/
52+
│ ├── components/ # 汎用UIコンポーネント
53+
│ │ ├── SimplifiedItemsTree.tsx
54+
│ │ ├── TreeItemLayout.tsx
55+
│ │ └── SimpleItemContent.tsx
56+
│ ├── hooks/ # 汎用フック
57+
│ │ ├── use-data-loader.ts
58+
│ │ └── use-scroll-to-selected-item.ts
59+
│ ├── interfaces/ # インターフェース定義
60+
│ │ └── index.ts # TreeItemProps, TreeItemToolProps
61+
│ └── states/ # Jotai状態 ✅
62+
│ ├── page-tree-update.ts # ツリー更新状態
63+
│ └── page-tree-desc-count-map.ts # 子孫カウント状態
64+
└── constants/
65+
└── index.ts # ROOT_PAGE_VIRTUAL_ID
4866
```
4967

5068
## 📋 ファイル配置ルール
@@ -60,9 +78,36 @@ states/
6078
- **グローバル状態**: `global/` ディレクトリ
6179
- **通信系**: `socket-io/` ディレクトリ
6280

63-
### 機能別専用states (`states/features/`)
64-
- **OpenAI機能**: `features/openai/client/states/`
65-
- **将来の機能**: `features/{feature-name}/client/states/`
81+
### 機能別専用states (`states/features/` および `features/`)
82+
83+
**OpenAI機能**: `states/features/openai/client/states/`
84+
**ページツリー機能**: `features/page-tree/client/states/` ✅ (Feature Directory Pattern)
85+
86+
### Feature Directory Pattern (新パターン) ✅
87+
88+
`features/{feature-name}/` パターンは、特定機能に関連するコンポーネント、フック、状態、定数をすべて一箇所に集約する構造。
89+
90+
**適用例**: `features/page-tree/`
91+
```
92+
features/page-tree/
93+
├── index.ts # 全エクスポートの集約
94+
├── client/
95+
│ ├── components/ # UIコンポーネント
96+
│ ├── hooks/ # カスタムフック
97+
│ ├── interfaces/ # 型定義
98+
│ └── states/ # Jotai状態
99+
└── constants/ # 定数
100+
```
101+
102+
**インポート方法**:
103+
```typescript
104+
import {
105+
SimplifiedItemsTree,
106+
TreeItemLayout,
107+
usePageTreeInformationUpdate,
108+
ROOT_PAGE_VIRTUAL_ID
109+
} from '~/features/page-tree';
110+
```
66111

67112
## 🏷️ ファイル命名規則
68113

@@ -119,13 +164,29 @@ states/context.ts → _atomsForDerivedAbilities
119164
## 🎯 今後の拡張指針
120165

121166
### 新規機能追加時
122-
1. **機能専用度評価**: 汎用 → `states/ui/`、専用 → `states/features/`
167+
1. **機能専用度評価**: 汎用 → `states/ui/`、専用 → `features/{feature-name}/client/states/`
123168
2. **複雑度評価**: シンプル → 単一ファイル、複雑 → ディレクトリ
124169
3. **依存関係確認**: 既存atomの活用可能性
125170
4. **命名規則遵守**: 確立された命名パターンに従う
171+
5. **Feature Directory Pattern検討**: 複数のコンポーネント・フック・状態が関連する場合は `features/` 配下に集約
126172

127173
### ディレクトリ構造維持
128174
- **責務単一原則**: 1ファイル = 1機能・責務
129175
- **依存関係最小化**: 循環参照の回避
130176
- **拡張性**: 将来の機能追加を考慮した構造
131-
- **検索性**: ファイル名から機能が推測できる命名
177+
- **検索性**: ファイル名から機能が推測できる命名
178+
179+
### Feature Directory Pattern 採用基準
180+
以下の条件を満たす場合は `features/` 配下に配置:
181+
- 複数のUIコンポーネントが関連している
182+
- 専用のカスタムフックがある
183+
- 専用のJotai状態がある
184+
- 機能として独立性が高い
185+
186+
****: `features/page-tree/` は SimplifiedItemsTree, TreeItemLayout, useDataLoader, page-tree-update.ts などが密接に関連
187+
188+
---
189+
190+
## 📝 最終更新日
191+
192+
2025-11-28 (Feature Directory Pattern 追加)

0 commit comments

Comments
 (0)