@panneau/app 1.0.1-alpha.0 → 1.0.3-alpha.0
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/assets/css/styles.css +7 -0
- package/es/index.js +1812 -5
- package/lib/index.js +1842 -15
- package/package.json +66 -54
- package/scss/styles.scss +3 -0
- package/es/Panneau.js +0 -318
- package/es/actions/AuthActions.js +0 -16
- package/es/actions/LayoutActions.js +0 -14
- package/es/components/App.js +0 -129
- package/es/components/Layout.js +0 -68
- package/es/components/Panneau.js +0 -79
- package/es/components/index.js +0 -3
- package/es/components/pages/Account.js +0 -38
- package/es/components/pages/Home.js +0 -12
- package/es/components/pages/ResourceCreate.js +0 -44
- package/es/components/pages/ResourceDelete.js +0 -11
- package/es/components/pages/ResourceEdit.js +0 -28
- package/es/components/pages/ResourceForm.js +0 -343
- package/es/components/pages/ResourceIndex.js +0 -261
- package/es/components/pages/ResourceShow.js +0 -15
- package/es/components/partials/ResourceFormHeader.js +0 -111
- package/es/components/partials/ResourceIndexHeader.js +0 -71
- package/es/defaults/routes.json +0 -10
- package/es/lib/createStore.js +0 -30
- package/es/reducers/AuthReducer.js +0 -32
- package/es/reducers/index.js +0 -4
- package/lib/Panneau.js +0 -340
- package/lib/actions/AuthActions.js +0 -25
- package/lib/actions/LayoutActions.js +0 -25
- package/lib/components/App.js +0 -159
- package/lib/components/Layout.js +0 -87
- package/lib/components/Panneau.js +0 -103
- package/lib/components/index.js +0 -23
- package/lib/components/pages/Account.js +0 -54
- package/lib/components/pages/Home.js +0 -23
- package/lib/components/pages/ResourceCreate.js +0 -65
- package/lib/components/pages/ResourceDelete.js +0 -22
- package/lib/components/pages/ResourceEdit.js +0 -44
- package/lib/components/pages/ResourceForm.js +0 -376
- package/lib/components/pages/ResourceIndex.js +0 -289
- package/lib/components/pages/ResourceShow.js +0 -28
- package/lib/components/partials/ResourceFormHeader.js +0 -137
- package/lib/components/partials/ResourceIndexHeader.js +0 -87
- package/lib/defaults/routes.json +0 -10
- package/lib/lib/createStore.js +0 -46
- package/lib/reducers/AuthReducer.js +0 -43
- package/lib/reducers/index.js +0 -15
- package/src/Panneau.js +0 -274
- package/src/actions/AuthActions.js +0 -17
- package/src/actions/LayoutActions.js +0 -12
- package/src/components/App.jsx +0 -121
- package/src/components/Layout.jsx +0 -51
- package/src/components/Panneau.jsx +0 -95
- package/src/components/index.js +0 -7
- package/src/components/pages/Account.jsx +0 -34
- package/src/components/pages/Home.jsx +0 -19
- package/src/components/pages/ResourceCreate.jsx +0 -50
- package/src/components/pages/ResourceDelete.jsx +0 -18
- package/src/components/pages/ResourceEdit.jsx +0 -39
- package/src/components/pages/ResourceForm.jsx +0 -361
- package/src/components/pages/ResourceIndex.jsx +0 -256
- package/src/components/pages/ResourceShow.jsx +0 -23
- package/src/components/partials/ResourceFormHeader.jsx +0 -137
- package/src/components/partials/ResourceIndexHeader.jsx +0 -84
- package/src/defaults/routes.json +0 -10
- package/src/index.js +0 -9
- package/src/lib/createStore.js +0 -21
- package/src/reducers/AuthReducer.js +0 -23
- package/src/reducers/index.js +0 -5
- package/src/styles/layout.scss +0 -5
- package/src/styles/pages/resource-form.scss +0 -42
- package/src/styles/pages/resource-index.scss +0 -43
- package/src/styles/partials/resource-form-header.scss +0 -7
- package/src/styles/partials/resource-index-header.scss +0 -13
- package/src/styles/vendor.global.scss +0 -5
package/es/components/Layout.js
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
2
|
-
import _extends from "@babel/runtime/helpers/extends";
|
3
|
-
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
4
|
-
|
5
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
6
|
-
|
7
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
8
|
-
|
9
|
-
/* eslint-disable react/jsx-props-no-spreading */
|
10
|
-
import React, { useCallback } from 'react';
|
11
|
-
import PropTypes from 'prop-types';
|
12
|
-
import { connect } from 'react-redux';
|
13
|
-
import { withRouter } from 'react-router';
|
14
|
-
import { PropTypes as PanneauPropTypes } from '@panneau/core';
|
15
|
-
import { useDefinition, useComponents, useUrlGenerator } from '@panneau/core/contexts';
|
16
|
-
import { updateLayout as updateLayoutAction } from '../actions/LayoutActions';
|
17
|
-
var propTypes = {
|
18
|
-
history: PanneauPropTypes.history.isRequired,
|
19
|
-
updateLayout: PropTypes.func.isRequired
|
20
|
-
};
|
21
|
-
var defaultProps = {};
|
22
|
-
|
23
|
-
var Layout = function Layout(_ref) {
|
24
|
-
var updateLayout = _ref.updateLayout,
|
25
|
-
history = _ref.history,
|
26
|
-
props = _objectWithoutProperties(_ref, ["updateLayout", "history"]);
|
27
|
-
|
28
|
-
var urlGenerator = useUrlGenerator();
|
29
|
-
var definition = useDefinition();
|
30
|
-
var layoutsCollection = useComponents('layouts');
|
31
|
-
var gotoHome = useCallback(function () {
|
32
|
-
return history(urlGenerator.route('home'));
|
33
|
-
}, [urlGenerator]);
|
34
|
-
var gotoLink = useCallback(function (path) {
|
35
|
-
return history(path);
|
36
|
-
}, []);
|
37
|
-
var gotoRoute = useCallback(function (name) {
|
38
|
-
return history(urlGenerator.route(name));
|
39
|
-
}, [urlGenerator]);
|
40
|
-
|
41
|
-
var _definition$layout = definition.layout(),
|
42
|
-
_definition$layout$ty = _definition$layout.type,
|
43
|
-
componentName = _definition$layout$ty === void 0 ? 'normal' : _definition$layout$ty,
|
44
|
-
layoutProps = _objectWithoutProperties(_definition$layout, ["type"]);
|
45
|
-
|
46
|
-
var LayoutComponent = layoutsCollection.getComponent(componentName);
|
47
|
-
return LayoutComponent !== null ? React.createElement(LayoutComponent, _extends({
|
48
|
-
gotoHome: gotoHome,
|
49
|
-
gotoLink: gotoLink,
|
50
|
-
gotoRoute: gotoRoute,
|
51
|
-
updateLayout: updateLayout
|
52
|
-
}, layoutProps, props)) : null;
|
53
|
-
};
|
54
|
-
|
55
|
-
Layout.propTypes = propTypes;
|
56
|
-
Layout.defaultProps = defaultProps;
|
57
|
-
var WithStateContainer = connect(function (_ref2) {
|
58
|
-
var layout = _ref2.layout;
|
59
|
-
return _objectSpread({}, layout);
|
60
|
-
}, function (dispatch) {
|
61
|
-
return {
|
62
|
-
updateLayout: function updateLayout(layout) {
|
63
|
-
return dispatch(updateLayoutAction(layout));
|
64
|
-
}
|
65
|
-
};
|
66
|
-
})(Layout);
|
67
|
-
var WithRouterContainer = withRouter(WithStateContainer);
|
68
|
-
export default WithRouterContainer;
|
package/es/components/Panneau.js
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
2
|
-
|
3
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
4
|
-
|
5
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
6
|
-
|
7
|
-
import React, { useMemo } from 'react';
|
8
|
-
import PropTypes from 'prop-types';
|
9
|
-
import { IntlProvider } from 'react-intl';
|
10
|
-
import { Router } from 'react-router';
|
11
|
-
import { createBrowserHistory, createMemoryHistory } from 'history';
|
12
|
-
import { PropTypes as PanneauPropTypes, Definition } from '@panneau/core';
|
13
|
-
import { DefinitionProvider, UrlGeneratorProvider, ComponentsProvider } from '@panneau/core/contexts';
|
14
|
-
import { Provider as ReduxProvider } from 'react-redux';
|
15
|
-
import defaultRoutes from '../defaults/routes.json';
|
16
|
-
import reducers from '../reducers/index';
|
17
|
-
import createStore from '../lib/createStore';
|
18
|
-
import App from './App';
|
19
|
-
window.parent.React2 = React;
|
20
|
-
var propTypes = {
|
21
|
-
locale: PropTypes.string,
|
22
|
-
messages: PropTypes.objectOf(PropTypes.objectOf(PropTypes.string)),
|
23
|
-
routes: PropTypes.objectOf(PropTypes.string),
|
24
|
-
memoryRouter: PropTypes.bool,
|
25
|
-
definition: PanneauPropTypes.definitions.definition.isRequired,
|
26
|
-
componentsCollection: PanneauPropTypes.componentsCollection.isRequired,
|
27
|
-
user: PanneauPropTypes.user
|
28
|
-
};
|
29
|
-
var defaultProps = {
|
30
|
-
locale: 'en',
|
31
|
-
messages: {},
|
32
|
-
routes: defaultRoutes,
|
33
|
-
memoryRouter: false,
|
34
|
-
user: null
|
35
|
-
};
|
36
|
-
|
37
|
-
var Panneau = function Panneau(_ref) {
|
38
|
-
var locale = _ref.locale,
|
39
|
-
messages = _ref.messages,
|
40
|
-
memoryRouter = _ref.memoryRouter,
|
41
|
-
routes = _ref.routes,
|
42
|
-
definitionData = _ref.definition,
|
43
|
-
componentsCollection = _ref.componentsCollection,
|
44
|
-
user = _ref.user;
|
45
|
-
var store = useMemo(function () {
|
46
|
-
return createStore(reducers, {
|
47
|
-
auth: {
|
48
|
-
user: user
|
49
|
-
}
|
50
|
-
});
|
51
|
-
}, []);
|
52
|
-
var history = useMemo(function () {
|
53
|
-
return memoryRouter ? createMemoryHistory() : createBrowserHistory();
|
54
|
-
}, [memoryRouter]);
|
55
|
-
var definition = useMemo(function () {
|
56
|
-
return new Definition(definitionData);
|
57
|
-
}, [definitionData]);
|
58
|
-
var allRoutes = useMemo(function () {
|
59
|
-
return _objectSpread({}, routes, {}, definition.allRoutes());
|
60
|
-
}, [routes, definition]);
|
61
|
-
return React.createElement(ReduxProvider, {
|
62
|
-
store: store
|
63
|
-
}, React.createElement(IntlProvider, {
|
64
|
-
locale: locale,
|
65
|
-
messages: messages
|
66
|
-
}, React.createElement(Router, {
|
67
|
-
history: history
|
68
|
-
}, React.createElement(DefinitionProvider, {
|
69
|
-
definition: definition
|
70
|
-
}, React.createElement(UrlGeneratorProvider, {
|
71
|
-
routes: allRoutes
|
72
|
-
}, React.createElement(ComponentsProvider, {
|
73
|
-
collection: componentsCollection
|
74
|
-
}, React.createElement(App, null)))))));
|
75
|
-
};
|
76
|
-
|
77
|
-
Panneau.propTypes = propTypes;
|
78
|
-
Panneau.defaultProps = defaultProps;
|
79
|
-
export default Panneau;
|
package/es/components/index.js
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
import React from 'react'; // import PropTypes from 'prop-types';
|
2
|
-
|
3
|
-
import { connect } from 'react-redux';
|
4
|
-
import { defineMessages } from 'react-intl';
|
5
|
-
import { PropTypes as PanneauPropTypes } from '@panneau/core';
|
6
|
-
import ResourceForm from './ResourceForm';
|
7
|
-
var messages = defineMessages({
|
8
|
-
title: {
|
9
|
-
"id": "core.titles.account",
|
10
|
-
"defaultMessage": "Edit account"
|
11
|
-
}
|
12
|
-
});
|
13
|
-
var propTypes = {
|
14
|
-
user: PanneauPropTypes.user.isRequired,
|
15
|
-
resource: PanneauPropTypes.resource.isRequired
|
16
|
-
};
|
17
|
-
var defaultProps = {};
|
18
|
-
|
19
|
-
var AccountPage = function AccountPage(_ref) {
|
20
|
-
var user = _ref.user,
|
21
|
-
resource = _ref.resource;
|
22
|
-
return React.createElement(ResourceForm, {
|
23
|
-
itemId: user.id,
|
24
|
-
action: "edit",
|
25
|
-
title: messages.title,
|
26
|
-
resource: resource
|
27
|
-
});
|
28
|
-
};
|
29
|
-
|
30
|
-
AccountPage.propTypes = propTypes;
|
31
|
-
AccountPage.defaultProps = defaultProps;
|
32
|
-
var WithStateContainer = connect(function (_ref2) {
|
33
|
-
var auth = _ref2.auth;
|
34
|
-
return {
|
35
|
-
user: auth.user || null
|
36
|
-
};
|
37
|
-
})(AccountPage);
|
38
|
-
export default WithStateContainer;
|
@@ -1,12 +0,0 @@
|
|
1
|
-
import React from 'react'; // import PropTypes from 'prop-types';
|
2
|
-
|
3
|
-
var propTypes = {};
|
4
|
-
var defaultProps = {};
|
5
|
-
|
6
|
-
var HomePage = function HomePage() {
|
7
|
-
return React.createElement("div", null);
|
8
|
-
};
|
9
|
-
|
10
|
-
HomePage.propTypes = propTypes;
|
11
|
-
HomePage.defaultProps = defaultProps;
|
12
|
-
export default HomePage;
|
@@ -1,44 +0,0 @@
|
|
1
|
-
import _extends from "@babel/runtime/helpers/extends";
|
2
|
-
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
3
|
-
import React, { useCallback } from 'react';
|
4
|
-
import PropTypes from 'prop-types';
|
5
|
-
import { defineMessages } from 'react-intl';
|
6
|
-
import ResourceForm from './ResourceForm';
|
7
|
-
export var messages = defineMessages({
|
8
|
-
create: {
|
9
|
-
"id": "core.buttons.resources.create",
|
10
|
-
"defaultMessage": "Create"
|
11
|
-
},
|
12
|
-
title: {
|
13
|
-
"id": "core.titles.resources.create",
|
14
|
-
"defaultMessage": "Create {name}"
|
15
|
-
},
|
16
|
-
titleTyped: {
|
17
|
-
"id": "core.titles.resources.create_typed",
|
18
|
-
"defaultMessage": "Create {name} <small class=\"text-muted\">({type})</small>"
|
19
|
-
}
|
20
|
-
});
|
21
|
-
var propTypes = {
|
22
|
-
gotoResourceAction: PropTypes.func.isRequired
|
23
|
-
};
|
24
|
-
var defaultProps = {};
|
25
|
-
|
26
|
-
var ResourceCreate = function ResourceCreate(_ref) {
|
27
|
-
var gotoResourceAction = _ref.gotoResourceAction,
|
28
|
-
props = _objectWithoutProperties(_ref, ["gotoResourceAction"]);
|
29
|
-
|
30
|
-
var onFormComplete = useCallback(function (it) {
|
31
|
-
return gotoResourceAction('edit', it.id);
|
32
|
-
}, [gotoResourceAction]);
|
33
|
-
return React.createElement(ResourceForm, _extends({
|
34
|
-
title: messages.title,
|
35
|
-
titleTyped: messages.titleTyped,
|
36
|
-
saveButtonLabel: messages.create,
|
37
|
-
onFormComplete: onFormComplete,
|
38
|
-
gotoResourceAction: gotoResourceAction
|
39
|
-
}, props));
|
40
|
-
};
|
41
|
-
|
42
|
-
ResourceCreate.propTypes = propTypes;
|
43
|
-
ResourceCreate.defaultProps = defaultProps;
|
44
|
-
export default ResourceCreate;
|
@@ -1,11 +0,0 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
var propTypes = {};
|
3
|
-
var defaultProps = {};
|
4
|
-
|
5
|
-
var HomePage = function HomePage() {
|
6
|
-
return React.createElement("div", null, "Delete resource");
|
7
|
-
};
|
8
|
-
|
9
|
-
HomePage.propTypes = propTypes;
|
10
|
-
HomePage.defaultProps = defaultProps;
|
11
|
-
export default HomePage;
|
@@ -1,28 +0,0 @@
|
|
1
|
-
import _extends from "@babel/runtime/helpers/extends";
|
2
|
-
import React from 'react';
|
3
|
-
import { defineMessages } from 'react-intl';
|
4
|
-
import ResourceForm from './ResourceForm';
|
5
|
-
var messages = defineMessages({
|
6
|
-
title: {
|
7
|
-
"id": "core.titles.resources.edit",
|
8
|
-
"defaultMessage": "Edit {name}"
|
9
|
-
},
|
10
|
-
titleTyped: {
|
11
|
-
"id": "core.titles.resources.edit_typed",
|
12
|
-
"defaultMessage": "Edit {name} <small class=\"text-muted\">({type})</small>"
|
13
|
-
}
|
14
|
-
});
|
15
|
-
var propTypes = {};
|
16
|
-
var defaultProps = {};
|
17
|
-
|
18
|
-
var ResourceEdit = function ResourceEdit(props) {
|
19
|
-
return React.createElement(ResourceForm, _extends({
|
20
|
-
title: messages.title,
|
21
|
-
titleTyped: messages.titleTyped,
|
22
|
-
action: "edit"
|
23
|
-
}, props));
|
24
|
-
};
|
25
|
-
|
26
|
-
ResourceEdit.propTypes = propTypes;
|
27
|
-
ResourceEdit.defaultProps = defaultProps;
|
28
|
-
export default ResourceEdit;
|
@@ -1,343 +0,0 @@
|
|
1
|
-
import _extends from "@babel/runtime/helpers/extends";
|
2
|
-
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
3
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
4
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
5
|
-
|
6
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
7
|
-
|
8
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
9
|
-
|
10
|
-
/* eslint-disable react/jsx-props-no-spreading */
|
11
|
-
import React, { useCallback, useState, useEffect, useMemo } from 'react';
|
12
|
-
import PropTypes from 'prop-types';
|
13
|
-
import isObject from 'lodash/isObject';
|
14
|
-
import classNames from 'classnames';
|
15
|
-
import { defineMessages } from 'react-intl';
|
16
|
-
import { PropTypes as PanneauPropTypes, useResourceApi } from '@panneau/core';
|
17
|
-
import { getErrorsFromResponseError } from '@panneau/core/requests';
|
18
|
-
import { Loading, Errors } from '@panneau/core/components';
|
19
|
-
import { useComponent } from '@panneau/core/contexts';
|
20
|
-
import ResourceFormHeader from '../partials/ResourceFormHeader';
|
21
|
-
var styles = {
|
22
|
-
"container": "panneau-app-resource-form-container",
|
23
|
-
"isFullscreen": "panneau-app-resource-form-isFullscreen",
|
24
|
-
"noticeIcon": "panneau-app-resource-form-noticeIcon",
|
25
|
-
"loading": "panneau-app-resource-form-loading",
|
26
|
-
"inner": "panneau-app-resource-form-inner",
|
27
|
-
"content": "panneau-app-resource-form-content",
|
28
|
-
"form": "panneau-app-resource-form-form"
|
29
|
-
};
|
30
|
-
export var messages = defineMessages({
|
31
|
-
cancel: {
|
32
|
-
"id": "app.buttons.resources.cancel",
|
33
|
-
"defaultMessage": "Cancel"
|
34
|
-
},
|
35
|
-
save: {
|
36
|
-
"id": "app.buttons.resources.save",
|
37
|
-
"defaultMessage": "Save"
|
38
|
-
},
|
39
|
-
title: {
|
40
|
-
"id": "app.titles.resources.default",
|
41
|
-
"defaultMessage": "{name}"
|
42
|
-
},
|
43
|
-
titleTyped: {
|
44
|
-
"id": "app.titles.resources.typed",
|
45
|
-
"defaultMessage": "{name} <small class=\"text-muted\">({type})</small>"
|
46
|
-
},
|
47
|
-
successNotice: {
|
48
|
-
"id": "app.notices.resources.success",
|
49
|
-
"defaultMessage": "Success!"
|
50
|
-
},
|
51
|
-
errorNotice: {
|
52
|
-
"id": "app.notices.resources.error",
|
53
|
-
"defaultMessage": "Failed. The form contains errors."
|
54
|
-
}
|
55
|
-
});
|
56
|
-
var propTypes = {
|
57
|
-
action: PropTypes.string,
|
58
|
-
resource: PanneauPropTypes.resource.isRequired,
|
59
|
-
resourceApi: PanneauPropTypes.resourceApi.isRequired,
|
60
|
-
itemId: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
61
|
-
item: PropTypes.shape({
|
62
|
-
id: PropTypes.number,
|
63
|
-
type: PropTypes.string
|
64
|
-
}),
|
65
|
-
query: PropTypes.shape({
|
66
|
-
type: PropTypes.string
|
67
|
-
}),
|
68
|
-
successNoticeLabel: PanneauPropTypes.label,
|
69
|
-
errorNoticeLabel: PanneauPropTypes.label,
|
70
|
-
buttons: PanneauPropTypes.buttons,
|
71
|
-
saveButtonLabel: PanneauPropTypes.message,
|
72
|
-
confirmSwitchTypeMessage: PanneauPropTypes.message,
|
73
|
-
errors: PropTypes.arrayOf(PropTypes.string),
|
74
|
-
formValue: PropTypes.shape({}),
|
75
|
-
formErrors: PropTypes.objectOf(PropTypes.array),
|
76
|
-
readOnly: PropTypes.bool,
|
77
|
-
title: PanneauPropTypes.label,
|
78
|
-
titleTyped: PanneauPropTypes.label,
|
79
|
-
gotoResourceAction: PropTypes.func.isRequired,
|
80
|
-
onFormComplete: PropTypes.func
|
81
|
-
};
|
82
|
-
var defaultProps = {
|
83
|
-
action: 'create',
|
84
|
-
title: messages.title,
|
85
|
-
titleTyped: messages.titleTyped,
|
86
|
-
query: null,
|
87
|
-
itemId: null,
|
88
|
-
item: null,
|
89
|
-
errors: null,
|
90
|
-
formValue: null,
|
91
|
-
formErrors: null,
|
92
|
-
readOnly: false,
|
93
|
-
successNoticeLabel: messages.successNotice,
|
94
|
-
errorNoticeLabel: messages.errorNotice,
|
95
|
-
confirmSwitchTypeMessage: messages.confirmSwitchType,
|
96
|
-
buttons: [{
|
97
|
-
id: 'cancel',
|
98
|
-
type: 'button',
|
99
|
-
label: messages.cancel,
|
100
|
-
className: 'btn-link btn-lg'
|
101
|
-
}, {
|
102
|
-
id: 'submit',
|
103
|
-
type: 'submit',
|
104
|
-
label: messages.save,
|
105
|
-
className: 'btn-primary btn-lg'
|
106
|
-
}],
|
107
|
-
saveButtonLabel: null,
|
108
|
-
onFormComplete: null
|
109
|
-
};
|
110
|
-
|
111
|
-
var ResourceForm = function ResourceForm(_ref) {
|
112
|
-
var resource = _ref.resource,
|
113
|
-
currentItem = _ref.item,
|
114
|
-
itemId = _ref.itemId,
|
115
|
-
query = _ref.query,
|
116
|
-
action = _ref.action,
|
117
|
-
readOnly = _ref.readOnly,
|
118
|
-
currentErrors = _ref.errors,
|
119
|
-
initialFormValue = _ref.formValue,
|
120
|
-
initialFormErrors = _ref.formErrors,
|
121
|
-
title = _ref.title,
|
122
|
-
titleTyped = _ref.titleTyped,
|
123
|
-
buttons = _ref.buttons,
|
124
|
-
saveButtonLabel = _ref.saveButtonLabel,
|
125
|
-
successNoticeLabel = _ref.successNoticeLabel,
|
126
|
-
errorNoticeLabel = _ref.errorNoticeLabel,
|
127
|
-
customOnFormComplete = _ref.onFormComplete,
|
128
|
-
gotoResourceAction = _ref.gotoResourceAction;
|
129
|
-
|
130
|
-
var _useState = useState(currentItem),
|
131
|
-
_useState2 = _slicedToArray(_useState, 2),
|
132
|
-
item = _useState2[0],
|
133
|
-
setItem = _useState2[1];
|
134
|
-
|
135
|
-
var _useState3 = useState(false),
|
136
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
137
|
-
isLoading = _useState4[0],
|
138
|
-
setIsLoading = _useState4[1];
|
139
|
-
|
140
|
-
var _useState5 = useState(currentErrors || item),
|
141
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
142
|
-
errors = _useState6[0],
|
143
|
-
setErrors = _useState6[1];
|
144
|
-
|
145
|
-
var _useState7 = useState(initialFormValue || item),
|
146
|
-
_useState8 = _slicedToArray(_useState7, 2),
|
147
|
-
formValue = _useState8[0],
|
148
|
-
setFormValue = _useState8[1];
|
149
|
-
|
150
|
-
var _useState9 = useState(initialFormErrors || item),
|
151
|
-
_useState10 = _slicedToArray(_useState9, 2),
|
152
|
-
formErrors = _useState10[0],
|
153
|
-
setFormErrors = _useState10[1];
|
154
|
-
|
155
|
-
var _useState11 = useState(initialFormErrors !== null ? false : null),
|
156
|
-
_useState12 = _slicedToArray(_useState11, 2),
|
157
|
-
formSuccess = _useState12[0],
|
158
|
-
setFormSuccess = _useState12[1];
|
159
|
-
|
160
|
-
var resourceApi = useResourceApi(resource);
|
161
|
-
var isTyped = resource.type() === 'typed';
|
162
|
-
var waitingItem = action === 'edit' && item === null; // Load item if needed
|
163
|
-
|
164
|
-
useEffect(function () {
|
165
|
-
if (isLoading) {
|
166
|
-
return;
|
167
|
-
}
|
168
|
-
|
169
|
-
var onItemLoaded = function onItemLoaded(newItem) {
|
170
|
-
setItem(newItem);
|
171
|
-
};
|
172
|
-
|
173
|
-
var onItemLoadError = function onItemLoadError(newErrors) {
|
174
|
-
setErrors(newErrors);
|
175
|
-
};
|
176
|
-
|
177
|
-
var itemChanged = item !== null && "".concat(item.id) !== "".concat(itemId);
|
178
|
-
var itemShouldReload = item === null || itemChanged;
|
179
|
-
|
180
|
-
if ((action === 'edit' || action === 'show') && itemShouldReload) {
|
181
|
-
setIsLoading(true);
|
182
|
-
resourceApi.show(itemId).then(onItemLoaded)["catch"](onItemLoadError).then(function () {
|
183
|
-
setIsLoading(false);
|
184
|
-
});
|
185
|
-
}
|
186
|
-
}, [action, item, itemId, isLoading]); // Get current type
|
187
|
-
|
188
|
-
var currentType = useMemo(function () {
|
189
|
-
if (!isTyped || waitingItem) {
|
190
|
-
return null;
|
191
|
-
}
|
192
|
-
|
193
|
-
var types = resource.types();
|
194
|
-
var itemTypeId = item !== null ? item.type || null : null;
|
195
|
-
|
196
|
-
var _ref2 = query || {},
|
197
|
-
_ref2$type = _ref2.type,
|
198
|
-
queryTypeId = _ref2$type === void 0 ? null : _ref2$type;
|
199
|
-
|
200
|
-
var typeId = itemTypeId || queryTypeId;
|
201
|
-
var definedType = typeId !== null ? types.find(function (it) {
|
202
|
-
return it.id === typeId;
|
203
|
-
}) || null : null;
|
204
|
-
|
205
|
-
if (definedType !== null) {
|
206
|
-
return definedType;
|
207
|
-
}
|
208
|
-
|
209
|
-
return types.length > 0 ? types.find(function (_ref3) {
|
210
|
-
var _ref3$default = _ref3["default"],
|
211
|
-
isDefault = _ref3$default === void 0 ? false : _ref3$default;
|
212
|
-
return isDefault;
|
213
|
-
}) || types[0] || null : null;
|
214
|
-
}, [item, query, resource]);
|
215
|
-
var onClickCancel = useCallback(function (e) {
|
216
|
-
e.preventDefault();
|
217
|
-
gotoResourceAction('index');
|
218
|
-
}, [gotoResourceAction]);
|
219
|
-
var formButtons = useMemo(function () {
|
220
|
-
return readOnly ? [] : buttons.map(function (button) {
|
221
|
-
if (button.id === 'save' && saveButtonLabel !== null) {
|
222
|
-
return _objectSpread({}, button, {
|
223
|
-
label: saveButtonLabel
|
224
|
-
});
|
225
|
-
}
|
226
|
-
|
227
|
-
if (button.id === 'cancel' && typeof button.onClick === 'undefined') {
|
228
|
-
return _objectSpread({}, button, {
|
229
|
-
onClick: onClickCancel
|
230
|
-
});
|
231
|
-
}
|
232
|
-
|
233
|
-
return button;
|
234
|
-
});
|
235
|
-
}, [buttons, readOnly]);
|
236
|
-
var submitForm = useCallback(function () {
|
237
|
-
var data = isTyped ? _objectSpread({
|
238
|
-
type: currentType !== null ? currentType.id : null
|
239
|
-
}, formValue || item) : formValue;
|
240
|
-
setFormSuccess(null);
|
241
|
-
return action === 'create' ? resourceApi.store(data) : resourceApi.update(item.id, data || item);
|
242
|
-
}, [resourceApi, action, isTyped, currentType]);
|
243
|
-
var onFormChange = useCallback(function (value) {
|
244
|
-
setFormValue(value);
|
245
|
-
setFormSuccess(null);
|
246
|
-
}, []);
|
247
|
-
var onFormComplete = useCallback(function (newItem) {
|
248
|
-
setItem(newItem);
|
249
|
-
setFormValue(null);
|
250
|
-
setFormErrors(null);
|
251
|
-
setFormSuccess(true);
|
252
|
-
|
253
|
-
if (customOnFormComplete !== null) {
|
254
|
-
customOnFormComplete(item);
|
255
|
-
}
|
256
|
-
}, [customOnFormComplete]);
|
257
|
-
var onFormErrors = useCallback(function (error) {
|
258
|
-
var newErrors = getErrorsFromResponseError(error);
|
259
|
-
setFormErrors(newErrors);
|
260
|
-
setFormSuccess(false);
|
261
|
-
}, []); // Get form definition
|
262
|
-
|
263
|
-
var _useMemo = useMemo(function () {
|
264
|
-
var _resource$form = resource.form(action),
|
265
|
-
_resource$form$fields = _resource$form.fields,
|
266
|
-
fields = _resource$form$fields === void 0 ? [] : _resource$form$fields,
|
267
|
-
form = _objectWithoutProperties(_resource$form, ["fields"]);
|
268
|
-
|
269
|
-
var finalFields;
|
270
|
-
|
271
|
-
if (waitingItem) {
|
272
|
-
finalFields = null;
|
273
|
-
} else if (currentType !== null && isObject(fields)) {
|
274
|
-
finalFields = fields[currentType.id] || fields["default"] || fields;
|
275
|
-
} else {
|
276
|
-
finalFields = fields;
|
277
|
-
}
|
278
|
-
|
279
|
-
return _objectSpread({
|
280
|
-
type: 'normal',
|
281
|
-
fullscreen: false,
|
282
|
-
fields: finalFields
|
283
|
-
}, form);
|
284
|
-
}, [waitingItem, resource, currentType]),
|
285
|
-
_useMemo$type = _useMemo.type,
|
286
|
-
formType = _useMemo$type === void 0 ? null : _useMemo$type,
|
287
|
-
fullscreen = _useMemo.fullscreen,
|
288
|
-
_useMemo$className = _useMemo.className,
|
289
|
-
className = _useMemo$className === void 0 ? null : _useMemo$className,
|
290
|
-
formProps = _objectWithoutProperties(_useMemo, ["type", "fullscreen", "className"]);
|
291
|
-
|
292
|
-
var FormComponent = useComponent(formType, 'forms');
|
293
|
-
var form = !waitingItem && FormComponent !== null ? React.createElement(FormComponent, _extends({}, formProps, {
|
294
|
-
className: classNames([styles.form, _defineProperty({}, className, className !== null)]),
|
295
|
-
readOnly: readOnly,
|
296
|
-
buttons: formButtons,
|
297
|
-
value: formValue || item,
|
298
|
-
errors: formErrors,
|
299
|
-
notice: formSuccess !== null ? {
|
300
|
-
type: formSuccess ? 'success' : 'error',
|
301
|
-
label: formSuccess ? successNoticeLabel : errorNoticeLabel
|
302
|
-
} : null,
|
303
|
-
submitForm: submitForm,
|
304
|
-
onChange: onFormChange,
|
305
|
-
onComplete: onFormComplete,
|
306
|
-
onErrors: onFormErrors
|
307
|
-
})) : null;
|
308
|
-
var header = React.createElement(ResourceFormHeader, {
|
309
|
-
resource: resource,
|
310
|
-
type: currentType,
|
311
|
-
action: action,
|
312
|
-
fullscreen: fullscreen,
|
313
|
-
valueHasChanged: formValue !== null,
|
314
|
-
title: title,
|
315
|
-
titleTyped: titleTyped
|
316
|
-
});
|
317
|
-
var errorsMessages = errors !== null && errors.length > 0 ? React.createElement(Errors, {
|
318
|
-
errors: errors,
|
319
|
-
className: styles.errors
|
320
|
-
}) : null;
|
321
|
-
var content = isLoading && item === null ? React.createElement("div", {
|
322
|
-
className: classNames(['py-4', styles.loading])
|
323
|
-
}, React.createElement(Loading, {
|
324
|
-
loading: true
|
325
|
-
})) : form;
|
326
|
-
return React.createElement("div", {
|
327
|
-
className: classNames([styles.container, _defineProperty({}, styles.isFullscreen, fullscreen)])
|
328
|
-
}, fullscreen ? React.createElement("div", {
|
329
|
-
className: classNames([styles.inner])
|
330
|
-
}, header, React.createElement("div", {
|
331
|
-
className: classNames([styles.content])
|
332
|
-
}, errorsMessages, content)) : React.createElement("div", {
|
333
|
-
className: "container"
|
334
|
-
}, React.createElement("div", {
|
335
|
-
className: "row justify-content-md-center"
|
336
|
-
}, React.createElement("div", {
|
337
|
-
className: "col-lg-9"
|
338
|
-
}, header, errorsMessages, content))));
|
339
|
-
};
|
340
|
-
|
341
|
-
ResourceForm.propTypes = propTypes;
|
342
|
-
ResourceForm.defaultProps = defaultProps;
|
343
|
-
export default ResourceForm;
|