@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.
Files changed (75) hide show
  1. package/assets/css/styles.css +7 -0
  2. package/es/index.js +1812 -5
  3. package/lib/index.js +1842 -15
  4. package/package.json +66 -54
  5. package/scss/styles.scss +3 -0
  6. package/es/Panneau.js +0 -318
  7. package/es/actions/AuthActions.js +0 -16
  8. package/es/actions/LayoutActions.js +0 -14
  9. package/es/components/App.js +0 -129
  10. package/es/components/Layout.js +0 -68
  11. package/es/components/Panneau.js +0 -79
  12. package/es/components/index.js +0 -3
  13. package/es/components/pages/Account.js +0 -38
  14. package/es/components/pages/Home.js +0 -12
  15. package/es/components/pages/ResourceCreate.js +0 -44
  16. package/es/components/pages/ResourceDelete.js +0 -11
  17. package/es/components/pages/ResourceEdit.js +0 -28
  18. package/es/components/pages/ResourceForm.js +0 -343
  19. package/es/components/pages/ResourceIndex.js +0 -261
  20. package/es/components/pages/ResourceShow.js +0 -15
  21. package/es/components/partials/ResourceFormHeader.js +0 -111
  22. package/es/components/partials/ResourceIndexHeader.js +0 -71
  23. package/es/defaults/routes.json +0 -10
  24. package/es/lib/createStore.js +0 -30
  25. package/es/reducers/AuthReducer.js +0 -32
  26. package/es/reducers/index.js +0 -4
  27. package/lib/Panneau.js +0 -340
  28. package/lib/actions/AuthActions.js +0 -25
  29. package/lib/actions/LayoutActions.js +0 -25
  30. package/lib/components/App.js +0 -159
  31. package/lib/components/Layout.js +0 -87
  32. package/lib/components/Panneau.js +0 -103
  33. package/lib/components/index.js +0 -23
  34. package/lib/components/pages/Account.js +0 -54
  35. package/lib/components/pages/Home.js +0 -23
  36. package/lib/components/pages/ResourceCreate.js +0 -65
  37. package/lib/components/pages/ResourceDelete.js +0 -22
  38. package/lib/components/pages/ResourceEdit.js +0 -44
  39. package/lib/components/pages/ResourceForm.js +0 -376
  40. package/lib/components/pages/ResourceIndex.js +0 -289
  41. package/lib/components/pages/ResourceShow.js +0 -28
  42. package/lib/components/partials/ResourceFormHeader.js +0 -137
  43. package/lib/components/partials/ResourceIndexHeader.js +0 -87
  44. package/lib/defaults/routes.json +0 -10
  45. package/lib/lib/createStore.js +0 -46
  46. package/lib/reducers/AuthReducer.js +0 -43
  47. package/lib/reducers/index.js +0 -15
  48. package/src/Panneau.js +0 -274
  49. package/src/actions/AuthActions.js +0 -17
  50. package/src/actions/LayoutActions.js +0 -12
  51. package/src/components/App.jsx +0 -121
  52. package/src/components/Layout.jsx +0 -51
  53. package/src/components/Panneau.jsx +0 -95
  54. package/src/components/index.js +0 -7
  55. package/src/components/pages/Account.jsx +0 -34
  56. package/src/components/pages/Home.jsx +0 -19
  57. package/src/components/pages/ResourceCreate.jsx +0 -50
  58. package/src/components/pages/ResourceDelete.jsx +0 -18
  59. package/src/components/pages/ResourceEdit.jsx +0 -39
  60. package/src/components/pages/ResourceForm.jsx +0 -361
  61. package/src/components/pages/ResourceIndex.jsx +0 -256
  62. package/src/components/pages/ResourceShow.jsx +0 -23
  63. package/src/components/partials/ResourceFormHeader.jsx +0 -137
  64. package/src/components/partials/ResourceIndexHeader.jsx +0 -84
  65. package/src/defaults/routes.json +0 -10
  66. package/src/index.js +0 -9
  67. package/src/lib/createStore.js +0 -21
  68. package/src/reducers/AuthReducer.js +0 -23
  69. package/src/reducers/index.js +0 -5
  70. package/src/styles/layout.scss +0 -5
  71. package/src/styles/pages/resource-form.scss +0 -42
  72. package/src/styles/pages/resource-index.scss +0 -43
  73. package/src/styles/partials/resource-form-header.scss +0 -7
  74. package/src/styles/partials/resource-index-header.scss +0 -13
  75. package/src/styles/vendor.global.scss +0 -5
@@ -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;
@@ -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;
@@ -1,3 +0,0 @@
1
- import Panneau from './Panneau';
2
- import Layout from './Layout';
3
- export { Panneau, Layout };
@@ -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;