@@ -8,26 +8,51 @@ import { QiitaItem } from './models/qiitaItemsNode';
88
99const localize = nls . loadMessageBundle ( ) ;
1010
11- class QiitaItemsProvider implements TreeDataProvider < TreeItem > {
12- private _onDidChangeTreeData : EventEmitter < TreeItem | undefined > = new EventEmitter < TreeItem | undefined > ( ) ;
13- public readonly onDidChangeTreeData : Event < TreeItem | undefined > = this . _onDidChangeTreeData . event ;
11+ type NodeTypes = ExpandItems | QiitaItem ;
12+
13+ class QiitaItemsProvider implements TreeDataProvider < NodeTypes > {
14+ /** TreeDataProviderの変更を制御するためのEventEmitter */
15+ private _onDidChangeTreeData : EventEmitter < NodeTypes | undefined > = new EventEmitter < NodeTypes | undefined > ( ) ;
16+
17+ /** 外部から参照するためのプロパティ */
18+ public readonly onDidChangeTreeData : Event < NodeTypes | undefined > = this . _onDidChangeTreeData . event ;
1419
1520 /** 取得した投稿 */
16- protected items : Item [ ] = [ ] ;
21+ public items : Item [ ] = [ ] ;
1722
1823 /** 全件取得したかどうか */
19- protected done = false ;
24+ public done = false ;
2025
2126 /** 自分の投稿の配列を返すイテラブル */
2227 protected itemsIterable = client . fetchMyItems ( { page : 1 , per_page : 60 } ) ;
2328
2429 /**
2530 * ツリーデータを更新
2631 */
27- public async refresh ( ) {
32+ protected async refresh ( ) {
2833 this . _onDidChangeTreeData . fire ( ) ;
2934 }
3035
36+ /**
37+ * イテラブルを初期化して最初のページを再取得
38+ */
39+ public async refreshItems ( ) {
40+ const { value : items , done } = await this . itemsIterable . next ( 'reset' ) ;
41+ this . items = items ;
42+ this . done = done ;
43+ this . refresh ( ) ;
44+ }
45+
46+ /**
47+ * イテラブルのnextを呼び出し
48+ */
49+ public async expandItems ( ) {
50+ const { value : items , done } = await this . itemsIterable . next ( ) ;
51+ this . items . concat ( items ) ;
52+ this . done = done ;
53+ this . refresh ( ) ;
54+ }
55+
3156 /**
3257 * `element` に対応するツリーアイテムを取得
3358 * @param element 取得するelement
@@ -42,13 +67,13 @@ class QiitaItemsProvider implements TreeDataProvider<TreeItem> {
4267 * @param element 取得するelement
4368 */
4469 public async getChildren ( ) : Promise < ( QiitaItem | ExpandItems ) [ ] > {
45- if ( ! itemsStore . items || ! itemsStore . items . length ) {
46- await itemsStore . refreshItems ( ) ;
70+ if ( ! this . items . length ) {
71+ await this . refreshItems ( ) ;
4772 }
4873
4974 const children = [ ] ;
5075
51- for ( const item of itemsStore . items ) {
76+ for ( const item of this . items ) {
5277 const command = {
5378 command : 'qiita.openItem' ,
5479 title : localize ( 'commands.openItem.title' , '開く' ) ,
@@ -59,30 +84,12 @@ class QiitaItemsProvider implements TreeDataProvider<TreeItem> {
5984 }
6085
6186 // アイテムが最後まで読み込まれていない場合、「さらに読み込む...」を挿入する
62- if ( ! itemsStore . done ) {
87+ if ( ! this . done ) {
6388 children . push ( new ExpandItems ( TreeItemCollapsibleState . None ) ) ;
6489 }
6590
6691 return children ;
6792 }
68-
69- /**
70- * イテラブルを初期化して最初のページを再取得
71- */
72- public async refreshItems ( ) {
73- const { value : items , done } = await this . itemsIterable . next ( 'reset' ) ;
74- this . items = items ;
75- this . done = done ;
76- }
77-
78- /**
79- * イテラブルのnextを呼び出し
80- */
81- public async expandItems ( ) {
82- const { value : items , done } = await this . itemsIterable . next ( ) ;
83- this . items . concat ( items ) ;
84- this . done = done ;
85- }
8693}
8794
8895export const qiitaItemsProvider = new QiitaItemsProvider ( ) ;
0 commit comments