UNPKG

@livetv-app/tvguide

Version:

An Android TV Live Channels-like Electronic Programme Guide for React DOM and React Native applications.

97 lines (96 loc) 3.81 kB
import React = require('react'); import type { ViewProps } from 'react-native'; import { Channel, Programme } from '../types'; import { Selection } from './context'; import { KeypressResult, ProgrammeGuide as ProgrammeGuideRef, ScrollPosition } from './types'; export interface LayoutChangeEvent { x: number; y: number; width: number; height: number; } export interface ProgrammeGuideProps { channels: Channel[]; programmes: Programme[]; channel?: Channel; internalScrolling?: boolean; /** * If undefined all rows will be rendered. * If null no rows will be rendered; it's expected an object will be provided on the next update. */ scrollPosition?: { contentOffset: { x: number; y: number; }; contentSize: { height: number; width: number; }; layoutMeasurement: { height: number; width: number; }; } | null; scrollOffsetTop?: number; scrollOffsetBottom?: number; onSelectChannel?: (channel: Channel) => void; leftBoundary?: Date; rightBoundary?: Date; onScroll?: (scrollPosition: ScrollPosition) => void; /** Only for React Native TV platforms */ focus?: boolean; language?: string; showChannelLogos?: boolean; /** React Native only */ style?: ViewProps['style']; } interface ProgrammeGuideState { channel: Channel | null; programme: Programme | null; time: Date; leftPosition: Date; width: number; heightDebug: number; heightHeader: number; scrollTop: Channel | null; scrollBottom: Channel | null; } export default class ProgrammeGuide extends React.Component<ProgrammeGuideProps, ProgrammeGuideState> implements ProgrammeGuideRef { state: ProgrammeGuideState; programmes_by_channel: Record<string, Programme[] | undefined>; private headerRowRef; setSelectedChannel: (channel: Channel | null) => void; setSelectedProgramme: (programme: Programme | null) => void; setSelectedTime: (time: Date) => void; setLeftPosition: (leftPosition: Date) => void; private setWidth; readonly selection: Selection & { c: ProgrammeGuide; }; get leftPosition(): Date; constructor(props: ProgrammeGuideProps); componentDidUpdate(prevProps: ProgrammeGuideProps, prevState: ProgrammeGuideState): void; protected setChannel(channel: Channel): void; setChannelUp(): void; setChannelDown(): void; setPreviousProgramme(): void; setNextProgramme(): void; sendSelectKeypress(): KeypressResult.OK | KeypressResult.IGNORED_AS_CHANNEL_ALREADY_SELECTED; sendLongSelectKeypress(): KeypressResult.OK | KeypressResult.IGNORED_AS_NO_PROGRAMME_SELECTED | KeypressResult.IGNORED_AS_PROGRAMME_HAS_NO_ACTIONS; sendUpKeypress(wrap?: boolean): KeypressResult.OK | KeypressResult.IGNORED_DUE_TO_BOUNDARY; sendDownKeypress(wrap?: boolean): KeypressResult.OK | KeypressResult.IGNORED_DUE_TO_BOUNDARY; protected setSelectedTimeAndProgramme(time: Date, scroll?: boolean): void; protected scrollLeftRespectingBoundary(length: number): boolean; protected scrollRightRespectingBoundary(length: number): boolean; sendLeftKeypress(): KeypressResult.OK | KeypressResult.IGNORED_DUE_TO_BOUNDARY; sendRightKeypress(): KeypressResult.OK | KeypressResult.IGNORED_DUE_TO_BOUNDARY; protected shouldRenderChannelRow(total: number, index: number, channel: Channel): boolean; protected calculateRenderedRows(): (number | Channel)[]; protected calculateScrollPosition(): Pick<ProgrammeGuideState, 'scrollTop' | 'scrollBottom'>; render(): JSX.Element; renderDebugView(): JSX.Element; } export declare const CLASS_PREFIX = "tvguide"; export declare const css: string; export {};