Skip to content

Commit 0232a96

Browse files
committed
各コマンド発火時にツリーデータをリフレッシュ
1 parent ff61ac2 commit 0232a96

File tree

7 files changed

+53
-30
lines changed

7 files changed

+53
-30
lines changed

src/commands/compose.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { commands, Uri, window, workspace } from 'vscode';
33
import * as nls from 'vscode-nls';
44
import { client } from '../client';
55
import { configuration } from '../configuration';
6+
import { qiitaItemsProvider } from '../explorer/qiitaItems';
67
import { tagQuickPickCreator, validateTagQuickPick } from '../quickpicks/tagQuickPickCreator';
78
import { titleInputBoxCreator, validateTitleInputBox } from '../quickpicks/titleInputBoxCreator';
89
import { privateLabel, visibilityQuickPickCreator } from '../quickpicks/visibilityQuickPickCreator';
@@ -84,6 +85,7 @@ export async function compose (resource?: { path: string }) {
8485

8586
try {
8687
const item = await client.createItem(options);
88+
qiitaItemsProvider.refresh();
8789

8890
const openInBrowser = localize(
8991
'commands.compose.openInBrowser',

src/commands/deleteItem.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Item } from 'qiita-js-2';
22
import { window } from 'vscode';
33
import * as nls from 'vscode-nls';
44
import { client } from '../client';
5+
import { qiitaItemsProvider } from '../explorer/qiitaItems';
56
import { handleErrorMessage } from '../utils/errorHandler';
67

78
const localize = nls.loadMessageBundle();
@@ -34,6 +35,7 @@ export async function deleteItem (resource: { item: Item }) {
3435

3536
try {
3637
await client.deleteItem(resource.item.id);
38+
qiitaItemsProvider.refresh();
3739

3840
return window.showInformationMessage(localize(
3941
'commands.deleteItem.success',

src/commands/editTags.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Item } from 'qiita-js-2';
22
import { QuickPickItem, window } from 'vscode';
33
import * as nls from 'vscode-nls';
44
import { client } from '../client';
5+
import { qiitaItemsProvider } from '../explorer/qiitaItems';
56
import { makeQuickPickItemFromTag, tagQuickPickCreator, validateTagQuickPick } from '../quickpicks/tagQuickPickCreator';
67
import { handleErrorMessage } from '../utils/errorHandler';
78

@@ -46,8 +47,8 @@ export async function editTags (resource: { item: Item }) {
4647

4748
try {
4849
quickPick.hide();
49-
5050
await updater(item, quickPick.selectedItems);
51+
qiitaItemsProvider.refresh();
5152

5253
return window.showInformationMessage(localize(
5354
'commands.editTags.success',

src/commands/editTitle.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Item } from 'qiita-js-2';
22
import { window } from 'vscode';
33
import * as nls from 'vscode-nls';
44
import { client } from '../client';
5+
import { qiitaItemsProvider } from '../explorer/qiitaItems';
56
import { titleInputBoxCreator, validateTitleInputBox } from '../quickpicks/titleInputBoxCreator';
67
import { handleErrorMessage } from '../utils/errorHandler';
78

@@ -25,12 +26,12 @@ export function editTitle (resource: { item: Item }) {
2526

2627
try {
2728
inputBox.hide();
28-
2929
await client.updateItem(item.id, {
3030
body: item.body,
3131
tags: item.tags,
3232
title: inputBox.value,
3333
});
34+
qiitaItemsProvider.refresh();
3435

3536
return window.showInformationMessage(localize(
3637
'commands.editTitle.success',

src/commands/makePublic.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Item } from 'qiita-js-2';
22
import { window } from 'vscode';
33
import * as nls from 'vscode-nls';
44
import { client } from '../client';
5+
import { qiitaItemsProvider } from '../explorer/qiitaItems';
56
import { handleErrorMessage } from '../utils/errorHandler';
67

78
const localize = nls.loadMessageBundle();
@@ -46,6 +47,7 @@ export async function makePublic (resource: { item: Item }) {
4647
tags: resource.item.tags,
4748
private: false,
4849
});
50+
qiitaItemsProvider.refresh();
4951

5052
return window.showInformationMessage(localize(
5153
'commands.makePublic.success',

src/explorer/qiitaItems.ts

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,48 @@
11
import { Item } from 'qiita-js-2';
2-
import { Command, TreeDataProvider, TreeItem, TreeItemCollapsibleState, Uri } from 'vscode';
2+
import {
3+
Command,
4+
Event,
5+
EventEmitter,
6+
TreeDataProvider,
7+
TreeItem,
8+
TreeItemCollapsibleState,
9+
Uri,
10+
} from 'vscode';
311
import * as nls from 'vscode-nls';
412
import { client } from '../client';
513

614
const localize = nls.loadMessageBundle();
715

8-
export class QiitaItemProvider implements TreeDataProvider<QiitaItem> {
16+
export class QiitaItem extends TreeItem {
17+
/**
18+
* "Qiitaの投稿" ビューに表示されるアイテム
19+
* @param item Qiitaの投稿
20+
* @param collapsibleState アイテムが折り畳まれているかの状態
21+
* @param command クリック時に発火するコマンド
22+
*/
23+
constructor (
24+
public readonly item: Item,
25+
public readonly collapsibleState: TreeItemCollapsibleState,
26+
public readonly command: Command,
27+
) {
28+
super(item.title, collapsibleState);
29+
}
30+
31+
public resourceUri = Uri.parse('file:///text.md'); // Hack: アイコンをMarkdownのものに
32+
public contextValue = 'qiitaItems';
33+
}
34+
35+
36+
class QiitaItemsProvider implements TreeDataProvider<QiitaItem> {
37+
private _onDidChangeTreeData: EventEmitter<QiitaItem | undefined> = new EventEmitter<QiitaItem | undefined>();
38+
public readonly onDidChangeTreeData: Event<QiitaItem | undefined> = this._onDidChangeTreeData.event;
39+
40+
/**
41+
* ツリーデータを更新
42+
*/
43+
public refresh () {
44+
this._onDidChangeTreeData.fire();
45+
}
946

1047
/**
1148
* `element` に対応するツリーアイテムを取得
@@ -20,11 +57,7 @@ export class QiitaItemProvider implements TreeDataProvider<QiitaItem> {
2057
* 小要素を取得
2158
* @param element 取得するelement
2259
*/
23-
public async getChildren (/* element?: QiitaItem */): Promise<QiitaItem[]> {
24-
// if (element) {
25-
// return array of item
26-
// }
27-
60+
public async getChildren (): Promise<QiitaItem[]> {
2861
const { value: items } = await client.fetchMyItems({page: 1, per_page: 60}).next();
2962

3063
return items.map((item) => {
@@ -39,22 +72,4 @@ export class QiitaItemProvider implements TreeDataProvider<QiitaItem> {
3972
}
4073
}
4174

42-
export class QiitaItem extends TreeItem {
43-
/**
44-
* "Qiitaの投稿" ビューに表示されるアイテム
45-
* @param item Qiitaの投稿
46-
* @param collapsibleState アイテムが折り畳まれているかの状態
47-
* @param command クリック時に発火するコマンド
48-
*/
49-
constructor (
50-
public readonly item: Item,
51-
public readonly collapsibleState: TreeItemCollapsibleState,
52-
public readonly command: Command,
53-
) {
54-
super(item.title, collapsibleState);
55-
}
56-
57-
public resourceUri = Uri.parse('file:///text.md');
58-
59-
public contextValue = 'qiitaItems';
60-
}
75+
export const qiitaItemsProvider = new QiitaItemsProvider();

src/extension.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ import { editTitle } from './commands/editTitle';
77
import { makePublic } from './commands/makePublic';
88
import { openItem } from './commands/openItem';
99
import { openItemExternal } from './commands/openItemExternal';
10-
import { QiitaItemProvider } from './explorer/qiitaItems';
10+
import { qiitaItemsProvider } from './explorer/qiitaItems';
1111
import './polyfills';
1212

1313
nls.config(process.env.VSCODE_NLS_CONFIG as nls.Options)();
1414

1515
export function activate (context: ExtensionContext) {
16-
window.registerTreeDataProvider('qiitaItems', new QiitaItemProvider());
16+
window.registerTreeDataProvider('qiitaItems', qiitaItemsProvider);
1717

1818
context.subscriptions.push(
1919
commands.registerCommand('qiita.openItem', openItem(context.storagePath)),

0 commit comments

Comments
 (0)