@googleworkspace/drive-picker-element
Version:
A web component for Google Drive Picker
2 lines • 5.32 kB
JavaScript
"use strict";(()=>{var w="https://apis.google.com/js/api.js",E="https://accounts.google.com/gsi/client";async function b(i="client:picker"){return window.gapi||await f(w),await new Promise(e=>{window.gapi.load(i,e)}),window.google}async function m(i){return window.google?.accounts?.oauth2||await f(E),new Promise((e,t)=>{window.google.accounts.oauth2.initTokenClient({...i,callback:e,error_callback:t}).requestAccessToken()})}async function f(i){return new Promise((e,t)=>{document.querySelector(`script[src="${i}"]`)?e():document.head.appendChild(Object.assign(document.createElement("script"),{src:i,onload:e,onerror:t}))})}function v(i,e){let t=i.getAttribute(e);return t?Number(t):null}var d=(o=>(o[o.FALSE=0]="FALSE",o[o.TRUE=1]="TRUE",o[o.DEFAULT=2]="DEFAULT",o))(d||{});function a(i,e){return i.hasAttribute(e)}function A(i,e){let t=i.getAttribute(e)?.toUpperCase();if(!t)return 2;let o=d[t];if(o!==void 0)return o;throw new Error(`Invalid value, "${t}", for attribute ${e}. Must be one of ${Object.keys(d).filter(Number.isNaN).join(", ")}`)}function n(i,e,t,o){let r=A(e,i);return r===2?o:t.call(o,r===1)}var l=class extends HTMLElement{static get observedAttributes(){return["app-id","client-id","developer-key","hide-title-bar","locale","max-items","mine-only","multiselect","nav-hidden","oauth-token","origin","relay-url","scope","title"]}picker;observer;google;loading;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.build()}async build(){if(this.picker?.dispose(),await this.loading,!this.google)return;let e=new this.google.picker.PickerBuilder().setCallback(u=>{this.callbackToDispatchEvent(u)}),t=this.getAttribute("app-id");t!==null&&(e=e.setAppId(t));let o=this.getAttribute("developer-key");o!==null&&(e=e.setDeveloperKey(o));let r=this.getAttribute("locale");r!==null&&(e=e.setLocale(r));let s=v(this,"max-items");s!==null&&(e=e.setMaxItems(s));let p=this.getAttribute("origin");p!==null&&(e=e.setOrigin(p));let g=this.getAttribute("relay-url");g!==null&&(e=e.setRelayUrl(g));let h=this.getAttribute("title");h!==null&&(e=e.setTitle(h)),n("hide-title-bar",this,e.hideTitleBar,e);let k=this.getAttribute("oauth-token")??await this.requestAccessToken();if(k){e=e.setOAuthToken(k),a(this,"multiselect")&&(e=e.enableFeature(this.google.picker.Feature.MULTISELECT_ENABLED)),a(this,"mine-only")&&(e=e.enableFeature(this.google.picker.Feature.MINE_ONLY)),a(this,"nav-hidden")&&(e=e.enableFeature(this.google.picker.Feature.NAV_HIDDEN));for(let u of this.views)e=e.addView(u);this.picker=e.build(),this.picker.setVisible(!0)}}get views(){let e=C(this);return e.length?e:["all"]}async connectedCallback(){this.loading=b().then(e=>{this.google=e,this.build()}),this.observer=new MutationObserver(e=>{e.filter(o=>o.type==="childList"||o.type==="attributes"&&o.target!==this).length&&this.build()}),this.observer?.observe(this,{childList:!0,subtree:!0,attributes:!0})}callbackToDispatchEvent(e){let t;switch(e.action){case google.picker.Action.CANCEL:t="picker:canceled";break;case google.picker.Action.PICKED:t="picker:picked";break;case google.picker.Action.ERROR:t="picker:error";break;default:return}this.dispatchEvent(new CustomEvent(t,{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}));return}return this.dispatchEvent(new CustomEvent("picker:authenticated",{detail:{token:t}})),this.dispatchEvent(new CustomEvent("picker:oauth:response",{detail:e})),t}).catch(e=>{this.dispatchEvent(new CustomEvent("picker:oauth:error",{detail:e}))})}disconnectedCallback(){this.picker?.dispose()}};function y(i){return"view"in i&&i.view instanceof window.google.picker.View}function T(i){return i.filter(e=>y(e)).map(e=>e.view)}function C(i,e="*"){return T(Array.from(i.querySelectorAll(e)))}var c=class extends HTMLElement{static get observedAttributes(){return["enable-drives","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 o=this.getAttribute("mode");o&&e.setMode(google.picker.DocsViewMode[o]);let r=this.getAttribute("parent");r!==null&&e.setParent(r);let s=this.getAttribute("query");return s!==null&&e.setQuery(s),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",c);})();
//# sourceMappingURL=index.iife.min.js.map