@panneau/app 1.0.0-alpha.225 → 1.0.0-alpha.226

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 (3) hide show
  1. package/es/index.js +61 -23
  2. package/lib/index.js +61 -22
  3. package/package.json +2 -2
package/es/index.js CHANGED
@@ -2,7 +2,7 @@ import _defineProperty from '@babel/runtime/helpers/defineProperty';
2
2
  import _objectSpread from '@babel/runtime/helpers/objectSpread2';
3
3
  import { useUser, useLogout, useAuth, AuthProvider } from '@panneau/auth';
4
4
  import { PropTypes } from '@panneau/core';
5
- import { useLocales, useFormsComponents, FormProvider, useUrlGenerator, usePanneauResources, usePanneau, usePanneauColorScheme, ResourceProvider, useFiltersComponents, useListsComponents, useFormComponent, useRoutes, PanneauProvider, UppyProvider, RoutesProvider, ComponentsProvider } from '@panneau/core/contexts';
5
+ import { useLocales, useFormsComponents, FormProvider, useUrlGenerator, usePanneauResources, usePanneau, usePanneauColorScheme, ResourceProvider, useFiltersComponents, useListsComponents, useComponentsManager, useFormComponent, useRoutes, PanneauProvider, UppyProvider, RoutesProvider, ComponentsProvider } from '@panneau/core/contexts';
6
6
  import { useResourceStore, useResourceUpdate, useResourceDestroy, useResourceItem, useResourceItems, ApiProvider } from '@panneau/data';
7
7
  import DisplaysProvider from '@panneau/displays';
8
8
  import FieldsProvider from '@panneau/fields';
@@ -27,13 +27,14 @@ import Navbar from '@panneau/element-navbar';
27
27
  import Menu from '@panneau/element-menu';
28
28
  import Label from '@panneau/element-label';
29
29
  import Alert from '@panneau/element-alert';
30
+ import isString from 'lodash/isString';
30
31
  import Dropdown from '@panneau/element-dropdown';
31
32
  import Pagination from '@panneau/element-pagination';
32
33
  import { faUndo } from '@fortawesome/free-solid-svg-icons';
33
34
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
34
35
  import FormGroup from '@panneau/element-form-group';
35
36
 
36
- var _excluded$3 = ["resource", "action", "previous", "status", "value", "onSubmit", "errors", "generalError", "className"];
37
+ var _excluded$4 = ["resource", "action", "previous", "status", "value", "onSubmit", "errors", "generalError", "className"];
37
38
  var propTypes$n = {
38
39
  resource: PropTypes.resource.isRequired,
39
40
  action: PropTypes$1.string,
@@ -69,7 +70,7 @@ var DeleteForm = function DeleteForm(_ref) {
69
70
  _ref.errors;
70
71
  var generalError = _ref.generalError,
71
72
  className = _ref.className,
72
- props = _objectWithoutProperties(_ref, _excluded$3);
73
+ props = _objectWithoutProperties(_ref, _excluded$4);
73
74
 
74
75
  return /*#__PURE__*/React.createElement(Form, Object.assign({
75
76
  className: classNames(['form', _defineProperty({
@@ -126,7 +127,7 @@ var DeleteForm = function DeleteForm(_ref) {
126
127
  DeleteForm.propTypes = propTypes$n;
127
128
  DeleteForm.defaultProps = defaultProps$n;
128
129
 
129
- var _excluded$2 = ["component", "resource", "onSuccess", "item", "type", "isDelete"];
130
+ var _excluded$3 = ["component", "resource", "onSuccess", "item", "type", "isDelete"];
130
131
  var propTypes$m = {
131
132
  component: PropTypes$1.string,
132
133
  resource: PropTypes.resource.isRequired,
@@ -151,7 +152,7 @@ var ResourceForm = function ResourceForm(_ref) {
151
152
  item = _ref.item,
152
153
  type = _ref.type,
153
154
  isDelete = _ref.isDelete,
154
- props = _objectWithoutProperties(_ref, _excluded$2);
155
+ props = _objectWithoutProperties(_ref, _excluded$3);
155
156
 
156
157
  var locales = useLocales();
157
158
  var FormComponents = useFormsComponents();
@@ -762,7 +763,7 @@ var ResourceCreateButtom = function ResourceCreateButtom(_ref) {
762
763
  ResourceCreateButtom.propTypes = propTypes$d;
763
764
  ResourceCreateButtom.defaultProps = defaultProps$d;
764
765
 
765
- var _excluded$1 = ["component", "name", "groupLabel"];
766
+ var _excluded$2 = ["component", "name", "groupLabel"];
766
767
  var propTypes$c = {
767
768
  filters: PropTypes$1.arrayOf(PropTypes$1.shape({
768
769
  id: PropTypes$1.string.isRequired,
@@ -822,7 +823,7 @@ var ResourceFilters = function ResourceFilters(_ref) {
822
823
  var component = _ref3.component,
823
824
  name = _ref3.name,
824
825
  groupLabel = _ref3.groupLabel,
825
- filterProps = _objectWithoutProperties(_ref3, _excluded$1);
826
+ filterProps = _objectWithoutProperties(_ref3, _excluded$2);
826
827
 
827
828
  var FilterComponent = getComponentFromName(component, FilterComponents, null);
828
829
  var filterValue = value !== null && value[name] ? value[name] : null;
@@ -850,7 +851,7 @@ var ResourceFilters = function ResourceFilters(_ref) {
850
851
  ResourceFilters.propTypes = propTypes$c;
851
852
  ResourceFilters.defaultProps = defaultProps$c;
852
853
 
853
- var _excluded = ["component", "showPagination", "filters"],
854
+ var _excluded$1 = ["component", "showPagination", "filters"],
854
855
  _excluded2 = ["page"];
855
856
  var propTypes$b = {
856
857
  resource: PropTypes.resource.isRequired,
@@ -890,7 +891,7 @@ var ResourceItemsList = function ResourceItemsList(_ref) {
890
891
  showPagination = _resource$index$showP === void 0 ? true : _resource$index$showP,
891
892
  _resource$index$filte = _resource$index.filters,
892
893
  filters = _resource$index$filte === void 0 ? null : _resource$index$filte,
893
- listProps = _objectWithoutProperties(_resource$index, _excluded);
894
+ listProps = _objectWithoutProperties(_resource$index, _excluded$1);
894
895
 
895
896
  var _usePanneauColorSchem = usePanneauColorScheme(),
896
897
  _usePanneauColorSchem2 = _usePanneauColorSchem.background,
@@ -951,16 +952,23 @@ var ResourceItemsList = function ResourceItemsList(_ref) {
951
952
  ResourceItemsList.propTypes = propTypes$b;
952
953
  ResourceItemsList.defaultProps = defaultProps$b;
953
954
 
955
+ var _excluded = ["id", "component"];
954
956
  var propTypes$a = {
955
- resource: PropTypes.resource.isRequired
957
+ resource: PropTypes.resource.isRequired,
958
+ defaultActions: PropTypes$1.arrayOf(PropTypes$1.object)
959
+ };
960
+ var defaultProps$a = {
961
+ defaultActions: ['create']
956
962
  };
957
- var defaultProps$a = {};
958
963
 
959
964
  var ResourceIndexPage = function ResourceIndexPage(_ref) {
960
- var resource = _ref.resource;
965
+ var resource = _ref.resource,
966
+ defaultActions = _ref.defaultActions;
961
967
  var name = resource.name,
962
968
  _resource$settings = resource.settings,
963
- settings = _resource$settings === void 0 ? {} : _resource$settings;
969
+ settings = _resource$settings === void 0 ? {} : _resource$settings,
970
+ _resource$index = resource.index,
971
+ index = _resource$index === void 0 ? {} : _resource$index;
964
972
 
965
973
  var _ref2 = settings || {},
966
974
  _ref2$canCreate = _ref2.canCreate,
@@ -968,6 +976,24 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
968
976
  _ref2$indexIsPaginate = _ref2.indexIsPaginated,
969
977
  paginated = _ref2$indexIsPaginate === void 0 ? false : _ref2$indexIsPaginate;
970
978
 
979
+ var _ref3 = index || {},
980
+ _ref3$actions = _ref3.actions,
981
+ actions = _ref3$actions === void 0 ? null : _ref3$actions;
982
+
983
+ var finalActions = useMemo(function () {
984
+ return (actions || defaultActions.filter(function (it) {
985
+ return it !== 'create' || canCreate;
986
+ })).map(function (it) {
987
+ return it === 'create' ? {
988
+ id: 'create',
989
+ component: ResourceCreateButtom,
990
+ size: 'lg',
991
+ theme: 'primary'
992
+ } : it;
993
+ });
994
+ }, [canCreate, actions]);
995
+ var componentsManager = useComponentsManager();
996
+
971
997
  var _useLocation = useLocation(),
972
998
  search = _useLocation.search;
973
999
 
@@ -979,11 +1005,11 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
979
1005
  return query;
980
1006
  }, [query]); // TODO: omit routes
981
1007
 
982
- var _ref3 = query || {},
983
- _ref3$created = _ref3.created,
984
- created = _ref3$created === void 0 ? false : _ref3$created,
985
- _ref3$deleted = _ref3.deleted,
986
- deleted = _ref3$deleted === void 0 ? false : _ref3$deleted;
1008
+ var _ref4 = query || {},
1009
+ _ref4$created = _ref4.created,
1010
+ created = _ref4$created === void 0 ? false : _ref4$created,
1011
+ _ref4$deleted = _ref4.deleted,
1012
+ deleted = _ref4$deleted === void 0 ? false : _ref4$deleted;
987
1013
 
988
1014
  var resourceRoute = useResourceUrlGenerator(resource);
989
1015
  var url = resourceRoute('index');
@@ -1009,11 +1035,23 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
1009
1035
  resource: resource
1010
1036
  }, /*#__PURE__*/React.createElement(MainLayout, null, /*#__PURE__*/React.createElement(PageHeader, {
1011
1037
  title: name,
1012
- actions: canCreate ? /*#__PURE__*/React.createElement(ResourceCreateButtom, {
1013
- resource: resource,
1014
- size: "lg",
1015
- theme: "primary"
1016
- }) : null
1038
+ actions: finalActions.length > 0 ? /*#__PURE__*/React.createElement("div", {
1039
+ className: "d-flex align-items-center"
1040
+ }, finalActions.map(function (_ref5) {
1041
+ var id = _ref5.id,
1042
+ _ref5$component = _ref5.component,
1043
+ component = _ref5$component === void 0 ? Button : _ref5$component,
1044
+ actionProps = _objectWithoutProperties(_ref5, _excluded);
1045
+
1046
+ var ActionComponent = isString(component) ? componentsManager.getComponent(component) : component;
1047
+ return /*#__PURE__*/React.createElement(ActionComponent, Object.assign({
1048
+ key: "action-".concat(id)
1049
+ }, actionProps, ActionComponent !== Button ? {
1050
+ resource: resource,
1051
+ query: query,
1052
+ onQueryChange: onQueryChange
1053
+ } : {}));
1054
+ })) : null
1017
1055
  }), /*#__PURE__*/React.createElement("div", {
1018
1056
  className: classNames(['container-sm py-4'])
1019
1057
  }, created ? /*#__PURE__*/React.createElement(Alert, {
package/lib/index.js CHANGED
@@ -31,6 +31,7 @@ var Navbar = require('@panneau/element-navbar');
31
31
  var Menu = require('@panneau/element-menu');
32
32
  var Label = require('@panneau/element-label');
33
33
  var Alert = require('@panneau/element-alert');
34
+ var isString = require('lodash/isString');
34
35
  var Dropdown = require('@panneau/element-dropdown');
35
36
  var Pagination = require('@panneau/element-pagination');
36
37
  var freeSolidSvgIcons = require('@fortawesome/free-solid-svg-icons');
@@ -57,11 +58,12 @@ var Navbar__default = /*#__PURE__*/_interopDefaultLegacy(Navbar);
57
58
  var Menu__default = /*#__PURE__*/_interopDefaultLegacy(Menu);
58
59
  var Label__default = /*#__PURE__*/_interopDefaultLegacy(Label);
59
60
  var Alert__default = /*#__PURE__*/_interopDefaultLegacy(Alert);
61
+ var isString__default = /*#__PURE__*/_interopDefaultLegacy(isString);
60
62
  var Dropdown__default = /*#__PURE__*/_interopDefaultLegacy(Dropdown);
61
63
  var Pagination__default = /*#__PURE__*/_interopDefaultLegacy(Pagination);
62
64
  var FormGroup__default = /*#__PURE__*/_interopDefaultLegacy(FormGroup);
63
65
 
64
- var _excluded$3 = ["resource", "action", "previous", "status", "value", "onSubmit", "errors", "generalError", "className"];
66
+ var _excluded$4 = ["resource", "action", "previous", "status", "value", "onSubmit", "errors", "generalError", "className"];
65
67
  var propTypes$n = {
66
68
  resource: core.PropTypes.resource.isRequired,
67
69
  action: PropTypes__default["default"].string,
@@ -97,7 +99,7 @@ var DeleteForm = function DeleteForm(_ref) {
97
99
  _ref.errors;
98
100
  var generalError = _ref.generalError,
99
101
  className = _ref.className,
100
- props = _objectWithoutProperties__default["default"](_ref, _excluded$3);
102
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$4);
101
103
 
102
104
  return /*#__PURE__*/React__default["default"].createElement(Form__default["default"], Object.assign({
103
105
  className: classNames__default["default"](['form', _defineProperty__default["default"]({
@@ -154,7 +156,7 @@ var DeleteForm = function DeleteForm(_ref) {
154
156
  DeleteForm.propTypes = propTypes$n;
155
157
  DeleteForm.defaultProps = defaultProps$n;
156
158
 
157
- var _excluded$2 = ["component", "resource", "onSuccess", "item", "type", "isDelete"];
159
+ var _excluded$3 = ["component", "resource", "onSuccess", "item", "type", "isDelete"];
158
160
  var propTypes$m = {
159
161
  component: PropTypes__default["default"].string,
160
162
  resource: core.PropTypes.resource.isRequired,
@@ -179,7 +181,7 @@ var ResourceForm = function ResourceForm(_ref) {
179
181
  item = _ref.item,
180
182
  type = _ref.type,
181
183
  isDelete = _ref.isDelete,
182
- props = _objectWithoutProperties__default["default"](_ref, _excluded$2);
184
+ props = _objectWithoutProperties__default["default"](_ref, _excluded$3);
183
185
 
184
186
  var locales = contexts.useLocales();
185
187
  var FormComponents = contexts.useFormsComponents();
@@ -790,7 +792,7 @@ var ResourceCreateButtom = function ResourceCreateButtom(_ref) {
790
792
  ResourceCreateButtom.propTypes = propTypes$d;
791
793
  ResourceCreateButtom.defaultProps = defaultProps$d;
792
794
 
793
- var _excluded$1 = ["component", "name", "groupLabel"];
795
+ var _excluded$2 = ["component", "name", "groupLabel"];
794
796
  var propTypes$c = {
795
797
  filters: PropTypes__default["default"].arrayOf(PropTypes__default["default"].shape({
796
798
  id: PropTypes__default["default"].string.isRequired,
@@ -850,7 +852,7 @@ var ResourceFilters = function ResourceFilters(_ref) {
850
852
  var component = _ref3.component,
851
853
  name = _ref3.name,
852
854
  groupLabel = _ref3.groupLabel,
853
- filterProps = _objectWithoutProperties__default["default"](_ref3, _excluded$1);
855
+ filterProps = _objectWithoutProperties__default["default"](_ref3, _excluded$2);
854
856
 
855
857
  var FilterComponent = utils.getComponentFromName(component, FilterComponents, null);
856
858
  var filterValue = value !== null && value[name] ? value[name] : null;
@@ -878,7 +880,7 @@ var ResourceFilters = function ResourceFilters(_ref) {
878
880
  ResourceFilters.propTypes = propTypes$c;
879
881
  ResourceFilters.defaultProps = defaultProps$c;
880
882
 
881
- var _excluded = ["component", "showPagination", "filters"],
883
+ var _excluded$1 = ["component", "showPagination", "filters"],
882
884
  _excluded2 = ["page"];
883
885
  var propTypes$b = {
884
886
  resource: core.PropTypes.resource.isRequired,
@@ -918,7 +920,7 @@ var ResourceItemsList = function ResourceItemsList(_ref) {
918
920
  showPagination = _resource$index$showP === void 0 ? true : _resource$index$showP,
919
921
  _resource$index$filte = _resource$index.filters,
920
922
  filters = _resource$index$filte === void 0 ? null : _resource$index$filte,
921
- listProps = _objectWithoutProperties__default["default"](_resource$index, _excluded);
923
+ listProps = _objectWithoutProperties__default["default"](_resource$index, _excluded$1);
922
924
 
923
925
  var _usePanneauColorSchem = contexts.usePanneauColorScheme(),
924
926
  _usePanneauColorSchem2 = _usePanneauColorSchem.background,
@@ -979,16 +981,23 @@ var ResourceItemsList = function ResourceItemsList(_ref) {
979
981
  ResourceItemsList.propTypes = propTypes$b;
980
982
  ResourceItemsList.defaultProps = defaultProps$b;
981
983
 
984
+ var _excluded = ["id", "component"];
982
985
  var propTypes$a = {
983
- resource: core.PropTypes.resource.isRequired
986
+ resource: core.PropTypes.resource.isRequired,
987
+ defaultActions: PropTypes__default["default"].arrayOf(PropTypes__default["default"].object)
988
+ };
989
+ var defaultProps$a = {
990
+ defaultActions: ['create']
984
991
  };
985
- var defaultProps$a = {};
986
992
 
987
993
  var ResourceIndexPage = function ResourceIndexPage(_ref) {
988
- var resource = _ref.resource;
994
+ var resource = _ref.resource,
995
+ defaultActions = _ref.defaultActions;
989
996
  var name = resource.name,
990
997
  _resource$settings = resource.settings,
991
- settings = _resource$settings === void 0 ? {} : _resource$settings;
998
+ settings = _resource$settings === void 0 ? {} : _resource$settings,
999
+ _resource$index = resource.index,
1000
+ index = _resource$index === void 0 ? {} : _resource$index;
992
1001
 
993
1002
  var _ref2 = settings || {},
994
1003
  _ref2$canCreate = _ref2.canCreate,
@@ -996,6 +1005,24 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
996
1005
  _ref2$indexIsPaginate = _ref2.indexIsPaginated,
997
1006
  paginated = _ref2$indexIsPaginate === void 0 ? false : _ref2$indexIsPaginate;
998
1007
 
1008
+ var _ref3 = index || {},
1009
+ _ref3$actions = _ref3.actions,
1010
+ actions = _ref3$actions === void 0 ? null : _ref3$actions;
1011
+
1012
+ var finalActions = React.useMemo(function () {
1013
+ return (actions || defaultActions.filter(function (it) {
1014
+ return it !== 'create' || canCreate;
1015
+ })).map(function (it) {
1016
+ return it === 'create' ? {
1017
+ id: 'create',
1018
+ component: ResourceCreateButtom,
1019
+ size: 'lg',
1020
+ theme: 'primary'
1021
+ } : it;
1022
+ });
1023
+ }, [canCreate, actions]);
1024
+ var componentsManager = contexts.useComponentsManager();
1025
+
999
1026
  var _useLocation = reactRouter.useLocation(),
1000
1027
  search = _useLocation.search;
1001
1028
 
@@ -1007,11 +1034,11 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
1007
1034
  return query;
1008
1035
  }, [query]); // TODO: omit routes
1009
1036
 
1010
- var _ref3 = query || {},
1011
- _ref3$created = _ref3.created,
1012
- created = _ref3$created === void 0 ? false : _ref3$created,
1013
- _ref3$deleted = _ref3.deleted,
1014
- deleted = _ref3$deleted === void 0 ? false : _ref3$deleted;
1037
+ var _ref4 = query || {},
1038
+ _ref4$created = _ref4.created,
1039
+ created = _ref4$created === void 0 ? false : _ref4$created,
1040
+ _ref4$deleted = _ref4.deleted,
1041
+ deleted = _ref4$deleted === void 0 ? false : _ref4$deleted;
1015
1042
 
1016
1043
  var resourceRoute = hooks.useResourceUrlGenerator(resource);
1017
1044
  var url = resourceRoute('index');
@@ -1037,11 +1064,23 @@ var ResourceIndexPage = function ResourceIndexPage(_ref) {
1037
1064
  resource: resource
1038
1065
  }, /*#__PURE__*/React__default["default"].createElement(MainLayout, null, /*#__PURE__*/React__default["default"].createElement(PageHeader, {
1039
1066
  title: name,
1040
- actions: canCreate ? /*#__PURE__*/React__default["default"].createElement(ResourceCreateButtom, {
1041
- resource: resource,
1042
- size: "lg",
1043
- theme: "primary"
1044
- }) : null
1067
+ actions: finalActions.length > 0 ? /*#__PURE__*/React__default["default"].createElement("div", {
1068
+ className: "d-flex align-items-center"
1069
+ }, finalActions.map(function (_ref5) {
1070
+ var id = _ref5.id,
1071
+ _ref5$component = _ref5.component,
1072
+ component = _ref5$component === void 0 ? Button__default["default"] : _ref5$component,
1073
+ actionProps = _objectWithoutProperties__default["default"](_ref5, _excluded);
1074
+
1075
+ var ActionComponent = isString__default["default"](component) ? componentsManager.getComponent(component) : component;
1076
+ return /*#__PURE__*/React__default["default"].createElement(ActionComponent, Object.assign({
1077
+ key: "action-".concat(id)
1078
+ }, actionProps, ActionComponent !== Button__default["default"] ? {
1079
+ resource: resource,
1080
+ query: query,
1081
+ onQueryChange: onQueryChange
1082
+ } : {}));
1083
+ })) : null
1045
1084
  }), /*#__PURE__*/React__default["default"].createElement("div", {
1046
1085
  className: classNames__default["default"](['container-sm py-4'])
1047
1086
  }, created ? /*#__PURE__*/React__default["default"].createElement(Alert__default["default"], {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@panneau/app",
3
- "version": "1.0.0-alpha.225",
3
+ "version": "1.0.0-alpha.226",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "javascript"
@@ -92,5 +92,5 @@
92
92
  "publishConfig": {
93
93
  "access": "public"
94
94
  },
95
- "gitHead": "030c9df287c349757e0943051f3c54f11729f66f"
95
+ "gitHead": "0e5e8edc95b987038bdccddbc62db4a6d2b1c185"
96
96
  }