@ng-vagabond-lab/ng-dsv 0.2.49 → 0.2.50
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-api.mjs +11 -11
- package/fesm2022/ng-vagabond-lab-ng-dsv-api.mjs.map +1 -1
- package/fesm2022/ng-vagabond-lab-ng-dsv-module-contact.mjs +2 -2
- package/fesm2022/ng-vagabond-lab-ng-dsv-module-contact.mjs.map +1 -1
- package/fesm2022/{ng-vagabond-lab-ng-dsv-module-news-news-form.container-7ncFn1-b.mjs → ng-vagabond-lab-ng-dsv-module-news-news-form.container-CsJcaZPZ.mjs} +2 -2
- package/fesm2022/{ng-vagabond-lab-ng-dsv-module-news-news-form.container-7ncFn1-b.mjs.map → ng-vagabond-lab-ng-dsv-module-news-news-form.container-CsJcaZPZ.mjs.map} +1 -1
- package/fesm2022/{ng-vagabond-lab-ng-dsv-module-news-news-list.container-DByprYo-.mjs → ng-vagabond-lab-ng-dsv-module-news-news-list.container-C5PC9y3P.mjs} +5 -7
- package/fesm2022/ng-vagabond-lab-ng-dsv-module-news-news-list.container-C5PC9y3P.mjs.map +1 -0
- package/fesm2022/{ng-vagabond-lab-ng-dsv-module-news-news.container-DuJFujh9.mjs → ng-vagabond-lab-ng-dsv-module-news-news.container-BwGiY1xD.mjs} +4 -6
- package/fesm2022/ng-vagabond-lab-ng-dsv-module-news-news.container-BwGiY1xD.mjs.map +1 -0
- package/fesm2022/ng-vagabond-lab-ng-dsv-module-news.mjs +4 -4
- package/fesm2022/ng-vagabond-lab-ng-dsv-template.mjs +4 -4
- package/fesm2022/ng-vagabond-lab-ng-dsv-template.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ng-vagabond-lab-ng-dsv-api.d.ts +3 -3
- package/fesm2022/ng-vagabond-lab-ng-dsv-module-news-news-list.container-DByprYo-.mjs.map +0 -1
- package/fesm2022/ng-vagabond-lab-ng-dsv-module-news-news.container-DuJFujh9.mjs.map +0 -1
|
@@ -50,16 +50,16 @@ class ApiService {
|
|
|
50
50
|
blocked = signal(false, /* @ts-ignore */
|
|
51
51
|
...(ngDevMode ? [{ debugName: "blocked" }] : /* istanbul ignore next */ []));
|
|
52
52
|
get(url, callback, callbackError = () => { }) {
|
|
53
|
-
this.doSubscribe(url, this.httpClient.get(this.baseUrl() + url), callback, callbackError);
|
|
53
|
+
this.doSubscribe(url, '', this.httpClient.get(this.baseUrl() + url), callback, callbackError);
|
|
54
54
|
}
|
|
55
55
|
post(url, data, callback = () => { }, withCredentials = false, callbackError = () => { }) {
|
|
56
|
-
this.doSubscribe(url, this.httpClient.post(this.baseUrl() + url, data, { withCredentials }), callback, callbackError);
|
|
56
|
+
this.doSubscribe(url, data, this.httpClient.post(this.baseUrl() + url, data, { withCredentials }), callback, callbackError);
|
|
57
57
|
}
|
|
58
58
|
put(url, data, callback = () => { }, callbackError = () => { }) {
|
|
59
|
-
this.doSubscribe(url, this.httpClient.put(this.baseUrl() + url, data), callback, callbackError);
|
|
59
|
+
this.doSubscribe(url, data, this.httpClient.put(this.baseUrl() + url, data), callback, callbackError);
|
|
60
60
|
}
|
|
61
61
|
delete(url, callback, callbackError = () => { }) {
|
|
62
|
-
this.doSubscribe(url, this.httpClient.delete(this.baseUrl() + url), callback, callbackError);
|
|
62
|
+
this.doSubscribe(url, '', this.httpClient.delete(this.baseUrl() + url), callback, callbackError);
|
|
63
63
|
}
|
|
64
64
|
findById(endPoint, id, callback) {
|
|
65
65
|
this.get(endPoint + '/' + id, callback);
|
|
@@ -113,29 +113,29 @@ class ApiService {
|
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
|
-
doSubscribe(url, observable, callback, callbackError = () => { }) {
|
|
116
|
+
doSubscribe(url, data, observable, callback, callbackError = () => { }) {
|
|
117
117
|
this.nbLoaded.update((loaded) => loaded + 1);
|
|
118
118
|
observable.subscribe({
|
|
119
119
|
next: (res) => {
|
|
120
120
|
this.nbLoaded.update((loaded) => loaded - 1);
|
|
121
|
-
this.info(url, res);
|
|
121
|
+
this.info(url, data, res);
|
|
122
122
|
callback(res);
|
|
123
123
|
},
|
|
124
124
|
error: (error) => {
|
|
125
125
|
this.nbLoaded.update((loaded) => loaded - 1);
|
|
126
|
-
this.error(url, error);
|
|
126
|
+
this.error(url, data, error);
|
|
127
127
|
callbackError();
|
|
128
128
|
},
|
|
129
129
|
});
|
|
130
130
|
}
|
|
131
|
-
info(url, data) {
|
|
131
|
+
info(url, body, data = null) {
|
|
132
132
|
if (this.platformService.isPlatformBrowser()) {
|
|
133
|
-
console.log(url, data);
|
|
133
|
+
console.log(url, body, data);
|
|
134
134
|
}
|
|
135
135
|
}
|
|
136
|
-
error(url, error) {
|
|
136
|
+
error(url, body, error) {
|
|
137
137
|
if (this.platformService.isPlatformBrowser()) {
|
|
138
|
-
console.error(url, error);
|
|
138
|
+
console.error(url, body, error);
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-vagabond-lab-ng-dsv-api.mjs","sources":["../../../projects/ng-dsv/api/service/api-resource.service.ts","../../../projects/ng-dsv/api/service/api.service.ts","../../../projects/ng-dsv/api/ng-vagabond-lab-ng-dsv-api.ts"],"sourcesContent":["import { httpResource } from '@angular/common/http';\nimport { Injectable, ResourceRef, signal } from '@angular/core';\nimport { OrderState } from '../public-api';\n\nexport interface ApiFindBy {\n endPoint?: string;\n fields?: string;\n values?: string;\n first?: number;\n max?: number;\n order?: OrderState;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApiResourceService<T> {\n readonly url = signal<string | undefined>(undefined);\n\n readonly resource: ResourceRef<T | undefined> = httpResource(() => ({\n url: `${this.url()}`,\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n params: {},\n reportProgress: true,\n transferCache: true,\n keepalive: true,\n mode: 'same-origin',\n redirect: 'error',\n priority: 'high',\n cache: 'force-cache',\n credentials: 'include',\n referrer: 'no-referrer',\n integrity: 'sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GhEXAMPLEKEY=',\n }));\n\n constructor() {}\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, signal } from '@angular/core';\nimport { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { Observable } from 'rxjs';\nimport { ApiDto, ID, JSONObject, OrderState } from '../dto/api.dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApiService {\n readonly httpClient = inject(HttpClient);\n readonly toastService = inject(ToastService);\n readonly platformService = inject(PlatformService);\n readonly environmentService = inject(EnvironmentService);\n\n readonly baseUrl = signal<string>('/api');\n readonly nbLoaded = signal<number>(0);\n readonly blocked = signal<boolean>(false);\n\n get<T>(url: string, callback: (data: T) => void, callbackError: () => void = () => {}) {\n this.doSubscribe(url, this.httpClient.get<T>(this.baseUrl() + url), callback, callbackError);\n }\n\n post<TBody, TResponse = TBody>(\n url: string,\n data: TBody,\n callback: (data: TResponse) => void = () => {},\n withCredentials: boolean = false,\n callbackError: () => void = () => {},\n ) {\n this.doSubscribe(\n url,\n this.httpClient.post<TResponse>(this.baseUrl() + url, data, { withCredentials }),\n callback,\n callbackError,\n );\n }\n\n put<TBody, TResponse = TBody>(\n url: string,\n data: TBody,\n callback: (data: TResponse) => void = () => {},\n callbackError: () => void = () => {},\n ) {\n this.doSubscribe(\n url,\n this.httpClient.put<TResponse>(this.baseUrl() + url, data),\n callback,\n callbackError,\n );\n }\n\n delete<T>(url: string, callback: (data: T) => void, callbackError: () => void = () => {}) {\n this.doSubscribe(url, this.httpClient.delete<T>(this.baseUrl() + url), callback, callbackError);\n }\n\n findById<T>(endPoint: string, id: ID, callback: (data: T) => void) {\n this.get<T>(endPoint + '/' + id, callback);\n }\n\n findBy<T>(\n endPoint: string,\n fields: string,\n values: string,\n first: number,\n max: number,\n order: OrderState,\n callback: (data: T) => void,\n ) {\n const orderType: string = order.orderAsc ? '' : 'Desc';\n const orderConst: string = order.order ? '>>' + order.order + orderType : '';\n const fieldsComplete = fields + orderConst;\n this.get<T>(\n endPoint +\n '?fields=' +\n encodeURI(fieldsComplete) +\n '&values=' +\n encodeURI(values) +\n '&first=' +\n first +\n '&max=' +\n max,\n (data: T) => {\n callback(data);\n },\n );\n }\n\n countBy(endPoint: string, fields: string, values: string, callback: (data: { count: number }) => void) {\n return this.get<{ count: number }>(\n endPoint + '?fields=' + encodeURI(fields) + '&values=' + values,\n (data: { count: number }) => {\n callback(data);\n },\n );\n }\n\n createOrUpdate<T extends ApiDto>(endPoint: string, data: T, callback: (data: T) => void, toast?: string) {\n if (this.blocked()) {\n return;\n }\n this.blocked.set(true);\n if (data.id !== null && data.id !== undefined && data.id !== '' && Number(data.id) > 0) {\n this.put<T>(\n '/' + endPoint + '/',\n data,\n (dateReturn: T) => {\n this.toastService.showToast({\n text: toast ?? 'UPDATE_OK',\n type: 'success',\n closeAll: true,\n });\n callback(dateReturn);\n this.blocked.set(false);\n },\n () => {\n this.blocked.set(false);\n },\n );\n } else {\n this.post<T>(\n '/' + endPoint + '/',\n data,\n (dateReturn: T) => {\n this.toastService.showToast({ text: toast ?? 'CREATION_OK', type: 'success' });\n callback(dateReturn);\n this.blocked.set(false);\n },\n false,\n () => {\n this.blocked.set(false);\n },\n );\n }\n }\n\n doSubscribe<T>(\n url: string,\n observable: Observable<T>,\n callback: (data: T) => void,\n callbackError: () => void = () => {},\n ) {\n this.nbLoaded.update((loaded) => loaded + 1);\n observable.subscribe({\n next: (res) => {\n this.nbLoaded.update((loaded) => loaded - 1);\n this.info(url, res as JSONObject);\n callback(res);\n },\n error: (error: JSONObject) => {\n this.nbLoaded.update((loaded) => loaded - 1);\n this.error(url, error);\n callbackError();\n },\n });\n }\n\n info(url: string, data: JSONObject | null) {\n if (this.platformService.isPlatformBrowser()) {\n console.log(url, data);\n }\n }\n\n error(url: string, error: JSONObject) {\n if (this.platformService.isPlatformBrowser()) {\n console.error(url, error);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-vagabond-lab-ng-dsv-api.mjs","sources":["../../../projects/ng-dsv/api/service/api-resource.service.ts","../../../projects/ng-dsv/api/service/api.service.ts","../../../projects/ng-dsv/api/ng-vagabond-lab-ng-dsv-api.ts"],"sourcesContent":["import { httpResource } from '@angular/common/http';\nimport { Injectable, ResourceRef, signal } from '@angular/core';\nimport { OrderState } from '../public-api';\n\nexport interface ApiFindBy {\n endPoint?: string;\n fields?: string;\n values?: string;\n first?: number;\n max?: number;\n order?: OrderState;\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApiResourceService<T> {\n readonly url = signal<string | undefined>(undefined);\n\n readonly resource: ResourceRef<T | undefined> = httpResource(() => ({\n url: `${this.url()}`,\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n },\n params: {},\n reportProgress: true,\n transferCache: true,\n keepalive: true,\n mode: 'same-origin',\n redirect: 'error',\n priority: 'high',\n cache: 'force-cache',\n credentials: 'include',\n referrer: 'no-referrer',\n integrity: 'sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GhEXAMPLEKEY=',\n }));\n\n constructor() {}\n}\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable, signal } from '@angular/core';\nimport { ToastService } from '@ng-vagabond-lab/ng-dsv/ds/toast';\nimport { EnvironmentService } from '@ng-vagabond-lab/ng-dsv/environment';\nimport { PlatformService } from '@ng-vagabond-lab/ng-dsv/platform';\nimport { Observable } from 'rxjs';\nimport { ApiDto, ID, JSONObject, OrderState } from '../dto/api.dto';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ApiService {\n readonly httpClient = inject(HttpClient);\n readonly toastService = inject(ToastService);\n readonly platformService = inject(PlatformService);\n readonly environmentService = inject(EnvironmentService);\n\n readonly baseUrl = signal<string>('/api');\n readonly nbLoaded = signal<number>(0);\n readonly blocked = signal<boolean>(false);\n\n get<T>(url: string, callback: (data: T) => void, callbackError: () => void = () => {}) {\n this.doSubscribe(url, '', this.httpClient.get<T>(this.baseUrl() + url), callback, callbackError);\n }\n\n post<TBody, TResponse = TBody>(\n url: string,\n data: TBody,\n callback: (data: TResponse) => void = () => {},\n withCredentials: boolean = false,\n callbackError: () => void = () => {},\n ) {\n this.doSubscribe(\n url,\n data as JSONObject,\n this.httpClient.post<TResponse>(this.baseUrl() + url, data, { withCredentials }),\n callback,\n callbackError,\n );\n }\n\n put<TBody, TResponse = TBody>(\n url: string,\n data: TBody,\n callback: (data: TResponse) => void = () => {},\n callbackError: () => void = () => {},\n ) {\n this.doSubscribe(\n url,\n data as JSONObject,\n this.httpClient.put<TResponse>(this.baseUrl() + url, data),\n callback,\n callbackError,\n );\n }\n\n delete<T>(url: string, callback: (data: T) => void, callbackError: () => void = () => {}) {\n this.doSubscribe(url, '', this.httpClient.delete<T>(this.baseUrl() + url), callback, callbackError);\n }\n\n findById<T>(endPoint: string, id: ID, callback: (data: T) => void) {\n this.get<T>(endPoint + '/' + id, callback);\n }\n\n findBy<T>(\n endPoint: string,\n fields: string,\n values: string,\n first: number,\n max: number,\n order: OrderState,\n callback: (data: T) => void,\n ) {\n const orderType: string = order.orderAsc ? '' : 'Desc';\n const orderConst: string = order.order ? '>>' + order.order + orderType : '';\n const fieldsComplete = fields + orderConst;\n this.get<T>(\n endPoint +\n '?fields=' +\n encodeURI(fieldsComplete) +\n '&values=' +\n encodeURI(values) +\n '&first=' +\n first +\n '&max=' +\n max,\n (data: T) => {\n callback(data);\n },\n );\n }\n\n countBy(endPoint: string, fields: string, values: string, callback: (data: { count: number }) => void) {\n return this.get<{ count: number }>(\n endPoint + '?fields=' + encodeURI(fields) + '&values=' + values,\n (data: { count: number }) => {\n callback(data);\n },\n );\n }\n\n createOrUpdate<T extends ApiDto>(endPoint: string, data: T, callback: (data: T) => void, toast?: string) {\n if (this.blocked()) {\n return;\n }\n this.blocked.set(true);\n if (data.id !== null && data.id !== undefined && data.id !== '' && Number(data.id) > 0) {\n this.put<T>(\n '/' + endPoint + '/',\n data,\n (dateReturn: T) => {\n this.toastService.showToast({\n text: toast ?? 'UPDATE_OK',\n type: 'success',\n closeAll: true,\n });\n callback(dateReturn);\n this.blocked.set(false);\n },\n () => {\n this.blocked.set(false);\n },\n );\n } else {\n this.post<T>(\n '/' + endPoint + '/',\n data,\n (dateReturn: T) => {\n this.toastService.showToast({ text: toast ?? 'CREATION_OK', type: 'success' });\n callback(dateReturn);\n this.blocked.set(false);\n },\n false,\n () => {\n this.blocked.set(false);\n },\n );\n }\n }\n\n doSubscribe<T>(\n url: string,\n data: JSONObject | '',\n observable: Observable<T>,\n callback: (data: T) => void,\n callbackError: () => void = () => {},\n ) {\n this.nbLoaded.update((loaded) => loaded + 1);\n observable.subscribe({\n next: (res) => {\n this.nbLoaded.update((loaded) => loaded - 1);\n this.info(url, data, res as JSONObject);\n callback(res);\n },\n error: (error: JSONObject) => {\n this.nbLoaded.update((loaded) => loaded - 1);\n this.error(url, data, error);\n callbackError();\n },\n });\n }\n\n info(url: string, body: JSONObject | '', data: JSONObject | null = null) {\n if (this.platformService.isPlatformBrowser()) {\n console.log(url, body, data);\n }\n }\n\n error(url: string, body: JSONObject | '', error: JSONObject) {\n if (this.platformService.isPlatformBrowser()) {\n console.error(url, body, error);\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -10,11 +10,11 @@ class ContactComponent {
|
|
|
10
10
|
contactEmail = input('vagabond.git@gmail.com', /* @ts-ignore */
|
|
11
11
|
...(ngDevMode ? [{ debugName: "contactEmail" }] : /* istanbul ignore next */ []));
|
|
12
12
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.5", type: ContactComponent, isStandalone: true, selector: "dsv-contact", inputs: { contactEmail: { classPropertyName: "contactEmail", publicName: "contactEmail", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<section class=\"contact-page\">\n <dsv-card>\n <div class=\"content\">\n <div class=\"left-side\">\n <img title=\"vagabond\" alt=\"vagabond\" src=\"/images/vagabond.png\" />\n <h2>vagabond</h2>\n <p>\n {{ 'CONTACT.DESCRIPTION' | translate }}\n <br />\n {{ 'CONTACT.DESCRIPTION2' | translate }}\n </p>\n <div class=\"chips\">\n <dsv-chip text=\"ANGULAR\" color=\"secondary\" />\n <dsv-chip text=\"QUARKUS\" color=\"secondary\" />\n <dsv-chip text=\"DOCKER\" color=\"secondary\" />\n <dsv-chip text=\"GIT\" color=\"secondary\" />\n </div>\n </div>\n <div class=\"right-side\">\n <div>\n <h2>{{ 'CONTACT.CONTACT_ME' | translate }}</h2>\n <p>\n {{ 'CONTACT.WRITE_TO_ME' | translate }}\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </p>\n </div>\n <div>\n <h2>{{ 'CONTACT.FOLLOW_ME' | translate }}</h2>\n <div class=\"follow-buttons\">\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://discord.com/invite/TUy5MtVRt7\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/discord.png\"\n />\n {{ 'CONTACT.DISCORD_BUTTON' | translate }}\n </a>\n </dsv-button>\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://github.com/vagabon\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/github.png\"\n />\n {{ 'CONTACT.GITHUB_BUTTON' | translate }}\n </a>\n </dsv-button>\n <dsv-button class=\"button-secondary\" color=\"secondary\">\n <a href=\"https://blog.vagabond.synology.me/\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/blog.png\"\n />\n {{ 'CONTACT.BLOG_BUTTON' | translate }}\n </a>\n </dsv-button>\n </div>\n </div>\n </div>\n </div>\n </dsv-card>\n</section>\n\n<section class=\"contact-projects\">\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-file-video-line\"></i>\n {{ 'CONTACT.PROJECTS.MK.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img title=\"logo Movie Keeper\" alt=\"logo Movie Keeper\" width=\"40px\" src=\"/images/icons/mk.png\" />\n <p>\n {{ 'CONTACT.PROJECTS.MK.DESCRIPTION' | translate }}\n </p>\n </div>\n <a href=\"https://movie-keeper.fr\" title=\"https://movie-keeper.fr\" dsvLinkExternal>\n https://movie-keeper.fr\n </a>\n </dsv-card>\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-news-line\"></i>\n {{ 'CONTACT.PROJECTS.BLOG.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/blog.png\"\n />\n <p>\n {{ 'CONTACT.PROJECTS.BLOG.DESCRIPTION' | translate }}<br />\n {{ 'CONTACT.PROJECTS.BLOG.DESCRIPTION2' | translate }}\n </p>\n </div>\n <a href=\"https://blog.vagabond.synology.me\" title=\"//blog.vagabond.synology.me\" dsvLinkExternal>\n https://blog.vagabond.synology.me\n </a>\n </dsv-card>\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-chat-1-line\"></i>\n {{ 'CONTACT.PROJECTS.OYC.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/oyc.png\"\n />\n <p>\n {{ 'CONTACT.PROJECTS.OYC.DESCRIPTION' | translate }}<br />\n {{ 'CONTACT.PROJECTS.OYC.DESCRIPTION2' | translate }}\n </p>\n </div>\n <a href=\"https://www.ownyourchatbots.com\" title=\"OwnYourChatbots\" dsvLinkExternal>\n https://www.ownyourchatbots.com\n </a>\n </dsv-card>\n</section>\n", styles: [":host{display:flex;flex-direction:column}:host p{text-align:justify}:host .content{display:flex;margin:5px!important;width:calc(100% - 10px)!important}:host .content h2{font-size:1.5rem;font-weight:700!important;margin:10px 0!important}:host .content p{font-size:1.1rem}:host .content .left-side{width:50%;display:flex;flex-direction:column;align-items:center}:host .content .left-side img{width:200px;border-radius:50%;border:3px solid var(--primary);padding:5px}:host .content .left-side p{text-align:center}:host .content .left-side .chips{margin:15px 0;display:flex;flex-wrap:wrap;gap:10px}:host .content .left-side .chips dsv-chip{--chip-padding: 10px;--chip-font-size: .9rem;--chip-font-weight: 550}:host .content .right-side{width:50%;display:flex;flex-direction:column;gap:20px}:host .content .right-side h2{margin-bottom:20px!important}:host .content .right-side .follow-buttons{display:flex;flex-direction:column;gap:10px;margin-top:30px}:host .content .right-side .follow-buttons dsv-button{--button-width: 100%;--button-font-size: .8rem;--button-font-weight: 400;--button-padding: 4px}:host .content .right-side .follow-buttons dsv-button a{display:flex;gap:5px;width:100%!important;color:var(--text)!important;border:0px!important;align-items:center;justify-content:center}:host .content .right-side .follow-buttons dsv-button.button-secondary a{color:var(--button-text)!important}@media screen and (max-width:800px){:host .content{flex-direction:column}:host .content .left-side{width:100%!important}:host .content .right-side{text-align:center;align-items:center;width:100%!important}:host .content .right-side>div{width:100%!important}:host .content .right-side p{text-align:center}:host .content .follow-buttons{width:100%}}:host .contact-projects{display:flex;flex-direction:row;gap:10px;margin:10px 5px 5px!important;width:calc(100% - 10px)!important}:host .contact-projects dsv-card{padding:5px!important;width:33%}:host .contact-projects h2{display:flex;gap:10px}:host .contact-projects .project-content{display:flex;gap:20px;align-items:center;margin-bottom:10px;flex:1}@media screen and (max-width:800px){:host .contact-projects{flex-direction:column}:host .contact-projects dsv-card{width:calc(100% - 15px)!important}}\n"], dependencies: [{ kind: "component", type: DsvCardComponent, selector: "dsv-card", inputs: ["border"] }, { kind: "component", type: DsvChipComponent, selector: "dsv-chip", inputs: ["text"], outputs: ["delete"] }, { kind: "directive", type: RouterExternalPipe, selector: "a[dsvLinkExternal]", inputs: ["color"], outputs: ["dsvLinkExternal"] }, { kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
13
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.5", type: ContactComponent, isStandalone: true, selector: "dsv-contact", inputs: { contactEmail: { classPropertyName: "contactEmail", publicName: "contactEmail", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<section class=\"contact-page\">\n <dsv-card>\n <div class=\"content\">\n <div class=\"left-side\">\n <img title=\"vagabond\" alt=\"vagabond\" src=\"/images/vagabond.png\" />\n <h2>vagabond</h2>\n <p>\n {{ 'CONTACT.DESCRIPTION' | translate }}\n <br />\n {{ 'CONTACT.DESCRIPTION2' | translate }}\n </p>\n <div class=\"chips\">\n <dsv-chip text=\"ANGULAR\" color=\"secondary\" />\n <dsv-chip text=\"QUARKUS\" color=\"secondary\" />\n <dsv-chip text=\"DOCKER\" color=\"secondary\" />\n <dsv-chip text=\"GIT\" color=\"secondary\" />\n </div>\n </div>\n <div class=\"right-side\">\n <div>\n <h2>{{ 'CONTACT.CONTACT_ME' | translate }}</h2>\n <p>\n {{ 'CONTACT.WRITE_TO_ME' | translate }}\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </p>\n </div>\n <div>\n <h2>{{ 'CONTACT.FOLLOW_ME' | translate }}</h2>\n <div class=\"follow-buttons\">\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://discord.com/invite/TUy5MtVRt7\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/discord.png\"\n />\n {{ 'CONTACT.DISCORD_BUTTON' | translate }}\n </a>\n </dsv-button>\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://github.com/vagabon\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/github.png\"\n />\n {{ 'CONTACT.GITHUB_BUTTON' | translate }}\n </a>\n </dsv-button>\n <dsv-button class=\"button-secondary\" color=\"secondary\">\n <a href=\"https://blog.vagabond.synology.me/\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/blog.png\"\n />\n {{ 'CONTACT.BLOG_BUTTON' | translate }}\n </a>\n </dsv-button>\n </div>\n </div>\n </div>\n </div>\n </dsv-card>\n</section>\n\n<section class=\"contact-projects\">\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-file-video-line\"></i>\n {{ 'CONTACT.PROJECTS.MK.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img title=\"logo Movie Keeper\" alt=\"logo Movie Keeper\" width=\"40px\" src=\"/images/icons/mk.png\" />\n <p>\n {{ 'CONTACT.PROJECTS.MK.DESCRIPTION' | translate }}\n </p>\n </div>\n <a href=\"https://movie-keeper.fr\" title=\"https://movie-keeper.fr\" dsvLinkExternal>\n https://movie-keeper.fr\n </a>\n </dsv-card>\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-news-line\"></i>\n {{ 'CONTACT.PROJECTS.BLOG.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/blog.png\"\n />\n <p>\n {{ 'CONTACT.PROJECTS.BLOG.DESCRIPTION' | translate }}<br />\n {{ 'CONTACT.PROJECTS.BLOG.DESCRIPTION2' | translate }}\n </p>\n </div>\n <a href=\"https://blog.vagabond.synology.me\" title=\"//blog.vagabond.synology.me\" dsvLinkExternal>\n https://blog.vagabond.synology.me\n </a>\n </dsv-card>\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-chat-1-line\"></i>\n {{ 'CONTACT.PROJECTS.OYC.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/oyc.png\"\n />\n <p>\n {{ 'CONTACT.PROJECTS.OYC.DESCRIPTION' | translate }}<br />\n {{ 'CONTACT.PROJECTS.OYC.DESCRIPTION2' | translate }}\n </p>\n </div>\n <a href=\"https://www.ownyourchatbots.com\" title=\"OwnYourChatbots\" dsvLinkExternal>\n https://www.ownyourchatbots.com\n </a>\n </dsv-card>\n</section>\n", styles: [":host{display:flex;flex-direction:column;flex:1}:host p{text-align:justify}:host .content{display:flex;margin:5px!important;width:calc(100% - 10px)!important}:host .content h2{font-size:1.5rem;font-weight:700!important;margin:10px 0!important}:host .content p{font-size:1.1rem}:host .content .left-side{width:50%;display:flex;flex-direction:column;align-items:center}:host .content .left-side img{width:200px;height:200px;border-radius:50%;border:3px solid var(--primary);padding:5px}:host .content .left-side p{text-align:center}:host .content .left-side .chips{margin:15px 0;display:flex;flex-wrap:wrap;gap:10px}:host .content .left-side .chips dsv-chip{--chip-padding: 10px;--chip-font-size: .9rem;--chip-font-weight: 550}:host .content .right-side{width:50%;display:flex;flex-direction:column;gap:20px}:host .content .right-side h2{margin-bottom:20px!important}:host .content .right-side .follow-buttons{display:flex;flex-direction:column;gap:10px;margin-top:30px}:host .content .right-side .follow-buttons dsv-button{--button-width: 100%;--button-font-size: .8rem;--button-font-weight: 400;--button-padding: 4px}:host .content .right-side .follow-buttons dsv-button a{display:flex;gap:5px;width:100%!important;color:var(--text)!important;border:0px!important;align-items:center;justify-content:center}:host .content .right-side .follow-buttons dsv-button.button-secondary a{color:var(--button-text)!important}@media screen and (max-width:800px){:host .content{flex-direction:column}:host .content .left-side{width:100%!important}:host .content .right-side{text-align:center;align-items:center;width:100%!important}:host .content .right-side>div{width:100%!important}:host .content .right-side p{text-align:center}:host .content .follow-buttons{width:100%}}:host .contact-projects{display:flex;flex-direction:row;gap:10px;margin:10px 5px 5px!important;width:calc(100% - 10px)!important}:host .contact-projects dsv-card{padding:5px!important;width:33%}:host .contact-projects h2{display:flex;gap:10px}:host .contact-projects .project-content{display:flex;gap:20px;align-items:center;margin-bottom:10px;flex:1}@media screen and (max-width:800px){:host .contact-projects{flex-direction:column}:host .contact-projects dsv-card{width:calc(100% - 15px)!important}}\n"], dependencies: [{ kind: "component", type: DsvCardComponent, selector: "dsv-card", inputs: ["border"] }, { kind: "component", type: DsvChipComponent, selector: "dsv-chip", inputs: ["text"], outputs: ["delete"] }, { kind: "directive", type: RouterExternalPipe, selector: "a[dsvLinkExternal]", inputs: ["color"], outputs: ["dsvLinkExternal"] }, { kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
14
14
|
}
|
|
15
15
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: ContactComponent, decorators: [{
|
|
16
16
|
type: Component,
|
|
17
|
-
args: [{ selector: 'dsv-contact', imports: [DsvCardComponent, DsvChipComponent, RouterExternalPipe, DsvButtonComponent, TranslatePipe], template: "<section class=\"contact-page\">\n <dsv-card>\n <div class=\"content\">\n <div class=\"left-side\">\n <img title=\"vagabond\" alt=\"vagabond\" src=\"/images/vagabond.png\" />\n <h2>vagabond</h2>\n <p>\n {{ 'CONTACT.DESCRIPTION' | translate }}\n <br />\n {{ 'CONTACT.DESCRIPTION2' | translate }}\n </p>\n <div class=\"chips\">\n <dsv-chip text=\"ANGULAR\" color=\"secondary\" />\n <dsv-chip text=\"QUARKUS\" color=\"secondary\" />\n <dsv-chip text=\"DOCKER\" color=\"secondary\" />\n <dsv-chip text=\"GIT\" color=\"secondary\" />\n </div>\n </div>\n <div class=\"right-side\">\n <div>\n <h2>{{ 'CONTACT.CONTACT_ME' | translate }}</h2>\n <p>\n {{ 'CONTACT.WRITE_TO_ME' | translate }}\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </p>\n </div>\n <div>\n <h2>{{ 'CONTACT.FOLLOW_ME' | translate }}</h2>\n <div class=\"follow-buttons\">\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://discord.com/invite/TUy5MtVRt7\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/discord.png\"\n />\n {{ 'CONTACT.DISCORD_BUTTON' | translate }}\n </a>\n </dsv-button>\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://github.com/vagabon\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/github.png\"\n />\n {{ 'CONTACT.GITHUB_BUTTON' | translate }}\n </a>\n </dsv-button>\n <dsv-button class=\"button-secondary\" color=\"secondary\">\n <a href=\"https://blog.vagabond.synology.me/\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/blog.png\"\n />\n {{ 'CONTACT.BLOG_BUTTON' | translate }}\n </a>\n </dsv-button>\n </div>\n </div>\n </div>\n </div>\n </dsv-card>\n</section>\n\n<section class=\"contact-projects\">\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-file-video-line\"></i>\n {{ 'CONTACT.PROJECTS.MK.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img title=\"logo Movie Keeper\" alt=\"logo Movie Keeper\" width=\"40px\" src=\"/images/icons/mk.png\" />\n <p>\n {{ 'CONTACT.PROJECTS.MK.DESCRIPTION' | translate }}\n </p>\n </div>\n <a href=\"https://movie-keeper.fr\" title=\"https://movie-keeper.fr\" dsvLinkExternal>\n https://movie-keeper.fr\n </a>\n </dsv-card>\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-news-line\"></i>\n {{ 'CONTACT.PROJECTS.BLOG.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/blog.png\"\n />\n <p>\n {{ 'CONTACT.PROJECTS.BLOG.DESCRIPTION' | translate }}<br />\n {{ 'CONTACT.PROJECTS.BLOG.DESCRIPTION2' | translate }}\n </p>\n </div>\n <a href=\"https://blog.vagabond.synology.me\" title=\"//blog.vagabond.synology.me\" dsvLinkExternal>\n https://blog.vagabond.synology.me\n </a>\n </dsv-card>\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-chat-1-line\"></i>\n {{ 'CONTACT.PROJECTS.OYC.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/oyc.png\"\n />\n <p>\n {{ 'CONTACT.PROJECTS.OYC.DESCRIPTION' | translate }}<br />\n {{ 'CONTACT.PROJECTS.OYC.DESCRIPTION2' | translate }}\n </p>\n </div>\n <a href=\"https://www.ownyourchatbots.com\" title=\"OwnYourChatbots\" dsvLinkExternal>\n https://www.ownyourchatbots.com\n </a>\n </dsv-card>\n</section>\n", styles: [":host{display:flex;flex-direction:column}:host p{text-align:justify}:host .content{display:flex;margin:5px!important;width:calc(100% - 10px)!important}:host .content h2{font-size:1.5rem;font-weight:700!important;margin:10px 0!important}:host .content p{font-size:1.1rem}:host .content .left-side{width:50%;display:flex;flex-direction:column;align-items:center}:host .content .left-side img{width:200px;border-radius:50%;border:3px solid var(--primary);padding:5px}:host .content .left-side p{text-align:center}:host .content .left-side .chips{margin:15px 0;display:flex;flex-wrap:wrap;gap:10px}:host .content .left-side .chips dsv-chip{--chip-padding: 10px;--chip-font-size: .9rem;--chip-font-weight: 550}:host .content .right-side{width:50%;display:flex;flex-direction:column;gap:20px}:host .content .right-side h2{margin-bottom:20px!important}:host .content .right-side .follow-buttons{display:flex;flex-direction:column;gap:10px;margin-top:30px}:host .content .right-side .follow-buttons dsv-button{--button-width: 100%;--button-font-size: .8rem;--button-font-weight: 400;--button-padding: 4px}:host .content .right-side .follow-buttons dsv-button a{display:flex;gap:5px;width:100%!important;color:var(--text)!important;border:0px!important;align-items:center;justify-content:center}:host .content .right-side .follow-buttons dsv-button.button-secondary a{color:var(--button-text)!important}@media screen and (max-width:800px){:host .content{flex-direction:column}:host .content .left-side{width:100%!important}:host .content .right-side{text-align:center;align-items:center;width:100%!important}:host .content .right-side>div{width:100%!important}:host .content .right-side p{text-align:center}:host .content .follow-buttons{width:100%}}:host .contact-projects{display:flex;flex-direction:row;gap:10px;margin:10px 5px 5px!important;width:calc(100% - 10px)!important}:host .contact-projects dsv-card{padding:5px!important;width:33%}:host .contact-projects h2{display:flex;gap:10px}:host .contact-projects .project-content{display:flex;gap:20px;align-items:center;margin-bottom:10px;flex:1}@media screen and (max-width:800px){:host .contact-projects{flex-direction:column}:host .contact-projects dsv-card{width:calc(100% - 15px)!important}}\n"] }]
|
|
17
|
+
args: [{ selector: 'dsv-contact', imports: [DsvCardComponent, DsvChipComponent, RouterExternalPipe, DsvButtonComponent, TranslatePipe], template: "<section class=\"contact-page\">\n <dsv-card>\n <div class=\"content\">\n <div class=\"left-side\">\n <img title=\"vagabond\" alt=\"vagabond\" src=\"/images/vagabond.png\" />\n <h2>vagabond</h2>\n <p>\n {{ 'CONTACT.DESCRIPTION' | translate }}\n <br />\n {{ 'CONTACT.DESCRIPTION2' | translate }}\n </p>\n <div class=\"chips\">\n <dsv-chip text=\"ANGULAR\" color=\"secondary\" />\n <dsv-chip text=\"QUARKUS\" color=\"secondary\" />\n <dsv-chip text=\"DOCKER\" color=\"secondary\" />\n <dsv-chip text=\"GIT\" color=\"secondary\" />\n </div>\n </div>\n <div class=\"right-side\">\n <div>\n <h2>{{ 'CONTACT.CONTACT_ME' | translate }}</h2>\n <p>\n {{ 'CONTACT.WRITE_TO_ME' | translate }}\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </p>\n </div>\n <div>\n <h2>{{ 'CONTACT.FOLLOW_ME' | translate }}</h2>\n <div class=\"follow-buttons\">\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://discord.com/invite/TUy5MtVRt7\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/discord.png\"\n />\n {{ 'CONTACT.DISCORD_BUTTON' | translate }}\n </a>\n </dsv-button>\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://github.com/vagabon\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/github.png\"\n />\n {{ 'CONTACT.GITHUB_BUTTON' | translate }}\n </a>\n </dsv-button>\n <dsv-button class=\"button-secondary\" color=\"secondary\">\n <a href=\"https://blog.vagabond.synology.me/\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/blog.png\"\n />\n {{ 'CONTACT.BLOG_BUTTON' | translate }}\n </a>\n </dsv-button>\n </div>\n </div>\n </div>\n </div>\n </dsv-card>\n</section>\n\n<section class=\"contact-projects\">\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-file-video-line\"></i>\n {{ 'CONTACT.PROJECTS.MK.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img title=\"logo Movie Keeper\" alt=\"logo Movie Keeper\" width=\"40px\" src=\"/images/icons/mk.png\" />\n <p>\n {{ 'CONTACT.PROJECTS.MK.DESCRIPTION' | translate }}\n </p>\n </div>\n <a href=\"https://movie-keeper.fr\" title=\"https://movie-keeper.fr\" dsvLinkExternal>\n https://movie-keeper.fr\n </a>\n </dsv-card>\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-news-line\"></i>\n {{ 'CONTACT.PROJECTS.BLOG.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/blog.png\"\n />\n <p>\n {{ 'CONTACT.PROJECTS.BLOG.DESCRIPTION' | translate }}<br />\n {{ 'CONTACT.PROJECTS.BLOG.DESCRIPTION2' | translate }}\n </p>\n </div>\n <a href=\"https://blog.vagabond.synology.me\" title=\"//blog.vagabond.synology.me\" dsvLinkExternal>\n https://blog.vagabond.synology.me\n </a>\n </dsv-card>\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-chat-1-line\"></i>\n {{ 'CONTACT.PROJECTS.OYC.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/oyc.png\"\n />\n <p>\n {{ 'CONTACT.PROJECTS.OYC.DESCRIPTION' | translate }}<br />\n {{ 'CONTACT.PROJECTS.OYC.DESCRIPTION2' | translate }}\n </p>\n </div>\n <a href=\"https://www.ownyourchatbots.com\" title=\"OwnYourChatbots\" dsvLinkExternal>\n https://www.ownyourchatbots.com\n </a>\n </dsv-card>\n</section>\n", styles: [":host{display:flex;flex-direction:column;flex:1}:host p{text-align:justify}:host .content{display:flex;margin:5px!important;width:calc(100% - 10px)!important}:host .content h2{font-size:1.5rem;font-weight:700!important;margin:10px 0!important}:host .content p{font-size:1.1rem}:host .content .left-side{width:50%;display:flex;flex-direction:column;align-items:center}:host .content .left-side img{width:200px;height:200px;border-radius:50%;border:3px solid var(--primary);padding:5px}:host .content .left-side p{text-align:center}:host .content .left-side .chips{margin:15px 0;display:flex;flex-wrap:wrap;gap:10px}:host .content .left-side .chips dsv-chip{--chip-padding: 10px;--chip-font-size: .9rem;--chip-font-weight: 550}:host .content .right-side{width:50%;display:flex;flex-direction:column;gap:20px}:host .content .right-side h2{margin-bottom:20px!important}:host .content .right-side .follow-buttons{display:flex;flex-direction:column;gap:10px;margin-top:30px}:host .content .right-side .follow-buttons dsv-button{--button-width: 100%;--button-font-size: .8rem;--button-font-weight: 400;--button-padding: 4px}:host .content .right-side .follow-buttons dsv-button a{display:flex;gap:5px;width:100%!important;color:var(--text)!important;border:0px!important;align-items:center;justify-content:center}:host .content .right-side .follow-buttons dsv-button.button-secondary a{color:var(--button-text)!important}@media screen and (max-width:800px){:host .content{flex-direction:column}:host .content .left-side{width:100%!important}:host .content .right-side{text-align:center;align-items:center;width:100%!important}:host .content .right-side>div{width:100%!important}:host .content .right-side p{text-align:center}:host .content .follow-buttons{width:100%}}:host .contact-projects{display:flex;flex-direction:row;gap:10px;margin:10px 5px 5px!important;width:calc(100% - 10px)!important}:host .contact-projects dsv-card{padding:5px!important;width:33%}:host .contact-projects h2{display:flex;gap:10px}:host .contact-projects .project-content{display:flex;gap:20px;align-items:center;margin-bottom:10px;flex:1}@media screen and (max-width:800px){:host .contact-projects{flex-direction:column}:host .contact-projects dsv-card{width:calc(100% - 15px)!important}}\n"] }]
|
|
18
18
|
}], propDecorators: { contactEmail: [{ type: i0.Input, args: [{ isSignal: true, alias: "contactEmail", required: false }] }] } });
|
|
19
19
|
|
|
20
20
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-vagabond-lab-ng-dsv-module-contact.mjs","sources":["../../../projects/ng-dsv/module/contact/component/contact.component.ts","../../../projects/ng-dsv/module/contact/component/contact.component.html","../../../projects/ng-dsv/module/contact/ng-vagabond-lab-ng-dsv-module-contact.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvCardComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { DsvChipComponent } from '@ng-vagabond-lab/ng-dsv/ds/chip';\nimport { RouterExternalPipe } from '@ng-vagabond-lab/ng-dsv/router';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n selector: 'dsv-contact',\n imports: [DsvCardComponent, DsvChipComponent, RouterExternalPipe, DsvButtonComponent, TranslatePipe],\n templateUrl: './contact.component.html',\n styleUrls: ['./contact.component.scss'],\n})\nexport class ContactComponent {\n readonly contactEmail = input<string>('vagabond.git@gmail.com');\n}\n","<section class=\"contact-page\">\n <dsv-card>\n <div class=\"content\">\n <div class=\"left-side\">\n <img title=\"vagabond\" alt=\"vagabond\" src=\"/images/vagabond.png\" />\n <h2>vagabond</h2>\n <p>\n {{ 'CONTACT.DESCRIPTION' | translate }}\n <br />\n {{ 'CONTACT.DESCRIPTION2' | translate }}\n </p>\n <div class=\"chips\">\n <dsv-chip text=\"ANGULAR\" color=\"secondary\" />\n <dsv-chip text=\"QUARKUS\" color=\"secondary\" />\n <dsv-chip text=\"DOCKER\" color=\"secondary\" />\n <dsv-chip text=\"GIT\" color=\"secondary\" />\n </div>\n </div>\n <div class=\"right-side\">\n <div>\n <h2>{{ 'CONTACT.CONTACT_ME' | translate }}</h2>\n <p>\n {{ 'CONTACT.WRITE_TO_ME' | translate }}\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </p>\n </div>\n <div>\n <h2>{{ 'CONTACT.FOLLOW_ME' | translate }}</h2>\n <div class=\"follow-buttons\">\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://discord.com/invite/TUy5MtVRt7\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/discord.png\"\n />\n {{ 'CONTACT.DISCORD_BUTTON' | translate }}\n </a>\n </dsv-button>\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://github.com/vagabon\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/github.png\"\n />\n {{ 'CONTACT.GITHUB_BUTTON' | translate }}\n </a>\n </dsv-button>\n <dsv-button class=\"button-secondary\" color=\"secondary\">\n <a href=\"https://blog.vagabond.synology.me/\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/blog.png\"\n />\n {{ 'CONTACT.BLOG_BUTTON' | translate }}\n </a>\n </dsv-button>\n </div>\n </div>\n </div>\n </div>\n </dsv-card>\n</section>\n\n<section class=\"contact-projects\">\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-file-video-line\"></i>\n {{ 'CONTACT.PROJECTS.MK.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img title=\"logo Movie Keeper\" alt=\"logo Movie Keeper\" width=\"40px\" src=\"/images/icons/mk.png\" />\n <p>\n {{ 'CONTACT.PROJECTS.MK.DESCRIPTION' | translate }}\n </p>\n </div>\n <a href=\"https://movie-keeper.fr\" title=\"https://movie-keeper.fr\" dsvLinkExternal>\n https://movie-keeper.fr\n </a>\n </dsv-card>\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-news-line\"></i>\n {{ 'CONTACT.PROJECTS.BLOG.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/blog.png\"\n />\n <p>\n {{ 'CONTACT.PROJECTS.BLOG.DESCRIPTION' | translate }}<br />\n {{ 'CONTACT.PROJECTS.BLOG.DESCRIPTION2' | translate }}\n </p>\n </div>\n <a href=\"https://blog.vagabond.synology.me\" title=\"//blog.vagabond.synology.me\" dsvLinkExternal>\n https://blog.vagabond.synology.me\n </a>\n </dsv-card>\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-chat-1-line\"></i>\n {{ 'CONTACT.PROJECTS.OYC.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/oyc.png\"\n />\n <p>\n {{ 'CONTACT.PROJECTS.OYC.DESCRIPTION' | translate }}<br />\n {{ 'CONTACT.PROJECTS.OYC.DESCRIPTION2' | translate }}\n </p>\n </div>\n <a href=\"https://www.ownyourchatbots.com\" title=\"OwnYourChatbots\" dsvLinkExternal>\n https://www.ownyourchatbots.com\n </a>\n </dsv-card>\n</section>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;MAaa,gBAAgB,CAAA;IAChB,YAAY,GAAG,KAAK,CAAS,wBAAwB;qFAAC;uGADtD,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECb7B,kpLAmIA,EAAA,MAAA,EAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"ng-vagabond-lab-ng-dsv-module-contact.mjs","sources":["../../../projects/ng-dsv/module/contact/component/contact.component.ts","../../../projects/ng-dsv/module/contact/component/contact.component.html","../../../projects/ng-dsv/module/contact/ng-vagabond-lab-ng-dsv-module-contact.ts"],"sourcesContent":["import { Component, input } from '@angular/core';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvCardComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { DsvChipComponent } from '@ng-vagabond-lab/ng-dsv/ds/chip';\nimport { RouterExternalPipe } from '@ng-vagabond-lab/ng-dsv/router';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n selector: 'dsv-contact',\n imports: [DsvCardComponent, DsvChipComponent, RouterExternalPipe, DsvButtonComponent, TranslatePipe],\n templateUrl: './contact.component.html',\n styleUrls: ['./contact.component.scss'],\n})\nexport class ContactComponent {\n readonly contactEmail = input<string>('vagabond.git@gmail.com');\n}\n","<section class=\"contact-page\">\n <dsv-card>\n <div class=\"content\">\n <div class=\"left-side\">\n <img title=\"vagabond\" alt=\"vagabond\" src=\"/images/vagabond.png\" />\n <h2>vagabond</h2>\n <p>\n {{ 'CONTACT.DESCRIPTION' | translate }}\n <br />\n {{ 'CONTACT.DESCRIPTION2' | translate }}\n </p>\n <div class=\"chips\">\n <dsv-chip text=\"ANGULAR\" color=\"secondary\" />\n <dsv-chip text=\"QUARKUS\" color=\"secondary\" />\n <dsv-chip text=\"DOCKER\" color=\"secondary\" />\n <dsv-chip text=\"GIT\" color=\"secondary\" />\n </div>\n </div>\n <div class=\"right-side\">\n <div>\n <h2>{{ 'CONTACT.CONTACT_ME' | translate }}</h2>\n <p>\n {{ 'CONTACT.WRITE_TO_ME' | translate }}\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </p>\n </div>\n <div>\n <h2>{{ 'CONTACT.FOLLOW_ME' | translate }}</h2>\n <div class=\"follow-buttons\">\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://discord.com/invite/TUy5MtVRt7\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/discord.png\"\n />\n {{ 'CONTACT.DISCORD_BUTTON' | translate }}\n </a>\n </dsv-button>\n <dsv-button variant=\"outlined\" color=\"default\">\n <a href=\"https://github.com/vagabon\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/github.png\"\n />\n {{ 'CONTACT.GITHUB_BUTTON' | translate }}\n </a>\n </dsv-button>\n <dsv-button class=\"button-secondary\" color=\"secondary\">\n <a href=\"https://blog.vagabond.synology.me/\" dsvLinkExternal>\n <img\n class=\"button-contact\"\n title=\"logo discord\"\n alt=\"logo discord\"\n width=\"20px\"\n src=\"/images/icons/blog.png\"\n />\n {{ 'CONTACT.BLOG_BUTTON' | translate }}\n </a>\n </dsv-button>\n </div>\n </div>\n </div>\n </div>\n </dsv-card>\n</section>\n\n<section class=\"contact-projects\">\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-file-video-line\"></i>\n {{ 'CONTACT.PROJECTS.MK.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img title=\"logo Movie Keeper\" alt=\"logo Movie Keeper\" width=\"40px\" src=\"/images/icons/mk.png\" />\n <p>\n {{ 'CONTACT.PROJECTS.MK.DESCRIPTION' | translate }}\n </p>\n </div>\n <a href=\"https://movie-keeper.fr\" title=\"https://movie-keeper.fr\" dsvLinkExternal>\n https://movie-keeper.fr\n </a>\n </dsv-card>\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-news-line\"></i>\n {{ 'CONTACT.PROJECTS.BLOG.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/blog.png\"\n />\n <p>\n {{ 'CONTACT.PROJECTS.BLOG.DESCRIPTION' | translate }}<br />\n {{ 'CONTACT.PROJECTS.BLOG.DESCRIPTION2' | translate }}\n </p>\n </div>\n <a href=\"https://blog.vagabond.synology.me\" title=\"//blog.vagabond.synology.me\" dsvLinkExternal>\n https://blog.vagabond.synology.me\n </a>\n </dsv-card>\n <dsv-card [border]=\"true\">\n <h2>\n <i class=\"ri-chat-1-line\"></i>\n {{ 'CONTACT.PROJECTS.OYC.TITLE' | translate }}\n </h2>\n <div class=\"project-content\">\n <img\n title=\"logo blog vagabond\"\n alt=\"logo blog vagabond\"\n width=\"40px\"\n src=\"/images/icons/oyc.png\"\n />\n <p>\n {{ 'CONTACT.PROJECTS.OYC.DESCRIPTION' | translate }}<br />\n {{ 'CONTACT.PROJECTS.OYC.DESCRIPTION2' | translate }}\n </p>\n </div>\n <a href=\"https://www.ownyourchatbots.com\" title=\"OwnYourChatbots\" dsvLinkExternal>\n https://www.ownyourchatbots.com\n </a>\n </dsv-card>\n</section>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;MAaa,gBAAgB,CAAA;IAChB,YAAY,GAAG,KAAK,CAAS,wBAAwB;qFAAC;uGADtD,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECb7B,kpLAmIA,EAAA,MAAA,EAAA,CAAA,0tEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1Hc,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,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,MAAA,EAAA,IAAA,EAAE,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAI1F,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAN5B,SAAS;+BACI,aAAa,EAAA,OAAA,EACd,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,aAAa,CAAC,EAAA,QAAA,EAAA,kpLAAA,EAAA,MAAA,EAAA,CAAA,0tEAAA,CAAA,EAAA;;;AETxG;;AAEG;;"}
|
|
@@ -6,7 +6,7 @@ import { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';
|
|
|
6
6
|
import { DsvCardComponent, DsvCardHeaderComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';
|
|
7
7
|
import { FileUploadContainer } from '@ng-vagabond-lab/ng-dsv/ds/file';
|
|
8
8
|
import { requiredTrim, DsvFormSignalComponent, DsvFormSignalInputComponent, DsvFormSignalCheckboxComponent } from '@ng-vagabond-lab/ng-dsv/ds/form/signal';
|
|
9
|
-
import { NewsContainer } from './ng-vagabond-lab-ng-dsv-module-news-news.container-
|
|
9
|
+
import { NewsContainer } from './ng-vagabond-lab-ng-dsv-module-news-news.container-BwGiY1xD.mjs';
|
|
10
10
|
|
|
11
11
|
class NewsFormContainer extends NewsContainer {
|
|
12
12
|
newsForm = form(signal(this.news()), (path) => {
|
|
@@ -61,4 +61,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
|
|
|
61
61
|
}], ctorParameters: () => [] });
|
|
62
62
|
|
|
63
63
|
export { NewsFormContainer };
|
|
64
|
-
//# sourceMappingURL=ng-vagabond-lab-ng-dsv-module-news-news-form.container-
|
|
64
|
+
//# sourceMappingURL=ng-vagabond-lab-ng-dsv-module-news-news-form.container-CsJcaZPZ.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-vagabond-lab-ng-dsv-module-news-news-form.container-
|
|
1
|
+
{"version":3,"file":"ng-vagabond-lab-ng-dsv-module-news-news-form.container-CsJcaZPZ.mjs","sources":["../../../projects/ng-dsv/module/news/container/form/news-form.container.ts","../../../projects/ng-dsv/module/news/container/form/news-form.container.html"],"sourcesContent":["import { Component, effect, signal } from '@angular/core';\nimport { form, required, validate } from '@angular/forms/signals';\nimport { RouterLink } from '@angular/router';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvCardComponent, DsvCardHeaderComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { FileUploadContainer } from '@ng-vagabond-lab/ng-dsv/ds/file';\nimport {\n DsvFormSignalCheckboxComponent,\n DsvFormSignalComponent,\n DsvFormSignalInputComponent,\n requiredTrim,\n} from '@ng-vagabond-lab/ng-dsv/ds/form/signal';\nimport { NewsDto } from '../../dto/news.dto';\nimport { NewsContainer } from '../news.container';\n\n@Component({\n selector: 'app-news-form',\n imports: [\n DsvCardComponent,\n DsvFormSignalComponent,\n DsvFormSignalInputComponent,\n DsvCardHeaderComponent,\n DsvButtonComponent,\n RouterLink,\n DsvFormSignalCheckboxComponent,\n FileUploadContainer,\n ],\n templateUrl: './news-form.container.html',\n styleUrl: './news-form.container.scss',\n})\nexport class NewsFormContainer extends NewsContainer {\n readonly newsForm = form(signal<NewsDto>(this.news()!), (path) => {\n required(path.title);\n required(path.resume);\n required(path.description);\n validate(path.title, requiredTrim);\n validate(path.resume, requiredTrim);\n validate(path.description, requiredTrim);\n });\n\n constructor() {\n super();\n effect(() => {\n if (this.news()) {\n this.newsForm().reset(this.news());\n } else {\n this.newsForm().reset({\n title: '',\n image: '',\n tags: '',\n resume: '',\n description: '',\n user: this.authService.userConnected()!,\n } as NewsDto);\n }\n });\n }\n\n doSubmit() {\n if (this.newsForm().valid()) {\n this.newsService.createOrUpdate(this.newsForm().value(), (data: NewsDto) => {\n this.routerService.router.navigate(['news', data.id]);\n document.getElementById('main-scroll')?.scrollTo(0, 0);\n });\n }\n }\n}\n","<dsv-card>\n <dsv-card-header>\n <dsv-button\n class=\"round\"\n icon=\"ri-arrow-left-s-line\"\n color=\"inherit\"\n [routerLink]=\"news()?.id ? '/news/' + news()?.id : '/news'\"\n />\n <h1>{{ news()?.id ? 'Modifier' : 'Créer' }} une news</h1>\n </dsv-card-header>\n <dsv-form-signal [form]=\"newsForm\" (callback)=\"doSubmit()\" (callbackBack)=\"routerService.goBack()\">\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"title\" />\n <dsv-file-upload-container\n [image]=\"newsForm().value().image\"\n directory=\"news\"\n (callback)=\"newsForm().value.update((news) => ({ ...news, image: $event }))\"\n />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"tags\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"resume\" type=\"textarea\" class=\"resume\" />\n <dsv-form-signal-input [form]=\"newsForm\" fieldName=\"description\" type=\"textarea\" />\n <dsv-form-signal-checkbox [form]=\"newsForm\" fieldName=\"active\" />\n </dsv-form-signal>\n</dsv-card>\n"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { computed, Component } from '@angular/core';
|
|
3
3
|
import { RouterLink } from '@angular/router';
|
|
4
4
|
import { BaseSearchContainer } from '@ng-vagabond-lab/ng-dsv/base';
|
|
5
5
|
import { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';
|
|
6
6
|
import { DsvCardComponent, DsvCardHeaderComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';
|
|
7
7
|
import { DsvFormReactiveSearchbarComponent } from '@ng-vagabond-lab/ng-dsv/ds/form/reactive';
|
|
8
8
|
import { DsvScrollInfiniteContainer } from '@ng-vagabond-lab/ng-dsv/ds/scroll';
|
|
9
|
-
import { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';
|
|
10
9
|
import { NewsCardResumeComponent } from './ng-vagabond-lab-ng-dsv-module-news.mjs';
|
|
11
10
|
import { N as NewsListService } from './ng-vagabond-lab-ng-dsv-module-news-news-list.service-Dxlmr1K9.mjs';
|
|
12
11
|
|
|
13
12
|
class NewsListContainer extends BaseSearchContainer {
|
|
14
13
|
newsListService;
|
|
15
|
-
|
|
16
|
-
isAdmin = computed(() => this.auhService.hasRole('ADMIN'), /* @ts-ignore */
|
|
14
|
+
isAdmin = computed(() => this.authService.hasRole('ADMIN'), /* @ts-ignore */
|
|
17
15
|
...(ngDevMode ? [{ debugName: "isAdmin" }] : /* istanbul ignore next */ []));
|
|
18
16
|
constructor(newsListService) {
|
|
19
17
|
super(newsListService);
|
|
@@ -21,7 +19,7 @@ class NewsListContainer extends BaseSearchContainer {
|
|
|
21
19
|
this.seoService.setMeta('Les dernières news', 'Retrouver les dernières news sur movie-keeper.fr', '/images/logo.png');
|
|
22
20
|
}
|
|
23
21
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: NewsListContainer, deps: [{ token: NewsListService }], target: i0.ɵɵFactoryTarget.Component });
|
|
24
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", 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"] }] });
|
|
22
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", 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;flex:1}: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
23
|
}
|
|
26
24
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: NewsListContainer, decorators: [{
|
|
27
25
|
type: Component,
|
|
@@ -33,8 +31,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
|
|
|
33
31
|
DsvButtonComponent,
|
|
34
32
|
DsvCardHeaderComponent,
|
|
35
33
|
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);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"] }]
|
|
34
|
+
], 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;flex:1}: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
35
|
}], ctorParameters: () => [{ type: NewsListService }] });
|
|
38
36
|
|
|
39
37
|
export { NewsListContainer };
|
|
40
|
-
//# sourceMappingURL=ng-vagabond-lab-ng-dsv-module-news-news-list.container-
|
|
38
|
+
//# sourceMappingURL=ng-vagabond-lab-ng-dsv-module-news-news-list.container-C5PC9y3P.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ng-vagabond-lab-ng-dsv-module-news-news-list.container-C5PC9y3P.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 } 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 { 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 isAdmin = computed<boolean>(() => this.authService.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":";;;;;;;;;;;AAyBM,MAAO,iBAAkB,SAAQ,mBAA6C,CAAA;AAG7D,IAAA,eAAA;AAFV,IAAA,OAAO,GAAG,QAAQ,CAAU,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;gFAAC;AAE7E,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;uGAVS,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,ECzB9B,i6CAwCA,EAAA,MAAA,EAAA,CAAA,0lBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED1BQ,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,0lBAAA,CAAA,EAAA;;;"}
|
|
@@ -3,7 +3,6 @@ import { input, Component, inject, Injectable, signal, computed, effect } from '
|
|
|
3
3
|
import { RouterLink } from '@angular/router';
|
|
4
4
|
import { BaseRouteContainer } from '@ng-vagabond-lab/ng-dsv/base';
|
|
5
5
|
import { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';
|
|
6
|
-
import { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';
|
|
7
6
|
import { DateFormatPipe } from '@ng-vagabond-lab/ng-dsv/date';
|
|
8
7
|
import { DsvCardComponent, DsvCardHeaderComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';
|
|
9
8
|
import { DsvFileShowComponent } from '@ng-vagabond-lab/ng-dsv/ds/file';
|
|
@@ -68,13 +67,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
|
|
|
68
67
|
}] });
|
|
69
68
|
|
|
70
69
|
class NewsContainer extends BaseRouteContainer {
|
|
71
|
-
auhService = inject(AuthService);
|
|
72
70
|
newsService = inject(NewsService);
|
|
73
71
|
newsId = signal(0, /* @ts-ignore */
|
|
74
72
|
...(ngDevMode ? [{ debugName: "newsId" }] : /* istanbul ignore next */ []));
|
|
75
73
|
news = signal(undefined, /* @ts-ignore */
|
|
76
74
|
...(ngDevMode ? [{ debugName: "news" }] : /* istanbul ignore next */ []));
|
|
77
|
-
isAdmin = computed(() => this.
|
|
75
|
+
isAdmin = computed(() => this.authService.hasRole('ADMIN'), /* @ts-ignore */
|
|
78
76
|
...(ngDevMode ? [{ debugName: "isAdmin" }] : /* istanbul ignore next */ []));
|
|
79
77
|
constructor() {
|
|
80
78
|
super();
|
|
@@ -105,12 +103,12 @@ class NewsContainer extends BaseRouteContainer {
|
|
|
105
103
|
});
|
|
106
104
|
}
|
|
107
105
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: NewsContainer, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
108
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: NewsContainer, isStandalone: true, selector: "app-news", usesInheritance: true, ngImport: i0, template: "<app-news-card [news]=\"news()\">\n <dsv-button\n class=\"update-button\"\n color=\"secondary\"\n variant=\"outlined\"\n icon=\"ri-share-line\"\n (callback)=\"doShare(news()!)\"\n />\n @if (isAdmin()) {\n <dsv-button\n class=\"update-button\"\n color=\"secondary\"\n variant=\"outlined\"\n icon=\"ri-tools-line\"\n [routerLink]=\"'/news/update/' + news()?.id\"\n />\n }\n</app-news-card>\n", styles: [":host{display:flex}\n"], dependencies: [{ kind: "component", type: NewsCardComponent, selector: "app-news-card", inputs: ["news"] }, { kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }] });
|
|
106
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.5", type: NewsContainer, isStandalone: true, selector: "app-news", usesInheritance: true, ngImport: i0, template: "<app-news-card [news]=\"news()\">\n <dsv-button\n class=\"update-button\"\n color=\"secondary\"\n variant=\"outlined\"\n icon=\"ri-share-line\"\n (callback)=\"doShare(news()!)\"\n />\n @if (isAdmin()) {\n <dsv-button\n class=\"update-button\"\n color=\"secondary\"\n variant=\"outlined\"\n icon=\"ri-tools-line\"\n [routerLink]=\"'/news/update/' + news()?.id\"\n />\n }\n</app-news-card>\n", styles: [":host{display:flex;flex:1}\n"], dependencies: [{ kind: "component", type: NewsCardComponent, selector: "app-news-card", inputs: ["news"] }, { kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }] });
|
|
109
107
|
}
|
|
110
108
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: NewsContainer, decorators: [{
|
|
111
109
|
type: Component,
|
|
112
|
-
args: [{ selector: 'app-news', imports: [NewsCardComponent, DsvButtonComponent, RouterLink], template: "<app-news-card [news]=\"news()\">\n <dsv-button\n class=\"update-button\"\n color=\"secondary\"\n variant=\"outlined\"\n icon=\"ri-share-line\"\n (callback)=\"doShare(news()!)\"\n />\n @if (isAdmin()) {\n <dsv-button\n class=\"update-button\"\n color=\"secondary\"\n variant=\"outlined\"\n icon=\"ri-tools-line\"\n [routerLink]=\"'/news/update/' + news()?.id\"\n />\n }\n</app-news-card>\n", styles: [":host{display:flex}\n"] }]
|
|
110
|
+
args: [{ selector: 'app-news', imports: [NewsCardComponent, DsvButtonComponent, RouterLink], template: "<app-news-card [news]=\"news()\">\n <dsv-button\n class=\"update-button\"\n color=\"secondary\"\n variant=\"outlined\"\n icon=\"ri-share-line\"\n (callback)=\"doShare(news()!)\"\n />\n @if (isAdmin()) {\n <dsv-button\n class=\"update-button\"\n color=\"secondary\"\n variant=\"outlined\"\n icon=\"ri-tools-line\"\n [routerLink]=\"'/news/update/' + news()?.id\"\n />\n }\n</app-news-card>\n", styles: [":host{display:flex;flex:1}\n"] }]
|
|
113
111
|
}], ctorParameters: () => [] });
|
|
114
112
|
|
|
115
113
|
export { NewsContainer };
|
|
116
|
-
//# sourceMappingURL=ng-vagabond-lab-ng-dsv-module-news-news.container-
|
|
114
|
+
//# sourceMappingURL=ng-vagabond-lab-ng-dsv-module-news-news.container-BwGiY1xD.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ng-vagabond-lab-ng-dsv-module-news-news.container-BwGiY1xD.mjs","sources":["../../../projects/ng-dsv/module/news/component/card/news-card.component.ts","../../../projects/ng-dsv/module/news/component/card/news-card.component.html","../../../projects/ng-dsv/module/news/service/news.service.ts","../../../projects/ng-dsv/module/news/container/news.container.ts","../../../projects/ng-dsv/module/news/container/news.container.html"],"sourcesContent":["import { Component, input } from '@angular/core';\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 { DsvCardComponent, DsvCardHeaderComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { DsvFileShowComponent } from '@ng-vagabond-lab/ng-dsv/ds/file';\nimport { DsvMarkdownContainer } from '@ng-vagabond-lab/ng-dsv/ds/markdown';\nimport { NewsDto } from '../../dto/news.dto';\n\n@Component({\n selector: 'app-news-card',\n imports: [\n DsvCardComponent,\n DateFormatPipe,\n DsvCardHeaderComponent,\n DsvButtonComponent,\n RouterLink,\n DsvFileShowComponent,\n DsvMarkdownContainer,\n ],\n templateUrl: './news-card.component.html',\n styleUrl: './news-card.component.scss',\n})\nexport class NewsCardComponent {\n readonly news = input<NewsDto>();\n}\n","<dsv-card>\n @if (news()?.image) {\n <dsv-file-show url=\"/api/\" [src]=\"news()?.image ?? ''\" />\n }\n <dsv-card-header>\n <dsv-button class=\"round\" icon=\"ri-arrow-left-s-line\" color=\"inherit\" routerLink=\"/news\" />\n <h1 [class.error]=\"!news()?.active\">{{ news()?.title }}</h1>\n <ng-content select=\".update-button\"></ng-content>\n </dsv-card-header>\n <span class=\"subtitle\">\n @if (news()?.creationDate) {\n Le {{ news()?.creationDate! | formatDate: true }}\n }\n </span>\n <dsv-markdown-container [data]=\"news()?.description\" />\n</dsv-card>\n","import { inject, Injectable } from '@angular/core';\nimport { ID } from '@ng-vagabond-lab/ng-dsv/api';\nimport { BaseFetchService } from '@ng-vagabond-lab/ng-dsv/base/service';\nimport { StoreMap } from '@ng-vagabond-lab/ng-dsv/storage';\nimport { NewsDto } from '../dto/news.dto';\nimport { NewsListService } from './list/news-list.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NewsService extends BaseFetchService<NewsDto> {\n readonly newsListService = inject(NewsListService);\n readonly news = new StoreMap<ID, NewsDto>();\n\n doFetchNews(newsId: number): void {\n const url = '/news/' + newsId;\n const data = this.getDataFromState(url);\n if (data) {\n this.initNews(newsId, data);\n return;\n }\n this.apiService.get<NewsDto>(url, (data) => {\n this.setDataToState(url, data);\n this.initNews(newsId, data);\n });\n }\n\n initNews(newsId: ID, data: NewsDto) {\n this.news.set(newsId, data);\n }\n\n createOrUpdate(news: NewsDto, callback?: (data: NewsDto) => void) {\n const toast = \"La news '\" + news.title + \"' a bien été \" + (news.id ? 'mise a jour' : 'créer') + '.';\n this.apiService.createOrUpdate<NewsDto>(\n 'news',\n news,\n (data) => {\n this.news.set(data.id, data);\n this.newsListService.fetchByPage(this.newsListService.search(), 1);\n callback?.(data);\n },\n toast,\n );\n }\n}\n","import { Component, computed, effect, inject, signal } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { BaseRouteContainer } from '@ng-vagabond-lab/ng-dsv/base';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { NewsCardComponent } from '../component/card/news-card.component';\nimport { NewsDto } from '../dto/news.dto';\nimport { NewsService } from '../service/news.service';\n\n@Component({\n selector: 'app-news',\n imports: [NewsCardComponent, DsvButtonComponent, RouterLink],\n templateUrl: './news.container.html',\n styleUrl: './news.container.scss',\n})\nexport class NewsContainer extends BaseRouteContainer {\n readonly newsService = inject(NewsService);\n\n readonly newsId = signal<number>(0);\n readonly news = signal<NewsDto | undefined>(undefined);\n\n readonly isAdmin = computed<boolean>(() => this.authService.hasRole('ADMIN'));\n\n constructor() {\n super();\n effect(() => {\n const newsId = Number(this.routeParams()?.['newsId']);\n if (Number.isInteger(newsId)) {\n this.newsId?.set(newsId);\n if (this.newsService.news.get(newsId)) {\n const news = this.newsService.news.get(newsId);\n this.seoService.setMeta(news?.title!, news?.resume!, news?.image);\n } else if (this.authService.canFetch()) {\n this.newsService.doFetchNews(newsId);\n }\n }\n });\n effect(() => {\n if (this.newsId() && this.newsService.news.data()) {\n this.news.set(this.newsService.news.get(this.newsId()));\n }\n });\n }\n\n async doShare(news: NewsDto): Promise<void> {\n await globalThis.navigator.share({\n title: news.title,\n text: news.resume,\n url: 'https://movie-keeper.fr/news/' + news.id,\n });\n }\n}\n","<app-news-card [news]=\"news()\">\n <dsv-button\n class=\"update-button\"\n color=\"secondary\"\n variant=\"outlined\"\n icon=\"ri-share-line\"\n (callback)=\"doShare(news()!)\"\n />\n @if (isAdmin()) {\n <dsv-button\n class=\"update-button\"\n color=\"secondary\"\n variant=\"outlined\"\n icon=\"ri-tools-line\"\n [routerLink]=\"'/news/update/' + news()?.id\"\n />\n }\n</app-news-card>\n"],"names":[],"mappings":"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"}
|
|
@@ -29,21 +29,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", 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-C5PC9y3P.mjs').then((m) => m.NewsListContainer),
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
path: 'create',
|
|
36
|
-
loadComponent: () => import('./ng-vagabond-lab-ng-dsv-module-news-news-form.container-
|
|
36
|
+
loadComponent: () => import('./ng-vagabond-lab-ng-dsv-module-news-news-form.container-CsJcaZPZ.mjs').then((m) => m.NewsFormContainer),
|
|
37
37
|
canActivate: [authGuard('ADMIN')],
|
|
38
38
|
},
|
|
39
39
|
{
|
|
40
40
|
path: 'update/:newsId',
|
|
41
|
-
loadComponent: () => import('./ng-vagabond-lab-ng-dsv-module-news-news-form.container-
|
|
41
|
+
loadComponent: () => import('./ng-vagabond-lab-ng-dsv-module-news-news-form.container-CsJcaZPZ.mjs').then((m) => m.NewsFormContainer),
|
|
42
42
|
canActivate: [authGuard('ADMIN')],
|
|
43
43
|
},
|
|
44
44
|
{
|
|
45
45
|
path: ':newsId',
|
|
46
|
-
loadComponent: () => import('./ng-vagabond-lab-ng-dsv-module-news-news.container-
|
|
46
|
+
loadComponent: () => import('./ng-vagabond-lab-ng-dsv-module-news-news.container-BwGiY1xD.mjs').then((m) => m.NewsContainer),
|
|
47
47
|
},
|
|
48
48
|
];
|
|
49
49
|
|
|
@@ -85,11 +85,11 @@ class AccessDeniedComponent {
|
|
|
85
85
|
contactEmail = input('vagabond.git@gmail.com', /* @ts-ignore */
|
|
86
86
|
...(ngDevMode ? [{ debugName: "contactEmail" }] : /* istanbul ignore next */ []));
|
|
87
87
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AccessDeniedComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
88
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.5", type: AccessDeniedComponent, isStandalone: true, selector: "lib-access-denied", inputs: { contactEmail: { classPropertyName: "contactEmail", publicName: "contactEmail", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>Access Denied</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n Vous n'avez pas les droits pour acceder \u00E0 cette page.\n </div>\n <div class=\"contact\">\n Pour me contacter, veuillez \u00E9crire \u00E0 l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button routerLink=\"/\" color=\"secondary\" variant=\"outlined\" [prevent]=\"false\"\n >page d'accueil</dsv-button\n >\n </div>\n</dsv-card>\n", styles: [":host{width:100
|
|
88
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.5", type: AccessDeniedComponent, isStandalone: true, selector: "lib-access-denied", inputs: { contactEmail: { classPropertyName: "contactEmail", publicName: "contactEmail", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>Access Denied</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n Vous n'avez pas les droits pour acceder \u00E0 cette page.\n </div>\n <div class=\"contact\">\n Pour me contacter, veuillez \u00E9crire \u00E0 l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button routerLink=\"/\" color=\"secondary\" variant=\"outlined\" [prevent]=\"false\"\n >page d'accueil</dsv-button\n >\n </div>\n</dsv-card>\n", styles: [":host{width:100%;flex:1}:host .dsv-card-content>div{margin:40px 0}:host .dsv-card-content .contact{margin:60px 0}:host .dsv-card-content dsv-button{display:flex;justify-content:center}\n"], dependencies: [{ kind: "component", type: DsvCardComponent, selector: "dsv-card", inputs: ["border"] }, { kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }] });
|
|
89
89
|
}
|
|
90
90
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: AccessDeniedComponent, decorators: [{
|
|
91
91
|
type: Component,
|
|
92
|
-
args: [{ selector: 'lib-access-denied', imports: [DsvCardComponent, DsvButtonComponent, RouterLink], template: "<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>Access Denied</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n Vous n'avez pas les droits pour acceder \u00E0 cette page.\n </div>\n <div class=\"contact\">\n Pour me contacter, veuillez \u00E9crire \u00E0 l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button routerLink=\"/\" color=\"secondary\" variant=\"outlined\" [prevent]=\"false\"\n >page d'accueil</dsv-button\n >\n </div>\n</dsv-card>\n", styles: [":host{width:100
|
|
92
|
+
args: [{ selector: 'lib-access-denied', imports: [DsvCardComponent, DsvButtonComponent, RouterLink], template: "<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>Access Denied</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n Vous n'avez pas les droits pour acceder \u00E0 cette page.\n </div>\n <div class=\"contact\">\n Pour me contacter, veuillez \u00E9crire \u00E0 l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button routerLink=\"/\" color=\"secondary\" variant=\"outlined\" [prevent]=\"false\"\n >page d'accueil</dsv-button\n >\n </div>\n</dsv-card>\n", styles: [":host{width:100%;flex:1}:host .dsv-card-content>div{margin:40px 0}:host .dsv-card-content .contact{margin:60px 0}:host .dsv-card-content dsv-button{display:flex;justify-content:center}\n"] }]
|
|
93
93
|
}], propDecorators: { contactEmail: [{ type: i0.Input, args: [{ isSignal: true, alias: "contactEmail", required: false }] }] } });
|
|
94
94
|
|
|
95
95
|
class FooterComponent {
|
|
@@ -113,11 +113,11 @@ class NotFoundComponent {
|
|
|
113
113
|
contactEmail = input('vagabond.git@gmail.com', /* @ts-ignore */
|
|
114
114
|
...(ngDevMode ? [{ debugName: "contactEmail" }] : /* istanbul ignore next */ []));
|
|
115
115
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: NotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
116
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.5", type: NotFoundComponent, isStandalone: true, selector: "app-not-found", inputs: { contactEmail: { classPropertyName: "contactEmail", publicName: "contactEmail", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>{{ 'NOT_FOUND_PAGE' | translate }}</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n {{ 'NOT_FOUND_PAGE_DESCRIPTION' | translate }}\n </div>\n <div class=\"contact\">\n {{ 'CONTACT_ME' | translate }}\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button\n routerLink=\"/\"\n color=\"secondary\"\n variant=\"outlined\"\n [prevent]=\"false\"\n libelle=\"BACK_TO_HOME\"\n />\n </div>\n</dsv-card>\n", styles: [":host{width:100
|
|
116
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.5", type: NotFoundComponent, isStandalone: true, selector: "app-not-found", inputs: { contactEmail: { classPropertyName: "contactEmail", publicName: "contactEmail", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>{{ 'NOT_FOUND_PAGE' | translate }}</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n {{ 'NOT_FOUND_PAGE_DESCRIPTION' | translate }}\n </div>\n <div class=\"contact\">\n {{ 'CONTACT_ME' | translate }}\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button\n routerLink=\"/\"\n color=\"secondary\"\n variant=\"outlined\"\n [prevent]=\"false\"\n libelle=\"BACK_TO_HOME\"\n />\n </div>\n</dsv-card>\n", styles: [":host{width:100%;flex:1}:host .dsv-card-content>div{margin:40px 0}:host .dsv-card-content .contact{margin:60px 0}:host .dsv-card-content dsv-button{display:flex;justify-content:center}\n"], dependencies: [{ kind: "component", type: DsvCardComponent, selector: "dsv-card", inputs: ["border"] }, { kind: "directive", type: RouterExternalPipe, selector: "a[dsvLinkExternal]", inputs: ["color"], outputs: ["dsvLinkExternal"] }, { kind: "component", type: DsvButtonComponent, selector: "dsv-button", inputs: ["libelle", "routerLink", "icon", "iconEnd", "disabled", "noHover", "type", "prevent"], outputs: ["callback"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] });
|
|
117
117
|
}
|
|
118
118
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImport: i0, type: NotFoundComponent, decorators: [{
|
|
119
119
|
type: Component,
|
|
120
|
-
args: [{ selector: 'app-not-found', imports: [DsvCardComponent, RouterExternalPipe, DsvButtonComponent, RouterLink, TranslatePipe], template: "<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>{{ 'NOT_FOUND_PAGE' | translate }}</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n {{ 'NOT_FOUND_PAGE_DESCRIPTION' | translate }}\n </div>\n <div class=\"contact\">\n {{ 'CONTACT_ME' | translate }}\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button\n routerLink=\"/\"\n color=\"secondary\"\n variant=\"outlined\"\n [prevent]=\"false\"\n libelle=\"BACK_TO_HOME\"\n />\n </div>\n</dsv-card>\n", styles: [":host{width:100
|
|
120
|
+
args: [{ selector: 'app-not-found', imports: [DsvCardComponent, RouterExternalPipe, DsvButtonComponent, RouterLink, TranslatePipe], template: "<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>{{ 'NOT_FOUND_PAGE' | translate }}</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n {{ 'NOT_FOUND_PAGE_DESCRIPTION' | translate }}\n </div>\n <div class=\"contact\">\n {{ 'CONTACT_ME' | translate }}\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button\n routerLink=\"/\"\n color=\"secondary\"\n variant=\"outlined\"\n [prevent]=\"false\"\n libelle=\"BACK_TO_HOME\"\n />\n </div>\n</dsv-card>\n", styles: [":host{width:100%;flex:1}:host .dsv-card-content>div{margin:40px 0}:host .dsv-card-content .contact{margin:60px 0}:host .dsv-card-content dsv-button{display:flex;justify-content:center}\n"] }]
|
|
121
121
|
}], propDecorators: { contactEmail: [{ type: i0.Input, args: [{ isSignal: true, alias: "contactEmail", required: false }] }] } });
|
|
122
122
|
|
|
123
123
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-vagabond-lab-ng-dsv-template.mjs","sources":["../../../projects/ng-dsv/template/menu/component/language/menu-language-form.component.ts","../../../projects/ng-dsv/template/menu/component/language/menu-language-form.component.html","../../../projects/ng-dsv/template/menu/slot/menu.slot.ts","../../../projects/ng-dsv/template/menu/container/menu.container.ts","../../../projects/ng-dsv/template/menu/container/menu.container.html","../../../projects/ng-dsv/template/access-denied/component/access-denied.component.ts","../../../projects/ng-dsv/template/access-denied/component/access-denied.component.html","../../../projects/ng-dsv/template/footer/component/footer.component.ts","../../../projects/ng-dsv/template/footer/component/footer.component.html","../../../projects/ng-dsv/template/not-found/component/not-found.component.ts","../../../projects/ng-dsv/template/not-found/component/not-found.component.html","../../../projects/ng-dsv/template/ng-vagabond-lab-ng-dsv-template.ts"],"sourcesContent":["import { Component, effect, input, output, signal } from '@angular/core';\nimport { form } from '@angular/forms/signals';\nimport { ApiDto } from '@ng-vagabond-lab/ng-dsv/api';\nimport { DsvFormSignalComponent, DsvFormSignalSelectComponent } from '@ng-vagabond-lab/ng-dsv/ds/form/signal';\nimport { MenuLanguageDto } from '../../dto/language/menu.language.dto';\n\n@Component({\n selector: 'dsv-menu-language-form',\n imports: [DsvFormSignalComponent, DsvFormSignalSelectComponent],\n templateUrl: './menu-language-form.component.html',\n styleUrl: './menu-language-form.component.scss',\n})\nexport class MenuLanguageFormComponent {\n readonly language = input<string>('');\n\n readonly callback = output<string>();\n\n readonly languageForm = form<MenuLanguageDto>(\n signal<MenuLanguageDto>({\n language: this.language(),\n }),\n );\n\n readonly languages: (ApiDto & { name: string })[] = [\n { id: 'fr', name: 'FR' },\n { id: 'en', name: 'EN' },\n ];\n\n constructor() {\n effect(() => {\n this.languageForm().reset({\n language: this.language(),\n });\n });\n }\n}\n","<dsv-form-signal [form]=\"languageForm\" textValid=\"\">\n <dsv-form-signal-select\n [withLabel]=\"false\"\n [form]=\"languageForm\"\n fieldName=\"language\"\n (callbackChange)=\"this.callback.emit($event)\"\n [list]=\"languages\"\n />\n</dsv-form-signal>\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n@Directive({ selector: '[menuSlot]', standalone: true })\nexport class MenuSlotDirective {\n readonly template = inject(TemplateRef);\n\n readonly menuSlot = input.required<string>();\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, contentChildren, inject, input, TemplateRef } from '@angular/core';\nimport { DsvItemComponent } from '@ng-vagabond-lab/ng-dsv/ds/item';\nimport { DsvMenuComponent, MenuService } from '@ng-vagabond-lab/ng-dsv/ds/menu';\nimport { DsvThemeSwitchComponent } from '@ng-vagabond-lab/ng-dsv/ds/theme';\nimport { I18nService } from '@ng-vagabond-lab/ng-dsv/i18n';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { MenuLanguageFormComponent } from '../component/language/menu-language-form.component';\nimport { MenuDto } from '../dto/menu.dto';\nimport { MenuSlotDirective } from '../slot/menu.slot';\n\n@Component({\n selector: 'app-menu-container',\n imports: [\n DsvMenuComponent,\n DsvItemComponent,\n NgTemplateOutlet,\n DsvThemeSwitchComponent,\n MenuLanguageFormComponent,\n ],\n templateUrl: './menu.container.html',\n styleUrls: ['./menu.container.scss'],\n})\nexport class MenuContainer {\n readonly authService = inject(AuthService);\n readonly routerService = inject(RouterService);\n readonly menuService = inject(MenuService);\n readonly i18nService = inject(I18nService);\n\n readonly slots = contentChildren(MenuSlotDirective);\n\n readonly menu = input<MenuDto>();\n\n getSlot(id: string): TemplateRef<any> | null {\n return this.slots()?.find((s) => s.menuSlot() === id)?.template ?? null;\n }\n\n isActive(url: string): boolean {\n return this.routerService.currentUrl().includes(url);\n }\n}\n","<dsv-menu>\n @for (item of menu()?.content; track item.url) {\n @if (!item.role || authService.hasRole(item.role)) {\n <dsv-item\n [icon]=\"item.icon\"\n [text]=\"item.text\"\n [url]=\"item.url\"\n [class.active]=\"isActive(item.url)\"\n (callback)=\"menuService.closeMenu()\"\n />\n <ng-container *ngTemplateOutlet=\"getSlot(item.id)\"></ng-container>\n }\n }\n\n <div class=\"footer\">\n <dsv-menu-language-form\n [language]=\"i18nService.currentLanguage()\"\n (callback)=\"i18nService.switchLanguage($event)\"\n />\n <dsv-theme-switch />\n </div>\n</dsv-menu>\n","import { Component, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvCardComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\n\n@Component({\n selector: 'lib-access-denied',\n imports: [DsvCardComponent, DsvButtonComponent, RouterLink],\n templateUrl: './access-denied.component.html',\n styleUrl: './access-denied.component.scss',\n})\nexport class AccessDeniedComponent {\n readonly contactEmail = input<string>('vagabond.git@gmail.com');\n}\n","<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>Access Denied</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n Vous n'avez pas les droits pour acceder à cette page.\n </div>\n <div class=\"contact\">\n Pour me contacter, veuillez écrire à l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button routerLink=\"/\" color=\"secondary\" variant=\"outlined\" [prevent]=\"false\"\n >page d'accueil</dsv-button\n >\n </div>\n</dsv-card>\n","import { Component, input } from '@angular/core';\nimport { RouterExternalPipe, RouterInternalPipe } from '@ng-vagabond-lab/ng-dsv/router';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-footer',\n imports: [RouterInternalPipe, RouterExternalPipe, TranslatePipe],\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.scss'],\n})\nexport class FooterComponent {\n readonly contactEmail = input<string>('vagabond.git@gmail.com');\n\n readonly copyright = input<string>();\n readonly withMentions = input<boolean>(true);\n readonly withX = input<boolean>(true);\n}\n","<footer>\n <hr />\n <ng-content />\n <div class=\"footer-content\">\n <div>\n <div>\n <strong>Mail : </strong>\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <div>\n <a href=\"/contact\" dsvLink>Contact</a>\n </div>\n @if (withMentions()) {\n <div>\n <a href=\"/mentions-legales\" dsvLink>{{ 'MENTIONS_LEGALES' | translate }}</a>\n </div>\n }\n </div>\n </div>\n <p class=\"copyright\">Copyright © 2026 {{ copyright() }}</p>\n</footer>\n","import { Component, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvCardComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { RouterExternalPipe } from '@ng-vagabond-lab/ng-dsv/router';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-not-found',\n imports: [DsvCardComponent, RouterExternalPipe, DsvButtonComponent, RouterLink, TranslatePipe],\n templateUrl: './not-found.component.html',\n styleUrls: ['./not-found.component.scss'],\n})\nexport class NotFoundComponent {\n readonly contactEmail = input<string>('vagabond.git@gmail.com');\n}\n","<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>{{ 'NOT_FOUND_PAGE' | translate }}</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n {{ 'NOT_FOUND_PAGE_DESCRIPTION' | translate }}\n </div>\n <div class=\"contact\">\n {{ 'CONTACT_ME' | translate }}\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button\n routerLink=\"/\"\n color=\"secondary\"\n variant=\"outlined\"\n [prevent]=\"false\"\n libelle=\"BACK_TO_HOME\"\n />\n </div>\n</dsv-card>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-vagabond-lab-ng-dsv-template.mjs","sources":["../../../projects/ng-dsv/template/menu/component/language/menu-language-form.component.ts","../../../projects/ng-dsv/template/menu/component/language/menu-language-form.component.html","../../../projects/ng-dsv/template/menu/slot/menu.slot.ts","../../../projects/ng-dsv/template/menu/container/menu.container.ts","../../../projects/ng-dsv/template/menu/container/menu.container.html","../../../projects/ng-dsv/template/access-denied/component/access-denied.component.ts","../../../projects/ng-dsv/template/access-denied/component/access-denied.component.html","../../../projects/ng-dsv/template/footer/component/footer.component.ts","../../../projects/ng-dsv/template/footer/component/footer.component.html","../../../projects/ng-dsv/template/not-found/component/not-found.component.ts","../../../projects/ng-dsv/template/not-found/component/not-found.component.html","../../../projects/ng-dsv/template/ng-vagabond-lab-ng-dsv-template.ts"],"sourcesContent":["import { Component, effect, input, output, signal } from '@angular/core';\nimport { form } from '@angular/forms/signals';\nimport { ApiDto } from '@ng-vagabond-lab/ng-dsv/api';\nimport { DsvFormSignalComponent, DsvFormSignalSelectComponent } from '@ng-vagabond-lab/ng-dsv/ds/form/signal';\nimport { MenuLanguageDto } from '../../dto/language/menu.language.dto';\n\n@Component({\n selector: 'dsv-menu-language-form',\n imports: [DsvFormSignalComponent, DsvFormSignalSelectComponent],\n templateUrl: './menu-language-form.component.html',\n styleUrl: './menu-language-form.component.scss',\n})\nexport class MenuLanguageFormComponent {\n readonly language = input<string>('');\n\n readonly callback = output<string>();\n\n readonly languageForm = form<MenuLanguageDto>(\n signal<MenuLanguageDto>({\n language: this.language(),\n }),\n );\n\n readonly languages: (ApiDto & { name: string })[] = [\n { id: 'fr', name: 'FR' },\n { id: 'en', name: 'EN' },\n ];\n\n constructor() {\n effect(() => {\n this.languageForm().reset({\n language: this.language(),\n });\n });\n }\n}\n","<dsv-form-signal [form]=\"languageForm\" textValid=\"\">\n <dsv-form-signal-select\n [withLabel]=\"false\"\n [form]=\"languageForm\"\n fieldName=\"language\"\n (callbackChange)=\"this.callback.emit($event)\"\n [list]=\"languages\"\n />\n</dsv-form-signal>\n","import { Directive, inject, input, TemplateRef } from '@angular/core';\n\n@Directive({ selector: '[menuSlot]', standalone: true })\nexport class MenuSlotDirective {\n readonly template = inject(TemplateRef);\n\n readonly menuSlot = input.required<string>();\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport { Component, contentChildren, inject, input, TemplateRef } from '@angular/core';\nimport { DsvItemComponent } from '@ng-vagabond-lab/ng-dsv/ds/item';\nimport { DsvMenuComponent, MenuService } from '@ng-vagabond-lab/ng-dsv/ds/menu';\nimport { DsvThemeSwitchComponent } from '@ng-vagabond-lab/ng-dsv/ds/theme';\nimport { I18nService } from '@ng-vagabond-lab/ng-dsv/i18n';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { RouterService } from '@ng-vagabond-lab/ng-dsv/router';\nimport { MenuLanguageFormComponent } from '../component/language/menu-language-form.component';\nimport { MenuDto } from '../dto/menu.dto';\nimport { MenuSlotDirective } from '../slot/menu.slot';\n\n@Component({\n selector: 'app-menu-container',\n imports: [\n DsvMenuComponent,\n DsvItemComponent,\n NgTemplateOutlet,\n DsvThemeSwitchComponent,\n MenuLanguageFormComponent,\n ],\n templateUrl: './menu.container.html',\n styleUrls: ['./menu.container.scss'],\n})\nexport class MenuContainer {\n readonly authService = inject(AuthService);\n readonly routerService = inject(RouterService);\n readonly menuService = inject(MenuService);\n readonly i18nService = inject(I18nService);\n\n readonly slots = contentChildren(MenuSlotDirective);\n\n readonly menu = input<MenuDto>();\n\n getSlot(id: string): TemplateRef<any> | null {\n return this.slots()?.find((s) => s.menuSlot() === id)?.template ?? null;\n }\n\n isActive(url: string): boolean {\n return this.routerService.currentUrl().includes(url);\n }\n}\n","<dsv-menu>\n @for (item of menu()?.content; track item.url) {\n @if (!item.role || authService.hasRole(item.role)) {\n <dsv-item\n [icon]=\"item.icon\"\n [text]=\"item.text\"\n [url]=\"item.url\"\n [class.active]=\"isActive(item.url)\"\n (callback)=\"menuService.closeMenu()\"\n />\n <ng-container *ngTemplateOutlet=\"getSlot(item.id)\"></ng-container>\n }\n }\n\n <div class=\"footer\">\n <dsv-menu-language-form\n [language]=\"i18nService.currentLanguage()\"\n (callback)=\"i18nService.switchLanguage($event)\"\n />\n <dsv-theme-switch />\n </div>\n</dsv-menu>\n","import { Component, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvCardComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\n\n@Component({\n selector: 'lib-access-denied',\n imports: [DsvCardComponent, DsvButtonComponent, RouterLink],\n templateUrl: './access-denied.component.html',\n styleUrl: './access-denied.component.scss',\n})\nexport class AccessDeniedComponent {\n readonly contactEmail = input<string>('vagabond.git@gmail.com');\n}\n","<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>Access Denied</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n Vous n'avez pas les droits pour acceder à cette page.\n </div>\n <div class=\"contact\">\n Pour me contacter, veuillez écrire à l'adresse mail suivante :\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button routerLink=\"/\" color=\"secondary\" variant=\"outlined\" [prevent]=\"false\"\n >page d'accueil</dsv-button\n >\n </div>\n</dsv-card>\n","import { Component, input } from '@angular/core';\nimport { RouterExternalPipe, RouterInternalPipe } from '@ng-vagabond-lab/ng-dsv/router';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-footer',\n imports: [RouterInternalPipe, RouterExternalPipe, TranslatePipe],\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.scss'],\n})\nexport class FooterComponent {\n readonly contactEmail = input<string>('vagabond.git@gmail.com');\n\n readonly copyright = input<string>();\n readonly withMentions = input<boolean>(true);\n readonly withX = input<boolean>(true);\n}\n","<footer>\n <hr />\n <ng-content />\n <div class=\"footer-content\">\n <div>\n <div>\n <strong>Mail : </strong>\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <div>\n <a href=\"/contact\" dsvLink>Contact</a>\n </div>\n @if (withMentions()) {\n <div>\n <a href=\"/mentions-legales\" dsvLink>{{ 'MENTIONS_LEGALES' | translate }}</a>\n </div>\n }\n </div>\n </div>\n <p class=\"copyright\">Copyright © 2026 {{ copyright() }}</p>\n</footer>\n","import { Component, input } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { DsvCardComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { RouterExternalPipe } from '@ng-vagabond-lab/ng-dsv/router';\nimport { TranslatePipe } from '@ngx-translate/core';\n\n@Component({\n selector: 'app-not-found',\n imports: [DsvCardComponent, RouterExternalPipe, DsvButtonComponent, RouterLink, TranslatePipe],\n templateUrl: './not-found.component.html',\n styleUrls: ['./not-found.component.scss'],\n})\nexport class NotFoundComponent {\n readonly contactEmail = input<string>('vagabond.git@gmail.com');\n}\n","<dsv-card>\n <div class=\"dsv-card-header\">\n <h2>{{ 'NOT_FOUND_PAGE' | translate }}</h2>\n </div>\n <div class=\"dsv-card-content\">\n <div class=\"flex error text gap10\">\n <i class=\"ri-information-line\"></i>\n {{ 'NOT_FOUND_PAGE_DESCRIPTION' | translate }}\n </div>\n <div class=\"contact\">\n {{ 'CONTACT_ME' | translate }}\n <a href=\"mailto:{{ contactEmail() }}\" dsvLinkExternal>{{ contactEmail() }}</a>\n </div>\n <dsv-button\n routerLink=\"/\"\n color=\"secondary\"\n variant=\"outlined\"\n [prevent]=\"false\"\n libelle=\"BACK_TO_HOME\"\n />\n </div>\n</dsv-card>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -102,9 +102,9 @@ declare class ApiService {
|
|
|
102
102
|
count: number;
|
|
103
103
|
}) => void): void;
|
|
104
104
|
createOrUpdate<T extends ApiDto>(endPoint: string, data: T, callback: (data: T) => void, toast?: string): void;
|
|
105
|
-
doSubscribe<T>(url: string, observable: Observable<T>, callback: (data: T) => void, callbackError?: () => void): void;
|
|
106
|
-
info(url: string,
|
|
107
|
-
error(url: string, error: JSONObject): void;
|
|
105
|
+
doSubscribe<T>(url: string, data: JSONObject | '', observable: Observable<T>, callback: (data: T) => void, callbackError?: () => void): void;
|
|
106
|
+
info(url: string, body: JSONObject | '', data?: JSONObject | null): void;
|
|
107
|
+
error(url: string, body: JSONObject | '', error: JSONObject): void;
|
|
108
108
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ApiService, never>;
|
|
109
109
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ApiService>;
|
|
110
110
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ng-vagabond-lab-ng-dsv-module-news-news-list.container-DByprYo-.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;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ng-vagabond-lab-ng-dsv-module-news-news.container-DuJFujh9.mjs","sources":["../../../projects/ng-dsv/module/news/component/card/news-card.component.ts","../../../projects/ng-dsv/module/news/component/card/news-card.component.html","../../../projects/ng-dsv/module/news/service/news.service.ts","../../../projects/ng-dsv/module/news/container/news.container.ts","../../../projects/ng-dsv/module/news/container/news.container.html"],"sourcesContent":["import { Component, input } from '@angular/core';\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 { DsvCardComponent, DsvCardHeaderComponent } from '@ng-vagabond-lab/ng-dsv/ds/card';\nimport { DsvFileShowComponent } from '@ng-vagabond-lab/ng-dsv/ds/file';\nimport { DsvMarkdownContainer } from '@ng-vagabond-lab/ng-dsv/ds/markdown';\nimport { NewsDto } from '../../dto/news.dto';\n\n@Component({\n selector: 'app-news-card',\n imports: [\n DsvCardComponent,\n DateFormatPipe,\n DsvCardHeaderComponent,\n DsvButtonComponent,\n RouterLink,\n DsvFileShowComponent,\n DsvMarkdownContainer,\n ],\n templateUrl: './news-card.component.html',\n styleUrl: './news-card.component.scss',\n})\nexport class NewsCardComponent {\n readonly news = input<NewsDto>();\n}\n","<dsv-card>\n @if (news()?.image) {\n <dsv-file-show url=\"/api/\" [src]=\"news()?.image ?? ''\" />\n }\n <dsv-card-header>\n <dsv-button class=\"round\" icon=\"ri-arrow-left-s-line\" color=\"inherit\" routerLink=\"/news\" />\n <h1 [class.error]=\"!news()?.active\">{{ news()?.title }}</h1>\n <ng-content select=\".update-button\"></ng-content>\n </dsv-card-header>\n <span class=\"subtitle\">\n @if (news()?.creationDate) {\n Le {{ news()?.creationDate! | formatDate: true }}\n }\n </span>\n <dsv-markdown-container [data]=\"news()?.description\" />\n</dsv-card>\n","import { inject, Injectable } from '@angular/core';\nimport { ID } from '@ng-vagabond-lab/ng-dsv/api';\nimport { BaseFetchService } from '@ng-vagabond-lab/ng-dsv/base/service';\nimport { StoreMap } from '@ng-vagabond-lab/ng-dsv/storage';\nimport { NewsDto } from '../dto/news.dto';\nimport { NewsListService } from './list/news-list.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NewsService extends BaseFetchService<NewsDto> {\n readonly newsListService = inject(NewsListService);\n readonly news = new StoreMap<ID, NewsDto>();\n\n doFetchNews(newsId: number): void {\n const url = '/news/' + newsId;\n const data = this.getDataFromState(url);\n if (data) {\n this.initNews(newsId, data);\n return;\n }\n this.apiService.get<NewsDto>(url, (data) => {\n this.setDataToState(url, data);\n this.initNews(newsId, data);\n });\n }\n\n initNews(newsId: ID, data: NewsDto) {\n this.news.set(newsId, data);\n }\n\n createOrUpdate(news: NewsDto, callback?: (data: NewsDto) => void) {\n const toast = \"La news '\" + news.title + \"' a bien été \" + (news.id ? 'mise a jour' : 'créer') + '.';\n this.apiService.createOrUpdate<NewsDto>(\n 'news',\n news,\n (data) => {\n this.news.set(data.id, data);\n this.newsListService.fetchByPage(this.newsListService.search(), 1);\n callback?.(data);\n },\n toast,\n );\n }\n}\n","import { Component, computed, effect, inject, signal } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { BaseRouteContainer } from '@ng-vagabond-lab/ng-dsv/base';\nimport { DsvButtonComponent } from '@ng-vagabond-lab/ng-dsv/ds/button';\nimport { AuthService } from '@ng-vagabond-lab/ng-dsv/module/auth';\nimport { NewsCardComponent } from '../component/card/news-card.component';\nimport { NewsDto } from '../dto/news.dto';\nimport { NewsService } from '../service/news.service';\n\n@Component({\n selector: 'app-news',\n imports: [NewsCardComponent, DsvButtonComponent, RouterLink],\n templateUrl: './news.container.html',\n styleUrl: './news.container.scss',\n})\nexport class NewsContainer extends BaseRouteContainer {\n readonly auhService = inject(AuthService);\n readonly newsService = inject(NewsService);\n\n readonly newsId = signal<number>(0);\n readonly news = signal<NewsDto | undefined>(undefined);\n\n readonly isAdmin = computed<boolean>(() => this.auhService.hasRole('ADMIN'));\n\n constructor() {\n super();\n effect(() => {\n const newsId = Number(this.routeParams()?.['newsId']);\n if (Number.isInteger(newsId)) {\n this.newsId?.set(newsId);\n if (this.newsService.news.get(newsId)) {\n const news = this.newsService.news.get(newsId);\n this.seoService.setMeta(news?.title!, news?.resume!, news?.image);\n } else if (this.authService.canFetch()) {\n this.newsService.doFetchNews(newsId);\n }\n }\n });\n effect(() => {\n if (this.newsId() && this.newsService.news.data()) {\n this.news.set(this.newsService.news.get(this.newsId()));\n }\n });\n }\n\n async doShare(news: NewsDto): Promise<void> {\n await globalThis.navigator.share({\n title: news.title,\n text: news.resume,\n url: 'https://movie-keeper.fr/news/' + news.id,\n });\n }\n}\n","<app-news-card [news]=\"news()\">\n <dsv-button\n class=\"update-button\"\n color=\"secondary\"\n variant=\"outlined\"\n icon=\"ri-share-line\"\n (callback)=\"doShare(news()!)\"\n />\n @if (isAdmin()) {\n <dsv-button\n class=\"update-button\"\n color=\"secondary\"\n variant=\"outlined\"\n icon=\"ri-tools-line\"\n [routerLink]=\"'/news/update/' + news()?.id\"\n />\n }\n</app-news-card>\n"],"names":[],"mappings":"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"}
|