Skip to content

Commit 60a871c

Browse files
authored
Merge pull request #2144 from OpenNeuroOrg/107-feature-flag
107 feature flag
2 parents dcf0312 + 1d80289 commit 60a871c

6 files changed

Lines changed: 62 additions & 155 deletions

File tree

.pnp.js

Lines changed: 0 additions & 85 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import React, { FC, ReactNode } from 'react'
2+
import { useCookies } from 'react-cookie'
3+
4+
interface FeatureToggleProps {
5+
feature: string
6+
renderOnEnabled(): ReactNode
7+
renderOnDisabled(): ReactNode
8+
}
9+
10+
const FeatureToggle: FC<FeatureToggleProps> = ({
11+
feature,
12+
renderOnEnabled,
13+
renderOnDisabled,
14+
}) => {
15+
const [cookies] = useCookies()
16+
return <>{cookies[feature] ? renderOnEnabled() : renderOnDisabled()}</>
17+
}
18+
19+
export default FeatureToggle

packages/openneuro-app/src/scripts/index.jsx

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,24 @@ import React from 'react'
44
import Navbar from './nav/navbar.jsx'
55
import Routes from './routes.jsx'
66
import Uploader from './uploader/uploader.jsx'
7+
import FeatureToggle from './components/feature-toggle'
78

89
const Index = () => {
910
return (
10-
<Uploader>
11-
<div className="page">
12-
<div className="main">
13-
<Navbar />
14-
<Routes />
15-
</div>
16-
</div>
17-
</Uploader>
11+
<FeatureToggle
12+
feature="redesign-2021"
13+
renderOnEnabled={() => <h1>Redesign 2021</h1>}
14+
renderOnDisabled={() => (
15+
<Uploader>
16+
<div className="page">
17+
<div className="main">
18+
<Navbar />
19+
<Routes />
20+
</div>
21+
</div>
22+
</Uploader>
23+
)}
24+
/>
1825
)
1926
}
2027

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
const feature = {
2+
REDESIGN_2021: 'redesign-2021',
3+
}
4+
5+
export const setFlagRedesign2021 = (req, res) => {
6+
res.cookie(feature.REDESIGN_2021, true).redirect('/')
7+
}
8+
9+
export const unsetFlagRedesign2021 = (req, res) => {
10+
res.clearCookie(feature.REDESIGN_2021)
11+
res.redirect('/')
12+
}

packages/openneuro-server/src/routes.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ import * as datalad from './handlers/datalad'
66
import * as comments from './handlers/comments'
77
import { clientConfig } from './handlers/config.js'
88
import * as subscriptions from './handlers/subscriptions'
9+
import {
10+
setFlagRedesign2021,
11+
unsetFlagRedesign2021,
12+
} from './handlers/feature-flags'
913
import verifyUser from './libs/authentication/verifyUser.js'
1014
import * as google from './libs/authentication/google.js'
1115
import * as orcid from './libs/authentication/orcid.js'
@@ -156,6 +160,17 @@ const routes = [
156160
url: '/sitemap',
157161
handler: sitemapHandler,
158162
},
163+
// feature flag setters and unsetters
164+
{
165+
method: 'get',
166+
url: '/feature/redesign-2021/enable',
167+
handler: setFlagRedesign2021,
168+
},
169+
{
170+
method: 'get',
171+
url: '/feature/redesign-2021/disable',
172+
handler: unsetFlagRedesign2021,
173+
},
159174
]
160175

161176
// initialize routes -------------------------------

yarn.lock

Lines changed: 1 addition & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -35,36 +35,6 @@ __metadata:
3535
languageName: node
3636
linkType: hard
3737

38-
"@apollo/client@npm:^3.3.19":
39-
version: 3.3.19
40-
resolution: "@apollo/client@npm:3.3.19"
41-
dependencies:
42-
"@graphql-typed-document-node/core": ^3.0.0
43-
"@types/zen-observable": ^0.8.0
44-
"@wry/context": ^0.6.0
45-
"@wry/equality": ^0.4.0
46-
fast-json-stable-stringify: ^2.0.0
47-
graphql-tag: ^2.12.0
48-
hoist-non-react-statics: ^3.3.2
49-
optimism: ^0.16.0
50-
prop-types: ^15.7.2
51-
symbol-observable: ^2.0.0
52-
ts-invariant: ^0.7.0
53-
tslib: ^1.10.0
54-
zen-observable: ^0.8.14
55-
peerDependencies:
56-
graphql: ^14.0.0 || ^15.0.0
57-
react: ^16.8.0 || ^17.0.0
58-
subscriptions-transport-ws: ^0.9.0
59-
peerDependenciesMeta:
60-
react:
61-
optional: true
62-
subscriptions-transport-ws:
63-
optional: true
64-
checksum: a7266cfdff900ef71adece4d24c853fc6179dfe3d3b89905b468b0a487959a435ef84219fb1266c86e2edb0747ff0e52b6ac49dba72bdac7cdbc55e1d0a2e357
65-
languageName: node
66-
linkType: hard
67-
6838
"@apollo/protobufjs@npm:1.2.2, @apollo/protobufjs@npm:^1.0.3":
6939
version: 1.2.2
7040
resolution: "@apollo/protobufjs@npm:1.2.2"
@@ -4880,7 +4850,6 @@ __metadata:
48804850
version: 0.0.0-use.local
48814851
resolution: "@openneuro/components@workspace:packages/openneuro-components"
48824852
dependencies:
4883-
"@apollo/client": ^3.3.19
48844853
"@mdx-js/react": ^1.6.22
48854854
"@storybook/addon-a11y": ^6.2.8
48864855
"@storybook/addon-actions": ^6.2.8
@@ -4899,7 +4868,6 @@ __metadata:
48994868
"@types/slick-carousel": ^1
49004869
css-loader: ^5.2.1
49014870
date-fns: ^2.21.1
4902-
graphql-hooks: ^5.1.1
49034871
rc-slider: ^9.7.2
49044872
react: ^17.0.1
49054873
react-router-dom: ^5.2.0
@@ -13355,13 +13323,6 @@ __metadata:
1335513323
languageName: node
1335613324
linkType: hard
1335713325

13358-
"dequal@npm:^2.0.0":
13359-
version: 2.0.2
13360-
resolution: "dequal@npm:2.0.2"
13361-
checksum: 3b5b019a873da282a25512c632c077e5e8e2a019e71c5b6968836443b861e44176ee3934facfecdc14994d553c1ff4a6c7232278d6aef87baf65e2413d41760c
13362-
languageName: node
13363-
linkType: hard
13364-
1336513326
"des.js@npm:^1.0.0":
1336613327
version: 1.0.1
1336713328
resolution: "des.js@npm:1.0.1"
@@ -15644,7 +15605,7 @@ __metadata:
1564415605
languageName: node
1564515606
linkType: hard
1564615607

15647-
"extract-files@npm:9.0.0, extract-files@npm:^9.0.0":
15608+
"extract-files@npm:9.0.0":
1564815609
version: 9.0.0
1564915610
resolution: "extract-files@npm:9.0.0"
1565015611
checksum: 021b10787718a2f81847e58bd5eea3b09d636e8bb3cf281dad2aeeafc439c32f9e7d2353b2b4b30f6a7febf93be9d1edd76706ea56cff6850b3f39e1594e5bb3
@@ -17957,18 +17918,6 @@ fsevents@^1.2.7:
1795717918
languageName: node
1795817919
linkType: hard
1795917920

17960-
"graphql-hooks@npm:^5.1.1":
17961-
version: 5.1.1
17962-
resolution: "graphql-hooks@npm:5.1.1"
17963-
dependencies:
17964-
dequal: ^2.0.0
17965-
extract-files: ^9.0.0
17966-
peerDependencies:
17967-
react: ^17.0.0
17968-
checksum: 4d615236e206e70d6f334e513243385c10c9524d50542e6ca9eee85c843c0effea7d07fa5ff84b8b15619598c46a93a5cf7d6ec979c95118147473414525e1e9
17969-
languageName: node
17970-
linkType: hard
17971-
1797217921
"graphql-iso-date@npm:^3.6.1":
1797317922
version: 3.6.1
1797417923
resolution: "graphql-iso-date@npm:3.6.1"
@@ -25038,16 +24987,6 @@ fsevents@^1.2.7:
2503824987
languageName: node
2503924988
linkType: hard
2504024989

25041-
"optimism@npm:^0.16.0":
25042-
version: 0.16.1
25043-
resolution: "optimism@npm:0.16.1"
25044-
dependencies:
25045-
"@wry/context": ^0.6.0
25046-
"@wry/trie": ^0.3.0
25047-
checksum: 760b1295525ba86592edf245736ed704670330a8997d91144c1b45bc9f76e392b53c170fb1eb3b265f67584a4f7e205bc777d0c8ed97774326dba9fbfe899e27
25048-
languageName: node
25049-
linkType: hard
25050-
2505124990
"optimize-css-assets-webpack-plugin@npm:^5.0.3":
2505224991
version: 5.0.6
2505324992
resolution: "optimize-css-assets-webpack-plugin@npm:5.0.6"

0 commit comments

Comments
 (0)