feat: base64 uploads, reusable forms, Discord roles, and UX improvements #66

Merged
naomi merged 8 commits from fix/base64 into main 2026-02-20 20:32:52 -08:00
13 changed files with 48 additions and 48 deletions
Showing only changes of commit 309a20f694 - Show all commits
@@ -244,8 +244,8 @@ import { Suggestion, SuggestionStatus, SuggestionEntity, CreateGameDto, UpdateGa
<app-game-form
mode="add"
[initialData]="getGameInitialData(editingSuggestion()!)"
(save)="saveGameFromSuggestion($event)"
(cancel)="closeEditModal()"
(formSubmit)="saveGameFromSuggestion($event)"
(formCancel)="closeEditModal()"
></app-game-form>
} @else if (editingSuggestion()!.entityType === SuggestionEntity.book) {
<h3>Review & Edit Book Before Accepting</h3>
@@ -253,8 +253,8 @@ import { Suggestion, SuggestionStatus, SuggestionEntity, CreateGameDto, UpdateGa
<app-book-form
mode="add"
[initialData]="getBookInitialData(editingSuggestion()!)"
(save)="saveBookFromSuggestion($event)"
(cancel)="closeEditModal()"
(formSubmit)="saveBookFromSuggestion($event)"
(formCancel)="closeEditModal()"
></app-book-form>
} @else if (editingSuggestion()!.entityType === SuggestionEntity.music) {
<h3>Review & Edit Music Before Accepting</h3>
@@ -262,8 +262,8 @@ import { Suggestion, SuggestionStatus, SuggestionEntity, CreateGameDto, UpdateGa
<app-music-form
mode="add"
[initialData]="getMusicInitialData(editingSuggestion()!)"
(save)="saveMusicFromSuggestion($event)"
(cancel)="closeEditModal()"
(formSubmit)="saveMusicFromSuggestion($event)"
(formCancel)="closeEditModal()"
></app-music-form>
} @else if (editingSuggestion()!.entityType === SuggestionEntity.show) {
<h3>Review & Edit Show Before Accepting</h3>
@@ -271,8 +271,8 @@ import { Suggestion, SuggestionStatus, SuggestionEntity, CreateGameDto, UpdateGa
<app-show-form
mode="add"
[initialData]="getShowInitialData(editingSuggestion()!)"
(save)="saveShowFromSuggestion($event)"
(cancel)="closeEditModal()"
(formSubmit)="saveShowFromSuggestion($event)"
(formCancel)="closeEditModal()"
></app-show-form>
} @else if (editingSuggestion()!.entityType === SuggestionEntity.manga) {
<h3>Review & Edit Manga Before Accepting</h3>
@@ -280,8 +280,8 @@ import { Suggestion, SuggestionStatus, SuggestionEntity, CreateGameDto, UpdateGa
<app-manga-form
mode="add"
[initialData]="getMangaInitialData(editingSuggestion()!)"
(save)="saveMangaFromSuggestion($event)"
(cancel)="closeEditModal()"
(formSubmit)="saveMangaFromSuggestion($event)"
(formCancel)="closeEditModal()"
></app-manga-form>
} @else if (editingSuggestion()!.entityType === SuggestionEntity.art) {
<h3>Review & Edit Art Before Accepting</h3>
@@ -289,8 +289,8 @@ import { Suggestion, SuggestionStatus, SuggestionEntity, CreateGameDto, UpdateGa
<app-art-form
mode="add"
[initialData]="getArtInitialData(editingSuggestion()!)"
(save)="saveArtFromSuggestion($event)"
(cancel)="closeEditModal()"
(formSubmit)="saveArtFromSuggestion($event)"
(formCancel)="closeEditModal()"
></app-art-form>
}
}
@@ -31,8 +31,8 @@ import { Art, Comment, UpdateArtDto } from '@library/shared-types';
<app-art-form
mode="edit"
[art]="art()!"
(save)="saveEdit($event)"
(cancel)="cancelEdit()"
(formSubmit)="saveEdit($event)"
(formCancel)="cancelEdit()"
></app-art-form>
}
@@ -31,8 +31,8 @@ import { Book, Comment, BookStatus, UpdateBookDto } from '@library/shared-types'
<app-book-form
mode="edit"
[book]="book()!"
(save)="saveEdit($event)"
(cancel)="cancelEdit()"
(formSubmit)="saveEdit($event)"
(formCancel)="cancelEdit()"
></app-book-form>
}
@@ -60,8 +60,8 @@ import { Game, Comment, GameStatus, UpdateGameDto } from '@library/shared-types'
<app-game-form
mode="edit"
[game]="game()!"
(save)="saveEdit($event)"
(cancel)="cancelEdit()"
(formSubmit)="saveEdit($event)"
(formCancel)="cancelEdit()"
></app-game-form>
}
@@ -31,8 +31,8 @@ import { Manga, Comment, MangaStatus, UpdateMangaDto } from '@library/shared-typ
<app-manga-form
mode="edit"
[manga]="manga()!"
(save)="saveEdit($event)"
(cancel)="cancelEdit()"
(formSubmit)="saveEdit($event)"
(formCancel)="cancelEdit()"
></app-manga-form>
}
@@ -31,8 +31,8 @@ import { Music, Comment, MusicStatus, MusicType, UpdateMusicDto } from '@library
<app-music-form
mode="edit"
[music]="music()!"
(save)="saveEdit($event)"
(cancel)="cancelEdit()"
(formSubmit)="saveEdit($event)"
(formCancel)="cancelEdit()"
></app-music-form>
}
@@ -290,8 +290,8 @@ export class ArtFormComponent implements OnInit {
@Input() mode: 'add' | 'edit' = 'add';
@Input() art?: Art;
@Input() initialData?: Partial<CreateArtDto>;
@Output() save = new EventEmitter<CreateArtDto | UpdateArtDto>();
@Output() cancel = new EventEmitter<void>();
@Output() formSubmit = new EventEmitter<CreateArtDto | UpdateArtDto>();
@Output() formCancel = new EventEmitter<void>();
formData: Partial<CreateArtDto | UpdateArtDto> = {
tags: [],
@@ -396,10 +396,10 @@ export class ArtFormComponent implements OnInit {
...this.formData as CreateArtDto | UpdateArtDto
};
this.save.emit(data);
this.formSubmit.emit(data);
}
onCancel() {
this.cancel.emit();
this.formCancel.emit();
}
}
@@ -404,8 +404,8 @@ export class BookFormComponent implements OnInit {
@Input() mode: 'add' | 'edit' = 'add';
@Input() book?: Book;
@Input() initialData?: Partial<CreateBookDto>;
@Output() save = new EventEmitter<CreateBookDto | UpdateBookDto>();
@Output() cancel = new EventEmitter<void>();
@Output() formSubmit = new EventEmitter<CreateBookDto | UpdateBookDto>();
@Output() formCancel = new EventEmitter<void>();
BookStatus = BookStatus;
@@ -534,10 +534,10 @@ export class BookFormComponent implements OnInit {
dateFinished: this.formData.dateFinished ? new Date(this.formData.dateFinished) : undefined
};
this.save.emit(data);
this.formSubmit.emit(data);
}
onCancel() {
this.cancel.emit();
this.formCancel.emit();
}
}
@@ -392,8 +392,8 @@ export class GameFormComponent implements OnInit {
@Input() mode: 'add' | 'edit' = 'add';
@Input() game?: Game;
@Input() initialData?: Partial<CreateGameDto>;
@Output() save = new EventEmitter<CreateGameDto | UpdateGameDto>();
@Output() cancel = new EventEmitter<void>();
@Output() formSubmit = new EventEmitter<CreateGameDto | UpdateGameDto>();
@Output() formCancel = new EventEmitter<void>();
GameStatus = GameStatus;
@@ -522,10 +522,10 @@ export class GameFormComponent implements OnInit {
dateFinished: this.formData.dateFinished ? new Date(this.formData.dateFinished) : undefined
};
this.save.emit(data);
this.formSubmit.emit(data);
}
onCancel() {
this.cancel.emit();
this.formCancel.emit();
}
}
@@ -370,8 +370,8 @@ export class MangaFormComponent implements OnInit {
@Input() mode: 'add' | 'edit' = 'add';
@Input() manga?: Manga;
@Input() initialData?: Partial<CreateMangaDto>;
@Output() save = new EventEmitter<CreateMangaDto | UpdateMangaDto>();
@Output() cancel = new EventEmitter<void>();
@Output() formSubmit = new EventEmitter<CreateMangaDto | UpdateMangaDto>();
@Output() formCancel = new EventEmitter<void>();
MangaStatus = MangaStatus;
@@ -497,10 +497,10 @@ export class MangaFormComponent implements OnInit {
dateFinished: this.formData.dateFinished ? new Date(this.formData.dateFinished) : undefined
};
this.save.emit(data);
this.formSubmit.emit(data);
}
onCancel() {
this.cancel.emit();
this.formCancel.emit();
}
}
@@ -379,8 +379,8 @@ export class MusicFormComponent implements OnInit {
@Input() mode: 'add' | 'edit' = 'add';
@Input() music?: Music;
@Input() initialData?: Partial<CreateMusicDto>;
@Output() save = new EventEmitter<CreateMusicDto | UpdateMusicDto>();
@Output() cancel = new EventEmitter<void>();
@Output() formSubmit = new EventEmitter<CreateMusicDto | UpdateMusicDto>();
@Output() formCancel = new EventEmitter<void>();
MusicStatus = MusicStatus;
MusicType = MusicType;
@@ -509,10 +509,10 @@ export class MusicFormComponent implements OnInit {
dateFinished: this.formData.dateFinished ? new Date(this.formData.dateFinished) : undefined
};
this.save.emit(data);
this.formSubmit.emit(data);
}
onCancel() {
this.cancel.emit();
this.formCancel.emit();
}
}
@@ -368,8 +368,8 @@ export class ShowFormComponent implements OnInit {
@Input() mode: 'add' | 'edit' = 'add';
@Input() show?: Show;
@Input() initialData?: Partial<CreateShowDto>;
@Output() save = new EventEmitter<CreateShowDto | UpdateShowDto>();
@Output() cancel = new EventEmitter<void>();
@Output() formSubmit = new EventEmitter<CreateShowDto | UpdateShowDto>();
@Output() formCancel = new EventEmitter<void>();
ShowStatus = ShowStatus;
ShowType = ShowType;
@@ -497,10 +497,10 @@ export class ShowFormComponent implements OnInit {
dateFinished: this.formData.dateFinished ? new Date(this.formData.dateFinished) : undefined
};
this.save.emit(data);
this.formSubmit.emit(data);
}
onCancel() {
this.cancel.emit();
this.formCancel.emit();
}
}
@@ -31,8 +31,8 @@ import { Show, Comment, ShowStatus, ShowType, UpdateShowDto } from '@library/sha
<app-show-form
mode="edit"
[show]="show()!"
(save)="saveEdit($event)"
(cancel)="cancelEdit()"
(formSubmit)="saveEdit($event)"
(formCancel)="cancelEdit()"
></app-show-form>
}