Skip to content

Commit 0d7bdd7

Browse files
authored
Merge pull request #3187 from OpenNeuroOrg/edf-viewer
feat(app): Add Neurosift viewer for EDF and NWB files
2 parents 1c1e0d3 + 149a8ea commit 0d7bdd7

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

packages/openneuro-app/src/scripts/dataset/files/file-viewer-type.jsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import FileViewerJson from "./viewers/file-viewer-json.jsx"
66
import FileViewerTsv from "./viewers/file-viewer-tsv.jsx"
77
import FileViewerCsv from "./viewers/file-viewer-csv.jsx"
88
import FileViewerHtml from "./viewers/file-viewer-html.jsx"
9+
import { FileViewerNeurosift } from "./viewers/file-viewer-neurosift"
910

1011
/**
1112
* Choose the right viewer for each file type
@@ -34,6 +35,10 @@ const FileViewerType = ({ path, url, data }) => {
3435
return <FileViewerCsv data={data} />
3536
} else if (path.endsWith(".html")) {
3637
return <FileViewerHtml data={data} />
38+
} else if (path.endsWith(".edf")) {
39+
return <FileViewerNeurosift url={url} filetype="edf" />
40+
} else if (path.endsWith(".nwb")) {
41+
return <FileViewerNeurosift url={url} filetype="nwb" />
3742
} else {
3843
return (
3944
<div className="file-viewer-fallback">
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import React from "react"
2+
import { render, screen } from "@testing-library/react"
3+
import { FileViewerNeurosift } from "../file-viewer-neurosift"
4+
5+
describe("File Viewer - EDF", () => {
6+
it("renders an iframe with a src value", () => {
7+
render(
8+
<FileViewerNeurosift
9+
url="https://example.com/example.edf"
10+
filetype="edf"
11+
/>,
12+
)
13+
expect(screen.getByTitle("Neurosift viewer")).toBeInTheDocument()
14+
})
15+
})
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import React from "react"
2+
import styled from "@emotion/styled"
3+
4+
const ScaledIframe = styled.iframe`
5+
width: 100%;
6+
height: 50vh;
7+
border: none;
8+
`
9+
10+
interface FileViewerNeurosiftProps {
11+
url: string
12+
filetype: "nwb" | "edf"
13+
}
14+
15+
/**
16+
* Viewer embedding Neurosift for EDF and NWB data
17+
*/
18+
export const FileViewerNeurosift = (
19+
{ url, filetype }: FileViewerNeurosiftProps,
20+
) => {
21+
const viewerUrl =
22+
`https://neurosift.app/?p=/${filetype}&embedded=1&url=${url}`
23+
return <ScaledIframe src={viewerUrl} title="Neurosift viewer" />
24+
}
25+
26+
export default FileViewerNeurosift

0 commit comments

Comments
 (0)