@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
TypeScript
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 {};