refactor: optimize code structure and readability
This commit is contained in:
parent
31f1041164
commit
9c14319236
13 changed files with 33 additions and 63 deletions
|
|
@ -29,11 +29,11 @@
|
||||||
<!-- Genre columns -->
|
<!-- Genre columns -->
|
||||||
@for (filmGenre of filmGenres; track filmGenre) {
|
@for (filmGenre of filmGenres; track filmGenre) {
|
||||||
<!-- Movies by genre -->
|
<!-- Movies by genre -->
|
||||||
@if (allMovies(filmGenre.code).length > 0) {
|
@if (getAllMovies(filmGenre.code).length > 0) {
|
||||||
<div class="category">
|
<div class="category">
|
||||||
<p>{{ filmGenre.name }}</p>
|
<p>{{ filmGenre.name }}</p>
|
||||||
<app-movie-list
|
<app-movie-list
|
||||||
[movies]="allMovies(filmGenre.code)"
|
[movies]="getAllMovies(filmGenre.code)"
|
||||||
[currentMovie]="currentMovie"
|
[currentMovie]="currentMovie"
|
||||||
[watchedMovies]="watchedMovies"
|
[watchedMovies]="watchedMovies"
|
||||||
(currentMovieId)="openCurrentMovie($event)"
|
(currentMovieId)="openCurrentMovie($event)"
|
||||||
|
|
|
||||||
|
|
@ -48,12 +48,6 @@ export class CategoriesComponent implements AfterViewInit {
|
||||||
{ code: 'western', name: 'Western' },
|
{ code: 'western', name: 'Western' },
|
||||||
];
|
];
|
||||||
|
|
||||||
getFavoriteMovies() {
|
|
||||||
return this.movies.filter((movie) =>
|
|
||||||
this.favoriteMovies.includes(movie.id)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
ngAfterViewInit() {
|
ngAfterViewInit() {
|
||||||
this.checkScroll();
|
this.checkScroll();
|
||||||
}
|
}
|
||||||
|
|
@ -63,10 +57,16 @@ export class CategoriesComponent implements AfterViewInit {
|
||||||
this.currentMovieId.emit(movieId);
|
this.currentMovieId.emit(movieId);
|
||||||
}
|
}
|
||||||
|
|
||||||
allMovies(filmGenre: string) {
|
getAllMovies(filmGenre: string) {
|
||||||
return this.movies.filter((movie) => movie.film_genre === filmGenre);
|
return this.movies.filter((movie) => movie.film_genre === filmGenre);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getFavoriteMovies() {
|
||||||
|
return this.movies.filter((movie) =>
|
||||||
|
this.favoriteMovies.includes(movie.id)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
recentMovies() {
|
recentMovies() {
|
||||||
const today = new Date();
|
const today = new Date();
|
||||||
const dayOfWeek = today.getDay();
|
const dayOfWeek = today.getDay();
|
||||||
|
|
@ -80,12 +80,6 @@ export class CategoriesComponent implements AfterViewInit {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getThumbnailUrl(movieId: number, fileName: string): string {
|
|
||||||
return `${environment.baseUrl}/media/thumbnails/${movieId}/${fileName}_480p.jpg`;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Category scroll
|
|
||||||
|
|
||||||
@HostListener('window:resize')
|
@HostListener('window:resize')
|
||||||
onResize() {
|
onResize() {
|
||||||
this.checkScroll();
|
this.checkScroll();
|
||||||
|
|
@ -108,24 +102,4 @@ export class CategoriesComponent implements AfterViewInit {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
scrollLeft(event: MouseEvent) {
|
|
||||||
const button = event.target as HTMLElement;
|
|
||||||
const container = button
|
|
||||||
.closest('.category')
|
|
||||||
?.querySelector('.movies') as HTMLElement;
|
|
||||||
if (container) {
|
|
||||||
container.scrollLeft -= 217;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
scrollRight(event: MouseEvent) {
|
|
||||||
const button = event.target as HTMLElement;
|
|
||||||
const container = button
|
|
||||||
.closest('.category')
|
|
||||||
?.querySelector('.movies') as HTMLElement;
|
|
||||||
if (container) {
|
|
||||||
container.scrollLeft += 217;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div *ngIf="watchedMovies.includes(movie.id)" class="watched">
|
<div *ngIf="watchedMovies.includes(movie.id)" class="watched">
|
||||||
<img src="./../../../../../assets/img/open-eye.svg" alt="" />
|
<img src="./assets/img/open-eye.svg" alt="" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
@ -20,13 +20,13 @@
|
||||||
<img
|
<img
|
||||||
class="scroll-left"
|
class="scroll-left"
|
||||||
(click)="scrollLeft($event)"
|
(click)="scrollLeft($event)"
|
||||||
src="./../../../../../assets/img/arrow_back.svg"
|
src="./assets/img/arrow_back.svg"
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
<img
|
<img
|
||||||
class="scroll-right"
|
class="scroll-right"
|
||||||
(click)="scrollRight($event)"
|
(click)="scrollRight($event)"
|
||||||
src="./../../../../../assets/img/arrow_forward.svg"
|
src="./assets/img/arrow_forward.svg"
|
||||||
alt=""
|
alt=""
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -65,8 +65,8 @@ export class HeroBannerComponent implements OnChanges {
|
||||||
|
|
||||||
getVideoUrls() {
|
getVideoUrls() {
|
||||||
this.playUrl = `${this.environmentBaseUrl}/media/videos/${this.currentMovie[0]?.id}/${this.currentMovie[0]?.file_name}`;
|
this.playUrl = `${this.environmentBaseUrl}/media/videos/${this.currentMovie[0]?.id}/${this.currentMovie[0]?.file_name}`;
|
||||||
this.videoUrl = `${this.environmentBaseUrl}/media/thumbnails/${this.currentMovie[0]?.id}/${this.currentMovie[0]?.file_name}_video-thumbnail.mp4`;
|
|
||||||
this.thumbnailUrl = `${this.environmentBaseUrl}/media/thumbnails/${this.currentMovie[0]?.id}/${this.currentMovie[0]?.file_name}_1080p.jpg`;
|
this.thumbnailUrl = `${this.environmentBaseUrl}/media/thumbnails/${this.currentMovie[0]?.id}/${this.currentMovie[0]?.file_name}_1080p.jpg`;
|
||||||
|
this.videoUrl = `${this.environmentBaseUrl}/media/thumbnails/${this.currentMovie[0]?.id}/${this.currentMovie[0]?.file_name}_video-thumbnail.mp4`;
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnChanges(changes: SimpleChanges) {
|
ngOnChanges(changes: SimpleChanges) {
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@
|
||||||
name="videoFile"
|
name="videoFile"
|
||||||
placeholder="Video file"
|
placeholder="Video file"
|
||||||
(change)="onFileChange($event)"
|
(change)="onFileChange($event)"
|
||||||
accept="video/*"
|
accept="video/mp4"
|
||||||
required
|
required
|
||||||
/>
|
/>
|
||||||
<div class="error-msg">
|
<div class="error-msg">
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ import { LoadingDialogComponent } from '../../../../shared/components/loading-di
|
||||||
export class UploadMovieComponent {
|
export class UploadMovieComponent {
|
||||||
@Output() toggleUploadMovieOverview = new EventEmitter<boolean>();
|
@Output() toggleUploadMovieOverview = new EventEmitter<boolean>();
|
||||||
errorMsgFileSize: string | null = null;
|
errorMsgFileSize: string | null = null;
|
||||||
maxFileSizeMB = 50;
|
maxFileSizeMB = 20;
|
||||||
|
|
||||||
movieData = {
|
movieData = {
|
||||||
title: '',
|
title: '',
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import { UserService } from './user.service';
|
||||||
export class AuthService {
|
export class AuthService {
|
||||||
errorMsg: string | null = null;
|
errorMsg: string | null = null;
|
||||||
passwordFieldType: string = 'password';
|
passwordFieldType: string = 'password';
|
||||||
passwordIcon: string = './../../../assets/img/close-eye.svg';
|
passwordIcon: string = './assets/img/close-eye.svg';
|
||||||
|
|
||||||
constructor(private http: HttpClient, private userService: UserService) {}
|
constructor(private http: HttpClient, private userService: UserService) {}
|
||||||
|
|
||||||
|
|
@ -22,9 +22,9 @@ export class AuthService {
|
||||||
|
|
||||||
toggleIcon() {
|
toggleIcon() {
|
||||||
this.passwordIcon =
|
this.passwordIcon =
|
||||||
this.passwordIcon === './../../../assets/img/close-eye.svg'
|
this.passwordIcon === './assets/img/close-eye.svg'
|
||||||
? './../../../assets/img/open-eye.svg'
|
? './assets/img/open-eye.svg'
|
||||||
: './../../../assets/img/close-eye.svg';
|
: './assets/img/close-eye.svg';
|
||||||
}
|
}
|
||||||
|
|
||||||
async register(body: any) {
|
async register(body: any) {
|
||||||
|
|
@ -89,7 +89,7 @@ export class AuthService {
|
||||||
authToken = sessionStorage.getItem('authToken');
|
authToken = sessionStorage.getItem('authToken');
|
||||||
}
|
}
|
||||||
return new HttpHeaders({
|
return new HttpHeaders({
|
||||||
Authorization: `Token ${authToken}`, // Ensure this matches your backend
|
Authorization: `Token ${authToken}`,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,7 @@
|
||||||
[ngClass]="{ reverse: imgReverse }"
|
[ngClass]="{ reverse: imgReverse }"
|
||||||
>
|
>
|
||||||
@if(imgPath) {
|
@if(imgPath) {
|
||||||
<img
|
<img src="./assets/img/{{ imgPath }}.svg" alt="{{ imgPath }}" class="icon" />
|
||||||
src="./../../../../assets/img/{{ imgPath }}.svg"
|
|
||||||
alt="{{ imgPath }}"
|
|
||||||
class="icon"
|
|
||||||
/>
|
|
||||||
}
|
}
|
||||||
<p>{{ value }}</p>
|
<p>{{ value }}</p>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
src="./../../../../assets/img/{{ imgPath }}.svg"
|
src="./assets/img/{{ imgPath }}.svg"
|
||||||
alt="{{ imgPath }}"
|
alt="{{ imgPath }}"
|
||||||
class="icon"
|
class="icon"
|
||||||
[ngStyle]="{
|
[ngStyle]="{
|
||||||
|
|
|
||||||
|
|
@ -2,12 +2,12 @@
|
||||||
<section class="slide-in" (click)="stopPropagation($event)">
|
<section class="slide-in" (click)="stopPropagation($event)">
|
||||||
<div class="left"></div>
|
<div class="left"></div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<img src="./../../../../assets/img/attention.svg" alt="Achtung" />
|
<img src="./assets/img/attention.svg" alt="Attention" />
|
||||||
<p>{{ errorText }}</p>
|
<p>{{ errorText }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="line"></div>
|
<div class="line"></div>
|
||||||
<div class="close-btn" (click)="closeError()">
|
<div class="close-btn" (click)="closeError()">
|
||||||
<img src="./../../../../assets/img/close.svg" alt="Schließen" />
|
<img src="./assets/img/close.svg" alt="Close" />
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
<header>
|
<header>
|
||||||
@if (showFullLogo) {
|
@if (showFullLogo) {
|
||||||
<div class="logo-full" routerLink="/">
|
<div class="logo-full" routerLink="/">
|
||||||
<img src="./../../../../assets/img/logo_full.svg" alt="" />
|
<img src="./assets/img/logo_full.svg" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<div class="logo-mobile" routerLink="/">
|
<div class="logo-mobile" routerLink="/">
|
||||||
<img src="./../../../../assets/img/logo_ci.svg" alt="" />
|
<img src="./assets/img/logo_ci.svg" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<div class="btn">
|
<div class="btn">
|
||||||
<app-btn-large [value]="'Log in'" routerLink="/login"></app-btn-large>
|
<app-btn-large [value]="'Log in'" routerLink="/login"></app-btn-large>
|
||||||
</div>
|
</div>
|
||||||
} @else {
|
} @else {
|
||||||
<div class="logo" (click)="backToOverview([])">
|
<div class="logo" (click)="backToOverview([])">
|
||||||
<img src="./../../../../assets/img/logo_ci.svg" alt="" />
|
<img src="./assets/img/logo_ci.svg" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<div class="btn">
|
<div class="btn">
|
||||||
<app-btn-large
|
<app-btn-large
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
<section>
|
<section>
|
||||||
<header>
|
<header>
|
||||||
<div class="logo-full" routerLink="/">
|
<div class="logo-full" routerLink="/">
|
||||||
<img src="./../../../../assets/img/logo_full.svg" alt="" />
|
<img src="./assets/img/logo_full.svg" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<div class="logo-mobile" routerLink="/">
|
<div class="logo-mobile" routerLink="/">
|
||||||
<img src="./../../../../assets/img/logo_ci.svg" alt="" />
|
<img src="./assets/img/logo_ci.svg" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<div class="back-button" (click)="backClicked()">
|
<div class="back-button" (click)="backClicked()">
|
||||||
<img src="./../../../../assets/img/back.svg" alt="Back" />
|
<img src="./assets/img/back.svg" alt="Back" />
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,13 @@
|
||||||
<section>
|
<section>
|
||||||
<header>
|
<header>
|
||||||
<div class="logo-full" routerLink="/">
|
<div class="logo-full" routerLink="/">
|
||||||
<img src="./../../../../assets/img/logo_full.svg" alt="" />
|
<img src="./assets/img/logo_full.svg" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<div class="logo-mobile" routerLink="/">
|
<div class="logo-mobile" routerLink="/">
|
||||||
<img src="./../../../../assets/img/logo_ci.svg" alt="" />
|
<img src="./assets/img/logo_ci.svg" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<div class="back-button" (click)="backClicked()">
|
<div class="back-button" (click)="backClicked()">
|
||||||
<img src="./../../../../assets/img/back.svg" alt="Back" />
|
<img src="./assets/img/back.svg" alt="Back" />
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue