Dropper/src/dropper/static/js/google-picker-logic.js

122 lines
4.0 KiB
JavaScript

// NOTE: These will get set from loadPicker...
// Go to: https://console.developers.google.com/apis/credentials/oauthclient/
// The Browser API key obtained from the Google API Console.
// Replace with your own Browser API key, or your own key.
let developerKey = '';
// The Client ID obtained from the Google API Console. Replace with your own Client ID.
let clientId = ""
// Replace with your own project number from console.developers.google.com.
// See "Project number" under "IAM & Admin" > "Settings"
let appId = "";
// Scope to use to access user's Drive items.
let scope = ['https://www.googleapis.com/auth/drive.file'];
let pickerApiLoaded = false;
let picker = null;
let oauthToken;
// Use the Google API Loader script to load the google.picker script.
async function loadPicker() {
let message = "[Google Drive Picker Setup Error] Check console for error..."
try {
const data = await fetchData( formatURL('static/google-api-data.json') )
if (data.developerKey == "" || data.clientId == "" || data.appId == "") {
message = "[Google Drive Picker Setup Error] Set the fields in static/google-api-data.json file...";
throw message
}
developerKey = data.developerKey;
clientId = data.clientId;
appId = data.appId;
} catch (e) {
console.log(e);
displayMessage(message, "warning");
return ;
}
gapi.load('auth', {'callback': onAuthApiLoad});
gapi.load('picker', {'callback': onPickerApiLoad});
}
function onAuthApiLoad() {
window.gapi.auth.authorize(
{
'client_id': clientId,
'scope': scope,
'immediate': true
},
handleAuthResult);
}
function onPickerApiLoad() {
pickerApiLoaded = true;
console.log("Picker Api Loaded");
createPicker();
}
function handleAuthResult(authResult) {
if (authResult && !authResult.error) {
oauthToken = authResult.access_token;
console.log("Got auth...");
createPicker();
} else {
console.log("Auth issue...");
console.log(authResult.error);
}
}
// Create and render a Picker object for searching files.
function createPicker() {
if (pickerApiLoaded && oauthToken) {
let ulView = new google.picker.DocsUploadView()
.setIncludeFolders(true);
let docsView = new google.picker.DocsView()
.setIncludeFolders(true)
.setSelectFolderEnabled(true)
.setIncludeFolders(true)
.setParent("ROOT");
picker = new google.picker.PickerBuilder()
.enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
.setAppId(appId)
.setOAuthToken(oauthToken)
.addView(docsView)
.addView(ulView)
.setDeveloperKey(developerKey)
.setCallback(pickerCallback)
.build();
console.log("Created Picker...");
}
}
function showGooglePicker() {
try {
picker.setVisible(true);
setTimeout(function () {
const picker = document.getElementsByClassName('picker shr-q-shr-r picker-dialog')[0];
const pickerBgs = document.getElementsByClassName('picker shr-q-shr-r-shr-xb picker-dialog-bg');
pickerBgs[0].style.display = "none";
pickerBgs[1].style.display = "none";
picker.style.top = "4em";
picker.stylezIndex = "999";
}, 1200);
} catch (e) {
displayMessage("No Google API Picker object setup...", "warning");
return ;
}
}
// A simple callback implementation.
function pickerCallback(data) {
if (data.action == google.picker.Action.PICKED) {
var fileId = data.docs[0].id;
console.log('The user selected: ' + fileId);
}
}