diff --git a/README.md b/README.md index 5652807a0..f27af9513 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,13 @@ # Nexus Fusion -> Note: expect this repo to be renamed to https://github.com/BlueBrain/nexus-fusion to match the new application name and Nexus component branding scheme. +> Note: expect this repo to be renamed to to match the new application name and Nexus component branding scheme.

Build Status Coverage Status - Follow on Twitter @@ -62,13 +61,13 @@ Run end to end tests: a. To run the tests in headed mode: -``` +```sh yarn cy:open ``` b. To run the tests in headless mode: -``` +```sh yarn cy:run ``` @@ -99,14 +98,13 @@ docker build . --tag=nexus-web - `CLIENT_ID`: The application name used for _OpenID Connect_ authentication (default is `nexus-web`) - `API_ENDPOINT`: The URL pointing to Nexus API. Default is '/' - `SERVICE_ACCOUNTS_REALM`: The realm that is configured for service accounts that should be hidden for Login. Default is 'serviceaccounts'. -- `SECURE`: Is Nexus Fusion running in https or not. Default is `false` - `GTM_CODE`: The Google Analytics Identifier. GA won't be present unless an ID is specified. - `SENTRY_DSN`: The sentry URL Nexus Fusion needs to report errors to. Default is undefined. - `STUDIO_VIEW`: The location of the aggregate elastic search view that contains all the projects: `orgLabel/projectLabel/viewId` - `LOGO_IMG`: Url for an image to be used as Fusion logo in the Header, for example, `https://drive.boogle.com/jnsjdnsjs` - `LOGO_LINK`: Url for the logo, for example, `https://www.epfl.ch` - `FORGE_LINK`: Url for the Forge Templates button, for example, `https://some-url.hi` -- `DATA_MODELS`: The location of the datamodels to be used in Activity lists in Workflow: `orgLabel/projectLabel` +- `DATA_MODELS`: The location of the data models to be used in Activity lists in Workflow: `orgLabel/projectLabel` The following concern Plugins. [See how to manage plugin deployments](./docs/plugins.md) @@ -160,7 +158,6 @@ There are several channels provided to address different issues: ## Funding & Acknowledgment -The development of this software was supported by funding to the Blue Brain Project, a research center of the École polytechnique fédérale de -Lausanne (EPFL), from the Swiss government's ETH Board of the Swiss Federal Institutes of Technology. +The development of this software was supported by funding to the Blue Brain Project, a research center of the École polytechnique fédérale de Lausanne (EPFL), from the Swiss government's ETH Board of the Swiss Federal Institutes of Technology. Copyright © 2015-2023 Blue Brain Project/EPFL diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js index c4748e2a2..7f5d092f4 100644 --- a/cypress/support/e2e.js +++ b/cypress/support/e2e.js @@ -5,7 +5,7 @@ import { loginPage } from './index'; Cypress.Commands.add('login', (id, realm, username, password) => { return cy.session(id, () => { cy.visit(loginPage); - cy.findByRole('button', { name: /identity-login/i }).click(); + cy.findByRole('button', { name: /Identity connect/i }).click(); cy.get('ul') .contains(realm.name) .click(); @@ -17,7 +17,7 @@ Cypress.Commands.add('login', (id, realm, username, password) => { cy.get('#password').type(password); cy.get('input[name="login"]').click(); } - ) + ); cy.wait(500); }); }); diff --git a/package.json b/package.json index 86410d87b..ddd5476ad 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "repository": "github:bluebrain/nexus-explorer", "url": "https://github.com/BlueBrain/nexus/issues/new?labels=fusion", "scripts": { - "start": "NODE_ENV=development DEBUG=* webpack --mode development --config-name server && node dist/server.js", + "start": "NODE_ENV=development DEBUG=* webpack --mode development --config-name server && node dist/server.js", "build": "NODE_ENV=production NODE_OPTIONS=--max_old_space_size=8192 webpack --mode production", "test": "jest", "test:watch": "jest --watch --maxWorkers=4", diff --git a/src/client/index.tsx b/src/client/index.tsx index 00258f607..9a4d3dcc1 100644 --- a/src/client/index.tsx +++ b/src/client/index.tsx @@ -24,7 +24,7 @@ import App from '../shared/App'; import configureStore from '../shared/store'; import { RootState } from '../shared/store/reducers'; import { fetchIdentities, fetchRealms } from '../shared/store/actions/auth'; -import { SEARCH_PREFENCE_LOCAL_STORAGE_KEY } from '../shared/store/actions/search'; +import { SEARCH_PREFERENCE_LOCAL_STORAGE_KEY } from '../shared/store/actions/search'; import { QueryClient, QueryClientProvider } from 'react-query'; // The app base URL @@ -62,7 +62,7 @@ const initialState: RootState = { }, search: { ...preloadedState.search, - searchPreference: localStorage.getItem(SEARCH_PREFENCE_LOCAL_STORAGE_KEY), + searchPreference: localStorage.getItem(SEARCH_PREFERENCE_LOCAL_STORAGE_KEY), }, }; diff --git a/src/pages/HomePage/HomePage.tsx b/src/pages/HomePage/HomePage.tsx index bb64b954f..c3a872f39 100644 --- a/src/pages/HomePage/HomePage.tsx +++ b/src/pages/HomePage/HomePage.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; import { useSelector } from 'react-redux'; -import { HomeSeachByPresets, HomeSearchByApps } from '../../shared/organisms'; +import { HomeSearchByPresets, HomeSearchByApps } from '../../shared/organisms'; import { MyData } from '../../shared/canvas'; import { RootState } from '../../shared/store/reducers'; import IdentityPage from '../../pages/IdentityPage/IdentityPage'; @@ -14,7 +14,7 @@ const Home: React.FunctionComponent = () => { return (

- +
diff --git a/src/pages/IdentityPage/IdentityPage.tsx b/src/pages/IdentityPage/IdentityPage.tsx index cb4353993..fda4b0200 100644 --- a/src/pages/IdentityPage/IdentityPage.tsx +++ b/src/pages/IdentityPage/IdentityPage.tsx @@ -1,14 +1,14 @@ -import React, { useRef, useState } from 'react'; +import { DownOutlined, UpOutlined } from '@ant-design/icons'; +import { Realm } from '@bbp/nexus-sdk'; import { Button, Divider } from 'antd'; +import { useRef, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { useHistory, useLocation } from 'react-router'; -import { DownOutlined, UpOutlined } from '@ant-design/icons'; -import { Realm } from '@bbp/nexus-sdk'; +import useClickOutside from '../../shared/hooks/useClickOutside'; +import { performLogin } from '../../shared/store/actions/auth'; +import { setPreferredRealm } from '../../shared/store/actions/config'; import { updateAboutModalVisibility } from '../../shared/store/actions/modals'; import { RootState } from '../../shared/store/reducers'; -import useClickOutside from '../../shared/hooks/useClickOutside'; -import * as authActions from '../../shared/store/actions/auth'; -import * as configActions from '../../shared/store/actions/config'; import './styles.less'; @@ -18,13 +18,17 @@ const LandingVideo = ({ videoUrl }: { videoUrl: string }) => ( muted autoPlay className="home-authentication-fusion" - poster={require('../../shared/images/BrainRegionsNexusPage.jpg')} preload="auto" controls={false} > + {/* Load an image as a Fallback */} + Landing page image ); @@ -57,28 +61,24 @@ const IdentityPage: React.FC<{}> = () => { ); const openAboutModal = () => dispatch(updateAboutModalVisibility(true)); useClickOutside(popoverRef, () => onPopoverVisibleChange(false)); + return (
- -
-
Nexus.Fusion
-
+

Nexus.Fusion

+
+ + Landing page logo + +
); }; diff --git a/src/pages/IdentityPage/styles.less b/src/pages/IdentityPage/styles.less index b96c18687..d501d59c6 100644 --- a/src/pages/IdentityPage/styles.less +++ b/src/pages/IdentityPage/styles.less @@ -1,11 +1,11 @@ @import '../../shared/lib.less'; .home-authentication { - position: relative; display: flex; - align-items: center; - justify-content: center; + position: relative; flex-direction: column; + justify-content: center; + align-items: center; height: 100vh; &-fusion { position: absolute; @@ -14,82 +14,85 @@ width: 100%; height: 100%; max-height: 100vh; - object-fit: fill; + object-fit: cover; } &-epfl { position: absolute; top: 10px; - left: 10px; - height: 26px; + left: 12px; // Slightly off to the left for optical alignment z-index: 10; + max-width: 250px; + height: 26px; } &-content { - width: 100%; - height: 100%; display: flex; - align-items: center; - justify-content: center; flex-direction: column; + justify-content: center; + align-items: center; z-index: 10; + width: 100%; + height: 100%; .title { - font-family: 'Titillium Web'; + margin-bottom: 0px; + color: #ffffff; font-style: normal; font-weight: 700; font-size: 120px; line-height: 90%; + font-family: @font-family; letter-spacing: 0.01em; - color: #ffffff; user-select: none; } .actions { display: grid; grid-template-columns: repeat(4, minmax(120px, 1fr)); - align-items: center; justify-content: center; + align-items: center; margin-top: 35px; button, a { - border: 1px solid white; - border-right: none; display: flex; - align-items: center; - justify-content: center; flex-direction: row; + justify-content: center; + align-items: center; + cursor: pointer; + box-shadow: none; + border: 1px solid white; + border-right: none; + border-radius: 0; + background: none; padding: 8px 20px !important; + width: 100%; color: white; font-weight: 700; font-size: 16px; line-height: 27px; letter-spacing: 0.01em; - background: none; - box-shadow: none; - cursor: pointer; - width: 100%; user-select: none; - border-radius: 0; svg { width: 11px !important; height: 11px !important; } } button:first-child { - color: @fusion-daybreak-10; background-color: #fff; + color: @fusion-daybreak-10; &.no-realms-btn { + cursor: not-allowed; + border: 1px solid black; background-color: black; color: white; - border: 1px solid black; } } a { display: flex; - align-items: center; justify-content: center; + align-items: center; } .nav-btn:hover { - color: @fusion-daybreak-10 !important; background-color: #fff !important; + color: @fusion-daybreak-10 !important; } button:last-child { border-right: 1px solid white; @@ -102,10 +105,10 @@ } } button.connect-btn { + border: 1px solid #fff; + color: @fusion-daybreak-10; font-weight: 400; font-size: 13px; - color: @fusion-daybreak-10; - border: 1px solid #fff; &:hover { font-weight: 700; } @@ -115,18 +118,18 @@ position: relative; &-popover { position: absolute; - list-style-type: none; - width: calc(100% + 1px); - padding-top: 0 !important; - padding-left: 0; top: 40px; left: 0; - background-color: #fff; border: 1px solid #fff; + background-color: #fff; + padding-top: 0 !important; + padding-left: 0; + width: calc(100% + 1px); + list-style-type: none; .ant-divider-horizontal { margin: 2px auto; - min-width: 50%; width: 50%; + min-width: 50%; } } } diff --git a/src/pages/OrganizationsListPage/OrganizationListPage.tsx b/src/pages/OrganizationsListPage/OrganizationListPage.tsx index 9e0aa5ba3..cf1cfcc0b 100644 --- a/src/pages/OrganizationsListPage/OrganizationListPage.tsx +++ b/src/pages/OrganizationsListPage/OrganizationListPage.tsx @@ -254,7 +254,7 @@ const OrganizationListView: React.FC<{}> = () => { 'No organizations found' ) } - alt="sscx" + alt="Organization image" bg={ layoutSettings.organizationImg || require('../../shared/images/sscx-by-layers-v3.png') diff --git a/src/server/html.ts b/src/server/html.ts index 9b7cd9250..f15469121 100644 --- a/src/server/html.ts +++ b/src/server/html.ts @@ -18,7 +18,7 @@ const html = ({ preloadedState: object; }): string => ` - + ${helmet.title.toString()} ${helmet.meta.toString()} diff --git a/src/server/index.tsx b/src/server/index.tsx index 9bdfd8afb..06df5d845 100644 --- a/src/server/index.tsx +++ b/src/server/index.tsx @@ -35,6 +35,7 @@ const pluginsManifestPath = const layoutSettings = { docsLink: process.env.DOCS_LINK || '', logoImg: process.env.LOGO_IMG || '', + logoImgLink: process.env.LOGO_LINK || '', forgeLink: process.env.FORGE_LINK || '', organizationImg: process.env.ORGANIZATION_IMG || '', projectsImg: process.env.PROJECTS_IMG || '', @@ -165,7 +166,12 @@ app.get('*', async (req: express.Request, res: express.Response) => { app.listen(PORT_NUMBER, () => { // tslint:disable-next-line:no-console - console.log(`Nexus Web is listening on a port ${PORT_NUMBER} ...`); + console.log( + `🚀 Nexus Fusion is listening on http://${process.env.HOST_NAME || + 'localhost'}:${PORT_NUMBER}${ + process.env.BASE_PATH ? process.env.BASE_PATH : '' + }` + ); }); export default app; diff --git a/src/server/silent_refresh.ts b/src/server/silent_refresh.ts index 83952442a..23da89ea9 100644 --- a/src/server/silent_refresh.ts +++ b/src/server/silent_refresh.ts @@ -2,7 +2,7 @@ const base: string = process.env.BASE_PATH || '/'; const html = (): string => ` - + diff --git a/src/shared/RouteHeader/RouteHeader.tsx b/src/shared/RouteHeader/RouteHeader.tsx index e4e874f86..431ec68bd 100644 --- a/src/shared/RouteHeader/RouteHeader.tsx +++ b/src/shared/RouteHeader/RouteHeader.tsx @@ -34,7 +34,7 @@ const RouteHeader = ({ return (
{alt}
diff --git a/src/shared/RouteHeader/styles.less b/src/shared/RouteHeader/styles.less index a106b0c76..e25328602 100644 --- a/src/shared/RouteHeader/styles.less +++ b/src/shared/RouteHeader/styles.less @@ -14,6 +14,7 @@ max-height: inherit; width: 'calc(85% + (100vw - 1157px) * 0.15 / 313)'; max-width: 100%; + object-fit: cover; } .title { diff --git a/src/shared/containers/ResourceViewActionsContainer.tsx b/src/shared/containers/ResourceViewActionsContainer.tsx index fdc229b22..857786669 100644 --- a/src/shared/containers/ResourceViewActionsContainer.tsx +++ b/src/shared/containers/ResourceViewActionsContainer.tsx @@ -453,6 +453,62 @@ const ResourceViewActionsContainer: React.FC<{ + + +
Tag Resource
+ + The tag will be applied to revision{' '} + {resource._rev} + +
+ } + content={ + + autoComplete="off" + name="tag-resource-form" + initialValues={{ tag: '' }} + onFinish={handleTagResource} + style={{ width: 300, padding: '8px 8px O' }} + > + + + + + + + + } + > + + + {view && ( diff --git a/src/shared/images/BrainRegionsNexusPage.jpg b/src/shared/images/BrainRegionsNexusPage.jpg index 95b50cc96..11035fa34 100644 Binary files a/src/shared/images/BrainRegionsNexusPage.jpg and b/src/shared/images/BrainRegionsNexusPage.jpg differ diff --git a/src/shared/images/EPFL-logo.svg b/src/shared/images/EPFL-logo.svg deleted file mode 100755 index 97a144a51..000000000 --- a/src/shared/images/EPFL-logo.svg +++ /dev/null @@ -1 +0,0 @@ -Plan de travail 1 \ No newline at end of file diff --git a/src/shared/images/EPFL_BBP_logo.png b/src/shared/images/EPFL_BBP_logo.png deleted file mode 100644 index 57519b812..000000000 Binary files a/src/shared/images/EPFL_BBP_logo.png and /dev/null differ diff --git a/src/shared/images/EPFL_BBP_logo.svg b/src/shared/images/EPFL_BBP_logo.svg new file mode 100644 index 000000000..3259e326f --- /dev/null +++ b/src/shared/images/EPFL_BBP_logo.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/shared/layouts/SeoHeaders.tsx b/src/shared/layouts/SeoHeaders.tsx index 72256e0d1..9ce34b3d1 100644 --- a/src/shared/layouts/SeoHeaders.tsx +++ b/src/shared/layouts/SeoHeaders.tsx @@ -25,7 +25,7 @@ const SeoHeaders: React.FC = () => { - {/* If browser supports customizing color of surroding UI via theme-color set to @fusion-secondary-color */} + {/* If browser supports customizing color of surrounding UI via theme-color set to @fusion-secondary-color */} ); diff --git a/src/shared/lib.less b/src/shared/lib.less index d7292d992..977394d7b 100644 --- a/src/shared/lib.less +++ b/src/shared/lib.less @@ -40,10 +40,9 @@ @fusion-neutral-8: #595959; @fusion-global-red-1: #ff4d4f; @fusion-green-light: #2ebd56; -// additional colors @nexus-dark: #1d3b61; -// typography +// Typography @fusion-base-font-size: 14px; @fusion-heading-1-size: 28px; @fusion-heading-2-size: 23px; @@ -53,64 +52,64 @@ @fusion-body-small: 10px; @font-face { - font-family: 'Titillium Web'; - src: url('./fonts/TitilliumWeb-Regular.ttf') format('truetype'); - font-weight: normal; font-style: normal; + font-weight: normal; + src: url('./fonts/TitilliumWeb-Regular.ttf') format('truetype'); + font-family: 'Titillium Web'; } @font-face { - font-family: 'Titillium Web'; - src: url('./fonts/TitilliumWeb-Italic.ttf') format('truetype'); - font-weight: normal; font-style: italic; + font-weight: normal; + src: url('./fonts/TitilliumWeb-Italic.ttf') format('truetype'); + font-family: 'Titillium Web'; } @font-face { - font-family: 'Titillium Web'; - src: url('./fonts/TitilliumWeb-Bold.ttf') format('truetype'); - font-weight: bold; font-style: normal; + font-weight: bold; + src: url('./fonts/TitilliumWeb-Bold.ttf') format('truetype'); + font-family: 'Titillium Web'; } @font-face { - font-family: 'Titillium Web'; - src: url('./fonts/TitilliumWeb-BoldItalic.ttf') format('truetype'); - font-weight: bold; font-style: italic; + font-weight: bold; + src: url('./fonts/TitilliumWeb-BoldItalic.ttf') format('truetype'); + font-family: 'Titillium Web'; } @font-face { - font-family: 'Titillium Web'; - src: url('./fonts/TitilliumWeb-SemiBold.ttf') format('truetype'); - font-weight: 600; font-style: normal; + font-weight: 600; + src: url('./fonts/TitilliumWeb-SemiBold.ttf') format('truetype'); + font-family: 'Titillium Web'; } @font-face { - font-family: 'Titillium Web'; - src: url('./fonts/TitilliumWeb-SemiBoldItalic.ttf') format('truetype'); - font-weight: 600; font-style: italic; + font-weight: 600; + src: url('./fonts/TitilliumWeb-SemiBoldItalic.ttf') format('truetype'); + font-family: 'Titillium Web'; } @font-face { - font-family: 'Titillium Web'; - src: url('./fonts/TitilliumWeb-Light.ttf') format('truetype'); - font-weight: 300; font-style: normal; + font-weight: 300; + src: url('./fonts/TitilliumWeb-Light.ttf') format('truetype'); + font-family: 'Titillium Web'; } @font-face { - font-family: 'Titillium Web'; - src: url('./fonts/TitilliumWeb-LightItalic.ttf') format('truetype'); - font-weight: 300; font-style: italic; + font-weight: 300; + src: url('./fonts/TitilliumWeb-LightItalic.ttf') format('truetype'); + font-family: 'Titillium Web'; } @font-face { - font-family: 'Titillium Web'; - src: url('./fonts/TitilliumWeb-ExtraLight.ttf') format('truetype'); - font-weight: 100; font-style: normal; + font-weight: 100; + src: url('./fonts/TitilliumWeb-ExtraLight.ttf') format('truetype'); + font-family: 'Titillium Web'; } @font-face { - font-family: 'Titillium Web'; - src: url('./fonts/TitilliumWeb-ExtraLightItalic.ttf') format('truetype'); - font-weight: 100; font-style: italic; + font-weight: 100; + src: url('./fonts/TitilliumWeb-ExtraLightItalic.ttf') format('truetype'); + font-family: 'Titillium Web'; } // Fusion Variables @@ -120,7 +119,6 @@ @interfaceTransition: 0.3s @bounce; @maxConstrainedItemWidth: 1240px; -// @maxConstrainedItemWidth: 980px; @primary-card: #f5f6f7; @default-card-width: 400px; @@ -148,7 +146,7 @@ @alternative-button-color: #2bad4e; @medium-gray: #a5afb4; -// Antd style overrride +// Ant Design style overrides @font-family: 'Titillium Web', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', @@ -179,7 +177,7 @@ 252, 253, 253 -); // for sublte highlighting in lists +); // for subtle highlighting in lists @component-background: @fusion-component-background-color; @@ -188,11 +186,10 @@ } // Top-level styles - body { - background-color: @fusion-background-color; background-size: cover; background-repeat: no-repeat; + background-color: @fusion-background-color; } h1 { @@ -211,8 +208,8 @@ h1 { .fixed-minus-header { position: relative; - height: 100%; width: 100%; + height: 100%; max-height: calc(100vh - 40px); } @@ -226,12 +223,14 @@ h1 { } .ant-tag-blue { + border-color: @fusion-secondary-color; background-color: fade(@fusion-secondary-color, 10%); color: @fusion-secondary-color; - border-color: @fusion-secondary-color; } .textLoadingGradient () { + -webkit-background-clip: text; + animation: Gradient 4s ease infinite; background: linear-gradient( -45deg, @success-color, @@ -240,20 +239,18 @@ h1 { @link-color ); background-size: 400% 400%; - -webkit-background-clip: text; -webkit-text-fill-color: transparent; - animation: Gradient 4s ease infinite; } .blockLoadingGradient () { + animation: Gradient 4s ease infinite; background: linear-gradient(-45deg, @box-shadow-color, white); background-size: 400% 400%; - animation: Gradient 4s ease infinite; } .ellipsis () { overflow: hidden; - white-space: nowrap; text-overflow: ellipsis; + white-space: nowrap; } .oddListColor() { @@ -267,24 +264,24 @@ h1 { } .cardlike() { - padding: @default-pad; box-shadow: @box-shadow-base; border-radius: @border-radius-base; background-color: @background-color-subtle; + padding: @default-pad; height: fit-content; height: -moz-max-content; height: -webkit-max-content; } .interactiveArea() { - background-color: white; - border: 1px solid #e8e8e8; transition: all 0.3s ease; + border: 1px solid #e8e8e8; + background-color: white; } .constrainedWidth() { - max-width: @maxConstrainedItemWidth; margin: 0 auto; + max-width: @maxConstrainedItemWidth; } .flash { @@ -312,12 +309,12 @@ h1 { @keyframes TextFlash { 0% { - text-shadow: 0px 0px 6px @warning-color; color: white; + text-shadow: 0px 0px 6px @warning-color; } 100% { - text-shadow: 0px 0px 0px @warning-color; color: @text-color-secondary; + text-shadow: 0px 0px 0px @warning-color; } } diff --git a/src/shared/modals/AppInfo/AppInfo.tsx b/src/shared/modals/AppInfo/AppInfo.tsx index e8f06389f..17c1ec379 100644 --- a/src/shared/modals/AppInfo/AppInfo.tsx +++ b/src/shared/modals/AppInfo/AppInfo.tsx @@ -81,7 +81,11 @@ const AppInfo: React.FC = ({ delta, environment: infraEnv }) => {
© 2017–{new Date().getFullYear()} - epfl/bbp + EPFL Blue Brain Project logo
diff --git a/src/shared/molecules/MyDataHeader/styles.less b/src/shared/molecules/MyDataHeader/styles.less index d4e0ba77b..4ed08bb0c 100644 --- a/src/shared/molecules/MyDataHeader/styles.less +++ b/src/shared/molecules/MyDataHeader/styles.less @@ -213,7 +213,7 @@ .range-born { font-weight: 200; - color: #40a9ff; + color: @fusion-blue-4; align-self: flex-start; } } diff --git a/src/shared/organisms/index.ts b/src/shared/organisms/index.ts index a996188d1..e4806047d 100644 --- a/src/shared/organisms/index.ts +++ b/src/shared/organisms/index.ts @@ -1,3 +1,3 @@ -export { default as HomeSeachByPresets } from './SearchByPresets/SearchByPresets'; +export { default as HomeSearchByPresets } from './SearchByPresets/SearchByPresets'; export { default as HomeSearchByApps } from './SearchByApps/SearchByApps'; export { default as DataPanel } from './DataPanel/DataPanel'; diff --git a/src/shared/store/actions/search.ts b/src/shared/store/actions/search.ts index e37d870c6..82f3793ca 100644 --- a/src/shared/store/actions/search.ts +++ b/src/shared/store/actions/search.ts @@ -66,13 +66,13 @@ export const setSearchPreference: ActionCreator = ( type: SearchPreferenceTypes.SEARCH_PREFERENCE_SET, }); -export const SEARCH_PREFENCE_LOCAL_STORAGE_KEY = 'nexusSearchPreference'; +export const SEARCH_PREFERENCE_LOCAL_STORAGE_KEY = 'nexusSearchPreference'; export const setSearchPreferenceToLocalStore: ActionCreator = ( searchPreference: string ) => { return async (dispatch: Dispatch): Promise => { - localStorage.setItem(SEARCH_PREFENCE_LOCAL_STORAGE_KEY, searchPreference); + localStorage.setItem(SEARCH_PREFERENCE_LOCAL_STORAGE_KEY, searchPreference); return dispatch(setSearchPreference(searchPreference)); }; }; diff --git a/src/shared/store/reducers/config.ts b/src/shared/store/reducers/config.ts index a1f18674b..a3c97235a 100644 --- a/src/shared/store/reducers/config.ts +++ b/src/shared/store/reducers/config.ts @@ -21,6 +21,7 @@ export interface ConfigState { layoutSettings: { docsLink: string; logoImg: string; + logoImgLink: string; forgeLink: string; organizationImg: string; projectsImg: string; @@ -60,6 +61,7 @@ const initialState: ConfigState = { layoutSettings: { docsLink: '', logoImg: '', + logoImgLink: '', forgeLink: '', projectImg: '', projectsImg: '', diff --git a/src/shared/images/BrainRegionsNexusPage.mp4 b/src/shared/videos/BrainRegionsNexusPage.mp4 old mode 100644 new mode 100755 similarity index 57% rename from src/shared/images/BrainRegionsNexusPage.mp4 rename to src/shared/videos/BrainRegionsNexusPage.mp4 index 08a560f58..a554317a9 Binary files a/src/shared/images/BrainRegionsNexusPage.mp4 and b/src/shared/videos/BrainRegionsNexusPage.mp4 differ diff --git a/src/utils/contentTypes.ts b/src/utils/contentTypes.ts index aff5cd757..1d16d4cd0 100644 --- a/src/utils/contentTypes.ts +++ b/src/utils/contentTypes.ts @@ -45,7 +45,7 @@ export const MIME_TYPE_TO_EXTENSION: { [key: string]: string } = { * @param encodingType - Should be one of: * * undefined * * A string containing only MIME types (e.g. -> 'text/html') - * * A stirng containing MIME type and character encoding, separated by semicolons (e.g. -> 'text/plain; charset=UTF-8') + * * A string containing MIME type and character encoding, separated by semicolons (e.g. -> 'text/plain; charset=UTF-8') * @returns File extension best supported for the given "encodedType" as listed in MDN (https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types). * If no extension could be derived, the function returns an empty string. */ diff --git a/webpack.config.js b/webpack.config.js index 1c5021c34..e5a9cc101 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -78,7 +78,13 @@ const config = [ }, { test: /\.mp4$/, - use: 'file-loader?name=videos/[name].[ext]' + use: { + loader: 'file-loader', + options: { + outputPath: 'assets/', + publicPath: 'public/assets/', + }, + }, }, { test: /\.(ttf)$/,