Skip to content

Commit c7a9dd2

Browse files
authored
Update: Hook up preview to transcript and keyword cards (#65)
1 parent 3040cc6 commit c7a9dd2

8 files changed

Lines changed: 49 additions & 21 deletions

File tree

src/components/ContentExplorer/ContentExplorer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1240,8 +1240,8 @@ class ContentExplorer extends Component<DefaultProps, Props, State> {
12401240
/* eslint-disable jsx-a11y/no-static-element-interactions */
12411241
/* eslint-disable jsx-a11y/no-noninteractive-tabindex */
12421242
return (
1243-
<div id={this.id} className={styleClassName} ref={measureRef} onKeyDown={this.onKeyDown} tabIndex={0}>
1244-
<div className='buik-app-element'>
1243+
<div id={this.id} className={styleClassName} ref={measureRef}>
1244+
<div className='buik-app-element' onKeyDown={this.onKeyDown} tabIndex={0}>
12451245
<Header
12461246
view={view}
12471247
isSmall={isSmall}

src/components/ContentPicker/ContentPicker.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -984,8 +984,8 @@ class ContentPicker extends Component<DefaultProps, Props, State> {
984984
/* eslint-disable jsx-a11y/no-static-element-interactions */
985985
/* eslint-disable jsx-a11y/no-noninteractive-tabindex */
986986
return (
987-
<div id={this.id} className={styleClassName} ref={measureRef} onKeyDown={this.onKeyDown} tabIndex={0}>
988-
<div className='buik-app-element'>
987+
<div id={this.id} className={styleClassName} ref={measureRef}>
988+
<div className='buik-app-element' onKeyDown={this.onKeyDown} tabIndex={0}>
989989
<Header
990990
view={view}
991991
isSmall={isSmall}

src/components/ContentPreview/Header.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ const Header = ({ file, showSidebar, onClose, getLocalizedMessage, showSidebarBu
2626
const name = file ? file.name : '';
2727
const close = getLocalizedMessage('buik.modal.dialog.share.button.close');
2828
const sidebar = showSidebar
29-
? getLocalizedMessage('buik.modal.preview.dialog.button.sidebar.show.title')
30-
: getLocalizedMessage('buik.modal.preview.dialog.button.sidebar.hide.title');
29+
? getLocalizedMessage('buik.modal.preview.dialog.button.sidebar.hide.title')
30+
: getLocalizedMessage('buik.modal.preview.dialog.button.sidebar.show.title');
3131

3232
return (
3333
<div className='bcpr-header'>

src/components/ContentPreview/SidebarSkills.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ function getCard(skill: SkillData, getPreviewer: Function) {
2121
const { skills_data_type } = skill;
2222
switch (skills_data_type) {
2323
case 'keyword':
24-
return <Keywords skill={skill} />;
24+
return <Keywords skill={skill} getPreviewer={getPreviewer} />;
2525
case 'timeline':
2626
return <Timelines skill={skill} getPreviewer={getPreviewer} />;
2727
case 'transcript':
28-
return <Transcript skill={skill} />;
28+
return <Transcript skill={skill} getPreviewer={getPreviewer} />;
2929
default:
3030
return null;
3131
}

src/components/Keywords/Keywords.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import { Timeline } from '../Timeline';
1010
import type { SkillData, SkillDataEntry } from '../../flowTypes';
1111

1212
type Props = {
13-
skill: SkillData
13+
skill: SkillData,
14+
getPreviewer?: Function
1415
};
1516

1617
type State = {
@@ -26,7 +27,7 @@ class FileKeywords extends PureComponent<void, Props, State> {
2627
};
2728

2829
render() {
29-
const { skill }: Props = this.props;
30+
const { skill, getPreviewer }: Props = this.props;
3031
const { entries, duration }: SkillData = skill;
3132
const { keyword }: State = this.state;
3233
return (
@@ -41,7 +42,12 @@ class FileKeywords extends PureComponent<void, Props, State> {
4142
Array.isArray(keyword.appears) &&
4243
keyword.appears.length > 0 &&
4344
<div className='buik-timelines'>
44-
<Timeline type={keyword.type} timeslices={keyword.appears} duration={duration} />
45+
<Timeline
46+
type={keyword.type}
47+
timeslices={keyword.appears}
48+
duration={duration}
49+
getPreviewer={getPreviewer}
50+
/>
4551
</div>}
4652
</div>
4753
);

src/components/Transcript/Transcript.js

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,23 @@ import AutoSizer from 'react-virtualized/dist/es/AutoSizer';
1010
import { CellMeasurer, CellMeasurerCache } from 'react-virtualized/dist/es/CellMeasurer';
1111
import 'react-virtualized/styles.css';
1212
import { formatTime } from '../../util/datetime';
13-
import type { SkillData } from '../../flowTypes';
13+
import type { SkillData, TimeSlice, SkillDataEntry } from '../../flowTypes';
1414
import './Transcript.scss';
1515

1616
type Props = {
17-
skill: SkillData
17+
skill: SkillData,
18+
getPreviewer?: Function
1819
};
1920

2021
const cache = new CellMeasurerCache({
2122
minHeight: 20,
2223
fixedWidth: true
2324
});
2425

25-
const Transcript = ({ skill: { entries } }: Props) =>
26+
const isValidStartTime = (cellData?: TimeSlice[]): boolean =>
27+
Array.isArray(cellData) && !!cellData[0] && typeof cellData[0].start === 'number';
28+
29+
const Transcript = ({ skill: { entries }, getPreviewer }: Props) =>
2630
<AutoSizer disableHeight>
2731
{({ width }) =>
2832
<Table
@@ -35,18 +39,29 @@ const Transcript = ({ skill: { entries } }: Props) =>
3539
rowGetter={({ index }) => entries[index]}
3640
className='buik-transcript'
3741
deferredMeasurementCache={cache}
42+
onRowClick={({ rowData }: { rowData: SkillDataEntry }): void => {
43+
const viewer = getPreviewer ? getPreviewer() : null;
44+
const cellData = rowData.appears;
45+
if (
46+
isValidStartTime(cellData) &&
47+
viewer &&
48+
viewer.isLoaded() &&
49+
!viewer.isDestroyed() &&
50+
typeof viewer.play === 'function'
51+
) {
52+
// $FlowFixMe Already checked above
53+
const { start, end } = cellData[0];
54+
viewer.play(start, end);
55+
}
56+
}}
3857
>
3958
<Column
4059
dataKey='appears'
4160
className='buik-transcript-time-column'
4261
width={45}
4362
flexShrink={0}
44-
cellRenderer={({ cellData }): string => {
45-
if (Array.isArray(cellData) && !!cellData[0] && typeof cellData[0].start === 'number') {
46-
return formatTime(cellData[0].start);
47-
}
48-
return '--';
49-
}}
63+
cellRenderer={({ cellData }): string =>
64+
isValidStartTime(cellData) ? formatTime(cellData[0].start) : '--'}
5065
/>
5166
<Column
5267
dataKey='text'

src/components/Transcript/Transcript.scss

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,14 @@
66

77
// sass-lint:disable class-name-format
88
.ReactVirtualized__Table__Grid {
9+
cursor: pointer;
910
outline: none;
11+
12+
.ReactVirtualized__Table__row:focus,
13+
.ReactVirtualized__Table__row:active {
14+
background-color: $lighter-light-blue;
15+
outline: none;
16+
}
1017
}
1118
}
1219

test/preview.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
window.onload = function() {
2323
const { ContentExplorer } = Box;
2424
const explorer = new ContentExplorer();
25-
explorer.show('0', 'HlswnEPcgSbDR2KC9CQeMLwcLohSovTp', {
25+
explorer.show('0', '7F3tLTWAqInxn3ZEeAYSeM2KzFqraCHy', {
2626
hasPreviewSidebar: true
2727
});
2828
}

0 commit comments

Comments
 (0)