From fa6dcfe7fb28e63aeb4c482c336b71c6d3d97ee1 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 26 May 2021 00:16:23 -0400 Subject: [PATCH] Major refactor of the version migration --- vocodes/package-lock.json | 133 ++++++++++++++++++ vocodes/package.json | 5 +- vocodes/src/App.test.tsx | 2 +- vocodes/src/App.tsx | 44 +++--- vocodes/src/migration/MigrationTopNav.tsx | 37 +++++ .../src/migration/MigrationTopNav_Session.tsx | 41 ++++++ .../MigrationTopNav_VersionSwitch.tsx | 44 ++++++ vocodes/src/migration/NewOldVocodesSwitch.tsx | 67 --------- vocodes/src/{api => session}/SessionState.ts | 0 vocodes/src/session/SessionWrapper.ts | 32 +++++ .../{migration => v1}/OldVocodesContainer.tsx | 40 +++--- vocodes/src/{ => v1}/api/ApiConfig.ts | 0 vocodes/src/v1/api/SessionState.ts | 18 +++ .../extra_colormaps/colormap-afmhot.ts | 0 .../{ => v1}/extra_colormaps/colormap-bone.ts | 0 .../{ => v1}/extra_colormaps/colormap-cool.ts | 0 .../extra_colormaps/colormap-copper.ts | 0 .../extra_colormaps/colormap-gist_heat.ts | 0 .../{ => v1}/extra_colormaps/colormap-jet.ts | 0 .../{ => v1}/extra_colormaps/colormap-pink.ts | 0 .../{ => v1}/extra_colormaps/colormap-rdbu.ts | 0 .../{ => v1}/extra_colormaps/colormap-rdgy.ts | 0 .../extra_colormaps/colormap-spring.ts | 0 vocodes/src/{ => v1}/model/Speakers.ts | 0 vocodes/src/{ => v1}/model/utterance.ts | 0 .../{ => v1}/modes/about/AboutComponent.tsx | 0 .../modes/history/HistoryComponent.tsx | 0 .../src/{ => v1}/modes/history/MiniAvatar.tsx | 0 .../{ => v1}/modes/history/PastUtterance.tsx | 0 .../{ => v1}/modes/login/LoginComponent.tsx | 2 +- .../{ => v1}/modes/signup/SignupComponent.tsx | 2 +- vocodes/src/{ => v1}/modes/speak/Form.tsx | 0 .../src/{ => v1}/modes/speak/NewsNotice.tsx | 0 .../{ => v1}/modes/speak/SpeakComponent.tsx | 4 +- .../src/{ => v1}/modes/speak/SpeakRequest.ts | 0 .../src/{ => v1}/modes/speak/StatusText.tsx | 0 .../speak/dropdowns/CategoryDropdown.tsx | 0 .../modes/speak/dropdowns/SpeakerDropdown.tsx | 0 .../{ => v1}/modes/speak/extras/Avatar.tsx | 0 .../modes/speak/extras/SpeakerInfo.tsx | 0 .../modes/speak/extras/Spectrogram.ts | 2 +- .../speak/extras/SpectrogramComponent.tsx | 2 +- .../{ => v1}/modes/terms/TermsComponent.tsx | 0 .../{ => v1}/modes/upload/UploadComponent.tsx | 2 +- .../{ => v1}/modes/video/ImageTemplates.ts | 0 .../{ => v1}/modes/video/VideoComponent.tsx | 0 vocodes/src/{ => v1}/modes/video/VideoJob.ts | 0 .../{ => v1}/modes/video/VideoJobPoller.ts | 0 .../{ => v1}/modes/video/VideoQueuePoller.ts | 0 .../{ => v1}/modes/video/VideoQueueStats.ts | 0 .../{ => v1}/modes/video/VideoTemplates.ts | 0 vocodes/src/{ => v1}/navigation/Footer.tsx | 2 +- vocodes/src/{ => v1}/navigation/NewTopNav.tsx | 4 +- vocodes/src/{ => v1}/navigation/TopNav.tsx | 2 +- vocodes/src/{ => v1}/poller/AbstractPoller.ts | 0 .../{migration => v2}/NewVocodesContainer.tsx | 8 +- 56 files changed, 368 insertions(+), 125 deletions(-) create mode 100644 vocodes/src/migration/MigrationTopNav.tsx create mode 100644 vocodes/src/migration/MigrationTopNav_Session.tsx create mode 100644 vocodes/src/migration/MigrationTopNav_VersionSwitch.tsx delete mode 100644 vocodes/src/migration/NewOldVocodesSwitch.tsx rename vocodes/src/{api => session}/SessionState.ts (100%) create mode 100644 vocodes/src/session/SessionWrapper.ts rename vocodes/src/{migration => v1}/OldVocodesContainer.tsx (91%) rename vocodes/src/{ => v1}/api/ApiConfig.ts (100%) create mode 100644 vocodes/src/v1/api/SessionState.ts rename vocodes/src/{ => v1}/extra_colormaps/colormap-afmhot.ts (100%) rename vocodes/src/{ => v1}/extra_colormaps/colormap-bone.ts (100%) rename vocodes/src/{ => v1}/extra_colormaps/colormap-cool.ts (100%) rename vocodes/src/{ => v1}/extra_colormaps/colormap-copper.ts (100%) rename vocodes/src/{ => v1}/extra_colormaps/colormap-gist_heat.ts (100%) rename vocodes/src/{ => v1}/extra_colormaps/colormap-jet.ts (100%) rename vocodes/src/{ => v1}/extra_colormaps/colormap-pink.ts (100%) rename vocodes/src/{ => v1}/extra_colormaps/colormap-rdbu.ts (100%) rename vocodes/src/{ => v1}/extra_colormaps/colormap-rdgy.ts (100%) rename vocodes/src/{ => v1}/extra_colormaps/colormap-spring.ts (100%) rename vocodes/src/{ => v1}/model/Speakers.ts (100%) rename vocodes/src/{ => v1}/model/utterance.ts (100%) rename vocodes/src/{ => v1}/modes/about/AboutComponent.tsx (100%) rename vocodes/src/{ => v1}/modes/history/HistoryComponent.tsx (100%) rename vocodes/src/{ => v1}/modes/history/MiniAvatar.tsx (100%) rename vocodes/src/{ => v1}/modes/history/PastUtterance.tsx (100%) rename vocodes/src/{ => v1}/modes/login/LoginComponent.tsx (99%) rename vocodes/src/{ => v1}/modes/signup/SignupComponent.tsx (99%) rename vocodes/src/{ => v1}/modes/speak/Form.tsx (100%) rename vocodes/src/{ => v1}/modes/speak/NewsNotice.tsx (100%) rename vocodes/src/{ => v1}/modes/speak/SpeakComponent.tsx (98%) rename vocodes/src/{ => v1}/modes/speak/SpeakRequest.ts (100%) rename vocodes/src/{ => v1}/modes/speak/StatusText.tsx (100%) rename vocodes/src/{ => v1}/modes/speak/dropdowns/CategoryDropdown.tsx (100%) rename vocodes/src/{ => v1}/modes/speak/dropdowns/SpeakerDropdown.tsx (100%) rename vocodes/src/{ => v1}/modes/speak/extras/Avatar.tsx (100%) rename vocodes/src/{ => v1}/modes/speak/extras/SpeakerInfo.tsx (100%) rename vocodes/src/{ => v1}/modes/speak/extras/Spectrogram.ts (97%) rename vocodes/src/{ => v1}/modes/speak/extras/SpectrogramComponent.tsx (97%) rename vocodes/src/{ => v1}/modes/terms/TermsComponent.tsx (100%) rename vocodes/src/{ => v1}/modes/upload/UploadComponent.tsx (99%) rename vocodes/src/{ => v1}/modes/video/ImageTemplates.ts (100%) rename vocodes/src/{ => v1}/modes/video/VideoComponent.tsx (100%) rename vocodes/src/{ => v1}/modes/video/VideoJob.ts (100%) rename vocodes/src/{ => v1}/modes/video/VideoJobPoller.ts (100%) rename vocodes/src/{ => v1}/modes/video/VideoQueuePoller.ts (100%) rename vocodes/src/{ => v1}/modes/video/VideoQueueStats.ts (100%) rename vocodes/src/{ => v1}/modes/video/VideoTemplates.ts (100%) rename vocodes/src/{ => v1}/navigation/Footer.tsx (97%) rename vocodes/src/{ => v1}/navigation/NewTopNav.tsx (97%) rename vocodes/src/{ => v1}/navigation/TopNav.tsx (98%) rename vocodes/src/{ => v1}/poller/AbstractPoller.ts (100%) rename vocodes/src/{migration => v2}/NewVocodesContainer.tsx (88%) diff --git a/vocodes/package-lock.json b/vocodes/package-lock.json index 614853e60d..6f5f275509 100644 --- a/vocodes/package-lock.json +++ b/vocodes/package-lock.json @@ -1674,6 +1674,12 @@ "@types/node": "*" } }, + "@types/history": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.8.tgz", + "integrity": "sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==", + "dev": true + }, "@types/howler": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@types/howler/-/howler-2.1.2.tgz", @@ -1756,6 +1762,27 @@ "@types/react": "*" } }, + "@types/react-router": { + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.14.tgz", + "integrity": "sha512-LAJpqYUaCTMT2anZheoidiIymt8MuX286zoVFPM3DVb23aQBH0mAkFvzpd4LKqiolV8bBtZWT5Qp7hClCNDENw==", + "dev": true, + "requires": { + "@types/history": "*", + "@types/react": "*" + } + }, + "@types/react-router-dom": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.1.7.tgz", + "integrity": "sha512-D5mHD6TbdV/DNHYsnwBTv+y73ei+mMjrkGrla86HthE4/PVvL1J94Bu3qABU+COXzpL23T1EZapVVpwHuBXiUg==", + "dev": true, + "requires": { + "@types/history": "*", + "@types/react": "*", + "@types/react-router": "*" + } + }, "@types/stack-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", @@ -6457,6 +6484,19 @@ "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" }, + "history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "requires": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -6467,6 +6507,14 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, "hosted-git-info": { "version": "2.8.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", @@ -8530,6 +8578,25 @@ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" }, + "mini-create-react-context": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", + "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", + "requires": { + "@babel/runtime": "^7.12.1", + "tiny-warning": "^1.0.3" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, "mini-css-extract-plugin": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", @@ -11172,6 +11239,52 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-router": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", + "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "mini-create-react-context": "^0.4.0", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "react-router-dom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", + "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "requires": { + "@babel/runtime": "^7.1.2", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.2.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + } + }, "react-scripts": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.4.1.tgz", @@ -11590,6 +11703,11 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" }, + "resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -13116,6 +13234,16 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, + "tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -13505,6 +13633,11 @@ "spdx-expression-parse": "^3.0.0" } }, + "value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/vocodes/package.json b/vocodes/package.json index b60d3e41ee..f572046cac 100644 --- a/vocodes/package.json +++ b/vocodes/package.json @@ -21,6 +21,7 @@ "node-sass": "^4.14.1", "react": "^16.13.1", "react-dom": "^16.13.1", + "react-router-dom": "^5.2.0", "react-scripts": "3.4.1", "typescript": "^3.7.5", "uuid": "^8.3.2" @@ -49,5 +50,7 @@ "last 1 safari version" ] }, - "devDependencies": {} + "devDependencies": { + "@types/react-router-dom": "^5.1.7" + } } diff --git a/vocodes/src/App.test.tsx b/vocodes/src/App.test.tsx index 94b791479e..ed89b05963 100644 --- a/vocodes/src/App.test.tsx +++ b/vocodes/src/App.test.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { render } from '@testing-library/react'; -import App from './migration/OldVocodesContainer'; +import App from './v1/OldVocodesContainer'; test('renders learn react link', () => { const { getByText } = render(); diff --git a/vocodes/src/App.tsx b/vocodes/src/App.tsx index 116c847dc6..b05ce14662 100644 --- a/vocodes/src/App.tsx +++ b/vocodes/src/App.tsx @@ -2,11 +2,12 @@ import 'bulma/css/bulma.css' import './App.scss'; import React from 'react'; -import { NewOldVocodesSwitch } from './migration/NewOldVocodesSwitch'; -import { OldVocodesContainer } from './migration/OldVocodesContainer'; -import { NewVocodesContainer } from './migration/NewVocodesContainer'; -import { ApiConfig } from './api/ApiConfig'; -import { SessionStateResponse } from './api/SessionState'; +import { MigrationTopNav } from './migration/MigrationTopNav'; +import { OldVocodesContainer } from './v1/OldVocodesContainer'; +import { NewVocodesContainer } from './v2/NewVocodesContainer'; +import { ApiConfig } from './v1/api/ApiConfig'; +import { SessionStateResponse } from './v1/api/SessionState'; +import { SessionWrapper } from './session/SessionWrapper'; enum MigrationMode { NEW_VOCODES, @@ -27,8 +28,7 @@ interface State { // Rollout of vocodes 2.0 enableAlpha: boolean, - loggedIn: boolean, - sessionState?: SessionStateResponse, + sessionWrapper: SessionWrapper, } class App extends React.Component { @@ -43,7 +43,7 @@ class App extends React.Component { this.state = { enableAlpha: enableAlpha, migrationMode: migrationMode, - loggedIn: false, + sessionWrapper: SessionWrapper.emptySession(), } } @@ -71,14 +71,16 @@ class App extends React.Component { }) .then(res => res.json()) .then(response => { - const session : SessionStateResponse = response; + const sessionResponse : SessionStateResponse = response; - if (session !== undefined) { - this.setState({ - sessionState : session, - loggedIn: session.logged_in, - }); + if (sessionResponse === undefined) { + return; // Endpoint error? } + + const sessionWrapper = SessionWrapper.wrapResponse(sessionResponse); + this.setState({ + sessionWrapper: sessionWrapper, + }); }) .catch(e => { /* Ignore. */ }); } @@ -115,9 +117,9 @@ class App extends React.Component { case MigrationMode.NEW_VOCODES: innerComponent = (
- + />*/}
); break; @@ -136,16 +138,16 @@ class App extends React.Component { return (
- -
- {innerComponent} -
+
+ {innerComponent} +
diff --git a/vocodes/src/migration/MigrationTopNav.tsx b/vocodes/src/migration/MigrationTopNav.tsx new file mode 100644 index 0000000000..96d20d57dd --- /dev/null +++ b/vocodes/src/migration/MigrationTopNav.tsx @@ -0,0 +1,37 @@ +import React from 'react'; +import { MigrationMode } from '../App' +import { MigrationTopNav_Session } from './MigrationTopNav_Session'; +import { MigrationTopNav_VersionSwitch } from './MigrationTopNav_VersionSwitch'; +import { SessionWrapper } from '../session/SessionWrapper'; + +interface Props { + sessionWrapper: SessionWrapper, + enableAlpha: boolean, + migrationMode: MigrationMode, + setMigrationModeCallback: (mode: MigrationMode) => void, +} + +function MigrationTopNav(props: Props) { + if (!props.enableAlpha) { + return