mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-11 19:46:16 -08:00
feat(downloads): finish manager MVP
This commit is contained in:
1 parent
eb55c17a05
commit
bcc2e36a05
48 files changed
+4145
-1844
No files matched your search
+1
-3
@@ -137,9 +137,7 @@
|
||||
[class.is-active]="isDownloadsView()"
|
||||
[class.has-activity]="hasActiveDownloads()"
|
||||
(click)="onDownloadsRequested()"
|
||||
[matTooltip]="
|
||||
'WORKSPACE.SHELL.RAIL_DOWNLOADS' | translate
|
||||
"
|
||||
[matTooltip]="'WORKSPACE.SHELL.RAIL_DOWNLOADS' | translate"
|
||||
[attr.aria-label]="
|
||||
('WORKSPACE.SHELL.OPEN_DOWNLOADS' | translate) +
|
||||
(hasActiveDownloads()
|
||||
|
||||
+7
-9
@@ -1,10 +1,6 @@
|
||||
import { readFileSync } from 'node:fs';
|
||||
import { join } from 'node:path';
|
||||
import {
|
||||
Component,
|
||||
input,
|
||||
output,
|
||||
} from '@angular/core';
|
||||
import { Component, input, output } from '@angular/core';
|
||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
||||
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
|
||||
import { MatIconButton } from '@angular/material/button';
|
||||
@@ -86,8 +82,9 @@ describe('WorkspaceShellHeaderComponent', () => {
|
||||
it('emits search input changes as user types', () => {
|
||||
const emitted: string[] = [];
|
||||
component.searchChanged.subscribe((value) => emitted.push(value));
|
||||
const input: HTMLInputElement =
|
||||
fixture.nativeElement.querySelector('input[type="search"]');
|
||||
const input: HTMLInputElement = fixture.nativeElement.querySelector(
|
||||
'input[type="search"]'
|
||||
);
|
||||
|
||||
input.value = 'matrix';
|
||||
input.dispatchEvent(new Event('input'));
|
||||
@@ -96,8 +93,9 @@ describe('WorkspaceShellHeaderComponent', () => {
|
||||
});
|
||||
|
||||
it('focuses and selects the search input on request', () => {
|
||||
const input: HTMLInputElement =
|
||||
fixture.nativeElement.querySelector('input[type="search"]');
|
||||
const input: HTMLInputElement = fixture.nativeElement.querySelector(
|
||||
'input[type="search"]'
|
||||
);
|
||||
input.value = 'matrix';
|
||||
input.blur();
|
||||
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
<div
|
||||
class="workspace-shell"
|
||||
appPlaylistDropZone
|
||||
#dropZone="playlistDropZone"
|
||||
>
|
||||
<div class="workspace-shell" appPlaylistDropZone #dropZone="playlistDropZone">
|
||||
<app-playlist-drop-overlay [state]="dropZone.overlayState()" />
|
||||
@if (facade.showXtreamImportOverlay()) {
|
||||
<app-workspace-shell-import-overlay />
|
||||
@@ -54,7 +50,10 @@
|
||||
(accountInfoRequested)="facade.openAccountInfo()"
|
||||
/>
|
||||
|
||||
<div class="workspace-body" [class.single-pane]="!facade.showContextPanel()">
|
||||
<div
|
||||
class="workspace-body"
|
||||
[class.single-pane]="!facade.showContextPanel()"
|
||||
>
|
||||
@if (facade.showContextPanel()) {
|
||||
<app-workspace-shell-context-sidebar
|
||||
[variant]="facade.contextPanel()"
|
||||
@@ -75,9 +74,7 @@
|
||||
<app-external-playback-dock
|
||||
[session]="session"
|
||||
(closeClicked)="facade.closeActiveExternalSession()"
|
||||
(artworkClicked)="
|
||||
facade.openActiveExternalSessionTarget()
|
||||
"
|
||||
(artworkClicked)="facade.openActiveExternalSessionTarget()"
|
||||
/>
|
||||
</footer>
|
||||
}
|
||||
|
||||
+1
-7
@@ -1,10 +1,4 @@
|
||||
import {
|
||||
Component,
|
||||
Directive,
|
||||
input,
|
||||
output,
|
||||
signal,
|
||||
} from '@angular/core';
|
||||
import { Component, Directive, input, output, signal } from '@angular/core';
|
||||
import { TestBed } from '@angular/core/testing';
|
||||
import { RouterOutlet, provideRouter } from '@angular/router';
|
||||
import { By } from '@angular/platform-browser';
|
||||
|
||||
Reference in new issue
Block a user