UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 7.35 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import{_ as e}from"../chunks/tslib.es6.js";import"../intl.js";import{byId as t}from"../core/domUtils.js";import r from"../core/Evented.js";import{isEventedOrEventTarget as s,on as o}from"../core/events.js";import"../core/has.js";import{clone as i}from"../core/lang.js";import n from"../core/Logger.js";import{destroyMaybe as a}from"../core/maybe.js";import l from"../core/Promise.js";import{debounce as d,throwIfNotAbortError as c}from"../core/promiseUtils.js";import{watch as h,syncAndInitial as p,when as u}from"../core/reactiveUtils.js";import{generateUUID as m}from"../core/uuid.js";import{property as g}from"../core/accessorSupport/decorators/property.js";import{cast as y}from"../core/accessorSupport/decorators/cast.js";import{subclass as v}from"../core/accessorSupport/decorators/subclass.js";import{runTracked as f}from"../core/accessorSupport/tracking.js";import{SimpleTrackingTarget as _}from"../core/accessorSupport/tracking/SimpleTrackingTarget.js";import{createAdvancedProjector as j}from"../libs/maquette-advanced-projector/projector.js";import{commitAssetPath as b}from"./support/componentsUtils.js";import{isWidgetConstructor as w,processWidgets as S}from"./support/jsxWidgetSupport.js";import{widgetSymbol as R,widgetTestDataSymbol as P}from"./support/symbols.js";import{registerAlive as k,registerLoading as E}from"./support/tests.js";import{getVNodeCache as C,setVNodeCache as F,deleteVNodeCache as L,clearVNodeCache as T}from"./support/vnodeCache.js";import{classes as I}from"./support/widgetUtils.js";import{fetchMessageBundle as N}from"../intl/messages.js";import{onLocaleChange as H}from"../intl/locale.js";var $;let U=0;function z(e,t){const r=Object.prototype.hasOwnProperty;for(const s in t)r.call(t,s)&&r.call(e,s)&&(null!=e[s]&&null!=t[s]&&"object"==typeof e[s]&&"object"==typeof t[s]?z(e[s],t[s]):e[s]=t[s]);return e}const x=j({postProcessProjectionOptions(e){const t=e.eventHandlerInterceptor,r=/capture$/i;e.eventHandlerInterceptor=(e,s,o,i)=>{const n=t?.(e,s,o,i),a=r.test(e);if(!((e=e.replace(r,"")).toLowerCase()in o)||a){const t=e[2].toLowerCase()+e.slice(3),r=e=>n?.call(o,e);o.addEventListener(t,r,a);const s=()=>o.removeEventListener(t,r,a),l=i.afterRemoved;i.afterRemoved=e=>{l?.(e),s()}}return n}},handleInterceptedEvent(e,t,r,s){const{eventPhase:o,type:i}=s,n=o===Event.CAPTURING_PHASE;let a=`on${i}${n?"capture":""}`;const l=t.properties;(l&&a in l||(a=`on${i[0].toUpperCase()}${i.slice(1)}${n?"Capture":""}`,l&&a in l))&&(T(),e.scheduleRender(),l[a].call(l.bind||r,s))}});let A=!1,M=class extends(l.EsriPromiseMixin(r.EventedAccessor)){static{this[$]=!0}constructor(e,t){super(e,t),this._attached=!1,this._projector=x,this._readyForTrueRender=!1,this.key=this,this.autoRenderingEnabled=!0,this._loadLocale=d((async()=>{if(this._messageBundleProps?.length){const e=await Promise.allSettled(this._messageBundleProps.map((async({bundlePath:e,propertyName:t})=>{if(this.destroyed)return;let r=await N(e);this.uiStrings&&Object.keys(this.uiStrings)&&(r=z(i(r),this.uiStrings)),this[t]=r})));if(this.destroyed)return;for(const t of e)"rejected"===t.status&&n.getLogger(this).error("widget-intl:locale-error",this.declaredClass,t.reason)}await this.loadLocale()})),this.addHandles(k()),b();const r="esri-widget-uid-"+m(),s=this.render.bind(this);this._trackingTarget=new _((()=>{this.autoRenderingEnabled&&this.scheduleRender()}));const o=()=>({vnodeSelector:"div",properties:{key:`${r}-hidden`,class:"",styles:{display:"none"}},domNode:null,children:void 0,text:void 0}),a=()=>{if(!this._readyForTrueRender||this.destroyed)return null;const e=s()??o(),t=e.properties??={};if(t.key??=r,w(e.vnodeSelector)){if(!this.visible)return o()}else this.visible?t.styles||(t.styles={}):(t.class="",t.styles={display:"none"}),t.styles.display??="";let i=0;return e.children?.forEach((e=>{w(e.vnodeSelector)||(e.properties??={},e.properties.key??=`${this.id}--${i++}`)})),S(this,e)};this.render=()=>{if(A)return a();let e=C(this)??null;if(e)return e;this._trackingTarget.clear(),A=!0;try{e=f(this._trackingTarget,a)}catch(t){throw n.getLogger(this).error(t),t}finally{A=!1}return e&&F(this,e),e};const l=this.beforeFirstRender();l?this._resourcesFetch=l.then((()=>{this._readyForTrueRender=!0,this._postInitialize()})):(this._resourcesFetch=Promise.resolve().then((()=>{this._postInitialize()})),this._readyForTrueRender=!0),this.addResolvingPromise(this._resourcesFetch),E(this._resourcesFetch)}normalizeCtorArgs(e,t){const r={...e};return t&&(r.container=t),r}postInitialize(){}beforeFirstRender(){const e=this.loadDependencies();return this._messageBundleProps?.length||e?Promise.all([e,this._loadLocale()]).then((()=>{})).catch(c):null}loadDependencies(){return null}loadLocale(){return null}destroy(){this.destroyed||(a(this._trackingTarget),a(this.viewModel),this._detach(this.container),this._set("container",null),this._emitter.clear(),this.render=()=>null,this._projector=null,L(this))}set container(e){this._get("container")||this._set("container",e)}castContainer(e){return t(e)}get domNode(){return this.container}set domNode(e){this.container=e}get icon(){return null}set icon(e){this._overrideIfSome("icon",e)}get id(){return this._get("id")||this.container?.id||Date.now().toString(16)+"-widget-"+U++}set id(e){e&&this._set("id",e)}get label(){return this.declaredClass.split(".").pop()}set label(e){this._overrideIfSome("label",e)}get renderable(){return this._resourcesFetch}get visible(){return this._get("visible")}set visible(e){this._set("visible",e)}get[($=R,P)](){return{projector:this._projector}}static{this.vnodeSelector="div"}render(){throw new Error("not implemented")}scheduleRender(){this.destroyed||(L(this),this._projector.scheduleRender())}classes(...e){return I.apply(this,e)}renderNow(){L(this),this._projector.renderNow()}_postInitialize(){if(this.destroyed)return;this.scheduleRender(),this._delegatedEventNames?.length&&this.addHandles(h((()=>this.viewModel),((e,t)=>{t&&this.removeHandles("delegated-events"),e&&s(e)&&this.addHandles(this._delegatedEventNames.map((t=>o(e,t,(e=>{this.emit(t,e)})))),"delegated-events")}),p)),this.postInitialize();const e=async()=>{await this._loadLocale().catch(c),this.scheduleRender()};this.addHandles([H(e),h((()=>this.uiStrings),e)]),this.addHandles(u((()=>this.container),(e=>{this.destroyed||this._attach(e)}),{initial:!0,once:!0}))}_attach(e){e&&(this._projector.merge(e,this.render),this._attached=!0)}_detach(e){this._attached&&(this._projector.detach(this.render),this._attached=!1),e?.parentNode?.removeChild(e)}};e([g()],M.prototype,"_readyForTrueRender",void 0),e([g({value:null})],M.prototype,"container",null),e([y("container")],M.prototype,"castContainer",null),e([g()],M.prototype,"icon",null),e([g()],M.prototype,"id",null),e([g()],M.prototype,"label",null),e([g()],M.prototype,"renderable",null),e([g()],M.prototype,"uiStrings",void 0),e([g()],M.prototype,"viewModel",void 0),e([g({value:!0})],M.prototype,"visible",null),e([g()],M.prototype,"key",void 0),e([g()],M.prototype,"children",void 0),e([g()],M.prototype,"afterCreate",void 0),e([g()],M.prototype,"afterUpdate",void 0),e([g()],M.prototype,"afterRemoved",void 0),M=e([v("esri.widgets.Widget")],M);const O=M;export{O as default};