@ngageoint/mage.web-core-lib 6.3.0-beta.0
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.
- package/README.md +24 -0
- package/common/index.d.ts +6 -0
- package/common/mage-common.module.d.ts +9 -0
- package/common/mage-common.module.d.ts.map +1 -0
- package/common/ngageoint-mage.web-core-lib-common.d.ts.map +1 -0
- package/common/public-api.d.ts +3 -0
- package/common/public-api.d.ts.map +1 -0
- package/common/xhr-img.component.d.ts +59 -0
- package/common/xhr-img.component.d.ts.map +1 -0
- package/esm2020/common/mage-common.module.mjs +25 -0
- package/esm2020/common/ngageoint-mage.web-core-lib-common.mjs +5 -0
- package/esm2020/common/public-api.mjs +3 -0
- package/esm2020/common/xhr-img.component.mjs +104 -0
- package/esm2020/event/event-read.service.mjs +3 -0
- package/esm2020/event/event.model.mjs +2 -0
- package/esm2020/event/ngageoint-mage.web-core-lib-event.mjs +5 -0
- package/esm2020/event/public-api.mjs +3 -0
- package/esm2020/feed/feed.model.mjs +2 -0
- package/esm2020/feed/feed.service.mjs +105 -0
- package/esm2020/feed/ngageoint-mage.web-core-lib-feed.mjs +5 -0
- package/esm2020/feed/public-api.mjs +3 -0
- package/esm2020/mage-core-lib.module.mjs +19 -0
- package/esm2020/ngageoint-mage.web-core-lib.mjs +5 -0
- package/esm2020/paging/ngageoint-mage.web-core-lib-paging.mjs +5 -0
- package/esm2020/paging/paging.cdk-data-source.adapter.mjs +52 -0
- package/esm2020/paging/paging.model.mjs +25 -0
- package/esm2020/paging/public-api.mjs +3 -0
- package/esm2020/plugin/ngageoint-mage.web-core-lib-plugin.mjs +5 -0
- package/esm2020/plugin/plugin.model.mjs +2 -0
- package/esm2020/plugin/public-api.mjs +2 -0
- package/esm2020/public-api.mjs +5 -0
- package/esm2020/static-icon/ngageoint-mage.web-core-lib-static-icon.mjs +5 -0
- package/esm2020/static-icon/public-api.mjs +7 -0
- package/esm2020/static-icon/static-icon-form-field/static-icon-form-field.component.mjs +145 -0
- package/esm2020/static-icon/static-icon-img/static-icon-img.component.mjs +35 -0
- package/esm2020/static-icon/static-icon-select/static-icon-select.component.mjs +52 -0
- package/esm2020/static-icon/static-icon.model.mjs +10 -0
- package/esm2020/static-icon/static-icon.module.mjs +54 -0
- package/esm2020/static-icon/static-icon.service.mjs +82 -0
- package/esm2020/user/ngageoint-mage.web-core-lib-user.mjs +5 -0
- package/esm2020/user/public-api.mjs +5 -0
- package/esm2020/user/user-read.service.mjs +40 -0
- package/esm2020/user/user-select/user-select.component.mjs +159 -0
- package/esm2020/user/user.model.mjs +2 -0
- package/esm2020/user/user.module.mjs +64 -0
- package/event/event-read.service.d.ts +12 -0
- package/event/event-read.service.d.ts.map +1 -0
- package/event/event.model.d.ts +7 -0
- package/event/event.model.d.ts.map +1 -0
- package/event/index.d.ts +6 -0
- package/event/ngageoint-mage.web-core-lib-event.d.ts.map +1 -0
- package/event/public-api.d.ts +3 -0
- package/event/public-api.d.ts.map +1 -0
- package/feed/feed.model.d.ts +84 -0
- package/feed/feed.model.d.ts.map +1 -0
- package/feed/feed.service.d.ts +41 -0
- package/feed/feed.service.d.ts.map +1 -0
- package/feed/index.d.ts +6 -0
- package/feed/ngageoint-mage.web-core-lib-feed.d.ts.map +1 -0
- package/feed/public-api.d.ts +3 -0
- package/feed/public-api.d.ts.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib-common.mjs +142 -0
- package/fesm2015/ngageoint-mage.web-core-lib-common.mjs.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib-event.mjs +10 -0
- package/fesm2015/ngageoint-mage.web-core-lib-event.mjs.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib-feed.mjs +114 -0
- package/fesm2015/ngageoint-mage.web-core-lib-feed.mjs.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib-paging.mjs +83 -0
- package/fesm2015/ngageoint-mage.web-core-lib-paging.mjs.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib-plugin.mjs +4 -0
- package/fesm2015/ngageoint-mage.web-core-lib-plugin.mjs.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib-static-icon.mjs +392 -0
- package/fesm2015/ngageoint-mage.web-core-lib-static-icon.mjs.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib-user.mjs +279 -0
- package/fesm2015/ngageoint-mage.web-core-lib-user.mjs.map +1 -0
- package/fesm2015/ngageoint-mage.web-core-lib.mjs +32 -0
- package/fesm2015/ngageoint-mage.web-core-lib.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib-common.mjs +133 -0
- package/fesm2020/ngageoint-mage.web-core-lib-common.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib-event.mjs +10 -0
- package/fesm2020/ngageoint-mage.web-core-lib-event.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib-feed.mjs +112 -0
- package/fesm2020/ngageoint-mage.web-core-lib-feed.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib-paging.mjs +83 -0
- package/fesm2020/ngageoint-mage.web-core-lib-paging.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib-plugin.mjs +4 -0
- package/fesm2020/ngageoint-mage.web-core-lib-plugin.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib-static-icon.mjs +368 -0
- package/fesm2020/ngageoint-mage.web-core-lib-static-icon.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib-user.mjs +262 -0
- package/fesm2020/ngageoint-mage.web-core-lib-user.mjs.map +1 -0
- package/fesm2020/ngageoint-mage.web-core-lib.mjs +30 -0
- package/fesm2020/ngageoint-mage.web-core-lib.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/mage-core-lib.module.d.ts +8 -0
- package/mage-core-lib.module.d.ts.map +1 -0
- package/ngageoint-mage.web-core-lib.d.ts.map +1 -0
- package/package.json +102 -0
- package/paging/index.d.ts +6 -0
- package/paging/ngageoint-mage.web-core-lib-paging.d.ts.map +1 -0
- package/paging/paging.cdk-data-source.adapter.d.ts +21 -0
- package/paging/paging.cdk-data-source.adapter.d.ts.map +1 -0
- package/paging/paging.model.d.ts +28 -0
- package/paging/paging.model.d.ts.map +1 -0
- package/paging/public-api.d.ts +3 -0
- package/paging/public-api.d.ts.map +1 -0
- package/plugin/index.d.ts +6 -0
- package/plugin/ngageoint-mage.web-core-lib-plugin.d.ts.map +1 -0
- package/plugin/plugin.model.d.ts +14 -0
- package/plugin/plugin.model.d.ts.map +1 -0
- package/plugin/public-api.d.ts +2 -0
- package/plugin/public-api.d.ts.map +1 -0
- package/public-api.d.ts +2 -0
- package/public-api.d.ts.map +1 -0
- package/static-icon/index.d.ts +6 -0
- package/static-icon/ngageoint-mage.web-core-lib-static-icon.d.ts.map +1 -0
- package/static-icon/public-api.d.ts +7 -0
- package/static-icon/public-api.d.ts.map +1 -0
- package/static-icon/static-icon-form-field/static-icon-form-field.component.d.ts +32 -0
- package/static-icon/static-icon-form-field/static-icon-form-field.component.d.ts.map +1 -0
- package/static-icon/static-icon-img/static-icon-img.component.d.ts +13 -0
- package/static-icon/static-icon-img/static-icon-img.component.d.ts.map +1 -0
- package/static-icon/static-icon-select/static-icon-select.component.d.ts +22 -0
- package/static-icon/static-icon-select/static-icon-select.component.d.ts.map +1 -0
- package/static-icon/static-icon.model.d.ts +20 -0
- package/static-icon/static-icon.model.d.ts.map +1 -0
- package/static-icon/static-icon.module.d.ts +15 -0
- package/static-icon/static-icon.module.d.ts.map +1 -0
- package/static-icon/static-icon.service.d.ts +21 -0
- package/static-icon/static-icon.service.d.ts.map +1 -0
- package/user/index.d.ts +6 -0
- package/user/ngageoint-mage.web-core-lib-user.d.ts.map +1 -0
- package/user/public-api.d.ts +5 -0
- package/user/public-api.d.ts.map +1 -0
- package/user/user-read.service.d.ts +25 -0
- package/user/user-read.service.d.ts.map +1 -0
- package/user/user-select/user-select.component.d.ts +39 -0
- package/user/user-select/user-select.component.d.ts.map +1 -0
- package/user/user.model.d.ts +86 -0
- package/user/user.model.d.ts.map +1 -0
- package/user/user.module.d.ts +18 -0
- package/user/user.module.d.ts.map +1 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { Component, ViewChild, forwardRef } from '@angular/core';
|
|
2
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
+
import { NgSelectComponent } from '@ng-select/ng-select';
|
|
4
|
+
import { pageForItemIndex } from '@ngageoint/mage.web-core-lib/paging';
|
|
5
|
+
import { Subject } from 'rxjs';
|
|
6
|
+
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../user-read.service";
|
|
9
|
+
import * as i2 from "@ng-select/ng-select";
|
|
10
|
+
function UserSelectComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
11
|
+
i0.ɵɵelementStart(0, "small", 3);
|
|
12
|
+
i0.ɵɵtext(1);
|
|
13
|
+
i0.ɵɵelementEnd();
|
|
14
|
+
} if (rf & 2) {
|
|
15
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
16
|
+
i0.ɵɵadvance(1);
|
|
17
|
+
i0.ɵɵtextInterpolate1("", ctx_r0.totalCount, " matching users");
|
|
18
|
+
} }
|
|
19
|
+
function UserSelectComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
20
|
+
i0.ɵɵelementStart(0, "div", 4)(1, "p", 5);
|
|
21
|
+
i0.ɵɵtext(2);
|
|
22
|
+
i0.ɵɵelementEnd();
|
|
23
|
+
i0.ɵɵelementStart(3, "p", 6);
|
|
24
|
+
i0.ɵɵtext(4);
|
|
25
|
+
i0.ɵɵelementEnd();
|
|
26
|
+
i0.ɵɵelementStart(5, "p", 6);
|
|
27
|
+
i0.ɵɵtext(6);
|
|
28
|
+
i0.ɵɵelementEnd()();
|
|
29
|
+
} if (rf & 2) {
|
|
30
|
+
const user_r2 = ctx.item;
|
|
31
|
+
i0.ɵɵadvance(2);
|
|
32
|
+
i0.ɵɵtextInterpolate2("", user_r2.displayName, " (", user_r2.username, ")");
|
|
33
|
+
i0.ɵɵadvance(2);
|
|
34
|
+
i0.ɵɵtextInterpolate(user_r2.email || "[no email]");
|
|
35
|
+
i0.ɵɵadvance(2);
|
|
36
|
+
i0.ɵɵtextInterpolate(user_r2.allPhones || "[no phone]");
|
|
37
|
+
} }
|
|
38
|
+
export class UserSelectComponent {
|
|
39
|
+
constructor(userService) {
|
|
40
|
+
this.userService = userService;
|
|
41
|
+
this.baseFindParams = Object.freeze({
|
|
42
|
+
pageSize: 100,
|
|
43
|
+
pageIndex: 0,
|
|
44
|
+
term: null
|
|
45
|
+
});
|
|
46
|
+
this.nextPageScrollThreshold = 15;
|
|
47
|
+
this.searchTermDebounceTime = 500;
|
|
48
|
+
this.trackByUserId = x => x.id;
|
|
49
|
+
this.users = [];
|
|
50
|
+
this.totalCount = 0;
|
|
51
|
+
this.searchTerm$ = new Subject();
|
|
52
|
+
this.currentSearchTerm = null;
|
|
53
|
+
this.currentFetch = null;
|
|
54
|
+
}
|
|
55
|
+
get loading() {
|
|
56
|
+
return !!this.currentFetch && !this.currentFetch.closed;
|
|
57
|
+
}
|
|
58
|
+
ngOnInit() {
|
|
59
|
+
this.searchTerm$.pipe(distinctUntilChanged(), debounceTime(this.searchTermDebounceTime))
|
|
60
|
+
.subscribe(x => {
|
|
61
|
+
this.currentSearchTerm = x;
|
|
62
|
+
this.users = [];
|
|
63
|
+
this.totalCount = 0;
|
|
64
|
+
if (this.currentFetch) {
|
|
65
|
+
this.currentFetch.unsubscribe();
|
|
66
|
+
this.currentFetch = null;
|
|
67
|
+
}
|
|
68
|
+
this.fetchNextPage();
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
ngOnChanges(changes) {
|
|
72
|
+
}
|
|
73
|
+
ngAfterViewInit() {
|
|
74
|
+
}
|
|
75
|
+
writeValue(x) {
|
|
76
|
+
this.userSelect.writeValue(x);
|
|
77
|
+
}
|
|
78
|
+
registerOnChange(fn) {
|
|
79
|
+
this.userSelect.registerOnChange(fn);
|
|
80
|
+
}
|
|
81
|
+
registerOnTouched(fn) {
|
|
82
|
+
this.userSelect.registerOnTouched(fn);
|
|
83
|
+
}
|
|
84
|
+
setDisabledState(isDisabled) {
|
|
85
|
+
this.userSelect.setDisabledState(isDisabled);
|
|
86
|
+
}
|
|
87
|
+
onOpen() {
|
|
88
|
+
if (this.users.length === 0) {
|
|
89
|
+
this.fetchNextPage();
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
onScroll({ end }) {
|
|
93
|
+
if (end < this.users.length - this.nextPageScrollThreshold || this.users.length === this.totalCount) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
this.fetchNextPage();
|
|
97
|
+
}
|
|
98
|
+
onScrollToEnd() {
|
|
99
|
+
}
|
|
100
|
+
fetchNextPage() {
|
|
101
|
+
if (this.currentFetch) {
|
|
102
|
+
if (this.currentFetch.closed) {
|
|
103
|
+
this.currentFetch = null;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const nextPage = pageForItemIndex(this.users.length, this.baseFindParams.pageSize);
|
|
110
|
+
const findParams = {
|
|
111
|
+
...this.baseFindParams,
|
|
112
|
+
pageIndex: nextPage
|
|
113
|
+
};
|
|
114
|
+
if (this.currentSearchTerm) {
|
|
115
|
+
findParams.term = this.currentSearchTerm;
|
|
116
|
+
}
|
|
117
|
+
this.currentFetch = this.userService.search(findParams).subscribe(page => {
|
|
118
|
+
this.users = this.users.concat(page.items);
|
|
119
|
+
if (typeof page.totalCount === 'number') {
|
|
120
|
+
this.totalCount = page.totalCount;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
UserSelectComponent.ɵfac = function UserSelectComponent_Factory(t) { return new (t || UserSelectComponent)(i0.ɵɵdirectiveInject(i1.UserReadService)); };
|
|
126
|
+
UserSelectComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UserSelectComponent, selectors: [["mage-user-select"]], viewQuery: function UserSelectComponent_Query(rf, ctx) { if (rf & 1) {
|
|
127
|
+
i0.ɵɵviewQuery(NgSelectComponent, 7);
|
|
128
|
+
} if (rf & 2) {
|
|
129
|
+
let _t;
|
|
130
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.userSelect = _t.first);
|
|
131
|
+
} }, features: [i0.ɵɵProvidersFeature([
|
|
132
|
+
{
|
|
133
|
+
provide: NG_VALUE_ACCESSOR,
|
|
134
|
+
multi: true,
|
|
135
|
+
useExisting: forwardRef(() => UserSelectComponent)
|
|
136
|
+
}
|
|
137
|
+
]), i0.ɵɵNgOnChangesFeature], decls: 3, vars: 5, consts: [["appendTo", "body", "placeholder", "Choose a user", "bindLabel", "displayName", 3, "items", "typeahead", "virtualScroll", "loading", "trackByFn", "open", "scroll", "scrollToEnd"], ["ng-header-tmp", ""], ["class", "user-option", "ng-option-tmp", ""], [1, "form-text", "text-muted"], [1, "user-option"], [1, "user-option__line", "primary"], [1, "user-option__line", "detail"]], template: function UserSelectComponent_Template(rf, ctx) { if (rf & 1) {
|
|
138
|
+
i0.ɵɵelementStart(0, "ng-select", 0);
|
|
139
|
+
i0.ɵɵlistener("open", function UserSelectComponent_Template_ng_select_open_0_listener() { return ctx.onOpen(); })("scroll", function UserSelectComponent_Template_ng_select_scroll_0_listener($event) { return ctx.onScroll($event); })("scrollToEnd", function UserSelectComponent_Template_ng_select_scrollToEnd_0_listener() { return ctx.onScrollToEnd(); });
|
|
140
|
+
i0.ɵɵtemplate(1, UserSelectComponent_ng_template_1_Template, 2, 1, "ng-template", 1);
|
|
141
|
+
i0.ɵɵtemplate(2, UserSelectComponent_ng_template_2_Template, 7, 4, "ng-template", 2);
|
|
142
|
+
i0.ɵɵelementEnd();
|
|
143
|
+
} if (rf & 2) {
|
|
144
|
+
i0.ɵɵproperty("items", ctx.users)("typeahead", ctx.searchTerm$)("virtualScroll", true)("loading", ctx.loading)("trackByFn", ctx.trackByUserId);
|
|
145
|
+
} }, dependencies: [i2.NgSelectComponent, i2.NgOptionTemplateDirective, i2.NgHeaderTemplateDirective], styles: [".user-option[_ngcontent-%COMP%]{margin:.85em 0}.user-option[_ngcontent-%COMP%] > .user-option__line[_ngcontent-%COMP%]{margin:0 0 .6em;padding:0;line-height:1em;overflow:hidden;text-overflow:ellipsis}.user-option[_ngcontent-%COMP%] > .user-option__line.primary[_ngcontent-%COMP%]{font-size:1em}.user-option[_ngcontent-%COMP%] > .user-option__line.detail[_ngcontent-%COMP%]{font-size:.85em;opacity:.75}"] });
|
|
146
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UserSelectComponent, [{
|
|
147
|
+
type: Component,
|
|
148
|
+
args: [{ selector: 'mage-user-select', providers: [
|
|
149
|
+
{
|
|
150
|
+
provide: NG_VALUE_ACCESSOR,
|
|
151
|
+
multi: true,
|
|
152
|
+
useExisting: forwardRef(() => UserSelectComponent)
|
|
153
|
+
}
|
|
154
|
+
], template: "<ng-select [items]=\"users\"\n [typeahead]=\"searchTerm$\"\n [virtualScroll]=\"true\"\n [loading]=\"loading\"\n [trackByFn]=\"trackByUserId\"\n appendTo=\"body\"\n placeholder=\"Choose a user\"\n bindLabel=\"displayName\"\n (open)=\"onOpen()\"\n (scroll)=\"onScroll($event)\"\n (scrollToEnd)=\"onScrollToEnd()\"\n >\n <ng-template ng-header-tmp>\n <small class=\"form-text text-muted\">{{totalCount}} matching users</small>\n </ng-template>\n <ng-template class=\"user-option\" ng-option-tmp let-user=\"item\" let-index=\"index\">\n <div class=\"user-option\">\n <p class=\"user-option__line primary\">{{user.displayName}} ({{user.username}})</p>\n <p class=\"user-option__line detail\">{{user.email || '[no email]'}}</p>\n <p class=\"user-option__line detail\">{{user.allPhones || '[no phone]'}}</p>\n </div>\n </ng-template>\n</ng-select>\n", styles: [".user-option{margin:.85em 0}.user-option>.user-option__line{margin:0 0 .6em;padding:0;line-height:1em;overflow:hidden;text-overflow:ellipsis}.user-option>.user-option__line.primary{font-size:1em}.user-option>.user-option__line.detail{font-size:.85em;opacity:.75}\n"] }]
|
|
155
|
+
}], function () { return [{ type: i1.UserReadService }]; }, { userSelect: [{
|
|
156
|
+
type: ViewChild,
|
|
157
|
+
args: [NgSelectComponent, { static: true }]
|
|
158
|
+
}] }); })();
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1zZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS1saWIvdXNlci91c2VyLXNlbGVjdC91c2VyLXNlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWxpYi91c2VyL3VzZXItc2VsZWN0L3VzZXItc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFtQyxTQUFTLEVBQUUsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFBO0FBQ3hILE9BQU8sRUFBcUMsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNyRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUd4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQW1CLE1BQU0scUNBQXFDLENBQUE7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBcUQsTUFBTSxNQUFNLENBQUE7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFBOzs7OztJQ00vRCxnQ0FBb0M7SUFBQSxZQUE2QjtJQUFBLGlCQUFROzs7SUFBckMsZUFBNkI7SUFBN0IsK0RBQTZCOzs7SUFHakUsOEJBQXlCLFdBQUE7SUFDYyxZQUF3QztJQUFBLGlCQUFJO0lBQ2pGLDRCQUFvQztJQUFBLFlBQThCO0lBQUEsaUJBQUk7SUFDdEUsNEJBQW9DO0lBQUEsWUFBa0M7SUFBQSxpQkFBSSxFQUFBOzs7SUFGckMsZUFBd0M7SUFBeEMsMkVBQXdDO0lBQ3pDLGVBQThCO0lBQTlCLG1EQUE4QjtJQUM5QixlQUFrQztJQUFsQyx1REFBa0M7O0FESzVFLE1BQU0sT0FBTyxtQkFBbUI7SUF1QjlCLFlBQW9CLFdBQTRCO1FBQTVCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQXJCdkMsbUJBQWMsR0FBK0Is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Q0UsT0FBTyxFQUFFLGlCQUFpQjt3QkFDMUIsS0FBSyxFQUFFLElBQUk7d0JBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7cUJBQ25EO2lCQUNGO2tFQXFCRCxVQUFVO2tCQURULFNBQVM7bUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIGZvcndhcmRSZWYsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgeyBOZ1NlbGVjdENvbXBvbmVudCB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0J1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uL3VzZXIubW9kZWwnXG5pbXBvcnQgeyBVc2VyUmVhZFNlcnZpY2UsIFVzZXJTZWFyY2hQYXJhbXMsIFVzZXJTZWFyY2hSZXN1bHQgfSBmcm9tICcuLi91c2VyLXJlYWQuc2VydmljZSdcbmltcG9ydCB7IHBhZ2VGb3JJdGVtSW5kZXgsIGl0ZW1SYW5nZU9mUGFnZSB9IGZyb20gJ0BuZ2FnZW9pbnQvbWFnZS53ZWItY29yZS1saWIvcGFnaW5nJ1xuaW1wb3J0IHsgU3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb25MaWtlLCBVbnN1YnNjcmliYWJsZSB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBYIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYWdlLXVzZXItc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXG4gICAgJy4vdXNlci1zZWxlY3QuY29tcG9uZW50LnNjc3MnXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBVc2VyU2VsZWN0Q29tcG9uZW50KVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBVc2VyU2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcblxuICByZWFkb25seSBiYXNlRmluZFBhcmFtczogUmVhZG9ubHk8VXNlclNlYXJjaFBhcmFtcz4gPSBPYmplY3QuZnJlZXplKHtcbiAgICBwYWdlU2l6ZTogMTAwLFxuICAgIHBhZ2VJbmRleDogMCxcbiAgICB0ZXJtOiBudWxsXG4gIH0pXG4gIHJlYWRvbmx5IG5leHRQYWdlU2Nyb2xsVGhyZXNob2xkID0gMTVcbiAgcmVhZG9ubHkgc2VhcmNoVGVybURlYm91bmNlVGltZSA9IDUwMFxuICByZWFkb25seSB0cmFja0J5VXNlcklkOiAoeDogVXNlcikgPT4gVXNlclsnaWQnXSA9IHggPT4geC5pZFxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmN1cnJlbnRGZXRjaCAmJiAhdGhpcy5jdXJyZW50RmV0Y2guY2xvc2VkXG4gIH1cblxuICB1c2VyczogVXNlclNlYXJjaFJlc3VsdFtdID0gW11cbiAgdG90YWxDb3VudCA9IDBcbiAgc2VhcmNoVGVybSQgPSBuZXcgU3ViamVjdDxzdHJpbmcgfCBudWxsPigpXG4gIGN1cnJlbnRTZWFyY2hUZXJtOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBAVmlld0NoaWxkKE5nU2VsZWN0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICB1c2VyU2VsZWN0OiBOZ1NlbGVjdENvbXBvbmVudFxuXG4gIHByaXZhdGUgY3VycmVudEZldGNoOiBTdWJzY3JpcHRpb25MaWtlIHwgbnVsbCA9IG51bGxcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyUmVhZFNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2VhcmNoVGVybSQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBkZWJvdW5jZVRpbWUodGhpcy5zZWFyY2hUZXJtRGVib3VuY2VUaW1lKSxcbiAgICApXG4gICAgLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSB4XG4gICAgICB0aGlzLnVzZXJzID0gW11cbiAgICAgIHRoaXMudG90YWxDb3VudCA9IDBcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRGZXRjaCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRGZXRjaC51bnN1YnNjcmliZSgpXG4gICAgICAgIHRoaXMuY3VycmVudEZldGNoID0gbnVsbFxuICAgICAgfVxuICAgICAgdGhpcy5mZXRjaE5leHRQYWdlKClcbiAgICB9KVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh4OiBVc2VyIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudXNlclNlbGVjdC53cml0ZVZhbHVlKHgpXG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoLi4uYXJnczogYW55W10pID0+IGFueSk6IHZvaWQge1xuICAgIHRoaXMudXNlclNlbGVjdC5yZWdpc3Rlck9uQ2hhbmdlKGZuKVxuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55KTogdm9pZCB7XG4gICAgdGhpcy51c2VyU2VsZWN0LnJlZ2lzdGVyT25Ub3VjaGVkKGZuKVxuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy51c2VyU2VsZWN0LnNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZClcbiAgfVxuXG4gIG9uT3BlbigpIHtcbiAgICBpZiAodGhpcy51c2Vycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZmV0Y2hOZXh0UGFnZSgpXG4gICAgfVxuICB9XG5cbiAgb25TY3JvbGwoeyBlbmQgfTogeyBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciB9KSB7XG4gICAgaWYgKGVuZCA8IHRoaXMudXNlcnMubGVuZ3RoIC0gdGhpcy5uZXh0UGFnZVNjcm9sbFRocmVzaG9sZCB8fCB0aGlzLnVzZXJzLmxlbmd0aCA9PT0gdGhpcy50b3RhbENvdW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5mZXRjaE5leHRQYWdlKClcbiAgfVxuXG4gIG9uU2Nyb2xsVG9FbmQoKSB7XG5cbiAgfVxuXG4gIGZldGNoTmV4dFBhZ2UoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudEZldGNoKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50RmV0Y2guY2xvc2VkKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEZldGNoID0gbnVsbFxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBuZXh0UGFnZSA9IHBhZ2VGb3JJdGVtSW5kZXgodGhpcy51c2Vycy5sZW5ndGgsIHRoaXMuYmFzZUZpbmRQYXJhbXMucGFnZVNpemUpXG4gICAgY29uc3QgZmluZFBhcmFtczogVXNlclNlYXJjaFBhcmFtcyA9IHtcbiAgICAgIC4uLnRoaXMuYmFzZUZpbmRQYXJhbXMsXG4gICAgICBwYWdlSW5kZXg6IG5leHRQYWdlXG4gICAgfVxuICAgIGlmICh0aGlzLmN1cnJlbnRTZWFyY2hUZXJtKSB7XG4gICAgICBmaW5kUGFyYW1zLnRlcm0gPSB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtXG4gICAgfVxuICAgIHRoaXMuY3VycmVudEZldGNoID0gdGhpcy51c2VyU2VydmljZS5zZWFyY2goZmluZFBhcmFtcykuc3Vic2NyaWJlKHBhZ2UgPT4ge1xuICAgICAgdGhpcy51c2VycyA9IHRoaXMudXNlcnMuY29uY2F0KHBhZ2UuaXRlbXMpXG4gICAgICBpZiAodHlwZW9mIHBhZ2UudG90YWxDb3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gcGFnZS50b3RhbENvdW50XG4gICAgICB9XG4gICAgfSlcbiAgfVxufSIsIjxuZy1zZWxlY3QgW2l0ZW1zXT1cInVzZXJzXCJcbiAgW3R5cGVhaGVhZF09XCJzZWFyY2hUZXJtJFwiXG4gIFt2aXJ0dWFsU2Nyb2xsXT1cInRydWVcIlxuICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgW3RyYWNrQnlGbl09XCJ0cmFja0J5VXNlcklkXCJcbiAgYXBwZW5kVG89XCJib2R5XCJcbiAgcGxhY2Vob2xkZXI9XCJDaG9vc2UgYSB1c2VyXCJcbiAgYmluZExhYmVsPVwiZGlzcGxheU5hbWVcIlxuICAob3Blbik9XCJvbk9wZW4oKVwiXG4gIChzY3JvbGwpPVwib25TY3JvbGwoJGV2ZW50KVwiXG4gIChzY3JvbGxUb0VuZCk9XCJvblNjcm9sbFRvRW5kKClcIlxuICA+XG4gIDxuZy10ZW1wbGF0ZSBuZy1oZWFkZXItdG1wPlxuICAgIDxzbWFsbCBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LW11dGVkXCI+e3t0b3RhbENvdW50fX0gbWF0Y2hpbmcgdXNlcnM8L3NtYWxsPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgY2xhc3M9XCJ1c2VyLW9wdGlvblwiIG5nLW9wdGlvbi10bXAgbGV0LXVzZXI9XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cbiAgICA8ZGl2IGNsYXNzPVwidXNlci1vcHRpb25cIj5cbiAgICAgIDxwIGNsYXNzPVwidXNlci1vcHRpb25fX2xpbmUgcHJpbWFyeVwiPnt7dXNlci5kaXNwbGF5TmFtZX19ICh7e3VzZXIudXNlcm5hbWV9fSk8L3A+XG4gICAgICA8cCBjbGFzcz1cInVzZXItb3B0aW9uX19saW5lIGRldGFpbFwiPnt7dXNlci5lbWFpbCB8fCAnW25vIGVtYWlsXSd9fTwvcD5cbiAgICAgIDxwIGNsYXNzPVwidXNlci1vcHRpb25fX2xpbmUgZGV0YWlsXCI+e3t1c2VyLmFsbFBob25lcyB8fCAnW25vIHBob25lXSd9fTwvcD5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvbmctc2VsZWN0PlxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUtbGliL3VzZXIvdXNlci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKipcbiAqIFRoaXMgdHlwZSByZXByZXNlbnRzIGEgTUFHRSB1c2VyIGFjY291bnQuICBUaGlzIGlzIGEgYmFzZSB0eXBlIHRoYXQgZGVmaW5lc1xuICogdGhlIHByb3BlcnRpZXMgb2YgYSBwZXJzaXN0ZWQgdXNlciB0aGF0IHRoZSBzZXJ2ZXIgcmV0dXJucyBmcm9tIGEgcmVhZFxuICogb3BlcmF0aW9uLCBsaWtlIGEgdXNlciBxdWVyeS4gIFRoaXMgdHlwZSBkb2VzIG5vdCBuZWNlc3NhcmlseSByZWZsZWN0IHRoZVxuICogcHJvcGVydGllcyB0aGUgY2xpZW50IHdvdWxkIHNlbmQgdG8gdGhlIHNlcnZlciBBUEkgZm9yIG11dGF0aW9uIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBJRCBvZiB0aGUgdXNlciBhY2NvdW50XG4gICAqL1xuICBpZDogc3RyaW5nXG4gIC8qKlxuICAgKiBVbmlxdWUgbmFtZSBmb3IgdGhpcyB1c2VyIGFjY291bnRcbiAgICovXG4gIHVzZXJuYW1lOiBzdHJpbmdcbiAgZGlzcGxheU5hbWU6IHN0cmluZ1xuICAvKipcbiAgICogV2hldGhlciBhbiBhZG1pbiBoYXMgYWN0aXZhdGVkIHRoaXMgdXNlciBhY2NvdW50IGFmdGVyIGluaXRpYWwgc2lnbi11cFxuICAgKi9cbiAgYWN0aXZlOiBib29sZWFuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgYWNjb3VudCBpcyBlbmFibGVkIG9yIGRpYWJsZWQsIHR5cGljYWxseSBieSB0aGUgbWFudWFsIGFjdGlvblxuICAgKiBvZiBhbiBhZG1pbmlzdHJhdG9yXG4gICAqL1xuICBlbmFibGVkOiBib29sZWFuXG4gIC8qKlxuICAgKiBUaGUgYXV0aGVudGljYXRpb24gbWV0aG9kIGZvciB0aGlzIHVzZXIgYWNjb3VudFxuICAgKi9cbiAgYXV0aGVudGljYXRpb246IGFueVxuICAvKipcbiAgICogSVNPLTg2MDEgZGF0ZSBzdHJpbmdcbiAgICovXG4gIGNyZWF0ZWRBdDogc3RyaW5nXG4gIC8qKlxuICAgKiBJU08tODYwMSBkYXRlIHN0cmluZ1xuICAgKi9cbiAgbGFzdFVwZGF0ZWQ6IHN0cmluZ1xuICAvKipcbiAgICogVGhlIGF1dGhvcml6YXRpb24gcm9sZSBvZiB0aGlzIHVzZXIgYWNjb3VudCB0aGF0IGRlZmluZXMgdGhlIGFjdGlvbnMgdGhpc1xuICAgKiB1c2VyIGFjY291bnQgaGFzIHBlcm1pc3Npb24gdG8gcGVyZm9ybVxuICAgKi9cbiAgcm9sZUlkOiBzdHJpbmdcbiAgZW1haWw/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFVSTCBvZiB0aGUgaW1hZ2UgdGhhdCBpZGVudGlmaWVzIHRoaXMgdXNlciBhY2NvdW50IGluIHRoZSB1c2VyIGZlZWQsIGV0Yy47XG4gICAqIGEgcHJvZmlsZSBwaWN0dXJlXG4gICAqL1xuICBhdmF0YXJVcmw/OiBzdHJpbmdcbiAgLyoqXG4gICAqIE1hcCBtYXJrZXIgaWNvbiBpbmZvXG4gICAqL1xuICBpY29uPzogVXNlckljb25cbiAgLyoqXG4gICAqIFVSTCBvZiB0aGUgbWFwIG1hcmtlciBpY29uIGltYWdlXG4gICAqL1xuICBpY29uVXJsPzogc3RyaW5nXG4gIHBob25lczogVXNlclBob25lW11cbiAgLyoqXG4gICAqIExpc3Qgb2YgZXZlbnRzIGluIHdoaWNoIHRoaXMgdXNlciBhY2NvdW50IGhhcyBwYXJ0aWNpcGF0ZWRcbiAgICovXG4gIHJlY2VudEV2ZW50SWRzOiBudW1iZXJbXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQaG9uZSB7XG4gIHR5cGU6IHN0cmluZ1xuICBudW1iZXI6IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJJY29uIHtcbiAgLyoqXG4gICAqIEhleCBjb2xvciBzdHJpbmcgYmVnaW5uaW5nIHdpdGggYCNgXG4gICAqL1xuICBjb2xvcjogc3RyaW5nXG4gIC8qKlxuICAgKiBBIHN0YW5kYXJkIG1lZGlhIHR5cGUsIGUuZy4sIGBpbWFnZS9wbmdgXG4gICAqL1xuICBjb250ZW50VHlwZTogc3RyaW5nXG4gIC8qKlxuICAgKiBTaXplIGluIGJ5dGVzIG9mIHRoZSBpY29uIGltYWdlXG4gICAqL1xuICBzaXplOiBudW1iZXJcbiAgdGV4dDogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIHR5cGUgb2YgdGhlIGljb25cbiAgICovXG4gIHR5cGU6ICdjcmVhdGUnIHwgJ3VwbG9hZCcgfCAnbm9uZSdcbn1cbiJdfQ==
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { NgModule } from '@angular/core';
|
|
4
|
+
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
+
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
6
|
+
import { MatDialogModule } from '@angular/material/dialog';
|
|
7
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
8
|
+
import { MatInputModule } from '@angular/material/input';
|
|
9
|
+
import { MatListModule } from '@angular/material/list';
|
|
10
|
+
import { MatSelectModule } from '@angular/material/select';
|
|
11
|
+
import { UserSelectComponent } from './user-select/user-select.component';
|
|
12
|
+
import { NgSelectModule } from '@ng-select/ng-select';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
export class MageUserModule {
|
|
15
|
+
}
|
|
16
|
+
MageUserModule.ɵfac = function MageUserModule_Factory(t) { return new (t || MageUserModule)(); };
|
|
17
|
+
MageUserModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: MageUserModule });
|
|
18
|
+
MageUserModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [CommonModule,
|
|
19
|
+
FormsModule,
|
|
20
|
+
ReactiveFormsModule,
|
|
21
|
+
ScrollingModule,
|
|
22
|
+
MatAutocompleteModule,
|
|
23
|
+
MatDialogModule,
|
|
24
|
+
MatFormFieldModule,
|
|
25
|
+
MatInputModule,
|
|
26
|
+
MatListModule,
|
|
27
|
+
MatSelectModule,
|
|
28
|
+
NgSelectModule] });
|
|
29
|
+
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MageUserModule, [{
|
|
30
|
+
type: NgModule,
|
|
31
|
+
args: [{
|
|
32
|
+
imports: [
|
|
33
|
+
CommonModule,
|
|
34
|
+
FormsModule,
|
|
35
|
+
ReactiveFormsModule,
|
|
36
|
+
ScrollingModule,
|
|
37
|
+
MatAutocompleteModule,
|
|
38
|
+
MatDialogModule,
|
|
39
|
+
MatFormFieldModule,
|
|
40
|
+
MatInputModule,
|
|
41
|
+
MatListModule,
|
|
42
|
+
MatSelectModule,
|
|
43
|
+
NgSelectModule,
|
|
44
|
+
],
|
|
45
|
+
declarations: [
|
|
46
|
+
UserSelectComponent
|
|
47
|
+
],
|
|
48
|
+
exports: [
|
|
49
|
+
UserSelectComponent
|
|
50
|
+
]
|
|
51
|
+
}]
|
|
52
|
+
}], null, null); })();
|
|
53
|
+
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(MageUserModule, { declarations: [UserSelectComponent], imports: [CommonModule,
|
|
54
|
+
FormsModule,
|
|
55
|
+
ReactiveFormsModule,
|
|
56
|
+
ScrollingModule,
|
|
57
|
+
MatAutocompleteModule,
|
|
58
|
+
MatDialogModule,
|
|
59
|
+
MatFormFieldModule,
|
|
60
|
+
MatInputModule,
|
|
61
|
+
MatListModule,
|
|
62
|
+
MatSelectModule,
|
|
63
|
+
NgSelectModule], exports: [UserSelectComponent] }); })();
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlLWxpYi91c2VyL3VzZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDakUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQzFELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFBO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTs7QUF1QnJELE1BQU0sT0FBTyxjQUFjOzs0RUFBZCxjQUFjO2dFQUFkLGNBQWM7b0VBbkJ2QixZQUFZO1FBQ1osV0FBVztRQUNYLG1CQUFtQjtRQUNuQixlQUFlO1FBQ2YscUJBQXFCO1FBQ3JCLGVBQWU7UUFDZixrQkFBa0I7UUFDbEIsY0FBYztRQUNkLGFBQWE7UUFDYixlQUFlO1FBQ2YsY0FBYzt1RkFTTCxjQUFjO2NBckIxQixRQUFRO2VBQUM7Z0JBQ1IsT0FBTyxFQUFFO29CQUNQLFlBQVk7b0JBQ1osV0FBVztvQkFDWCxtQkFBbUI7b0JBQ25CLGVBQWU7b0JBQ2YscUJBQXFCO29CQUNyQixlQUFlO29CQUNmLGtCQUFrQjtvQkFDbEIsY0FBYztvQkFDZCxhQUFhO29CQUNiLGVBQWU7b0JBQ2YsY0FBYztpQkFDZjtnQkFDRCxZQUFZLEVBQUU7b0JBQ1osbUJBQW1CO2lCQUNwQjtnQkFDRCxPQUFPLEVBQUU7b0JBQ1AsbUJBQW1CO2lCQUNwQjthQUNGOzt3RkFDWSxjQUFjLG1CQU52QixtQkFBbUIsYUFibkIsWUFBWTtRQUNaLFdBQVc7UUFDWCxtQkFBbUI7UUFDbkIsZUFBZTtRQUNmLHFCQUFxQjtRQUNyQixlQUFlO1FBQ2Ysa0JBQWtCO1FBQ2xCLGNBQWM7UUFDZCxhQUFhO1FBQ2IsZUFBZTtRQUNmLGNBQWMsYUFNZCxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJ1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3JtcydcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSdcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZydcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0J1xuaW1wb3J0IHsgTWF0TGlzdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnXG5pbXBvcnQgeyBVc2VyU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi91c2VyLXNlbGVjdC91c2VyLXNlbGVjdC5jb21wb25lbnQnXG5pbXBvcnQgeyBOZ1NlbGVjdE1vZHVsZSB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0J1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgU2Nyb2xsaW5nTW9kdWxlLFxuICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcbiAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE1hdExpc3RNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIE5nU2VsZWN0TW9kdWxlLFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBVc2VyU2VsZWN0Q29tcG9uZW50XG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBVc2VyU2VsZWN0Q29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTWFnZVVzZXJNb2R1bGUge1xuXG59Il19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import { PagingParameters } from '@ngageoint/mage.web-core-lib/paging';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { MageEvent } from './event.model';
|
|
5
|
+
export interface EventReadService {
|
|
6
|
+
find(which: EventReadParams): Observable<MageEvent[]>;
|
|
7
|
+
}
|
|
8
|
+
export interface EventReadParams {
|
|
9
|
+
page: PagingParameters;
|
|
10
|
+
}
|
|
11
|
+
export declare const EVENT_READ_SERVICE: InjectionToken<EventReadService>;
|
|
12
|
+
//# sourceMappingURL=event-read.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-read.service.d.ts","sourceRoot":"","sources":["../../../projects/core-lib/event/event-read.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,CAAA;CACtD;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,gBAAgB,CAAA;CACvB;AAED,eAAO,MAAM,kBAAkB,kCAA2D,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.model.d.ts","sourceRoot":"","sources":["../../../projects/core-lib/event/event.model.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB"}
|
package/event/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngageoint-mage.web-core-lib-event.d.ts","sourceRoot":"","sources":["../../../projects/core-lib/event/ngageoint-mage.web-core-lib-event.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../../projects/core-lib/event/public-api.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Feature, FeatureCollection } from 'geojson';
|
|
2
|
+
import { RegisteredStaticIconReference, SourceUrlStaticIconReference, StaticIconReference } from '@ngageoint/mage.web-core-lib/static-icon';
|
|
3
|
+
export interface Feed {
|
|
4
|
+
id: string;
|
|
5
|
+
service: string;
|
|
6
|
+
topic: string;
|
|
7
|
+
title: string;
|
|
8
|
+
summary?: string;
|
|
9
|
+
icon?: RegisteredStaticIconReference;
|
|
10
|
+
mapStyle?: RegisteredMapStyle;
|
|
11
|
+
itemTemporalProperty?: string;
|
|
12
|
+
itemPrimaryProperty?: string;
|
|
13
|
+
itemSecondaryProperty?: string;
|
|
14
|
+
itemsHaveSpatialDimension?: boolean;
|
|
15
|
+
itemsHaveIdentity?: boolean;
|
|
16
|
+
constantParams?: any;
|
|
17
|
+
variableParamsSchema?: any;
|
|
18
|
+
updateFrequencySeconds?: number;
|
|
19
|
+
itemPropertiesSchema?: any;
|
|
20
|
+
}
|
|
21
|
+
export interface MapStyle {
|
|
22
|
+
icon?: SourceUrlStaticIconReference;
|
|
23
|
+
}
|
|
24
|
+
export interface RegisteredMapStyle {
|
|
25
|
+
icon?: RegisteredStaticIconReference;
|
|
26
|
+
}
|
|
27
|
+
export declare type StyledFeature = Feature & {
|
|
28
|
+
style: MapStyle;
|
|
29
|
+
};
|
|
30
|
+
export interface FeedContent {
|
|
31
|
+
items: FeatureCollection;
|
|
32
|
+
}
|
|
33
|
+
export interface ServiceType {
|
|
34
|
+
/**
|
|
35
|
+
* Well-known identifier that the feed plugin creator assigns
|
|
36
|
+
*/
|
|
37
|
+
pluginServiceTypeId: string;
|
|
38
|
+
/**
|
|
39
|
+
* The unique identifier MAGE server generates to reference the service type
|
|
40
|
+
*/
|
|
41
|
+
id: string;
|
|
42
|
+
title: string;
|
|
43
|
+
summary: string;
|
|
44
|
+
configSchema: any;
|
|
45
|
+
}
|
|
46
|
+
export interface Service {
|
|
47
|
+
id: string;
|
|
48
|
+
title: string;
|
|
49
|
+
serviceType: ServiceType | string;
|
|
50
|
+
summary: string | null;
|
|
51
|
+
config: any;
|
|
52
|
+
}
|
|
53
|
+
export interface FeedTopic {
|
|
54
|
+
id: string;
|
|
55
|
+
title: string;
|
|
56
|
+
summary?: string;
|
|
57
|
+
icon?: SourceUrlStaticIconReference;
|
|
58
|
+
paramsSchema?: any;
|
|
59
|
+
updateFrequencySeconds?: number;
|
|
60
|
+
itemsHaveIdentity?: boolean;
|
|
61
|
+
itemsHaveSpatialDimension?: boolean;
|
|
62
|
+
itemTemporalProperty?: string;
|
|
63
|
+
itemPrimaryProperty?: string;
|
|
64
|
+
itemSecondaryProperty?: string;
|
|
65
|
+
itemPropertiesSchema?: any;
|
|
66
|
+
mapStyle?: MapStyle;
|
|
67
|
+
}
|
|
68
|
+
export declare type FeedExpanded = Omit<Feed, 'service' | 'topic'> & {
|
|
69
|
+
service: Service;
|
|
70
|
+
topic: FeedTopic;
|
|
71
|
+
};
|
|
72
|
+
export interface FeedContent {
|
|
73
|
+
feed: string;
|
|
74
|
+
variableParams?: any;
|
|
75
|
+
items: FeatureCollection;
|
|
76
|
+
}
|
|
77
|
+
export interface FeedPreview {
|
|
78
|
+
feed: Feed;
|
|
79
|
+
content?: FeedContent;
|
|
80
|
+
}
|
|
81
|
+
export declare type FeedPost = Partial<Omit<Feed, 'service' | 'topic' | 'icon'>> & Pick<Feed, 'service' | 'topic'> & {
|
|
82
|
+
icon?: StaticIconReference;
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=feed.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feed.model.d.ts","sourceRoot":"","sources":["../../../projects/core-lib/feed/feed.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { Feature } from 'geojson';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { Feed, FeedContent, FeedExpanded, FeedPost, FeedPreview, FeedTopic, Service, ServiceType } from './feed.model';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export interface FeedPreviewOptions {
|
|
7
|
+
skipContentFetch?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class FeedService {
|
|
10
|
+
private http;
|
|
11
|
+
constructor(http: HttpClient);
|
|
12
|
+
private _feeds;
|
|
13
|
+
readonly feeds: Observable<Feed[]>;
|
|
14
|
+
private _feedItems;
|
|
15
|
+
feedItems(feedId: string): Observable<Array<Feature>>;
|
|
16
|
+
fetchAllFeeds(): Observable<Array<Feed>>;
|
|
17
|
+
fetchFeed(feedId: string): Observable<FeedExpanded>;
|
|
18
|
+
fetchService(serviceId: string): Observable<Service>;
|
|
19
|
+
createService(service: {
|
|
20
|
+
title: string;
|
|
21
|
+
summary?: string;
|
|
22
|
+
serviceType: string;
|
|
23
|
+
config: any;
|
|
24
|
+
}): Observable<Service>;
|
|
25
|
+
fetchServices(): Observable<Array<Service>>;
|
|
26
|
+
fetchServiceFeeds(serviceId: string): Observable<Array<Feed>>;
|
|
27
|
+
fetchServiceType(serviceTypeId: string): Observable<ServiceType>;
|
|
28
|
+
fetchTopics(serviceId: string): Observable<Array<FeedTopic>>;
|
|
29
|
+
previewFeed(serviceId: string, topicId: string, feedSpec: Partial<Omit<FeedPost, 'service' | 'topic'>>, opts?: FeedPreviewOptions): Observable<FeedPreview>;
|
|
30
|
+
fetchTopic(serviceId: string, topicId: string): Observable<FeedTopic>;
|
|
31
|
+
fetchServiceTypes(): Observable<Array<ServiceType>>;
|
|
32
|
+
createFeed(serviceId: string, topicId: string, feedConfiguration: any): Observable<FeedExpanded>;
|
|
33
|
+
updateFeed(feed: Partial<Omit<FeedPost, 'id'>> & Pick<Feed, 'id'>): Observable<FeedExpanded>;
|
|
34
|
+
deleteFeed(feed: Feed | FeedExpanded): Observable<{}>;
|
|
35
|
+
deleteService(service: Service): Observable<{}>;
|
|
36
|
+
fetchFeeds(eventId: number): Observable<Array<Feed>>;
|
|
37
|
+
fetchFeedItems(event: any, feed: Feed): Observable<FeedContent>;
|
|
38
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FeedService, never>;
|
|
39
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<FeedService>;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=feed.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feed.service.d.ts","sourceRoot":"","sources":["../../../projects/core-lib/feed/feed.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAmB,UAAU,EAAW,MAAM,MAAM,CAAA;AAE3D,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAiB,MAAM,cAAc,CAAA;;AAGrI,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED,qBAGa,WAAW;IAEV,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAGpC,OAAO,CAAC,MAAM,CAAwC;IACtD,QAAQ,CAAC,KAAK,qBAA8B;IAE5C,OAAO,CAAC,UAAU,CAAsD;IACxE,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAIrD,aAAa,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAIxC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC;IAInD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;IAIpD,aAAa,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAC,GAAG,UAAU,CAAC,OAAO,CAAC;IAIjH,aAAa,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAI3C,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAI7D,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC;IAIhE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAI5D,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,UAAU,CAAC,WAAW,CAAC;IAQ3J,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC;IAIrE,iBAAiB,IAAI,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAInD,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC;IAIhG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC;IAI5F,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,YAAY,GAAG,UAAU,CAAC,EAAE,CAAC;IAIrD,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,EAAE,CAAC;IAK/C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAuBpD,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC,WAAW,CAAC;yCArGpD,WAAW;6CAAX,WAAW;CAmHvB"}
|
package/feed/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngageoint-mage.web-core-lib-feed.d.ts","sourceRoot":"","sources":["../../../projects/core-lib/feed/ngageoint-mage.web-core-lib-feed.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../../../projects/core-lib/feed/public-api.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, Component, Inject, Input, NgModule } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/common/http';
|
|
4
|
+
import * as i2 from '@angular/platform-browser';
|
|
5
|
+
import { BrowserModule } from '@angular/platform-browser';
|
|
6
|
+
|
|
7
|
+
const selector = 'mage-xhr-img';
|
|
8
|
+
const OBJECT_URL_SERVICE = new InjectionToken(`${selector}.objectUrlService`);
|
|
9
|
+
/**
|
|
10
|
+
* This component allows fetching images by `XMLHttpRequest` rather than the
|
|
11
|
+
* browser's native mechanism. These image requests are subject to HTTP
|
|
12
|
+
* interceptors that can add authorization headers to the request instead of
|
|
13
|
+
* using cache-defeating URL query parameters to set an auth token. Applying
|
|
14
|
+
* headers to the browser's native `img` requests is impossible, so a query
|
|
15
|
+
* parameter is necessary for authorization, but adding the parameter to the
|
|
16
|
+
* URL effectively bypasses the browser's caching mechanism when the auth token
|
|
17
|
+
* changes for images that
|
|
18
|
+
* should otherwise be subject to caching.
|
|
19
|
+
*
|
|
20
|
+
* The catch to fetching images by XHR is the response must be fetched as a
|
|
21
|
+
* `Blob`. The user then gets a browser-specific URL for the blob by
|
|
22
|
+
* `URL.createObjectURL(blob)`, which can then be assigned to the `src`
|
|
23
|
+
* attribute of an `img` tag. These blob URLs must then be "revoked" by
|
|
24
|
+
* `URL.revokeObjectURL(url)` in order to reclaim object URL's associated
|
|
25
|
+
* resources. See [Mozilla's docs](https://developer.mozilla.org/en-US/docs/Web/API/File/Using_files_from_web_applications#example_using_object_urls_to_display_images)
|
|
26
|
+
* on the subject.
|
|
27
|
+
*
|
|
28
|
+
* To use the component, simply add the tag to a template and bind the `src`
|
|
29
|
+
* attribute to the source URL of the desired image.
|
|
30
|
+
* ```
|
|
31
|
+
* <mage-xhr-img [src]="someComponent.imageUrlRequiresAuth"></mage-xhr-img>
|
|
32
|
+
* ```
|
|
33
|
+
* The component encapsulates the logic of creating and releasing the object
|
|
34
|
+
* URLs for the image data, preventing memory leaks.
|
|
35
|
+
*/
|
|
36
|
+
class XhrImgComponent {
|
|
37
|
+
constructor(objectUrlService, http, sanitizer) {
|
|
38
|
+
this.objectUrlService = objectUrlService;
|
|
39
|
+
this.http = http;
|
|
40
|
+
this.sanitizer = sanitizer;
|
|
41
|
+
this.sourceUrl = null;
|
|
42
|
+
this.safeBlobUrl = null;
|
|
43
|
+
}
|
|
44
|
+
ngOnChanges(changes) {
|
|
45
|
+
if (!changes.sourceUrl) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (changes.sourceUrl.isFirstChange() && !this.sourceUrl) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.disposeCurrent();
|
|
52
|
+
if (!this.sourceUrl) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
this.subscription = this.http.get(this.sourceUrl, { responseType: 'blob' })
|
|
56
|
+
.subscribe(x => {
|
|
57
|
+
this.objectUrlService.revokeObjectURL(this.blobUrl);
|
|
58
|
+
this.blobUrl = this.objectUrlService.createObjectURL(x);
|
|
59
|
+
this.safeBlobUrl = this.sanitizer.bypassSecurityTrustUrl(this.blobUrl);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
ngOnDestroy() {
|
|
63
|
+
this.disposeCurrent();
|
|
64
|
+
}
|
|
65
|
+
onImgLoad() {
|
|
66
|
+
this.disposeCurrent();
|
|
67
|
+
}
|
|
68
|
+
disposeCurrent() {
|
|
69
|
+
if (this.blobUrl) {
|
|
70
|
+
this.objectUrlService.revokeObjectURL(this.blobUrl);
|
|
71
|
+
}
|
|
72
|
+
if (this.subscription) {
|
|
73
|
+
this.subscription.unsubscribe();
|
|
74
|
+
}
|
|
75
|
+
this.blobUrl = null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
XhrImgComponent.ɵfac = function XhrImgComponent_Factory(t) { return new (t || XhrImgComponent)(i0.ɵɵdirectiveInject(OBJECT_URL_SERVICE), i0.ɵɵdirectiveInject(i1.HttpClient), i0.ɵɵdirectiveInject(i2.DomSanitizer)); };
|
|
79
|
+
XhrImgComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: XhrImgComponent, selectors: [["mage-xhr-img"]], inputs: { sourceUrl: ["src", "sourceUrl"] }, features: [i0.ɵɵProvidersFeature([
|
|
80
|
+
{
|
|
81
|
+
provide: OBJECT_URL_SERVICE,
|
|
82
|
+
useValue: URL
|
|
83
|
+
}
|
|
84
|
+
]), i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[3, "load"]], template: function XhrImgComponent_Template(rf, ctx) {
|
|
85
|
+
if (rf & 1) {
|
|
86
|
+
i0.ɵɵelementStart(0, "img", 0);
|
|
87
|
+
i0.ɵɵlistener("load", function XhrImgComponent_Template_img_load_0_listener() { return ctx.onImgLoad(); });
|
|
88
|
+
i0.ɵɵelementEnd();
|
|
89
|
+
}
|
|
90
|
+
if (rf & 2) {
|
|
91
|
+
i0.ɵɵattribute("src", ctx.safeBlobUrl, i0.ɵɵsanitizeUrl);
|
|
92
|
+
}
|
|
93
|
+
}, styles: ["img[_ngcontent-%COMP%]{height:100%;width:100%}"] });
|
|
94
|
+
(function () {
|
|
95
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(XhrImgComponent, [{
|
|
96
|
+
type: Component,
|
|
97
|
+
args: [{ selector: `${selector}`, template: `<img [attr.src]="safeBlobUrl" (load)="onImgLoad()"/>`, providers: [
|
|
98
|
+
{
|
|
99
|
+
provide: OBJECT_URL_SERVICE,
|
|
100
|
+
useValue: URL
|
|
101
|
+
}
|
|
102
|
+
], styles: ["img{height:100%;width:100%}\n"] }]
|
|
103
|
+
}], function () {
|
|
104
|
+
return [{ type: undefined, decorators: [{
|
|
105
|
+
type: Inject,
|
|
106
|
+
args: [OBJECT_URL_SERVICE]
|
|
107
|
+
}] }, { type: i1.HttpClient }, { type: i2.DomSanitizer }];
|
|
108
|
+
}, { sourceUrl: [{
|
|
109
|
+
type: Input,
|
|
110
|
+
args: ['src']
|
|
111
|
+
}] });
|
|
112
|
+
})();
|
|
113
|
+
|
|
114
|
+
class MageCommonModule {
|
|
115
|
+
}
|
|
116
|
+
MageCommonModule.ɵfac = function MageCommonModule_Factory(t) { return new (t || MageCommonModule)(); };
|
|
117
|
+
MageCommonModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: MageCommonModule });
|
|
118
|
+
MageCommonModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [BrowserModule] });
|
|
119
|
+
(function () {
|
|
120
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MageCommonModule, [{
|
|
121
|
+
type: NgModule,
|
|
122
|
+
args: [{
|
|
123
|
+
imports: [
|
|
124
|
+
BrowserModule
|
|
125
|
+
],
|
|
126
|
+
declarations: [
|
|
127
|
+
XhrImgComponent
|
|
128
|
+
],
|
|
129
|
+
exports: [
|
|
130
|
+
XhrImgComponent
|
|
131
|
+
]
|
|
132
|
+
}]
|
|
133
|
+
}], null, null);
|
|
134
|
+
})();
|
|
135
|
+
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(MageCommonModule, { declarations: [XhrImgComponent], imports: [BrowserModule], exports: [XhrImgComponent] }); })();
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Generated bundle index. Do not edit.
|
|
139
|
+
*/
|
|
140
|
+
|
|
141
|
+
export { MageCommonModule, OBJECT_URL_SERVICE, XhrImgComponent };
|
|
142
|
+
//# sourceMappingURL=ngageoint-mage.web-core-lib-common.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngageoint-mage.web-core-lib-common.mjs","sources":["../../../projects/core-lib/common/xhr-img.component.ts","../../../projects/core-lib/common/mage-common.module.ts","../../../projects/core-lib/common/ngageoint-mage.web-core-lib-common.ts"],"sourcesContent":["import { Component, ElementRef, Inject, InjectionToken, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core'\nimport { HttpClient } from '@angular/common/http'\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser'\nimport { Subscription } from 'rxjs'\n\nconst selector = 'mage-xhr-img'\n\n/**\n * This is a simple interface that includes the [methods](https://www.w3.org/TR/FileAPI/#creating-revoking)\n * from the [URL API](https://developer.mozilla.org/en-US/docs/Web/API/URL) for\n * managing blob URLs. This allows a service to be injected into\n * `XhrImgComponent` and overridden for testing.\n */\nexport interface ObjectUrlService {\n createObjectURL: (typeof URL)['createObjectURL']\n revokeObjectURL: (typeof URL)['revokeObjectURL']\n}\nexport const OBJECT_URL_SERVICE = new InjectionToken<ObjectUrlService>(`${selector}.objectUrlService`)\n\n/**\n * This component allows fetching images by `XMLHttpRequest` rather than the\n * browser's native mechanism. These image requests are subject to HTTP\n * interceptors that can add authorization headers to the request instead of\n * using cache-defeating URL query parameters to set an auth token. Applying\n * headers to the browser's native `img` requests is impossible, so a query\n * parameter is necessary for authorization, but adding the parameter to the\n * URL effectively bypasses the browser's caching mechanism when the auth token\n * changes for images that\n * should otherwise be subject to caching.\n *\n * The catch to fetching images by XHR is the response must be fetched as a\n * `Blob`. The user then gets a browser-specific URL for the blob by\n * `URL.createObjectURL(blob)`, which can then be assigned to the `src`\n * attribute of an `img` tag. These blob URLs must then be \"revoked\" by\n * `URL.revokeObjectURL(url)` in order to reclaim object URL's associated\n * resources. See [Mozilla's docs](https://developer.mozilla.org/en-US/docs/Web/API/File/Using_files_from_web_applications#example_using_object_urls_to_display_images)\n * on the subject.\n *\n * To use the component, simply add the tag to a template and bind the `src`\n * attribute to the source URL of the desired image.\n * ```\n * <mage-xhr-img [src]=\"someComponent.imageUrlRequiresAuth\"></mage-xhr-img>\n * ```\n * The component encapsulates the logic of creating and releasing the object\n * URLs for the image data, preventing memory leaks.\n */\n@Component({\n selector: `${selector}`,\n template: `<img [attr.src]=\"safeBlobUrl\" (load)=\"onImgLoad()\"/>`,\n styles: [ `img { height: 100%; width: 100% }` ],\n providers: [\n {\n provide: OBJECT_URL_SERVICE,\n useValue: URL\n }\n ]\n})\nexport class XhrImgComponent implements OnChanges, OnDestroy {\n\n @Input('src')\n sourceUrl: string | null = null\n safeBlobUrl: SafeUrl | null = null\n\n private blobUrl: string\n private subscription: Subscription\n\n constructor(@Inject(OBJECT_URL_SERVICE) private objectUrlService: ObjectUrlService, private http: HttpClient, private sanitizer: DomSanitizer) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (!changes.sourceUrl) {\n return\n }\n if (changes.sourceUrl.isFirstChange() && !this.sourceUrl) {\n return\n }\n this.disposeCurrent()\n if (!this.sourceUrl) {\n return\n }\n this.subscription = this.http.get(this.sourceUrl, { responseType: 'blob' })\n .subscribe(x => {\n this.objectUrlService.revokeObjectURL(this.blobUrl)\n this.blobUrl = this.objectUrlService.createObjectURL(x)\n this.safeBlobUrl = this.sanitizer.bypassSecurityTrustUrl(this.blobUrl)\n })\n }\n\n ngOnDestroy() {\n this.disposeCurrent()\n }\n\n onImgLoad() {\n this.disposeCurrent()\n }\n\n private disposeCurrent() {\n if (this.blobUrl) {\n this.objectUrlService.revokeObjectURL(this.blobUrl)\n }\n if (this.subscription) {\n this.subscription.unsubscribe()\n }\n this.blobUrl = null\n }\n}","import { NgModule } from '@angular/core'\nimport { BrowserModule } from '@angular/platform-browser'\nimport { XhrImgComponent } from './xhr-img.component'\n\n@NgModule({\n imports: [\n BrowserModule\n ],\n declarations: [\n XhrImgComponent\n ],\n exports: [\n XhrImgComponent\n ]\n})\nexport class MageCommonModule {}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|