generator-folklore 3.0.1 → 3.0.4
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/generators/app/index.js +3 -51
- package/lib/generators/babel/index.js +28 -101
- package/lib/generators/babel/templates/config.js +16 -0
- package/lib/generators/browserslist/index.js +4 -9
- package/lib/generators/build/index.js +40 -29
- package/lib/generators/cli/index.js +92 -0
- package/lib/generators/cli/templates/cli.js +22 -0
- package/lib/generators/cli/templates/commands/default.js +16 -0
- package/lib/generators/docs/index.js +1 -2
- package/lib/generators/editorconfig/index.js +12 -22
- package/lib/generators/eslint/index.js +12 -13
- package/lib/generators/{html → html-project}/index.js +60 -73
- package/lib/generators/{html → html-project}/templates/folklore.png +0 -0
- package/lib/generators/{html → html-project}/templates/gitignore +0 -0
- package/lib/generators/{html → html-project}/templates/index.html.ejs +4 -1
- package/lib/generators/laravel/index.js +5 -5
- package/lib/generators/lerna-package/index.js +1 -3
- package/lib/generators/lerna-repository/index.js +1 -3
- package/lib/generators/node-project/index.js +164 -0
- package/lib/generators/{js/templates/src/lib/.gitkeep → node-project/templates/index.js} +0 -0
- package/lib/generators/npm-package/index.js +3 -5
- package/lib/generators/prettier/index.js +19 -6
- package/lib/generators/prettier/templates/prettierrc.json +3 -1
- package/lib/generators/{js → react-app}/index.js +22 -52
- package/lib/generators/{js → react-app}/templates/_package.json +0 -0
- package/lib/generators/react-app/templates/index.js +22 -0
- package/lib/generators/react-app/templates/src/components/App.jsx +42 -0
- package/lib/generators/react-app/templates/src/components/Routes.jsx +43 -0
- package/lib/generators/{js → react-app}/templates/src/components/buttons/Button.jsx +4 -18
- package/lib/generators/react-app/templates/src/components/layouts/Main.jsx +27 -0
- package/lib/generators/react-app/templates/src/components/menus/Menu.jsx +62 -0
- package/lib/generators/{js → react-app}/templates/src/components/pages/Error.jsx +8 -12
- package/lib/generators/react-app/templates/src/components/pages/Home.jsx +32 -0
- package/lib/generators/{js → react-app}/templates/src/components/partials/PageMeta.jsx +11 -11
- package/lib/generators/{js → react-app}/templates/src/contexts/KeysContext.jsx +0 -0
- package/lib/generators/{js/templates/styles → react-app/templates/src/lib}/.gitkeep +0 -0
- package/lib/generators/{js → react-app}/templates/src/lib/PropTypes.js +0 -0
- package/lib/generators/{js → react-app}/templates/src/lib/utils.js +0 -0
- package/lib/generators/react-app/templates/src/polyfills/index.js +6 -0
- package/lib/generators/react-app/templates/src/polyfills/intl-en.js +2 -0
- package/lib/generators/react-app/templates/src/polyfills/intl-fr.js +2 -0
- package/lib/generators/react-app/templates/src/polyfills/should.js +14 -0
- package/lib/generators/react-app/templates/styles/.gitkeep +0 -0
- package/lib/generators/{js/templates/styles/buttons/button.scss → react-app/templates/styles/buttons/button.module.scss} +1 -0
- package/lib/generators/{js/templates/styles/layouts/main.scss → react-app/templates/styles/layouts/main.module.scss} +0 -0
- package/lib/generators/{js/templates/styles/menus/menu.scss → react-app/templates/styles/menus/menu.module.scss} +0 -0
- package/lib/generators/{js/templates/styles/pages/error.scss → react-app/templates/styles/pages/error.module.scss} +0 -0
- package/lib/generators/{js/templates/styles/pages/home.scss → react-app/templates/styles/pages/home.module.scss} +0 -0
- package/lib/generators/rollup/index.js +54 -0
- package/lib/generators/rollup/templates/config.js +47 -0
- package/lib/generators/scss/index.js +3 -16
- package/lib/generators/scss/templates/{main.scss → styles.scss} +0 -0
- package/lib/generators/server/index.js +81 -0
- package/lib/generators/server/templates/server.js +59 -0
- package/lib/generators/storybook/index.js +1 -7
- package/lib/generators/stylelint/index.js +13 -14
- package/lib/lib/utils.js +17 -0
- package/package.json +2 -2
- package/lib/generators/babel/templates/babel-preset-react.js +0 -7
- package/lib/generators/babel/templates/babel-preset.js +0 -57
- package/lib/generators/babel/templates/babelrc +0 -5
- package/lib/generators/babel/templates/utils/processScss.js +0 -10
- package/lib/generators/babel/templates/utils/transformRequireIgnore.js +0 -80
- package/lib/generators/html/templates/index.js +0 -9
- package/lib/generators/html/templates/root.js +0 -23
- package/lib/generators/html/templates/utils.js +0 -7
- package/lib/generators/js/templates/browserslistrc +0 -9
- package/lib/generators/js/templates/config.js +0 -33
- package/lib/generators/js/templates/index.js +0 -41
- package/lib/generators/js/templates/src/actions/LayoutActions.js +0 -12
- package/lib/generators/js/templates/src/actions/SiteActions.js +0 -22
- package/lib/generators/js/templates/src/components/App.jsx +0 -52
- package/lib/generators/js/templates/src/components/Root.jsx +0 -70
- package/lib/generators/js/templates/src/components/layouts/Main.jsx +0 -52
- package/lib/generators/js/templates/src/components/menus/Menu.jsx +0 -60
- package/lib/generators/js/templates/src/components/messages/Success.jsx +0 -36
- package/lib/generators/js/templates/src/components/pages/Home.jsx +0 -32
- package/lib/generators/js/templates/src/components/partials/Label.jsx +0 -32
- package/lib/generators/js/templates/src/reducers/LayoutReducer.js +0 -32
- package/lib/generators/js/templates/src/reducers/SiteReducer.js +0 -36
- package/lib/generators/js/templates/src/reducers/index.js +0 -7
- package/lib/generators/js/templates/src/vendor/polyfills/intl-en.js +0 -2
- package/lib/generators/js/templates/src/vendor/polyfills/intl-fr.js +0 -2
@@ -1,52 +0,0 @@
|
|
1
|
-
import React, { useEffect } from 'react';
|
2
|
-
import PropTypes from 'prop-types';
|
3
|
-
import { connect } from 'react-redux';
|
4
|
-
import { Route, Switch, useHistory } from 'react-router';
|
5
|
-
import { useUrlGenerator } from '@folklore/react-container';
|
6
|
-
|
7
|
-
// import * as AppPropTypes from '../lib/PropTypes';
|
8
|
-
import { resetRequest as resetRequestAction } from '../actions/SiteActions';
|
9
|
-
import MainLayout from './layouts/Main';
|
10
|
-
import HomePage from './pages/Home';
|
11
|
-
import ErrorPage from './pages/Error';
|
12
|
-
|
13
|
-
import '<%= getRelativeStylesPath('components/App.jsx', 'main.global.scss') %>';
|
14
|
-
|
15
|
-
const propTypes = {
|
16
|
-
resetRequest: PropTypes.func.isRequired,
|
17
|
-
};
|
18
|
-
|
19
|
-
const defaultProps = {};
|
20
|
-
|
21
|
-
const App = ({ resetRequest }) => {
|
22
|
-
const history = useHistory();
|
23
|
-
const urlGenerator = useUrlGenerator();
|
24
|
-
|
25
|
-
// Reset request on history change
|
26
|
-
useEffect(() => {
|
27
|
-
const unlisten = history.listen(() => resetRequest());
|
28
|
-
return () => {
|
29
|
-
unlisten();
|
30
|
-
};
|
31
|
-
}, [history]);
|
32
|
-
|
33
|
-
return (
|
34
|
-
<MainLayout>
|
35
|
-
<Switch>
|
36
|
-
<Route exact path={urlGenerator.route('home')} component={HomePage} />
|
37
|
-
<Route path="*" component={ErrorPage} />
|
38
|
-
</Switch>
|
39
|
-
</MainLayout>
|
40
|
-
);
|
41
|
-
};
|
42
|
-
|
43
|
-
App.propTypes = propTypes;
|
44
|
-
App.defaultProps = defaultProps;
|
45
|
-
|
46
|
-
const WithStateContainer = connect(
|
47
|
-
null,
|
48
|
-
dispatch => ({
|
49
|
-
resetRequest: () => dispatch(resetRequestAction()),
|
50
|
-
}),
|
51
|
-
)(App);
|
52
|
-
export default WithStateContainer;
|
@@ -1,70 +0,0 @@
|
|
1
|
-
import React, { useMemo } from 'react';
|
2
|
-
import PropTypes from 'prop-types';
|
3
|
-
import { UrlGeneratorProvider, createStore } from '@folklore/react-container';
|
4
|
-
import { TrackingContainer } from '@folklore/tracking';
|
5
|
-
import { IntlProvider } from 'react-intl';
|
6
|
-
import { BrowserRouter } from 'react-router-dom';
|
7
|
-
import { Provider as ReduxProvider } from 'react-redux';
|
8
|
-
|
9
|
-
import reducers from '../reducers/index';
|
10
|
-
import * as AppPropTypes from '../lib/PropTypes';
|
11
|
-
import { KeysProvider } from '../contexts/KeysContext';
|
12
|
-
|
13
|
-
import App from './App';
|
14
|
-
|
15
|
-
const propTypes = {
|
16
|
-
locale: PropTypes.string,
|
17
|
-
messages: PropTypes.oneOfType([
|
18
|
-
PropTypes.objectOf(PropTypes.objectOf(PropTypes.string)),
|
19
|
-
PropTypes.objectOf(PropTypes.string),
|
20
|
-
]),
|
21
|
-
routes: PropTypes.objectOf(PropTypes.string),
|
22
|
-
statusCode: AppPropTypes.statusCode,
|
23
|
-
googleApiKey: PropTypes.string,
|
24
|
-
};
|
25
|
-
|
26
|
-
const defaultProps = {
|
27
|
-
locale: 'fr',
|
28
|
-
messages: {},
|
29
|
-
routes: {},
|
30
|
-
statusCode: null,
|
31
|
-
googleApiKey: null,
|
32
|
-
};
|
33
|
-
|
34
|
-
const Root = ({ locale, messages, routes, statusCode, googleApiKey }) => {
|
35
|
-
const store = useMemo(
|
36
|
-
() =>
|
37
|
-
createStore(reducers, {
|
38
|
-
site: {
|
39
|
-
statusCode,
|
40
|
-
},
|
41
|
-
}),
|
42
|
-
[statusCode],
|
43
|
-
);
|
44
|
-
const keys = useMemo(
|
45
|
-
() => ({
|
46
|
-
googleApiKey,
|
47
|
-
}),
|
48
|
-
[googleApiKey],
|
49
|
-
);
|
50
|
-
return (
|
51
|
-
<ReduxProvider store={store}>
|
52
|
-
<IntlProvider locale={locale} messages={messages[locale] || messages}>
|
53
|
-
<BrowserRouter>
|
54
|
-
<UrlGeneratorProvider routes={routes}>
|
55
|
-
<KeysProvider keys={keys}>
|
56
|
-
<TrackingContainer>
|
57
|
-
<App />
|
58
|
-
</TrackingContainer>
|
59
|
-
</KeysProvider>
|
60
|
-
</UrlGeneratorProvider>
|
61
|
-
</BrowserRouter>
|
62
|
-
</IntlProvider>
|
63
|
-
</ReduxProvider>
|
64
|
-
);
|
65
|
-
};
|
66
|
-
|
67
|
-
Root.propTypes = propTypes;
|
68
|
-
Root.defaultProps = defaultProps;
|
69
|
-
|
70
|
-
export default Root;
|
@@ -1,52 +0,0 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
import PropTypes from 'prop-types';
|
3
|
-
import { connect } from 'react-redux';
|
4
|
-
import { useFonts } from '@folklore/fonts';
|
5
|
-
|
6
|
-
import styles from '<%= getRelativeStylesPath('components/layouts/Main.jsx', 'layouts/main.scss') %>';
|
7
|
-
|
8
|
-
const propTypes = {
|
9
|
-
children: PropTypes.node.isRequired,
|
10
|
-
isPrerender: PropTypes.bool,
|
11
|
-
fonts: PropTypes.shape({
|
12
|
-
google: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)),
|
13
|
-
custom: PropTypes.objectOf(PropTypes.arrayOf(PropTypes.string)),
|
14
|
-
}),
|
15
|
-
};
|
16
|
-
|
17
|
-
const defaultProps = {
|
18
|
-
isPrerender: false,
|
19
|
-
fonts: {
|
20
|
-
google: {
|
21
|
-
families: ['Open Sans:400,600,700'],
|
22
|
-
},
|
23
|
-
custom: {
|
24
|
-
families: ['Garage Gothic', 'Brandon Grotesque', 'Sina Nova:400,700,400i,700i'],
|
25
|
-
},
|
26
|
-
},
|
27
|
-
};
|
28
|
-
|
29
|
-
const MainLayout = ({ fonts, children, isPrerender }) => {
|
30
|
-
const { loaded: fontsLoaded } = useFonts(fonts);
|
31
|
-
|
32
|
-
const innerStyle = {
|
33
|
-
opacity: fontsLoaded || isPrerender ? 1 : 0,
|
34
|
-
};
|
35
|
-
|
36
|
-
return (
|
37
|
-
<div className={styles.container}>
|
38
|
-
<div className={styles.inner} style={innerStyle}>
|
39
|
-
<div className={styles.content}>{children}</div>
|
40
|
-
</div>
|
41
|
-
</div>
|
42
|
-
);
|
43
|
-
};
|
44
|
-
|
45
|
-
MainLayout.propTypes = propTypes;
|
46
|
-
MainLayout.defaultProps = defaultProps;
|
47
|
-
|
48
|
-
const WithStateContainer = connect(({ site }) => ({
|
49
|
-
isPrerender: site.isPrerender || false,
|
50
|
-
}))(MainLayout);
|
51
|
-
|
52
|
-
export default WithStateContainer;
|
@@ -1,60 +0,0 @@
|
|
1
|
-
/* eslint-disable react/no-array-index-key */
|
2
|
-
import React from 'react';
|
3
|
-
import PropTypes from 'prop-types';
|
4
|
-
import classNames from 'classnames';
|
5
|
-
import { Link } from 'react-router-dom';
|
6
|
-
|
7
|
-
import * as AppPropTypes from '../../lib/PropTypes';
|
8
|
-
import Label from '../partials/Label';
|
9
|
-
|
10
|
-
import styles from '<%= getRelativeStylesPath('components/menus/Menu.jsx', 'menus/menu.scss') %>';
|
11
|
-
|
12
|
-
const propTypes = {
|
13
|
-
items: AppPropTypes.menuItems,
|
14
|
-
className: PropTypes.string,
|
15
|
-
};
|
16
|
-
|
17
|
-
const defaultProps = {
|
18
|
-
items: [],
|
19
|
-
className: null,
|
20
|
-
};
|
21
|
-
|
22
|
-
const Menu = ({ items, className }) => (
|
23
|
-
<nav
|
24
|
-
className={classNames([
|
25
|
-
styles.container,
|
26
|
-
{
|
27
|
-
[className]: className !== null,
|
28
|
-
},
|
29
|
-
])}
|
30
|
-
>
|
31
|
-
<ul className={styles.items}>
|
32
|
-
{items.map(({ label, url, active = false, external = false }, index) => (
|
33
|
-
<li
|
34
|
-
className={classNames([
|
35
|
-
styles.item,
|
36
|
-
{
|
37
|
-
[styles.active]: active,
|
38
|
-
},
|
39
|
-
])}
|
40
|
-
key={`item-${index}`}
|
41
|
-
>
|
42
|
-
{external ? (
|
43
|
-
<a href={url} className={styles.link}>
|
44
|
-
<Label>{label}</Label>
|
45
|
-
</a>
|
46
|
-
) : (
|
47
|
-
<Link to={url} className={styles.link}>
|
48
|
-
<Label>{label}</Label>
|
49
|
-
</Link>
|
50
|
-
)}
|
51
|
-
</li>
|
52
|
-
))}
|
53
|
-
</ul>
|
54
|
-
</nav>
|
55
|
-
);
|
56
|
-
|
57
|
-
Menu.propTypes = propTypes;
|
58
|
-
Menu.defaultProps = defaultProps;
|
59
|
-
|
60
|
-
export default Menu;
|
@@ -1,36 +0,0 @@
|
|
1
|
-
/* eslint-disable react/jsx-props-no-spreading */
|
2
|
-
import React from 'react';
|
3
|
-
import PropTypes from 'prop-types';
|
4
|
-
import classNames from 'classnames';
|
5
|
-
|
6
|
-
import * as AppPropTypes from '../../lib/PropTypes';
|
7
|
-
import Label from '../partials/Label';
|
8
|
-
|
9
|
-
import styles from '<%= getRelativeStylesPath('components/messages/Success.jsx', 'messages/success.scss') %>';
|
10
|
-
|
11
|
-
const propTypes = {
|
12
|
-
children: AppPropTypes.text.isRequired,
|
13
|
-
className: PropTypes.string,
|
14
|
-
};
|
15
|
-
|
16
|
-
const defaultProps = {
|
17
|
-
className: null,
|
18
|
-
};
|
19
|
-
|
20
|
-
const SuccessMessage = ({ children, className }) => (
|
21
|
-
<div
|
22
|
-
className={classNames([
|
23
|
-
styles.container,
|
24
|
-
{
|
25
|
-
[className]: className !== null,
|
26
|
-
},
|
27
|
-
])}
|
28
|
-
>
|
29
|
-
<Label>{children}</Label>
|
30
|
-
</div>
|
31
|
-
);
|
32
|
-
|
33
|
-
SuccessMessage.propTypes = propTypes;
|
34
|
-
SuccessMessage.defaultProps = defaultProps;
|
35
|
-
|
36
|
-
export default SuccessMessage;
|
@@ -1,32 +0,0 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
// import PropTypes from 'prop-types';
|
3
|
-
import { defineMessages, injectIntl } from 'react-intl';
|
4
|
-
|
5
|
-
// import * as AppPropTypes from '../../lib/PropTypes';
|
6
|
-
import PageMeta from '../partials/PageMeta';
|
7
|
-
|
8
|
-
import styles from '<%= getRelativeStylesPath('components/pages/Home.jsx', 'pages/home.scss') %>';
|
9
|
-
|
10
|
-
const messages = defineMessages({
|
11
|
-
metaTitle: {
|
12
|
-
id: 'meta.title',
|
13
|
-
defaultMessage: 'Title',
|
14
|
-
},
|
15
|
-
});
|
16
|
-
|
17
|
-
const propTypes = {
|
18
|
-
// intl: AppPropTypes.intl.isRequired,
|
19
|
-
};
|
20
|
-
|
21
|
-
const HomePage = () => (
|
22
|
-
<div className={styles.container}>
|
23
|
-
<PageMeta title={messages.metaTitle} />
|
24
|
-
<div className={styles.logo} />
|
25
|
-
</div>
|
26
|
-
);
|
27
|
-
|
28
|
-
HomePage.propTypes = propTypes;
|
29
|
-
|
30
|
-
const WithIntlContainer = injectIntl(HomePage);
|
31
|
-
|
32
|
-
export default WithIntlContainer;
|
@@ -1,32 +0,0 @@
|
|
1
|
-
/* eslint-disable react/jsx-props-no-spreading */
|
2
|
-
import React from 'react';
|
3
|
-
import PropTypes from 'prop-types';
|
4
|
-
import { FormattedMessage, FormattedHTMLMessage } from 'react-intl';
|
5
|
-
|
6
|
-
import { label as labelPropTypes } from '../../lib/PropTypes';
|
7
|
-
import { isMessage } from '../../lib/utils';
|
8
|
-
|
9
|
-
const propTypes = {
|
10
|
-
children: labelPropTypes.isRequired,
|
11
|
-
isHtml: PropTypes.bool,
|
12
|
-
values: PropTypes.object, // eslint-disable-line react/forbid-prop-types
|
13
|
-
};
|
14
|
-
|
15
|
-
const defaultProps = {
|
16
|
-
isHtml: false,
|
17
|
-
values: {},
|
18
|
-
};
|
19
|
-
|
20
|
-
const Label = ({ children, isHtml, values }) => {
|
21
|
-
const Message = isHtml ? FormattedHTMLMessage : FormattedMessage;
|
22
|
-
return isMessage(children) ? (
|
23
|
-
<Message values={values} {...children} />
|
24
|
-
) : (
|
25
|
-
children
|
26
|
-
)
|
27
|
-
};
|
28
|
-
|
29
|
-
Label.propTypes = propTypes;
|
30
|
-
Label.defaultProps = defaultProps;
|
31
|
-
|
32
|
-
export default Label;
|
@@ -1,32 +0,0 @@
|
|
1
|
-
import { SET_SIZE } from '../actions/LayoutActions';
|
2
|
-
|
3
|
-
const initialState = {
|
4
|
-
size: {
|
5
|
-
width: window.innerWidth || 0,
|
6
|
-
height: window.innerHeight || 0,
|
7
|
-
},
|
8
|
-
};
|
9
|
-
|
10
|
-
const LayoutReducer = (previousState, action) => {
|
11
|
-
let state = previousState || initialState;
|
12
|
-
if (typeof state.hydrated === 'undefined' || !state.hydrated) {
|
13
|
-
state = {
|
14
|
-
...initialState,
|
15
|
-
...previousState,
|
16
|
-
hydrated: true,
|
17
|
-
};
|
18
|
-
}
|
19
|
-
switch (action.type) {
|
20
|
-
case SET_SIZE:
|
21
|
-
return {
|
22
|
-
...state,
|
23
|
-
size: {
|
24
|
-
...action.payload,
|
25
|
-
},
|
26
|
-
};
|
27
|
-
default:
|
28
|
-
return state;
|
29
|
-
}
|
30
|
-
};
|
31
|
-
|
32
|
-
export default LayoutReducer;
|
@@ -1,36 +0,0 @@
|
|
1
|
-
import { SET_ERRORS, RESET_REQUEST } from '../actions/SiteActions';
|
2
|
-
|
3
|
-
const initialState = {
|
4
|
-
errors: null,
|
5
|
-
statusCode: null,
|
6
|
-
messages: null,
|
7
|
-
};
|
8
|
-
|
9
|
-
const SiteReducer = (previousState, action) => {
|
10
|
-
let state = previousState || initialState;
|
11
|
-
if (typeof state.hydrated === 'undefined' || !state.hydrated) {
|
12
|
-
state = {
|
13
|
-
...initialState,
|
14
|
-
...previousState,
|
15
|
-
hydrated: true,
|
16
|
-
};
|
17
|
-
}
|
18
|
-
switch (action.type) {
|
19
|
-
case SET_ERRORS:
|
20
|
-
return {
|
21
|
-
...state,
|
22
|
-
errors: action.payload,
|
23
|
-
};
|
24
|
-
case RESET_REQUEST:
|
25
|
-
return {
|
26
|
-
...state,
|
27
|
-
errors: null,
|
28
|
-
statusCode: null,
|
29
|
-
messages: null,
|
30
|
-
};
|
31
|
-
default:
|
32
|
-
return state;
|
33
|
-
}
|
34
|
-
};
|
35
|
-
|
36
|
-
export default SiteReducer;
|