import { store, history, dispatch } from 'app/store' import { TEXT_ANNOTATION_TYPES, MEDIA_ANNOTATION_TYPES, UTILITY_ANNOTATION_TYPES, } from 'app/constants' export const buildParagraphs = annotationOrder => { const state = store.getState() const { lookup: annotationLookup } = state.annotation.index const { lookup: paragraphLookup } = state.paragraph.index let currentParagraph = {} let sectionCount = 0 const paragraphs = [] // loop over the annotations in time order annotationOrder.forEach((annotation_id, i) => { const annotation = annotationLookup[annotation_id] const paragraph = paragraphLookup[annotation.paragraph_id] // if this annotation is a utility (curtain, gallery instructions), then skip it if (UTILITY_ANNOTATION_TYPES.has(annotation.type)) { return } // if this annotation is media, then insert it after the current paragraph if (MEDIA_ANNOTATION_TYPES.has(annotation.type)) { // add option to hide the citation from the transcript if (!annotation.settings.hideCitation) { paragraphs.push({ id: ('index_' + i), type: annotation.type, start_ts: annotation.start_ts, end_ts: 0, annotations: [annotation], }) } return } // if this annotation is from a different paragraph, make a new paragraph if (annotation.type === 'section_heading' || annotation.type === 'heading_text' || annotation.paragraph_id !== currentParagraph.id) { const paragraph_type = getParagraphType(annotation, paragraph) currentParagraph = { id: annotation.paragraph_id || ('index_' + i), type: paragraph_type, start_ts: annotation.start_ts, end_ts: 0, annotations: [], } if (annotation.type === 'section_heading') { currentParagraph.sectionIndex = sectionCount++ currentParagraph.id = 'section_' + currentParagraph.sectionIndex } paragraphs.push(currentParagraph) } // if this annotation is a paragraph_end, set the end timestamp if (annotation.type === 'paragraph_end') { currentParagraph.end_ts = annotation.start_ts } // otherwise, just append this annotation to the paragraph else { currentParagraph.annotations.push(annotation) } }) // finally, go over the paragraphs and update their end_ts, if none is set for (let i = 0; i < (paragraphs.length - 1); i++) { if (!paragraphs[i].end_ts) { paragraphs[i].end_ts = paragraphs[i+1].start_ts - 0.1 } } return paragraphs } const getParagraphType = (annotation, paragraph) => { if (annotation.type === 'section_heading') { return annotation.type } if (annotation.type === 'heading_text') { return annotation.type } if (!paragraph) { return annotation.type } return paragraph.type }