refactor(nx): update repository structure for portals

This commit is contained in:
4gray committed 2026-03-08 20:09:50 +01:00
1 parent 256f0e0136
commit 7f67962dd7
18 files changed
+20 -14

No files matched your search

@@ -45,7 +45,7 @@ import { StalkerStore } from '@iptvnator/portal/stalker/data-access';
import { XTREAM_DATA_SOURCE } from '@iptvnator/portal/xtream/data-access';
import { XtreamCategorySortMode } from '@iptvnator/portal/xtream/data-access';
import { XtreamStore } from '@iptvnator/portal/xtream/data-access';
import { VodDetailsComponent } from '../../xtream-electron/vod-details/vod-details.component';
import { VodDetailsComponent } from '../vod-details/vod-details.component';
const SORT_STORAGE_KEY = 'xtream-category-sort-mode';
@@ -6,11 +6,13 @@ import { MatIcon } from '@angular/material/icon';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatTooltipModule } from '@angular/material/tooltip';
import { TranslateModule } from '@ngx-translate/core';
import {
ProgressCapsuleComponent,
WatchedBadgeComponent,
} from '@iptvnator/portal/shared/ui';
import { XtreamSerieEpisode, XtreamSerieEpisodeInfo } from 'shared-interfaces';
import { XtreamStore } from '@iptvnator/portal/xtream/data-access';
import { StalkerStore } from '@iptvnator/portal/stalker/data-access';
import { ProgressCapsuleComponent } from '../shared/progress-capsule/progress-capsule.component';
import { WatchedBadgeComponent } from '../shared/watched-badge/watched-badge.component';
import { DownloadsService } from '../../services/downloads.service';
import { createLogger } from '@iptvnator/portal/shared/util';
@@ -4,9 +4,11 @@ import { MatIcon } from '@angular/material/icon';
import { MatPaginatorModule, PageEvent } from '@angular/material/paginator';
import { MatTooltip } from '@angular/material/tooltip';
import { TranslatePipe } from '@ngx-translate/core';
import { PlaylistErrorViewComponent } from '@iptvnator/portal/shared/ui';
import { ProgressCapsuleComponent } from '../../../xtream-electron/shared/progress-capsule/progress-capsule.component';
import { WatchedBadgeComponent } from '../../../xtream-electron/shared/watched-badge/watched-badge.component';
import {
PlaylistErrorViewComponent,
ProgressCapsuleComponent,
WatchedBadgeComponent,
} from '@iptvnator/portal/shared/ui';
interface GridListItem {
id?: number | string;
@@ -7,7 +7,7 @@ import {
} from '@angular/core';
import { ExternalPlaybackService } from '../../services/external-playback.service';
import { VodDetailsItem } from 'shared-interfaces';
import { VodDetailsComponent } from '../../xtream-electron/vod-details/vod-details.component';
import { VodDetailsComponent } from '../../portal-shared/vod-details/vod-details.component';
import { StalkerSelectedVodItem } from '@iptvnator/portal/stalker/data-access';
import { StalkerSeriesViewComponent } from '../stalker-series-view/stalker-series-view.component';
@@ -15,7 +15,7 @@ import { StalkerStore } from '@iptvnator/portal/stalker/data-access';
templateUrl: './stalker-main-container.component.html',
styleUrls: [
'./stalker-main-container.component.scss',
'../xtream-electron/xtream-main-container.component.scss',
'../portal-shared/portal-main-container.scss',
'../shared/styles/portal-sidebar.scss',
],
imports: [
@@ -12,7 +12,7 @@ import { TranslatePipe, TranslateService } from '@ngx-translate/core';
import { FavoritesButtonComponent } from '../favorites-button/favorites-button.component';
import { ContentHeroComponent } from 'components';
import { StalkerStore } from '@iptvnator/portal/stalker/data-access';
import { SeasonContainerComponent } from '../../xtream-electron/season-container/season-container.component';
import { SeasonContainerComponent } from '../../portal-shared/season-container/season-container.component';
import {
ResolvedPortalPlayback,
XtreamSerieEpisode,
@@ -46,7 +46,7 @@ import { PortalInlinePlayerComponent } from '../../shared/components/portal-inli
@Component({
selector: 'app-stalker-series-view',
templateUrl: './stalker-series-view.component.html',
styleUrls: ['../../xtream-electron/detail-view.scss'],
styleUrls: ['../../portal-shared/detail-view.scss'],
imports: [
FavoritesButtonComponent,
ContentHeroComponent,
@@ -13,13 +13,13 @@ import {
import { PlayerService } from '../../services/player.service';
import { ExternalPlaybackService } from '../../services/external-playback.service';
import { PortalInlinePlayerComponent } from '../../shared/components/portal-inline-player/portal-inline-player.component';
import { SeasonContainerComponent } from '../season-container/season-container.component';
import { SeasonContainerComponent } from '../../portal-shared/season-container/season-container.component';
import { XtreamStore } from '@iptvnator/portal/xtream/data-access';
@Component({
selector: 'app-serial-details',
templateUrl: './serial-details.component.html',
styleUrls: ['../detail-view.scss'],
styleUrls: ['../../portal-shared/detail-view.scss'],
imports: [
ContentHeroComponent,
MatIcon,
@@ -1,55 +0,0 @@
import { Component, input, computed } from '@angular/core';
@Component({
selector: 'app-progress-capsule',
standalone: true,
template: `
<div
class="progress-capsule"
[class.progress-capsule--watched]="isWatched()"
>
<div
class="progress-capsule__fill"
[style.width.%]="progress()"
></div>
</div>
`,
styles: [
`
.progress-capsule {
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 5px;
background: rgba(255, 255, 255, 0.2);
overflow: hidden;
&__fill {
height: 100%;
background: linear-gradient(
90deg,
#e50914 0%,
#ff4d4d 100%
);
transition: width 0.3s ease-out;
border-radius: 0 2px 2px 0;
}
&--watched {
.progress-capsule__fill {
background: linear-gradient(
90deg,
#46d369 0%,
#2ecc71 100%
);
}
}
}
`,
],
})
export class ProgressCapsuleComponent {
readonly progress = input.required<number>(); // 0-100
readonly isWatched = computed(() => this.progress() >= 90);
}
@@ -1,44 +0,0 @@
import { Component, input } from '@angular/core';
import { MatIcon } from '@angular/material/icon';
@Component({
selector: 'app-watched-badge',
standalone: true,
imports: [MatIcon],
template: `
@if (isWatched()) {
<div class="watched-badge">
<mat-icon>{{ icon() }}</mat-icon>
</div>
}
`,
styles: [
`
.watched-badge {
position: absolute;
top: 8px;
left: 8px;
width: 24px;
height: 24px;
background: rgba(70, 211, 105, 0.9);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
backdrop-filter: blur(4px);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
mat-icon {
font-size: 16px;
width: 16px;
height: 16px;
color: white;
}
}
`,
],
})
export class WatchedBadgeComponent {
readonly isWatched = input.required<boolean>();
readonly icon = input<string>('check_circle');
}
@@ -39,7 +39,7 @@ import { createLogger } from '@iptvnator/portal/shared/util';
*/
@Component({
templateUrl: './vod-details-route.component.html',
styleUrls: ['../detail-view.scss'],
styleUrls: ['../../portal-shared/detail-view.scss'],
imports: [
ContentHeroComponent,
MatIcon,
@@ -26,7 +26,7 @@ const XTREAM_CATEGORY_SORT_STORAGE_KEY = 'xtream-category-sort-mode';
selector: 'app-xtream-main-container',
templateUrl: './xtream-main-container.component.html',
styleUrls: [
'./xtream-main-container.component.scss',
'../portal-shared/portal-main-container.scss',
'../shared/styles/portal-sidebar.scss',
],
imports: [