77 * -----------------------------------------------------------------------------------------*/
88
99import { log , logError , logDebug , logWarn } from '@helpers/dev'
10- import { chooseOption , chooseFolder } from '@helpers/userInput'
10+ import { chooseOption , chooseFolder , showMessageYesNo } from '@helpers/userInput'
1111import pluginJson from '../../plugin.json'
1212import FrontmatterModule from '../support/modules/FrontmatterModule'
1313import { normalizeToNotePlanFilename } from '../utils'
@@ -519,10 +519,32 @@ export async function templateExists(title: string = ''): Promise<boolean> {
519519export async function getFolder ( folder : string = '' , promptMessage : string = 'Select folder ') : Promise < string > {
520520 let selectedFolder = folder
521521 const folders = DataStore . folders
522- if ( / s e l e c t | c h o o s e / i. test ( folder ) || Editor ?. type === 'Calendar' || selectedFolder . length === 0 ) {
523- selectedFolder = await chooseFolder ( promptMessage , false , true )
524- } else if ( folder == '<current>' ) {
525- const currentFilename = Editor . note ?. filename
522+ const isSelectFolder = / < s e l e c t | < c h o o s e / i. test ( folder )
523+ const startFolder =
524+ ( folder . startsWith ( '<select ' ) || folder . startsWith ( '<SELECT ' ) || folder . startsWith ( '<choose ' ) || folder . startsWith ( '<CHOOSE ' ) ) && folder . endsWith ( '>' )
525+ ? folder . slice ( 7 , - 1 ) . trim ( )
526+ : ''
527+ const isCurrentFolder = / < c u r r e n t > / i. test ( folder )
528+ let folderExists = ( ! isSelectFolder && folders . includes ( folder ) ) || ( isSelectFolder && startFolder && folders . includes ( startFolder ) )
529+ logDebug (
530+ pluginJson ,
531+ `getFolder: folder="${ folder } " promptMessage="${ promptMessage } " selectedFolder="${ selectedFolder } " isSelectFolder="${ String ( isSelectFolder ) } " folderExists="${ String (
532+ folderExists ,
533+ ) } "`,
534+ )
535+ let createFolder = false
536+ if ( selectedFolder && ! isSelectFolder && ! folderExists && ! isCurrentFolder ) {
537+ const wantToCreateFolder = await showMessageYesNo ( `Folder "${ folder } " does not exist. Create it?` , [ 'Yes' , 'No' ] , 'Create Folder?' )
538+ if ( wantToCreateFolder === 'No' ) {
539+ selectedFolder = ''
540+ } else {
541+ folderExists = true // let it through and the note will be created in the new folder
542+ }
543+ }
544+ if ( ( isSelectFolder && ! startFolder ) || ( ! isCurrentFolder && ! folderExists ) || ( isCurrentFolder && Editor . type === 'Calendar' ) ) {
545+ const startFolder = ( selectedFolder = await chooseFolder ( promptMessage , false , true ) )
546+ } else if ( isCurrentFolder ) {
547+ const currentFilename = Editor ?. filename
526548
527549 if ( typeof currentFilename === 'undefined' ) {
528550 selectedFolder = await chooseFolder ( promptMessage , false , true )
@@ -533,7 +555,7 @@ export async function getFolder(folder: string = '', promptMessage: string = 'Se
533555 selectedFolder = parts . join ( '/' )
534556 }
535557 }
536- } else if ( ( folder . startsWith ( '<select ' ) || folder . startsWith ( '<SELECT ' ) || folder . startsWith ( '<choose ' ) || folder . startsWith ( '<CHOOSE ' ) ) && folder . endsWith ( '>' ) ) {
558+ } else if ( startFolder ) {
537559 // find the value inside the <select> tag
538560 // get everything after <select and before > including spaces
539561 const f = folder . slice ( 7 , - 1 ) . trim ( )
0 commit comments