From 7bc1876e37fc6aead331e436dafb39d5c0ee8f2d Mon Sep 17 00:00:00 2001 From: "Taylor Wilsdon (aider)" Date: Sun, 15 Dec 2024 16:31:30 -0500 Subject: [PATCH] fix: Resolve Google Drive picker promise with file data --- src/lib/utils/google-drive-picker.ts | 66 ++++++++++++++++------------ 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/src/lib/utils/google-drive-picker.ts b/src/lib/utils/google-drive-picker.ts index 855f88592..941b1fce3 100644 --- a/src/lib/utils/google-drive-picker.ts +++ b/src/lib/utils/google-drive-picker.ts @@ -47,34 +47,42 @@ export const getAuthToken = async () => { return oauthToken; }; -export const createPicker = async () => { - if (!pickerApiLoaded) { - await loadGoogleDriveApi(); - } - - const token = await getAuthToken(); - if (!token) { - throw new Error('Unable to get OAuth token'); - } - - const picker = new google.picker.PickerBuilder() - .addView(google.picker.ViewId.DOCS) - .setOAuthToken(token) - .setDeveloperKey(API_KEY) - .setCallback((data: any) => { - if (data[google.picker.Response.ACTION] === google.picker.Action.PICKED) { - const doc = data[google.picker.Response.DOCUMENTS][0]; - const fileId = doc[google.picker.Document.ID]; - const fileName = doc[google.picker.Document.NAME]; - const fileUrl = doc[google.picker.Document.URL]; - - return { - id: fileId, - name: fileName, - url: fileUrl - }; +export const createPicker = () => { + return new Promise(async (resolve, reject) => { + try { + if (!pickerApiLoaded) { + await loadGoogleDriveApi(); } - }) - .build(); - picker.setVisible(true); + + const token = await getAuthToken(); + if (!token) { + throw new Error('Unable to get OAuth token'); + } + + const picker = new google.picker.PickerBuilder() + .addView(google.picker.ViewId.DOCS) + .setOAuthToken(token) + .setDeveloperKey(API_KEY) + .setCallback((data: any) => { + if (data[google.picker.Response.ACTION] === google.picker.Action.PICKED) { + const doc = data[google.picker.Response.DOCUMENTS][0]; + const fileId = doc[google.picker.Document.ID]; + const fileName = doc[google.picker.Document.NAME]; + const fileUrl = doc[google.picker.Document.URL]; + + resolve({ + id: fileId, + name: fileName, + url: fileUrl + }); + } else if (data[google.picker.Response.ACTION] === google.picker.Action.CANCEL) { + resolve(null); + } + }) + .build(); + picker.setVisible(true); + } catch (error) { + reject(error); + } + }); };