@@ -12,6 +12,7 @@ import {
1212 getProjectPath ,
1313 getProjectBranchPrefix ,
1414 updateProject ,
15+ getProjectDefaultSymlinkDirs ,
1516 hasDirectModeTask ,
1617 getGitHubDropDefaults ,
1718 setPrefillPrompt ,
@@ -23,7 +24,7 @@ import { theme } from '../lib/theme';
2324import { AgentSelector } from './AgentSelector' ;
2425import { BranchPrefixField } from './BranchPrefixField' ;
2526import { ProjectSelect } from './ProjectSelect' ;
26- import { SymlinkDirPicker } from './SymlinkDirPicker ' ;
27+ import { PathSelector } from './PathSelector ' ;
2728import type { AgentDef } from '../ipc/types' ;
2829
2930interface NewTaskDialogProps {
@@ -38,8 +39,7 @@ export function NewTaskDialog(props: NewTaskDialogProps) {
3839 const [ selectedProjectId , setSelectedProjectId ] = createSignal < string | null > ( null ) ;
3940 const [ error , setError ] = createSignal ( '' ) ;
4041 const [ loading , setLoading ] = createSignal ( false ) ;
41- const [ ignoredDirs , setIgnoredDirs ] = createSignal < string [ ] > ( [ ] ) ;
42- const [ selectedDirs , setSelectedDirs ] = createSignal < Set < string > > ( new Set ( ) ) ;
42+ const [ symlinkDirs , setSymlinkDirs ] = createSignal < string [ ] > ( [ ] ) ;
4343 const [ directMode , setDirectMode ] = createSignal ( false ) ;
4444 const [ skipPermissions , setSkipPermissions ] = createSignal ( false ) ;
4545 const [ branchPrefix , setBranchPrefix ] = createSignal ( '' ) ;
@@ -158,34 +158,18 @@ export function NewTaskDialog(props: NewTaskDialogProps) {
158158 } ) ;
159159 } ) ;
160160
161- // Fetch gitignored dirs when project changes
161+ // Load symlink dirs from project defaults
162162 createEffect ( ( ) => {
163163 const pid = selectedProjectId ( ) ;
164- const path = pid ? getProjectPath ( pid ) : undefined ;
165- let cancelled = false ;
164+ const projectPath = pid ? getProjectPath ( pid ) : undefined ;
166165
167- if ( ! path ) {
168- setIgnoredDirs ( [ ] ) ;
169- setSelectedDirs ( new Set < string > ( ) ) ;
166+ if ( ! projectPath ) {
167+ setSymlinkDirs ( [ ] ) ;
170168 return ;
171169 }
172170
173- void ( async ( ) => {
174- try {
175- const dirs = await invoke < string [ ] > ( IPC . GetGitignoredDirs , { projectRoot : path } ) ;
176- if ( cancelled ) return ;
177- setIgnoredDirs ( dirs ) ;
178- setSelectedDirs ( new Set ( dirs ) ) ; // all checked by default
179- } catch {
180- if ( cancelled ) return ;
181- setIgnoredDirs ( [ ] ) ;
182- setSelectedDirs ( new Set < string > ( ) ) ;
183- }
184- } ) ( ) ;
185-
186- onCleanup ( ( ) => {
187- cancelled = true ;
188- } ) ;
171+ const defaults = pid ? getProjectDefaultSymlinkDirs ( pid ) : undefined ;
172+ setSymlinkDirs ( defaults ? [ ...defaults ] : [ ] ) ;
189173 } ) ;
190174
191175 // Sync branch prefix when project changes
@@ -302,7 +286,7 @@ export function NewTaskDialog(props: NewTaskDialogProps) {
302286 name : n ,
303287 agentDef : agent ,
304288 projectId,
305- symlinkDirs : [ ...selectedDirs ( ) ] ,
289+ symlinkDirs : [ ...symlinkDirs ( ) ] ,
306290 initialPrompt : isFromDrop ? undefined : p ,
307291 branchPrefixOverride : prefix ,
308292 githubUrl : ghUrl ,
@@ -589,16 +573,12 @@ export function NewTaskDialog(props: NewTaskDialogProps) {
589573 </ div >
590574 </ Show >
591575
592- < Show when = { ignoredDirs ( ) . length > 0 && ! directMode ( ) } >
593- < SymlinkDirPicker
594- dirs = { ignoredDirs ( ) }
595- selectedDirs = { selectedDirs ( ) }
596- onToggle = { ( dir ) => {
597- const next = new Set ( selectedDirs ( ) ) ;
598- if ( next . has ( dir ) ) next . delete ( dir ) ;
599- else next . add ( dir ) ;
600- setSelectedDirs ( next ) ;
601- } }
576+ < Show when = { ! directMode ( ) } >
577+ < PathSelector
578+ dirs = { symlinkDirs ( ) }
579+ projectRoot = { selectedProjectPath ( ) }
580+ onAdd = { ( dir ) => setSymlinkDirs ( [ ...symlinkDirs ( ) , dir ] ) }
581+ onRemove = { ( i ) => setSymlinkDirs ( symlinkDirs ( ) . filter ( ( _ , idx ) => idx !== i ) ) }
602582 />
603583 </ Show >
604584
0 commit comments