@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,10 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
|
|
3
|
+
const EVENT_READ_SERVICE = new InjectionToken('EventReadService');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generated bundle index. Do not edit.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export { EVENT_READ_SERVICE };
|
|
10
|
+
//# sourceMappingURL=ngageoint-mage.web-core-lib-event.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngageoint-mage.web-core-lib-event.mjs","sources":["../../../projects/core-lib/event/event-read.service.ts","../../../projects/core-lib/event/ngageoint-mage.web-core-lib-event.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\nimport { PagingParameters } from '@ngageoint/mage.web-core-lib/paging'\nimport { Observable } from 'rxjs'\nimport { MageEvent } from './event.model'\n\nexport interface EventReadService {\n find(which: EventReadParams): Observable<MageEvent[]>\n}\n\nexport interface EventReadParams {\n page: PagingParameters\n}\n\nexport const EVENT_READ_SERVICE = new InjectionToken<EventReadService>('EventReadService')","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAaa,kBAAkB,GAAG,IAAI,cAAc,CAAmB,kBAAkB;;ACbzF;;AAEG;;;;"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
4
|
+
import { map } from 'rxjs/operators';
|
|
5
|
+
import * as i1 from '@angular/common/http';
|
|
6
|
+
|
|
7
|
+
class FeedService {
|
|
8
|
+
constructor(http) {
|
|
9
|
+
this.http = http;
|
|
10
|
+
// TODO: there is probably a better solution than maintaining this map here
|
|
11
|
+
this._feeds = new BehaviorSubject([]);
|
|
12
|
+
this.feeds = this._feeds.asObservable();
|
|
13
|
+
this._feedItems = new Map();
|
|
14
|
+
}
|
|
15
|
+
feedItems(feedId) {
|
|
16
|
+
return this._feedItems.get(feedId).asObservable();
|
|
17
|
+
}
|
|
18
|
+
fetchAllFeeds() {
|
|
19
|
+
return this.http.get('/api/feeds/');
|
|
20
|
+
}
|
|
21
|
+
fetchFeed(feedId) {
|
|
22
|
+
return this.http.get(`/api/feeds/${feedId}`);
|
|
23
|
+
}
|
|
24
|
+
fetchService(serviceId) {
|
|
25
|
+
return this.http.get(`/api/feeds/services/${serviceId}`);
|
|
26
|
+
}
|
|
27
|
+
createService(service) {
|
|
28
|
+
return this.http.post(`/api/feeds/services`, service);
|
|
29
|
+
}
|
|
30
|
+
fetchServices() {
|
|
31
|
+
return this.http.get(`/api/feeds/services`);
|
|
32
|
+
}
|
|
33
|
+
fetchServiceFeeds(serviceId) {
|
|
34
|
+
return this.http.get(`/api/feeds/services/${serviceId}/feeds`);
|
|
35
|
+
}
|
|
36
|
+
fetchServiceType(serviceTypeId) {
|
|
37
|
+
return this.http.get(`/api/feeds/service_types/${serviceTypeId}`);
|
|
38
|
+
}
|
|
39
|
+
fetchTopics(serviceId) {
|
|
40
|
+
return this.http.get(`/api/feeds/services/${serviceId}/topics`);
|
|
41
|
+
}
|
|
42
|
+
previewFeed(serviceId, topicId, feedSpec, opts) {
|
|
43
|
+
opts = opts || {};
|
|
44
|
+
const skipContentFetch = opts.skipContentFetch === true;
|
|
45
|
+
return this.http.post(`/api/feeds/services/${serviceId}/topics/${topicId}/feed_preview?skip_content_fetch=${skipContentFetch}`, { feed: feedSpec });
|
|
46
|
+
}
|
|
47
|
+
fetchTopic(serviceId, topicId) {
|
|
48
|
+
return this.http.get(`/api/feeds/services/${serviceId}/topics/${topicId}`);
|
|
49
|
+
}
|
|
50
|
+
fetchServiceTypes() {
|
|
51
|
+
return this.http.get(`/api/feeds/service_types`);
|
|
52
|
+
}
|
|
53
|
+
createFeed(serviceId, topicId, feedConfiguration) {
|
|
54
|
+
return this.http.post(`/api/feeds/services/${serviceId}/topics/${topicId}/feeds`, feedConfiguration);
|
|
55
|
+
}
|
|
56
|
+
updateFeed(feed) {
|
|
57
|
+
return this.http.put(`/api/feeds/${feed.id}`, feed);
|
|
58
|
+
}
|
|
59
|
+
deleteFeed(feed) {
|
|
60
|
+
return this.http.delete(`/api/feeds/${feed.id}`, { responseType: 'text' });
|
|
61
|
+
}
|
|
62
|
+
deleteService(service) {
|
|
63
|
+
console.log('delete');
|
|
64
|
+
return this.http.delete(`/api/feeds/services/${service.id}`, { responseType: 'text' });
|
|
65
|
+
}
|
|
66
|
+
fetchFeeds(eventId) {
|
|
67
|
+
const subject = new Subject();
|
|
68
|
+
this.http.get(`/api/events/${eventId}/feeds`).subscribe(feeds => {
|
|
69
|
+
feeds.map(feed => {
|
|
70
|
+
feed.id = feed.id.toString();
|
|
71
|
+
return feed;
|
|
72
|
+
});
|
|
73
|
+
feeds.forEach(feed => {
|
|
74
|
+
let feedItems = this._feedItems.get(feed.id);
|
|
75
|
+
if (!feedItems) {
|
|
76
|
+
feedItems = new BehaviorSubject([]);
|
|
77
|
+
this._feedItems.set(feed.id, feedItems);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
subject.next(feeds);
|
|
81
|
+
this._feeds.next(feeds);
|
|
82
|
+
});
|
|
83
|
+
return subject;
|
|
84
|
+
}
|
|
85
|
+
fetchFeedItems(event, feed) {
|
|
86
|
+
const feedItems = this._feedItems.get(feed.id);
|
|
87
|
+
return this.http.post(`/api/events/${event.id}/feeds/${feed.id}/content`, {}).pipe(map(content => {
|
|
88
|
+
const features = content.items.features;
|
|
89
|
+
features.forEach((feature) => {
|
|
90
|
+
feature.id = String(feature.id);
|
|
91
|
+
feature.properties = feature.properties || {};
|
|
92
|
+
});
|
|
93
|
+
feedItems.next(features);
|
|
94
|
+
return content;
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
FeedService.ɵfac = function FeedService_Factory(t) { return new (t || FeedService)(i0.ɵɵinject(i1.HttpClient)); };
|
|
99
|
+
FeedService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: FeedService, factory: FeedService.ɵfac, providedIn: 'root' });
|
|
100
|
+
(function () {
|
|
101
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FeedService, [{
|
|
102
|
+
type: Injectable,
|
|
103
|
+
args: [{
|
|
104
|
+
providedIn: 'root'
|
|
105
|
+
}]
|
|
106
|
+
}], function () { return [{ type: i1.HttpClient }]; }, null);
|
|
107
|
+
})();
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Generated bundle index. Do not edit.
|
|
111
|
+
*/
|
|
112
|
+
|
|
113
|
+
export { FeedService };
|
|
114
|
+
//# sourceMappingURL=ngageoint-mage.web-core-lib-feed.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngageoint-mage.web-core-lib-feed.mjs","sources":["../../../projects/core-lib/feed/feed.service.ts","../../../projects/core-lib/feed/ngageoint-mage.web-core-lib-feed.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Feature } from 'geojson'\nimport { BehaviorSubject, Observable, Subject } from 'rxjs'\nimport { map } from 'rxjs/operators'\nimport { Feed, FeedContent, FeedExpanded, FeedPost, FeedPreview, FeedTopic, Service, ServiceType, StyledFeature } from './feed.model'\n\n\nexport interface FeedPreviewOptions {\n skipContentFetch?: boolean\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FeedService {\n\n constructor(private http: HttpClient) { }\n\n // TODO: there is probably a better solution than maintaining this map here\n private _feeds = new BehaviorSubject<Array<Feed>>([]);\n readonly feeds = this._feeds.asObservable();\n\n private _feedItems = new Map<string, BehaviorSubject<Array<Feature>>>();\n feedItems(feedId: string): Observable<Array<Feature>> {\n return this._feedItems.get(feedId).asObservable();\n }\n\n fetchAllFeeds(): Observable<Array<Feed>> {\n return this.http.get<Array<Feed>>('/api/feeds/');\n }\n\n fetchFeed(feedId: string): Observable<FeedExpanded> {\n return this.http.get<FeedExpanded>(`/api/feeds/${feedId}`);\n }\n\n fetchService(serviceId: string): Observable<Service> {\n return this.http.get<Service>(`/api/feeds/services/${serviceId}`);\n }\n\n createService(service: { title: string, summary?: string, serviceType: string, config: any}): Observable<Service> {\n return this.http.post<Service>(`/api/feeds/services`, service);\n }\n\n fetchServices(): Observable<Array<Service>> {\n return this.http.get<Array<Service>>(`/api/feeds/services`);\n }\n\n fetchServiceFeeds(serviceId: string): Observable<Array<Feed>> {\n return this.http.get<Array<Feed>>(`/api/feeds/services/${serviceId}/feeds`);\n }\n\n fetchServiceType(serviceTypeId: string): Observable<ServiceType> {\n return this.http.get<ServiceType>(`/api/feeds/service_types/${serviceTypeId}`);\n }\n\n fetchTopics(serviceId: string): Observable<Array<FeedTopic>> {\n return this.http.get<Array<FeedTopic>>(`/api/feeds/services/${serviceId}/topics`);\n }\n\n previewFeed(serviceId: string, topicId: string, feedSpec: Partial<Omit<FeedPost, 'service' | 'topic'>>, opts?: FeedPreviewOptions): Observable<FeedPreview> {\n opts = opts || {}\n const skipContentFetch: boolean = opts.skipContentFetch === true\n return this.http.post<FeedPreview>(\n `/api/feeds/services/${serviceId}/topics/${topicId}/feed_preview?skip_content_fetch=${skipContentFetch}`,\n { feed: feedSpec });\n }\n\n fetchTopic(serviceId: string, topicId: string): Observable<FeedTopic> {\n return this.http.get<FeedTopic>(`/api/feeds/services/${serviceId}/topics/${topicId}`);\n }\n\n fetchServiceTypes(): Observable<Array<ServiceType>> {\n return this.http.get<Array<ServiceType>>(`/api/feeds/service_types`);\n }\n\n createFeed(serviceId: string, topicId: string, feedConfiguration: any): Observable<FeedExpanded> {\n return this.http.post<FeedExpanded>(`/api/feeds/services/${serviceId}/topics/${topicId}/feeds`, feedConfiguration);\n }\n\n updateFeed(feed: Partial<Omit<FeedPost, 'id'>> & Pick<Feed, 'id'>): Observable<FeedExpanded> {\n return this.http.put<FeedExpanded>(`/api/feeds/${feed.id}`, feed);\n }\n\n deleteFeed(feed: Feed | FeedExpanded): Observable<{}> {\n return this.http.delete(`/api/feeds/${feed.id}`, {responseType: 'text'});\n }\n\n deleteService(service: Service): Observable<{}> {\n console.log('delete')\n return this.http.delete(`/api/feeds/services/${service.id}`, { responseType: 'text' });\n }\n\n fetchFeeds(eventId: number): Observable<Array<Feed>> {\n const subject = new Subject<Array<Feed>>();\n this.http.get<Array<Feed>>(`/api/events/${eventId}/feeds`).subscribe(feeds => {\n feeds.map(feed => {\n feed.id = feed.id.toString();\n return feed;\n });\n\n feeds.forEach(feed => {\n let feedItems = this._feedItems.get(feed.id);\n if (!feedItems) {\n feedItems = new BehaviorSubject<Array<Feature>>([]);\n this._feedItems.set(feed.id, feedItems);\n }\n })\n\n subject.next(feeds);\n this._feeds.next(feeds);\n });\n\n return subject;\n }\n\n fetchFeedItems(event: any, feed: Feed): Observable<FeedContent> {\n const feedItems = this._feedItems.get(feed.id)\n return this.http.post<FeedContent>(`/api/events/${event.id}/feeds/${feed.id}/content`, {}).pipe(\n map(content => {\n const features = content.items.features\n features.forEach((feature: StyledFeature) => {\n feature.id = String(feature.id)\n feature.properties = feature.properties || {}\n })\n feedItems.next(features)\n return content\n })\n )\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { DataSource } from '@angular/cdk/collections';
|
|
2
|
+
import { BehaviorSubject, Subscription } from 'rxjs';
|
|
3
|
+
|
|
4
|
+
const pageForItemIndex = (itemIndex, pageSize) => {
|
|
5
|
+
if (typeof pageSize === 'object') {
|
|
6
|
+
pageSize = pageSize.pageSize;
|
|
7
|
+
}
|
|
8
|
+
return Math.floor(itemIndex / pageSize);
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Return the range of item indexes for the given page and page size. The last
|
|
12
|
+
* end portion of the range is exclusive, so when indexing an array the last
|
|
13
|
+
* item of the page would have position `end - 1`. This allows one to pass the
|
|
14
|
+
* values to `Array.slice()`.
|
|
15
|
+
* @param pageIndex
|
|
16
|
+
* @param pageSize
|
|
17
|
+
* @returns
|
|
18
|
+
*/
|
|
19
|
+
const itemRangeOfPage = (pageIndex, pageSize) => {
|
|
20
|
+
if (typeof pageIndex === 'object') {
|
|
21
|
+
pageSize = pageIndex.pageSize;
|
|
22
|
+
pageIndex = pageIndex.pageIndex;
|
|
23
|
+
}
|
|
24
|
+
const start = pageSize * pageIndex;
|
|
25
|
+
const end = start + pageSize;
|
|
26
|
+
return [start, end];
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* This class is an adaptation from the [Angular Material Guide](https://v8.material.angular.io/cdk/scrolling/overview), _"Specifying data" example_, also
|
|
31
|
+
* available on [StackBlitz](https://stackblitz.com/angular/mrbkjagnnra?file=src%2Fapp%2Fcdk-virtual-scroll-data-source-example.ts).
|
|
32
|
+
*/
|
|
33
|
+
class PagingDataSource extends DataSource {
|
|
34
|
+
constructor(pageSize, fetchPage) {
|
|
35
|
+
super();
|
|
36
|
+
this.pageSize = pageSize;
|
|
37
|
+
this.fetchPage = fetchPage;
|
|
38
|
+
this.data = null;
|
|
39
|
+
this.data$ = new BehaviorSubject([]);
|
|
40
|
+
this.fetchedPages = new Set();
|
|
41
|
+
this.subscription = new Subscription();
|
|
42
|
+
}
|
|
43
|
+
connect(collectionViewer) {
|
|
44
|
+
this.subscription.add(collectionViewer.viewChange.subscribe(range => {
|
|
45
|
+
const startPage = this.pageForItemIndex(range.start);
|
|
46
|
+
const endPage = this.pageForItemIndex(range.end - 1);
|
|
47
|
+
for (let page = startPage; page <= endPage; page++) {
|
|
48
|
+
this.fetch(page);
|
|
49
|
+
}
|
|
50
|
+
}));
|
|
51
|
+
return this.data$;
|
|
52
|
+
}
|
|
53
|
+
disconnect() {
|
|
54
|
+
this.subscription.unsubscribe();
|
|
55
|
+
}
|
|
56
|
+
pageForItemIndex(index) {
|
|
57
|
+
return pageForItemIndex(index, this.pageSize);
|
|
58
|
+
}
|
|
59
|
+
fetch(pageIndex) {
|
|
60
|
+
if (this.fetchedPages.has(pageIndex)) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
this.fetchedPages.add(pageIndex);
|
|
64
|
+
const includeTotalCount = !this.data;
|
|
65
|
+
this.fetchPage({ pageSize: this.pageSize, pageIndex: pageIndex, includeTotalCount }).subscribe(page => {
|
|
66
|
+
if (!this.data) {
|
|
67
|
+
if (typeof (page.totalCount) !== 'number') {
|
|
68
|
+
throw new Error('data is null and no total count is available to inform allocation');
|
|
69
|
+
}
|
|
70
|
+
this.data = Array.from({ length: page.totalCount });
|
|
71
|
+
}
|
|
72
|
+
this.data.splice(pageIndex * this.pageSize, this.pageSize, ...page.items);
|
|
73
|
+
this.data$.next(this.data);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Generated bundle index. Do not edit.
|
|
80
|
+
*/
|
|
81
|
+
|
|
82
|
+
export { PagingDataSource, itemRangeOfPage, pageForItemIndex };
|
|
83
|
+
//# sourceMappingURL=ngageoint-mage.web-core-lib-paging.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngageoint-mage.web-core-lib-paging.mjs","sources":["../../../projects/core-lib/paging/paging.model.ts","../../../projects/core-lib/paging/paging.cdk-data-source.adapter.ts","../../../projects/core-lib/paging/ngageoint-mage.web-core-lib-paging.ts"],"sourcesContent":["\nexport interface PagingParameters {\n pageSize: number,\n pageIndex: number,\n includeTotalCount?: boolean | null\n}\n\nexport interface PageOf<T> {\n pageSize: number,\n pageIndex: number,\n totalCount?: number | null,\n next?: PagingParameters | null\n prev?: PagingParameters | null\n items: T[]\n}\n\nexport const pageForItemIndex = (itemIndex: number, pageSize: number | PagingParameters): number => {\n if (typeof pageSize === 'object') {\n pageSize = pageSize.pageSize\n }\n return Math.floor(itemIndex / pageSize)\n}\n\n/**\n * Return the range of item indexes for the given page and page size. The last\n * end portion of the range is exclusive, so when indexing an array the last\n * item of the page would have position `end - 1`. This allows one to pass the\n * values to `Array.slice()`.\n * @param pageIndex\n * @param pageSize\n * @returns\n */\nexport const itemRangeOfPage: {\n (pageIndex: number, pageSize: number): [ number, number ]\n (paging: PagingParameters)\n} = (pageIndex: number | PagingParameters, pageSize?: number): [ number, number ] => {\n if (typeof pageIndex === 'object') {\n pageSize = pageIndex.pageSize\n pageIndex = pageIndex.pageIndex\n }\n const start = pageSize * pageIndex\n const end = start + pageSize\n return [ start, end ]\n}\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections'\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs'\nimport { pageForItemIndex, PageOf, PagingParameters } from './paging.model'\n\n/**\n * This class is an adaptation from the [Angular Material Guide](https://v8.material.angular.io/cdk/scrolling/overview), _\"Specifying data\" example_, also\n * available on [StackBlitz](https://stackblitz.com/angular/mrbkjagnnra?file=src%2Fapp%2Fcdk-virtual-scroll-data-source-example.ts).\n */\nexport class PagingDataSource<T> extends DataSource<T> {\n\n private data: T[] | null = null\n private data$ = new BehaviorSubject<T[]>([])\n private fetchedPages = new Set<number>()\n private subscription = new Subscription()\n\n constructor(private pageSize: number, private fetchPage: (paging: PagingParameters) => Observable<PageOf<T>>) {\n super()\n }\n\n connect(collectionViewer: CollectionViewer): Observable<T[]> {\n this.subscription.add(collectionViewer.viewChange.subscribe(range => {\n const startPage = this.pageForItemIndex(range.start)\n const endPage = this.pageForItemIndex(range.end - 1)\n for (let page = startPage; page <= endPage; page++) {\n this.fetch(page)\n }\n }))\n return this.data$\n }\n\n disconnect(): void {\n this.subscription.unsubscribe()\n }\n\n private pageForItemIndex(index: number): number {\n return pageForItemIndex(index, this.pageSize)\n }\n\n private fetch(pageIndex: number) {\n if (this.fetchedPages.has(pageIndex)) {\n return\n }\n this.fetchedPages.add(pageIndex)\n const includeTotalCount = !this.data\n this.fetchPage({ pageSize: this.pageSize, pageIndex: pageIndex, includeTotalCount }).subscribe(page => {\n if (!this.data) {\n if (typeof(page.totalCount) !== 'number') {\n throw new Error('data is null and no total count is available to inform allocation')\n }\n this.data = Array.from({ length: page.totalCount })\n }\n this.data.splice(pageIndex * this.pageSize, this.pageSize, ...page.items)\n this.data$.next(this.data)\n })\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngageoint-mage.web-core-lib-plugin.mjs","sources":["../../../projects/core-lib/plugin/ngageoint-mage.web-core-lib-plugin.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;;AAEG"}
|
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
import * as i3$1 from '@angular/cdk/scrolling';
|
|
2
|
+
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import * as i0 from '@angular/core';
|
|
5
|
+
import { Injectable, Component, Input, NgModule } from '@angular/core';
|
|
6
|
+
import * as i4 from '@angular/forms';
|
|
7
|
+
import { UntypedFormGroup, UntypedFormControl, Validators, NG_VALUE_ACCESSOR, NG_VALIDATORS, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
8
|
+
import * as i2 from '@angular/material/card';
|
|
9
|
+
import { MatCardModule } from '@angular/material/card';
|
|
10
|
+
import * as i5 from '@ngageoint/mage.web-core-lib/common';
|
|
11
|
+
import { MageCommonModule } from '@ngageoint/mage.web-core-lib/common';
|
|
12
|
+
import * as i1 from '@angular/common/http';
|
|
13
|
+
import { HttpParams } from '@angular/common/http';
|
|
14
|
+
import { Observable, throwError } from 'rxjs';
|
|
15
|
+
import { catchError } from 'rxjs/operators';
|
|
16
|
+
import * as i3 from '@angular/platform-browser';
|
|
17
|
+
import { PagingDataSource } from '@ngageoint/mage.web-core-lib/paging';
|
|
18
|
+
|
|
19
|
+
const contentPathOfIcon = (icon) => {
|
|
20
|
+
if (!icon) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (typeof icon !== 'string') {
|
|
24
|
+
icon = icon.id;
|
|
25
|
+
}
|
|
26
|
+
return `/api/icons/${icon}/content`;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
class StaticIconService {
|
|
30
|
+
constructor(http) {
|
|
31
|
+
this.http = http;
|
|
32
|
+
}
|
|
33
|
+
fetchIcons(fetch) {
|
|
34
|
+
const now = Date.now();
|
|
35
|
+
const results = new Observable(observer => {
|
|
36
|
+
const icons = [];
|
|
37
|
+
let remaining = 100;
|
|
38
|
+
while (remaining--) {
|
|
39
|
+
const id = now - remaining;
|
|
40
|
+
icons.unshift({
|
|
41
|
+
id: String(id),
|
|
42
|
+
title: `Icon ${id}`,
|
|
43
|
+
fileName: `icon-${id}.png`,
|
|
44
|
+
sourceUrl: `https://test.mage/${id}.png`,
|
|
45
|
+
contentPath: `/icons/${id}/content`
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
setTimeout(() => {
|
|
49
|
+
observer.next({
|
|
50
|
+
pageSize: 100,
|
|
51
|
+
pageIndex: 0,
|
|
52
|
+
totalCount: 100,
|
|
53
|
+
items: icons
|
|
54
|
+
});
|
|
55
|
+
observer.complete();
|
|
56
|
+
}, 0);
|
|
57
|
+
return {
|
|
58
|
+
unsubscribe() { }
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
return results;
|
|
62
|
+
}
|
|
63
|
+
fetchIconById(id) {
|
|
64
|
+
return this.http.get(`/api/icons/${id}`).pipe(catchError((err, caught) => {
|
|
65
|
+
// TODO: this is probably better practice to insulate app layer from
|
|
66
|
+
// http errors
|
|
67
|
+
// if (err instanceof HttpErrorResponse) {
|
|
68
|
+
// if (err.status === 404) {
|
|
69
|
+
// return null
|
|
70
|
+
// }
|
|
71
|
+
// }
|
|
72
|
+
return throwError(err);
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
fetchIconBySourceUrl(url) {
|
|
76
|
+
return this.http.get(`/api/icons`, {
|
|
77
|
+
params: new HttpParams().set('source_url', url)
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
fetchIconByReference(ref) {
|
|
81
|
+
if (ref.id) {
|
|
82
|
+
return this.fetchIconById(ref.id);
|
|
83
|
+
}
|
|
84
|
+
else if (ref.sourceUrl) {
|
|
85
|
+
return this.fetchIconBySourceUrl(ref.sourceUrl);
|
|
86
|
+
}
|
|
87
|
+
throw new Error('no icon id or source url');
|
|
88
|
+
}
|
|
89
|
+
registerIconUrl(url) {
|
|
90
|
+
throw new Error('unimplemented');
|
|
91
|
+
}
|
|
92
|
+
uploadIcon() {
|
|
93
|
+
throw new Error('unimplemented');
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
StaticIconService.ɵfac = function StaticIconService_Factory(t) { return new (t || StaticIconService)(i0.ɵɵinject(i1.HttpClient)); };
|
|
97
|
+
StaticIconService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: StaticIconService, factory: StaticIconService.ɵfac, providedIn: 'root' });
|
|
98
|
+
(function () {
|
|
99
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StaticIconService, [{
|
|
100
|
+
type: Injectable,
|
|
101
|
+
args: [{
|
|
102
|
+
providedIn: 'root'
|
|
103
|
+
}]
|
|
104
|
+
}], function () { return [{ type: i1.HttpClient }]; }, null);
|
|
105
|
+
})();
|
|
106
|
+
|
|
107
|
+
class StaticIconFormFieldComponent {
|
|
108
|
+
constructor(iconService, httpClient, sanitizer) {
|
|
109
|
+
this.iconService = iconService;
|
|
110
|
+
this.httpClient = httpClient;
|
|
111
|
+
this.sanitizer = sanitizer;
|
|
112
|
+
this.iconRef = null;
|
|
113
|
+
this.form = new UntypedFormGroup({
|
|
114
|
+
iconRefToken: new UntypedFormControl(null),
|
|
115
|
+
iconRefType: new UntypedFormControl(null, Validators.required)
|
|
116
|
+
});
|
|
117
|
+
this.onChange = (iconRef) => { };
|
|
118
|
+
this.onValidatorChange = () => { };
|
|
119
|
+
this.onTouched = () => { };
|
|
120
|
+
this.form.valueChanges.subscribe((x) => {
|
|
121
|
+
this.iconRef = iconRefForFormValue(x);
|
|
122
|
+
this.onChange(this.iconRef);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
registerOnValidatorChange(fn) {
|
|
126
|
+
this.onValidatorChange = fn;
|
|
127
|
+
}
|
|
128
|
+
ngOnChanges(changes) { }
|
|
129
|
+
ngOnDestroy() { }
|
|
130
|
+
onSelectIcon() { }
|
|
131
|
+
writeValue(iconRef) {
|
|
132
|
+
this.iconRef = iconRef;
|
|
133
|
+
const formValue = formValueForIconRef(iconRef);
|
|
134
|
+
this.form.setValue(formValue, { emitEvent: false });
|
|
135
|
+
this.resolveIconRef();
|
|
136
|
+
}
|
|
137
|
+
registerOnChange(fn) {
|
|
138
|
+
this.onChange = fn;
|
|
139
|
+
}
|
|
140
|
+
registerOnTouched(fn) {
|
|
141
|
+
this.onTouched = fn;
|
|
142
|
+
}
|
|
143
|
+
setDisabledState(isDisabled) {
|
|
144
|
+
if (isDisabled) {
|
|
145
|
+
this.form.disable();
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
this.form.enable();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
validate(control) {
|
|
152
|
+
return this.form.errors;
|
|
153
|
+
}
|
|
154
|
+
resolveIconRef() {
|
|
155
|
+
if (!this.iconRef) {
|
|
156
|
+
this.icon = null;
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
this.iconService.fetchIconByReference(this.iconRef).subscribe(x => {
|
|
160
|
+
this.icon = x;
|
|
161
|
+
if (!this.icon) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
StaticIconFormFieldComponent.ɵfac = function StaticIconFormFieldComponent_Factory(t) { return new (t || StaticIconFormFieldComponent)(i0.ɵɵdirectiveInject(StaticIconService), i0.ɵɵdirectiveInject(i1.HttpClient), i0.ɵɵdirectiveInject(i3.DomSanitizer)); };
|
|
168
|
+
StaticIconFormFieldComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: StaticIconFormFieldComponent, selectors: [["mage-static-icon-form-field"]], features: [i0.ɵɵProvidersFeature([
|
|
169
|
+
{
|
|
170
|
+
provide: NG_VALUE_ACCESSOR,
|
|
171
|
+
multi: true,
|
|
172
|
+
useExisting: StaticIconFormFieldComponent
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
provide: NG_VALIDATORS,
|
|
176
|
+
multi: true,
|
|
177
|
+
useExisting: StaticIconFormFieldComponent
|
|
178
|
+
},
|
|
179
|
+
]), i0.ɵɵNgOnChangesFeature], decls: 4, vars: 2, consts: [[3, "formGroup"], [1, "icon-image", 3, "src"], ["type", "hidden", "formControlName", "iconRefType"], ["type", "hidden", "formControlName", "iconRefToken"]], template: function StaticIconFormFieldComponent_Template(rf, ctx) {
|
|
180
|
+
if (rf & 1) {
|
|
181
|
+
i0.ɵɵelementStart(0, "div", 0);
|
|
182
|
+
i0.ɵɵelement(1, "mage-xhr-img", 1)(2, "input", 2)(3, "input", 3);
|
|
183
|
+
i0.ɵɵelementEnd();
|
|
184
|
+
}
|
|
185
|
+
if (rf & 2) {
|
|
186
|
+
i0.ɵɵproperty("formGroup", ctx.form);
|
|
187
|
+
i0.ɵɵadvance(1);
|
|
188
|
+
i0.ɵɵproperty("src", ctx.icon == null ? null : ctx.icon.contentPath);
|
|
189
|
+
}
|
|
190
|
+
}, dependencies: [i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgControlStatusGroup, i4.FormGroupDirective, i4.FormControlName, i5.XhrImgComponent], styles: [".icon-image[_ngcontent-%COMP%]{display:block;height:3em;width:3em}"] });
|
|
191
|
+
(function () {
|
|
192
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StaticIconFormFieldComponent, [{
|
|
193
|
+
type: Component,
|
|
194
|
+
args: [{ selector: 'mage-static-icon-form-field', providers: [
|
|
195
|
+
{
|
|
196
|
+
provide: NG_VALUE_ACCESSOR,
|
|
197
|
+
multi: true,
|
|
198
|
+
useExisting: StaticIconFormFieldComponent
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
provide: NG_VALIDATORS,
|
|
202
|
+
multi: true,
|
|
203
|
+
useExisting: StaticIconFormFieldComponent
|
|
204
|
+
},
|
|
205
|
+
], template: "<div [formGroup]=\"form\">\n <mage-xhr-img class=\"icon-image\" [src]=\"icon?.contentPath\"></mage-xhr-img>\n <input type=\"hidden\" formControlName=\"iconRefType\"/>\n <input type=\"hidden\" formControlName=\"iconRefToken\"/>\n</div>", styles: [".icon-image{display:block;height:3em;width:3em}\n"] }]
|
|
206
|
+
}], function () { return [{ type: StaticIconService }, { type: i1.HttpClient }, { type: i3.DomSanitizer }]; }, null);
|
|
207
|
+
})();
|
|
208
|
+
var IconRefType;
|
|
209
|
+
(function (IconRefType) {
|
|
210
|
+
IconRefType["Registered"] = "id";
|
|
211
|
+
IconRefType["SourceUrl"] = "sourceUrl";
|
|
212
|
+
})(IconRefType || (IconRefType = {}));
|
|
213
|
+
function iconRefForFormValue(x) {
|
|
214
|
+
if (!x.iconRefType) {
|
|
215
|
+
return null;
|
|
216
|
+
}
|
|
217
|
+
switch (x.iconRefType) {
|
|
218
|
+
case IconRefType.Registered:
|
|
219
|
+
return { [IconRefType.Registered]: x.iconRefToken };
|
|
220
|
+
case IconRefType.SourceUrl:
|
|
221
|
+
return { [IconRefType.SourceUrl]: x.iconRefToken };
|
|
222
|
+
default:
|
|
223
|
+
throw new Error('invalid icon ref type: ' + x.iconRefToken);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
function formValueForIconRef(x) {
|
|
227
|
+
if (!x) {
|
|
228
|
+
return {
|
|
229
|
+
iconRefType: null,
|
|
230
|
+
iconRefToken: null
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
let iconRefType = null;
|
|
234
|
+
let iconRefToken = null;
|
|
235
|
+
if (x.hasOwnProperty(IconRefType.Registered)) {
|
|
236
|
+
iconRefType = IconRefType.Registered || null;
|
|
237
|
+
iconRefToken = x[IconRefType.Registered] || null;
|
|
238
|
+
}
|
|
239
|
+
else if (x.hasOwnProperty(IconRefType.SourceUrl)) {
|
|
240
|
+
iconRefType = IconRefType.SourceUrl || null;
|
|
241
|
+
iconRefToken = x[IconRefType.SourceUrl] || null;
|
|
242
|
+
}
|
|
243
|
+
return {
|
|
244
|
+
iconRefType,
|
|
245
|
+
iconRefToken
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
class StaticIconImgComponent {
|
|
250
|
+
constructor() { }
|
|
251
|
+
ngOnInit() {
|
|
252
|
+
}
|
|
253
|
+
ngOnChanges(changes) {
|
|
254
|
+
if (changes.iconRef) {
|
|
255
|
+
if (this.iconRef) {
|
|
256
|
+
this.iconPath = contentPathOfIcon(this.iconRef);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
this.iconPath = null;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
StaticIconImgComponent.ɵfac = function StaticIconImgComponent_Factory(t) { return new (t || StaticIconImgComponent)(); };
|
|
265
|
+
StaticIconImgComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: StaticIconImgComponent, selectors: [["mage-static-icon-img"]], inputs: { iconRef: "iconRef" }, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[3, "src"]], template: function StaticIconImgComponent_Template(rf, ctx) {
|
|
266
|
+
if (rf & 1) {
|
|
267
|
+
i0.ɵɵelement(0, "mage-xhr-img", 0);
|
|
268
|
+
}
|
|
269
|
+
if (rf & 2) {
|
|
270
|
+
i0.ɵɵproperty("src", ctx.iconPath);
|
|
271
|
+
}
|
|
272
|
+
}, dependencies: [i5.XhrImgComponent], encapsulation: 2 });
|
|
273
|
+
(function () {
|
|
274
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StaticIconImgComponent, [{
|
|
275
|
+
type: Component,
|
|
276
|
+
args: [{
|
|
277
|
+
selector: 'mage-static-icon-img',
|
|
278
|
+
template: `<mage-xhr-img [src]="iconPath"></mage-xhr-img>`,
|
|
279
|
+
}]
|
|
280
|
+
}], function () { return []; }, { iconRef: [{
|
|
281
|
+
type: Input
|
|
282
|
+
}] });
|
|
283
|
+
})();
|
|
284
|
+
|
|
285
|
+
function StaticIconSelectComponent_mat_card_2_Template(rf, ctx) {
|
|
286
|
+
if (rf & 1) {
|
|
287
|
+
i0.ɵɵelementStart(0, "mat-card", 3)(1, "mat-card-header")(2, "mat-card-title");
|
|
288
|
+
i0.ɵɵtext(3);
|
|
289
|
+
i0.ɵɵelementEnd()();
|
|
290
|
+
i0.ɵɵelement(4, "img", 4);
|
|
291
|
+
i0.ɵɵelementEnd();
|
|
292
|
+
}
|
|
293
|
+
if (rf & 2) {
|
|
294
|
+
const icon_r1 = ctx.$implicit;
|
|
295
|
+
i0.ɵɵadvance(3);
|
|
296
|
+
i0.ɵɵtextInterpolate(icon_r1.title);
|
|
297
|
+
i0.ɵɵadvance(1);
|
|
298
|
+
i0.ɵɵproperty("src", icon_r1.path, i0.ɵɵsanitizeUrl);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
class StaticIconSelectComponent {
|
|
302
|
+
constructor(iconService) {
|
|
303
|
+
this.iconService = iconService;
|
|
304
|
+
this.icons = null;
|
|
305
|
+
this.dataSource = new PagingDataSource(250, (paging) => {
|
|
306
|
+
return this.iconService.fetchIcons(paging);
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
ngOnInit() {
|
|
310
|
+
this.iconService.fetchIcons().subscribe(x => {
|
|
311
|
+
this.icons = x.items;
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
onBrowseForUploadIcon() {
|
|
315
|
+
throw new Error('unimplemented');
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
StaticIconSelectComponent.ɵfac = function StaticIconSelectComponent_Factory(t) { return new (t || StaticIconSelectComponent)(i0.ɵɵdirectiveInject(StaticIconService)); };
|
|
319
|
+
StaticIconSelectComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: StaticIconSelectComponent, selectors: [["static-icon-select"]], decls: 3, vars: 2, consts: [[1, "icon-select"], [3, "itemSize"], ["class", "icon-select-item", 4, "cdkVirtualFor", "cdkVirtualForOf"], [1, "icon-select-item"], ["mat-card-img", "", 3, "src"]], template: function StaticIconSelectComponent_Template(rf, ctx) {
|
|
320
|
+
if (rf & 1) {
|
|
321
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "cdk-virtual-scroll-viewport", 1);
|
|
322
|
+
i0.ɵɵtemplate(2, StaticIconSelectComponent_mat_card_2_Template, 5, 2, "mat-card", 2);
|
|
323
|
+
i0.ɵɵelementEnd()();
|
|
324
|
+
}
|
|
325
|
+
if (rf & 2) {
|
|
326
|
+
i0.ɵɵadvance(1);
|
|
327
|
+
i0.ɵɵproperty("itemSize", 40);
|
|
328
|
+
i0.ɵɵadvance(1);
|
|
329
|
+
i0.ɵɵproperty("cdkVirtualForOf", ctx.icons);
|
|
330
|
+
}
|
|
331
|
+
}, dependencies: [i2.MatCard, i2.MatCardHeader, i2.MatCardTitle, i3$1.CdkFixedSizeVirtualScroll, i3$1.CdkVirtualForOf, i3$1.CdkVirtualScrollViewport], styles: ["virtual-scroll[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,33%);grid-auto-rows:min-content;grid-gap:0;justify-content:center;gap:0}"] });
|
|
332
|
+
(function () {
|
|
333
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StaticIconSelectComponent, [{
|
|
334
|
+
type: Component,
|
|
335
|
+
args: [{ selector: 'static-icon-select', template: "<div class=\"icon-select\">\n <cdk-virtual-scroll-viewport [itemSize]=\"40\">\n <mat-card *cdkVirtualFor=\"let icon of icons\" class=icon-select-item>\n <mat-card-header>\n <mat-card-title>{{icon.title}}</mat-card-title>\n </mat-card-header>\n <img mat-card-img [src]=\"icon.path\" />\n </mat-card>\n </cdk-virtual-scroll-viewport>\n</div>\n<!--\n <button mat-button class=\"add__button\" type=\"button\" color=\"primary\" (click)=\"file.click()\">\n Upload Icon\n </button>\n <input [hidden]=\"true\" type=\"file\" #file multiple (change)=\"onAttachmentFile($event)\">\n-->", styles: ["virtual-scroll{display:grid;grid-template-columns:repeat(3,33%);grid-auto-rows:min-content;grid-gap:0;justify-content:center;gap:0}\n"] }]
|
|
336
|
+
}], function () { return [{ type: StaticIconService }]; }, null);
|
|
337
|
+
})();
|
|
338
|
+
|
|
339
|
+
class StaticIconModule {
|
|
340
|
+
}
|
|
341
|
+
StaticIconModule.ɵfac = function StaticIconModule_Factory(t) { return new (t || StaticIconModule)(); };
|
|
342
|
+
StaticIconModule.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: StaticIconModule });
|
|
343
|
+
StaticIconModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [CommonModule,
|
|
344
|
+
FormsModule,
|
|
345
|
+
ReactiveFormsModule,
|
|
346
|
+
MatCardModule,
|
|
347
|
+
MageCommonModule,
|
|
348
|
+
ScrollingModule] });
|
|
349
|
+
(function () {
|
|
350
|
+
(typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(StaticIconModule, [{
|
|
351
|
+
type: NgModule,
|
|
352
|
+
args: [{
|
|
353
|
+
imports: [
|
|
354
|
+
CommonModule,
|
|
355
|
+
FormsModule,
|
|
356
|
+
ReactiveFormsModule,
|
|
357
|
+
MatCardModule,
|
|
358
|
+
MageCommonModule,
|
|
359
|
+
ScrollingModule
|
|
360
|
+
],
|
|
361
|
+
declarations: [
|
|
362
|
+
StaticIconFormFieldComponent,
|
|
363
|
+
StaticIconImgComponent,
|
|
364
|
+
StaticIconSelectComponent,
|
|
365
|
+
],
|
|
366
|
+
exports: [
|
|
367
|
+
StaticIconFormFieldComponent,
|
|
368
|
+
StaticIconImgComponent,
|
|
369
|
+
StaticIconSelectComponent,
|
|
370
|
+
]
|
|
371
|
+
}]
|
|
372
|
+
}], null, null);
|
|
373
|
+
})();
|
|
374
|
+
(function () {
|
|
375
|
+
(typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(StaticIconModule, { declarations: [StaticIconFormFieldComponent,
|
|
376
|
+
StaticIconImgComponent,
|
|
377
|
+
StaticIconSelectComponent], imports: [CommonModule,
|
|
378
|
+
FormsModule,
|
|
379
|
+
ReactiveFormsModule,
|
|
380
|
+
MatCardModule,
|
|
381
|
+
MageCommonModule,
|
|
382
|
+
ScrollingModule], exports: [StaticIconFormFieldComponent,
|
|
383
|
+
StaticIconImgComponent,
|
|
384
|
+
StaticIconSelectComponent] });
|
|
385
|
+
})();
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Generated bundle index. Do not edit.
|
|
389
|
+
*/
|
|
390
|
+
|
|
391
|
+
export { StaticIconFormFieldComponent, StaticIconImgComponent, StaticIconModule, StaticIconSelectComponent, StaticIconService, contentPathOfIcon };
|
|
392
|
+
//# sourceMappingURL=ngageoint-mage.web-core-lib-static-icon.mjs.map
|