Skip to content

Commit 4013933

Browse files
committed
feat: SetPictureStatus via gRPC
1 parent 31919ab commit 4013933

File tree

6 files changed

+271
-46
lines changed

6 files changed

+271
-46
lines changed

src/app/moder/pictures/item/item.component.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -414,10 +414,10 @@ <h3 i18n>Status/Delete/Accept</h3>
414414
<strong class="badge text-bg-warning text-dark" i18n>Not accepted</strong>
415415
</p>
416416
@if (picture.rights.accept) {
417-
<button class="btn btn-success" (click)="acceptPicture(picture.id)" i18n>Accept</button>
417+
<button class="btn btn-success" (click)="acceptPicture(picture.id + '')" i18n>Accept</button>
418418
}
419419
@if (picture.rights.delete) {
420-
<button class="btn btn-danger" (click)="deletePicture(picture.id)" i18n>Delete</button>
420+
<button class="btn btn-danger" (click)="deletePicture(picture.id + '')" i18n>Delete</button>
421421
}
422422
</div>
423423
} @else if (picture.status === 'accepted') {
@@ -426,7 +426,7 @@ <h3 i18n>Status/Delete/Accept</h3>
426426
<strong class="badge text-bg-success" i18n>Accepted</strong>
427427
</p>
428428
@if (picture.rights.unaccept) {
429-
<button class="btn btn-warning" (click)="unacceptPicture(picture.id)" i18n>Unaccept</button>
429+
<button class="btn btn-warning" (click)="unacceptPicture(picture.id + '')" i18n>Unaccept</button>
430430
}
431431
</div>
432432
} @else if (picture.status === 'removing') {
@@ -435,7 +435,7 @@ <h3 i18n>Status/Delete/Accept</h3>
435435
<strong class="badge text-bg-danger" i18n>In delete queue</strong>
436436
</p>
437437
@if (picture.rights.restore) {
438-
<button class="btn btn-warning" (click)="restorePicture(picture.id)" i18n>Restore</button>
438+
<button class="btn btn-warning" (click)="restorePicture(picture.id + '')" i18n>Restore</button>
439439
}
440440
</div>
441441
} @else if (picture.status === 'removed') {

src/app/moder/pictures/item/item.component.ts

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {ActivatedRoute, Router} from '@angular/router';
33
import {Date as grpcDate} from '@grpc/google/type/date.pb';
44
import {
55
APIIP,
6+
APIItem,
67
APIUser,
78
CreatePictureItemRequest,
89
DeletePictureItemRequest,
@@ -11,12 +12,13 @@ import {
1112
ItemRequest,
1213
ItemType,
1314
PictureIDRequest,
15+
PictureStatus,
1416
SetPictureCopyrightsRequest,
1517
SetPictureItemItemIDRequest,
1618
SetPictureItemPerspectiveRequest,
19+
SetPictureStatusRequest,
1720
UpdatePictureRequest,
1821
} from '@grpc/spec.pb';
19-
import {APIItem} from '@grpc/spec.pb';
2022
import {ItemsClient, PicturesClient} from '@grpc/spec.pbsc';
2123
import {GrpcStatusEvent} from '@ngx-grpc/common';
2224
import {APIService} from '@services/api.service';
@@ -364,33 +366,41 @@ export class ModerPicturesItemComponent {
364366
});
365367
}
366368

367-
private setPictureStatus(id: number, status: string) {
369+
private setPictureStatus(id: string, status: PictureStatus) {
368370
this.statusLoading = true;
369-
this.pictureService.setPictureStatus$(id, status).subscribe({
370-
error: () => {
371-
this.statusLoading = false;
372-
},
373-
next: () => {
374-
this.change$.next();
375-
this.statusLoading = false;
376-
},
377-
});
371+
this.picturesClient
372+
.setPictureStatus(new SetPictureStatusRequest({id, status}))
373+
.pipe(
374+
catchError((err: unknown) => {
375+
this.toastService.handleError(err);
376+
return EMPTY;
377+
}),
378+
)
379+
.subscribe({
380+
error: () => {
381+
this.statusLoading = false;
382+
},
383+
next: () => {
384+
this.change$.next();
385+
this.statusLoading = false;
386+
},
387+
});
378388
}
379389

380-
protected unacceptPicture(id: number) {
381-
this.setPictureStatus(id, 'inbox');
390+
protected unacceptPicture(id: string) {
391+
this.setPictureStatus(id, PictureStatus.PICTURE_STATUS_INBOX);
382392
}
383393

384-
protected acceptPicture(id: number) {
385-
this.setPictureStatus(id, 'accepted');
394+
protected acceptPicture(id: string) {
395+
this.setPictureStatus(id, PictureStatus.PICTURE_STATUS_ACCEPTED);
386396
}
387397

388-
protected deletePicture(id: number) {
389-
this.setPictureStatus(id, 'removing');
398+
protected deletePicture(id: string) {
399+
this.setPictureStatus(id, PictureStatus.PICTURE_STATUS_REMOVING);
390400
}
391401

392-
protected restorePicture(id: number) {
393-
this.setPictureStatus(id, 'inbox');
402+
protected restorePicture(id: string) {
403+
this.setPictureStatus(id, PictureStatus.PICTURE_STATUS_INBOX);
394404
}
395405

396406
protected normalizePicture(id: string) {

src/app/moder/pictures/pictures.component.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ import {
77
APIUsersRequest,
88
ItemFields,
99
ListItemsRequest,
10+
PictureStatus,
11+
SetPictureStatusRequest,
1012
VehicleType,
1113
} from '@grpc/spec.pb';
12-
import {ItemsClient, UsersClient} from '@grpc/spec.pbsc';
14+
import {ItemsClient, PicturesClient, UsersClient} from '@grpc/spec.pbsc';
1315
import {NgbTypeaheadSelectItemEvent} from '@ng-bootstrap/ng-bootstrap';
1416
import {Empty} from '@ngx-grpc/well-known-types';
15-
import {APIPaginator, APIService} from '@services/api.service';
17+
import {APIPaginator} from '@services/api.service';
1618
import {LanguageService} from '@services/language';
1719
import {PageEnvService} from '@services/page-env.service';
1820
import {APIGetPicturesOptions, APIPicture, PictureService} from '@services/picture';
@@ -426,7 +428,6 @@ export class ModerPicturesComponent implements OnInit, OnDestroy {
426428
protected readonly moderVoteTemplateOptions$ = this.moderVoteTemplateService.getTemplates$().pipe(shareReplay(1));
427429

428430
constructor(
429-
private readonly api: APIService,
430431
private readonly perspectiveService: APIPerspectiveService,
431432
private readonly moderVoteService: PictureModerVoteService,
432433
private readonly vehicleTypeService: VehicleTypeService,
@@ -439,6 +440,7 @@ export class ModerPicturesComponent implements OnInit, OnDestroy {
439440
private readonly itemsClient: ItemsClient,
440441
private readonly languageService: LanguageService,
441442
private readonly usersClient: UsersClient,
443+
private readonly picturesClient: PicturesClient,
442444
) {}
443445

444446
ngOnInit(): void {
@@ -568,13 +570,18 @@ export class ModerPicturesComponent implements OnInit, OnDestroy {
568570
for (const picture of pictures) {
569571
if (picture.id === id) {
570572
promises.push(
571-
this.api
572-
.request<void>('PUT', 'picture/' + picture.id, {
573-
body: {
574-
status: 'accepted',
575-
},
576-
})
577-
.pipe(tap(() => (picture.status = 'accepted'))),
573+
this.picturesClient
574+
.setPictureStatus(
575+
new SetPictureStatusRequest({id: picture.id + '', status: PictureStatus.PICTURE_STATUS_ACCEPTED}),
576+
)
577+
.pipe(
578+
catchError((err: unknown) => {
579+
this.toastService.handleError(err);
580+
return EMPTY;
581+
}),
582+
tap(() => (picture.status = 'accepted')),
583+
map(() => void 0),
584+
),
578585
);
579586
}
580587
}

src/app/picture/picture.component.ts

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import {
55
CommentsSubscribeRequest,
66
CommentsType,
77
CommentsUnSubscribeRequest,
8+
PictureStatus,
89
PicturesViewRequest,
910
SetPictureItemPerspectiveRequest,
11+
SetPictureStatusRequest,
1012
} from '@grpc/spec.pb';
1113
import {CommentsClient, PicturesClient} from '@grpc/spec.pbsc';
1214
import {ACLService, Privilege, Resource} from '@services/acl.service';
@@ -146,31 +148,39 @@ export class PictureComponent {
146148
this.router.navigate(this.galleryRoute ? this.galleryRoute : ['../../gallery', picture.identity]);
147149
}
148150

149-
private setPictureStatus(picture: APIPicture, status: string) {
151+
private setPictureStatus(picture: APIPicture, status: PictureStatus) {
150152
this.statusLoading = true;
151-
this.pictureService.setPictureStatus$(picture.id, status).subscribe({
152-
complete: () => {
153-
this.statusLoading = false;
154-
},
155-
next: () => {
156-
this.changed.emit(true);
157-
},
158-
});
153+
this.picturesClient
154+
.setPictureStatus(new SetPictureStatusRequest({id: picture.id + '', status}))
155+
.pipe(
156+
catchError((err: unknown) => {
157+
this.toastService.handleError(err);
158+
return EMPTY;
159+
}),
160+
)
161+
.subscribe({
162+
complete: () => {
163+
this.statusLoading = false;
164+
},
165+
next: () => {
166+
this.changed.emit(true);
167+
},
168+
});
159169
}
160170

161171
protected unacceptPicture(picture: APIPicture) {
162-
this.setPictureStatus(picture, 'inbox');
172+
this.setPictureStatus(picture, PictureStatus.PICTURE_STATUS_INBOX);
163173
}
164174

165175
protected acceptPicture(picture: APIPicture) {
166-
this.setPictureStatus(picture, 'accepted');
176+
this.setPictureStatus(picture, PictureStatus.PICTURE_STATUS_ACCEPTED);
167177
}
168178

169179
protected deletePicture(picture: APIPicture) {
170-
this.setPictureStatus(picture, 'removing');
180+
this.setPictureStatus(picture, PictureStatus.PICTURE_STATUS_REMOVING);
171181
}
172182

173183
protected restorePicture(picture: APIPicture) {
174-
this.setPictureStatus(picture, 'inbox');
184+
this.setPictureStatus(picture, PictureStatus.PICTURE_STATUS_INBOX);
175185
}
176186
}

0 commit comments

Comments
 (0)