Skip to content

Commit 3e01258

Browse files
committed
fix(picker): fix picker files disappearing on refresh
1 parent 7a385fc commit 3e01258

5 files changed

Lines changed: 43 additions & 74 deletions

File tree

sim/app/w/[id]/components/workflow-block/components/sub-block/components/file-selector/components/confluence-file-selector.tsx

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -330,23 +330,19 @@ export function ConfluenceFileSelector({
330330
}
331331
}
332332

333-
// Update selected file when value changes externally
333+
// Fetch the selected page metadata once credentials and domain are ready or changed
334+
useEffect(() => {
335+
if (value && selectedCredentialId && !selectedFile && domain && domain.includes('.')) {
336+
fetchPageInfo(value)
337+
}
338+
}, [value, selectedCredentialId, selectedFile, domain, fetchPageInfo])
339+
340+
// Keep internal selectedFileId in sync with the value prop
334341
useEffect(() => {
335342
if (value !== selectedFileId) {
336343
setSelectedFileId(value)
337-
338-
// Find file info if we have files loaded
339-
if (files.length > 0) {
340-
const fileInfo = files.find((file) => file.id === value) || null
341-
setSelectedFile(fileInfo)
342-
onFileInfoChange?.(fileInfo)
343-
} else if (value && !selectedFile && selectedCredentialId && domain && domain.includes('.')) {
344-
// If we don't have files loaded yet but have a value, try to fetch the file info
345-
// Only make the API call if we have everything we need and a proper domain
346-
fetchPageInfo(value)
347-
}
348344
}
349-
}, [value, files, selectedFile, selectedCredentialId, domain, onFileInfoChange, fetchPageInfo])
345+
}, [value])
350346

351347
// Handle file selection
352348
const handleSelectFile = (file: ConfluenceFileInfo) => {

sim/app/w/[id]/components/workflow-block/components/sub-block/components/file-selector/components/google-drive-picker.tsx

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -176,17 +176,20 @@ export function GoogleDrivePicker({
176176
}
177177
}, [fetchCredentials])
178178

179-
// Update selected file when value changes externally
179+
// Fetch the selected file metadata once credentials are loaded or changed
180+
useEffect(() => {
181+
// If we have a file ID selected and credentials are ready but we still don't have the file info, fetch it
182+
if (value && selectedCredentialId && !selectedFile) {
183+
fetchFileById(value)
184+
}
185+
}, [value, selectedCredentialId, selectedFile, fetchFileById])
186+
187+
// Keep internal selectedFileId in sync with the value prop
180188
useEffect(() => {
181189
if (value !== selectedFileId) {
182190
setSelectedFileId(value)
183-
184-
// If we have a value but no file info, try to fetch it
185-
if (value && selectedCredentialId && !selectedFile) {
186-
fetchFileById(value)
187-
}
188191
}
189-
}, [value, selectedCredentialId, selectedFile, fetchFileById])
192+
}, [value])
190193

191194
// Fetch the access token for the selected credential
192195
const fetchAccessToken = async (): Promise<string | null> => {

sim/app/w/[id]/components/workflow-block/components/sub-block/components/file-selector/components/jira-issue-selector.tsx

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -373,29 +373,19 @@ export function JiraIssueSelector({
373373
}
374374
}
375375

376-
// Update selected issue when value changes externally
376+
// Fetch selected issue metadata once credentials are ready or changed
377+
useEffect(() => {
378+
if (value && selectedCredentialId && !selectedIssue && domain && domain.includes('.')) {
379+
fetchIssueInfo(value)
380+
}
381+
}, [value, selectedCredentialId, selectedIssue, domain, fetchIssueInfo])
382+
383+
// Keep internal selectedIssueId in sync with the value prop
377384
useEffect(() => {
378385
if (value !== selectedIssueId) {
379386
setSelectedIssueId(value)
380-
381-
// Only fetch issue info if we have a valid value
382-
if (value && value.trim() !== '') {
383-
// Find issue info if we have issues loaded
384-
if (issues.length > 0) {
385-
const issueInfo = issues.find((issue) => issue.id === value) || null
386-
setSelectedIssue(issueInfo)
387-
onIssueInfoChange?.(issueInfo)
388-
} else if (!selectedIssue && selectedCredentialId && domain && domain.includes('.')) {
389-
// If we don't have issues loaded yet but have a value, try to fetch the issue info
390-
fetchIssueInfo(value)
391-
}
392-
} else {
393-
// If value is empty or undefined, clear the selection without triggering API calls
394-
setSelectedIssue(null)
395-
onIssueInfoChange?.(null)
396-
}
397387
}
398-
}, [value, issues, selectedIssue, selectedCredentialId, domain, onIssueInfoChange, fetchIssueInfo])
388+
}, [value])
399389

400390
// Handle issue selection
401391
const handleSelectIssue = (issue: JiraIssueInfo) => {

sim/app/w/[id]/components/workflow-block/components/sub-block/components/folder-selector/folder-selector.tsx

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -214,29 +214,19 @@ export function FolderSelector({
214214
}
215215
}, [selectedCredentialId, fetchFolders])
216216

217-
// Update selected folder when value changes externally
217+
// Keep internal selectedFolderId in sync with the value prop
218218
useEffect(() => {
219219
if (value !== selectedFolderId) {
220220
setSelectedFolderId(value)
221-
222-
// Find folder info if we have folders loaded
223-
if (folders.length > 0) {
224-
const folderInfo = folders.find((folder) => folder.id === value) || null
225-
setSelectedFolder(folderInfo)
226-
onFolderInfoChange?.(folderInfo)
227-
} else if (value && selectedCredentialId) {
228-
// If we have a value but no folders loaded yet, try to fetch the folder by ID
229-
fetchFolderById(value)
230-
}
231221
}
232-
}, [value, folders, onFolderInfoChange, selectedCredentialId, fetchFolderById])
222+
}, [value])
233223

234-
// Try to fetch the folder by ID when credentials become available
224+
// Fetch the selected folder metadata once credentials are ready
235225
useEffect(() => {
236-
if (selectedCredentialId && selectedFolderId && !selectedFolder) {
237-
fetchFolderById(selectedFolderId)
226+
if (value && selectedCredentialId && !selectedFolder) {
227+
fetchFolderById(value)
238228
}
239-
}, [selectedCredentialId, selectedFolderId, selectedFolder, fetchFolderById])
229+
}, [value, selectedCredentialId, selectedFolder, fetchFolderById])
240230

241231
// Handle folder selection
242232
const handleSelectFolder = (folder: FolderInfo) => {

sim/app/w/[id]/components/workflow-block/components/sub-block/components/project-selector/components/jira-project-selector.tsx

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -331,29 +331,19 @@ export function JiraProjectSelector({
331331
}
332332
}, [fetchCredentials])
333333

334-
// Update selected project when value changes externally
334+
// Fetch the selected project metadata once credentials are ready or changed
335+
useEffect(() => {
336+
if (value && selectedCredentialId && !selectedProject && domain && domain.includes('.')) {
337+
fetchProjectInfo(value)
338+
}
339+
}, [value, selectedCredentialId, selectedProject, domain, fetchProjectInfo])
340+
341+
// Keep internal selectedProjectId in sync with the value prop
335342
useEffect(() => {
336343
if (value !== selectedProjectId) {
337344
setSelectedProjectId(value)
338-
339-
// Only fetch project info if we have a valid value
340-
if (value && value.trim() !== '') {
341-
// Find project info if we have projects loaded
342-
if (projects.length > 0) {
343-
const projectInfo = projects.find((project) => project.id === value) || null
344-
setSelectedProject(projectInfo)
345-
onProjectInfoChange?.(projectInfo)
346-
} else if (!selectedProject && selectedCredentialId && domain && domain.includes('.')) {
347-
// If we don't have projects loaded yet but have a value, try to fetch the project info
348-
fetchProjectInfo(value)
349-
}
350-
} else {
351-
// If value is empty or undefined, clear the selection without triggering API calls
352-
setSelectedProject(null)
353-
onProjectInfoChange?.(null)
354-
}
355345
}
356-
}, [value, projects, selectedProject, selectedCredentialId, domain, onProjectInfoChange, fetchProjectInfo])
346+
}, [value])
357347

358348
// Handle open change
359349
const handleOpenChange = (isOpen: boolean) => {

0 commit comments

Comments
 (0)