@@ -3,17 +3,14 @@ import { commands, Uri, window, workspace } from 'vscode';
33import * as nls from 'vscode-nls' ;
44import { client } from '../client' ;
55import { configuration } from '../configuration' ;
6- import { tagQuickPickCreator } from '../quickpicks/tagQuickPickCreator' ;
7- import { titleInputBoxCreator } from '../quickpicks/titleInputBoxCreator' ;
6+ import { tagQuickPickCreator , validateTagQuickPick } from '../quickpicks/tagQuickPickCreator' ;
7+ import { titleInputBoxCreator , validateTitleInputBox } from '../quickpicks/titleInputBoxCreator' ;
88import { privateLabel , visibilityQuickPickCreator } from '../quickpicks/visibilityQuickPickCreator' ;
9- import { createMultiStepInput } from '../utils/createMultiStepInput' ;
109import { handleErrorMessage } from '../utils/errorHandler' ;
1110import { getFilenameFromPath } from '../utils/getFilenameFromPath' ;
1211
1312const localize = nls . loadMessageBundle ( ) ;
1413
15-
16-
1714/**
1815 * アクティブなテキストエディタから投稿を公開するコマンドパレット向け関数
1916 * @param resource コマンドがexplorerから発火した際に渡される引数
@@ -32,10 +29,9 @@ export async function compose (resource?: { path: string }) {
3229 if ( resource && resource . path ) {
3330 options . title = getFilenameFromPath ( resource . path ) ;
3431 options . body = await workspace . openTextDocument ( resource . path ) . then ( ( document ) => document . getText ( ) ) ;
35- }
3632
3733 // テキストエディタから発火した場合
38- if ( window . activeTextEditor ) {
34+ } else if ( window . activeTextEditor ) {
3935 options . title = getFilenameFromPath ( window . activeTextEditor . document . fileName ) ;
4036 options . body = window . activeTextEditor . document . getText ( ) ;
4137 }
@@ -44,26 +40,49 @@ export async function compose (resource?: { path: string }) {
4440 const tagsQuickPick = tagQuickPickCreator ( ) ;
4541 const visibilityQuickPick = visibilityQuickPickCreator ( ) ;
4642
43+ // ステップ数を追加
44+ [ titleInputBox , tagsQuickPick , visibilityQuickPick ] . forEach ( ( step , i , steps ) => {
45+ step . totalSteps = steps . length ;
46+ step . step = i ;
47+ } ) ;
48+
4749 // titleInputBoxからタイトルを代入
4850 titleInputBox . onDidAccept ( ( ) => {
49- options . title = titleInputBox . value ;
51+ if ( ! validateTitleInputBox ( titleInputBox ) ) {
52+ window . showErrorMessage ( localize (
53+ 'quickpicks.titleInputBox.failure.validationError' ,
54+ 'タイトルは1文字以上255文字以内で入力してください。' ,
55+ ) ) ;
56+ } else {
57+ options . title = titleInputBox . value ;
58+ titleInputBox . hide ( ) ;
59+ tagsQuickPick . show ( ) ;
60+ }
5061 } ) ;
5162
5263 // tagQuickPickからタグを代入
5364 tagsQuickPick . onDidAccept ( ( ) => {
54- options . tags = tagsQuickPick . selectedItems . map ( ( item ) => ( {
55- name : item . label ,
56- versions : [ ] ,
57- } ) ) ;
65+ if ( ! validateTagQuickPick ( tagsQuickPick ) ) {
66+ window . showErrorMessage ( localize (
67+ 'quickpicks.tagQuickPick.failure.validationError' ,
68+ 'タグは1つ以上5つ以内で選択してください。' ,
69+ ) ) ;
70+ } else {
71+ options . tags = tagsQuickPick . selectedItems . map ( ( item ) => ( {
72+ name : item . label ,
73+ versions : [ ] ,
74+ } ) ) ;
75+ tagsQuickPick . hide ( ) ;
76+ visibilityQuickPick . show ( ) ;
77+ }
5878 } ) ;
5979
6080 // visibilityQuickPick終了時に公開状態を代入してQiita.createItemを呼び出し
6181 visibilityQuickPick . onDidAccept ( async ( ) => {
6282 options . private = visibilityQuickPick . selectedItems [ 0 ] . label === privateLabel ;
83+ visibilityQuickPick . hide ( ) ;
6384
6485 try {
65- visibilityQuickPick . hide ( ) ;
66-
6786 const item = await client . createItem ( options ) ;
6887
6988 const openInBrowser = localize (
@@ -82,16 +101,11 @@ export async function compose (resource?: { path: string }) {
82101 if ( result === openInBrowser ) {
83102 commands . executeCommand ( 'vscode.open' , Uri . parse ( item . url ) ) ;
84103 }
85-
86- return ;
87104 } catch ( error ) {
88- return handleErrorMessage ( error ) ;
105+ handleErrorMessage ( error ) ;
89106 }
90107 } ) ;
91108
92- createMultiStepInput ( [
93- titleInputBox ,
94- tagsQuickPick ,
95- visibilityQuickPick ,
96- ] ) ( ) ;
109+ // 1つ目のステップから帰納的に呼び出し
110+ titleInputBox . show ( ) ;
97111}
0 commit comments