@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 1.56 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
import{ObservableBase as t}from"./ObservableBase.js";import{trackAccess as i,runTracked as s,trackExplicitDependencies as e,runUntracked as o}from"./tracking.js";import{Flags as r}from"./tracking/Flags.js";import{TrackingTarget as a}from"./tracking/TrackingTarget.js";class n extends t{constructor(t,i){super(),this.propertyName=t,this.metadata=i,this.trackingTarget=new a(this),this.flags=0,this.flags=r.Dirty|(i.nonNullable?r.NonNullable:0)|(i.hasOwnProperty("value")?r.HasDefaultValue:0)|(void 0===i.get?r.DepTrackingInitialized:0)|(void 0===i.dependsOn?r.AutoTracked:0)}destroy(){this.flags&r.Dirty&&this.onCommitted(),super.destroy(),this.trackingTarget.destroy()}getComputed(t,a){t.mutable&&i(this);const n=t.store,l=this.propertyName,g=this.flags,h=n.get(l);if(g&r.Computing)return h;if(!(g&r.Dirty)&&n.has(l))return h;let d;this.flags|=r.Computing;const{host:m}=t;g&r.AutoTracked?d=s(this.trackingTarget,a,m):(e(m,this),d=a.call(m)),this.flags|=r.DepTrackingInitialized,n.set(l,d,1);const c=n.get(l);return c===h?this.flags&=~r.Dirty:o(this.commit,this),this.flags&=~r.Computing,c}notifyChange(){this.onInvalidated(),this.onCommitted()}invalidate(){this.onInvalidated()}commit(){this.flags&=~r.Dirty,this.onCommitted()}onInvalidated(){~this.flags&r.Overridden&&(this.flags|=r.Dirty);const t=this._observers;if(t&&t.length>0)for(const i of t)i.onInvalidated()}onCommitted(){const t=this._observers;if(t&&t.length>0){const i=t.slice();for(const t of i)t.onCommitted()}}}export{n as Property};