UNPKG

@livetv-app/tvguide

Version:

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

116 lines (115 loc) 4.12 kB
import React = require('react'); import { Channel, Programme } from '../types'; import { Selection } from './context'; import { KeypressResult, ProgrammeGuide as ProgrammeGuideRef } from './types'; import type { ProgrammeGuideProps } from './tvguide.js'; export { ProgrammeGuideProps }; interface ProgrammeGuideState { channel: Channel | null; programme: Programme | null; time: Date; leftPosition: Date; width: number; heightDebug: number; heightHeader: number; scrollTop: Channel | null; scrollBottom: Channel | null; internalScrollPosition: { contentOffset: { x: number; y: number; }; contentSize: { height: number; width: number; }; layoutMeasurement: { height: number; width: number; }; } | null; } declare type ChannelOrPlaceholderRow = { index: number; channel: Channel; } | { start: number; end: number; channels: Channel[]; height: number; }; export default class ProgrammeGuide extends React.Component<ProgrammeGuideProps, ProgrammeGuideState> implements ProgrammeGuideRef { state: ProgrammeGuideState; programmes_by_channel: Record<string, Programme[] | undefined>; 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 setSelectedChannelAndProgramme(channel: Channel): void; 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(): ChannelOrPlaceholderRow[]; protected calculateScrollPosition(): Pick<ProgrammeGuideState, 'scrollTop' | 'scrollBottom'>; render(): JSX.Element; renderDebugView(): JSX.Element; private _handleKeypressFromDebug; } export declare const styles: { container: { flex: number; maxHeight: string; padding: number; paddingRight: number; paddingBottom: number; borderRadius: number; shadowColor: string; shadowOpacity: number; shadowRadius: number; }; header: { backgroundColor: string; borderTopLeftRadius: number; overflow: "visible"; }; channelRowContainer: { overflow: "hidden"; }; channelRowContainerLastRow: { marginBottom: number; }; channelRowPlaceholder: { backgroundColor: string; }; channelRowPlaceholderNotFirstRow: { borderTopColor: string; borderTopWidth: number; }; channelRowPlaceholderLastRow: { borderBottomLeftRadius: number; }; expandScroller: { position: "absolute"; height: string; top: number; }; };