This repository has been archived by the owner on May 3, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 86
/
FrankLloydRoot.jsx
74 lines (66 loc) · 2.61 KB
/
FrankLloydRoot.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
* Copyright 2019 American Express Travel Related Services Company, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
import React from 'react';
import PropTypes from 'prop-types';
import ImmutablePropTypes from 'react-immutable-proptypes';
import { fromJS } from 'immutable';
import ModuleRoute from 'holocron-module-route';
import { Helmet } from 'react-helmet';
import { connect } from 'react-redux';
import HelloWorldComponent from './HelloWorld';
import Partial, { onPartialRouteEnter } from './Partial';
export function FrankLloydRoot({ children, config }) {
return (
<React.Fragment>
<Helmet
title="Sample Root Module"
link={[
{ rel: 'icon', href: 'https://sample-cdn.frank/favicon.ico' },
]}
/>
<pre className="value-provided-from-config">{ config.get('someApiUrl') }</pre>
{ children }
</React.Fragment>
);
}
FrankLloydRoot.childRoutes = (store) => [
<ModuleRoute key="vitruvius" path="vitruvius" moduleName="vitruvius-franklin" />,
<ModuleRoute key="success" path="success" component={HelloWorldComponent} />,
<ModuleRoute key="healthy" path="healthy-frank" moduleName="healthy-frank" />,
<ModuleRoute key="demo" path="demo/:moduleName" moduleName="preview-frank" />,
<ModuleRoute key="html" path="html-partial/:locale/:moduleName" component={Partial} onEnter={onPartialRouteEnter(store, true)} />,
<ModuleRoute key="text" path="text-only/:locale/:moduleName" component={Partial} onEnter={onPartialRouteEnter(store, false, true)} />,
];
FrankLloydRoot.propTypes = {
children: PropTypes.node.isRequired,
config: ImmutablePropTypes.map.isRequired,
};
if (!global.BROWSER) {
// eslint-disable-next-line global-require -- exclude from browser bundle
FrankLloydRoot.appConfig = require('../config').default;
}
const reducer = (state = fromJS({})) => state;
reducer.buildInitialState = ({ req } = {}) => {
if (req && req.body) {
return fromJS({ postProps: req.body });
}
return fromJS({});
};
FrankLloydRoot.holocron = {
name: 'frank-lloyd-root',
reducer,
};
export default connect((state) => ({ config: state.get('config') }))(FrankLloydRoot);