From 58f1b08ffc956446265ca84c319a33f511e330ab Mon Sep 17 00:00:00 2001 From: NishiPhalke Date: Thu, 10 Sep 2020 17:14:03 -0400 Subject: [PATCH] ability to set display mode for custom tracks --- .github/workflows/build.yml | 68 +++----- .github/workflows/buildimage.yml | 49 ++++++ package.json | 2 +- src/components/customtrack/addtrack.tsx | 23 ++- src/components/customtrack/customtrack.tsx | 47 ++++- src/components/customtrack/types.ts | 15 +- src/components/search/refseqsearchbox.tsx | 3 +- src/components/search/searchbox.tsx | 10 +- src/genomes/default/default.tsx | 190 +++++++++++++-------- src/genomes/default/types.ts | 15 +- src/genomes/genomes.tsx | 1 + src/genomes/hg19/browser.tsx | 42 +++-- src/genomes/hg19/tracks.ts | 2 +- src/genomes/hg19/types.ts | 12 +- src/genomes/hg38/browser.tsx | 43 +++-- src/genomes/hg38/tracks.ts | 2 +- src/genomes/hg38/types.ts | 12 +- src/genomes/mm10/browser.tsx | 41 +++-- src/genomes/mm10/tracks.ts | 2 +- src/genomes/mm10/types.ts | 12 +- src/genomes/page/page.tsx | 47 +++-- src/genomes/page/types.tsx | 21 +-- src/genomes/types.ts | 12 ++ yarn.lock | 6 +- 24 files changed, 429 insertions(+), 248 deletions(-) create mode 100644 .github/workflows/buildimage.yml create mode 100644 src/genomes/types.ts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bac7379..afba62e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,49 +1,31 @@ -name: Build App - -on: - create: - tags: - - v* - -# Environment variables available to all jobs and steps in this workflow -env: - GKE_PROJECT: ${{ secrets.GKE_PROJECT }} - GKE_EMAIL: ${{ secrets.GKE_EMAIL }} - GITHUB_SHA: ${{ github.sha }} - DOCKER_IMAGE_NAME: umms-gb - REGISTRY_HOSTNAME: gcr.io - +name: CI +on: [push] jobs: - setup-build-app: - name: build and push app + build: runs-on: ubuntu-latest + steps: + - name: Begin CI... + uses: actions/checkout@v2 - - name: Checkout - uses: actions/checkout@v2 + - name: Use Node 12 + uses: actions/setup-node@v1 + with: + node-version: 12.x - # Setup gcloud CLI - - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master - with: - version: '270.0.0' - service_account_email: ${{ secrets.GKE_EMAIL }} - service_account_key: ${{ secrets.GKE_KEY }} + - name: Use cached node_modules + uses: actions/cache@v1 + with: + path: node_modules + key: nodeModules-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + nodeModules- + - name: Install dependencies + run: yarn install --frozen-lockfile + env: + CI: true - # Configure docker to use the gcloud command-line tool as a credential helper - - run: | - # Set up docker to authenticate - # via gcloud command-line tool. - gcloud auth configure-docker - - # Build the Docker image - - name: Build - run: | - docker build -t "$REGISTRY_HOSTNAME"/"$GKE_PROJECT"/"$DOCKER_IMAGE_NAME":"${GITHUB_REF/refs\/tags\//}" \ - --build-arg GITHUB_SHA="$GITHUB_SHA" \ - --build-arg GITHUB_REF="$GITHUB_REF" . - - - name: Push Docker Image - run: | - docker push "$REGISTRY_HOSTNAME"/"$GKE_PROJECT"/"$DOCKER_IMAGE_NAME":"${GITHUB_REF/refs\/tags\//}" - - \ No newline at end of file + - name: Build + run: yarn build + env: + CI: true \ No newline at end of file diff --git a/.github/workflows/buildimage.yml b/.github/workflows/buildimage.yml new file mode 100644 index 0000000..bac7379 --- /dev/null +++ b/.github/workflows/buildimage.yml @@ -0,0 +1,49 @@ +name: Build App + +on: + create: + tags: + - v* + +# Environment variables available to all jobs and steps in this workflow +env: + GKE_PROJECT: ${{ secrets.GKE_PROJECT }} + GKE_EMAIL: ${{ secrets.GKE_EMAIL }} + GITHUB_SHA: ${{ github.sha }} + DOCKER_IMAGE_NAME: umms-gb + REGISTRY_HOSTNAME: gcr.io + +jobs: + setup-build-app: + name: build and push app + runs-on: ubuntu-latest + steps: + + - name: Checkout + uses: actions/checkout@v2 + + # Setup gcloud CLI + - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master + with: + version: '270.0.0' + service_account_email: ${{ secrets.GKE_EMAIL }} + service_account_key: ${{ secrets.GKE_KEY }} + + # Configure docker to use the gcloud command-line tool as a credential helper + - run: | + # Set up docker to authenticate + # via gcloud command-line tool. + gcloud auth configure-docker + + # Build the Docker image + - name: Build + run: | + docker build -t "$REGISTRY_HOSTNAME"/"$GKE_PROJECT"/"$DOCKER_IMAGE_NAME":"${GITHUB_REF/refs\/tags\//}" \ + --build-arg GITHUB_SHA="$GITHUB_SHA" \ + --build-arg GITHUB_REF="$GITHUB_REF" . + + - name: Push Docker Image + run: | + docker push "$REGISTRY_HOSTNAME"/"$GKE_PROJECT"/"$DOCKER_IMAGE_NAME":"${GITHUB_REF/refs\/tags\//}" + + \ No newline at end of file diff --git a/package.json b/package.json index 98e03be..c9cd9f1 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "semantic-ui-css": "^2.4.1", "semantic-ui-react": "^1.2.0", "typescript": "^3.9.7", - "umms-gb": "^2.0.17" + "umms-gb": "^2.0.18" }, "devDependencies": { "@testing-library/jest-dom": "^4.2.4", diff --git a/src/components/customtrack/addtrack.tsx b/src/components/customtrack/addtrack.tsx index cb73b93..45b2622 100644 --- a/src/components/customtrack/addtrack.tsx +++ b/src/components/customtrack/addtrack.tsx @@ -1,11 +1,12 @@ import React, { useState } from 'react'; import { AddTrackProps } from './types'; -import { Button, Modal, Message, Input, Radio } from 'semantic-ui-react'; +import { Button, Modal, Message, Input, Radio, Dropdown } from 'semantic-ui-react'; import ColorPicker from './colorpicker'; import { TEST_QUERY } from './queries'; const AddTrack: React.FC = (props) => { const [title, setTitle] = useState(''); + const [displayMode, setDisplayMode] = useState(); const [addBamTrack, setAddBamTrack] = useState(false); const [url, setUrl] = useState(''); const [baiUrl, setBaiUrl] = useState(); @@ -14,7 +15,7 @@ const AddTrack: React.FC = (props) => { const [testing, setTesting] = useState(false); const onAccept = () => { if (url.startsWith('gs://') || baiUrl) { - props.onAccept && props.onAccept([{ url, domain: props.domain, baiUrl, color, title }]); + props.onAccept && props.onAccept([{ url, domain: props.domain, baiUrl, displayMode, color, title }]); return; } setTesting(true); @@ -38,7 +39,7 @@ const AddTrack: React.FC = (props) => { .then(() => { setError(''); setTesting(false); - props.onAccept && props.onAccept([{ url, domain: props.domain, color, title }]); + props.onAccept && props.onAccept([{ url, domain: props.domain, displayMode, color, title }]); }) .catch((e) => { setError(url); @@ -62,6 +63,7 @@ const AddTrack: React.FC = (props) => { )} { let val = data.checked as boolean; @@ -87,6 +89,21 @@ const AddTrack: React.FC = (props) => {
)} + Display Mode:  + { + setDisplayMode(data.value as string); + }} + options={[ + { key: 'dense', text: 'dense', value: 'dense' }, + { key: 'squish', text: 'squish', value: 'squish' }, + { key: 'full', text: 'full', value: 'full' }, + ]} + /> +
+
setColor(color)} />
diff --git a/src/components/customtrack/customtrack.tsx b/src/components/customtrack/customtrack.tsx index 492cc10..f2fd82b 100644 --- a/src/components/customtrack/customtrack.tsx +++ b/src/components/customtrack/customtrack.tsx @@ -1,6 +1,13 @@ import React from 'react'; -import { CustomTrackProps } from './types'; -import { WrappedTrack, WrappedFullBigWig, EmptyTrack, WrappedDenseBigBed } from 'umms-gb'; +import { CustomTrackProps, DEFAULT_BIGBED_DISPLAYMODE, DEFAULT_BIGWIG_DISPLAYMODE } from './types'; +import { + WrappedTrack, + WrappedFullBigWig, + EmptyTrack, + WrappedDenseBigBed, + WrappedSquishBigBed, + WrappedDenseBigWig, +} from 'umms-gb'; import { TrackType, deduceTrackType } from './deducetype'; const CustomTrack: React.FC = (props) => { if (!props.data) { @@ -10,9 +17,12 @@ const CustomTrack: React.FC = (props) => { ); } - switch (deduceTrackType(props.data)) { + const trackType = deduceTrackType(props.data); + const displayMode = + props.displayMode || (trackType === 'BIGBED' ? DEFAULT_BIGBED_DISPLAYMODE : DEFAULT_BIGWIG_DISPLAYMODE); + switch (trackType) { case TrackType.BIGBED: - return ( + return displayMode === 'dense' ? ( = (props) => { titleSize={12} trackMargin={12} /> + ) : ( + ); case TrackType.BIGWIG: - return ( + return displayMode === 'dense' ? ( + + ) : ( void; - onAccept: (modalState: { title: string; url: string; baiUrl?: string; color: string; domain: Domain }[]) => void; + onAccept: ( + modalState: { + title: string; + url: string; + baiUrl?: string; + displayMode?: string; + color: string; + domain: Domain; + }[] + ) => void; }; export interface Domain { @@ -22,6 +31,7 @@ export type CustomTrackProps = { data?: any; id: string; height: number; + displayMode?: string; width: number; title: string; color: string; @@ -29,3 +39,6 @@ export type CustomTrackProps = { onHeightChanged?: (value: number) => void; transform: string; }; + +export const DEFAULT_BIGBED_DISPLAYMODE = 'dense'; +export const DEFAULT_BIGWIG_DISPLAYMODE = 'full'; diff --git a/src/components/search/refseqsearchbox.tsx b/src/components/search/refseqsearchbox.tsx index 3134c6f..5346a62 100644 --- a/src/components/search/refseqsearchbox.tsx +++ b/src/components/search/refseqsearchbox.tsx @@ -11,10 +11,11 @@ const RefSeqSearchBox: React.FC = (props) => { const onSubmit = useCallback(() => { if (selectedGene && isCoordinate(selectedGene.description)) { props.onSearchSubmit && props.onSearchSubmit(selectedGene.description); + return; } let g = selectedGene && selectedGene.description ? selectedGene.description : results && results[0].description; if (g === undefined) return; - props.onSearchSubmit && props.onSearchSubmit(g); + props.onSearchSubmit && isCoordinate(g) && props.onSearchSubmit(g); }, [results, props, selectedGene]); const onSearchChange = useCallback( async (e, { value }) => { diff --git a/src/components/search/searchbox.tsx b/src/components/search/searchbox.tsx index 5c0a324..eb67fed 100644 --- a/src/components/search/searchbox.tsx +++ b/src/components/search/searchbox.tsx @@ -10,11 +10,15 @@ const SearchBox: React.FC = (props) => { const [results, setResults] = useState(); const onSubmit = useCallback(() => { - if (searchVal && isCoordinate(searchVal)) props.onSearchSubmit && props.onSearchSubmit(searchVal); + if (searchVal && isCoordinate(searchVal)) { + props.onSearchSubmit && props.onSearchSubmit(searchVal); + return; + } let gene = selectedsearchVal ? selectedsearchVal : results && results[0]; - if (gene === undefined) return; - props.onSearchSubmit && props.onSearchSubmit(gene.description.split('\n')[1]); + props.onSearchSubmit && + isCoordinate(gene.description.split('\n')[1]) && + props.onSearchSubmit(gene.description.split('\n')[1]); }, [searchVal, results, props, selectedsearchVal]); const onSearchChange = useCallback( async (e, { value }) => { diff --git a/src/genomes/default/default.tsx b/src/genomes/default/default.tsx index de079e5..4f7dcc7 100644 --- a/src/genomes/default/default.tsx +++ b/src/genomes/default/default.tsx @@ -7,82 +7,132 @@ import { GenomeBrowser, WrappedPackTranscriptTrack, GraphQLTranscriptTrack, + WrappedSquishBam, + BamTrack, + WrappedDenseBam, } from 'umms-gb'; import { CustomTrack } from '../../components/customtrack'; import { Container } from 'semantic-ui-react'; -const DefaultBrowser: React.FC = (props) => ( - - - - - - - = (props) => { + let customTracks = props.customTracks?.filter((ct) => !ct.track.baiUrl); + let bamCustomTracks = props.customTracks?.filter((ct) => ct.track.baiUrl); + return ( + + + + + + - - - + + + - - {props.customTracks && props.customTracks!.length > 0 && ( - ({ - ...x.track, - chr1: props.domain.chromosome!, - start: props.domain.start, - end: props.domain.end, - }))} - endpoint="https://ga.staging.wenglab.org/graphql" - width={2000} - transform="translate(0,0)" - id={`customtrack,${props.customTracks!.map((x, i) => i).join(',')}`} + transform={'translate (0,0)'} + assembly={props.assembly} + endpoint={'http://35.201.115.1/graphql'} + id="refseqxenogenes" + queryType={'refseqxenogenes'} > - {props.customTracks!.map((track, i) => ( - + + {customTracks && ( + ({ + ...x.track, + chr1: props.domain.chromosome!, + start: props.domain.start, + end: props.domain.end, + }))} + endpoint="https://ga.staging.wenglab.org/graphql" + width={2000} + transform="translate(0,0)" + id={`customtrack,${customTracks.map((x, i) => i).join(',')}`} + > + {customTracks.map((track, i) => ( + + ))} + + )} + {bamCustomTracks?.map((bt, i) => { + return ( + - ))} - - )} - - -); + track={{ + bamUrl: bt.track.url, + baiUrl: bt.track.baiUrl!!, + chr: props.domain.chromosome!!, + start: props.domain.start, + end: props.domain.end, + }} + endpoint={'https://ga.staging.wenglab.org'} + > + {bt.displayMode === 'dense' ? ( + + ) : ( + + )} + + ); + })} + + + ); +}; export default DefaultBrowser; diff --git a/src/genomes/default/types.ts b/src/genomes/default/types.ts index 3bdfcbf..935610b 100644 --- a/src/genomes/default/types.ts +++ b/src/genomes/default/types.ts @@ -1,19 +1,10 @@ -export interface Domain { - chromosome?: string; - start: number; - end: number; -} +import { customTrack } from '../types'; +import { Domain } from '../types'; export type DefaultProps = { domain: Domain; assembly: string; svgRef?: React.RefObject; onDomainChanged: (domain: Domain) => void; - customTracks?: - | null - | { - title: string; - color: string; - track: { start: number; end: number; chr1: string; url: string; preRenderedWidth: number }; - }[]; + customTracks?: customTrack[]; }; diff --git a/src/genomes/genomes.tsx b/src/genomes/genomes.tsx index f275e99..42407e0 100644 --- a/src/genomes/genomes.tsx +++ b/src/genomes/genomes.tsx @@ -8,6 +8,7 @@ export const genomeConfig: Record< hg38: { browser: Hg38Browser, domain: { chromosome: 'chr1', start: 10248, end: 10356 }, + //domain: { chromosome: 'chr12', start: 53379291, end: 53416942 }, }, hg19: { browser: Hg19Browser, diff --git a/src/genomes/hg19/browser.tsx b/src/genomes/hg19/browser.tsx index d9fb644..e26818a 100644 --- a/src/genomes/hg19/browser.tsx +++ b/src/genomes/hg19/browser.tsx @@ -7,6 +7,7 @@ import { GraphQLTranscriptTrack, WrappedPackTranscriptTrack, BamTrack, + WrappedDenseBam, WrappedSquishBam, GenomeBrowser, } from 'umms-gb'; @@ -21,8 +22,9 @@ import { rampageplus, rampageminus, } from './tracks'; -import { Domain, Hg19BrowserProps } from './types'; +import { Hg19BrowserProps } from './types'; import { CustomTrack } from '../../components/customtrack'; +import { Domain } from '../types'; const tracks = (range: Domain) => [ dnasetrack(range), @@ -158,18 +160,19 @@ const Hg19Browser: React.FC = (props) => { id={`ct${i}`} transform="translate(0,0)" title={track.title} + displayMode={track.displayMode} color={track.color} domain={props.domain} /> ))} )} - {bamCustomTracks?.map((bt) => { + {bamCustomTracks?.map((bt, i) => { return ( = (props) => { }} endpoint={'https://ga.staging.wenglab.org'} > - + {bt.displayMode === 'dense' ? ( + + ) : ( + + )} ); })} diff --git a/src/genomes/hg19/tracks.ts b/src/genomes/hg19/tracks.ts index 7b71159..1383c20 100644 --- a/src/genomes/hg19/tracks.ts +++ b/src/genomes/hg19/tracks.ts @@ -5,7 +5,7 @@ * GraphQL tracksets. */ -import { Domain } from './types'; +import { Domain } from '../types'; /** * Creates a track object for requesting aggregated DNase signal for a given region. diff --git a/src/genomes/hg19/types.ts b/src/genomes/hg19/types.ts index b526605..bf1f18d 100644 --- a/src/genomes/hg19/types.ts +++ b/src/genomes/hg19/types.ts @@ -1,16 +1,8 @@ -export interface Domain { - chromosome?: string; - start: number; - end: number; -} +import { customTrack, Domain } from '../types'; export type Hg19BrowserProps = { domain: Domain; svgRef?: React.RefObject; onDomainChanged: (domain: Domain) => void; - customTracks?: { - title: string; - color: string; - track: { start: number; end: number; chr1: string; url: string; baiUrl?: string; preRenderedWidth: number }; - }[]; + customTracks?: customTrack[]; }; diff --git a/src/genomes/hg38/browser.tsx b/src/genomes/hg38/browser.tsx index 7581696..adf9b6b 100644 --- a/src/genomes/hg38/browser.tsx +++ b/src/genomes/hg38/browser.tsx @@ -1,4 +1,4 @@ -import { Hg38BrowserProps, Domain } from './types'; +import { Hg38BrowserProps } from './types'; import React from 'react'; import { RulerTrack, @@ -8,6 +8,7 @@ import { GraphQLTranscriptTrack, WrappedPackTranscriptTrack, GenomeBrowser, + WrappedDenseBam, WrappedSquishBam, BamTrack, } from 'umms-gb'; @@ -22,6 +23,8 @@ import { } from './tracks'; import { CustomTrack } from '../../components/customtrack'; import { Container } from 'semantic-ui-react'; +import { Domain } from '../types'; + const tracks = (range: Domain) => [ dnasetrack(range), h3k4me3track(range), @@ -155,6 +158,7 @@ const Hg38Browser: React.FC = (props) => { height={50} id={`ct${i}`} transform="translate(0,0)" + displayMode={track.displayMode} title={track.title} color={track.color} domain={props.domain} @@ -162,12 +166,12 @@ const Hg38Browser: React.FC = (props) => { ))} )} - {bamCustomTracks?.map((bt) => { + {bamCustomTracks?.map((bt, i) => { return ( = (props) => { }} endpoint={'https://ga.staging.wenglab.org'} > - + {bt.displayMode === 'dense' ? ( + + ) : ( + + )} ); })} diff --git a/src/genomes/hg38/tracks.ts b/src/genomes/hg38/tracks.ts index ea6c4bb..f34c7da 100644 --- a/src/genomes/hg38/tracks.ts +++ b/src/genomes/hg38/tracks.ts @@ -5,7 +5,7 @@ * GraphQL tracksets. */ -import { Domain } from './types'; +import { Domain } from '../types'; /** * Creates a track object for requesting aggregated DNase signal for a given region. diff --git a/src/genomes/hg38/types.ts b/src/genomes/hg38/types.ts index d6e63e5..5e37d59 100644 --- a/src/genomes/hg38/types.ts +++ b/src/genomes/hg38/types.ts @@ -1,16 +1,8 @@ -export interface Domain { - chromosome?: string; - start: number; - end: number; -} +import { customTrack, Domain } from '../types'; export type Hg38BrowserProps = { domain: Domain; svgRef?: React.RefObject; onDomainChanged: (domain: Domain) => void; - customTracks?: { - title: string; - color: string; - track: { start: number; end: number; chr1: string; url: string; baiUrl?: string; preRenderedWidth: number }; - }[]; + customTracks?: customTrack[]; }; diff --git a/src/genomes/mm10/browser.tsx b/src/genomes/mm10/browser.tsx index cfc361f..713d221 100644 --- a/src/genomes/mm10/browser.tsx +++ b/src/genomes/mm10/browser.tsx @@ -10,9 +10,10 @@ import { WrappedSquishBam, BamTrack, GenomeBrowser, + WrappedDenseBam, } from 'umms-gb'; import { dnasetrack, conservationtrack } from './tracks'; -import { Domain } from './types'; +import { Domain } from '../types'; import { CustomTrack } from '../../components/customtrack'; import { Container } from 'semantic-ui-react'; @@ -90,6 +91,7 @@ const Mm10Browser: React.FC = (props) => { = (props) => { ))} )} - {bamCustomTracks?.map((bt) => { + {bamCustomTracks?.map((bt, i) => { return ( = (props) => { }} endpoint={'https://ga.staging.wenglab.org'} > - + {bt.displayMode === 'dense' ? ( + + ) : ( + + )} ); })} diff --git a/src/genomes/mm10/tracks.ts b/src/genomes/mm10/tracks.ts index f7963b5..ec7ac52 100644 --- a/src/genomes/mm10/tracks.ts +++ b/src/genomes/mm10/tracks.ts @@ -1,4 +1,4 @@ -import { Domain } from './types'; +import { Domain } from '../types'; /** * tracks.jsx diff --git a/src/genomes/mm10/types.ts b/src/genomes/mm10/types.ts index 3fe3133..3c64575 100644 --- a/src/genomes/mm10/types.ts +++ b/src/genomes/mm10/types.ts @@ -1,17 +1,9 @@ -export interface Domain { - chromosome?: string; - start: number; - end: number; -} +import { customTrack, Domain } from '../types'; export type Mm10BrowserProps = { domain: Domain; assembly: string; svgRef?: React.RefObject; onDomainChanged: (domain: Domain) => void; - customTracks?: { - title: string; - color: string; - track: { start: number; end: number; chr1: string; url: string; baiUrl?: string; preRenderedWidth: number }; - }[]; + customTracks?: customTrack[]; }; diff --git a/src/genomes/page/page.tsx b/src/genomes/page/page.tsx index 317a4d6..efe8286 100644 --- a/src/genomes/page/page.tsx +++ b/src/genomes/page/page.tsx @@ -1,4 +1,5 @@ -import { GenomeBrowserPageProps, AssemblyInfo, customTrack, Domain } from './types'; +import { GenomeBrowserPageProps, AssemblyInfo } from './types'; +import { customTrack, Domain } from '../types'; import { genomeConfig } from '../genomes'; import React, { useState, useEffect, useRef } from 'react'; import GenomePageMenu from './menu'; @@ -146,24 +147,36 @@ const GenomeBrowserPage: React.FC = (props) => { [domain, chromLength] ); const onModalAccept = ( - modalState: { title: string; url: string; baiUrl?: string; color: string; domain: Domain }[] | undefined + modalState: + | { title: string; url: string; baiUrl?: string; displayMode?: string; color: string; domain: Domain }[] + | undefined ) => { - let tracks = + let tracks: customTrack[] | undefined = modalState && - modalState.map((m: { title: string; url: string; baiUrl?: string; color: string; domain: Domain }) => { - return { - title: m.title, - color: m.color, - track: { - start: m.domain.start, - end: m.domain.end, - chr1: m.domain.chromosome!!, - url: m.url, - baiUrl: m.baiUrl, - preRenderedWidth: 1850, - }, - }; - }); + modalState.map( + (m: { + title: string; + url: string; + baiUrl?: string; + displayMode?: string; + color: string; + domain: Domain; + }) => { + return { + title: m.title, + color: m.color, + displayMode: m.displayMode, + track: { + start: m.domain.start, + end: m.domain.end, + chr1: m.domain.chromosome!!, + url: m.url, + baiUrl: m.baiUrl, + preRenderedWidth: 1850, + }, + }; + } + ); let cTracks = customTracks !== undefined diff --git a/src/genomes/page/types.tsx b/src/genomes/page/types.tsx index 56e5dc6..e55928b 100644 --- a/src/genomes/page/types.tsx +++ b/src/genomes/page/types.tsx @@ -1,8 +1,5 @@ -export interface Domain { - chromosome?: string; - start: number; - end: number; -} +import { customTrack, Domain } from '../types'; + export type GenomeBrowserPageProps = { assembly: string; session?: { @@ -15,12 +12,6 @@ export type AssemblyInfo = { species: string; name: string; description: string export type SessionModalProps = { open: boolean; data: string; onClose: () => void; warn: number }; -export interface Domain { - chromosome?: string; - start: number; - end: number; -} - export type MetadataModalProps = { open: boolean; onClose: () => void; @@ -32,15 +23,11 @@ export type MetadataModalProps = { | { title: string; url: string; + baiUrl?: string; + displayMode?: string; color: string; domain: Domain; }[] | undefined ) => void; }; - -export type customTrack = { - title: string; - color: string; - track: { start: number; end: number; chr1: string; url: string; baiUrl?: string; preRenderedWidth: number }; -}; diff --git a/src/genomes/types.ts b/src/genomes/types.ts new file mode 100644 index 0000000..75e2d5a --- /dev/null +++ b/src/genomes/types.ts @@ -0,0 +1,12 @@ +export type customTrack = { + title: string; + color: string; + displayMode?: string; + track: { start: number; end: number; chr1: string; url: string; baiUrl?: string; preRenderedWidth: number }; +}; + +export interface Domain { + chromosome?: string; + start: number; + end: number; +} diff --git a/yarn.lock b/yarn.lock index f17be76..8f70dae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9280,9 +9280,9 @@ typescript@^3.9.7: version "3.9.7" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" -umms-gb@^2.0.17: - version "2.0.17" - resolved "https://registry.yarnpkg.com/umms-gb/-/umms-gb-2.0.17.tgz#2ba5663b72c2f64a592ac839223ed301ae948713" +umms-gb@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/umms-gb/-/umms-gb-2.0.18.tgz#3d21b518c761d68b0065067b3738043995c9f08a" dependencies: "@types/uuid" "^8.0.0" bigwig-reader "^1.3.1"