11import { Component , cloneElement , Children } from 'react' ;
22import { h , noop } from '../util' ;
33import renderProp from '../util/renderProp' ;
4+ import parseTimeRanges from './parseTimeRanges' ;
45
56export type TVideoEvent = ( event , IVideo ?, IVideoState ?) => void ;
67export type TVideoRenderProp = ( video : Video , state : IVideoState ) => React . ReactElement < any > ;
@@ -51,10 +52,11 @@ export interface IVideoProps extends React.AllHTMLAttributes<any> {
5152}
5253
5354export interface IVideoState {
54- time ?: number ;
55+ buffered ?: any [ ] ;
5556 duration ?: number ;
5657 isPlaying ?: boolean ;
5758 muted ?: boolean ;
59+ time ?: number ;
5860 volume ?: number ;
5961}
6062
@@ -82,10 +84,14 @@ export class Video extends Component<IVideoProps, IVideoState> implements IVideo
8284 this . setState ( {
8385 volume : this . el . volume
8486 } ) ;
87+
88+ this . event ( 'onMount' ) ( this ) ;
8589 }
8690
8791 componentWillUnmount ( ) {
8892 this . el = null ;
93+
94+ this . event ( 'onUnmount' ) ( this ) ;
8995 }
9096
9197 play = ( ) => {
@@ -168,8 +174,11 @@ export class Video extends Component<IVideoProps, IVideoState> implements IVideo
168174 } ;
169175
170176 onDurationChange = ( event ) => {
177+ const { duration, buffered} = this . el ;
178+
171179 this . setState ( {
172- duration : this . el . duration
180+ duration,
181+ buffered : parseTimeRanges ( buffered )
173182 } ) ;
174183
175184 this . event ( 'onDurationChange' ) ( event ) ;
@@ -183,6 +192,14 @@ export class Video extends Component<IVideoProps, IVideoState> implements IVideo
183192 this . event ( 'onTimeUpdate' ) ( event ) ;
184193 } ;
185194
195+ onProgress = ( event ) => {
196+ this . setState ( {
197+ buffered : parseTimeRanges ( this . el . buffered )
198+ } ) ;
199+
200+ this . event ( 'onProgress' ) ( event ) ;
201+ } ;
202+
186203 render ( ) {
187204 const { props, event} = this ;
188205 const { children, render, noJs, ...rest } = props ;
@@ -205,7 +222,7 @@ export class Video extends Component<IVideoProps, IVideoState> implements IVideo
205222 onPause : this . onPause ,
206223 onPlay : this . onPlay ,
207224 onPlaying : event ( 'onPlaying' ) ,
208- onProgress : event ( ' onProgress' ) ,
225+ onProgress : this . onProgress ,
209226 onRateChange : event ( 'onRateChange' ) ,
210227 onSeeked : event ( 'onSeeked' ) ,
211228 onSeeking : event ( 'onSeeking' ) ,
@@ -218,6 +235,6 @@ export class Video extends Component<IVideoProps, IVideoState> implements IVideo
218235 noJs
219236 ) ;
220237
221- return renderProp ( this . props , this , this . state ) ;
238+ return renderProp ( this . props , this , this . state ) || this . video ;
222239 }
223240}
0 commit comments