@ldw-framework/material-media 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,6 +8,8 @@ import { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule, MatDialog } from '@angu
8
8
  import * as i2 from '@angular/material/icon';
9
9
  import { MatIconModule } from '@angular/material/icon';
10
10
  import { LDuAnguBootTranslationPipe } from '@ldu-anguboot/i18n';
11
+ import { LDuAnguBootApiService } from '@ldu-anguboot/http';
12
+ import { firstValueFrom } from 'rxjs';
11
13
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
12
14
  import * as i1$1 from '@angular/forms';
13
15
  import { FormGroup, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
@@ -15,20 +17,21 @@ import * as i3$1 from '@angular/material/form-field';
15
17
  import { MatFormFieldModule } from '@angular/material/form-field';
16
18
  import * as i4 from '@angular/material/input';
17
19
  import { MatInputModule } from '@angular/material/input';
18
- import { LDuAnguBootApiService } from '@ldu-anguboot/http';
19
- import { firstValueFrom } from 'rxjs';
20
20
 
21
21
  class LDwMaterialImageUploadDialogComponent {
22
22
  dialogRef = inject((MatDialogRef));
23
23
  data = inject(MAT_DIALOG_DATA);
24
24
  cdr = inject(ChangeDetectorRef);
25
+ ngOnInit() {
26
+ console.log(this.data);
27
+ }
25
28
  onSaveClick() {
26
29
  this.dialogRef.close(this.data);
27
30
  }
28
31
  onCancelClick() {
29
32
  this.dialogRef.close(false);
30
33
  }
31
- onChange($event) {
34
+ onFileChange($event) {
32
35
  const files = $event?.target?.files;
33
36
  if (files?.[0]) {
34
37
  const picture = files[0];
@@ -54,32 +57,34 @@ class LDwMaterialImageUploadDialogComponent {
54
57
  }
55
58
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: LDwMaterialImageUploadDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
56
59
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: LDwMaterialImageUploadDialogComponent, isStandalone: true, selector: "ldw-mat-image-upload-dialog", host: { classAttribute: "ldw-mat-image-upload-dialog" }, ngImport: i0, template: `
57
- <mat-dialog-actions>
58
- <h2>{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.title' | i18n }}</h2>
59
- <button class="ldw-mat-image-uploader-save"
60
- matButton
61
- cdkFocusInitial
62
- (click)="onSaveClick()"
63
- >{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.btnSave' | i18n }}</button>
64
- <button class="ldw-mat-image-uploader-cancel"
65
- matButton
66
- (click)="onCancelClick()"
67
- >{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.btnCancel' | i18n }}</button>
68
- </mat-dialog-actions>
60
+ <h2 mat-dialog-title>{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.title' | i18n }}</h2>
69
61
  <mat-dialog-content>
70
62
  <input class="ldw-mat-image-uploader-hidden-input"
71
63
  #uploader type="file"
72
64
  [style.display]="'none'"
73
- (change)="onChange($event)"
65
+ (change)="onFileChange($event)"
74
66
  />
75
67
  <div class="ldw-mat-image-uploader--instance"
76
68
  [style.backgroundImage]="$backgroundImage"
77
69
  (keypress)="uploader.click()"
78
70
  (click)="uploader.click()"
79
- >@if ($noData) { <mat-icon>image</mat-icon> }
71
+ >@if ($noData) {
72
+ <mat-icon>image</mat-icon> }
80
73
  </div>
81
74
  </mat-dialog-content>
82
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "pipe", type: LDuAnguBootTranslationPipe, name: "i18n" }] });
75
+ <mat-dialog-actions>
76
+ <button
77
+ class="ldw-mat-image-uploader-save"
78
+ matButton
79
+ cdkFocusInitial
80
+ (click)="onSaveClick()"
81
+ >{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.btnSave' | i18n }}</button>
82
+ <button class="ldw-mat-image-uploader-cancel"
83
+ matButton
84
+ (click)="onCancelClick()"
85
+ >{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.btnCancel' | i18n }}</button>
86
+ </mat-dialog-actions>
87
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "pipe", type: LDuAnguBootTranslationPipe, name: "i18n" }] });
83
88
  }
84
89
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: LDwMaterialImageUploadDialogComponent, decorators: [{
85
90
  type: Component,
@@ -94,31 +99,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
94
99
  LDuAnguBootTranslationPipe,
95
100
  ],
96
101
  template: `
97
- <mat-dialog-actions>
98
- <h2>{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.title' | i18n }}</h2>
99
- <button class="ldw-mat-image-uploader-save"
100
- matButton
101
- cdkFocusInitial
102
- (click)="onSaveClick()"
103
- >{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.btnSave' | i18n }}</button>
104
- <button class="ldw-mat-image-uploader-cancel"
105
- matButton
106
- (click)="onCancelClick()"
107
- >{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.btnCancel' | i18n }}</button>
108
- </mat-dialog-actions>
102
+ <h2 mat-dialog-title>{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.title' | i18n }}</h2>
109
103
  <mat-dialog-content>
110
104
  <input class="ldw-mat-image-uploader-hidden-input"
111
105
  #uploader type="file"
112
106
  [style.display]="'none'"
113
- (change)="onChange($event)"
107
+ (change)="onFileChange($event)"
114
108
  />
115
109
  <div class="ldw-mat-image-uploader--instance"
116
110
  [style.backgroundImage]="$backgroundImage"
117
111
  (keypress)="uploader.click()"
118
112
  (click)="uploader.click()"
119
- >@if ($noData) { <mat-icon>image</mat-icon> }
113
+ >@if ($noData) {
114
+ <mat-icon>image</mat-icon> }
120
115
  </div>
121
116
  </mat-dialog-content>
117
+ <mat-dialog-actions>
118
+ <button
119
+ class="ldw-mat-image-uploader-save"
120
+ matButton
121
+ cdkFocusInitial
122
+ (click)="onSaveClick()"
123
+ >{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.btnSave' | i18n }}</button>
124
+ <button class="ldw-mat-image-uploader-cancel"
125
+ matButton
126
+ (click)="onCancelClick()"
127
+ >{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.btnCancel' | i18n }}</button>
128
+ </mat-dialog-actions>
122
129
  `
123
130
  }]
124
131
  }] });
@@ -129,17 +136,20 @@ class LDwMaterialMediaService {
129
136
  MEDIA_API$ = inject(LDW_MAT_MEDIA_API);
130
137
  lduApiService$ = inject(LDuAnguBootApiService);
131
138
  matDialog$ = inject(MatDialog);
132
- async uploadImage(uploadUrl, type = 'jpg', data) {
133
- const media = await firstValueFrom(this.matDialog.open(LDwMaterialImageUploadDialogComponent, {
134
- height: 'calc(100% - 1rem)',
135
- width: 'calc(100% - 1rem)',
136
- maxHeight: '100%',
137
- maxWidth: '100%',
139
+ async uploadImage(uploadUrl, uploadConfig, type = 'jpg', data) {
140
+ const config = {
141
+ height: uploadConfig?.height ?? 'calc(100% - 1rem)',
142
+ width: uploadConfig?.width ?? 'calc(100% - 1rem)',
143
+ maxHeight: uploadConfig?.maxHeight ?? '100%',
144
+ maxWidth: uploadConfig?.maxWidth ?? '100%',
145
+ panelClass: 'ldw-mat-image-upload-dialog-panel',
138
146
  data: {
147
+ imgAlt: data?.imgAlt,
139
148
  imgSrc: data?.imgSrc,
140
149
  imgBase64: data?.imgBase64,
141
150
  },
142
- }).afterClosed());
151
+ };
152
+ const media = await firstValueFrom(this.matDialog.open(LDwMaterialImageUploadDialogComponent, config).afterClosed());
143
153
  if (media?.imgBase64) {
144
154
  const response = await firstValueFrom(this.apiService.PUT(uploadUrl, media));
145
155
  if (response?.id) {
@@ -155,8 +165,41 @@ class LDwMaterialMediaService {
155
165
  }
156
166
  return null;
157
167
  }
158
- async clearImage(api) {
159
- return firstValueFrom(this.apiService.DELETE(`${api}`));
168
+ async deleteImage(deleteUrl) {
169
+ return firstValueFrom(this.apiService.DELETE(`${deleteUrl}`));
170
+ }
171
+ async getGallery(galleryUrl) {
172
+ return firstValueFrom(this.apiService.GET(`${galleryUrl}`));
173
+ }
174
+ openGallery(galleryUrl, galleryConfig) {
175
+ const config = {
176
+ height: galleryConfig?.height ?? 'calc(100% - 1rem)',
177
+ width: galleryConfig?.width ?? 'calc(100% - 1rem)',
178
+ maxHeight: galleryConfig?.maxHeight ?? '100%',
179
+ maxWidth: galleryConfig?.maxWidth ?? '100%',
180
+ panelClass: 'ldw-mat-image-gallery-dialog-panel',
181
+ data: { galleryUrl },
182
+ };
183
+ return this.matDialog.open(LDwMaterialImageGalleryDialogComponent, config);
184
+ }
185
+ async uploadGallery(galleryUrl, imgBase64, type = 'jpg') {
186
+ if (imgBase64) {
187
+ const response = await firstValueFrom(this.apiService.PUT(galleryUrl, { imgBase64 }));
188
+ if (response?.id) {
189
+ switch (type) {
190
+ case 'jpg':
191
+ return this.apiService.url(`${this.ENV.url}/${response.id}.jpg?t=${Date.now()}`);
192
+ case 'png':
193
+ return this.apiService.url(`${this.ENV.url}/${response.id}.png?t=${Date.now()}`);
194
+ default:
195
+ break;
196
+ }
197
+ }
198
+ }
199
+ return null;
200
+ }
201
+ async deleteGallery(galleryUrl) {
202
+ return firstValueFrom(this.apiService.DELETE(`${galleryUrl}`));
160
203
  }
161
204
  get ENV() { return this.MEDIA_API$; }
162
205
  get apiService() { return this.lduApiService$; }
@@ -169,6 +212,150 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
169
212
  args: [{ providedIn: 'root' }]
170
213
  }] });
171
214
 
215
+ class LDwMaterialImageGalleryDialogComponent {
216
+ service = inject(LDwMaterialMediaService);
217
+ cdr = inject(ChangeDetectorRef);
218
+ dialogRef = inject((MatDialogRef));
219
+ data = inject(MAT_DIALOG_DATA);
220
+ gallery = [];
221
+ ngOnInit() {
222
+ this.load();
223
+ }
224
+ onSaveClick() {
225
+ this.dialogRef.close(true);
226
+ }
227
+ onCancelClick() {
228
+ this.dialogRef.close(false);
229
+ }
230
+ onFileChange($event) {
231
+ const files = $event?.target?.files;
232
+ if (files?.[0]) {
233
+ const picture = files[0];
234
+ const reader = new FileReader();
235
+ reader.readAsDataURL(picture);
236
+ reader.onload = () => {
237
+ const imgBase64 = reader.result.toString();
238
+ this.service.uploadGallery(this.data.galleryUrl, imgBase64).then(() => this.load());
239
+ };
240
+ }
241
+ }
242
+ onDeleteClick(id) {
243
+ this.service.deleteGallery(`${this.data.galleryUrl}/${id}`).then(() => this.load());
244
+ }
245
+ async load() {
246
+ const response = await this.service.getGallery(this.data.galleryUrl);
247
+ this.gallery = response;
248
+ this.cdr.detectChanges();
249
+ }
250
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: LDwMaterialImageGalleryDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
251
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: LDwMaterialImageGalleryDialogComponent, isStandalone: true, selector: "ldw-mat-image-gallery-dialog", host: { classAttribute: "ldw-mat-image-gallery-dialog" }, ngImport: i0, template: `
252
+ <h2 mat-dialog-title>{{ 'LDU_ANGUBOOT_IMG_GALLERY_DIALOG.title' | i18n }}</h2>
253
+ <mat-dialog-content>
254
+ <input class="ldw-mat-image-gallery-hidden-input"
255
+ #uploader type="file"
256
+ [style.display]="'none'"
257
+ (change)="onFileChange($event)"
258
+ />
259
+ <div class="ldw-mat-image-gallery--instance">
260
+ <div class="ldw-mat-image-gallery-item ldw-mat-image-gallery-item--upload">
261
+ <mat-icon
262
+ (keypress)="uploader.click()"
263
+ (click)="uploader.click()"
264
+ >add</mat-icon>
265
+ </div>
266
+ @for (image of gallery; track image.id)
267
+ {
268
+ <div class="ldw-mat-image-gallery-item">
269
+ <a [href]="image.imgSrc" target="_blank">
270
+ <img [src]="image.imgSrc" [alt]="image.imgAlt" />
271
+ </a>
272
+ <mat-icon
273
+ (keypress)="onDeleteClick(image.id)"
274
+ (click)="onDeleteClick(image.id)"
275
+ >delete</mat-icon>
276
+ </div>
277
+ }
278
+ @empty
279
+ {
280
+ <mat-icon>image</mat-icon>
281
+ }
282
+ </div>
283
+ </mat-dialog-content>
284
+ <mat-dialog-actions>
285
+ <button
286
+ class="ldw-mat-image-gallery-save"
287
+ matButton
288
+ (click)="onSaveClick()"
289
+ >{{ 'LDU_ANGUBOOT_IMG_GALLERY_DIALOG.btnSave' | i18n }}</button>
290
+ <button
291
+ class="ldw-mat-image-gallery-cancel"
292
+ matButton
293
+ (click)="onCancelClick()"
294
+ >{{ 'LDU_ANGUBOOT_IMG_GALLERY_DIALOG.btnCancel' | i18n }}</button>
295
+ </mat-dialog-actions>
296
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "pipe", type: LDuAnguBootTranslationPipe, name: "i18n" }] });
297
+ }
298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: LDwMaterialImageGalleryDialogComponent, decorators: [{
299
+ type: Component,
300
+ args: [{
301
+ selector: 'ldw-mat-image-gallery-dialog',
302
+ host: { class: 'ldw-mat-image-gallery-dialog' },
303
+ imports: [
304
+ CommonModule,
305
+ MatButtonModule,
306
+ MatIconModule,
307
+ MatDialogModule,
308
+ LDuAnguBootTranslationPipe,
309
+ ],
310
+ template: `
311
+ <h2 mat-dialog-title>{{ 'LDU_ANGUBOOT_IMG_GALLERY_DIALOG.title' | i18n }}</h2>
312
+ <mat-dialog-content>
313
+ <input class="ldw-mat-image-gallery-hidden-input"
314
+ #uploader type="file"
315
+ [style.display]="'none'"
316
+ (change)="onFileChange($event)"
317
+ />
318
+ <div class="ldw-mat-image-gallery--instance">
319
+ <div class="ldw-mat-image-gallery-item ldw-mat-image-gallery-item--upload">
320
+ <mat-icon
321
+ (keypress)="uploader.click()"
322
+ (click)="uploader.click()"
323
+ >add</mat-icon>
324
+ </div>
325
+ @for (image of gallery; track image.id)
326
+ {
327
+ <div class="ldw-mat-image-gallery-item">
328
+ <a [href]="image.imgSrc" target="_blank">
329
+ <img [src]="image.imgSrc" [alt]="image.imgAlt" />
330
+ </a>
331
+ <mat-icon
332
+ (keypress)="onDeleteClick(image.id)"
333
+ (click)="onDeleteClick(image.id)"
334
+ >delete</mat-icon>
335
+ </div>
336
+ }
337
+ @empty
338
+ {
339
+ <mat-icon>image</mat-icon>
340
+ }
341
+ </div>
342
+ </mat-dialog-content>
343
+ <mat-dialog-actions>
344
+ <button
345
+ class="ldw-mat-image-gallery-save"
346
+ matButton
347
+ (click)="onSaveClick()"
348
+ >{{ 'LDU_ANGUBOOT_IMG_GALLERY_DIALOG.btnSave' | i18n }}</button>
349
+ <button
350
+ class="ldw-mat-image-gallery-cancel"
351
+ matButton
352
+ (click)="onCancelClick()"
353
+ >{{ 'LDU_ANGUBOOT_IMG_GALLERY_DIALOG.btnCancel' | i18n }}</button>
354
+ </mat-dialog-actions>
355
+ `
356
+ }]
357
+ }] });
358
+
172
359
  class LDwMaterialImageUploaderComponent {
173
360
  service = inject(LDwMaterialMediaService);
174
361
  readonly$ = false;
@@ -195,7 +382,7 @@ class LDwMaterialImageUploaderComponent {
195
382
  }
196
383
  async onDeleteClick() {
197
384
  if (this.api) {
198
- await this.service.clearImage(this.api);
385
+ await this.service.deleteImage(this.api);
199
386
  }
200
387
  this.control.setValue(null);
201
388
  }
@@ -328,6 +515,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
328
515
  type: Input
329
516
  }] } });
330
517
 
518
+ const components$1 = [
519
+ LDwMaterialImageGalleryDialogComponent,
520
+ ];
521
+ class LDwMaterialImageGalleryModule {
522
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: LDwMaterialImageGalleryModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
523
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: LDwMaterialImageGalleryModule, imports: [LDwMaterialImageGalleryDialogComponent], exports: [LDwMaterialImageGalleryDialogComponent] });
524
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: LDwMaterialImageGalleryModule, imports: [components$1] });
525
+ }
526
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: LDwMaterialImageGalleryModule, decorators: [{
527
+ type: NgModule,
528
+ args: [{
529
+ imports: [...components$1],
530
+ exports: [...components$1]
531
+ }]
532
+ }] });
533
+
331
534
  const components = [
332
535
  LDwMaterialImageUploadDialogComponent,
333
536
  LDwMaterialImageUploaderComponent,
@@ -351,5 +554,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
351
554
  * Generated bundle index. Do not edit.
352
555
  */
353
556
 
354
- export { LDW_MAT_MEDIA_API, LDwMaterialImageUploadDialogComponent, LDwMaterialImageUploaderComponent, LDwMaterialImageUploaderModule, LDwMaterialMediaService };
557
+ export { LDW_MAT_MEDIA_API, LDwMaterialImageGalleryDialogComponent, LDwMaterialImageGalleryModule, LDwMaterialImageUploadDialogComponent, LDwMaterialImageUploaderComponent, LDwMaterialImageUploaderModule, LDwMaterialMediaService };
355
558
  //# sourceMappingURL=ldw-framework-material-media.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ldw-framework-material-media.mjs","sources":["../../../lib/src/components/ldw-mat-image-upload-dialog.component.ts","../../../lib/src/config/ldw-mat-media.config.ts","../../../lib/src/services/ldw-mat-media.service.ts","../../../lib/src/components/ldw-mat-image-uploader.component.ts","../../../lib/src/modules/ldw-mat-image-uploader.module.ts","../../../lib/src/ldw-framework-material-media.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { LDuAnguBootTranslationPipe } from '@ldu-anguboot/i18n';\nimport { LDwMaterialMediaModel } from '../models/ldw-mat-media.model';\n\n@Component({\n selector: 'ldw-mat-image-upload-dialog',\n host: { class: 'ldw-mat-image-upload-dialog' },\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatDialogModule,\n LDuAnguBootTranslationPipe,\n ],\n template: `\n <mat-dialog-actions>\n <h2>{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.title' | i18n }}</h2>\n <button class=\"ldw-mat-image-uploader-save\"\n matButton\n cdkFocusInitial\n (click)=\"onSaveClick()\"\n >{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.btnSave' | i18n }}</button>\n <button class=\"ldw-mat-image-uploader-cancel\"\n matButton\n (click)=\"onCancelClick()\"\n >{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.btnCancel' | i18n }}</button>\n </mat-dialog-actions>\n <mat-dialog-content>\n <input class=\"ldw-mat-image-uploader-hidden-input\"\n #uploader type=\"file\"\n [style.display]=\"'none'\"\n (change)=\"onChange($event)\"\n />\n <div class=\"ldw-mat-image-uploader--instance\"\n [style.backgroundImage]=\"$backgroundImage\"\n (keypress)=\"uploader.click()\"\n (click)=\"uploader.click()\"\n >@if ($noData) { <mat-icon>image</mat-icon> }\n </div>\n </mat-dialog-content>\n`})\nexport class LDwMaterialImageUploadDialogComponent {\n\n readonly dialogRef = inject(MatDialogRef<LDwMaterialImageUploadDialogComponent>);\n\n readonly data = inject<LDwMaterialMediaModel>(MAT_DIALOG_DATA);\n\n readonly cdr = inject(ChangeDetectorRef);\n\n onSaveClick() {\n this.dialogRef.close(this.data);\n }\n\n onCancelClick() {\n this.dialogRef.close(false);\n }\n\n onChange($event: any) {\n const files = $event?.target?.files;\n if (files?.[0]) {\n const picture = files[0];\n const reader = new FileReader();\n reader.readAsDataURL(picture);\n reader.onload = () => {\n this.data.imgBase64 = (reader.result as string).toString();\n this.cdr.detectChanges();\n };\n }\n }\n\n get $backgroundImage() {\n if (this.data.imgBase64) {\n return 'url(' + this.data.imgBase64 + ')';\n }\n if (this.data.imgSrc) {\n return 'url(' + this.data.imgSrc + ')';\n }\n return '';\n }\n\n get $noData() {\n return !this.data?.imgBase64 && !this.data?.imgSrc;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const LDW_MAT_MEDIA_API = new InjectionToken<{\n url: string;\n}>('LDW_MAT_MEDIA_API');\n","import { inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { LDuAnguBootApiService } from '@ldu-anguboot/http';\nimport { firstValueFrom } from 'rxjs';\nimport { LDwMaterialImageUploadDialogComponent } from '../components/ldw-mat-image-upload-dialog.component';\nimport { LDW_MAT_MEDIA_API } from '../config/ldw-mat-media.config';\nimport { LDwMaterialMediaModel } from '../models/ldw-mat-media.model';\n\n@Injectable({ providedIn: 'root' })\nexport class LDwMaterialMediaService {\n\n private readonly MEDIA_API$ = inject(LDW_MAT_MEDIA_API);\n\n private readonly lduApiService$ = inject(LDuAnguBootApiService);\n\n private readonly matDialog$ = inject(MatDialog);\n\n async uploadImage(uploadUrl: string, type: 'jpg' | 'png' = 'jpg', data?: LDwMaterialMediaModel) {\n const media = await firstValueFrom(this.matDialog.open(LDwMaterialImageUploadDialogComponent, {\n height: 'calc(100% - 1rem)',\n width: 'calc(100% - 1rem)',\n maxHeight: '100%',\n maxWidth: '100%',\n data: {\n imgSrc: data?.imgSrc,\n imgBase64: data?.imgBase64,\n },\n }).afterClosed());\n if (media?.imgBase64) {\n const response = await firstValueFrom(this.apiService.PUT<LDwMaterialMediaModel>(uploadUrl, media));\n if (response?.id) {\n switch (type) {\n case 'jpg':\n return this.apiService.url(`${this.ENV.url}/${response.id}.jpg?t=${Date.now()}`);\n case 'png':\n return this.apiService.url(`${this.ENV.url}/${response.id}.png?t=${Date.now()}`);\n default:\n break;\n }\n }\n }\n return null;\n }\n\n async clearImage(api: string) {\n return firstValueFrom(this.apiService.DELETE(`${api}`));\n }\n\n get ENV() { return this.MEDIA_API$; }\n\n get apiService() { return this.lduApiService$; }\n\n get matDialog() { return this.matDialog$; }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { LDwMaterialMediaService } from '../services/ldw-mat-media.service';\n\n@Component({\n selector: 'ldw-mat-image-uploader',\n host: { class: 'ldw-mat-image-uploader' },\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n ],\n template: `\n <form\n [formGroup]=\"formParent\"\n novalidate\n ><mat-form-field\n [appearance]=\"appearance\"\n ><mat-label\n [innerHTML]=\"label\" />\n <input matInput\n [name]=\"name\"\n [formControlName]=\"formParentControlName\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n />\n @if (dimensions)\n {\n <mat-hint>{{ dimensions }}.{{ type }}</mat-hint>\n }\n <div matSuffix>\n @if (control.value)\n {\n <a matIconButton\n [href]=\"control.value\"\n target=\"_blank\"\n ><mat-icon>visibility</mat-icon>\n </a>\n }\n <button matIconButton\n (click)=\"onUploadClick()\"\n ><mat-icon>add_photo_alternate</mat-icon>\n </button>\n <button matIconButton\n (click)=\"onDeleteClick()\"\n ><mat-icon>delete</mat-icon>\n </button>\n </div>\n <ng-content/>\n </mat-form-field>\n </form>\n`})\nexport class LDwMaterialImageUploaderComponent {\n\n protected readonly service = inject(LDwMaterialMediaService);\n\n protected readonly$: string | boolean = false;\n\n protected required$: string | boolean = false;\n\n @Input({ required: true })\n formParent: FormGroup = new FormGroup({\n value: new FormControl<string | null | undefined>(null, [])\n });\n\n @Input({ required: true })\n formParentControlName = 'value';\n\n @Input({ required: true })\n label = 'Value';\n\n @Input()\n appearance: 'fill' | 'outline' = 'outline';\n\n @Input()\n name = 'value';\n\n @Input()\n type: 'jpg' | 'png' = 'jpg';\n\n @Input()\n dimensions: string | null | undefined;\n\n @Input()\n api: string | null | undefined;\n\n @Input()\n set readonly(v) { this.readonly$ = coerceBooleanProperty(v); }\n\n @Input()\n set required(v) { this.required$ = coerceBooleanProperty(v); }\n\n async onUploadClick() {\n if (this.api) {\n const mediaUrl = await this.service.uploadImage(`${this.api}`);\n if (mediaUrl) {\n this.control.setValue(mediaUrl);\n }\n }\n }\n\n async onDeleteClick() {\n if (this.api) {\n await this.service.clearImage(this.api);\n }\n this.control.setValue(null);\n }\n\n get readonly() { return this.readonly$; };\n\n get required() { return this.required$; };\n\n get control() {\n return this.formParent?.get(this.formParentControlName) as FormControl<string | null | undefined>;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { LDwMaterialImageUploadDialogComponent } from '../components/ldw-mat-image-upload-dialog.component';\nimport { LDwMaterialImageUploaderComponent } from '../components/ldw-mat-image-uploader.component';\n\nconst components = [\n LDwMaterialImageUploadDialogComponent,\n LDwMaterialImageUploaderComponent,\n];\n\n@NgModule({\n imports: [...components],\n exports: [...components]\n})\nexport class LDwMaterialImageUploaderModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i5"],"mappings":"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"}
1
+ {"version":3,"file":"ldw-framework-material-media.mjs","sources":["../../../lib/src/components/ldw-mat-image-upload-dialog.component.ts","../../../lib/src/config/ldw-mat-media.config.ts","../../../lib/src/services/ldw-mat-media.service.ts","../../../lib/src/components/ldw-mat-image-gallery-dialog.component.ts","../../../lib/src/components/ldw-mat-image-uploader.component.ts","../../../lib/src/modules/ldw-mat-image-gallery.module.ts","../../../lib/src/modules/ldw-mat-image-uploader.module.ts","../../../lib/src/ldw-framework-material-media.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, inject } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { LDuAnguBootTranslationPipe } from '@ldu-anguboot/i18n';\nimport { LDwMaterialMediaModel } from '../models/ldw-mat-media.model';\n\n@Component({\n selector: 'ldw-mat-image-upload-dialog',\n host: { class: 'ldw-mat-image-upload-dialog' },\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatDialogModule,\n LDuAnguBootTranslationPipe,\n ],\n template: `\n <h2 mat-dialog-title>{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.title' | i18n }}</h2>\n <mat-dialog-content>\n <input class=\"ldw-mat-image-uploader-hidden-input\"\n #uploader type=\"file\"\n [style.display]=\"'none'\"\n (change)=\"onFileChange($event)\"\n />\n <div class=\"ldw-mat-image-uploader--instance\"\n [style.backgroundImage]=\"$backgroundImage\"\n (keypress)=\"uploader.click()\"\n (click)=\"uploader.click()\"\n >@if ($noData) {\n <mat-icon>image</mat-icon> }\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n class=\"ldw-mat-image-uploader-save\"\n matButton\n cdkFocusInitial\n (click)=\"onSaveClick()\"\n >{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.btnSave' | i18n }}</button>\n <button class=\"ldw-mat-image-uploader-cancel\"\n matButton\n (click)=\"onCancelClick()\"\n >{{ 'LDU_ANGUBOOT_IMG_UPLOAD_DIALOG.btnCancel' | i18n }}</button>\n </mat-dialog-actions>\n`})\nexport class LDwMaterialImageUploadDialogComponent {\n\n readonly dialogRef = inject(MatDialogRef<LDwMaterialImageUploadDialogComponent>);\n\n readonly data = inject<LDwMaterialMediaModel>(MAT_DIALOG_DATA);\n\n readonly cdr = inject(ChangeDetectorRef);\n\n ngOnInit() {\n console.log(this.data)\n }\n\n onSaveClick() {\n this.dialogRef.close(this.data);\n }\n\n onCancelClick() {\n this.dialogRef.close(false);\n }\n\n onFileChange($event: any) {\n const files = $event?.target?.files;\n if (files?.[0]) {\n const picture = files[0];\n const reader = new FileReader();\n reader.readAsDataURL(picture);\n reader.onload = () => {\n this.data.imgBase64 = (reader.result as string).toString();\n this.cdr.detectChanges();\n };\n }\n }\n\n get $backgroundImage() {\n if (this.data.imgBase64) {\n return 'url(' + this.data.imgBase64 + ')';\n }\n if (this.data.imgSrc) {\n return 'url(' + this.data.imgSrc + ')';\n }\n return '';\n }\n\n get $noData() {\n return !this.data?.imgBase64 && !this.data?.imgSrc;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const LDW_MAT_MEDIA_API = new InjectionToken<{\n url: string;\n}>('LDW_MAT_MEDIA_API');\n","import { inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { LDuAnguBootApiService } from '@ldu-anguboot/http';\nimport { firstValueFrom } from 'rxjs';\nimport { LDwMaterialImageGalleryDialogComponent } from '../components/ldw-mat-image-gallery-dialog.component';\nimport { LDwMaterialImageUploadDialogComponent } from '../components/ldw-mat-image-upload-dialog.component';\nimport { LDW_MAT_MEDIA_API } from '../config/ldw-mat-media.config';\nimport { LDwMaterialMediaModel } from '../models/ldw-mat-media.model';\n\n@Injectable({ providedIn: 'root' })\nexport class LDwMaterialMediaService {\n\n private readonly MEDIA_API$ = inject(LDW_MAT_MEDIA_API);\n\n private readonly lduApiService$ = inject(LDuAnguBootApiService);\n\n private readonly matDialog$ = inject(MatDialog);\n\n async uploadImage(uploadUrl: string, uploadConfig?: {\n height?: string;\n width?: string;\n maxHeight?: string;\n maxWidth?: string;\n }, type: 'jpg' | 'png' = 'jpg', data?: LDwMaterialMediaModel) {\n const config = {\n height: uploadConfig?.height ?? 'calc(100% - 1rem)',\n width: uploadConfig?.width ?? 'calc(100% - 1rem)',\n maxHeight: uploadConfig?.maxHeight ?? '100%',\n maxWidth: uploadConfig?.maxWidth ?? '100%',\n panelClass: 'ldw-mat-image-upload-dialog-panel',\n data: {\n imgAlt: data?.imgAlt,\n imgSrc: data?.imgSrc,\n imgBase64: data?.imgBase64,\n },\n };\n const media = await firstValueFrom(this.matDialog.open(LDwMaterialImageUploadDialogComponent, config).afterClosed());\n if (media?.imgBase64) {\n const response = await firstValueFrom(this.apiService.PUT<LDwMaterialMediaModel>(uploadUrl, media));\n if (response?.id) {\n switch (type) {\n case 'jpg':\n return this.apiService.url(`${this.ENV.url}/${response.id}.jpg?t=${Date.now()}`);\n case 'png':\n return this.apiService.url(`${this.ENV.url}/${response.id}.png?t=${Date.now()}`);\n default:\n break;\n }\n }\n }\n return null;\n }\n\n async deleteImage(deleteUrl: string) {\n return firstValueFrom(this.apiService.DELETE(`${deleteUrl}`));\n }\n\n async getGallery(galleryUrl: string) {\n return firstValueFrom(this.apiService.GET(`${galleryUrl}`));\n }\n\n openGallery(galleryUrl: string, galleryConfig?: {\n height?: string;\n width?: string;\n maxHeight?: string;\n maxWidth?: string;\n }) {\n const config = {\n height: galleryConfig?.height ?? 'calc(100% - 1rem)',\n width: galleryConfig?.width ?? 'calc(100% - 1rem)',\n maxHeight: galleryConfig?.maxHeight ?? '100%',\n maxWidth: galleryConfig?.maxWidth ?? '100%',\n panelClass: 'ldw-mat-image-gallery-dialog-panel',\n data: { galleryUrl },\n };\n return this.matDialog.open(LDwMaterialImageGalleryDialogComponent, config);\n }\n\n async uploadGallery(galleryUrl: string, imgBase64: string | null | undefined, type: 'jpg' | 'png' = 'jpg') {\n if (imgBase64) {\n const response = await firstValueFrom(this.apiService.PUT<LDwMaterialMediaModel>(galleryUrl, { imgBase64 }));\n if (response?.id) {\n switch (type) {\n case 'jpg':\n return this.apiService.url(`${this.ENV.url}/${response.id}.jpg?t=${Date.now()}`);\n case 'png':\n return this.apiService.url(`${this.ENV.url}/${response.id}.png?t=${Date.now()}`);\n default:\n break;\n }\n }\n }\n return null;\n }\n\n async deleteGallery(galleryUrl: string) {\n return firstValueFrom(this.apiService.DELETE(`${galleryUrl}`));\n }\n\n get ENV() { return this.MEDIA_API$; }\n\n get apiService() { return this.lduApiService$; }\n\n get matDialog() { return this.matDialog$; }\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, inject, OnInit } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { LDuAnguBootTranslationPipe } from '@ldu-anguboot/i18n';\nimport { LDwMaterialGalleryModel, LDwMaterialMediaModel } from '../models/ldw-mat-media.model';\nimport { LDwMaterialMediaService } from '../services/ldw-mat-media.service';\n\n@Component({\n selector: 'ldw-mat-image-gallery-dialog',\n host: { class: 'ldw-mat-image-gallery-dialog' },\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatDialogModule,\n LDuAnguBootTranslationPipe,\n ],\n template: `\n <h2 mat-dialog-title>{{ 'LDU_ANGUBOOT_IMG_GALLERY_DIALOG.title' | i18n }}</h2>\n <mat-dialog-content>\n <input class=\"ldw-mat-image-gallery-hidden-input\"\n #uploader type=\"file\"\n [style.display]=\"'none'\"\n (change)=\"onFileChange($event)\"\n />\n <div class=\"ldw-mat-image-gallery--instance\">\n <div class=\"ldw-mat-image-gallery-item ldw-mat-image-gallery-item--upload\">\n <mat-icon\n (keypress)=\"uploader.click()\"\n (click)=\"uploader.click()\"\n >add</mat-icon>\n </div>\n @for (image of gallery; track image.id)\n {\n <div class=\"ldw-mat-image-gallery-item\">\n <a [href]=\"image.imgSrc\" target=\"_blank\">\n <img [src]=\"image.imgSrc\" [alt]=\"image.imgAlt\" />\n </a>\n <mat-icon\n (keypress)=\"onDeleteClick(image.id)\"\n (click)=\"onDeleteClick(image.id)\"\n >delete</mat-icon>\n </div>\n }\n @empty\n {\n <mat-icon>image</mat-icon>\n }\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n class=\"ldw-mat-image-gallery-save\"\n matButton\n (click)=\"onSaveClick()\"\n >{{ 'LDU_ANGUBOOT_IMG_GALLERY_DIALOG.btnSave' | i18n }}</button>\n <button\n class=\"ldw-mat-image-gallery-cancel\"\n matButton\n (click)=\"onCancelClick()\"\n >{{ 'LDU_ANGUBOOT_IMG_GALLERY_DIALOG.btnCancel' | i18n }}</button>\n </mat-dialog-actions>\n`})\nexport class LDwMaterialImageGalleryDialogComponent implements OnInit {\n\n protected readonly service = inject(LDwMaterialMediaService);\n\n protected readonly cdr = inject(ChangeDetectorRef);\n\n readonly dialogRef = inject(MatDialogRef<LDwMaterialImageGalleryDialogComponent>);\n\n readonly data = inject<LDwMaterialGalleryModel>(MAT_DIALOG_DATA);\n\n gallery: LDwMaterialMediaModel[] = [];\n\n ngOnInit() {\n this.load();\n }\n\n onSaveClick() {\n this.dialogRef.close(true);\n }\n\n onCancelClick() {\n this.dialogRef.close(false);\n }\n\n onFileChange($event: any) {\n const files = $event?.target?.files;\n if (files?.[0]) {\n const picture = files[0];\n const reader = new FileReader();\n reader.readAsDataURL(picture);\n reader.onload = () => {\n const imgBase64 = (reader.result as string).toString();\n this.service.uploadGallery(this.data.galleryUrl, imgBase64).then(() => this.load());\n };\n }\n }\n\n onDeleteClick(id: number | null | undefined) {\n this.service.deleteGallery(`${this.data.galleryUrl}/${id}`).then(() => this.load());\n }\n\n protected async load() {\n const response = await this.service.getGallery(this.data.galleryUrl);\n this.gallery = response as LDwMaterialMediaModel[];\n this.cdr.detectChanges();\n }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { CommonModule } from '@angular/common';\nimport { Component, inject, Input } from '@angular/core';\nimport { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { LDwMaterialMediaService } from '../services/ldw-mat-media.service';\n\n@Component({\n selector: 'ldw-mat-image-uploader',\n host: { class: 'ldw-mat-image-uploader' },\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n ],\n template: `\n <form\n [formGroup]=\"formParent\"\n novalidate\n ><mat-form-field\n [appearance]=\"appearance\"\n ><mat-label\n [innerHTML]=\"label\" />\n <input matInput\n [name]=\"name\"\n [formControlName]=\"formParentControlName\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n />\n @if (dimensions)\n {\n <mat-hint>{{ dimensions }}.{{ type }}</mat-hint>\n }\n <div matSuffix>\n @if (control.value)\n {\n <a matIconButton\n [href]=\"control.value\"\n target=\"_blank\"\n ><mat-icon>visibility</mat-icon>\n </a>\n }\n <button matIconButton\n (click)=\"onUploadClick()\"\n ><mat-icon>add_photo_alternate</mat-icon>\n </button>\n <button matIconButton\n (click)=\"onDeleteClick()\"\n ><mat-icon>delete</mat-icon>\n </button>\n </div>\n <ng-content/>\n </mat-form-field>\n </form>\n`})\nexport class LDwMaterialImageUploaderComponent {\n\n protected readonly service = inject(LDwMaterialMediaService);\n\n protected readonly$: string | boolean = false;\n\n protected required$: string | boolean = false;\n\n @Input({ required: true })\n formParent: FormGroup = new FormGroup({\n value: new FormControl<string | null | undefined>(null, [])\n });\n\n @Input({ required: true })\n formParentControlName = 'value';\n\n @Input({ required: true })\n label = 'Value';\n\n @Input()\n appearance: 'fill' | 'outline' = 'outline';\n\n @Input()\n name = 'value';\n\n @Input()\n type: 'jpg' | 'png' = 'jpg';\n\n @Input()\n dimensions: string | null | undefined;\n\n @Input()\n api: string | null | undefined;\n\n @Input()\n set readonly(v) { this.readonly$ = coerceBooleanProperty(v); }\n\n @Input()\n set required(v) { this.required$ = coerceBooleanProperty(v); }\n\n async onUploadClick() {\n if (this.api) {\n const mediaUrl = await this.service.uploadImage(`${this.api}`);\n if (mediaUrl) {\n this.control.setValue(mediaUrl);\n }\n }\n }\n\n async onDeleteClick() {\n if (this.api) {\n await this.service.deleteImage(this.api);\n }\n this.control.setValue(null);\n }\n\n get readonly() { return this.readonly$; };\n\n get required() { return this.required$; };\n\n get control() {\n return this.formParent?.get(this.formParentControlName) as FormControl<string | null | undefined>;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { LDwMaterialImageGalleryDialogComponent } from '../components/ldw-mat-image-gallery-dialog.component';\n\nconst components = [\n LDwMaterialImageGalleryDialogComponent,\n];\n\n@NgModule({\n imports: [...components],\n exports: [...components]\n})\nexport class LDwMaterialImageGalleryModule { }\n","import { NgModule } from '@angular/core';\nimport { LDwMaterialImageUploadDialogComponent } from '../components/ldw-mat-image-upload-dialog.component';\nimport { LDwMaterialImageUploaderComponent } from '../components/ldw-mat-image-uploader.component';\n\nconst components = [\n LDwMaterialImageUploadDialogComponent,\n LDwMaterialImageUploaderComponent,\n];\n\n@NgModule({\n imports: [...components],\n exports: [...components]\n})\nexport class LDwMaterialImageUploaderModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i5","components"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ldw-framework/material-media",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^21.0.0",
6
6
  "@angular/common": "^21.0.0",
@@ -1,3 +1,15 @@
1
+ .ldw-mat-image-upload-dialog-panel,
2
+ .ldw-mat-image-gallery-dialog-panel {
3
+
4
+ .mat-mdc-dialog-surface {
5
+ border-radius: 0px !important;
6
+ }
7
+
8
+ .mat-mdc-dialog-content {
9
+ max-height: 100%;
10
+ }
11
+ }
12
+
1
13
  .ldw-mat-image-upload-dialog {
2
14
 
3
15
  .ldw-mat-image-uploader--instance {
@@ -27,16 +39,72 @@
27
39
  opacity: 0.925;
28
40
  }
29
41
  }
42
+ }
43
+
44
+ .ldw-mat-image-gallery-dialog {
30
45
 
31
- .mat-mdc-dialog-actions {
32
- h2 {
33
- margin-right: auto;
46
+ .ldw-mat-image-gallery--instance {
47
+ background-color: #eaeaea;
48
+ background-position: center;
49
+ background-repeat: no-repeat;
50
+ background-size: contain;
51
+ border-width: 1px;
52
+ border-style: dotted;
53
+ border-color: inherit;
54
+ height: calc(100% - 2px);
55
+ width: calc(100% - 2px);
56
+ position: relative;
57
+ display: flex;
58
+ flex-direction: row;
59
+ flex-wrap: wrap;
60
+ justify-content: center;
61
+ overflow: auto;
62
+
63
+ .ldw-mat-image-gallery-item {
64
+ position: relative;
65
+ width: calc(33% - 2rem);
66
+ height: calc(33% - 2rem);
67
+ margin: 1rem;
68
+
69
+ img {
70
+ width: 100%;
71
+ height: 100%;
72
+ }
73
+
74
+ mat-icon {
75
+ display: none;
76
+ position: absolute;
77
+ top: 1rem;
78
+ right: 1rem;
79
+ background-color: white;
80
+ border-radius: 50%;
81
+ padding: 1rem;
82
+ }
83
+
84
+ &:hover {
85
+ cursor: pointer;
86
+
87
+ img {
88
+ opacity: 0.5;
89
+ }
90
+
91
+ mat-icon {
92
+ display: block;
93
+ }
94
+ }
34
95
  }
35
- }
36
96
 
37
- .mat-mdc-dialog-content {
38
- max-height: 100%;
39
- padding-top: 0px !important;
40
- margin-bottom: 2rem;
97
+ .ldw-mat-image-gallery-item--upload {
98
+ background-color: white;
99
+
100
+ mat-icon {
101
+ display: block;
102
+ position: absolute;
103
+ top: 50%;
104
+ left: 50%;
105
+ transform: translate(-50%, -50%);
106
+ border-radius: 0;
107
+ }
108
+ }
41
109
  }
42
110
  }
@@ -1,34 +1,40 @@
1
1
  import * as i0 from '@angular/core';
2
- import { ChangeDetectorRef, InjectionToken } from '@angular/core';
3
- import { MatDialogRef, MatDialog } from '@angular/material/dialog';
4
- import { FormGroup, FormControl } from '@angular/forms';
2
+ import { OnInit, ChangeDetectorRef, InjectionToken } from '@angular/core';
3
+ import * as _angular_material_dialog from '@angular/material/dialog';
4
+ import { MatDialog, MatDialogRef } from '@angular/material/dialog';
5
5
  import { LDuAnguBootApiService } from '@ldu-anguboot/http';
6
+ import { FormGroup, FormControl } from '@angular/forms';
6
7
 
7
8
  interface LDwMaterialMediaModel {
8
9
  id?: number;
10
+ imgAlt?: string;
9
11
  imgSrc?: string;
10
12
  imgBase64?: string;
11
13
  }
12
-
13
- declare class LDwMaterialImageUploadDialogComponent {
14
- readonly dialogRef: MatDialogRef<any, any>;
15
- readonly data: LDwMaterialMediaModel;
16
- readonly cdr: ChangeDetectorRef;
17
- onSaveClick(): void;
18
- onCancelClick(): void;
19
- onChange($event: any): void;
20
- get $backgroundImage(): string;
21
- get $noData(): boolean;
22
- static ɵfac: i0.ɵɵFactoryDeclaration<LDwMaterialImageUploadDialogComponent, never>;
23
- static ɵcmp: i0.ɵɵComponentDeclaration<LDwMaterialImageUploadDialogComponent, "ldw-mat-image-upload-dialog", never, {}, {}, never, never, true, never>;
14
+ interface LDwMaterialGalleryModel {
15
+ galleryUrl: string;
24
16
  }
25
17
 
26
18
  declare class LDwMaterialMediaService {
27
19
  private readonly MEDIA_API$;
28
20
  private readonly lduApiService$;
29
21
  private readonly matDialog$;
30
- uploadImage(uploadUrl: string, type?: 'jpg' | 'png', data?: LDwMaterialMediaModel): Promise<string | null>;
31
- clearImage(api: string): Promise<unknown>;
22
+ uploadImage(uploadUrl: string, uploadConfig?: {
23
+ height?: string;
24
+ width?: string;
25
+ maxHeight?: string;
26
+ maxWidth?: string;
27
+ }, type?: 'jpg' | 'png', data?: LDwMaterialMediaModel): Promise<string | null>;
28
+ deleteImage(deleteUrl: string): Promise<unknown>;
29
+ getGallery(galleryUrl: string): Promise<unknown>;
30
+ openGallery(galleryUrl: string, galleryConfig?: {
31
+ height?: string;
32
+ width?: string;
33
+ maxHeight?: string;
34
+ maxWidth?: string;
35
+ }): _angular_material_dialog.MatDialogRef<LDwMaterialImageGalleryDialogComponent, any>;
36
+ uploadGallery(galleryUrl: string, imgBase64: string | null | undefined, type?: 'jpg' | 'png'): Promise<string | null>;
37
+ deleteGallery(galleryUrl: string): Promise<unknown>;
32
38
  get ENV(): {
33
39
  url: string;
34
40
  };
@@ -38,6 +44,36 @@ declare class LDwMaterialMediaService {
38
44
  static ɵprov: i0.ɵɵInjectableDeclaration<LDwMaterialMediaService>;
39
45
  }
40
46
 
47
+ declare class LDwMaterialImageGalleryDialogComponent implements OnInit {
48
+ protected readonly service: LDwMaterialMediaService;
49
+ protected readonly cdr: ChangeDetectorRef;
50
+ readonly dialogRef: MatDialogRef<any, any>;
51
+ readonly data: LDwMaterialGalleryModel;
52
+ gallery: LDwMaterialMediaModel[];
53
+ ngOnInit(): void;
54
+ onSaveClick(): void;
55
+ onCancelClick(): void;
56
+ onFileChange($event: any): void;
57
+ onDeleteClick(id: number | null | undefined): void;
58
+ protected load(): Promise<void>;
59
+ static ɵfac: i0.ɵɵFactoryDeclaration<LDwMaterialImageGalleryDialogComponent, never>;
60
+ static ɵcmp: i0.ɵɵComponentDeclaration<LDwMaterialImageGalleryDialogComponent, "ldw-mat-image-gallery-dialog", never, {}, {}, never, never, true, never>;
61
+ }
62
+
63
+ declare class LDwMaterialImageUploadDialogComponent {
64
+ readonly dialogRef: MatDialogRef<any, any>;
65
+ readonly data: LDwMaterialMediaModel;
66
+ readonly cdr: ChangeDetectorRef;
67
+ ngOnInit(): void;
68
+ onSaveClick(): void;
69
+ onCancelClick(): void;
70
+ onFileChange($event: any): void;
71
+ get $backgroundImage(): string;
72
+ get $noData(): boolean;
73
+ static ɵfac: i0.ɵɵFactoryDeclaration<LDwMaterialImageUploadDialogComponent, never>;
74
+ static ɵcmp: i0.ɵɵComponentDeclaration<LDwMaterialImageUploadDialogComponent, "ldw-mat-image-upload-dialog", never, {}, {}, never, never, true, never>;
75
+ }
76
+
41
77
  declare class LDwMaterialImageUploaderComponent {
42
78
  protected readonly service: LDwMaterialMediaService;
43
79
  protected readonly$: string | boolean;
@@ -65,11 +101,17 @@ declare const LDW_MAT_MEDIA_API: InjectionToken<{
65
101
  url: string;
66
102
  }>;
67
103
 
104
+ declare class LDwMaterialImageGalleryModule {
105
+ static ɵfac: i0.ɵɵFactoryDeclaration<LDwMaterialImageGalleryModule, never>;
106
+ static ɵmod: i0.ɵɵNgModuleDeclaration<LDwMaterialImageGalleryModule, never, [typeof LDwMaterialImageGalleryDialogComponent], [typeof LDwMaterialImageGalleryDialogComponent]>;
107
+ static ɵinj: i0.ɵɵInjectorDeclaration<LDwMaterialImageGalleryModule>;
108
+ }
109
+
68
110
  declare class LDwMaterialImageUploaderModule {
69
111
  static ɵfac: i0.ɵɵFactoryDeclaration<LDwMaterialImageUploaderModule, never>;
70
112
  static ɵmod: i0.ɵɵNgModuleDeclaration<LDwMaterialImageUploaderModule, never, [typeof LDwMaterialImageUploadDialogComponent, typeof LDwMaterialImageUploaderComponent], [typeof LDwMaterialImageUploadDialogComponent, typeof LDwMaterialImageUploaderComponent]>;
71
113
  static ɵinj: i0.ɵɵInjectorDeclaration<LDwMaterialImageUploaderModule>;
72
114
  }
73
115
 
74
- export { LDW_MAT_MEDIA_API, LDwMaterialImageUploadDialogComponent, LDwMaterialImageUploaderComponent, LDwMaterialImageUploaderModule, LDwMaterialMediaService };
75
- export type { LDwMaterialMediaModel };
116
+ export { LDW_MAT_MEDIA_API, LDwMaterialImageGalleryDialogComponent, LDwMaterialImageGalleryModule, LDwMaterialImageUploadDialogComponent, LDwMaterialImageUploaderComponent, LDwMaterialImageUploaderModule, LDwMaterialMediaService };
117
+ export type { LDwMaterialGalleryModel, LDwMaterialMediaModel };