@node-projects/web-component-designer 0.1.116 → 0.1.118

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,7 +11,7 @@ export declare abstract class AbstractPropertiesService implements IPropertiesSe
11
11
  private static _stylesCache;
12
12
  private _cssCacheClearTimer;
13
13
  private static _bindingsCache;
14
- private _bindingsCacheClearTimer;
14
+ private static _bindingsCacheClearTimer;
15
15
  abstract getRefreshMode(designItem: IDesignItem): RefreshMode;
16
16
  abstract isHandledElement(designItem: IDesignItem): boolean;
17
17
  protected _notifyChangedProperty(designItem: IDesignItem, property: IProperty, value: any): void;
@@ -21,6 +21,7 @@ export declare abstract class AbstractPropertiesService implements IPropertiesSe
21
21
  getPropertyTarget(designItem: IDesignItem, property: IProperty): BindingTarget;
22
22
  clearValue(designItems: IDesignItem[], property: IProperty, clearType: 'all' | 'binding' | 'value'): void;
23
23
  isSet(designItems: IDesignItem[], property: IProperty): ValueType;
24
+ static getOrBuildCachedBindings(designItem: IDesignItem): IBinding[];
24
25
  getValue(designItems: IDesignItem[], property: IProperty): string | boolean;
25
26
  getBinding(designItems: IDesignItem[], property: IProperty): IBinding;
26
27
  getUnsetValue(designItems: IDesignItem[], property: IProperty): any;
@@ -12,7 +12,7 @@ export class AbstractPropertiesService {
12
12
  static _stylesCache = new Map;
13
13
  _cssCacheClearTimer;
14
14
  static _bindingsCache = new Map;
15
- _bindingsCacheClearTimer;
15
+ static _bindingsCacheClearTimer;
16
16
  _notifyChangedProperty(designItem, property, value) {
17
17
  }
18
18
  getProperty(designItem, name) {
@@ -123,13 +123,7 @@ export class AbstractPropertiesService {
123
123
  break;
124
124
  }
125
125
  ;
126
- let bindings = AbstractPropertiesService._bindingsCache.get(designItems[0]);
127
- if (!bindings) {
128
- bindings = designItems[0].serviceContainer.forSomeServicesTillResult('bindingService', (s) => s.getBindings(designItems[0]));
129
- AbstractPropertiesService._bindingsCache.set(designItems[0], bindings);
130
- clearTimeout(this._bindingsCacheClearTimer);
131
- this._bindingsCacheClearTimer = setTimeout(() => AbstractPropertiesService._bindingsCache.clear(), 30);
132
- }
126
+ const bindings = AbstractPropertiesService.getOrBuildCachedBindings(designItems[0]);
133
127
  if (property.propertyType == PropertyType.cssValue) {
134
128
  if (bindings && bindings.find(x => (x.target == BindingTarget.css || x.target == BindingTarget.cssvar) && x.targetName == property.name))
135
129
  return ValueType.bound;
@@ -165,6 +159,23 @@ export class AbstractPropertiesService {
165
159
  return ValueType.none;
166
160
  return all ? ValueType.all : some ? ValueType.some : ValueType.none;
167
161
  }
162
+ static getOrBuildCachedBindings(designItem) {
163
+ let bindings = AbstractPropertiesService._bindingsCache.get(designItem);
164
+ if (!bindings) {
165
+ const services = designItem.serviceContainer.getServices('bindingService');
166
+ const bindings = [];
167
+ for (const s of services) {
168
+ const bs = s.getBindings(designItem);
169
+ if (bs && bs.length > 0) {
170
+ bindings.push(...bs);
171
+ }
172
+ }
173
+ AbstractPropertiesService._bindingsCache.set(designItem, bindings);
174
+ clearTimeout(this._bindingsCacheClearTimer);
175
+ this._bindingsCacheClearTimer = setTimeout(() => AbstractPropertiesService._bindingsCache.clear(), 30);
176
+ }
177
+ return bindings;
178
+ }
168
179
  getValue(designItems, property) {
169
180
  if (designItems != null && designItems.length !== 0) {
170
181
  if (property.propertyType == PropertyType.cssValue) {
@@ -3,6 +3,7 @@ import { ValueType } from '../ValueType.js';
3
3
  import { BindingTarget } from '../../../item/BindingTarget.js';
4
4
  import { PropertyType } from '../PropertyType.js';
5
5
  import { PropertiesHelper } from './PropertiesHelper.js';
6
+ import { AbstractPropertiesService } from './AbstractPropertiesService.js';
6
7
  export class AttributesPropertiesService {
7
8
  name = "attributes";
8
9
  getRefreshMode(designItem) {
@@ -56,10 +57,7 @@ export class AttributesPropertiesService {
56
57
  all = all && has;
57
58
  some = some || has;
58
59
  });
59
- //TODO: optimize perf, do not call bindings service for each property.
60
- const bindings = designItems[0].serviceContainer.forSomeServicesTillResult('bindingService', (s) => {
61
- return s.getBindings(designItems[0]);
62
- });
60
+ const bindings = AbstractPropertiesService.getOrBuildCachedBindings(designItems[0]);
63
61
  if (bindings && bindings.find(x => x.target == BindingTarget.attribute && x.targetName == propName))
64
62
  return ValueType.bound;
65
63
  }
@@ -64,10 +64,7 @@ export class ContentAndIdPropertiesService extends AbstractPropertiesService {
64
64
  all = all && has;
65
65
  some = some || has;
66
66
  });
67
- //TODO: optimize perf, do not call bindings service for each property.
68
- const bindings = designItems[0].serviceContainer.forSomeServicesTillResult('bindingService', (s) => {
69
- return s.getBindings(designItems[0]);
70
- });
67
+ const bindings = AbstractPropertiesService.getOrBuildCachedBindings(designItems[0]);
71
68
  if (bindings && bindings.find(x => x.target == BindingTarget.property && x.targetName == property.name))
72
69
  return ValueType.bound;
73
70
  }
@@ -33,9 +33,9 @@ export class PropertyGrid extends BaseCustomWebComponentLazyAppend {
33
33
  };
34
34
  constructor() {
35
35
  super();
36
- this._restoreCachedInititalValues();
37
36
  this._designerTabControl = new DesignerTabControl();
38
37
  this.shadowRoot.appendChild(this._designerTabControl);
38
+ this._restoreCachedInititalValues();
39
39
  this.addEventListener('contextmenu', (e) => {
40
40
  if (e.composedPath()[0].localName != 'input')
41
41
  e.preventDefault();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "description": "A WYSIWYG designer webcomponent for html components",
3
3
  "name": "@node-projects/web-component-designer",
4
- "version": "0.1.116",
4
+ "version": "0.1.118",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",