;
- beforeEach(async () => {
- await TestBed.configureTestingModule({
- imports: [ImageSelect]
- })
- .compileComponents();
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ImageSelect],
+ }).compileComponents();
- fixture = TestBed.createComponent(ImageSelect);
- component = fixture.componentInstance;
- await fixture.whenStable();
- });
+ fixture = TestBed.createComponent(ImageSelect);
+ component = fixture.componentInstance;
+ await fixture.whenStable();
+ });
- it('should create', () => {
- expect(component).toBeTruthy();
- });
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
});
diff --git a/src/app/pages/recipe-upload-page/steps/enter-recipe-data/image-select/image-select.ts b/src/app/pages/recipe-upload-page/steps/enter-recipe-data/image-select/image-select.ts
index 3ed45f3..77f43c0 100644
--- a/src/app/pages/recipe-upload-page/steps/enter-recipe-data/image-select/image-select.ts
+++ b/src/app/pages/recipe-upload-page/steps/enter-recipe-data/image-select/image-select.ts
@@ -4,12 +4,13 @@ import { ImageService } from '../../../../../shared/services/ImageService';
import { injectQuery, keepPreviousData } from '@tanstack/angular-query-experimental';
import { Spinner } from '../../../../../shared/components/spinner/spinner';
import { ImageView } from '../../../../../shared/models/ImageView.model';
-import { injectQueries } from '@tanstack/angular-query-experimental/inject-queries-experimental'
-import { NgClass } from '@angular/common';
+import { injectQueries } from '@tanstack/angular-query-experimental/inject-queries-experimental';
+import { MatCard, MatCardActions, MatCardContent, MatCardImage } from '@angular/material/card';
+import { MatCheckbox } from '@angular/material/checkbox';
@Component({
selector: 'app-image-select',
- imports: [MatPaginator, Spinner, NgClass],
+ imports: [MatPaginator, Spinner, MatCard, MatCardImage, MatCardContent, MatCardActions, MatCheckbox],
templateUrl: './image-select.html',
styleUrl: './image-select.css',
})
diff --git a/src/app/shared/models/SetImageBody.ts b/src/app/shared/models/SetImageBody.ts
new file mode 100644
index 0000000..a20d6fa
--- /dev/null
+++ b/src/app/shared/models/SetImageBody.ts
@@ -0,0 +1,4 @@
+export interface SetImageBody {
+ username: string;
+ userFilename: string;
+}
diff --git a/src/app/shared/services/EndpointService.ts b/src/app/shared/services/EndpointService.ts
index 6e82292..3d1d1fe 100644
--- a/src/app/shared/services/EndpointService.ts
+++ b/src/app/shared/services/EndpointService.ts
@@ -7,7 +7,11 @@ import { environment } from '../../../environments/environment';
providedIn: 'root',
})
export class EndpointService {
- public getUrl(endpoint: keyof typeof Endpoints, pathParts?: string[], queryParams?: QueryParams
): string {
+ public getUrl
(
+ endpoint: keyof typeof Endpoints,
+ pathParts?: string[],
+ queryParams?: QueryParams
,
+ ): string {
const urlSearchParams = new URLSearchParams();
if (queryParams?.page !== undefined) {
urlSearchParams.set('page', queryParams.page.toString());
diff --git a/src/app/shared/services/ImageService.ts b/src/app/shared/services/ImageService.ts
index f7bab37..81f8a5a 100644
--- a/src/app/shared/services/ImageService.ts
+++ b/src/app/shared/services/ImageService.ts
@@ -4,7 +4,7 @@ import { firstValueFrom, map } from 'rxjs';
import { EndpointService } from './EndpointService';
import { ImageView } from '../models/ImageView.model';
import { SliceView } from '../models/SliceView.model';
-import { QueryParams } from '../models/Query.model';;
+import { QueryParams } from '../models/Query.model';
@Injectable({
providedIn: 'root',
@@ -22,7 +22,7 @@ export class ImageService {
'height',
'width',
'owner',
- 'viewers'
+ 'viewers',
] as const;
private readonly httpClient = inject(HttpClient);
@@ -30,7 +30,7 @@ export class ImageService {
public getOwnedImages(queryParams?: QueryParams): Promise> {
return firstValueFrom(
- this.httpClient.get>(this.endpointService.getUrl('images', [], queryParams))
+ this.httpClient.get>(this.endpointService.getUrl('images', [], queryParams)),
);
}
diff --git a/src/app/shared/services/RecipeDraftService.ts b/src/app/shared/services/RecipeDraftService.ts
index 1437566..f0a1ef2 100644
--- a/src/app/shared/services/RecipeDraftService.ts
+++ b/src/app/shared/services/RecipeDraftService.ts
@@ -7,6 +7,8 @@ import { RecipeDraftViewModel } from '../models/RecipeDraftView.model';
import { EndpointService } from './EndpointService';
import { WithStringDates } from '../util';
import { Recipe } from '../models/Recipe.model';
+import { ImageView } from '../models/ImageView.model';
+import { SetImageBody } from '../models/SetImageBody';
@Injectable({
providedIn: 'root',
@@ -82,12 +84,21 @@ export class RecipeDraftService {
name: string;
notes?: string | null;
}>;
+ mainImage?: ImageView | null;
rawText?: string | null;
},
): Promise {
return firstValueFrom(
this.http
- .put>(this.endpointService.getUrl('recipeDrafts', [id]), data)
+ .put>(this.endpointService.getUrl('recipeDrafts', [id]), {
+ ...data,
+ mainImage: data.mainImage
+ ? ({
+ username: data.mainImage.owner.username,
+ userFilename: data.mainImage.filename,
+ } satisfies SetImageBody)
+ : undefined,
+ })
.pipe(
map((rawView) => this.hydrateView(rawView)),
map((draft) => ({