"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.GoogleDrivePicker = void 0;
const react_1 = require("react");
const openint_1 = require("../../openint");
// https://developers.google.com/drive/picker/guides/overview
const GoogleDrivePicker = ({ connectionDetails, options, onClose, }) => {
    const loadGoogleDriveAPI = (0, react_1.useCallback)(() => {
        return new Promise((resolve) => {
            if (typeof window.gapi !== "undefined" && window.gapi.load) {
                window.gapi.load("picker", { callback: resolve });
            }
            else {
                const script = document.createElement("script");
                script.src = "https://apis.google.com/js/api.js";
                script.onload = () => {
                    window.gapi.load("picker", { callback: resolve });
                };
                document.body.appendChild(script);
            }
        });
    }, []);
    const openNativePicker = (0, react_1.useCallback)(() => {
        const fileAndFolderView = new window.google.picker.DocsView()
            .setIncludeFolders(true)
            .setMode(window.google.picker.DocsViewMode.LIST)
            .setSelectFolderEnabled(true);
        const picker = new window.google.picker.PickerBuilder()
            .addView(fileAndFolderView)
            .enableFeature(window.google.picker.Feature.MULTISELECT_ENABLED)
            .setOAuthToken(connectionDetails.accessToken)
            .setCallback(pickerCallback)
            .build();
        picker.setVisible(true);
    }, [connectionDetails.accessToken, options.multiselect]);
    function fileMapper(doc) {
        const isFolder = doc.mimeType === 'application/vnd.google-apps.folder';
        return {
            id: doc.id,
            name: doc.name,
            type: isFolder ? 'folder' : 'file',
        };
    }
    const pickerCallback = (0, react_1.useCallback)(async (data) => {
        if (data[window.google.picker.Response.ACTION] ===
            window.google.picker.Action.PICKED) {
            const docs = data[window.google.picker.Response.DOCUMENTS];
            const selectedFiles = docs.map(fileMapper);
            await (0, openint_1.persistSelectedFilesOnConnection)(selectedFiles);
            if (options.onSelect) {
                options.onSelect(selectedFiles);
            }
        }
        else if (data[window.google.picker.Response.ACTION] ===
            window.google.picker.Action.CANCEL) {
            close();
        }
    }, [options.onSelect]);
    const open = (0, react_1.useCallback)(async () => {
        await loadGoogleDriveAPI();
        openNativePicker();
    }, [loadGoogleDriveAPI, openNativePicker]);
    const close = (0, react_1.useCallback)(() => {
        if (options.onClose) {
            options.onClose();
        }
        onClose();
    }, [options.onClose, onClose]);
    (0, react_1.useEffect)(() => {
        open();
    }, [open]);
    // Remove all UI rendering and just return null
    return null;
};
exports.GoogleDrivePicker = GoogleDrivePicker;
//# sourceMappingURL=GoogleDrivePicker.jsx.map