Skip to content

Commit 38a9b2e

Browse files
committed
feat: CreatePictureItem via gRPC
1 parent ea1b2b0 commit 38a9b2e

File tree

6 files changed

+532
-52
lines changed

6 files changed

+532
-52
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,21 +201,21 @@ <h1 i18n>Picture №{{ id }}</h1>
201201
<div *ngIf="picture.rights.move">
202202
<ng-container *ngIf="lastItem$ | async as lastItem">
203203
<div *ngIf="lastItem.item && !lastItem.hasItem && lastItem.item.itemTypeId !== ItemType.ITEM_TYPE_COPYRIGHT">
204-
<button class="btn btn-secondary" (click)="addItem(picture.id, lastItem.item, 1)">
204+
<button class="btn btn-secondary" (click)="addItem(picture.id + '', lastItem.item, 1)">
205205
<i class="bi bi-plus" aria-hidden="true"></i>
206206
<ng-container i18n>add to</ng-container> (content)
207207
<span [innerHTML]="lastItem.item.nameHtml"></span>
208208
</button>
209209
</div>
210210
<div *ngIf="lastItem.item && !lastItem.hasItem && lastItem.item.itemTypeId === ItemType.ITEM_TYPE_PERSON">
211-
<button class="btn btn-secondary" (click)="addItem(picture.id, lastItem.item, 2)">
211+
<button class="btn btn-secondary" (click)="addItem(picture.id + '', lastItem.item, 2)">
212212
<i class="bi bi-plus" aria-hidden="true"></i>
213213
<ng-container i18n>add to</ng-container> (author)
214214
<span [innerHTML]="lastItem.item.nameHtml"></span>
215215
</button>
216216
</div>
217217
<div *ngIf="lastItem.item && !lastItem.hasItem && lastItem.item.itemTypeId === ItemType.ITEM_TYPE_COPYRIGHT">
218-
<button class="btn btn-secondary" (click)="addItem(picture.id, lastItem.item, 3)">
218+
<button class="btn btn-secondary" (click)="addItem(picture.id + '', lastItem.item, 3)">
219219
<i class="bi bi-plus" aria-hidden="true"></i>
220220
<ng-container i18n>add to</ng-container> (copyrights)
221221
<span [innerHTML]="lastItem.item.nameHtml"></span>

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

Lines changed: 54 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import {ActivatedRoute, Router} from '@angular/router';
33
import {
44
APIIP,
55
APIUser,
6+
CreatePictureItemRequest,
7+
DeletePictureItemRequest,
68
DeleteSimilarRequest,
79
ItemFields,
810
ItemRequest,
@@ -19,7 +21,7 @@ import {IpService} from '@services/ip';
1921
import {LanguageService} from '@services/language';
2022
import {PageEnvService} from '@services/page-env.service';
2123
import {APIPicture, PictureService} from '@services/picture';
22-
import {APIPictureItem, PictureItemService} from '@services/picture-item';
24+
import {APIPictureItem} from '@services/picture-item';
2325
import {UserService} from '@services/user';
2426
import {BehaviorSubject, EMPTY, Observable, combineLatest, of, throwError} from 'rxjs';
2527
import {catchError, distinctUntilChanged, map, shareReplay, switchMap, tap} from 'rxjs/operators';
@@ -175,7 +177,6 @@ export class ModerPicturesItemComponent {
175177

176178
constructor(
177179
private readonly api: APIService,
178-
private readonly pictureItemService: PictureItemService,
179180
private readonly route: ActivatedRoute,
180181
private readonly router: Router,
181182
private readonly pictureService: PictureService,
@@ -255,18 +256,30 @@ export class ModerPicturesItemComponent {
255256
return found;
256257
}
257258

258-
protected addItem(id: number, item: APIItem, type: number) {
259+
protected addItem(id: string, item: APIItem, type: number) {
259260
this.pictureItemLoading = true;
260-
this.pictureItemService.create$(id, item.id, type, {}).subscribe({
261-
error: () => {
262-
this.pictureItemLoading = false;
263-
},
264-
next: () => {
265-
localStorage.setItem('last_item', item.id.toString());
266-
this.change$.next();
267-
this.pictureItemLoading = false;
268-
},
269-
});
261+
this.picturesClient
262+
.createPictureItem(
263+
new CreatePictureItemRequest({
264+
itemId: item.id,
265+
pictureId: id,
266+
type: type,
267+
}),
268+
)
269+
.pipe(
270+
catchError((error: unknown) => {
271+
this.pictureItemLoading = false;
272+
this.toastService.handleError(error);
273+
return EMPTY;
274+
}),
275+
)
276+
.subscribe({
277+
next: () => {
278+
localStorage.setItem('last_item', item.id.toString());
279+
this.change$.next();
280+
this.pictureItemLoading = false;
281+
},
282+
});
270283
}
271284

272285
protected moveItem(id: string, type: number, srcItemId: string, dstItemId: string) {
@@ -280,10 +293,14 @@ export class ModerPicturesItemComponent {
280293
type: type,
281294
}),
282295
)
283-
.subscribe({
284-
error: () => {
296+
.pipe(
297+
catchError((error: unknown) => {
285298
this.pictureItemLoading = false;
286-
},
299+
this.toastService.handleError(error);
300+
return EMPTY;
301+
}),
302+
)
303+
.subscribe({
287304
next: () => {
288305
localStorage.setItem('last_item', dstItemId);
289306
this.change$.next();
@@ -430,15 +447,27 @@ export class ModerPicturesItemComponent {
430447

431448
protected deletePictureItem(item: APIPictureItem) {
432449
this.pictureItemLoading = true;
433-
this.pictureItemService.remove$(item.picture_id, item.item_id, item.type).subscribe({
434-
error: () => {
435-
this.pictureItemLoading = false;
436-
},
437-
next: () => {
438-
this.change$.next();
439-
this.pictureItemLoading = false;
440-
},
441-
});
450+
this.picturesClient
451+
.deletePictureItem(
452+
new DeletePictureItemRequest({
453+
itemId: '' + item.item_id,
454+
pictureId: '' + item.picture_id,
455+
type: item.type,
456+
}),
457+
)
458+
.pipe(
459+
catchError((error: unknown) => {
460+
this.pictureItemLoading = false;
461+
this.toastService.handleError(error);
462+
return EMPTY;
463+
}),
464+
)
465+
.subscribe({
466+
next: () => {
467+
this.change$.next();
468+
this.pictureItemLoading = false;
469+
},
470+
});
442471
}
443472

444473
protected cancelReplace(id: number) {

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

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {FormControl} from '@angular/forms';
33
import {ActivatedRoute, Router} from '@angular/router';
44
import {
55
APIItem,
6+
CreatePictureItemRequest,
67
ItemFields,
78
ItemType,
89
ListItemsRequest,
@@ -15,7 +16,6 @@ import {ItemsClient, PicturesClient} from '@grpc/spec.pbsc';
1516
import {APIItemParentGetResponse, ItemParentService} from '@services/item-parent';
1617
import {LanguageService} from '@services/language';
1718
import {PageEnvService} from '@services/page-env.service';
18-
import {PictureItemService} from '@services/picture-item';
1919
import {EMPTY, Observable, combineLatest, of} from 'rxjs';
2020
import {catchError, debounceTime, distinctUntilChanged, map, shareReplay, startWith, switchMap} from 'rxjs/operators';
2121

@@ -333,7 +333,6 @@ export class ModerPicturesItemMoveComponent implements OnInit {
333333
protected readonly PictureItemType = PictureItemType;
334334

335335
constructor(
336-
private readonly pictureItemService: PictureItemService,
337336
private readonly router: Router,
338337
private readonly route: ActivatedRoute,
339338
private readonly itemParentService: ItemParentService,
@@ -394,16 +393,27 @@ export class ModerPicturesItemMoveComponent implements OnInit {
394393
this.router.navigate(['/moder/pictures', id]);
395394
});
396395
} else {
397-
const data = {
398-
perspective_id: dstPerspectiveID ? dstPerspectiveID : null,
399-
};
400-
401-
this.pictureItemService.create$(id, dstItemID, selection.type, data).subscribe(() => {
402-
if (localStorage) {
403-
localStorage.setItem('last_item', dstItemID);
404-
}
405-
this.router.navigate(['/moder/pictures', id]);
406-
});
396+
this.picturesClient
397+
.createPictureItem(
398+
new CreatePictureItemRequest({
399+
itemId: dstItemID,
400+
perspectiveId: dstPerspectiveID || undefined,
401+
pictureId: '' + id,
402+
type: selection.type,
403+
}),
404+
)
405+
.pipe(
406+
catchError((error: unknown) => {
407+
this.toastService.handleError(error);
408+
return EMPTY;
409+
}),
410+
)
411+
.subscribe(() => {
412+
if (localStorage) {
413+
localStorage.setItem('last_item', dstItemID);
414+
}
415+
this.router.navigate(['/moder/pictures', id]);
416+
});
407417
}
408418

409419
return false;

src/app/services/picture-item.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@ import {APIService} from './api.service';
55
import {APIItem} from './item';
66
import {APIPicture} from './picture';
77

8-
export interface APIPictureItemPostData {
9-
perspective_id?: null | number;
10-
}
11-
128
export interface APIPictureItemGetOptions {
139
fields: string;
1410
}
@@ -43,14 +39,6 @@ export interface APIPictureItem {
4339
export class PictureItemService {
4440
constructor(private readonly api: APIService) {}
4541

46-
public create$(pictureId: number, itemId: string, type: number, data: APIPictureItemPostData): Observable<void> {
47-
return this.api.request<void>('POST', 'picture-item/' + pictureId + '/' + itemId + '/' + type, {body: data});
48-
}
49-
50-
public remove$(pictureId: number, itemId: number, type: number): Observable<void> {
51-
return this.api.request<void>('DELETE', 'picture-item/' + pictureId + '/' + itemId + '/' + type);
52-
}
53-
5442
public get$(
5543
pictureId: number,
5644
itemId: number,

0 commit comments

Comments
 (0)