Widget.js 6.8 KB

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