@googleworkspace/drive-picker-element
Version:
A web component for Google Drive Picker
2 lines • 5.95 kB
JavaScript
"use strict";(()=>{var f="https://apis.google.com/js/api.js",w="https://accounts.google.com/gsi/client";async function E(r="client:picker"){return window.gapi||await b(f),await new Promise(e=>{window.gapi.load(r,e)}),window.google}async function m(r){return window.google?.accounts?.oauth2||await b(w),new Promise((e,t)=>{window.google.accounts.oauth2.initTokenClient({...r,callback:e,error_callback:t}).requestAccessToken()})}async function b(r){return new Promise((e,t)=>{document.querySelector(`script[src="${r}"]`)?e():document.head.appendChild(Object.assign(document.createElement("script"),{src:r,onload:e,onerror:t}))})}function g(r,e){let t=r.getAttribute(e);return t?Number(t):null}var d=(i=>(i[i.FALSE=0]="FALSE",i[i.TRUE=1]="TRUE",i[i.DEFAULT=2]="DEFAULT",i))(d||{});function u(r,e){return r.hasAttribute(e)}function y(r,e){let t=r.getAttribute(e)?.toUpperCase();if(!t)return 2;let i=d[t];if(i!==void 0)return i;throw new Error(`Invalid value, "${t}", for attribute ${e}. Must be one of ${Object.keys(d).filter(Number.isNaN).join(", ")}`)}function n(r,e,t,i){let o=y(e,r);return o===2?i:t.call(i,o===1)}var l=class extends HTMLElement{static get observedAttributes(){return["app-id","client-id","debounce-delay","developer-key","hide-title-bar","locale","max-items","mine-only","multiselect","nav-hidden","oauth-token","origin","relay-url","scope","title"]}picker;observer;google;loading;debounceTimer;get visible(){return!!this.picker?.isVisible()}set visible(e){this.picker?.setVisible(e)}get tokenClientConfig(){let e=this.getAttribute("client-id"),t=this.getAttribute("scope")??"https://www.googleapis.com/auth/drive.file";if(!e||!t)throw new Error("client-id and scope are required attributes");return{client_id:e,hd:this.getAttribute("hd")??void 0,include_granted_scopes:!!this.getAttribute("include-granted-scope"),login_hint:this.getAttribute("login-hint")??void 0,prompt:this.getAttribute("prompt")??"",scope:t}}attributeChangedCallback(){this.isConnected&&this.scheduleBuild()}scheduleBuild(){clearTimeout(this.debounceTimer),this.debounceTimer=window.setTimeout(()=>{this.build()},g(this,"debounce-delay")??0)}async build(){if(this.picker?.dispose(),await this.loading,!this.google)return;let e=new this.google.picker.PickerBuilder().setCallback(p=>{this.callbackToDispatchEvent(p)}),t=this.getAttribute("app-id");t!==null&&(e=e.setAppId(t));let i=this.getAttribute("developer-key");i!==null&&(e=e.setDeveloperKey(i));let o=this.getAttribute("locale");o!==null&&(e=e.setLocale(o));let s=g(this,"max-items");s!==null&&(e=e.setMaxItems(s));let c=this.getAttribute("origin");c!==null&&(e=e.setOrigin(c));let h=this.getAttribute("relay-url");h!==null&&(e=e.setRelayUrl(h));let k=this.getAttribute("title");k!==null&&(e=e.setTitle(k)),n("hide-title-bar",this,e.hideTitleBar,e);let v=this.getAttribute("oauth-token")??await this.requestAccessToken();if(v){e=e.setOAuthToken(v),u(this,"multiselect")&&(e=e.enableFeature(this.google.picker.Feature.MULTISELECT_ENABLED)),u(this,"mine-only")&&(e=e.enableFeature(this.google.picker.Feature.MINE_ONLY)),u(this,"nav-hidden")&&(e=e.enableFeature(this.google.picker.Feature.NAV_HIDDEN));for(let p of this.views)e=e.addView(p);this.picker=e.build(),this.picker.setVisible(!0)}}get views(){let e=T(this);return e.length?e:["all"]}async connectedCallback(){this.loading=E().then(e=>{this.google=e}),this.observer=new MutationObserver(e=>{e.filter(i=>i.type==="childList"||i.type==="attributes"&&i.target!==this).length&&this.scheduleBuild()}),this.observer?.observe(this,{childList:!0,subtree:!0,attributes:!0}),this.scheduleBuild()}callbackToDispatchEvent(e){let t;switch(e.action){case google.picker.Action.CANCEL:t=["picker:canceled","picker-canceled"];break;case google.picker.Action.PICKED:t=["picker:picked","picker-picked"];break;case google.picker.Action.ERROR:t=["picker:error","picker-error"];break;default:return}for(let i of t)this.dispatchEvent(new CustomEvent(i,{detail:e}))}async requestAccessToken(){return m(this.tokenClientConfig).then(e=>{let{access_token:t}=e;if(!t){this.dispatchEvent(new CustomEvent("picker:oauth:error",{detail:e})),this.dispatchEvent(new CustomEvent("picker-oauth-error",{detail:e}));return}return this.dispatchEvent(new CustomEvent("picker:authenticated",{detail:{token:t}})),this.dispatchEvent(new CustomEvent("picker-oauth-response",{detail:e})),this.dispatchEvent(new CustomEvent("picker:oauth:response",{detail:e})),this.dispatchEvent(new CustomEvent("picker-oauth-response",{detail:e})),t}).catch(e=>{this.dispatchEvent(new CustomEvent("picker:oauth:error",{detail:e})),this.dispatchEvent(new CustomEvent("picker-oauth-error",{detail:e}))})}disconnectedCallback(){this.picker?.dispose()}};function A(r){return"view"in r&&r.view instanceof window.google.picker.View}function P(r){return r.filter(e=>A(e)).map(e=>e.view)}function T(r,e="*"){return P(Array.from(r.querySelectorAll(e)))}var a=class extends HTMLElement{static get observedAttributes(){return["enable-drives","file-ids","include-folders","mime-types","mode","owned-by-me","parent","query","select-folder-enabled","starred","view-id"]}get view(){let e=new window.google.picker.DocsView(this.viewId);n("enable-drives",this,e.setEnableDrives,e),n("include-folders",this,e.setIncludeFolders,e),n("owned-by-me",this,e.setOwnedByMe,e),n("select-folder-enabled",this,e.setSelectFolderEnabled,e),n("starred",this,e.setStarred,e);let t=this.getAttribute("mime-types");t!==null&&e.setMimeTypes(t);let i=this.getAttribute("file-ids");i!==null&&e.setFileIds(i);let o=this.getAttribute("mode");o&&e.setMode(google.picker.DocsViewMode[o]);let s=this.getAttribute("parent");s!==null&&e.setParent(s);let c=this.getAttribute("query");return c!==null&&e.setQuery(c),e}get viewId(){let e=this.getAttribute("view-id");return e?window.google.picker.ViewId[e]:void 0}};customElements.define("drive-picker",l);customElements.define("drive-picker-docs-view",a);})();
//# sourceMappingURL=index.iife.min.js.map