From fc68e1de52bb02391bd2ce054814defa642799e9 Mon Sep 17 00:00:00 2001 From: David Nishikawa Date: Thu, 27 May 2021 14:16:47 -0700 Subject: [PATCH 1/7] Add endpoints for enabling/disabling features. --- .pnp.js | 87 +------------------ .../src/handlers/feature-flags.js | 14 +++ yarn.lock | 63 +------------- 3 files changed, 16 insertions(+), 148 deletions(-) create mode 100644 packages/openneuro-server/src/handlers/feature-flags.js diff --git a/.pnp.js b/.pnp.js index fd556db99b..e6969db92f 100755 --- a/.pnp.js +++ b/.pnp.js @@ -117,13 +117,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ], "linkType": "SOFT", }], - ["npm:3.3.19", { - "packageLocation": "./.yarn/cache/@apollo-client-npm-3.3.19-39baf9f99e-a7266cfdff.zip/node_modules/@apollo/client/", - "packageDependencies": [ - ["@apollo/client", "npm:3.3.19"] - ], - "linkType": "SOFT", - }], ["virtual:4112afb9dad10978c159910bf10db9840b981b1333117623c8a4a8cf77481344a0a24735a5506e2920c18e3cfa2cc179489824b6a56c988bb070f4f60da40974#npm:3.3.14", { "packageLocation": "./.yarn/$$virtual/@apollo-client-virtual-01c7b6c19d/0/cache/@apollo-client-npm-3.3.14-1ebea52b4f-a08163a998.zip/node_modules/@apollo/client/", "packageDependencies": [ @@ -293,40 +286,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "subscriptions-transport-ws" ], "linkType": "HARD", - }], - ["virtual:bb4ed02b339ed801b02d2ec15b42a5aa7b1afdaf44119aefaab128a59d6e16cc6018880c169f24bf2107550e914562ee9e1780db01a12e1bc3c492ad0a049c36#npm:3.3.19", { - "packageLocation": "./.yarn/$$virtual/@apollo-client-virtual-c2be05e84b/0/cache/@apollo-client-npm-3.3.19-39baf9f99e-a7266cfdff.zip/node_modules/@apollo/client/", - "packageDependencies": [ - ["@apollo/client", "virtual:bb4ed02b339ed801b02d2ec15b42a5aa7b1afdaf44119aefaab128a59d6e16cc6018880c169f24bf2107550e914562ee9e1780db01a12e1bc3c492ad0a049c36#npm:3.3.19"], - ["@graphql-typed-document-node/core", "virtual:51e032042460c5acb2fee2f0f33950a409d321b7c2d7932ec5edd2d65c6eef219caf38d6fbd40ae889377bab601157a449b02b052ebb0cf87371875d317dc909#npm:3.1.0"], - ["@types/graphql", null], - ["@types/react", null], - ["@types/subscriptions-transport-ws", null], - ["@types/zen-observable", "npm:0.8.2"], - ["@wry/context", "npm:0.6.0"], - ["@wry/equality", "npm:0.4.0"], - ["fast-json-stable-stringify", "npm:2.1.0"], - ["graphql", null], - ["graphql-tag", "virtual:51e032042460c5acb2fee2f0f33950a409d321b7c2d7932ec5edd2d65c6eef219caf38d6fbd40ae889377bab601157a449b02b052ebb0cf87371875d317dc909#npm:2.12.4"], - ["hoist-non-react-statics", "npm:3.3.2"], - ["optimism", "npm:0.16.1"], - ["prop-types", "npm:15.7.2"], - ["react", "npm:17.0.2"], - ["subscriptions-transport-ws", null], - ["symbol-observable", "npm:2.0.3"], - ["ts-invariant", "npm:0.7.3"], - ["tslib", "npm:1.14.1"], - ["zen-observable", "npm:0.8.15"] - ], - "packagePeers": [ - "@types/graphql", - "@types/react", - "@types/subscriptions-transport-ws", - "graphql", - "react", - "subscriptions-transport-ws" - ], - "linkType": "HARD", }] ]], ["@apollo/protobufjs", [ @@ -9424,7 +9383,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "packageLocation": "./packages/openneuro-components/", "packageDependencies": [ ["@openneuro/components", "workspace:packages/openneuro-components"], - ["@apollo/client", "virtual:bb4ed02b339ed801b02d2ec15b42a5aa7b1afdaf44119aefaab128a59d6e16cc6018880c169f24bf2107550e914562ee9e1780db01a12e1bc3c492ad0a049c36#npm:3.3.19"], ["@mdx-js/react", "virtual:0f7d3aee8f4ba1ddd800f44d0aa4455a1e4b9ae1a24c9eda9668f886bc29f684a49cc3e1c10c4481252ea0f7eec58c4be3167e18e5c332f257a51ab3e50e4f7a#npm:1.6.22"], ["@storybook/addon-a11y", "virtual:bb4ed02b339ed801b02d2ec15b42a5aa7b1afdaf44119aefaab128a59d6e16cc6018880c169f24bf2107550e914562ee9e1780db01a12e1bc3c492ad0a049c36#npm:6.2.9"], ["@storybook/addon-actions", "virtual:bb4ed02b339ed801b02d2ec15b42a5aa7b1afdaf44119aefaab128a59d6e16cc6018880c169f24bf2107550e914562ee9e1780db01a12e1bc3c492ad0a049c36#npm:6.2.9"], @@ -9443,7 +9401,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@types/slick-carousel", "npm:1.6.34"], ["css-loader", "virtual:bb4ed02b339ed801b02d2ec15b42a5aa7b1afdaf44119aefaab128a59d6e16cc6018880c169f24bf2107550e914562ee9e1780db01a12e1bc3c492ad0a049c36#npm:5.2.4"], ["date-fns", "npm:2.21.3"], - ["graphql-hooks", "virtual:bb4ed02b339ed801b02d2ec15b42a5aa7b1afdaf44119aefaab128a59d6e16cc6018880c169f24bf2107550e914562ee9e1780db01a12e1bc3c492ad0a049c36#npm:5.1.1"], ["rc-slider", "virtual:bb4ed02b339ed801b02d2ec15b42a5aa7b1afdaf44119aefaab128a59d6e16cc6018880c169f24bf2107550e914562ee9e1780db01a12e1bc3c492ad0a049c36#npm:9.7.2"], ["react", "npm:17.0.2"], ["react-router-dom", "virtual:bb4ed02b339ed801b02d2ec15b42a5aa7b1afdaf44119aefaab128a59d6e16cc6018880c169f24bf2107550e914562ee9e1780db01a12e1bc3c492ad0a049c36#npm:5.2.0"], @@ -20224,15 +20181,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], - ["dequal", [ - ["npm:2.0.2", { - "packageLocation": "./.yarn/cache/dequal-npm-2.0.2-370927eb6c-3b5b019a87.zip/node_modules/dequal/", - "packageDependencies": [ - ["dequal", "npm:2.0.2"] - ], - "linkType": "HARD", - }] - ]], ["des.js", [ ["npm:1.0.1", { "packageLocation": "./.yarn/cache/des.js-npm-1.0.1-9f155eddb6-74cd0aa0c5.zip/node_modules/des.js/", @@ -25291,7 +25239,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ]], ["git-win", [ ["npm:2.3.0", { - "packageLocation": "./.yarn/cache/git-win-npm-2.3.0-b98f2b7122-a273c79c22.zip/node_modules/git-win/", + "packageLocation": "./.yarn/unplugged/git-win-npm-2.3.0-b98f2b7122/node_modules/git-win/", "packageDependencies": [ ["git-win", "npm:2.3.0"], ["@babel/runtime", "npm:7.14.0"], @@ -25831,30 +25779,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { "linkType": "HARD", }] ]], - ["graphql-hooks", [ - ["npm:5.1.1", { - "packageLocation": "./.yarn/cache/graphql-hooks-npm-5.1.1-b58943726d-4d615236e2.zip/node_modules/graphql-hooks/", - "packageDependencies": [ - ["graphql-hooks", "npm:5.1.1"] - ], - "linkType": "SOFT", - }], - ["virtual:bb4ed02b339ed801b02d2ec15b42a5aa7b1afdaf44119aefaab128a59d6e16cc6018880c169f24bf2107550e914562ee9e1780db01a12e1bc3c492ad0a049c36#npm:5.1.1", { - "packageLocation": "./.yarn/$$virtual/graphql-hooks-virtual-e19fdcc460/0/cache/graphql-hooks-npm-5.1.1-b58943726d-4d615236e2.zip/node_modules/graphql-hooks/", - "packageDependencies": [ - ["graphql-hooks", "virtual:bb4ed02b339ed801b02d2ec15b42a5aa7b1afdaf44119aefaab128a59d6e16cc6018880c169f24bf2107550e914562ee9e1780db01a12e1bc3c492ad0a049c36#npm:5.1.1"], - ["@types/react", null], - ["dequal", "npm:2.0.2"], - ["extract-files", "npm:9.0.0"], - ["react", "npm:17.0.2"] - ], - "packagePeers": [ - "@types/react", - "react" - ], - "linkType": "HARD", - }] - ]], ["graphql-iso-date", [ ["npm:3.6.1", { "packageLocation": "./.yarn/cache/graphql-iso-date-npm-3.6.1-bbab129ea7-d33245ccab.zip/node_modules/graphql-iso-date/", @@ -33869,15 +33793,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ["@wry/trie", "npm:0.3.0"] ], "linkType": "HARD", - }], - ["npm:0.16.1", { - "packageLocation": "./.yarn/cache/optimism-npm-0.16.1-b6a027d092-760b129552.zip/node_modules/optimism/", - "packageDependencies": [ - ["optimism", "npm:0.16.1"], - ["@wry/context", "npm:0.6.0"], - ["@wry/trie", "npm:0.3.0"] - ], - "linkType": "HARD", }] ]], ["optimize-css-assets-webpack-plugin", [ diff --git a/packages/openneuro-server/src/handlers/feature-flags.js b/packages/openneuro-server/src/handlers/feature-flags.js new file mode 100644 index 0000000000..6293da3eca --- /dev/null +++ b/packages/openneuro-server/src/handlers/feature-flags.js @@ -0,0 +1,14 @@ +const feature = { + REDESIGN_2021: 'redesign_2021', +} + +export const setFlagRedesign2021 = (req, res) => { + res + .cookie(feature.REDESIGN_2021, true) + .send(`You have enabled feature ${feature.REDESIGN_2021}.`) +} + +export const unsetFlagRedesign2021 = (req, res) => { + res.clearCookie(feature.REDESIGN_2021) + res.send(`You have disabled feature ${feature.REDESIGN_2021}.`) +} diff --git a/yarn.lock b/yarn.lock index 155997f077..8e3a71bc05 100644 --- a/yarn.lock +++ b/yarn.lock @@ -35,36 +35,6 @@ __metadata: languageName: node linkType: hard -"@apollo/client@npm:^3.3.19": - version: 3.3.19 - resolution: "@apollo/client@npm:3.3.19" - dependencies: - "@graphql-typed-document-node/core": ^3.0.0 - "@types/zen-observable": ^0.8.0 - "@wry/context": ^0.6.0 - "@wry/equality": ^0.4.0 - fast-json-stable-stringify: ^2.0.0 - graphql-tag: ^2.12.0 - hoist-non-react-statics: ^3.3.2 - optimism: ^0.16.0 - prop-types: ^15.7.2 - symbol-observable: ^2.0.0 - ts-invariant: ^0.7.0 - tslib: ^1.10.0 - zen-observable: ^0.8.14 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 - react: ^16.8.0 || ^17.0.0 - subscriptions-transport-ws: ^0.9.0 - peerDependenciesMeta: - react: - optional: true - subscriptions-transport-ws: - optional: true - checksum: a7266cfdff900ef71adece4d24c853fc6179dfe3d3b89905b468b0a487959a435ef84219fb1266c86e2edb0747ff0e52b6ac49dba72bdac7cdbc55e1d0a2e357 - languageName: node - linkType: hard - "@apollo/protobufjs@npm:1.2.2, @apollo/protobufjs@npm:^1.0.3": version: 1.2.2 resolution: "@apollo/protobufjs@npm:1.2.2" @@ -4880,7 +4850,6 @@ __metadata: version: 0.0.0-use.local resolution: "@openneuro/components@workspace:packages/openneuro-components" dependencies: - "@apollo/client": ^3.3.19 "@mdx-js/react": ^1.6.22 "@storybook/addon-a11y": ^6.2.8 "@storybook/addon-actions": ^6.2.8 @@ -4899,7 +4868,6 @@ __metadata: "@types/slick-carousel": ^1 css-loader: ^5.2.1 date-fns: ^2.21.1 - graphql-hooks: ^5.1.1 rc-slider: ^9.7.2 react: ^17.0.1 react-router-dom: ^5.2.0 @@ -13355,13 +13323,6 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.0": - version: 2.0.2 - resolution: "dequal@npm:2.0.2" - checksum: 3b5b019a873da282a25512c632c077e5e8e2a019e71c5b6968836443b861e44176ee3934facfecdc14994d553c1ff4a6c7232278d6aef87baf65e2413d41760c - languageName: node - linkType: hard - "des.js@npm:^1.0.0": version: 1.0.1 resolution: "des.js@npm:1.0.1" @@ -15644,7 +15605,7 @@ __metadata: languageName: node linkType: hard -"extract-files@npm:9.0.0, extract-files@npm:^9.0.0": +"extract-files@npm:9.0.0": version: 9.0.0 resolution: "extract-files@npm:9.0.0" checksum: 021b10787718a2f81847e58bd5eea3b09d636e8bb3cf281dad2aeeafc439c32f9e7d2353b2b4b30f6a7febf93be9d1edd76706ea56cff6850b3f39e1594e5bb3 @@ -17957,18 +17918,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"graphql-hooks@npm:^5.1.1": - version: 5.1.1 - resolution: "graphql-hooks@npm:5.1.1" - dependencies: - dequal: ^2.0.0 - extract-files: ^9.0.0 - peerDependencies: - react: ^17.0.0 - checksum: 4d615236e206e70d6f334e513243385c10c9524d50542e6ca9eee85c843c0effea7d07fa5ff84b8b15619598c46a93a5cf7d6ec979c95118147473414525e1e9 - languageName: node - linkType: hard - "graphql-iso-date@npm:^3.6.1": version: 3.6.1 resolution: "graphql-iso-date@npm:3.6.1" @@ -25038,16 +24987,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"optimism@npm:^0.16.0": - version: 0.16.1 - resolution: "optimism@npm:0.16.1" - dependencies: - "@wry/context": ^0.6.0 - "@wry/trie": ^0.3.0 - checksum: 760b1295525ba86592edf245736ed704670330a8997d91144c1b45bc9f76e392b53c170fb1eb3b265f67584a4f7e205bc777d0c8ed97774326dba9fbfe899e27 - languageName: node - linkType: hard - "optimize-css-assets-webpack-plugin@npm:^5.0.3": version: 5.0.6 resolution: "optimize-css-assets-webpack-plugin@npm:5.0.6" From 17d9f7a6daed04e5146416274df73b5c53ce1b32 Mon Sep 17 00:00:00 2001 From: David Nishikawa Date: Thu, 27 May 2021 14:17:35 -0700 Subject: [PATCH 2/7] Enable toggle for feature `redesign_2021`. --- .../src/scripts/components/feature-toggle.tsx | 18 +++++++++++++++ packages/openneuro-app/src/scripts/index.jsx | 23 ++++++++++++------- packages/openneuro-server/src/routes.js | 15 ++++++++++++ 3 files changed, 48 insertions(+), 8 deletions(-) create mode 100644 packages/openneuro-app/src/scripts/components/feature-toggle.tsx diff --git a/packages/openneuro-app/src/scripts/components/feature-toggle.tsx b/packages/openneuro-app/src/scripts/components/feature-toggle.tsx new file mode 100644 index 0000000000..1e620add65 --- /dev/null +++ b/packages/openneuro-app/src/scripts/components/feature-toggle.tsx @@ -0,0 +1,18 @@ +import React, { FC, ReactNode } from 'react' +import { useCookies } from 'react-cookie' + +interface FeatureToggleProps { + renderOnEnabled(): ReactNode + renderOnDisabled(): ReactNode +} + +const FeatureToggle: FC = ({ + feature, + renderOnEnabled, + renderOnDisabled, +}) => { + const [cookies] = useCookies() + return cookies[feature] ? renderOnEnabled() : renderOnDisabled() +} + +export default FeatureToggle diff --git a/packages/openneuro-app/src/scripts/index.jsx b/packages/openneuro-app/src/scripts/index.jsx index 331de16ba6..dfee761d8a 100644 --- a/packages/openneuro-app/src/scripts/index.jsx +++ b/packages/openneuro-app/src/scripts/index.jsx @@ -4,17 +4,24 @@ import React from 'react' import Navbar from './nav/navbar.jsx' import Routes from './routes.jsx' import Uploader from './uploader/uploader.jsx' +import FeatureToggle from './components/feature-toggle' const Index = () => { return ( - -
-
- - -
-
-
+

Redesign 2021

} + renderOnDisabled={() => ( + +
+
+ + +
+
+
+ )} + /> ) } diff --git a/packages/openneuro-server/src/routes.js b/packages/openneuro-server/src/routes.js index 11f0319f6f..c0f3f32fb0 100644 --- a/packages/openneuro-server/src/routes.js +++ b/packages/openneuro-server/src/routes.js @@ -6,6 +6,10 @@ import * as datalad from './handlers/datalad' import * as comments from './handlers/comments' import { clientConfig } from './handlers/config.js' import * as subscriptions from './handlers/subscriptions' +import { + setFlagRedesign2021, + unsetFlagRedesign2021, +} from './handlers/feature-flags' import verifyUser from './libs/authentication/verifyUser.js' import * as google from './libs/authentication/google.js' import * as orcid from './libs/authentication/orcid.js' @@ -156,6 +160,17 @@ const routes = [ url: '/sitemap', handler: sitemapHandler, }, + // feature flag setters and unsetters + { + method: 'get', + url: '/feature-flag/redesign-2021/enable', + handler: setFlagRedesign2021, + }, + { + method: 'get', + url: '/feature-flag/redesign-2021/disable', + handler: unsetFlagRedesign2021, + }, ] // initialize routes ------------------------------- From eb198f9a1e0121427bd814a03556f87e8fa3cd76 Mon Sep 17 00:00:00 2001 From: David Nishikawa Date: Thu, 27 May 2021 14:26:00 -0700 Subject: [PATCH 3/7] Make feature consistent with enable/disable urls. --- packages/openneuro-app/src/scripts/index.jsx | 2 +- packages/openneuro-server/src/handlers/feature-flags.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/openneuro-app/src/scripts/index.jsx b/packages/openneuro-app/src/scripts/index.jsx index dfee761d8a..6c1e2f260a 100644 --- a/packages/openneuro-app/src/scripts/index.jsx +++ b/packages/openneuro-app/src/scripts/index.jsx @@ -9,7 +9,7 @@ import FeatureToggle from './components/feature-toggle' const Index = () => { return (

Redesign 2021

} renderOnDisabled={() => ( diff --git a/packages/openneuro-server/src/handlers/feature-flags.js b/packages/openneuro-server/src/handlers/feature-flags.js index 6293da3eca..f0ea87747b 100644 --- a/packages/openneuro-server/src/handlers/feature-flags.js +++ b/packages/openneuro-server/src/handlers/feature-flags.js @@ -1,5 +1,5 @@ const feature = { - REDESIGN_2021: 'redesign_2021', + REDESIGN_2021: 'redesign-2021', } export const setFlagRedesign2021 = (req, res) => { From 2311e932ef9e6277a7d8518e93a75fa07bd78c1f Mon Sep 17 00:00:00 2001 From: David Nishikawa Date: Thu, 27 May 2021 14:42:23 -0700 Subject: [PATCH 4/7] Simplify enable/disable urls. --- packages/openneuro-server/src/routes.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/openneuro-server/src/routes.js b/packages/openneuro-server/src/routes.js index c0f3f32fb0..d284c052de 100644 --- a/packages/openneuro-server/src/routes.js +++ b/packages/openneuro-server/src/routes.js @@ -163,12 +163,12 @@ const routes = [ // feature flag setters and unsetters { method: 'get', - url: '/feature-flag/redesign-2021/enable', + url: '/feature/redesign-2021/enable', handler: setFlagRedesign2021, }, { method: 'get', - url: '/feature-flag/redesign-2021/disable', + url: '/feature/redesign-2021/disable', handler: unsetFlagRedesign2021, }, ] From 75b55081caaab1ebe2789fa0e4c75a8c796f1822 Mon Sep 17 00:00:00 2001 From: David Nishikawa Date: Thu, 27 May 2021 15:11:05 -0700 Subject: [PATCH 5/7] Redesign endpoints redirect to homepage. --- .pnp.js | 2 +- packages/openneuro-server/src/handlers/feature-flags.js | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.pnp.js b/.pnp.js index e6969db92f..df4733318d 100755 --- a/.pnp.js +++ b/.pnp.js @@ -25239,7 +25239,7 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) { ]], ["git-win", [ ["npm:2.3.0", { - "packageLocation": "./.yarn/unplugged/git-win-npm-2.3.0-b98f2b7122/node_modules/git-win/", + "packageLocation": "./.yarn/cache/git-win-npm-2.3.0-b98f2b7122-a273c79c22.zip/node_modules/git-win/", "packageDependencies": [ ["git-win", "npm:2.3.0"], ["@babel/runtime", "npm:7.14.0"], diff --git a/packages/openneuro-server/src/handlers/feature-flags.js b/packages/openneuro-server/src/handlers/feature-flags.js index f0ea87747b..345c50fd72 100644 --- a/packages/openneuro-server/src/handlers/feature-flags.js +++ b/packages/openneuro-server/src/handlers/feature-flags.js @@ -3,12 +3,10 @@ const feature = { } export const setFlagRedesign2021 = (req, res) => { - res - .cookie(feature.REDESIGN_2021, true) - .send(`You have enabled feature ${feature.REDESIGN_2021}.`) + res.cookie(feature.REDESIGN_2021, true).redirect('/') } export const unsetFlagRedesign2021 = (req, res) => { res.clearCookie(feature.REDESIGN_2021) - res.send(`You have disabled feature ${feature.REDESIGN_2021}.`) + res.redirect('/') } From 03a60fd77bd8b035e953e74a0110af56ff83eb24 Mon Sep 17 00:00:00 2001 From: David Nishikawa Date: Fri, 28 May 2021 09:04:24 -0700 Subject: [PATCH 6/7] add feature to FeatureToggleProps --- packages/openneuro-app/src/scripts/components/feature-toggle.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/openneuro-app/src/scripts/components/feature-toggle.tsx b/packages/openneuro-app/src/scripts/components/feature-toggle.tsx index 1e620add65..35fb7e6998 100644 --- a/packages/openneuro-app/src/scripts/components/feature-toggle.tsx +++ b/packages/openneuro-app/src/scripts/components/feature-toggle.tsx @@ -2,6 +2,7 @@ import React, { FC, ReactNode } from 'react' import { useCookies } from 'react-cookie' interface FeatureToggleProps { + feature: string renderOnEnabled(): ReactNode renderOnDisabled(): ReactNode } From 1d802896a0155b47d8d05ee48b3fe71801b785c1 Mon Sep 17 00:00:00 2001 From: David Nishikawa Date: Fri, 28 May 2021 09:18:18 -0700 Subject: [PATCH 7/7] Have FeatureToggle return jsx. --- .../openneuro-app/src/scripts/components/feature-toggle.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/openneuro-app/src/scripts/components/feature-toggle.tsx b/packages/openneuro-app/src/scripts/components/feature-toggle.tsx index 35fb7e6998..de3a78cc78 100644 --- a/packages/openneuro-app/src/scripts/components/feature-toggle.tsx +++ b/packages/openneuro-app/src/scripts/components/feature-toggle.tsx @@ -13,7 +13,7 @@ const FeatureToggle: FC = ({ renderOnDisabled, }) => { const [cookies] = useCookies() - return cookies[feature] ? renderOnEnabled() : renderOnDisabled() + return <>{cookies[feature] ? renderOnEnabled() : renderOnDisabled()} } export default FeatureToggle