@stemy/ngx-utils 12.0.4 → 12.0.5

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.
@@ -19,9 +19,12 @@ export class AsyncMethodDirective {
19
19
  }
20
20
  callMethod() {
21
21
  if (this.loading)
22
- return;
22
+ return true;
23
+ const result = !this.method ? null : this.method(this.context);
24
+ if (!(result instanceof Promise))
25
+ return false;
23
26
  this.loading = true;
24
- this.method(this.context).then(result => {
27
+ result.then(result => {
25
28
  this.loading = false;
26
29
  if (result) {
27
30
  this.onSuccess.emit(result);
@@ -34,6 +37,7 @@ export class AsyncMethodDirective {
34
37
  this.onError.emit(reason);
35
38
  this.toaster.error(reason.message, reason.context);
36
39
  });
40
+ return true;
37
41
  }
38
42
  }
39
43
  AsyncMethodDirective.decorators = [
@@ -55,4 +59,4 @@ AsyncMethodDirective.propDecorators = {
55
59
  isLoading: [{ type: HostBinding, args: ["class.loading",] }],
56
60
  click: [{ type: HostListener, args: ["click",] }]
57
61
  };
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtbWV0aG9kLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvZGlyZWN0aXZlcy9hc3luYy1tZXRob2QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFDLGVBQWUsRUFBOEMsTUFBTSxpQkFBaUIsQ0FBQztBQU03RixNQUFNLE9BQU8sb0JBQW9CO0lBcUI3QixZQUE2QyxPQUF3QjtRQUF4QixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUNqRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQ25ELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFDckQsQ0FBQztJQWJELElBQ0ksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFDSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFRRCxLQUFLO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDMUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksTUFBTSxFQUFFO2dCQUNSLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN4RDtRQUNMLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNSLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztnQkFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1lBQ3JFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7O1lBcERKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQixRQUFRLEVBQUUsY0FBYzthQUMzQjs7OzRDQXNCZ0IsTUFBTSxTQUFDLGVBQWU7OztxQkFuQmxDLEtBQUssU0FBQyxjQUFjO3VCQUNwQixLQUFLO3NCQUNMLEtBQUs7d0JBRUwsTUFBTTtzQkFDTixNQUFNO3lCQUlOLFdBQVcsU0FBQyxnQkFBZ0I7d0JBSzVCLFdBQVcsU0FBQyxlQUFlO29CQVUzQixZQUFZLFNBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPdXRwdXQsIERpcmVjdGl2ZSwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lcn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtUT0FTVEVSX1NFUlZJQ0UsIElUb2FzdGVyU2VydmljZSwgSUFzeW5jTWVzc2FnZSwgQXN5bmNNZXRob2R9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6IFwiW2FzeW5jLW1ldGhvZF1cIixcclxuICAgIGV4cG9ydEFzOiBcImFzeW5jLW1ldGhvZFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc3luY01ldGhvZERpcmVjdGl2ZSB7XHJcblxyXG4gICAgQElucHV0KFwiYXN5bmMtbWV0aG9kXCIpIG1ldGhvZDogQXN5bmNNZXRob2Q7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIGNvbnRleHQ6IGFueTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25TdWNjZXNzOiBFdmVudEVtaXR0ZXI8SUFzeW5jTWVzc2FnZT47XHJcbiAgICBAT3V0cHV0KCkgb25FcnJvcjogRXZlbnRFbWl0dGVyPElBc3luY01lc3NhZ2U+O1xyXG5cclxuICAgIHByaXZhdGUgbG9hZGluZzogYm9vbGVhbjtcclxuXHJcbiAgICBASG9zdEJpbmRpbmcoXCJjbGFzcy5kaXNhYmxlZFwiKVxyXG4gICAgZ2V0IGlzRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3MubG9hZGluZ1wiKVxyXG4gICAgZ2V0IGlzTG9hZGluZygpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoVE9BU1RFUl9TRVJWSUNFKSBwcml2YXRlIHRvYXN0ZXI6IElUb2FzdGVyU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMub25TdWNjZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxJQXN5bmNNZXNzYWdlPigpO1xyXG4gICAgICAgIHRoaXMub25FcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8SUFzeW5jTWVzc2FnZT4oKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKFwiY2xpY2tcIilcclxuICAgIGNsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jYWxsTWV0aG9kKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsbE1ldGhvZCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1ldGhvZCh0aGlzLmNvbnRleHQpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TdWNjZXNzLmVtaXQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Rlci5zdWNjZXNzKHJlc3VsdC5tZXNzYWdlLCByZXN1bHQuY29udGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJlYXNvbiB8fCAhcmVhc29uLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWFzb24gbXVzdCBpbXBsZW1lbnQgSUFzeW5jTWVzc2FnZSBpbnRlcmZhY2VcIik7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChyZWFzb24pO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ZXIuZXJyb3IocmVhc29uLm1lc3NhZ2UsIHJlYXNvbi5jb250ZXh0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtbWV0aG9kLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvZGlyZWN0aXZlcy9hc3luYy1tZXRob2QuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEcsT0FBTyxFQUFDLGVBQWUsRUFBOEMsTUFBTSxpQkFBaUIsQ0FBQztBQU03RixNQUFNLE9BQU8sb0JBQW9CO0lBcUI3QixZQUE2QyxPQUF3QjtRQUF4QixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUNqRSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBQ25ELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7SUFDckQsQ0FBQztJQWJELElBQ0ksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFDSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFRRCxLQUFLO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDMUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzlCLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksT0FBTyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLE1BQU0sRUFBRTtnQkFDUixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDeEQ7UUFDTCxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDUixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7OztZQXZESixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsUUFBUSxFQUFFLGNBQWM7YUFDM0I7Ozs0Q0FzQmdCLE1BQU0sU0FBQyxlQUFlOzs7cUJBbkJsQyxLQUFLLFNBQUMsY0FBYzt1QkFDcEIsS0FBSztzQkFDTCxLQUFLO3dCQUVMLE1BQU07c0JBQ04sTUFBTTt5QkFJTixXQUFXLFNBQUMsZ0JBQWdCO3dCQUs1QixXQUFXLFNBQUMsZUFBZTtvQkFVM0IsWUFBWSxTQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT3V0cHV0LCBEaXJlY3RpdmUsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXJ9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7VE9BU1RFUl9TRVJWSUNFLCBJVG9hc3RlclNlcnZpY2UsIElBc3luY01lc3NhZ2UsIEFzeW5jTWV0aG9kfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiBcIlthc3luYy1tZXRob2RdXCIsXHJcbiAgICBleHBvcnRBczogXCJhc3luYy1tZXRob2RcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXN5bmNNZXRob2REaXJlY3RpdmUge1xyXG5cclxuICAgIEBJbnB1dChcImFzeW5jLW1ldGhvZFwiKSBtZXRob2Q6IEFzeW5jTWV0aG9kO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XHJcbiAgICBASW5wdXQoKSBjb250ZXh0OiBhbnk7XHJcblxyXG4gICAgQE91dHB1dCgpIG9uU3VjY2VzczogRXZlbnRFbWl0dGVyPElBc3luY01lc3NhZ2U+O1xyXG4gICAgQE91dHB1dCgpIG9uRXJyb3I6IEV2ZW50RW1pdHRlcjxJQXN5bmNNZXNzYWdlPjtcclxuXHJcbiAgICBwcml2YXRlIGxvYWRpbmc6IGJvb2xlYW47XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuZGlzYWJsZWRcIilcclxuICAgIGdldCBpc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0QmluZGluZyhcImNsYXNzLmxvYWRpbmdcIilcclxuICAgIGdldCBpc0xvYWRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KFRPQVNURVJfU0VSVklDRSkgcHJpdmF0ZSB0b2FzdGVyOiBJVG9hc3RlclNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLm9uU3VjY2VzcyA9IG5ldyBFdmVudEVtaXR0ZXI8SUFzeW5jTWVzc2FnZT4oKTtcclxuICAgICAgICB0aGlzLm9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPElBc3luY01lc3NhZ2U+KCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcihcImNsaWNrXCIpXHJcbiAgICBjbGljaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FsbE1ldGhvZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGxNZXRob2QoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gIXRoaXMubWV0aG9kID8gbnVsbCA6IHRoaXMubWV0aG9kKHRoaXMuY29udGV4dCk7XHJcbiAgICAgICAgaWYgKCEocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHJlc3VsdC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU3VjY2Vzcy5lbWl0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ZXIuc3VjY2VzcyhyZXN1bHQubWVzc2FnZSwgcmVzdWx0LmNvbnRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgcmVhc29uID0+IHtcclxuICAgICAgICAgICAgaWYgKCFyZWFzb24gfHwgIXJlYXNvbi5tZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVhc29uIG11c3QgaW1wbGVtZW50IElBc3luY01lc3NhZ2UgaW50ZXJmYWNlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQocmVhc29uKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdGVyLmVycm9yKHJlYXNvbi5tZXNzYWdlLCByZWFzb24uY29udGV4dCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -3794,9 +3794,12 @@ class AsyncMethodDirective {
3794
3794
  }
3795
3795
  callMethod() {
3796
3796
  if (this.loading)
3797
- return;
3797
+ return true;
3798
+ const result = !this.method ? null : this.method(this.context);
3799
+ if (!(result instanceof Promise))
3800
+ return false;
3798
3801
  this.loading = true;
3799
- this.method(this.context).then(result => {
3802
+ result.then(result => {
3800
3803
  this.loading = false;
3801
3804
  if (result) {
3802
3805
  this.onSuccess.emit(result);
@@ -3809,6 +3812,7 @@ class AsyncMethodDirective {
3809
3812
  this.onError.emit(reason);
3810
3813
  this.toaster.error(reason.message, reason.context);
3811
3814
  });
3815
+ return true;
3812
3816
  }
3813
3817
  }
3814
3818
  AsyncMethodDirective.decorators = [