@ng-vagabond-lab/ng-dsv 0.2.44 → 0.2.48
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/fesm2022/{ng-vagabond-lab-ng-dsv-module-news-news-list.container-vE1ewhD0.mjs → ng-vagabond-lab-ng-dsv-module-news-news-list.container-DFlRZqFM.mjs} +3 -3
- package/fesm2022/{ng-vagabond-lab-ng-dsv-module-news-news-list.container-vE1ewhD0.mjs.map → ng-vagabond-lab-ng-dsv-module-news-news-list.container-DFlRZqFM.mjs.map} +1 -1
- package/fesm2022/ng-vagabond-lab-ng-dsv-module-news.mjs +1 -1
- package/fesm2022/ng-vagabond-lab-ng-dsv-module-notification.mjs +6 -1
- package/fesm2022/ng-vagabond-lab-ng-dsv-module-notification.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -21,7 +21,7 @@ class NewsListContainer extends BaseSearchContainer {
|
|
|
21
21
|
this.seoService.setMeta('Les dernières news', 'Retrouver les dernières news sur movie-keeper.fr', '/images/logo.png');
|
|
22
22
|
}
|
|
23
23
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: NewsListContainer, deps: [{ token: NewsListService }], target: i0.ɵɵFactoryTarget.Component });
|
|
24
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: NewsListContainer, isStandalone: true, selector: "app-news-list", usesInheritance: true, ngImport: i0, template: "<dsv-card>\n <dsv-card-header>\n <h2>\n <i class=\"ri-file-list-3-line\"></i> News\n @if (newsListService.total()) {\n ({{ newsListService.total() }})\n }\n </h2>\n @if (isAdmin()) {\n <dsv-button icon=\"ri-add-line\" color=\"secondary\" variant=\"outlined\" routerLink=\"/news/create\" />\n }\n </dsv-card-header>\n <dsv-form-reactive-searchbar [search]=\"newsListService.search()\" (callbackSearch)=\"doSearch($event)\" />\n</dsv-card>\n\n@if (newsListService.news().length === 0 && (!newsListService.isLoading() || newsListService.stopFetch())) {\n <dsv-card>\n <p>Aucun r\u00E9sultat trouv\u00E9</p>\n </dsv-card>\n} @else {\n <dsv-scroll-infinite\n #scroll\n class=\"card-miniature\"\n [loading]=\"newsListService.isLoading()\"\n (callback)=\"doFetch()\"\n >\n @for (news of newsListService.news(); track news.id) {\n <app-news-card-resume [news]=\"news\">\n @if (isAdmin()) {\n <dsv-button\n class=\"update-button\"\n icon=\"ri-tools-line\"\n [routerLink]=\"'/news/update/' + news?.id\"\n />\n }\n </app-news-card-resume>\n }\n <ng-template #skeleton> </ng-template>\n </dsv-scroll-infinite>\n}\n", styles: [":host{display:flex;flex-direction:column;overflow:hidden}:host h2{text-transform:capitalize}:host dsv-card{margin:5px;width:calc(100% - 10px);gap:5px}:host dsv-card dsv-card-header{display:flex;flex-direction:row;align-items:center;margin:0 0 5px}:host dsv-card dsv-card-header h2{margin:0;flex:1}:host dsv-card dsv-form-reactive-searchbar{margin:0}:host dsv-scroll-infinite app-news-card-resume{width:calc(50% - 10px)}@media screen and (max-width:600px){:host dsv-scroll-infinite app-news-card-resume{width:100%}}\n"], dependencies: [{ kind: "component", type: DsvCardComponent, selector: "dsv-card", inputs: ["border"] }, { kind: "component", type: DsvFormReactiveSearchbarComponent, selector: "dsv-form-reactive-searchbar", inputs: ["search"], outputs: ["callbackSearch"] }, { kind: "component", type: DsvScrollInfiniteContainer, selector: "dsv-scroll-infinite", inputs: ["bottomOffset", "loading", "id"], outputs: ["callback"] }, { kind: "component", type: NewsCardResumeComponent, selector: "app-news-card-resume", inputs: ["news"] }, { kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }, { kind: "component", type: DsvCardHeaderComponent, selector: "dsv-card-header" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }] });
|
|
24
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.4", type: NewsListContainer, isStandalone: true, selector: "app-news-list", usesInheritance: true, ngImport: i0, template: "<dsv-card>\n <dsv-card-header>\n <h2>\n <i class=\"ri-file-list-3-line\"></i> News\n @if (newsListService.total()) {\n ({{ newsListService.total() }})\n }\n </h2>\n @if (isAdmin()) {\n <dsv-button icon=\"ri-add-line\" color=\"secondary\" variant=\"outlined\" routerLink=\"/news/create\" />\n }\n </dsv-card-header>\n <dsv-form-reactive-searchbar [search]=\"newsListService.search()\" (callbackSearch)=\"doSearch($event)\" />\n</dsv-card>\n\n@if (newsListService.news().length === 0 && (!newsListService.isLoading() || newsListService.stopFetch())) {\n <dsv-card>\n <p>Aucun r\u00E9sultat trouv\u00E9</p>\n </dsv-card>\n} @else {\n <dsv-scroll-infinite\n #scroll\n class=\"card-miniature\"\n [loading]=\"newsListService.isLoading()\"\n (callback)=\"doFetch()\"\n >\n @for (news of newsListService.news(); track news.id) {\n <app-news-card-resume [news]=\"news\">\n @if (isAdmin()) {\n <dsv-button\n class=\"update-button\"\n icon=\"ri-tools-line\"\n [routerLink]=\"'/news/update/' + news?.id\"\n />\n }\n </app-news-card-resume>\n }\n <ng-template #skeleton> </ng-template>\n </dsv-scroll-infinite>\n}\n", styles: [":host{display:flex;flex-direction:column;overflow:hidden}:host h2{text-transform:capitalize}:host dsv-card{margin:5px;width:calc(100% - 10px);gap:5px}:host dsv-card dsv-card-header{display:flex;flex-direction:row;align-items:center;margin:0 0 5px}:host dsv-card dsv-card-header h2{margin:0;flex:1}:host dsv-card dsv-form-reactive-searchbar{margin:0}:host dsv-scroll-infinite app-news-card-resume{width:calc(50% - 10px);padding-bottom:10px;margin-bottom:10px;border-bottom:1px solid var(--border)}@media screen and (max-width:600px){:host dsv-scroll-infinite app-news-card-resume{width:100%}}\n"], dependencies: [{ kind: "component", type: DsvCardComponent, selector: "dsv-card", inputs: ["border"] }, { kind: "component", type: DsvFormReactiveSearchbarComponent, selector: "dsv-form-reactive-searchbar", inputs: ["search"], outputs: ["callbackSearch"] }, { kind: "component", type: DsvScrollInfiniteContainer, selector: "dsv-scroll-infinite", inputs: ["bottomOffset", "loading", "id"], outputs: ["callback"] }, { kind: "component", type: NewsCardResumeComponent, selector: "app-news-card-resume", inputs: ["news"] }, { kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }, { kind: "component", type: DsvCardHeaderComponent, selector: "dsv-card-header" }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }] });
|
|
25
25
|
}
|
|
26
26
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: NewsListContainer, decorators: [{
|
|
27
27
|
type: Component,
|
|
@@ -33,8 +33,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
33
33
|
DsvButtonComponent,
|
|
34
34
|
DsvCardHeaderComponent,
|
|
35
35
|
RouterLink,
|
|
36
|
-
], template: "<dsv-card>\n <dsv-card-header>\n <h2>\n <i class=\"ri-file-list-3-line\"></i> News\n @if (newsListService.total()) {\n ({{ newsListService.total() }})\n }\n </h2>\n @if (isAdmin()) {\n <dsv-button icon=\"ri-add-line\" color=\"secondary\" variant=\"outlined\" routerLink=\"/news/create\" />\n }\n </dsv-card-header>\n <dsv-form-reactive-searchbar [search]=\"newsListService.search()\" (callbackSearch)=\"doSearch($event)\" />\n</dsv-card>\n\n@if (newsListService.news().length === 0 && (!newsListService.isLoading() || newsListService.stopFetch())) {\n <dsv-card>\n <p>Aucun r\u00E9sultat trouv\u00E9</p>\n </dsv-card>\n} @else {\n <dsv-scroll-infinite\n #scroll\n class=\"card-miniature\"\n [loading]=\"newsListService.isLoading()\"\n (callback)=\"doFetch()\"\n >\n @for (news of newsListService.news(); track news.id) {\n <app-news-card-resume [news]=\"news\">\n @if (isAdmin()) {\n <dsv-button\n class=\"update-button\"\n icon=\"ri-tools-line\"\n [routerLink]=\"'/news/update/' + news?.id\"\n />\n }\n </app-news-card-resume>\n }\n <ng-template #skeleton> </ng-template>\n </dsv-scroll-infinite>\n}\n", styles: [":host{display:flex;flex-direction:column;overflow:hidden}:host h2{text-transform:capitalize}:host dsv-card{margin:5px;width:calc(100% - 10px);gap:5px}:host dsv-card dsv-card-header{display:flex;flex-direction:row;align-items:center;margin:0 0 5px}:host dsv-card dsv-card-header h2{margin:0;flex:1}:host dsv-card dsv-form-reactive-searchbar{margin:0}:host dsv-scroll-infinite app-news-card-resume{width:calc(50% - 10px)}@media screen and (max-width:600px){:host dsv-scroll-infinite app-news-card-resume{width:100%}}\n"] }]
|
|
36
|
+
], template: "<dsv-card>\n <dsv-card-header>\n <h2>\n <i class=\"ri-file-list-3-line\"></i> News\n @if (newsListService.total()) {\n ({{ newsListService.total() }})\n }\n </h2>\n @if (isAdmin()) {\n <dsv-button icon=\"ri-add-line\" color=\"secondary\" variant=\"outlined\" routerLink=\"/news/create\" />\n }\n </dsv-card-header>\n <dsv-form-reactive-searchbar [search]=\"newsListService.search()\" (callbackSearch)=\"doSearch($event)\" />\n</dsv-card>\n\n@if (newsListService.news().length === 0 && (!newsListService.isLoading() || newsListService.stopFetch())) {\n <dsv-card>\n <p>Aucun r\u00E9sultat trouv\u00E9</p>\n </dsv-card>\n} @else {\n <dsv-scroll-infinite\n #scroll\n class=\"card-miniature\"\n [loading]=\"newsListService.isLoading()\"\n (callback)=\"doFetch()\"\n >\n @for (news of newsListService.news(); track news.id) {\n <app-news-card-resume [news]=\"news\">\n @if (isAdmin()) {\n <dsv-button\n class=\"update-button\"\n icon=\"ri-tools-line\"\n [routerLink]=\"'/news/update/' + news?.id\"\n />\n }\n </app-news-card-resume>\n }\n <ng-template #skeleton> </ng-template>\n </dsv-scroll-infinite>\n}\n", styles: [":host{display:flex;flex-direction:column;overflow:hidden}:host h2{text-transform:capitalize}:host dsv-card{margin:5px;width:calc(100% - 10px);gap:5px}:host dsv-card dsv-card-header{display:flex;flex-direction:row;align-items:center;margin:0 0 5px}:host dsv-card dsv-card-header h2{margin:0;flex:1}:host dsv-card dsv-form-reactive-searchbar{margin:0}:host dsv-scroll-infinite app-news-card-resume{width:calc(50% - 10px);padding-bottom:10px;margin-bottom:10px;border-bottom:1px solid var(--border)}@media screen and (max-width:600px){:host dsv-scroll-infinite app-news-card-resume{width:100%}}\n"] }]
|
|
37
37
|
}], ctorParameters: () => [{ type: NewsListService }] });
|
|
38
38
|
|
|
39
39
|
export { NewsListContainer };
|
|
40
|
-
//# sourceMappingURL=ng-vagabond-lab-ng-dsv-module-news-news-list.container-
|
|
40
|
+
//# sourceMappingURL=ng-vagabond-lab-ng-dsv-module-news-news-list.container-DFlRZqFM.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-vagabond-lab-ng-dsv-module-news-news-list.container-
|
|
1
|
+
{"version":3,"file":"ng-vagabond-lab-ng-dsv-module-news-news-list.container-DFlRZqFM.mjs","sources":["../../../projects/ng-dsv/module/news/container/list/news-list.container.ts","../../../projects/ng-dsv/module/news/container/list/news-list.container.html"],"sourcesContent":["import { Component, computed, inject } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { BaseSearchContainer } from '@ng-vagabond-lab/ng-dsv/base';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvCardComponent, DsvCardHeaderComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { DsvFormReactiveSearchbarComponent } from '@ng-vagabond-lab/ng-dsv/ds/form/reactive';\nimport { DsvScrollInfiniteContainer } from '@ng-vagabond-lab/ng-dsv/ds/scroll';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { NewsCardResumeComponent } from '../../component/card/resume/news-card-resume.component';\nimport { NewsDto } from '../../dto/news.dto';\nimport { NewsListService } from '../../service/list/news-list.service';\n\n@Component({\n selector: 'app-news-list',\n imports: [\n DsvCardComponent,\n DsvFormReactiveSearchbarComponent,\n DsvScrollInfiniteContainer,\n NewsCardResumeComponent,\n DsvButtonComponent,\n DsvCardHeaderComponent,\n RouterLink,\n ],\n templateUrl: './news-list.container.html',\n styleUrl: './news-list.container.scss',\n})\nexport class NewsListContainer extends BaseSearchContainer<NewsListService, NewsDto> {\n readonly auhService = inject(AuthService);\n\n readonly isAdmin = computed<boolean>(() => this.auhService.hasRole('ADMIN'));\n\n constructor(public newsListService: NewsListService) {\n super(newsListService);\n this.seoService.setMeta(\n 'Les dernières news',\n 'Retrouver les dernières news sur movie-keeper.fr',\n '/images/logo.png',\n );\n }\n}\n","<dsv-card>\n <dsv-card-header>\n <h2>\n <i class=\"ri-file-list-3-line\"></i> News\n @if (newsListService.total()) {\n ({{ newsListService.total() }})\n }\n </h2>\n @if (isAdmin()) {\n <dsv-button icon=\"ri-add-line\" color=\"secondary\" variant=\"outlined\" routerLink=\"/news/create\" />\n }\n </dsv-card-header>\n <dsv-form-reactive-searchbar [search]=\"newsListService.search()\" (callbackSearch)=\"doSearch($event)\" />\n</dsv-card>\n\n@if (newsListService.news().length === 0 && (!newsListService.isLoading() || newsListService.stopFetch())) {\n <dsv-card>\n <p>Aucun résultat trouvé</p>\n </dsv-card>\n} @else {\n <dsv-scroll-infinite\n #scroll\n class=\"card-miniature\"\n [loading]=\"newsListService.isLoading()\"\n (callback)=\"doFetch()\"\n >\n @for (news of newsListService.news(); track news.id) {\n <app-news-card-resume [news]=\"news\">\n @if (isAdmin()) {\n <dsv-button\n class=\"update-button\"\n icon=\"ri-tools-line\"\n [routerLink]=\"'/news/update/' + news?.id\"\n />\n }\n </app-news-card-resume>\n }\n <ng-template #skeleton> </ng-template>\n </dsv-scroll-infinite>\n}\n"],"names":["i1.NewsListService"],"mappings":";;;;;;;;;;;;AA0BM,MAAO,iBAAkB,SAAQ,mBAA6C,CAAA;AAK7D,IAAA,eAAA;AAJV,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;AAEhC,IAAA,OAAO,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;gFAAC;AAE5E,IAAA,WAAA,CAAmB,eAAgC,EAAA;QAC/C,KAAK,CAAC,eAAe,CAAC;QADP,IAAA,CAAA,eAAe,GAAf,eAAe;QAE9B,IAAI,CAAC,UAAU,CAAC,OAAO,CACnB,oBAAoB,EACpB,kDAAkD,EAClD,kBAAkB,CACrB;IACL;uGAZS,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,eAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1B9B,i6CAwCA,EAAA,MAAA,EAAA,CAAA,mlBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDzBQ,gBAAgB,yEAChB,iCAAiC,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjC,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,SAAA,EAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,uBAAuB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACvB,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,sBAAsB,4DACtB,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKL,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAd7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,OAAA,EAChB;wBACL,gBAAgB;wBAChB,iCAAiC;wBACjC,0BAA0B;wBAC1B,uBAAuB;wBACvB,kBAAkB;wBAClB,sBAAsB;wBACtB,UAAU;AACb,qBAAA,EAAA,QAAA,EAAA,i6CAAA,EAAA,MAAA,EAAA,CAAA,mlBAAA,CAAA,EAAA;;;"}
|
|
@@ -29,7 +29,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImpor
|
|
|
29
29
|
const NewsRoute = [
|
|
30
30
|
{
|
|
31
31
|
path: '',
|
|
32
|
-
loadComponent: () => import('./ng-vagabond-lab-ng-dsv-module-news-news-list.container-
|
|
32
|
+
loadComponent: () => import('./ng-vagabond-lab-ng-dsv-module-news-news-list.container-DFlRZqFM.mjs').then((m) => m.NewsListContainer),
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
path: 'create',
|
|
@@ -30,7 +30,12 @@ class NotificationComponent {
|
|
|
30
30
|
}));
|
|
31
31
|
constructor() {
|
|
32
32
|
effect(() => {
|
|
33
|
-
|
|
33
|
+
try {
|
|
34
|
+
this.notification()?.url && this.url.set(new URL(this.notification()?.url).pathname);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error('Error occurred while processing notification URL:', this.notification()?.url, error);
|
|
38
|
+
}
|
|
34
39
|
});
|
|
35
40
|
effect(() => {
|
|
36
41
|
this.readForm().reset({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-vagabond-lab-ng-dsv-module-notification.mjs","sources":["../../../projects/ng-dsv/module/notification/component/notification.component.ts","../../../projects/ng-dsv/module/notification/component/notification.component.html","../../../projects/ng-dsv/module/notification/service/notification-search.service.ts","../../../projects/ng-dsv/module/notification/service/notification.service.ts","../../../projects/ng-dsv/module/notification/container/button/notification-button.container.ts","../../../projects/ng-dsv/module/notification/container/button/notification-button.container.html","../../../projects/ng-dsv/module/notification/container/notification.container.ts","../../../projects/ng-dsv/module/notification/container/notification.container.html","../../../projects/ng-dsv/module/notification/route/notification.route.ts","../../../projects/ng-dsv/module/notification/ng-vagabond-lab-ng-dsv-module-notification.ts"],"sourcesContent":["import { Component, effect, ElementRef, input, output, signal, viewChild } from '@angular/core';\nimport { form } from '@angular/forms/signals';\nimport { RouterLink } from '@angular/router';\nimport { DateFormatPipe } from '@ng-vagabond-lab/ng-dsv/date';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvFormSignalCheckboxComponent } from '@ng-vagabond-lab/ng-dsv/ds/form/signal';\nimport { NotificationDto } from '../dto/notification.dto';\n\n@Component({\n selector: 'app-notification',\n imports: [DateFormatPipe, DsvButtonComponent, RouterLink, DsvFormSignalCheckboxComponent],\n templateUrl: './notification.component.html',\n styleUrls: ['./notification.component.scss'],\n})\nexport class NotificationComponent {\n readonly notification = input<NotificationDto>();\n readonly readonly = input<boolean>(false);\n\n readonly callback = output<NotificationDto>();\n\n readonly checkboxRef = viewChild<ElementRef>('checkbox');\n\n readonly url = signal<string>('');\n\n readonly readForm = form(\n signal({\n read: this.notification()?.read,\n }),\n );\n\n constructor() {\n effect(() => {\n this.url.set(new URL(this.notification()?.url!).pathname);\n });\n effect(() => {\n this.readForm().reset({\n read: this.notification()?.read,\n });\n });\n }\n\n triggerCheckbox(): void {\n this.checkboxRef()?.nativeElement.querySelector('input').click();\n }\n}\n","@if (!readonly()) {\n <div #checkbox>\n <dsv-form-signal-checkbox\n [form]=\"readForm\"\n fieldName=\"read\"\n [withLabel]=\"false\"\n (callbackChange)=\"callback.emit(notification()!)\"\n />\n </div>\n}\n\n<div\n class=\"notification-content\"\n [class.readonly]=\"readonly()\"\n (click)=\"triggerCheckbox()\"\n (keyup)=\"triggerCheckbox()\"\n>\n <b [class.read]=\"!notification()?.read && !readonly()\">\n <span class=\"subtitle\">{{ notification()?.creationDate! | formatDate: true }} : </span>\n {{ notification()?.title }}\n </b>\n <span>{{ notification()?.message }}</span>\n</div>\n\n@if (!readonly()) {\n <dsv-button icon=\"ri-external-link-line\" color=\"secondary\" [routerLink]=\"url()\" [prevent]=\"false\" />\n}\n","import { Injectable } from '@angular/core';\nimport { BaseSearchService } from '@ng-vagabond-lab/ng-dsv/base/service';\nimport { NotificationDto } from '../dto/notification.dto';\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationSearchService extends BaseSearchService<NotificationDto> {\n readonly notifications = this.datas;\n\n override getEndPoint(): string {\n return '/notification/search';\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { JSONObject } from '@ng-vagabond-lab/ng-dsv/api';\nimport { BaseApiService } from '@ng-vagabond-lab/ng-dsv/base/service';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { NotificationDto } from '../dto/notification.dto';\nimport { NotificationSearchService } from './notification-search.service';\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationService extends BaseApiService {\n readonly notificationSearchService = inject(NotificationSearchService);\n readonly routerService = inject(RouterService);\n\n readonly nbRead = signal<number>(0);\n\n fetchNbRead(): void {\n this.apiService.get<number>('/notification/count', (data) => {\n if (data !== this.nbRead()) {\n this.notificationSearchService.notifications.set([]);\n this.notificationSearchService.search.set('');\n this.notificationSearchService.page.set(1);\n }\n this.nbRead.set(Number(data));\n });\n }\n\n readAll(callback: () => void): void {\n this.apiService.put<JSONObject>('/notification/read-all', {}, () => {\n this.nbRead.set(0);\n callback();\n });\n }\n\n notificationRead(notification: NotificationDto): void {\n this.apiService.put('/notification/read/' + notification.id, {}, () => {\n this.nbRead.update((nb) => nb + (notification.read ? -1 : 1));\n });\n }\n}\n","import { Component, effect, inject, signal } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvChipComponent } from '@ng-vagabond-lab/ng-dsv/ds/chip';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { NotificationService } from '../../service/notification.service';\n\n@Component({\n selector: 'app-notification-button-container',\n imports: [DsvButtonComponent, DsvChipComponent, RouterLink],\n templateUrl: './notification-button.container.html',\n styleUrls: ['./notification-button.container.scss'],\n})\nexport class NotificationButtonContainer {\n readonly authService = inject(AuthService);\n readonly notificationService = inject(NotificationService);\n\n readonly nbRead = signal<string>('');\n\n constructor() {\n effect(() => {\n const nbRead = this.notificationService.nbRead();\n if (nbRead > 99) {\n this.nbRead.set('99+');\n } else if (nbRead > 0) {\n this.nbRead.set(nbRead.toString());\n } else {\n this.nbRead.set('');\n }\n });\n }\n}\n","@if (nbRead()) {\n <dsv-chip color=\"secondary\" [text]=\"nbRead()\" routerLink=\"/notification\" />\n}\n<dsv-button\n icon=\"ri-notification-line\"\n routerLink=\"/notification\"\n variant=\"text\"\n color=\"inherit\"\n [prevent]=\"false\"\n/>\n","import { Component, inject } from '@angular/core';\nimport { BaseSearchContainer } from '@ng-vagabond-lab/ng-dsv/base';\nimport { DsvCardComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { DsvFormReactiveSearchbarComponent } from '@ng-vagabond-lab/ng-dsv/ds/form/reactive';\nimport { DsvModalAlertComponent, DsvModalButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/modal';\nimport { DsvScrollInfiniteContainer } from '@ng-vagabond-lab/ng-dsv/ds/scroll';\nimport { NotificationComponent } from '../component/notification.component';\nimport { NotificationDto } from '../dto/notification.dto';\nimport { NotificationSearchService } from '../service/notification-search.service';\nimport { NotificationService } from '../service/notification.service';\n\n@Component({\n selector: 'app-notification-container',\n imports: [\n DsvCardComponent,\n DsvScrollInfiniteContainer,\n NotificationComponent,\n DsvModalAlertComponent,\n DsvModalButtonComponent,\n DsvFormReactiveSearchbarComponent,\n ],\n templateUrl: './notification.container.html',\n styleUrls: ['./notification.container.scss'],\n})\nexport class NotificationContainer extends BaseSearchContainer<NotificationSearchService, NotificationDto> {\n readonly notificationService = inject(NotificationService);\n\n constructor(public notificationSearchService: NotificationSearchService) {\n super(notificationSearchService);\n this.requiredRole.set('USER');\n }\n\n doRead(notificaton: NotificationDto): void {\n notificaton.read = !notificaton.read;\n this.notificationService.notificationRead(notificaton);\n }\n\n doReadAll(): void {\n this.notificationService.readAll(() => {\n this.notificationSearchService.notifications.update((notifications) => [\n ...notifications.map((notification) => ({ ...notification, read: true })),\n ]);\n });\n }\n}\n","<dsv-card>\n <div class=\"notification-header\">\n <h2>\n Notifications\n @if (notificationSearchService.total()) {\n <span> ({{ notificationSearchService.total() }})</span>\n }\n </h2>\n <dsv-modal-button\n modalName=\"notification-read-all\"\n text=\"Tout lire ({{ notificationService.nbRead() }})\"\n color=\"secondary\"\n variant=\"outlined\"\n ></dsv-modal-button>\n <dsv-modal-alert\n id=\"notification-read-all\"\n titleText=\"Lire toutes les notifications\"\n text=\"Voulez-vous vraiment lire toute les notifications ?\"\n button=\"Oui\"\n buttonClose=\"Non\"\n (callback)=\"doReadAll()\"\n ></dsv-modal-alert>\n </div>\n <div>\n <dsv-form-reactive-searchbar\n [search]=\"notificationSearchService.search()\"\n (callbackSearch)=\"doSearch($event)\"\n />\n </div>\n</dsv-card>\n\n@if (\n notificationSearchService.notifications().length === 0 &&\n (!notificationSearchService.isLoading() || notificationSearchService.stopFetch())\n) {\n <dsv-card>\n <p>Aucun résultat trouvé</p>\n </dsv-card>\n} @else {\n <dsv-scroll-infinite [loading]=\"notificationSearchService.isLoading()\" (callback)=\"doFetch()\">\n @for (notification of notificationSearchService.notifications(); track notification.id) {\n <app-notification [notification]=\"notification\" (callback)=\"doRead($event)\" />\n }\n </dsv-scroll-infinite>\n}\n","import { Routes } from '@angular/router';\n\nexport const NotificationRoute: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('../container/notification.container').then((m) => m.NotificationContainer),\n },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NotificationSearchService"],"mappings":";;;;;;;;;;;;;;;;;MAca,qBAAqB,CAAA;AACrB,IAAA,YAAY,GAAG,KAAK;gGAAmB;IACvC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;IAEhC,QAAQ,GAAG,MAAM,EAAmB;IAEpC,WAAW,GAAG,SAAS,CAAa,UAAU;oFAAC;IAE/C,GAAG,GAAG,MAAM,CAAS,EAAE;4EAAC;AAExB,IAAA,QAAQ,GAAG,IAAI,CACpB,MAAM,CAAC;AACH,QAAA,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI;AAClC,KAAA,CAAC,CACL;AAED,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,GAAI,CAAC,CAAC,QAAQ,CAAC;AAC7D,QAAA,CAAC,CAAC;QACF,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC;AAClB,gBAAA,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI;AAClC,aAAA,CAAC;AACN,QAAA,CAAC,CAAC;IACN;IAEA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE;IACpE;uGA7BS,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECdlC,8zBA2BA,EAAA,MAAA,EAAA,CAAA,yhBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDjB8B,kBAAkB,8KAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,8BAA8B,EAAA,QAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAA9E,cAAc,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,CAAA;;2FAIf,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;+BACI,kBAAkB,EAAA,OAAA,EACnB,CAAC,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,8BAA8B,CAAC,EAAA,QAAA,EAAA,8zBAAA,EAAA,MAAA,EAAA,CAAA,yhBAAA,CAAA,EAAA;gWAU5C,UAAU,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEfrD,MAAO,yBAA0B,SAAQ,iBAAkC,CAAA;AACpE,IAAA,aAAa,GAAG,IAAI,CAAC,KAAK;IAE1B,WAAW,GAAA;AAChB,QAAA,OAAO,sBAAsB;IACjC;uGALS,yBAAyB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA;;2FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACI5B,MAAO,mBAAoB,SAAQ,cAAc,CAAA;AAC1C,IAAA,yBAAyB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAC7D,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAErC,MAAM,GAAG,MAAM,CAAS,CAAC;+EAAC;IAEnC,WAAW,GAAA;QACP,IAAI,CAAC,UAAU,CAAC,GAAG,CAAS,qBAAqB,EAAE,CAAC,IAAI,KAAI;AACxD,YAAA,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,EAAE;gBACxB,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpD,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7C,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9C;YACA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,OAAO,CAAC,QAAoB,EAAA;QACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAa,wBAAwB,EAAE,EAAE,EAAE,MAAK;AAC/D,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAClB,YAAA,QAAQ,EAAE;AACd,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,gBAAgB,CAAC,YAA6B,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,qBAAqB,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAK;YAClE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjE,QAAA,CAAC,CAAC;IACN;uGA5BS,mBAAmB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA;;2FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCMrB,2BAA2B,CAAA;AAC3B,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAEjD,MAAM,GAAG,MAAM,CAAS,EAAE;+EAAC;AAEpC,IAAA,WAAA,GAAA;QACI,MAAM,CAAC,MAAK;YACR,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE;AAChD,YAAA,IAAI,MAAM,GAAG,EAAE,EAAE;AACb,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YAC1B;AAAO,iBAAA,IAAI,MAAM,GAAG,CAAC,EAAE;gBACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC;iBAAO;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB;AACJ,QAAA,CAAC,CAAC;IACN;uGAjBS,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,6FCbxC,0QAUA,EAAA,MAAA,EAAA,CAAA,4LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDDc,kBAAkB,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,4FAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIjD,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mCAAmC,WACpC,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAA,QAAA,EAAA,0QAAA,EAAA,MAAA,EAAA,CAAA,4LAAA,CAAA,EAAA;;;AEezD,MAAO,qBAAsB,SAAQ,mBAA+D,CAAA;AAGnF,IAAA,yBAAA;AAFV,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAE1D,IAAA,WAAA,CAAmB,yBAAoD,EAAA;QACnE,KAAK,CAAC,yBAAyB,CAAC;QADjB,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;AAExC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;IACjC;AAEA,IAAA,MAAM,CAAC,WAA4B,EAAA;AAC/B,QAAA,WAAW,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI;AACpC,QAAA,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,WAAW,CAAC;IAC1D;IAEA,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAK;YAClC,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,aAAa,KAAK;AACnE,gBAAA,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY,MAAM,EAAE,GAAG,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5E,aAAA,CAAC;AACN,QAAA,CAAC,CAAC;IACN;uGAnBS,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,yBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxBlC,gmDA6CA,EAAA,MAAA,EAAA,CAAA,2XAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED/BQ,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,0BAA0B,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,SAAA,EAAA,IAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAC1B,qBAAqB,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,uBAAuB,+IACvB,iCAAiC,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAK5B,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAbjC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,OAAA,EAC7B;wBACL,gBAAgB;wBAChB,0BAA0B;wBAC1B,qBAAqB;wBACrB,sBAAsB;wBACtB,uBAAuB;wBACvB,iCAAiC;AACpC,qBAAA,EAAA,QAAA,EAAA,gmDAAA,EAAA,MAAA,EAAA,CAAA,2XAAA,CAAA,EAAA;;;;;;;;AElBE,MAAM,iBAAiB,GAAW;AACrC,IAAA;AACI,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,aAAa,EAAE,MACX,sEAA6C,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC;AACzF,KAAA;;;ACPL;;AAEG;;"}
|
|
1
|
+
{"version":3,"file":"ng-vagabond-lab-ng-dsv-module-notification.mjs","sources":["../../../projects/ng-dsv/module/notification/component/notification.component.ts","../../../projects/ng-dsv/module/notification/component/notification.component.html","../../../projects/ng-dsv/module/notification/service/notification-search.service.ts","../../../projects/ng-dsv/module/notification/service/notification.service.ts","../../../projects/ng-dsv/module/notification/container/button/notification-button.container.ts","../../../projects/ng-dsv/module/notification/container/button/notification-button.container.html","../../../projects/ng-dsv/module/notification/container/notification.container.ts","../../../projects/ng-dsv/module/notification/container/notification.container.html","../../../projects/ng-dsv/module/notification/route/notification.route.ts","../../../projects/ng-dsv/module/notification/ng-vagabond-lab-ng-dsv-module-notification.ts"],"sourcesContent":["import { Component, effect, ElementRef, input, output, signal, viewChild } from '@angular/core';\nimport { form } from '@angular/forms/signals';\nimport { RouterLink } from '@angular/router';\nimport { DateFormatPipe } from '@ng-vagabond-lab/ng-dsv/date';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvFormSignalCheckboxComponent } from '@ng-vagabond-lab/ng-dsv/ds/form/signal';\nimport { NotificationDto } from '../dto/notification.dto';\n\n@Component({\n selector: 'app-notification',\n imports: [DateFormatPipe, DsvButtonComponent, RouterLink, DsvFormSignalCheckboxComponent],\n templateUrl: './notification.component.html',\n styleUrls: ['./notification.component.scss'],\n})\nexport class NotificationComponent {\n readonly notification = input<NotificationDto>();\n readonly readonly = input<boolean>(false);\n\n readonly callback = output<NotificationDto>();\n\n readonly checkboxRef = viewChild<ElementRef>('checkbox');\n\n readonly url = signal<string>('');\n\n readonly readForm = form(\n signal({\n read: this.notification()?.read,\n }),\n );\n\n constructor() {\n effect(() => {\n try {\n this.notification()?.url && this.url.set(new URL(this.notification()?.url!).pathname);\n } catch (error) {\n console.error('Error occurred while processing notification URL:', this.notification()?.url, error);\n }\n });\n effect(() => {\n this.readForm().reset({\n read: this.notification()?.read,\n });\n });\n }\n\n triggerCheckbox(): void {\n this.checkboxRef()?.nativeElement.querySelector('input').click();\n }\n}\n","@if (!readonly()) {\n <div #checkbox>\n <dsv-form-signal-checkbox\n [form]=\"readForm\"\n fieldName=\"read\"\n [withLabel]=\"false\"\n (callbackChange)=\"callback.emit(notification()!)\"\n />\n </div>\n}\n\n<div\n class=\"notification-content\"\n [class.readonly]=\"readonly()\"\n (click)=\"triggerCheckbox()\"\n (keyup)=\"triggerCheckbox()\"\n>\n <b [class.read]=\"!notification()?.read && !readonly()\">\n <span class=\"subtitle\">{{ notification()?.creationDate! | formatDate: true }} : </span>\n {{ notification()?.title }}\n </b>\n <span>{{ notification()?.message }}</span>\n</div>\n\n@if (!readonly()) {\n <dsv-button icon=\"ri-external-link-line\" color=\"secondary\" [routerLink]=\"url()\" [prevent]=\"false\" />\n}\n","import { Injectable } from '@angular/core';\nimport { BaseSearchService } from '@ng-vagabond-lab/ng-dsv/base/service';\nimport { NotificationDto } from '../dto/notification.dto';\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationSearchService extends BaseSearchService<NotificationDto> {\n readonly notifications = this.datas;\n\n override getEndPoint(): string {\n return '/notification/search';\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { JSONObject } from '@ng-vagabond-lab/ng-dsv/api';\nimport { BaseApiService } from '@ng-vagabond-lab/ng-dsv/base/service';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { NotificationDto } from '../dto/notification.dto';\nimport { NotificationSearchService } from './notification-search.service';\n\n@Injectable({ providedIn: 'root' })\nexport class NotificationService extends BaseApiService {\n readonly notificationSearchService = inject(NotificationSearchService);\n readonly routerService = inject(RouterService);\n\n readonly nbRead = signal<number>(0);\n\n fetchNbRead(): void {\n this.apiService.get<number>('/notification/count', (data) => {\n if (data !== this.nbRead()) {\n this.notificationSearchService.notifications.set([]);\n this.notificationSearchService.search.set('');\n this.notificationSearchService.page.set(1);\n }\n this.nbRead.set(Number(data));\n });\n }\n\n readAll(callback: () => void): void {\n this.apiService.put<JSONObject>('/notification/read-all', {}, () => {\n this.nbRead.set(0);\n callback();\n });\n }\n\n notificationRead(notification: NotificationDto): void {\n this.apiService.put('/notification/read/' + notification.id, {}, () => {\n this.nbRead.update((nb) => nb + (notification.read ? -1 : 1));\n });\n }\n}\n","import { Component, effect, inject, signal } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvChipComponent } from '@ng-vagabond-lab/ng-dsv/ds/chip';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { NotificationService } from '../../service/notification.service';\n\n@Component({\n selector: 'app-notification-button-container',\n imports: [DsvButtonComponent, DsvChipComponent, RouterLink],\n templateUrl: './notification-button.container.html',\n styleUrls: ['./notification-button.container.scss'],\n})\nexport class NotificationButtonContainer {\n readonly authService = inject(AuthService);\n readonly notificationService = inject(NotificationService);\n\n readonly nbRead = signal<string>('');\n\n constructor() {\n effect(() => {\n const nbRead = this.notificationService.nbRead();\n if (nbRead > 99) {\n this.nbRead.set('99+');\n } else if (nbRead > 0) {\n this.nbRead.set(nbRead.toString());\n } else {\n this.nbRead.set('');\n }\n });\n }\n}\n","@if (nbRead()) {\n <dsv-chip color=\"secondary\" [text]=\"nbRead()\" routerLink=\"/notification\" />\n}\n<dsv-button\n icon=\"ri-notification-line\"\n routerLink=\"/notification\"\n variant=\"text\"\n color=\"inherit\"\n [prevent]=\"false\"\n/>\n","import { Component, inject } from '@angular/core';\nimport { BaseSearchContainer } from '@ng-vagabond-lab/ng-dsv/base';\nimport { DsvCardComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { DsvFormReactiveSearchbarComponent } from '@ng-vagabond-lab/ng-dsv/ds/form/reactive';\nimport { DsvModalAlertComponent, DsvModalButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/modal';\nimport { DsvScrollInfiniteContainer } from '@ng-vagabond-lab/ng-dsv/ds/scroll';\nimport { NotificationComponent } from '../component/notification.component';\nimport { NotificationDto } from '../dto/notification.dto';\nimport { NotificationSearchService } from '../service/notification-search.service';\nimport { NotificationService } from '../service/notification.service';\n\n@Component({\n selector: 'app-notification-container',\n imports: [\n DsvCardComponent,\n DsvScrollInfiniteContainer,\n NotificationComponent,\n DsvModalAlertComponent,\n DsvModalButtonComponent,\n DsvFormReactiveSearchbarComponent,\n ],\n templateUrl: './notification.container.html',\n styleUrls: ['./notification.container.scss'],\n})\nexport class NotificationContainer extends BaseSearchContainer<NotificationSearchService, NotificationDto> {\n readonly notificationService = inject(NotificationService);\n\n constructor(public notificationSearchService: NotificationSearchService) {\n super(notificationSearchService);\n this.requiredRole.set('USER');\n }\n\n doRead(notificaton: NotificationDto): void {\n notificaton.read = !notificaton.read;\n this.notificationService.notificationRead(notificaton);\n }\n\n doReadAll(): void {\n this.notificationService.readAll(() => {\n this.notificationSearchService.notifications.update((notifications) => [\n ...notifications.map((notification) => ({ ...notification, read: true })),\n ]);\n });\n }\n}\n","<dsv-card>\n <div class=\"notification-header\">\n <h2>\n Notifications\n @if (notificationSearchService.total()) {\n <span> ({{ notificationSearchService.total() }})</span>\n }\n </h2>\n <dsv-modal-button\n modalName=\"notification-read-all\"\n text=\"Tout lire ({{ notificationService.nbRead() }})\"\n color=\"secondary\"\n variant=\"outlined\"\n ></dsv-modal-button>\n <dsv-modal-alert\n id=\"notification-read-all\"\n titleText=\"Lire toutes les notifications\"\n text=\"Voulez-vous vraiment lire toute les notifications ?\"\n button=\"Oui\"\n buttonClose=\"Non\"\n (callback)=\"doReadAll()\"\n ></dsv-modal-alert>\n </div>\n <div>\n <dsv-form-reactive-searchbar\n [search]=\"notificationSearchService.search()\"\n (callbackSearch)=\"doSearch($event)\"\n />\n </div>\n</dsv-card>\n\n@if (\n notificationSearchService.notifications().length === 0 &&\n (!notificationSearchService.isLoading() || notificationSearchService.stopFetch())\n) {\n <dsv-card>\n <p>Aucun résultat trouvé</p>\n </dsv-card>\n} @else {\n <dsv-scroll-infinite [loading]=\"notificationSearchService.isLoading()\" (callback)=\"doFetch()\">\n @for (notification of notificationSearchService.notifications(); track notification.id) {\n <app-notification [notification]=\"notification\" (callback)=\"doRead($event)\" />\n }\n </dsv-scroll-infinite>\n}\n","import { Routes } from '@angular/router';\n\nexport const NotificationRoute: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('../container/notification.container').then((m) => m.NotificationContainer),\n },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NotificationSearchService"],"mappings":"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"}
|