本文整理汇总了TypeScript中Immutable.List.getIn方法的典型用法代码示例。如果您正苦于以下问题:TypeScript List.getIn方法的具体用法?TypeScript List.getIn怎么用?TypeScript List.getIn使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Immutable.List
的用法示例。
在下文中一共展示了List.getIn方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1: reducer
export function reducer(state: State = initialState, action: project.Actions): State {
switch(action.type) {
case project.PROJECT_LOAD_SUCCESS: {
/* Handle new project:
* For `new project` there is no defined video, therefore
* the video data from the previous state is used.
*/
const prevDuration = state.getIn(['meta', 'timeline', 'duration'])
const prevVideoMeta = state.getIn(['meta', 'video'])
const prevVideoBlob = state.get('videoBlob', null)
const {meta: {id, timeline, video:videoMeta}, video} = action.payload
if(videoMeta === null) {
timeline.duration = prevDuration
}
if(videoMeta && videoMeta.type === VIDEO_TYPE_URL) {
videoMeta.url = new URL(videoMeta.url)
}
// Create immutable representation
return new ProjectRecordFactory({
videoBlob: video === null ? prevVideoBlob: video,
player: state.get('player', new ProjectPlayerStateRecordFactory()),
meta: ProjectMetaRecordFactory({
id,
video: videoMeta === null ? prevVideoMeta : (videoMeta.type === VIDEO_TYPE_BLOB ? BlobVideoRecordFactory(videoMeta) : UrlVideoRecordFactory(videoMeta)),
timeline: TimelineRecordFactory({
...timeline,
tracks: List(timeline.tracks.map((track: any) => {
const {title: trackTitle} = track.fields
return new TrackRecordFactory({
...track,
fields: TrackFieldsRecordFactory({title: trackTitle}),
annotationStacks: List(track.annotationStacks.map((annotations: any) => {
return List(annotations.map((annotation: any) => {
const {description} = annotation.fields
return new AnnotationRecordFactory({
...annotation,
fields: new AnnotationFieldsRecordFactory({description}),
})
}))
}))
})
}))
})
})
})
}
case project.PROJECT_IMPORT_VIDEO_SUCCESS: {
const payload = action.payload
switch(payload.type) {
case VIDEO_TYPE_BLOB: {
const blobVideo = payload.data as File|Blob
return state
.set('videoBlob', blobVideo)
.setIn(['meta', 'video'], BlobVideoRecordFactory({type: VIDEO_TYPE_BLOB}))
}
case VIDEO_TYPE_URL: {
const videoMeta = {
type: VIDEO_TYPE_URL,
source: payload.source as VideoUrlSource,
url: payload.data as URL
}
return state
.set('videoBlob', null)
.setIn(['meta', 'video'], UrlVideoRecordFactory(videoMeta))
}
}
return state
}
case project.PROJECT_SET_TIMELINE_DURATION: {
return state.setIn(['meta', 'timeline', 'duration'], action.payload.duration)
}
case project.PROJECT_ADD_ANNOTATION: {
const {trackIndex, annotationStackIndex, annotation, source} = action.payload
let placedTrackIndex = trackIndex
let placedAnnotation = annotation
if(source === 'toolbar') {
const tracks = state.getIn(['meta', 'timeline', 'tracks']) as List<Record<Track>>
placedTrackIndex = tracks.findIndex(track => track.get('isActive', false))
placedAnnotation = annotation.set('utc_timestamp', state.getIn(['player', 'currentTime']))
}
const annotationStacks = state.getIn(['meta', 'timeline', 'tracks', placedTrackIndex, 'annotationStacks'])
const newId = nextAnnotationId(state.getIn(['meta', 'timeline']))
const newAnnotation = placedAnnotation.set('id', newId)
const timelineDuration = state.getIn(['meta', 'timeline', 'duration'])
const stacksWithEmbedded = embedAnnotations(timelineDuration, annotationStacks, annotationStackIndex, List([newAnnotation]), List([]))
return state.setIn(['meta', 'timeline', 'tracks', placedTrackIndex, 'annotationStacks'], stacksWithEmbedded)
}
case project.PROJECT_UPDATE_ANNOTATION: {
const {trackIndex, annotationIndex, annotationStackIndex, annotation} = action.payload
const path = ['meta', 'timeline', 'tracks', trackIndex, 'annotationStacks']
const annotationStacks: List<List<Record<Annotation>>> = state.getIn(path)
const prevAnnotation: Record<Annotation> = annotationStacks.getIn([annotationStackIndex, annotationIndex])
const timelineDuration = state.getIn(['meta', 'timeline', 'duration'])
//.........这里部分代码省略.........