Skip to content

Commit

Permalink
Fix error with tooltips in embedded components in vite dev mode (#4612)
Browse files Browse the repository at this point in the history
  • Loading branch information
cmdcolin authored Oct 21, 2024
1 parent 6f4ccbd commit 4608823
Show file tree
Hide file tree
Showing 25 changed files with 404 additions and 9 deletions.
7 changes: 7 additions & 0 deletions component_tests/lgv-vite/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
packed/
/node_modules
/coverage
/build
yarn.lock
cypress/screenshots/
cypress/videos/
58 changes: 58 additions & 0 deletions component_tests/lgv-vite/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# React + TypeScript + Vite

This template provides a minimal setup to get React working in Vite with HMR and
some ESLint rules.

Currently, two official plugins are available:

- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md)
uses [Babel](https://babeljs.io/) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc)
uses [SWC](https://swc.rs/) for Fast Refresh

## Expanding the ESLint configuration

If you are developing a production application, we recommend updating the
configuration to enable type aware lint rules:

- Configure the top-level `parserOptions` property like this:

```js
export default tseslint.config({
languageOptions: {
// other options...
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
},
})
```

- Replace `tseslint.configs.recommended` to
`tseslint.configs.recommendedTypeChecked` or
`tseslint.configs.strictTypeChecked`
- Optionally add `...tseslint.configs.stylisticTypeChecked`
- Install
[eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and
update the config:

```js
// eslint.config.js
import react from 'eslint-plugin-react'

export default tseslint.config({
// Set the react version
settings: { react: { version: '18.3' } },
plugins: {
// Add the react plugin
react,
},
rules: {
// other rules...
// Enable its recommended rules
...react.configs.recommended.rules,
...react.configs['jsx-runtime'].rules,
},
})
```
28 changes: 28 additions & 0 deletions component_tests/lgv-vite/eslint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import tseslint from 'typescript-eslint'

export default tseslint.config(
{ ignores: ['dist'] },
{
extends: [js.configs.recommended, ...tseslint.configs.recommended],
files: ['**/*.{ts,tsx}'],
languageOptions: {
ecmaVersion: 2020,
globals: globals.browser,
},
plugins: {
'react-hooks': reactHooks,
'react-refresh': reactRefresh,
},
rules: {
...reactHooks.configs.recommended.rules,
'react-refresh/only-export-components': [
'warn',
{ allowConstantExport: true },
],
},
},
)
13 changes: 13 additions & 0 deletions component_tests/lgv-vite/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + React + TS</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
54 changes: 54 additions & 0 deletions component_tests/lgv-vite/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
{
"name": "lgv-vite",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"lint": "eslint .",
"preview": "vite preview"
},
"dependencies": {
"@jbrowse/react-linear-genome-view": "^2.0.0",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
"resolutions": {
"@jbrowse/core": "file:./packed/jbrowse-core.tgz",
"@jbrowse/plugin-alignments": "file:./packed/jbrowse-plugin-alignments.tgz",
"@jbrowse/plugin-arc": "file:./packed/jbrowse-plugin-arc.tgz",
"@jbrowse/plugin-authentication": "file:./packed/jbrowse-plugin-authentication.tgz",
"@jbrowse/plugin-bed": "file:./packed/jbrowse-plugin-bed.tgz",
"@jbrowse/plugin-circular-view": "file:./packed/jbrowse-plugin-circular-view.tgz",
"@jbrowse/plugin-config": "file:./packed/jbrowse-plugin-config.tgz",
"@jbrowse/plugin-data-management": "file:./packed/jbrowse-plugin-data-management.tgz",
"@jbrowse/plugin-gccontent": "file:./packed/jbrowse-plugin-gccontent.tgz",
"@jbrowse/plugin-gff3": "file:./packed/jbrowse-plugin-gff3.tgz",
"@jbrowse/plugin-legacy-jbrowse": "file:./packed/jbrowse-plugin-legacy-jbrowse.tgz",
"@jbrowse/plugin-linear-genome-view": "file:./packed/jbrowse-plugin-linear-genome-view.tgz",
"@jbrowse/plugin-sequence": "file:./packed/jbrowse-plugin-sequence.tgz",
"@jbrowse/plugin-svg": "file:./packed/jbrowse-plugin-svg.tgz",
"@jbrowse/plugin-trix": "file:./packed/jbrowse-plugin-trix.tgz",
"@jbrowse/plugin-variants": "file:./packed/jbrowse-plugin-variants.tgz",
"@jbrowse/plugin-wiggle": "file:./packed/jbrowse-plugin-wiggle.tgz",
"@jbrowse/product-core": "file:./packed/jbrowse-product-core.tgz",
"@jbrowse/sv-core": "file:./packed/jbrowse-sv-core.tgz",
"@jbrowse/embedded-core": "file:./packed/jbrowse-embedded-core.tgz",
"@jbrowse/react-linear-genome-view": "file:./packed/jbrowse-react-linear-genome-view.tgz",
"@mui/icons-material": "6.0.2"
},
"devDependencies": {
"@eslint/js": "^9.11.1",
"@types/react": "^18.3.10",
"@types/react-dom": "^18.3.0",
"@vitejs/plugin-react": "^4.3.2",
"eslint": "^9.11.1",
"eslint-plugin-react-hooks": "^5.1.0-rc.0",
"eslint-plugin-react-refresh": "^0.4.12",
"globals": "^15.9.0",
"typescript": "^5.5.3",
"typescript-eslint": "^8.7.0",
"vite": "^5.4.8"
}
}
Binary file added component_tests/lgv-vite/public/favicon.ico
Binary file not shown.
43 changes: 43 additions & 0 deletions component_tests/lgv-vite/public/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Only files inside the `public` folder can be referenced from the HTML.
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
work correctly both with client-side routing and a non-root public URL.
Learn how to configure a non-root public URL by running `npm run build`.
-->
<title>React App</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<!--
This HTML file is a template.
If you open it directly in the browser, you will see an empty page.
You can add webfonts, meta tags, or analytics to this file.
The build step will place the bundled scripts into the <body> tag.
To begin the development, run `npm start` or `yarn start`.
To create a production bundle, use `npm run build` or `yarn build`.
-->
</body>
</html>
3 changes: 3 additions & 0 deletions component_tests/lgv-vite/public/robots.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:
1 change: 1 addition & 0 deletions component_tests/lgv-vite/public/vite.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file added component_tests/lgv-vite/public/volvox.2bit
Binary file not shown.
30 changes: 30 additions & 0 deletions component_tests/lgv-vite/src/App.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import React, { useEffect, useState } from 'react'
import {
createViewState,
JBrowseLinearGenomeView,
} from '@jbrowse/react-linear-genome-view'

import assembly from './assembly'
import tracks from './tracks'

type ViewModel = ReturnType<typeof createViewState>

export default function View() {
const [viewState, setViewState] = useState<ViewModel>()

useEffect(() => {
const state = createViewState({
assembly,
tracks,
location: 'ctgA:1-100',
})
state.session.view.showTrack('volvox_cram')
setViewState(state)
}, [])

if (!viewState) {
return null
}

return <JBrowseLinearGenomeView viewState={viewState} />
}
42 changes: 42 additions & 0 deletions component_tests/lgv-vite/src/assembly.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
const assembly = {
name: 'volvox',
aliases: ['vvx'],
sequence: {
type: 'ReferenceSequenceTrack',
trackId: 'volvox_refseq',
metadata: {
date: '2020-08-20',
},
formatAbout: {
hideUris: true,
config: "jexl:{extraField:'important data'}",
},
adapter: {
type: 'TwoBitAdapter',
twoBitLocation: {
uri: 'volvox.2bit',
locationType: 'UriLocation',
},
},
},
refNameAliases: {
adapter: {
type: 'FromConfigAdapter',
adapterId: 'W6DyPGJ0UU',
features: [
{
refName: 'ctgA',
uniqueId: 'alias1',
aliases: ['A', 'contigA'],
},
{
refName: 'ctgB',
uniqueId: 'alias2',
aliases: ['B', 'contigB'],
},
],
},
},
}

export default assembly
13 changes: 13 additions & 0 deletions component_tests/lgv-vite/src/index.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}

code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}
11 changes: 11 additions & 0 deletions component_tests/lgv-vite/src/main.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import React from 'react'
import ReactDOM from 'react-dom'
import './index.css'
import App from './App'

ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root'),
)
1 change: 1 addition & 0 deletions component_tests/lgv-vite/src/react-app-env.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/// <reference types="react-scripts" />
5 changes: 5 additions & 0 deletions component_tests/lgv-vite/src/setupTests.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// jest-dom adds custom jest matchers for asserting on DOM nodes.
// allows you to do things like:
// expect(element).toHaveTextContent(/react/i)
// learn more: https://github.com/testing-library/jest-dom
import '@testing-library/jest-dom'
29 changes: 29 additions & 0 deletions component_tests/lgv-vite/src/tracks.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
const tracks = [
{
type: 'AlignmentsTrack',
trackId: 'volvox_cram',
name: 'volvox-sorted.cram',
assemblyNames: ['volvox'],
category: ['Alignments'],
adapter: {
type: 'CramAdapter',
cramLocation: {
uri: 'volvox-sorted.cram',
locationType: 'UriLocation',
},
craiLocation: {
uri: 'volvox-sorted.cram.crai',
locationType: 'UriLocation',
},
sequenceAdapter: {
type: 'TwoBitAdapter',
twoBitLocation: {
uri: 'volvox.2bit',
locationType: 'UriLocation',
},
},
},
},
]

export default tracks
24 changes: 24 additions & 0 deletions component_tests/lgv-vite/tsconfig.app.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,

/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
"jsx": "react-jsx",

/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": ["src"]
}
7 changes: 7 additions & 0 deletions component_tests/lgv-vite/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"files": [],
"references": [
{ "path": "./tsconfig.app.json" },
{ "path": "./tsconfig.node.json" }
]
}
Loading

0 comments on commit 4608823

Please sign in to comment.