feat(unified-collection): add unified collection detail directive

Entire-Checkpoint: c6e522b4276c
This commit is contained in:
4gray committed 2026-04-18 10:13:41 +02:00
1 parent e0f6b34aa0
commit 562bfd009c
4 files changed
+100 -101

No files matched your search

+1
View File
@@ -12,6 +12,7 @@ export * from './lib/components/search-form/search-form.component';
export * from './lib/components/search-layout/search-layout.component';
export { WatchedBadgeComponent } from 'components';
export * from './lib/components/unified-collection/unified-collection-page.component';
export * from './lib/components/unified-collection/unified-collection-detail.directive';
export * from './lib/components/unified-collection/unified-live-tab.component';
export * from './lib/navigation/navigation.component';
export * from './lib/navigation/portal-rail-links.component';
@@ -0,0 +1,15 @@
import { Directive, inject, TemplateRef } from '@angular/core';
import { UnifiedCollectionItem } from '@iptvnator/portal/shared/util';
export interface UnifiedCollectionDetailContext {
$implicit: UnifiedCollectionItem;
item: UnifiedCollectionItem;
close: () => void;
}
@Directive({
selector: 'ng-template[unifiedCollectionDetail]',
})
export class UnifiedCollectionDetailDirective {
readonly templateRef = inject(TemplateRef<UnifiedCollectionDetailContext>);
}
+79 -94
View File
@@ -1,100 +1,85 @@
{
"$schema": "./node_modules/nx/schemas/nx-schema.json",
"namedInputs": {
"default": [
"{projectRoot}/**/*",
"sharedGlobals"
],
"production": [
"default",
"!{projectRoot}/.eslintrc.json",
"!{projectRoot}/eslint.config.mjs",
"!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)",
"!{projectRoot}/tsconfig.spec.json",
"!{projectRoot}/jest.config.[jt]s",
"!{projectRoot}/src/test-setup.[jt]s",
"!{projectRoot}/test-setup.[jt]s"
],
"sharedGlobals": [
"{workspaceRoot}/.github/workflows/ci.yml"
]
},
"targetDefaults": {
"@angular/build:application": {
"cache": true,
"dependsOn": [
"^build"
],
"inputs": [
"production",
"^production"
]
"$schema": "./node_modules/nx/schemas/nx-schema.json",
"namedInputs": {
"default": ["{projectRoot}/**/*", "sharedGlobals"],
"production": [
"default",
"!{projectRoot}/.eslintrc.json",
"!{projectRoot}/eslint.config.mjs",
"!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)",
"!{projectRoot}/tsconfig.spec.json",
"!{projectRoot}/jest.config.[jt]s",
"!{projectRoot}/src/test-setup.[jt]s",
"!{projectRoot}/test-setup.[jt]s"
],
"sharedGlobals": ["{workspaceRoot}/.github/workflows/ci.yml"]
},
"@nx/eslint:lint": {
"cache": true,
"inputs": [
"default",
"{workspaceRoot}/.eslintrc.json",
"{workspaceRoot}/.eslintignore",
"{workspaceRoot}/eslint.config.mjs"
]
},
"@nx/jest:jest": {
"cache": true,
"inputs": [
"default",
"^production",
"{workspaceRoot}/jest.preset.js"
],
"options": {
"passWithNoTests": true
},
"configurations": {
"ci": {
"ci": true,
"codeCoverage": true
"targetDefaults": {
"@angular/build:application": {
"cache": true,
"dependsOn": ["^build"],
"inputs": ["production", "^production"]
},
"@nx/eslint:lint": {
"cache": true,
"inputs": [
"default",
"{workspaceRoot}/.eslintrc.json",
"{workspaceRoot}/.eslintignore",
"{workspaceRoot}/eslint.config.mjs"
]
},
"@nx/jest:jest": {
"cache": true,
"inputs": [
"default",
"^production",
"{workspaceRoot}/jest.preset.js"
],
"options": {
"passWithNoTests": true
},
"configurations": {
"ci": {
"ci": true,
"codeCoverage": true
}
}
},
"@nx/js:tsc": {
"cache": true,
"dependsOn": ["^build"],
"inputs": ["production", "^production"]
}
}
},
"@nx/js:tsc": {
"cache": true,
"dependsOn": [
"^build"
],
"inputs": [
"production",
"^production"
]
}
},
"plugins": [
{
"plugin": "@nx/playwright/plugin",
"options": {
"targetName": "e2e"
}
"plugins": [
{
"plugin": "@nx/playwright/plugin",
"options": {
"targetName": "e2e"
}
},
{
"plugin": "@nx/eslint/plugin",
"options": {
"targetName": "lint"
}
}
],
"generators": {
"@nx/angular:application": {
"e2eTestRunner": "playwright",
"linter": "eslint",
"style": "scss",
"unitTestRunner": "jest"
},
"@nx/angular:library": {
"linter": "eslint",
"unitTestRunner": "jest"
},
"@nx/angular:component": {
"style": "scss"
}
},
{
"plugin": "@nx/eslint/plugin",
"options": {
"targetName": "lint"
}
}
],
"generators": {
"@nx/angular:application": {
"e2eTestRunner": "playwright",
"linter": "eslint",
"style": "scss",
"unitTestRunner": "jest"
},
"@nx/angular:library": {
"linter": "eslint",
"unitTestRunner": "jest"
},
"@nx/angular:component": {
"style": "scss"
}
},
"defaultProject": "web"
"defaultProject": "web"
}
+5 -7
View File
@@ -27,9 +27,7 @@
"@iptvnator/portal/shared/util": [
"libs/portal/shared/util/src/index.ts"
],
"@iptvnator/epg/data-access": [
"libs/epg/data-access/src/index.ts"
],
"@iptvnator/epg/data-access": ["libs/epg/data-access/src/index.ts"],
"@iptvnator/playlist/shared/ui": [
"libs/playlist/shared/ui/src/index.ts"
],
@@ -78,9 +76,7 @@
"shared-portals": ["libs/ui/shared-portals/src/index.ts"],
"remote-control": ["libs/ui/remote-control/src/index.ts"],
"database": ["libs/shared/database/src/index.ts"],
"database-schema": [
"libs/shared/database/src/lib/schema.ts"
],
"database-schema": ["libs/shared/database/src/lib/schema.ts"],
"database-path-utils": [
"libs/shared/database/src/lib/path-utils.ts"
],
@@ -90,7 +86,9 @@
"workspace-dashboard-data-access": [
"libs/workspace/dashboard/data-access/src/index.ts"
],
"workspace-dashboard-ui": ["libs/workspace/dashboard/ui/src/index.ts"]
"workspace-dashboard-ui": [
"libs/workspace/dashboard/ui/src/index.ts"
]
}
},
"exclude": ["node_modules", "tmp"],