generator-folklore 3.0.3 → 3.0.4
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/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,16 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
4
|
+
|
|
3
5
|
var _lodash = _interopRequireDefault(require("lodash"));
|
|
4
6
|
|
|
5
7
|
var _path = _interopRequireDefault(require("path"));
|
|
6
8
|
|
|
7
|
-
var _chalk = _interopRequireDefault(require("chalk"));
|
|
8
|
-
|
|
9
9
|
var _generator = _interopRequireDefault(require("../../lib/generator"));
|
|
10
10
|
|
|
11
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
14
|
+
|
|
15
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
16
|
+
|
|
17
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
18
|
+
|
|
19
|
+
module.exports = class ReactAppGenerator extends _generator.default {
|
|
14
20
|
// The name `constructor` is important here
|
|
15
21
|
constructor(...args) {
|
|
16
22
|
super(...args);
|
|
@@ -18,20 +24,13 @@ module.exports = class JsGenerator extends _generator.default {
|
|
|
18
24
|
type: String,
|
|
19
25
|
required: false
|
|
20
26
|
});
|
|
21
|
-
this.option('babel-compile', {
|
|
22
|
-
type: Boolean,
|
|
23
|
-
defaults: false
|
|
24
|
-
});
|
|
25
27
|
this.option('path', {
|
|
26
28
|
type: String,
|
|
27
|
-
defaults: 'src
|
|
29
|
+
defaults: 'src'
|
|
28
30
|
});
|
|
29
31
|
this.option('styles-path', {
|
|
30
32
|
type: String
|
|
31
33
|
});
|
|
32
|
-
this.option('root-props-import', {
|
|
33
|
-
type: String
|
|
34
|
-
});
|
|
35
34
|
}
|
|
36
35
|
|
|
37
36
|
initializing() {
|
|
@@ -46,7 +45,7 @@ module.exports = class JsGenerator extends _generator.default {
|
|
|
46
45
|
}
|
|
47
46
|
|
|
48
47
|
console.log(_chalk.default.yellow('\n----------------------'));
|
|
49
|
-
console.log('
|
|
48
|
+
console.log('React App Generator');
|
|
50
49
|
console.log(_chalk.default.yellow('----------------------\n'));
|
|
51
50
|
},
|
|
52
51
|
|
|
@@ -71,20 +70,6 @@ module.exports = class JsGenerator extends _generator.default {
|
|
|
71
70
|
};
|
|
72
71
|
}
|
|
73
72
|
|
|
74
|
-
configuring() {
|
|
75
|
-
const skipInstall = this.options['skip-install'];
|
|
76
|
-
this.composeWith('folklore:babel', {
|
|
77
|
-
'react-app': !this.options['babel-compile'],
|
|
78
|
-
compile: this.options['babel-compile'],
|
|
79
|
-
'skip-install': skipInstall,
|
|
80
|
-
quiet: true
|
|
81
|
-
});
|
|
82
|
-
this.composeWith('folklore:eslint', {
|
|
83
|
-
'skip-install': skipInstall,
|
|
84
|
-
quiet: true
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
|
|
88
73
|
get writing() {
|
|
89
74
|
return {
|
|
90
75
|
directory() {
|
|
@@ -100,10 +85,7 @@ module.exports = class JsGenerator extends _generator.default {
|
|
|
100
85
|
|
|
101
86
|
index() {
|
|
102
87
|
const jsPath = this.options.path;
|
|
103
|
-
|
|
104
|
-
this.fs.copyTpl(this.templatePath('index.js'), this.destinationPath(_path.default.join(jsPath, 'index.js')), {
|
|
105
|
-
rootPropsImport
|
|
106
|
-
});
|
|
88
|
+
this.fs.copyTpl(this.templatePath('index.js'), this.destinationPath(_path.default.join(jsPath, 'index.js')));
|
|
107
89
|
},
|
|
108
90
|
|
|
109
91
|
styles() {
|
|
@@ -116,41 +98,29 @@ module.exports = class JsGenerator extends _generator.default {
|
|
|
116
98
|
this.fs.copyTpl(srcPath, destPath, templateData);
|
|
117
99
|
},
|
|
118
100
|
|
|
119
|
-
config() {
|
|
120
|
-
const jsPath = _lodash.default.get(this.options, 'path');
|
|
121
|
-
|
|
122
|
-
const srcPath = this.templatePath('config.js');
|
|
123
|
-
const destPath = this.destinationPath(_path.default.join(jsPath, 'config.js'));
|
|
124
|
-
this.fs.copy(srcPath, destPath);
|
|
125
|
-
},
|
|
126
|
-
|
|
127
|
-
browserslistrc() {
|
|
128
|
-
const srcPath = this.templatePath('browserslistrc');
|
|
129
|
-
const destPath = this.destinationPath('.browserslistrc');
|
|
130
|
-
this.fs.copy(srcPath, destPath);
|
|
131
|
-
},
|
|
132
|
-
|
|
133
101
|
packageJSON() {
|
|
134
102
|
const srcPath = this.templatePath('_package.json');
|
|
135
103
|
const destPath = this.destinationPath('package.json');
|
|
136
104
|
const packageJSON = this.fs.readJSON(srcPath);
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
105
|
+
this.packageJson.merge(_objectSpread(_objectSpread({}, packageJSON), {}, {
|
|
106
|
+
name: this.options['project-name']
|
|
107
|
+
}));
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
dependencies() {
|
|
111
|
+
this.addDependencies(['react', 'react-dom', 'prop-types', 'react-intl', 'react-router', 'react-router-dom', 'react-helmet', 'classnames', '@folklore/routes', '@folklore/fonts', '@folklore/forms', '@folklore/fetch', '@folklore/hooks', '@folklore/tracking', // Polyfills
|
|
112
|
+
'intl', '@formatjs/intl-locale', '@formatjs/intl-pluralrules', 'intersection-observer', 'resize-observer-polyfill']);
|
|
140
113
|
}
|
|
141
114
|
|
|
142
115
|
};
|
|
143
116
|
}
|
|
144
117
|
|
|
145
|
-
install() {
|
|
118
|
+
async install() {
|
|
146
119
|
if (this.options['skip-install']) {
|
|
147
120
|
return;
|
|
148
121
|
}
|
|
149
122
|
|
|
150
|
-
|
|
151
|
-
const devDependencies = ['html-webpack-plugin@latest'];
|
|
152
|
-
this.addDependencies(dependencies);
|
|
153
|
-
this.addDevDependencies(devDependencies);
|
|
123
|
+
await this.spawnCommand('npm', ['install']);
|
|
154
124
|
}
|
|
155
125
|
|
|
156
126
|
};
|
|
File without changes
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { createRoot } from 'react-dom/client';
|
|
3
|
+
|
|
4
|
+
import App from './components/App';
|
|
5
|
+
import shouldPolyfill from './polyfills/should';
|
|
6
|
+
|
|
7
|
+
function getAppProps() {
|
|
8
|
+
return window.props || {};
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function renderApp(props) {
|
|
12
|
+
const container = document.getElementById('app');
|
|
13
|
+
const app = React.createElement(App, props);
|
|
14
|
+
const root = createRoot(container);
|
|
15
|
+
root.render(app);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (shouldPolyfill()) {
|
|
19
|
+
import('./polyfills/index').then(() => renderApp(getAppProps()));
|
|
20
|
+
} else {
|
|
21
|
+
renderApp(getAppProps());
|
|
22
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { RoutesProvider } from '@folklore/routes';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { IntlProvider } from 'react-intl';
|
|
5
|
+
import { BrowserRouter } from 'react-router-dom';
|
|
6
|
+
|
|
7
|
+
// import * as AppPropTypes from '../lib/PropTypes';
|
|
8
|
+
import Routes from './Routes';
|
|
9
|
+
|
|
10
|
+
import '<%= getRelativeStylesPath('components/App.jsx', 'styles.scss') %>';
|
|
11
|
+
|
|
12
|
+
const propTypes = {
|
|
13
|
+
locale: PropTypes.string,
|
|
14
|
+
messages: PropTypes.oneOfType([
|
|
15
|
+
PropTypes.objectOf(PropTypes.objectOf(PropTypes.string)),
|
|
16
|
+
PropTypes.objectOf(PropTypes.string),
|
|
17
|
+
]),
|
|
18
|
+
routes: PropTypes.objectOf(PropTypes.string),
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const defaultProps = {
|
|
22
|
+
locale: 'fr',
|
|
23
|
+
messages: {},
|
|
24
|
+
routes: {},
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
function App({ locale, messages, routes, statusCode, googleApiKey }) {
|
|
28
|
+
return (
|
|
29
|
+
<IntlProvider locale={locale} messages={messages[locale] || messages}>
|
|
30
|
+
<BrowserRouter>
|
|
31
|
+
<RoutesProvider routes={routes}>
|
|
32
|
+
<Routes />
|
|
33
|
+
</RoutesProvider>
|
|
34
|
+
</BrowserRouter>
|
|
35
|
+
</IntlProvider>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
App.propTypes = propTypes;
|
|
40
|
+
App.defaultProps = defaultProps;
|
|
41
|
+
|
|
42
|
+
export default App;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
// import PropTypes from 'prop-types';
|
|
3
|
+
import { Route, Routes as Switch } from 'react-router-dom';
|
|
4
|
+
|
|
5
|
+
// import { useUrlGenerator } from '@folklore/routes';
|
|
6
|
+
// import * as AppPropTypes from '../lib/PropTypes';
|
|
7
|
+
import MainLayout from './layouts/Main';
|
|
8
|
+
import ErrorPage from './pages/Error';
|
|
9
|
+
import HomePage from './pages/Home';
|
|
10
|
+
|
|
11
|
+
const propTypes = {};
|
|
12
|
+
|
|
13
|
+
const defaultProps = {};
|
|
14
|
+
|
|
15
|
+
function Routes() {
|
|
16
|
+
// const urlGenerator = useUrlGenerator();
|
|
17
|
+
return (
|
|
18
|
+
<Switch>
|
|
19
|
+
<Route
|
|
20
|
+
path="/"
|
|
21
|
+
exact
|
|
22
|
+
element={
|
|
23
|
+
<MainLayout>
|
|
24
|
+
<HomePage />
|
|
25
|
+
</MainLayout>
|
|
26
|
+
}
|
|
27
|
+
/>
|
|
28
|
+
<Route
|
|
29
|
+
path="*"
|
|
30
|
+
element={
|
|
31
|
+
<MainLayout>
|
|
32
|
+
<ErrorPage />
|
|
33
|
+
</MainLayout>
|
|
34
|
+
}
|
|
35
|
+
/>
|
|
36
|
+
</Switch>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
Routes.propTypes = propTypes;
|
|
41
|
+
Routes.defaultProps = defaultProps;
|
|
42
|
+
|
|
43
|
+
export default Routes;
|
|
@@ -5,9 +5,8 @@ import classNames from 'classnames';
|
|
|
5
5
|
import { Link } from 'react-router-dom';
|
|
6
6
|
|
|
7
7
|
import * as AppPropTypes from '../../lib/PropTypes';
|
|
8
|
-
import Label from '../partials/Label';
|
|
9
8
|
|
|
10
|
-
import styles from '<%= getRelativeStylesPath('components/buttons/Button.jsx', 'buttons/button.scss') %>';
|
|
9
|
+
import styles from '<%= getRelativeStylesPath('components/buttons/Button.jsx', 'buttons/button.module.scss') %>';
|
|
11
10
|
|
|
12
11
|
const propTypes = {
|
|
13
12
|
type: PropTypes.string,
|
|
@@ -22,9 +21,6 @@ const propTypes = {
|
|
|
22
21
|
disabled: PropTypes.bool,
|
|
23
22
|
loading: PropTypes.bool,
|
|
24
23
|
disableOnLoading: PropTypes.bool,
|
|
25
|
-
small: PropTypes.bool,
|
|
26
|
-
big: PropTypes.bool,
|
|
27
|
-
withShadow: PropTypes.bool,
|
|
28
24
|
className: PropTypes.string,
|
|
29
25
|
iconClassName: PropTypes.string,
|
|
30
26
|
labelClassName: PropTypes.string,
|
|
@@ -44,16 +40,13 @@ const defaultProps = {
|
|
|
44
40
|
disabled: false,
|
|
45
41
|
loading: false,
|
|
46
42
|
disableOnLoading: true,
|
|
47
|
-
small: false,
|
|
48
|
-
big: false,
|
|
49
|
-
withShadow: false,
|
|
50
43
|
className: null,
|
|
51
44
|
iconClassName: null,
|
|
52
45
|
labelClassName: null,
|
|
53
46
|
onClick: null,
|
|
54
47
|
};
|
|
55
48
|
|
|
56
|
-
|
|
49
|
+
function Button({
|
|
57
50
|
type,
|
|
58
51
|
href,
|
|
59
52
|
external,
|
|
@@ -66,16 +59,12 @@ const Button = ({
|
|
|
66
59
|
disabled,
|
|
67
60
|
loading,
|
|
68
61
|
disableOnLoading,
|
|
69
|
-
small,
|
|
70
|
-
big,
|
|
71
|
-
withShadow,
|
|
72
62
|
onClick,
|
|
73
63
|
className,
|
|
74
64
|
iconClassName,
|
|
75
65
|
labelClassName,
|
|
76
|
-
})
|
|
66
|
+
}) {
|
|
77
67
|
const finalLabel = label || children;
|
|
78
|
-
const text = <Label>{finalLabel}</Label>;
|
|
79
68
|
const hasChildren = label !== null && children !== null;
|
|
80
69
|
const hasIcon = icon !== null;
|
|
81
70
|
const hasInlineIcon = hasIcon && (iconPosition === 'inline' || text === null);
|
|
@@ -120,7 +109,7 @@ const Button = ({
|
|
|
120
109
|
{hasChildren ? children : null}
|
|
121
110
|
</>
|
|
122
111
|
) : null}
|
|
123
|
-
{!hasIcon ?
|
|
112
|
+
{!hasIcon ? finalLabel : null}
|
|
124
113
|
{hasChildren ? children : null}
|
|
125
114
|
</>
|
|
126
115
|
);
|
|
@@ -131,9 +120,6 @@ const Button = ({
|
|
|
131
120
|
[styles.withIcon]: hasIcon,
|
|
132
121
|
[styles.withIconColumns]: hasIconColumns,
|
|
133
122
|
[styles.withText]: text !== null,
|
|
134
|
-
[styles.withShadow]: withShadow,
|
|
135
|
-
[styles.isSmall]: small,
|
|
136
|
-
[styles.isBig]: big,
|
|
137
123
|
[styles.isLink]: href !== null,
|
|
138
124
|
[styles.isDisabled]: disabled,
|
|
139
125
|
[styles.isLoading]: loading,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
|
|
4
|
+
import styles from '<%= getRelativeStylesPath('components/layouts/Main.jsx', 'layouts/main.module.scss') %>';
|
|
5
|
+
|
|
6
|
+
const propTypes = {
|
|
7
|
+
children: PropTypes.node.isRequired,
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const defaultProps = {
|
|
11
|
+
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
function MainLayout({ children }) {
|
|
15
|
+
return (
|
|
16
|
+
<div className={styles.container}>
|
|
17
|
+
<div className={styles.inner}>
|
|
18
|
+
<div className={styles.content}>{children}</div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
MainLayout.propTypes = propTypes;
|
|
25
|
+
MainLayout.defaultProps = defaultProps;
|
|
26
|
+
|
|
27
|
+
export default MainLayout;
|
|
@@ -0,0 +1,62 @@
|
|
|
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.module.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
|
+
function Menu({ items, className }) {
|
|
23
|
+
return (
|
|
24
|
+
<nav
|
|
25
|
+
className={classNames([
|
|
26
|
+
styles.container,
|
|
27
|
+
{
|
|
28
|
+
[className]: className !== null,
|
|
29
|
+
},
|
|
30
|
+
])}
|
|
31
|
+
>
|
|
32
|
+
<ul className={styles.items}>
|
|
33
|
+
{items.map(({ label, url, active = false, external = false }, index) => (
|
|
34
|
+
<li
|
|
35
|
+
className={classNames([
|
|
36
|
+
styles.item,
|
|
37
|
+
{
|
|
38
|
+
[styles.active]: active,
|
|
39
|
+
},
|
|
40
|
+
])}
|
|
41
|
+
key={`item-${index}`}
|
|
42
|
+
>
|
|
43
|
+
{external ? (
|
|
44
|
+
<a href={url} className={styles.link}>
|
|
45
|
+
<Label>{label}</Label>
|
|
46
|
+
</a>
|
|
47
|
+
) : (
|
|
48
|
+
<Link to={url} className={styles.link}>
|
|
49
|
+
<Label>{label}</Label>
|
|
50
|
+
</Link>
|
|
51
|
+
)}
|
|
52
|
+
</li>
|
|
53
|
+
))}
|
|
54
|
+
</ul>
|
|
55
|
+
</nav>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
Menu.propTypes = propTypes;
|
|
60
|
+
Menu.defaultProps = defaultProps;
|
|
61
|
+
|
|
62
|
+
export default Menu;
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
/* eslint-disable react/jsx-props-no-spreading */
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
import { connect } from 'react-redux';
|
|
5
4
|
import { Link } from 'react-router-dom';
|
|
6
|
-
import { defineMessages } from 'react-intl';
|
|
7
|
-
import { useUrlGenerator } from '@folklore/
|
|
5
|
+
import { defineMessages, FormattedMessage } from 'react-intl';
|
|
6
|
+
import { useUrlGenerator } from '@folklore/routes';
|
|
8
7
|
|
|
9
8
|
// import * as AppPropTypes from '../../lib/PropTypes';
|
|
10
9
|
import PageMeta from '../partials/PageMeta';
|
|
11
|
-
import Label from '../partials/Label';
|
|
12
10
|
|
|
13
|
-
import styles from '<%= getRelativeStylesPath('components/pages/Error.jsx', 'pages/error.scss') %>';
|
|
11
|
+
import styles from '<%= getRelativeStylesPath('components/pages/Error.jsx', 'pages/error.module.scss') %>';
|
|
14
12
|
|
|
15
13
|
export const messages = defineMessages({
|
|
16
14
|
metaTitle401: {
|
|
@@ -79,21 +77,21 @@ const defaultProps = {
|
|
|
79
77
|
statusCode: 404,
|
|
80
78
|
};
|
|
81
79
|
|
|
82
|
-
|
|
80
|
+
function ErrorPage({ statusCode }) {
|
|
83
81
|
const urlGenerator = useUrlGenerator();
|
|
84
82
|
return (
|
|
85
83
|
<div className={styles.container}>
|
|
86
84
|
<PageMeta title={messages[`metaTitle${statusCode || 404}`]} />
|
|
87
85
|
<div className={styles.inner}>
|
|
88
86
|
<h1 className={styles.title}>
|
|
89
|
-
<
|
|
87
|
+
<FormattedMessage {...messages[`title${statusCode || 404}`]} />
|
|
90
88
|
</h1>
|
|
91
89
|
<p className={styles.description}>
|
|
92
|
-
<
|
|
90
|
+
<FormattedMessage {...messages[`description${statusCode || 404}`]} />
|
|
93
91
|
</p>
|
|
94
92
|
<div className={styles.actions}>
|
|
95
93
|
<Link to={urlGenerator.route('home')}>
|
|
96
|
-
<
|
|
94
|
+
<FormattedMessage {...messages.gotoHome} />
|
|
97
95
|
</Link>
|
|
98
96
|
</div>
|
|
99
97
|
</div>
|
|
@@ -104,6 +102,4 @@ const ErrorPage = ({ statusCode }) => {
|
|
|
104
102
|
ErrorPage.propTypes = propTypes;
|
|
105
103
|
ErrorPage.defaultProps = defaultProps;
|
|
106
104
|
|
|
107
|
-
export default
|
|
108
|
-
statusCode,
|
|
109
|
-
}))(ErrorPage);
|
|
105
|
+
export default ErrorPage;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
// import PropTypes from 'prop-types';
|
|
3
|
+
import { defineMessages } 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.module.scss') %>';
|
|
9
|
+
|
|
10
|
+
const messages = defineMessages({
|
|
11
|
+
metaTitle: {
|
|
12
|
+
defaultMessage: 'Home',
|
|
13
|
+
description: 'Page title'
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const propTypes = {
|
|
18
|
+
// intl: AppPropTypes.intl.isRequired,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
function HomePage () {
|
|
22
|
+
return (
|
|
23
|
+
<div className={styles.container}>
|
|
24
|
+
<PageMeta title={messages.metaTitle} />
|
|
25
|
+
<div className={styles.logo} />
|
|
26
|
+
</div>
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
HomePage.propTypes = propTypes;
|
|
31
|
+
|
|
32
|
+
export default HomePage;
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
/* eslint-disable react/no-array-index-key */
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { Helmet } from 'react-helmet';
|
|
4
|
-
import { defineMessages,
|
|
4
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
5
5
|
|
|
6
6
|
import * as AppPropTypes from '../../lib/PropTypes';
|
|
7
7
|
import { isMessage } from '../../lib/utils';
|
|
8
8
|
|
|
9
9
|
const messages = defineMessages({
|
|
10
10
|
title: {
|
|
11
|
-
id: 'meta.title',
|
|
12
11
|
defaultMessage: 'Title',
|
|
12
|
+
description: 'Page title',
|
|
13
13
|
},
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
const propTypes = {
|
|
17
|
-
intl: AppPropTypes.intl.isRequired,
|
|
18
17
|
title: AppPropTypes.message,
|
|
19
18
|
};
|
|
20
19
|
|
|
@@ -22,15 +21,16 @@ const defaultProps = {
|
|
|
22
21
|
title: messages.title,
|
|
23
22
|
};
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
intl
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
);
|
|
24
|
+
function PageMeta({ title }) {
|
|
25
|
+
const intl = useIntl();
|
|
26
|
+
return (
|
|
27
|
+
<Helmet>
|
|
28
|
+
<title>{isMessage(title) ? intl.formatMessage(title) : title}</title>
|
|
29
|
+
</Helmet>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
32
|
|
|
33
33
|
PageMeta.propTypes = propTypes;
|
|
34
34
|
PageMeta.defaultProps = defaultProps;
|
|
35
35
|
|
|
36
|
-
export default React.memo(
|
|
36
|
+
export default React.memo(PageMeta);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { shouldPolyfill as shouldPolyfillLocale } from '@formatjs/intl-locale/should-polyfill';
|
|
2
|
+
import { shouldPolyfill as shouldPolyfillPlural } from '@formatjs/intl-pluralrules/should-polyfill';
|
|
3
|
+
|
|
4
|
+
function should() {
|
|
5
|
+
return (
|
|
6
|
+
typeof window.Intl === 'undefined' ||
|
|
7
|
+
shouldPolyfillLocale() ||
|
|
8
|
+
shouldPolyfillPlural() ||
|
|
9
|
+
typeof window.IntersectionObserver === 'undefined' ||
|
|
10
|
+
typeof window.ResizeObserver === 'undefined'
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export default should;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
4
|
+
|
|
5
|
+
var _path = _interopRequireDefault(require("path"));
|
|
6
|
+
|
|
7
|
+
var _generator = _interopRequireDefault(require("../../lib/generator"));
|
|
8
|
+
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
|
|
11
|
+
module.exports = class RollupGenerator extends _generator.default {
|
|
12
|
+
constructor(...args) {
|
|
13
|
+
super(...args);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
get prompting() {
|
|
17
|
+
return {
|
|
18
|
+
welcome() {
|
|
19
|
+
if (this.options.quiet) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
console.log(_chalk.default.yellow('\n----------------------'));
|
|
24
|
+
console.log('Rollup Generator');
|
|
25
|
+
console.log(_chalk.default.yellow('----------------------\n'));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
get writing() {
|
|
32
|
+
return {
|
|
33
|
+
config() {
|
|
34
|
+
const srcPath = this.templatePath('config.js');
|
|
35
|
+
const destPath = this.destinationPath('rollup.config.js');
|
|
36
|
+
this.fs.copyTpl(srcPath, destPath);
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
dependencies() {
|
|
40
|
+
this.addDevDependencies(['@rollup/plugin-babel', '@rollup/plugin-commonjs', '@rollup/plugin-json', '@rollup/plugin-node-resolve', '@rollup/plugin-replace', 'rollup']);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async install() {
|
|
47
|
+
if (this.options['skip-install']) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
await this.spawnCommand('npm', ['install']);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
};
|