orc-shared 1.1.0-dev.9 → 1.2.0-dev.10

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 (309) hide show
  1. package/dist/actions/applications.js +1 -1
  2. package/dist/actions/authentication.js +1 -1
  3. package/dist/actions/countries.js +1 -1
  4. package/dist/actions/locale.js +1 -1
  5. package/dist/actions/makeApiAction.js +73 -3
  6. package/dist/actions/makeOrcApiAction.js +2 -2
  7. package/dist/actions/metadata.js +295 -31
  8. package/dist/actions/modules.js +63 -1
  9. package/dist/actions/navigation.js +3 -3
  10. package/dist/actions/requestState.js +78 -0
  11. package/dist/actions/requestsApi.js +58 -7
  12. package/dist/actions/scopes.js +59 -22
  13. package/dist/actions/timezones.js +1 -1
  14. package/dist/actions/toasts.js +1 -1
  15. package/dist/actions/versionInfo.js +1 -1
  16. package/dist/actions/view.js +1 -1
  17. package/dist/buildStore.js +7 -4
  18. package/dist/components/AppFrame/About.js +6 -5
  19. package/dist/components/AppFrame/ApplicationSelector/ApplicationDialog.js +115 -62
  20. package/dist/components/AppFrame/ApplicationSelector/index.js +45 -47
  21. package/dist/components/AppFrame/MenuItem.js +6 -15
  22. package/dist/components/AppFrame/Preferences.js +3 -3
  23. package/dist/components/AppFrame/Sidebar.js +20 -9
  24. package/dist/components/AppFrame/Topbar.js +1 -1
  25. package/dist/components/ApplicationModuleLoader.js +143 -0
  26. package/dist/components/Authenticate.js +13 -13
  27. package/dist/components/CategoryList.js +1 -1
  28. package/dist/components/Checkbox.js +1 -1
  29. package/dist/components/DropMenu/Menu.js +1 -1
  30. package/dist/components/DropMenu/index.js +1 -1
  31. package/dist/components/Form/FieldList.js +3 -3
  32. package/dist/components/Form/Form.js +1 -1
  33. package/dist/components/Form/Inputs/Button.js +1 -1
  34. package/dist/components/Form/Inputs/FieldButtons.js +1 -1
  35. package/dist/components/Form/Inputs/Number.js +1 -1
  36. package/dist/components/Form/Inputs/ReadOnly.js +1 -1
  37. package/dist/components/Form/Inputs/SmallButton.js +1 -1
  38. package/dist/components/Form/Inputs/Text.js +1 -1
  39. package/dist/components/Form/Inputs/Time.js +1 -1
  40. package/dist/components/Form/Inputs/Toggles.js +1 -1
  41. package/dist/components/Form/Inputs/Translation.js +3 -3
  42. package/dist/components/List/HeadCell.js +1 -1
  43. package/dist/components/List/List.js +1 -1
  44. package/dist/components/List/Row.js +1 -1
  45. package/dist/components/List/enhanceColumnDefs.js +2 -2
  46. package/dist/components/MaterialUI/DataDisplay/List.js +1 -1
  47. package/dist/components/MaterialUI/DataDisplay/Notification.js +2 -2
  48. package/dist/components/MaterialUI/DataDisplay/NotificationProps.js +1 -1
  49. package/dist/components/MaterialUI/DataDisplay/PredefinedElements/Translations.js +3 -3
  50. package/dist/components/MaterialUI/DataDisplay/SelectionList.js +19 -6
  51. package/dist/components/MaterialUI/DataDisplay/Table.js +28 -10
  52. package/dist/components/MaterialUI/DataDisplay/TableProps.js +5 -2
  53. package/dist/components/MaterialUI/DataDisplay/TransferList.js +5 -2
  54. package/dist/components/MaterialUI/DataDisplay/chipProps.js +1 -1
  55. package/dist/components/MaterialUI/DataDisplay/collapsableListProps.js +1 -1
  56. package/dist/components/MaterialUI/DataDisplay/dividerProps.js +1 -1
  57. package/dist/components/MaterialUI/DataDisplay/index.js +1 -1
  58. package/dist/components/MaterialUI/DataDisplay/modalProps.js +1 -1
  59. package/dist/components/MaterialUI/DataDisplay/useTableSelection.js +3 -3
  60. package/dist/components/MaterialUI/Feedback/useNotification.js +1 -1
  61. package/dist/components/MaterialUI/Inputs/Autocomplete.js +2 -2
  62. package/dist/components/MaterialUI/Inputs/AutocompleteProps.js +1 -1
  63. package/dist/components/MaterialUI/Inputs/CheckboxGroupProps.js +1 -1
  64. package/dist/components/MaterialUI/Inputs/CheckboxProps.js +1 -1
  65. package/dist/components/MaterialUI/Inputs/DatePicker.js +11 -0
  66. package/dist/components/MaterialUI/Inputs/InputBase.js +3 -2
  67. package/dist/components/MaterialUI/Inputs/InputBaseProps.js +1 -1
  68. package/dist/components/MaterialUI/Inputs/PredefinedElements/SearchControl.js +1 -1
  69. package/dist/components/MaterialUI/Inputs/RadioProps.js +1 -1
  70. package/dist/components/MaterialUI/Inputs/Select.js +2 -2
  71. package/dist/components/MaterialUI/Inputs/SelectProps.js +1 -1
  72. package/dist/components/MaterialUI/Inputs/Switch.js +3 -3
  73. package/dist/components/MaterialUI/Inputs/SwitchProps.js +1 -1
  74. package/dist/components/MaterialUI/Inputs/TimePicker.js +19 -8
  75. package/dist/components/MaterialUI/Inputs/createInput.js +3 -3
  76. package/dist/components/MaterialUI/Inputs/index.js +1 -1
  77. package/dist/components/MaterialUI/Inputs/standaloneRadioProps.js +1 -1
  78. package/dist/components/MaterialUI/Navigation/DropDownMenuProps.js +1 -1
  79. package/dist/components/MaterialUI/Navigation/ExternalLink.js +113 -0
  80. package/dist/components/MaterialUI/Navigation/TabBar.js +38 -33
  81. package/dist/components/MaterialUI/ScopeSelector/ScopeSelector.js +6 -4
  82. package/dist/components/MaterialUI/ScopeSelector/ScopeTreeView.js +8 -4
  83. package/dist/components/MaterialUI/ScopeSelector/TreeItem.js +9 -6
  84. package/dist/components/MaterialUI/Surfaces/ExpansionPanel.js +11 -2
  85. package/dist/components/MaterialUI/Surfaces/SectionExpansionPanel.js +10 -2
  86. package/dist/components/MaterialUI/Surfaces/expansionPanelProps.js +5 -2
  87. package/dist/components/MaterialUI/Surfaces/paperProps.js +1 -1
  88. package/dist/components/MaterialUI/muiThemes.js +26 -6
  89. package/dist/components/MaterialUI/textProps.js +1 -1
  90. package/dist/components/Modules.js +132 -25
  91. package/dist/components/MultiSelector.js +1 -1
  92. package/dist/components/Navigation/Bar.js +3 -3
  93. package/dist/components/Navigation/Tab.js +1 -1
  94. package/dist/components/Navigation/useNavigationState.js +30 -4
  95. package/dist/components/Placeholder.js +1 -1
  96. package/dist/components/Routing/FullPage.js +5 -1
  97. package/dist/components/Routing/Page.js +5 -3
  98. package/dist/components/Routing/Segment.js +4 -3
  99. package/dist/components/Routing/SegmentPage.js +8 -6
  100. package/dist/components/Routing/withWaypointing.js +14 -4
  101. package/dist/components/Scope/ScopeNode.js +1 -1
  102. package/dist/components/Scope/Selector.js +1 -1
  103. package/dist/components/Scope/index.js +11 -3
  104. package/dist/components/Scope/useScopeConfirmationModalState.js +7 -16
  105. package/dist/components/Scope/useScopeData.js +4 -13
  106. package/dist/components/Scope/useScopeSelect.js +1 -1
  107. package/dist/components/Selector.js +1 -1
  108. package/dist/components/Sidepanel.js +1 -2
  109. package/dist/components/Spritesheet.js +1 -1
  110. package/dist/components/Switch.js +1 -1
  111. package/dist/components/Text.js +1 -1
  112. package/dist/components/ToastList.js +1 -1
  113. package/dist/components/Toolbar.js +1 -1
  114. package/dist/components/Treeview/Label.js +1 -1
  115. package/dist/components/Treeview/Leaf.js +1 -1
  116. package/dist/components/Treeview/Node.js +3 -3
  117. package/dist/components/Treeview/index.js +2 -2
  118. package/dist/components/Treeview/settings.js +1 -1
  119. package/dist/constants.js +44 -2
  120. package/dist/content/icons/html-templates.svg +3 -0
  121. package/dist/content/icons/lock.svg +3 -0
  122. package/dist/content/icons/orckestra-icon.svg +5 -0
  123. package/dist/content/icons/unlock.svg +3 -0
  124. package/dist/content/iconsSheet.svg +14 -0
  125. package/dist/content/orckestra-logo-white.png +0 -0
  126. package/dist/getThemeOverrides.js +2 -2
  127. package/dist/hocs/withInfiniteScroll.js +1 -1
  128. package/dist/hocs/withUpdateHandler.js +2 -2
  129. package/dist/hooks/useDispatchWithModulesData.js +1 -1
  130. package/dist/hooks/useEditState.js +3 -3
  131. package/dist/hooks/useEntityLoader.js +182 -0
  132. package/dist/hooks/useFullEntityEditState.js +3 -3
  133. package/dist/hooks/useInfiniteScroll.js +104 -0
  134. package/dist/hooks/useLabelMessage.js +3 -3
  135. package/dist/hooks/useLoader.js +1 -0
  136. package/dist/hooks/useMultipleFieldEditState.js +2 -2
  137. package/dist/hooks/useNavigationHandler.js +1 -1
  138. package/dist/hooks/useNotificationRequestState.js +159 -0
  139. package/dist/hooks/useRequestState.js +146 -0
  140. package/dist/hooks/useSelectorAndUnwrap.js +1 -1
  141. package/dist/reducers/metadata.js +52 -26
  142. package/dist/reducers/modules.js +39 -1
  143. package/dist/reducers/requestStates.js +181 -0
  144. package/dist/reducers/scopes.js +27 -0
  145. package/dist/reducers/settings.js +31 -2
  146. package/dist/schemas/countries.js +1 -1
  147. package/dist/schemas/definitions.js +1 -1
  148. package/dist/schemas/metadata.js +1 -1
  149. package/dist/schemas/productDefinitions.js +1 -1
  150. package/dist/schemas/timezones.js +1 -1
  151. package/dist/selectors/applications.js +1 -1
  152. package/dist/selectors/authentication.js +57 -19
  153. package/dist/selectors/countries.js +1 -1
  154. package/dist/selectors/locale.js +1 -1
  155. package/dist/selectors/metadata.js +104 -14
  156. package/dist/selectors/modules.js +15 -1
  157. package/dist/selectors/navigation.js +1 -1
  158. package/dist/selectors/requestStates.js +82 -0
  159. package/dist/selectors/requests.js +1 -1
  160. package/dist/selectors/scope.js +7 -1
  161. package/dist/selectors/settings.js +13 -1
  162. package/dist/selectors/versionInfo.js +1 -1
  163. package/dist/selectors/view.js +1 -1
  164. package/dist/sharedMessages.js +44 -0
  165. package/dist/spawnerMiddleware.js +1 -1
  166. package/dist/utils/displayModeHelper.js +1 -1
  167. package/dist/utils/flatten.js +2 -2
  168. package/dist/utils/localizationHelper.js +1 -1
  169. package/dist/utils/mapHelper.js +1 -1
  170. package/dist/utils/modelValidationHelper.js +2 -2
  171. package/dist/utils/parseHelper.js +1 -1
  172. package/dist/utils/propertyHelper.js +2 -2
  173. package/dist/utils/propertyValidator.js +1 -1
  174. package/dist/utils/setTranslationWithFallback.js +3 -2
  175. package/dist/utils/testUtils.js +6 -2
  176. package/dist/utils/timezoneHelper.js +111 -0
  177. package/dist/utils/unwrapImmutable.js +1 -1
  178. package/dist/utils/urlHelper.js +11 -1
  179. package/package.json +6 -9
  180. package/src/actions/makeApiAction.js +24 -1
  181. package/src/actions/makeApiAction.test.js +76 -3
  182. package/src/actions/metadata.js +130 -0
  183. package/src/actions/metadata.test.js +337 -5
  184. package/src/actions/modules.js +30 -0
  185. package/src/actions/modules.test.js +50 -1
  186. package/src/actions/requestState.js +8 -0
  187. package/src/actions/requestState.test.js +14 -0
  188. package/src/actions/requestsApi.js +30 -0
  189. package/src/actions/scopes.js +33 -7
  190. package/src/actions/scopes.test.js +84 -14
  191. package/src/buildStore.js +2 -0
  192. package/src/components/AppFrame/About.js +2 -2
  193. package/src/components/AppFrame/AppFrame.test.js +15 -16
  194. package/src/components/AppFrame/ApplicationSelector/ApplicationDialog.js +105 -82
  195. package/src/components/AppFrame/ApplicationSelector/ApplicationDialog.test.js +60 -23
  196. package/src/components/AppFrame/ApplicationSelector/ApplicationSelector.test.js +22 -89
  197. package/src/components/AppFrame/ApplicationSelector/index.js +34 -15
  198. package/src/components/AppFrame/MenuItem.js +3 -5
  199. package/src/components/AppFrame/MenuItem.test.js +2 -24
  200. package/src/components/AppFrame/Sidebar.js +11 -12
  201. package/src/components/AppFrame/Sidebar.test.js +18 -0
  202. package/src/components/AppFrame/Topbar.test.js +2 -4
  203. package/src/components/ApplicationModuleLoader.js +52 -0
  204. package/src/components/ApplicationModuleLoader.test.js +149 -0
  205. package/src/components/Authenticate.js +5 -4
  206. package/src/components/Authenticate.test.js +23 -4
  207. package/src/components/MaterialUI/DataDisplay/SelectionList.js +14 -6
  208. package/src/components/MaterialUI/DataDisplay/SelectionList.test.js +21 -11
  209. package/src/components/MaterialUI/DataDisplay/Table.js +29 -5
  210. package/src/components/MaterialUI/DataDisplay/Table.test.js +23 -0
  211. package/src/components/MaterialUI/DataDisplay/TableProps.js +2 -0
  212. package/src/components/MaterialUI/DataDisplay/TableProps.test.js +2 -0
  213. package/src/components/MaterialUI/DataDisplay/TransferList.js +3 -0
  214. package/src/components/MaterialUI/Inputs/DatePicker.js +11 -0
  215. package/src/components/MaterialUI/Inputs/InputBase.js +3 -1
  216. package/src/components/MaterialUI/Inputs/InputBase.test.js +38 -0
  217. package/src/components/MaterialUI/Inputs/TimePicker.js +9 -3
  218. package/src/components/MaterialUI/Inputs/TimePicker.test.js +263 -118
  219. package/src/components/MaterialUI/Navigation/ExternalLink.js +25 -0
  220. package/src/components/MaterialUI/Navigation/ExternalLink.test.js +26 -0
  221. package/src/components/MaterialUI/Navigation/TabBar.js +82 -78
  222. package/src/components/MaterialUI/Navigation/TabBar.test.js +129 -3
  223. package/src/components/MaterialUI/ScopeSelector/ScopeSelector.js +4 -2
  224. package/src/components/MaterialUI/ScopeSelector/ScopeSelector.test.js +29 -0
  225. package/src/components/MaterialUI/ScopeSelector/ScopeTreeView.js +4 -1
  226. package/src/components/MaterialUI/ScopeSelector/ScopeTreeView.test.js +52 -0
  227. package/src/components/MaterialUI/ScopeSelector/TreeItem.js +9 -6
  228. package/src/components/MaterialUI/ScopeSelector/TreeItem.test.js +63 -2
  229. package/src/components/MaterialUI/Surfaces/ExpansionPanel.js +14 -1
  230. package/src/components/MaterialUI/Surfaces/ExpansionPanel.test.js +16 -0
  231. package/src/components/MaterialUI/Surfaces/SectionExpansionPanel.js +11 -2
  232. package/src/components/MaterialUI/Surfaces/SectionExpansionPanel.test.js +36 -0
  233. package/src/components/MaterialUI/Surfaces/expansionPanelProps.js +2 -0
  234. package/src/components/MaterialUI/Surfaces/expansionPanelProps.test.js +2 -2
  235. package/src/components/MaterialUI/muiThemes.js +23 -3
  236. package/src/components/Modules.js +108 -13
  237. package/src/components/Modules.test.js +431 -12
  238. package/src/components/Navigation/Navigation.test.js +2 -0
  239. package/src/components/Navigation/useNavigationState.js +21 -1
  240. package/src/components/Navigation/useNavigationState.test.js +10 -0
  241. package/src/components/Provision.test.js +34 -0
  242. package/src/components/Routing/FullPage.js +4 -2
  243. package/src/components/Routing/FullPage.test.js +75 -0
  244. package/src/components/Routing/Page.js +2 -2
  245. package/src/components/Routing/Page.test.js +20 -0
  246. package/src/components/Routing/Segment.js +5 -2
  247. package/src/components/Routing/Segment.test.js +22 -1
  248. package/src/components/Routing/SegmentPage.js +12 -4
  249. package/src/components/Routing/SubPage.test.js +1 -1
  250. package/src/components/Routing/withWaypointing.js +19 -17
  251. package/src/components/Routing/withWaypointing.test.js +81 -3
  252. package/src/components/Scope/Scope.test.js +117 -0
  253. package/src/components/Scope/index.js +6 -10
  254. package/src/components/Scope/useScopeConfirmationModalState.js +5 -16
  255. package/src/components/Scope/useScopeConfirmationModalState.test.js +39 -13
  256. package/src/components/Scope/useScopeData.js +0 -3
  257. package/src/components/Scope/useScopeData.test.js +0 -27
  258. package/src/components/Sidepanel.js +0 -1
  259. package/src/components/Sidepanel.test.js +0 -3
  260. package/src/constants.js +33 -0
  261. package/src/content/icons/html-templates.svg +3 -0
  262. package/src/content/icons/lock.svg +3 -0
  263. package/src/content/icons/orckestra-icon.svg +5 -0
  264. package/src/content/icons/unlock.svg +3 -0
  265. package/src/content/iconsSheet.svg +14 -0
  266. package/src/content/orckestra-logo-white.png +0 -0
  267. package/src/hocs/withScopeData.test.js +0 -31
  268. package/src/hooks/useEntityLoader.js +68 -0
  269. package/src/hooks/useEntityLoader.test.js +266 -0
  270. package/src/hooks/useInfiniteScroll.js +25 -0
  271. package/src/hooks/useInfiniteScroll.test.js +87 -0
  272. package/src/hooks/useLoader.js +1 -0
  273. package/src/hooks/useNotificationRequestState.js +78 -0
  274. package/src/hooks/useNotificationRequestState.test.js +264 -0
  275. package/src/hooks/useRequestState.js +57 -0
  276. package/src/hooks/useRequestState.test.js +217 -0
  277. package/src/reducers/metadata.js +76 -16
  278. package/src/reducers/metadata.test.js +458 -4
  279. package/src/reducers/modules.js +48 -2
  280. package/src/reducers/modules.test.js +117 -2
  281. package/src/reducers/requestStates.js +98 -0
  282. package/src/reducers/requestStates.test.js +399 -0
  283. package/src/reducers/scopes.js +30 -0
  284. package/src/reducers/scopes.test.js +45 -1
  285. package/src/reducers/settings.js +26 -2
  286. package/src/reducers/settings.test.js +74 -6
  287. package/src/selectors/authentication.js +53 -28
  288. package/src/selectors/authentication.test.js +600 -12
  289. package/src/selectors/locale.test.js +0 -2
  290. package/src/selectors/metadata.js +73 -13
  291. package/src/selectors/metadata.test.js +479 -8
  292. package/src/selectors/modules.js +7 -0
  293. package/src/selectors/modules.test.js +16 -1
  294. package/src/selectors/requestStates.js +12 -0
  295. package/src/selectors/requestStates.test.js +83 -0
  296. package/src/selectors/scope.js +2 -0
  297. package/src/selectors/scope.test.js +5 -0
  298. package/src/selectors/settings.js +6 -0
  299. package/src/sharedMessages.js +44 -0
  300. package/src/translations/en-US.json +12 -1
  301. package/src/translations/fr-CA.json +13 -2
  302. package/src/utils/modelValidationHelper.js +1 -1
  303. package/src/utils/setTranslationWithFallback.js +1 -1
  304. package/src/utils/setTranslationWithFallback.test.js +4 -14
  305. package/src/utils/testUtils.js +3 -1
  306. package/src/utils/timezoneHelper.js +140 -0
  307. package/src/utils/timezoneHelper.test.js +33 -0
  308. package/src/utils/urlHelper.js +6 -0
  309. package/src/translations/it-IT.json +0 -54
@@ -1,14 +1,22 @@
1
1
  import Immutable from "immutable";
2
2
  import reducer from "./settings";
3
3
  import { GET_MY_APPLICATION_SUCCESS, SET_MY_APPLICATION_SUCCESS } from "../actions/applications";
4
- import { GET_MY_SCOPE_SUCCESS } from "../actions/scopes";
4
+ import {
5
+ GET_APPLICATION_MODULES_SUCCESS,
6
+ GET_MY_SCOPE_SUCCESS,
7
+ GET_SCOPES_FAILURE,
8
+ GET_SCOPES_SUCCESS,
9
+ } from "../actions/scopes";
5
10
 
6
11
  describe("settings", () => {
7
- it("behaves as a reducer should", () =>
8
- expect(reducer, "to be a reducer with initial state", {
9
- defaultApp: 0,
10
- defaultScope: null,
11
- }));
12
+ const initialState = Immutable.fromJS({
13
+ defaultApp: 0,
14
+ defaultScope: null,
15
+ loadedModulesScope: [],
16
+ modules: [],
17
+ });
18
+
19
+ it("behaves as a reducer should", () => expect(reducer, "to be a reducer with initial state", initialState));
12
20
 
13
21
  it("stores results of getting your personal default application", () => {
14
22
  const oldState = Immutable.fromJS({
@@ -65,4 +73,64 @@ describe("settings", () => {
65
73
  defaultScope: "aScope",
66
74
  });
67
75
  });
76
+
77
+ it("stores modules for the application", () => {
78
+ const oldState = Immutable.fromJS({
79
+ modules: [],
80
+ });
81
+ const action = {
82
+ type: GET_APPLICATION_MODULES_SUCCESS,
83
+ payload: [{ name: "Customers" }, { name: "Orders" }, { name: "Administration" }],
84
+ };
85
+ const newState = reducer(oldState, action);
86
+ expect(newState, "not to be", oldState).and("to satisfy", {
87
+ modules: ["Customer", "Order", "Administration"],
88
+ });
89
+ });
90
+
91
+ it("stores module as loaded when it is a success", () => {
92
+ const oldState = Immutable.fromJS({
93
+ loadedModulesScope: [],
94
+ });
95
+ const action = {
96
+ type: GET_SCOPES_SUCCESS,
97
+ meta: { module: "Order" },
98
+ };
99
+ const newState = reducer(oldState, action);
100
+ expect(newState, "not to be", oldState).and("to satisfy", {
101
+ loadedModulesScope: ["Order"],
102
+ });
103
+ });
104
+
105
+ it("stores module as loaded when it is a failure with status 500", () => {
106
+ const oldState = Immutable.fromJS({
107
+ loadedModulesScope: [],
108
+ });
109
+ const action = {
110
+ type: GET_SCOPES_FAILURE,
111
+ payload: {
112
+ status: 500,
113
+ },
114
+ meta: { module: "Order" },
115
+ };
116
+ const newState = reducer(oldState, action);
117
+ expect(newState, "not to be", oldState).and("to satisfy", {
118
+ loadedModulesScope: ["Order"],
119
+ });
120
+ });
121
+
122
+ it("does not store module as loaded when it is a failure with other errors", () => {
123
+ const oldState = Immutable.fromJS({
124
+ loadedModulesScope: [],
125
+ });
126
+ const action = {
127
+ type: GET_SCOPES_FAILURE,
128
+ payload: {
129
+ status: 404,
130
+ },
131
+ meta: { module: "Order" },
132
+ };
133
+ const newState = reducer(oldState, action);
134
+ expect(newState, "to be", oldState);
135
+ });
68
136
  });
@@ -1,6 +1,7 @@
1
1
  import { createSelector } from "reselect";
2
2
  import { platformRoles } from "./../constants";
3
3
  import { getCurrentScope } from "./navigation";
4
+ import { getScopesSelector } from "./scope";
4
5
 
5
6
  const authData = state => state.get("authentication");
6
7
 
@@ -11,36 +12,60 @@ export const selectRolesClaims = createSelector(authData, data => data.get("role
11
12
  export const selectGroupRolesClaims = roleGroup =>
12
13
  createSelector(selectRolesClaims, rolesClaims => rolesClaims.get(roleGroup) || null);
13
14
 
14
- export const hasEditorPermissions = roleGroup =>
15
- createSelector(selectGroupRolesClaims(roleGroup), getCurrentScope, (appRolesClaims, currentScope) => {
16
- if (appRolesClaims != null) {
17
- return (
18
- !!appRolesClaims.getIn(["*", platformRoles.Editor]) ||
19
- !!appRolesClaims.getIn([currentScope, platformRoles.Editor])
20
- );
15
+ const hasRolePermissions = (appRolesClaims, scopeId, role, scopes) => {
16
+ if (appRolesClaims != null && scopeId != null) {
17
+ const allowed = !!appRolesClaims.getIn(["*", role]) || !!appRolesClaims.getIn([scopeId, role]);
18
+
19
+ if (!allowed) {
20
+ const parentScopeId = scopes.get(scopeId)?.toJS()?.parentScopeId ?? null;
21
+
22
+ return hasRolePermissions(appRolesClaims, parentScopeId, role, scopes);
21
23
  }
22
- return false;
23
- });
24
+
25
+ return allowed;
26
+ }
27
+
28
+ return false;
29
+ };
30
+
31
+ export const hasEditorPermissions = roleGroup =>
32
+ createSelector(
33
+ selectGroupRolesClaims(roleGroup),
34
+ getCurrentScope,
35
+ getScopesSelector,
36
+ (appRolesClaims, currentScope, scopes) =>
37
+ hasRolePermissions(appRolesClaims, currentScope, platformRoles.Editor, scopes),
38
+ );
39
+
40
+ export const hasEditorPermissionsForScope = (scope, roleGroup) =>
41
+ createSelector(selectGroupRolesClaims(roleGroup), getScopesSelector, (appRolesClaims, scopes) =>
42
+ hasRolePermissions(appRolesClaims, scope, platformRoles.Editor, scopes),
43
+ );
24
44
 
25
45
  export const hasAdministratorPermissions = roleGroup =>
26
- createSelector(selectGroupRolesClaims(roleGroup), getCurrentScope, (appRolesClaims, currentScope) => {
27
- if (appRolesClaims != null) {
28
- return (
29
- !!appRolesClaims.getIn(["*", platformRoles.Administrator]) ||
30
- !!appRolesClaims.getIn([currentScope, platformRoles.Administrator])
31
- );
32
- }
33
- return false;
34
- });
46
+ createSelector(
47
+ selectGroupRolesClaims(roleGroup),
48
+ getCurrentScope,
49
+ getScopesSelector,
50
+ (appRolesClaims, currentScope, scopes) =>
51
+ hasRolePermissions(appRolesClaims, currentScope, platformRoles.Administrator, scopes),
52
+ );
53
+
54
+ export const hasAdministratorPermissionsForScope = (scope, roleGroup) =>
55
+ createSelector(selectGroupRolesClaims(roleGroup), getScopesSelector, (appRolesClaims, scopes) =>
56
+ hasRolePermissions(appRolesClaims, scope, platformRoles.Administrator, scopes),
57
+ );
35
58
 
36
59
  export const hasReaderPermissions = roleGroup =>
37
- createSelector(selectGroupRolesClaims(roleGroup), getCurrentScope, (appRolesClaims, currentScope) => {
38
- if (appRolesClaims != null) {
39
- console.log("appRolesClaims", appRolesClaims);
40
- return (
41
- !!appRolesClaims.getIn(["*", platformRoles.Reader]) ||
42
- !!appRolesClaims.getIn([currentScope, platformRoles.Reader])
43
- );
44
- }
45
- return false;
46
- });
60
+ createSelector(
61
+ selectGroupRolesClaims(roleGroup),
62
+ getCurrentScope,
63
+ getScopesSelector,
64
+ (appRolesClaims, currentScope, scopes) =>
65
+ hasRolePermissions(appRolesClaims, currentScope, platformRoles.Reader, scopes),
66
+ );
67
+
68
+ export const hasReaderPermissionsForScope = (scope, roleGroup) =>
69
+ createSelector(selectGroupRolesClaims(roleGroup), getScopesSelector, (appRolesClaims, scopes) =>
70
+ hasRolePermissions(appRolesClaims, scope, platformRoles.Reader, scopes),
71
+ );