({
addCloneAgent,
connectWorkspace,
onSelectWorkspace,
resolveProjectContext,
persistProjectCopiesFolder,
onCompactActivate,
onError,
}: UseClonePromptOptions)
| 97 | } |
| 98 | |
| 99 | export function useClonePrompt({ |
| 100 | addCloneAgent, |
| 101 | connectWorkspace, |
| 102 | onSelectWorkspace, |
| 103 | resolveProjectContext, |
| 104 | persistProjectCopiesFolder, |
| 105 | onCompactActivate, |
| 106 | onError, |
| 107 | }: UseClonePromptOptions): UseClonePromptResult { |
| 108 | const [clonePrompt, setClonePrompt] = useState<ClonePromptState>(null); |
| 109 | |
| 110 | const openPrompt = useCallback( |
| 111 | (workspace: WorkspaceInfo) => { |
| 112 | const { groupId, copiesFolder } = resolveProjectContext(workspace); |
| 113 | setClonePrompt({ |
| 114 | workspace, |
| 115 | copyName: defaultCopyName(workspace), |
| 116 | copiesFolder: copiesFolder ?? "", |
| 117 | initialCopiesFolder: copiesFolder ?? "", |
| 118 | groupId, |
| 119 | suggestedCopiesFolder: suggestCopiesFolder(workspace.path), |
| 120 | isSubmitting: false, |
| 121 | error: null, |
| 122 | }); |
| 123 | }, |
| 124 | [resolveProjectContext], |
| 125 | ); |
| 126 | |
| 127 | const updateCopyName = useCallback((value: string) => { |
| 128 | setClonePrompt((prev) => |
| 129 | prev ? { ...prev, copyName: value, error: null } : prev, |
| 130 | ); |
| 131 | }, []); |
| 132 | |
| 133 | const cancelPrompt = useCallback(() => { |
| 134 | setClonePrompt(null); |
| 135 | }, []); |
| 136 | |
| 137 | const chooseCopiesFolder = useCallback(async () => { |
| 138 | const selection = await pickWorkspacePath(); |
| 139 | if (!selection) { |
| 140 | return; |
| 141 | } |
| 142 | setClonePrompt((prev) => |
| 143 | prev ? { ...prev, copiesFolder: selection, error: null } : prev, |
| 144 | ); |
| 145 | }, []); |
| 146 | |
| 147 | const useSuggestedCopiesFolder = useCallback(() => { |
| 148 | setClonePrompt((prev) => { |
| 149 | if (!prev || !prev.suggestedCopiesFolder) { |
| 150 | return prev; |
| 151 | } |
| 152 | return { ...prev, copiesFolder: prev.suggestedCopiesFolder, error: null }; |
| 153 | }); |
| 154 | }, []); |
| 155 | |
| 156 | const clearCopiesFolder = useCallback(() => { |
no test coverage detected