@openeventkit/event-site 2.0.77 → 2.0.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/env.template +2 -1
- package/gatsby-ssr.js +2 -2
- package/package.json +1 -1
- package/src/components/Seo.js +19 -14
- package/src/components/summit-my-orders-tickets/components/TicketPopup/TicketPopup.js +14 -12
- package/src/reducers/index.js +23 -0
- package/src/routes/WithAuthRoute.js +13 -23
- package/src/state/ReduxSSRWrapper.js +9 -0
- package/src/state/ReduxWrapper.js +12 -12
- package/src/state/store.js +47 -48
- package/src/templates/ticket-error-page.js +39 -44
- package/src/utils/envVariables.js +11 -0
- package/src/utils/urlFormating.js +1 -1
- package/src/state/reduxPersistStorage.js +0 -26
package/env.template
CHANGED
package/gatsby-ssr.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import
|
|
2
|
+
import ReduxSSRWrapper from "./src/state/ReduxSSRWrapper";
|
|
3
3
|
import {
|
|
4
4
|
HtmlAttributes,
|
|
5
5
|
HeadComponents,
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
import { JSDOM } from "jsdom";
|
|
10
10
|
import { XMLHttpRequest } from "xmlhttprequest";
|
|
11
11
|
|
|
12
|
-
export const wrapRootElement =
|
|
12
|
+
export const wrapRootElement = ReduxSSRWrapper;
|
|
13
13
|
|
|
14
14
|
export const onRenderBody = ({
|
|
15
15
|
setHtmlAttributes,
|
package/package.json
CHANGED
package/src/components/Seo.js
CHANGED
|
@@ -1,29 +1,34 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import PropTypes from "prop-types";
|
|
3
|
+
import useSiteMetadata from "@utils/useSiteMetadata";
|
|
3
4
|
import useSiteSettings from "@utils/useSiteSettings";
|
|
4
|
-
import { Helmet } from "react-helmet";
|
|
5
5
|
import { getSrc } from "gatsby-plugin-image";
|
|
6
|
-
import {
|
|
6
|
+
import { buildUrl } from "@utils/urlFormating";
|
|
7
|
+
import { getEnvVariable, SITE_URL } from "@utils/envVariables";
|
|
7
8
|
|
|
8
9
|
const Seo = ({ title, description, location, children }) => {
|
|
9
10
|
const {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const
|
|
11
|
+
title: siteTitle,
|
|
12
|
+
description: defaultDescription
|
|
13
|
+
} = useSiteMetadata();
|
|
14
|
+
|
|
15
|
+
const siteSettings = useSiteSettings();
|
|
16
|
+
const image = siteSettings.siteMetadata?.image
|
|
17
|
+
|
|
18
|
+
const siteUrl = getEnvVariable(SITE_URL);
|
|
19
|
+
const siteUrlInfo = siteUrl ? new URL(siteUrl) : null;
|
|
20
|
+
const scheme = siteUrlInfo ? siteUrlInfo.protocol.replace(":", "") : "https";
|
|
21
|
+
const host = siteUrlInfo ? siteUrlInfo.host : null;
|
|
18
22
|
const { pathname } = location;
|
|
23
|
+
|
|
19
24
|
const seo = {
|
|
20
25
|
title: title ? `${siteTitle} - ${title}` : siteTitle,
|
|
21
26
|
description: description || defaultDescription,
|
|
22
|
-
url:
|
|
23
|
-
image: host && image ?
|
|
27
|
+
url: buildUrl(scheme, host, pathname),
|
|
28
|
+
image: host && image ? buildUrl(scheme, host, getSrc(image)) : null,
|
|
24
29
|
};
|
|
25
30
|
return (
|
|
26
|
-
|
|
31
|
+
<>
|
|
27
32
|
{seo.title && <title>{seo.title}</title>}
|
|
28
33
|
{seo.description && <meta name="description" content={seo.description} />}
|
|
29
34
|
{seo.url && <meta property="og:url" content={seo.url} />}
|
|
@@ -38,7 +43,7 @@ const Seo = ({ title, description, location, children }) => {
|
|
|
38
43
|
{seo.description && <meta name="twitter:description" content={seo.description} />}
|
|
39
44
|
{seo.image && <meta name="twitter:image" content={seo.image} />}
|
|
40
45
|
{children}
|
|
41
|
-
|
|
46
|
+
</>
|
|
42
47
|
);
|
|
43
48
|
};
|
|
44
49
|
|
|
@@ -140,18 +140,20 @@ export const TicketPopup = ({ ticket, order, summit, onClose, fromTicketList, fr
|
|
|
140
140
|
</TabPanel>
|
|
141
141
|
)}
|
|
142
142
|
|
|
143
|
-
|
|
144
|
-
<
|
|
145
|
-
<
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
143
|
+
{!isUnassigned && (
|
|
144
|
+
<TabPanel className="ticket-popup-panel ticket-popup-panel--edit">
|
|
145
|
+
<div className="ticket-popup-scroll">
|
|
146
|
+
<TicketPopupEditDetailsForm
|
|
147
|
+
ticket={ticket}
|
|
148
|
+
summit={summit}
|
|
149
|
+
order={order}
|
|
150
|
+
canEditTicketData={canEditTicketData}
|
|
151
|
+
goToReassignPanel={() => setTabIndex(1)}
|
|
152
|
+
context={fromTicketList ? 'ticket-list' : 'order-list'}
|
|
153
|
+
/>
|
|
154
|
+
</div>
|
|
155
|
+
</TabPanel>
|
|
156
|
+
)}
|
|
155
157
|
|
|
156
158
|
{!isUnassigned && isReassignable && isUserOrderOwner && (
|
|
157
159
|
<TabPanel className="ticket-popup-panel ticket-popup-panel--reassign">
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { loggedUserReducer } from "openstack-uicore-foundation/lib/security/reducers";
|
|
2
|
+
import settingReducer from "./setting-reducer";
|
|
3
|
+
import userReducer from "./user-reducer";
|
|
4
|
+
import clockReducer from "./clock-reducer";
|
|
5
|
+
import summitReducer from "./summit-reducer";
|
|
6
|
+
import allSchedulesReducer from "./all-schedules-reducer";
|
|
7
|
+
import presentationsReducer from "./presentations-reducer";
|
|
8
|
+
import eventReducer from "./event-reducer";
|
|
9
|
+
import speakerReducer from "./speaker-reducer";
|
|
10
|
+
import sponsorReducer from "./sponsor-reducer";
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
loggedUserReducer,
|
|
14
|
+
settingReducer,
|
|
15
|
+
userReducer,
|
|
16
|
+
clockReducer,
|
|
17
|
+
summitReducer,
|
|
18
|
+
allSchedulesReducer,
|
|
19
|
+
presentationsReducer,
|
|
20
|
+
eventReducer,
|
|
21
|
+
speakerReducer,
|
|
22
|
+
sponsorReducer,
|
|
23
|
+
};
|
|
@@ -1,31 +1,21 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
import {navigate} from "gatsby";
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { navigate } from "gatsby";
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
|
-
*
|
|
7
|
-
* @param
|
|
8
|
-
* @param
|
|
9
|
-
* @
|
|
10
|
-
* @returns {null|*}
|
|
11
|
-
* @constructor
|
|
5
|
+
* @param {boolean} isLoggedIn - Indicates whether the user is logged in.
|
|
6
|
+
* @param {object} location - The location object from React Router.
|
|
7
|
+
* @param {ReactNode} children - The children components to be rendered.
|
|
8
|
+
* @returns {ReactNode|null} - Returns children if isLoggedIn is true, otherwise redirects to login.
|
|
12
9
|
*/
|
|
13
|
-
const WithAuthRoute = ({
|
|
14
|
-
|
|
15
|
-
isLoggedIn,
|
|
16
|
-
location,
|
|
17
|
-
children
|
|
18
|
-
}) => {
|
|
19
|
-
|
|
10
|
+
const WithAuthRoute = ({ isLoggedIn, location, children }) => {
|
|
11
|
+
React.useEffect(() => {
|
|
20
12
|
if (!isLoggedIn) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return null;
|
|
13
|
+
// Use navigate with state to redirect and add data to navigation state
|
|
14
|
+
navigate("/#login=1", { state: { backUrl: `${location.pathname}` } });
|
|
24
15
|
}
|
|
16
|
+
}, [isLoggedIn, location.pathname]);
|
|
25
17
|
|
|
26
|
-
|
|
18
|
+
return isLoggedIn ? children : null;
|
|
27
19
|
};
|
|
28
20
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
export default connect(mapStateToProps, {})(WithAuthRoute);
|
|
21
|
+
export default WithAuthRoute;
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import * as React from "react";
|
|
2
2
|
import { Provider } from "react-redux";
|
|
3
3
|
import { PersistGate } from "redux-persist/integration/react";
|
|
4
|
-
import store,
|
|
4
|
+
import { store, persistor } from "./store";
|
|
5
5
|
|
|
6
6
|
import { RESET_STATE } from "../actions/base-actions-definitions";
|
|
7
7
|
|
|
8
8
|
const onBeforeLift = () => {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
const params = new URLSearchParams(window.location.search);
|
|
10
|
+
const flush = params.has("flushState");
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
if (flush) {
|
|
13
|
+
store.dispatch({ type: RESET_STATE, payload: null });
|
|
14
|
+
}
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
export default ({ element }) => (
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
<Provider store={store}>
|
|
19
|
+
<PersistGate onBeforeLift={onBeforeLift} persistor={persistor}>
|
|
20
|
+
{element}
|
|
21
|
+
</PersistGate>
|
|
22
|
+
</Provider>
|
|
23
23
|
);
|
package/src/state/store.js
CHANGED
|
@@ -1,68 +1,67 @@
|
|
|
1
|
-
import { applyMiddleware, compose, createStore } from "redux";
|
|
1
|
+
import { applyMiddleware, compose, createStore, combineReducers } from "redux";
|
|
2
2
|
import { persistCombineReducers, persistStore } from "redux-persist";
|
|
3
|
+
import storage from "redux-persist/lib/storage";
|
|
3
4
|
import thunk from "redux-thunk";
|
|
4
|
-
import storage from "./reduxPersistStorage";
|
|
5
5
|
|
|
6
|
-
import
|
|
7
|
-
import settingReducer from "../reducers/setting-reducer";
|
|
8
|
-
import userReducer from "../reducers/user-reducer";
|
|
9
|
-
import clockReducer from "../reducers/clock-reducer";
|
|
10
|
-
import summitReducer from "../reducers/summit-reducer";
|
|
11
|
-
import allSchedulesReducer from "../reducers/all-schedules-reducer";
|
|
12
|
-
import presentationsReducer from "../reducers/presentations-reducer";
|
|
13
|
-
import eventReducer from "../reducers/event-reducer";
|
|
14
|
-
import speakerReducer from "../reducers/speaker-reducer";
|
|
15
|
-
import sponsorReducer from "../reducers/sponsor-reducer";
|
|
16
|
-
import extraQuestionReducer from "../reducers/extra-questions-reducer";
|
|
6
|
+
import * as reducers from "../reducers";
|
|
17
7
|
|
|
18
|
-
//
|
|
8
|
+
// Get from process.env because window is not set yet
|
|
19
9
|
const clientId = process.env.GATSBY_OAUTH2_CLIENT_ID;
|
|
20
10
|
const summitID = process.env.GATSBY_SUMMIT_ID;
|
|
21
11
|
|
|
22
12
|
const config = {
|
|
23
13
|
key: `root_${clientId}_${summitID}`,
|
|
24
|
-
storage
|
|
14
|
+
storage,
|
|
25
15
|
blacklist: [
|
|
26
16
|
// this will be not saved to persistent storage see
|
|
27
17
|
// https://github.com/rt2zz/redux-persist#blacklist--whitelist
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
]
|
|
18
|
+
"summitState",
|
|
19
|
+
"allSchedulesState",
|
|
20
|
+
"presentationsState",
|
|
21
|
+
"eventState",
|
|
22
|
+
"speakerState",
|
|
23
|
+
"sponsorState",
|
|
24
|
+
],
|
|
35
25
|
};
|
|
36
26
|
|
|
37
|
-
const
|
|
38
|
-
loggedUserState: loggedUserReducer,
|
|
39
|
-
settingState: settingReducer,
|
|
40
|
-
userState: userReducer,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
presentationsState: presentationsReducer,
|
|
45
|
-
|
|
46
|
-
speakerState: speakerReducer,
|
|
47
|
-
sponsorState: sponsorReducer,
|
|
48
|
-
|
|
49
|
-
|
|
27
|
+
const states = {
|
|
28
|
+
loggedUserState: reducers.loggedUserReducer,
|
|
29
|
+
settingState: reducers.settingReducer,
|
|
30
|
+
userState: reducers.userReducer,
|
|
31
|
+
clockState: reducers.clockReducer,
|
|
32
|
+
summitState: reducers.summitReducer,
|
|
33
|
+
allSchedulesState: reducers.allSchedulesReducer,
|
|
34
|
+
presentationsState: reducers.presentationsReducer,
|
|
35
|
+
eventState: reducers.eventReducer,
|
|
36
|
+
speakerState: reducers.speakerReducer,
|
|
37
|
+
sponsorState: reducers.sponsorReducer,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const appendLoggedUser = ({ getState }) => (next) => (action) => {
|
|
41
|
+
const { userState: { userProfile } } = getState();
|
|
42
|
+
action.userProfile = userProfile;
|
|
43
|
+
return next(action);
|
|
44
|
+
};
|
|
50
45
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
// Call the next dispatch method in the middleware chain.
|
|
55
|
-
action.userProfile = userProfile;
|
|
56
|
-
return next(action);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
46
|
+
const composeEnhancers = typeof window === "object" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
|
|
47
|
+
? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
|
|
48
|
+
: compose;
|
|
59
49
|
|
|
60
|
-
const
|
|
50
|
+
const enhancer = composeEnhancers(applyMiddleware(appendLoggedUser, thunk));
|
|
61
51
|
|
|
62
|
-
|
|
52
|
+
// Create store without persistor
|
|
53
|
+
export const storeWithoutPersistor = createStore(
|
|
54
|
+
combineReducers(states),
|
|
55
|
+
enhancer
|
|
56
|
+
);
|
|
63
57
|
|
|
64
|
-
|
|
58
|
+
// Create store with persistor
|
|
59
|
+
export const { store, persistor } = (() => {
|
|
60
|
+
const persistedReducers = persistCombineReducers(config, states);
|
|
65
61
|
|
|
66
|
-
|
|
62
|
+
const store = createStore(persistedReducers, enhancer);
|
|
63
|
+
const onRehydrateComplete = () => {};
|
|
64
|
+
const persistor = persistStore(store, null, onRehydrateComplete);
|
|
67
65
|
|
|
68
|
-
|
|
66
|
+
return { store, persistor };
|
|
67
|
+
})();
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import React from
|
|
2
|
-
import {connect} from "react-redux";
|
|
3
|
-
import PropTypes from
|
|
4
|
-
import {
|
|
5
|
-
import {getEnvVariable, REGISTRATION_BASE_URL} from
|
|
6
|
-
import HeroComponent from
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { connect } from "react-redux";
|
|
3
|
+
import PropTypes from "prop-types";
|
|
4
|
+
import { Redirect } from "@gatsbyjs/reach-router";
|
|
5
|
+
import { getEnvVariable, REGISTRATION_BASE_URL } from "../utils/envVariables";
|
|
6
|
+
import HeroComponent from "../components/HeroComponent";
|
|
7
7
|
|
|
8
8
|
export const TicketErrorPageTemplate = class extends React.Component {
|
|
9
9
|
|
|
10
10
|
constructor(props) {
|
|
11
11
|
super(props);
|
|
12
12
|
|
|
13
|
-
const {location} = this.props;
|
|
13
|
+
const { location } = this.props;
|
|
14
14
|
|
|
15
15
|
this.state = {
|
|
16
16
|
error: location.state?.error
|
|
@@ -18,21 +18,21 @@ export const TicketErrorPageTemplate = class extends React.Component {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
redirect() {
|
|
21
|
-
const {error} = this.state;
|
|
21
|
+
const { error } = this.state;
|
|
22
22
|
|
|
23
23
|
if (getEnvVariable(REGISTRATION_BASE_URL)) {
|
|
24
24
|
|
|
25
25
|
let targetUrl = null;
|
|
26
26
|
|
|
27
27
|
switch (error) {
|
|
28
|
-
case
|
|
29
|
-
targetUrl =
|
|
28
|
+
case "no-virtual-access":
|
|
29
|
+
targetUrl = "/";
|
|
30
30
|
break
|
|
31
|
-
case
|
|
32
|
-
targetUrl =
|
|
31
|
+
case "no-ticket":
|
|
32
|
+
targetUrl = "/#registration=1";
|
|
33
33
|
break;
|
|
34
|
-
case
|
|
35
|
-
targetUrl =
|
|
34
|
+
case "incomplete":
|
|
35
|
+
targetUrl = "/a/extra-questions";
|
|
36
36
|
break;
|
|
37
37
|
default:
|
|
38
38
|
break;
|
|
@@ -46,25 +46,23 @@ export const TicketErrorPageTemplate = class extends React.Component {
|
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
setTimeout(() =>
|
|
50
|
-
navigate('/')
|
|
51
|
-
}, 5000);
|
|
49
|
+
setTimeout(() => navigate("/"), 5000);
|
|
52
50
|
}
|
|
53
51
|
|
|
54
52
|
getErrorMessage() {
|
|
55
|
-
const {error} = this.state;
|
|
53
|
+
const { error } = this.state;
|
|
56
54
|
|
|
57
|
-
let message =
|
|
55
|
+
let message = "";
|
|
58
56
|
|
|
59
57
|
switch (error) {
|
|
60
|
-
case
|
|
61
|
-
message =
|
|
58
|
+
case "no-virtual-access":
|
|
59
|
+
message = "I’m sorry your badge does not allow access to this section.";
|
|
62
60
|
break;
|
|
63
|
-
case
|
|
64
|
-
message =
|
|
61
|
+
case "no-ticket":
|
|
62
|
+
message = "I’m sorry you are not registered for this event.";
|
|
65
63
|
break;
|
|
66
|
-
case
|
|
67
|
-
message =
|
|
64
|
+
case "incomplete":
|
|
65
|
+
message = "You have not answered questions required to join the event.";
|
|
68
66
|
break;
|
|
69
67
|
default:
|
|
70
68
|
break;
|
|
@@ -74,11 +72,13 @@ export const TicketErrorPageTemplate = class extends React.Component {
|
|
|
74
72
|
}
|
|
75
73
|
|
|
76
74
|
getRedirectMessage() {
|
|
77
|
-
const {error} = this.state;
|
|
78
|
-
|
|
75
|
+
const { error } = this.state;
|
|
76
|
+
|
|
77
|
+
let message = "";
|
|
78
|
+
|
|
79
79
|
switch (error) {
|
|
80
|
-
case
|
|
81
|
-
message = getEnvVariable(REGISTRATION_BASE_URL) ?
|
|
80
|
+
case "no-ticket":
|
|
81
|
+
message = getEnvVariable(REGISTRATION_BASE_URL) ? "You will be redirected to registration." : "";
|
|
82
82
|
break;
|
|
83
83
|
default:
|
|
84
84
|
break;
|
|
@@ -88,7 +88,7 @@ export const TicketErrorPageTemplate = class extends React.Component {
|
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
render() {
|
|
91
|
-
const {error} = this.state;
|
|
91
|
+
const { error } = this.state;
|
|
92
92
|
|
|
93
93
|
if (error) {
|
|
94
94
|
this.redirect();
|
|
@@ -100,8 +100,7 @@ export const TicketErrorPageTemplate = class extends React.Component {
|
|
|
100
100
|
)
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
|
|
104
|
-
return null
|
|
103
|
+
return <Redirect to={"/"} noThrow />;
|
|
105
104
|
}
|
|
106
105
|
};
|
|
107
106
|
|
|
@@ -109,23 +108,19 @@ TicketErrorPageTemplate.propTypes = {
|
|
|
109
108
|
location: PropTypes.object,
|
|
110
109
|
};
|
|
111
110
|
|
|
112
|
-
const TicketErrorPage = ({location, summit}) =>
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
/>
|
|
119
|
-
)
|
|
120
|
-
|
|
121
|
-
};
|
|
111
|
+
const TicketErrorPage = ({ location, summit }) => (
|
|
112
|
+
<TicketErrorPageTemplate
|
|
113
|
+
location={location}
|
|
114
|
+
summit={summit}
|
|
115
|
+
/>
|
|
116
|
+
);
|
|
122
117
|
|
|
123
118
|
TicketErrorPage.propTypes = {
|
|
124
119
|
location: PropTypes.object,
|
|
125
120
|
};
|
|
126
121
|
|
|
127
|
-
const mapStateToProps = ({summitState}) => ({
|
|
122
|
+
const mapStateToProps = ({ summitState }) => ({
|
|
128
123
|
summit: summitState.summit,
|
|
129
124
|
});
|
|
130
125
|
|
|
131
|
-
export default connect(mapStateToProps,
|
|
126
|
+
export default connect(mapStateToProps, null)(TicketErrorPage);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export const SITE_URL = 'SITE_URL';
|
|
1
2
|
export const IDP_BASE_URL = 'IDP_BASE_URL';
|
|
2
3
|
export const SUMMIT_API_BASE_URL = 'SUMMIT_API_BASE_URL';
|
|
3
4
|
export const SUMMIT_ID = 'SUMMIT_ID';
|
|
@@ -26,6 +27,15 @@ export const TIMEINTERVALSINCE1970_API_URL = 'TIMEINTERVALSINCE1970_API_URL';
|
|
|
26
27
|
export const ABLY_API_KEY = 'ABLY_API_KEY';
|
|
27
28
|
|
|
28
29
|
const processEnv = {
|
|
30
|
+
/**
|
|
31
|
+
* Retrieve the site URL from environment variable set by the deploy provider.
|
|
32
|
+
* See documentation for more details:
|
|
33
|
+
* - Netlify: {@link https://docs.netlify.com/configure-builds/environment-variables/#deploy-urls-and-metadata}
|
|
34
|
+
* - Cloudflare Pages: {@link https://developers.cloudflare.com/pages/platform/build-configuration#environment-variables}
|
|
35
|
+
*
|
|
36
|
+
* If not available, fallback to user-defined GATSBY_SITE_URL env var.
|
|
37
|
+
*/
|
|
38
|
+
SITE_URL: process.env.GATSBY_URL || process.env.GATSBY_CF_PAGES_URL || process.env.GATSBY_SITE_URL,
|
|
29
39
|
IDP_BASE_URL: process.env.GATSBY_IDP_BASE_URL,
|
|
30
40
|
SUMMIT_API_BASE_URL: process.env.GATSBY_SUMMIT_API_BASE_URL,
|
|
31
41
|
API_BASE_URL: process.env.GATSBY_SUMMIT_API_BASE_URL,
|
|
@@ -62,6 +72,7 @@ export const getEnvVariable = (name) => {
|
|
|
62
72
|
}
|
|
63
73
|
|
|
64
74
|
if (typeof window === 'object') {
|
|
75
|
+
window.SITE_URL = processEnv[SITE_URL];
|
|
65
76
|
window.OAUTH2_FLOW = processEnv[OAUTH2_FLOW];
|
|
66
77
|
window.OAUTH2_CLIENT_ID = processEnv[OAUTH2_CLIENT_ID];
|
|
67
78
|
window.SCOPES = processEnv[SCOPES];
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Create dummy storage on the server-side and wrapper for localStorage on the client-side.
|
|
3
|
-
* @see https://github.com/rt2zz/redux-persist/issues/1208#issuecomment-658695446
|
|
4
|
-
* @see https://stackoverflow.com/questions/57781527/how-to-solve-console-error-redux-persist-failed-to-create-sync-storage-falli
|
|
5
|
-
* @see https://github.com/vercel/next.js/discussions/15687#discussioncomment-45319
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import createWebStorage from 'redux-persist/lib/storage/createWebStorage';
|
|
9
|
-
|
|
10
|
-
const createNoopStorage = () => {
|
|
11
|
-
return {
|
|
12
|
-
getItem(_key) {
|
|
13
|
-
return Promise.resolve(null);
|
|
14
|
-
},
|
|
15
|
-
setItem(_key, value) {
|
|
16
|
-
return Promise.resolve(value);
|
|
17
|
-
},
|
|
18
|
-
removeItem(_key) {
|
|
19
|
-
return Promise.resolve();
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const storage = typeof window !== 'undefined' ? createWebStorage('local') : createNoopStorage();
|
|
25
|
-
|
|
26
|
-
export default storage;
|