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 87
/
Copy pathPartial.jsx
62 lines (56 loc) · 2.05 KB
/
Partial.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
/*
* 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 { RenderModule, composeModules } from 'holocron';
import { connect } from 'react-redux';
import { Map as iMap } from 'immutable';
import { updateLocale, setRenderPartialOnly } from '@americanexpress/one-app-ducks';
const Partial = ({ params: { moduleName }, location: { query }, postProps }) => (
<RenderModule
moduleName={moduleName}
props={{
...postProps,
...query,
}}
/>
);
const propSelector = (state) => state.getIn(['modules', 'frank-lloyd-root', 'postProps'], iMap()).toJS();
export const onPartialRouteEnter = ({ dispatch, getState }) => (nextState, replace, cb) => {
const postProps = propSelector(getState());
const { locale, moduleName } = nextState.params;
dispatch(setRenderPartialOnly(true));
dispatch(updateLocale(locale))
.then(() => dispatch(composeModules([{
name: moduleName,
props: {
...postProps,
...nextState.location.query,
},
}])))
.then(() => cb());
};
Partial.propTypes = {
params: PropTypes.shape({
moduleName: PropTypes.string.isRequired,
}).isRequired,
location: PropTypes.shape({
query: PropTypes.shape({}).isRequired,
}).isRequired,
// eslint-disable-next-line react/forbid-prop-types -- props for rendered module are indeterminate
postProps: PropTypes.object.isRequired,
};
export default connect((state) => ({ postProps: propSelector(state) }))(Partial);