@@ -80,29 +80,33 @@ import {
8080
8181 onMount (async () => {
8282
83+
8384 $userSession = user
8485
8586 const getLFS = async () => {
86- const response = await fetch (' /api/settings/filtered-folder-structure' , {
87- method: ' GET'
88- })
87+ try {
88+ const response = await fetch (' /api/settings/filtered-folder-structure' , {
89+ method: ' GET'
90+ })
8991
90- if (response .ok ) {
91- return (await response .json ()) as TreeViewNode
92- } else {
93- toastStore .trigger (errorToast (response .statusText ))
94- return {} as TreeViewNode
92+ if (response .ok ) {
93+ lfs = (await response .json ()) as TreeViewNode
94+ }
95+
96+ } catch (err ) {
97+ toastStore .trigger (errorToast (' Failed to fetch local file system structure: ' ))
9598 }
9699 }
97100
98- lfs = await getLFS ();
101+ getLFS (). catch (() => { /* ignore error */ })
99102
100103 fileStorage = {
101104 storeFiles: false ,
102105 provider: IO .Dropbox ,
103106 provider_id: ' ' ,
104107 path: ' /upload'
105108 }
109+
106110 inputAliases = hasConnections ($processSettingsStore .input .provider ) ? getCloudProviderAliases ($userSession ?.connections [$processSettingsStore .input .provider .toLowerCase ()]) : new Map ()
107111 outputAliases = hasConnections ($processSettingsStore .output .provider ) ? getCloudProviderAliases ($userSession ?.connections [$processSettingsStore .output .provider .toLowerCase ()]) : new Map ()
108112 fileUploadAliases = hasConnections (fileStorage .provider ) ? getCloudProviderAliases ($userSession ?.connections [fileStorage .provider .toLowerCase ()]) : new Map ()
@@ -118,6 +122,7 @@ import {
118122 goto (` /processes?pipeline_id=${params .get (' pipeline_id' )} ` )
119123 }
120124
125+
121126 $processSettingsStore .pipeline_id =
122127 params .get (' pipeline_id' ) || $processSettingsStore .pipeline_id
123128
@@ -290,7 +295,7 @@ import {
290295 await goto (` /pipelines/${$processSettingsStore .pipeline_id } ` )
291296 }
292297 } else {
293- toastStore .trigger (errorToast (JSON . stringify ( response .body )))
298+ toastStore .trigger (errorToast (( await response .text () )))
294299 starting = false
295300 }
296301
@@ -300,7 +305,7 @@ import {
300305
301306 const getFolderStructure = async (provider : IOProvider , providerId : string , isReset : boolean ) => {
302307
303- if (! hasFolderPicker (provider , true )) {
308+ if (! hasFolderPicker (provider , true ) || ! providerId ) {
304309 return undefined ;
305310 }
306311
@@ -385,6 +390,31 @@ import {
385390 let isOutputError = false ;
386391 let isFileUploadError = false ;
387392
393+
394+ $ : if (! fileUploadTree && ! isFileUploadError && fileStorage .provider_id && hasConnections (fileStorage .provider .toLowerCase ())) {
395+ setFileUploadTree (
396+ fileStorage .provider ,
397+ fileStorage .provider_id ,
398+ false
399+ )
400+ }
401+
402+ $ : if (! inputTree && ! isInputError && $processSettingsStore .input .provider_id && hasConnections ($processSettingsStore .input .provider .toLowerCase ())) {
403+ setInputTree (
404+ $processSettingsStore .input .provider ,
405+ $processSettingsStore .input .provider_id ,
406+ false
407+ )
408+ }
409+
410+ $ : if (! outputTree && ! isOutputError && $processSettingsStore .output .provider_id && hasConnections ($processSettingsStore .output .provider .toLowerCase ())) {
411+ setOutputTree (
412+ $processSettingsStore .output .provider ,
413+ $processSettingsStore .output .provider_id ,
414+ false
415+ )
416+ }
417+
388418 $ : isInputError =
389419 ! [IO .File , IO .Text , IO .None , IO .LocalDrive ].includes ($processSettingsStore .input .provider as IO ) &&
390420 ! hasConnections ($processSettingsStore .input .provider );
@@ -521,24 +551,31 @@ import {
521551 label =" Source"
522552 options ={IO_INPUT }
523553 bind:value ={$processSettingsStore .input .provider }
554+ on:change ={() => {
555+ $processSettingsStore .input .provider_id = ' '
556+ $processSettingsStore .input .path = ' '
557+ inputTree = undefined
558+ }}
524559 />
525560 </div >
526561 {#if ! isInputError && ! equals ($processSettingsStore .input .provider , IO .Text )}
527562 {#if ! isStatelessProvider ($processSettingsStore .input .provider ) && hasConnections ($processSettingsStore .input .provider .toLowerCase ())}
528- <Dropdown
529- label =" Connection Alias"
530- name =" input-alias"
531- options ={inputAliases }
532- initFirst ={true }
533- bind:value ={$processSettingsStore .input .provider_id }
534- on:change ={() => {
535- setInputTree (
536- $processSettingsStore .input .provider ,
537- $processSettingsStore .input .provider_id ,
538- false
539- )
540- }}
541- />
563+ {#key $processSettingsStore .input .provider }
564+ <Dropdown
565+ label =" Connection Alias"
566+ name =" input-alias"
567+ options ={inputAliases }
568+ initFirst ={true }
569+ bind:value ={$processSettingsStore .input .provider_id }
570+ on:change ={() => {
571+ setInputTree (
572+ $processSettingsStore .input .provider ,
573+ $processSettingsStore .input .provider_id ,
574+ false
575+ )
576+ }}
577+ />
578+ {/ key }
542579 {/if }
543580 <Dropdown
544581 label =" File extension"
@@ -654,7 +691,7 @@ import {
654691 {/if }
655692 {/if }
656693 {:else if equals ($processSettingsStore .input .provider , IO .LocalDrive ) }
657- {#if Object .keys (lfs ).length > 0 }
694+ {#if lfs && Object .keys (lfs ).length > 0 }
658695 <FolderStructure
659696 tree ={lfs }
660697 label =" Folder Picker"
@@ -791,24 +828,31 @@ import {
791828 label =" Target"
792829 options ={IO_OUTPUT }
793830 bind:value ={$processSettingsStore .output .provider }
831+ on:change ={() => {
832+ $processSettingsStore .output .provider_id = ' '
833+ $processSettingsStore .output .path = ' '
834+ outputTree = undefined
835+ }}
794836 />
795837 </div >
796838 {#if ! isOutputError && ! isStatelessProvider ($processSettingsStore .output .provider )}
797839 {#if hasConnections ($processSettingsStore .output .provider .toLowerCase ())}
798- <Dropdown
799- label =" Connection Alias"
800- name =" output-alias"
801- options ={outputAliases }
802- initFirst ={true }
803- bind:value ={$processSettingsStore .output .provider_id }
804- on:change ={() =>
805- setOutputTree (
806- $processSettingsStore .output .provider ,
807- $processSettingsStore .output .provider_id ,
808- false
809- )
810- }
811- />
840+ {#key $processSettingsStore .output .provider_id }
841+ <Dropdown
842+ label =" Connection Alias"
843+ name =" output-alias"
844+ options ={outputAliases }
845+ initFirst ={true }
846+ bind:value ={$processSettingsStore .output .provider_id }
847+ on:change ={() =>
848+ setOutputTree (
849+ $processSettingsStore .output .provider ,
850+ $processSettingsStore .output .provider_id ,
851+ false
852+ )
853+ }
854+ />
855+ {/ key }
812856 {/if }
813857 <Dropdown
814858 label =" File extension"
0 commit comments