diff --git a/public/flash-walkthrough-poster.svg b/public/flash-walkthrough-poster.svg new file mode 100644 index 00000000..f4291102 --- /dev/null +++ b/public/flash-walkthrough-poster.svg @@ -0,0 +1,18 @@ + + + + + + flash.comma.ai + A concise walkthrough for flashing AGNOS + + + + + + + Connect your comma device + Choose the image branch + Keep power stable while flashing + + diff --git a/public/flash-walkthrough.mp4 b/public/flash-walkthrough.mp4 new file mode 100644 index 00000000..205f9c91 Binary files /dev/null and b/public/flash-walkthrough.mp4 differ diff --git a/src/app/App.test.jsx b/src/app/App.test.jsx index 206de720..a4b3c386 100644 --- a/src/app/App.test.jsx +++ b/src/app/App.test.jsx @@ -1,6 +1,6 @@ import { Suspense } from 'react' import { expect, test } from 'vitest' -import { render, screen } from '@testing-library/react' +import { fireEvent, render, screen, within } from '@testing-library/react' import App from '.' @@ -8,3 +8,14 @@ test('renders without crashing', () => { render() expect(screen.getByText('flash.comma.ai')).toBeInTheDocument() }) + +test('opens the walkthrough video without leaving the flash flow', () => { + render() + + fireEvent.click(screen.getByRole('button', { name: /watch walkthrough/i })) + + const dialog = screen.getByRole('dialog', { name: /flash walkthrough/i }) + expect(within(dialog).getByText('Flash walkthrough')).toBeInTheDocument() + expect(within(dialog).getByTitle('Flash walkthrough video')).toHaveAttribute('src', '/flash-walkthrough.mp4') + expect(screen.getByText('flash.comma.ai')).toBeInTheDocument() +}) diff --git a/src/app/index.jsx b/src/app/index.jsx index 9f501fe2..62f5b40a 100644 --- a/src/app/index.jsx +++ b/src/app/index.jsx @@ -1,3 +1,4 @@ +import { useState } from 'react' import Flash from './Flash' function DiscordIcon({ className }) { @@ -25,6 +26,7 @@ function CommaIcon({ className }) { } export default function App() { + const [showWalkthrough, setShowWalkthrough] = useState(false) const version = import.meta.env.VITE_PUBLIC_GIT_SHA || 'dev' console.info(`flash.comma.ai version: ${version}`) return ( @@ -41,11 +43,47 @@ export default function App() { +
{version}
+ {showWalkthrough && ( +
+
+
+

Flash walkthrough

+ +
+
+
+ )} ) }