mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-08 17:06:15 -08:00
feat: implement grid rating formatting and resolution functions
This commit is contained in:
1 parent
199ff91fcc
commit
6904b81c47
2 files changed
+56
-1
No files matched your search
@@ -0,0 +1,30 @@
|
||||
import {
|
||||
formatGridRating,
|
||||
resolveGridRating,
|
||||
} from './grid-list.component';
|
||||
|
||||
describe('grid list rating helpers', () => {
|
||||
it('rounds numeric ratings to a single decimal place', () => {
|
||||
expect(formatGridRating(7.243)).toBe('7.2');
|
||||
expect(formatGridRating('6.529')).toBe('6.5');
|
||||
expect(formatGridRating('6')).toBe('6.0');
|
||||
});
|
||||
|
||||
it('prefers imdb ratings before generic ratings when both are present', () => {
|
||||
expect(
|
||||
resolveGridRating({
|
||||
rating: '6.529',
|
||||
rating_imdb: '7.243',
|
||||
})
|
||||
).toBe('7.2');
|
||||
});
|
||||
|
||||
it('falls back to the generic rating when imdb rating is blank', () => {
|
||||
expect(
|
||||
resolveGridRating({
|
||||
rating: '5.67',
|
||||
rating_imdb: ' ',
|
||||
})
|
||||
).toBe('5.7');
|
||||
});
|
||||
});
|
||||
@@ -30,6 +30,30 @@ interface GridListItem {
|
||||
[key: string]: unknown;
|
||||
}
|
||||
|
||||
export function formatGridRating(value: unknown): string | undefined {
|
||||
if (typeof value === 'number' && Number.isFinite(value)) {
|
||||
return value.toFixed(1);
|
||||
}
|
||||
|
||||
if (typeof value !== 'string') {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const trimmed = value.trim();
|
||||
if (!trimmed) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const numericRating = Number.parseFloat(trimmed);
|
||||
return Number.isFinite(numericRating) ? numericRating.toFixed(1) : trimmed;
|
||||
}
|
||||
|
||||
export function resolveGridRating(
|
||||
item: Pick<GridListItem, 'rating' | 'rating_imdb'>
|
||||
): string | undefined {
|
||||
return formatGridRating(item.rating_imdb) ?? formatGridRating(item.rating);
|
||||
}
|
||||
|
||||
@Component({
|
||||
selector: 'app-grid-list',
|
||||
template: `<div
|
||||
@@ -85,7 +109,7 @@ interface GridListItem {
|
||||
/>
|
||||
}
|
||||
</div>
|
||||
@let rating = i.rating ?? i.rating_imdb;
|
||||
@let rating = resolveRating(i);
|
||||
@if (rating) {
|
||||
<div
|
||||
class="rating"
|
||||
@@ -152,6 +176,7 @@ export class GridListComponent {
|
||||
readonly totalPages = input<number>();
|
||||
readonly limit = input<number>();
|
||||
readonly pageSizeOptions = input<number[]>();
|
||||
protected readonly resolveRating = resolveGridRating;
|
||||
|
||||
readonly skeletonRows = computed(() => {
|
||||
const preferredCount = this.limit() ?? 12;
|
||||
|
||||
Reference in new issue
Block a user