orc-shared 5.10.0-dev.2 → 5.10.0-dev.20

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 (168) hide show
  1. package/dist/actions/metadata.js +30 -11
  2. package/dist/actions/requestsApi.js +10 -1
  3. package/dist/components/AppFrame/About.js +136 -100
  4. package/dist/components/AppFrame/Anchor.js +45 -21
  5. package/dist/components/AppFrame/AppFrame.js +53 -31
  6. package/dist/components/AppFrame/Help.js +35 -15
  7. package/dist/components/AppFrame/MenuItem.js +148 -114
  8. package/dist/components/AppFrame/Preferences.js +136 -97
  9. package/dist/components/AppFrame/Sidebar.js +51 -28
  10. package/dist/components/AppFrame/Topbar.js +61 -36
  11. package/dist/components/ColumnWrapper.js +28 -5
  12. package/dist/components/DropMenu/Menu.js +79 -45
  13. package/dist/components/DropMenu/index.js +34 -29
  14. package/dist/components/Form/Combination.js +45 -16
  15. package/dist/components/Form/Field.js +57 -38
  16. package/dist/components/Form/FieldElements.js +0 -11
  17. package/dist/components/Form/Fieldset.js +47 -19
  18. package/dist/components/Form/Form.js +22 -9
  19. package/dist/components/Form/FormElement.js +40 -7
  20. package/dist/components/Form/Inputs/Button.js +63 -18
  21. package/dist/components/Form/Inputs/ReadOnly.js +50 -27
  22. package/dist/components/{AppFrame/ApplicationSelector/Header.js → Form/Inputs/Selector.js} +30 -31
  23. package/dist/components/Form/Inputs/Text.js +20 -37
  24. package/dist/components/Form/Inputs/Toggles.js +39 -40
  25. package/dist/components/Form/Inputs/index.js +2 -13
  26. package/dist/components/MaterialUI/DataDisplay/PredefinedElements/Placeholder.js +31 -11
  27. package/dist/components/MaterialUI/DataDisplay/PredefinedElements/SectionToolbar.js +89 -0
  28. package/dist/components/MaterialUI/DataDisplay/Table.js +109 -18
  29. package/dist/components/MaterialUI/DataDisplay/TableProps.js +5 -1
  30. package/dist/components/MaterialUI/DataDisplay/TableWithInMemoryPaging.js +198 -0
  31. package/dist/components/MaterialUI/DataDisplay/TooltippedElements/MultipleLinesText.js +4 -1
  32. package/dist/components/MaterialUI/Inputs/PredefinedElements/SearchControl.js +1 -0
  33. package/dist/components/MaterialUI/Inputs/Select.js +2 -0
  34. package/dist/components/MaterialUI/Inputs/SelectProps.js +2 -0
  35. package/dist/components/MaterialUI/Inputs/Switch.js +17 -1
  36. package/dist/components/MaterialUI/Inputs/SwitchProps.js +2 -0
  37. package/dist/components/MaterialUI/hocs/withDeferredTooltip.js +3 -1
  38. package/dist/components/MaterialUI/muiThemes.js +2 -1
  39. package/dist/constants.js +2 -1
  40. package/dist/content/iconsSheet.svg +740 -116
  41. package/dist/hocs/withScrollBox.js +27 -12
  42. package/dist/hooks/useInMemoryPaging.js +135 -0
  43. package/dist/hooks/useMultipleFieldEditState.js +12 -3
  44. package/dist/reducers/metadata.js +6 -0
  45. package/dist/schemas/metadata.js +9 -1
  46. package/dist/selectors/locale.js +1 -0
  47. package/dist/selectors/metadata.js +14 -11
  48. package/dist/sharedMessages.js +4 -0
  49. package/dist/utils/ListHelper.js +271 -0
  50. package/dist/utils/comparisonHelper.js +185 -0
  51. package/dist/utils/propertyBagHelper.js +3 -1
  52. package/package.json +1 -1
  53. package/src/actions/metadata.js +11 -0
  54. package/src/actions/metadata.test.js +27 -0
  55. package/src/actions/requestsApi.js +6 -0
  56. package/src/components/AppFrame/About.js +97 -117
  57. package/src/components/AppFrame/About.test.js +128 -90
  58. package/src/components/AppFrame/Anchor.js +34 -36
  59. package/src/components/AppFrame/Anchor.test.js +5 -68
  60. package/src/components/AppFrame/AppFrame.js +31 -40
  61. package/src/components/AppFrame/AppFrame.test.js +424 -445
  62. package/src/components/AppFrame/Help.js +23 -20
  63. package/src/components/AppFrame/Help.test.js +3 -3
  64. package/src/components/AppFrame/MenuItem.js +106 -126
  65. package/src/components/AppFrame/MenuItem.test.js +78 -169
  66. package/src/components/AppFrame/Preferences.js +110 -98
  67. package/src/components/AppFrame/Preferences.test.js +115 -219
  68. package/src/components/AppFrame/Sidebar.js +39 -41
  69. package/src/components/AppFrame/Sidebar.test.js +88 -168
  70. package/src/components/AppFrame/Topbar.js +59 -52
  71. package/src/components/AppFrame/Topbar.test.js +31 -39
  72. package/src/components/ColumnWrapper.js +18 -9
  73. package/src/components/DropMenu/DropMenu.test.js +185 -224
  74. package/src/components/DropMenu/Menu.js +73 -80
  75. package/src/components/DropMenu/Menu.test.js +35 -86
  76. package/src/components/DropMenu/index.js +19 -15
  77. package/src/components/Form/Combination.js +35 -28
  78. package/src/components/Form/Combination.test.js +6 -19
  79. package/src/components/Form/Field.js +53 -66
  80. package/src/components/Form/Field.test.js +29 -51
  81. package/src/components/Form/FieldElements.js +0 -14
  82. package/src/components/Form/FieldElements.test.js +104 -111
  83. package/src/components/Form/Fieldset.js +42 -37
  84. package/src/components/Form/Fieldset.test.js +14 -7
  85. package/src/components/Form/Form.js +11 -7
  86. package/src/components/Form/Form.test.js +75 -56
  87. package/src/components/Form/FormElement.js +24 -16
  88. package/src/components/Form/InputField.test.js +24 -30
  89. package/src/components/Form/Inputs/Button.js +58 -14
  90. package/src/components/Form/Inputs/Button.test.js +32 -7
  91. package/src/components/Form/Inputs/Inputs.test.js +0 -7
  92. package/src/components/Form/Inputs/ReadOnly.js +34 -28
  93. package/src/components/Form/Inputs/ReadOnly.test.js +45 -7
  94. package/src/components/Form/Inputs/Selector.js +22 -0
  95. package/src/components/Form/Inputs/Selector.test.js +105 -0
  96. package/src/components/Form/Inputs/Text.js +15 -44
  97. package/src/components/Form/Inputs/Text.test.js +20 -29
  98. package/src/components/Form/Inputs/Toggles.js +27 -26
  99. package/src/components/Form/Inputs/Toggles.test.js +22 -28
  100. package/src/components/Form/Inputs/index.js +4 -15
  101. package/src/components/MaterialUI/DataDisplay/PredefinedElements/InformationItem.test.js +1 -4
  102. package/src/components/MaterialUI/DataDisplay/PredefinedElements/Placeholder.js +32 -6
  103. package/src/components/MaterialUI/DataDisplay/PredefinedElements/Placeholder.test.js +3 -1
  104. package/src/components/MaterialUI/DataDisplay/PredefinedElements/SectionToolbar.js +39 -0
  105. package/src/components/MaterialUI/DataDisplay/Table.js +190 -114
  106. package/src/components/MaterialUI/DataDisplay/Table.test.js +246 -1
  107. package/src/components/MaterialUI/DataDisplay/TableProps.js +4 -0
  108. package/src/components/MaterialUI/DataDisplay/TableProps.test.js +2 -0
  109. package/src/components/MaterialUI/DataDisplay/TableWithInMemoryPaging.js +145 -0
  110. package/src/components/MaterialUI/DataDisplay/TableWithInMemoryPaging.test.js +457 -0
  111. package/src/components/MaterialUI/DataDisplay/TooltippedElements/MultipleLinesText.js +5 -1
  112. package/src/components/MaterialUI/DataDisplay/TooltippedElements/MultipleLinesText.test.js +7 -1
  113. package/src/components/MaterialUI/Inputs/PredefinedElements/SearchControl.js +1 -0
  114. package/src/components/MaterialUI/Inputs/Select.js +2 -0
  115. package/src/components/MaterialUI/Inputs/SelectProps.js +2 -0
  116. package/src/components/MaterialUI/Inputs/SelectProps.test.js +2 -0
  117. package/src/components/MaterialUI/Inputs/Switch.js +22 -1
  118. package/src/components/MaterialUI/Inputs/Switch.test.js +23 -0
  119. package/src/components/MaterialUI/Inputs/SwitchProps.js +2 -0
  120. package/src/components/MaterialUI/Inputs/SwitchProps.test.js +2 -0
  121. package/src/components/MaterialUI/hocs/withDeferredTooltip.js +4 -1
  122. package/src/components/MaterialUI/hocs/withDeferredTooltip.test.js +27 -0
  123. package/src/components/MaterialUI/muiThemes.js +1 -0
  124. package/src/components/Navigation/Bar.test.js +92 -87
  125. package/src/components/TaskDetailsModal.test.js +1 -3
  126. package/src/constants.js +1 -0
  127. package/src/content/iconsSheet.svg +740 -116
  128. package/src/hocs/withScrollBox.js +32 -19
  129. package/src/hocs/withScrollBox.test.js +15 -3
  130. package/src/hooks/useInMemoryPaging.js +78 -0
  131. package/src/hooks/useInMemoryPaging.test.js +515 -0
  132. package/src/hooks/useMultipleFieldEditState.js +11 -4
  133. package/src/hooks/useMultipleFieldEditState.test.js +49 -1
  134. package/src/reducers/metadata.js +6 -1
  135. package/src/reducers/metadata.test.js +31 -0
  136. package/src/requests +1 -0
  137. package/src/schemas/metadata.js +3 -0
  138. package/src/selectors/locale.js +1 -1
  139. package/src/selectors/metadata.js +12 -9
  140. package/src/selectors/metadata.test.js +92 -11
  141. package/src/sharedMessages.js +4 -0
  142. package/src/translations/en-US.json +1 -0
  143. package/src/translations/fr-CA.json +1 -0
  144. package/src/utils/ListHelper.js +203 -0
  145. package/src/utils/ListHelper.test.js +710 -0
  146. package/src/utils/comparisonHelper.js +135 -0
  147. package/src/utils/comparisonHelper.test.js +334 -0
  148. package/src/utils/propertyBagHelper.js +2 -0
  149. package/src/utils/propertyBagHelper.test.js +6 -0
  150. package/dist/components/Form/FieldList.js +0 -270
  151. package/dist/components/Form/Inputs/FieldButtons.js +0 -66
  152. package/dist/components/Form/Inputs/Number.js +0 -117
  153. package/dist/components/Form/Inputs/SmallButton.js +0 -91
  154. package/dist/components/Form/Inputs/Time.js +0 -86
  155. package/dist/components/Form/Inputs/Translation.js +0 -169
  156. package/src/components/AppFrame/ApplicationSelector/Header.js +0 -34
  157. package/src/components/AppFrame/ApplicationSelector/Header.test.js +0 -23
  158. package/src/components/Form/FieldList.js +0 -210
  159. package/src/components/Form/FieldList.test.js +0 -558
  160. package/src/components/Form/Inputs/FieldButtons.js +0 -90
  161. package/src/components/Form/Inputs/Number.js +0 -60
  162. package/src/components/Form/Inputs/Number.test.js +0 -435
  163. package/src/components/Form/Inputs/SmallButton.js +0 -37
  164. package/src/components/Form/Inputs/SmallButton.test.js +0 -65
  165. package/src/components/Form/Inputs/Time.js +0 -32
  166. package/src/components/Form/Inputs/Time.test.js +0 -41
  167. package/src/components/Form/Inputs/Translation.js +0 -93
  168. package/src/components/Form/Inputs/Translation.test.js +0 -204
@@ -1,9 +1,7 @@
1
1
  import React from "react";
2
- import { MemoryRouter } from "react-router-dom";
3
2
  import Immutable from "immutable";
4
- import { Provider } from "react-redux";
5
- import { ThemeProvider } from "styled-components";
6
- import Sidebar, { Bar, EnhancedMenuItem, MenuToggle, Logo } from "./Sidebar";
3
+ import { TestWrapper } from "../../utils/testUtils";
4
+ import Sidebar, { EnhancedMenuItem, MenuToggle, Logo } from "./Sidebar";
7
5
  import MenuItem from "./MenuItem";
8
6
 
9
7
  describe("Sidebar", () => {
@@ -43,106 +41,88 @@ describe("Sidebar", () => {
43
41
 
44
42
  it("renders a sidebar with app selector and page menu", () =>
45
43
  expect(
46
- <Provider store={store}>
47
- <ThemeProvider theme={{}}>
48
- <MemoryRouter initialEntries={["/Global/second"]}>
49
- <Sidebar modules={modules} />
50
- </MemoryRouter>
51
- </ThemeProvider>
52
- </Provider>,
44
+ <TestWrapper
45
+ provider={{ store }}
46
+ stylesProvider
47
+ muiThemeProvider
48
+ memoryRouter={{ initialEntries: ["/Global/second"] }}
49
+ >
50
+ <Sidebar modules={modules} />
51
+ </TestWrapper>,
53
52
  "when mounted",
54
53
  "to satisfy",
55
- <Provider store={store}>
56
- <ThemeProvider theme={{}}>
57
- <MemoryRouter initialEntries={["/Global/second"]}>
58
- <Bar>
59
- <MenuToggle />
60
- <EnhancedMenuItem icon="cars" title="First page" id="first" label="First page" />
61
- <EnhancedMenuItem icon="person" title="Second page" id="second" label="Second page" />
62
- <Logo />
63
- </Bar>
64
- </MemoryRouter>
65
- </ThemeProvider>
66
- </Provider>,
54
+ <TestWrapper
55
+ provider={{ store }}
56
+ stylesProvider
57
+ muiThemeProvider
58
+ memoryRouter={{ initialEntries: ["/Global/second"] }}
59
+ >
60
+ <div>
61
+ <MenuToggle />
62
+ <EnhancedMenuItem icon="cars" title="First page" id="first" label="First page" />
63
+ <EnhancedMenuItem icon="person" title="Second page" id="second" label="Second page" />
64
+ <Logo />
65
+ </div>
66
+ </TestWrapper>,
67
67
  ));
68
68
 
69
69
  it("renders a sidebar showing alerts", () =>
70
70
  expect(
71
- <Provider store={store}>
72
- <ThemeProvider theme={{}}>
73
- <MemoryRouter initialEntries={["/Global/second"]}>
74
- <Sidebar modules={modules} activeModules={{ first: { type: "confirm" } }} />
75
- </MemoryRouter>
76
- </ThemeProvider>
77
- </Provider>,
71
+ <TestWrapper
72
+ provider={{ store }}
73
+ stylesProvider
74
+ muiThemeProvider
75
+ memoryRouter={{ initialEntries: ["/Global/second"] }}
76
+ >
77
+ <Sidebar modules={modules} activeModules={{ first: { type: "confirm" } }} />
78
+ </TestWrapper>,
78
79
  "when mounted",
79
80
  "to satisfy",
80
- <Provider store={store}>
81
- <ThemeProvider theme={{}}>
82
- <MemoryRouter initialEntries={["/Global/second"]}>
83
- <Bar>
84
- <MenuToggle />
85
- <EnhancedMenuItem
86
- icon="cars"
87
- title="First page"
88
- id="first"
89
- label="First page"
90
- alert={{ type: "confirm" }}
91
- />
92
- <EnhancedMenuItem icon="person" title="Second page" id="second" label="Second page" />
93
- <Logo />
94
- </Bar>
95
- </MemoryRouter>
96
- </ThemeProvider>
97
- </Provider>,
81
+ <TestWrapper
82
+ provider={{ store }}
83
+ stylesProvider
84
+ muiThemeProvider
85
+ memoryRouter={{ initialEntries: ["/Global/second"] }}
86
+ >
87
+ <div>
88
+ <MenuToggle />
89
+ <EnhancedMenuItem icon="cars" title="First page" id="first" label="First page" alert={{ type: "confirm" }} />
90
+ <EnhancedMenuItem icon="person" title="Second page" id="second" label="Second page" />
91
+ <Logo />
92
+ </div>
93
+ </TestWrapper>,
98
94
  ));
99
95
 
100
96
  it("renders an open sidebar", () =>
101
97
  expect(
102
- <Provider store={store}>
103
- <ThemeProvider theme={{}}>
104
- <MemoryRouter initialEntries={["/Global/second"]}>
105
- <Sidebar open modules={modules} />
106
- </MemoryRouter>
107
- </ThemeProvider>
108
- </Provider>,
98
+ <TestWrapper provider={{ store }} stylesProvider muiThemeProvider memoryRouter>
99
+ <Sidebar open modules={modules} />
100
+ </TestWrapper>,
109
101
  "when mounted",
110
102
  "to satisfy",
111
- <Provider store={store}>
112
- <ThemeProvider theme={{}}>
113
- <MemoryRouter initialEntries={["/Global/second"]}>
114
- <Bar>
115
- <MenuToggle open />
116
- <EnhancedMenuItem open icon="cars" title="First page" id="first" label="First page" />
117
- <EnhancedMenuItem open icon="person" title="Second page" id="second" label="Second page" />
118
- <Logo />
119
- </Bar>
120
- </MemoryRouter>
121
- </ThemeProvider>
122
- </Provider>,
103
+ <TestWrapper provider={{ store }} stylesProvider muiThemeProvider memoryRouter>
104
+ <div>
105
+ <MenuToggle open />
106
+ <EnhancedMenuItem open icon="cars" title="First page" id="first" label="First page" />
107
+ <EnhancedMenuItem open icon="person" title="Second page" id="second" label="Second page" />
108
+ <Logo />
109
+ </div>
110
+ </TestWrapper>,
123
111
  ));
124
112
 
125
113
  it("renders a minimal sidebar", () =>
126
114
  expect(
127
- <Provider store={store}>
128
- <ThemeProvider theme={{}}>
129
- <MemoryRouter>
130
- <Sidebar />
131
- </MemoryRouter>
132
- </ThemeProvider>
133
- </Provider>,
115
+ <TestWrapper provider={{ store }} stylesProvider muiThemeProvider memoryRouter>
116
+ <Sidebar />
117
+ </TestWrapper>,
134
118
  "when mounted",
135
119
  "to satisfy",
136
- <Provider store={store}>
137
- <ThemeProvider theme={{}}>
138
- <MemoryRouter>
139
- <Bar>
140
- <MenuToggle />
141
- <Logo />
142
- </Bar>
143
- </MemoryRouter>
144
- </ThemeProvider>
145
- </Provider>,
120
+ <TestWrapper provider={{ store }} stylesProvider muiThemeProvider memoryRouter>
121
+ <div>
122
+ <MenuToggle />
123
+ <Logo />
124
+ </div>
125
+ </TestWrapper>,
146
126
  ));
147
127
  });
148
128
 
@@ -178,34 +158,26 @@ describe("EnhancedMenuItem", () => {
178
158
 
179
159
  it("renders a MenuItem with href", () =>
180
160
  expect(
181
- <Provider store={store}>
182
- <MemoryRouter>
183
- <EnhancedMenuItem id="route" path="/Global/somewhere" />
184
- </MemoryRouter>
185
- </Provider>,
161
+ <TestWrapper provider={{ store }} stylesProvider muiThemeProvider memoryRouter>
162
+ <EnhancedMenuItem id="route" path="/Global/somewhere" />
163
+ </TestWrapper>,
186
164
  "when mounted",
187
165
  "to satisfy",
188
- <Provider store={store}>
189
- <MemoryRouter>
190
- <MenuItem href="/Global/route" />
191
- </MemoryRouter>
192
- </Provider>,
166
+ <TestWrapper provider={{ store }} stylesProvider muiThemeProvider memoryRouter>
167
+ <MenuItem href="/Global/route" />
168
+ </TestWrapper>,
193
169
  ));
194
170
 
195
171
  it("sets the active flag if path matches href", () =>
196
172
  expect(
197
- <Provider store={store}>
198
- <MemoryRouter initialEntries={["/Global/route/subpath"]}>
199
- <EnhancedMenuItem id="route" />
200
- </MemoryRouter>
201
- </Provider>,
173
+ <TestWrapper provider={{ store }} stylesProvider muiThemeProvider memoryRouter>
174
+ <EnhancedMenuItem id="route" />
175
+ </TestWrapper>,
202
176
  "when mounted",
203
177
  "to satisfy",
204
- <Provider store={store}>
205
- <MemoryRouter>
206
- <MenuItem active href="/Global/route" />
207
- </MemoryRouter>
208
- </Provider>,
178
+ <TestWrapper provider={{ store }} stylesProvider muiThemeProvider memoryRouter>
179
+ <MenuItem active href="/Global/route" />
180
+ </TestWrapper>,
209
181
  ));
210
182
  });
211
183
 
@@ -223,78 +195,26 @@ describe("MenuToggle", () => {
223
195
  describe("with no theme", () => {
224
196
  it("renders a MenuItem with specific settings", () =>
225
197
  expect(
226
- <Provider store={store}>
227
- <ThemeProvider theme={{ foo: "bar" }}>
228
- <MemoryRouter>
229
- <MenuToggle toggle={toggle} />
230
- </MemoryRouter>
231
- </ThemeProvider>
232
- </Provider>,
198
+ <TestWrapper provider={{ store }} stylesProvider muiThemeProvider memoryRouter>
199
+ <MenuToggle toggle={toggle} />
200
+ </TestWrapper>,
233
201
  "when mounted",
234
202
  "to satisfy",
235
- <Provider store={store}>
236
- <MenuItem id="sidebarMenuToggle" menuToggle icon="menu" onClick={expect.it("to be a function")} />
237
- </Provider>,
203
+ <TestWrapper provider={{ store }} stylesProvider muiThemeProvider memoryRouter>
204
+ <MenuItem id="sidebarMenuToggle" menuToggle icon="expand" onClick={expect.it("to be a function")} />
205
+ </TestWrapper>,
238
206
  ));
239
207
 
240
208
  it("renders as open", () =>
241
209
  expect(
242
- <Provider store={store}>
243
- <ThemeProvider theme={{ foo: "bar" }}>
244
- <MemoryRouter>
245
- <MenuToggle toggle={toggle} open />
246
- </MemoryRouter>
247
- </ThemeProvider>
248
- </Provider>,
210
+ <TestWrapper provider={{ store }} stylesProvider muiThemeProvider memoryRouter>
211
+ <MenuToggle toggle={toggle} open />
212
+ </TestWrapper>,
249
213
  "when mounted",
250
214
  "to satisfy",
251
- <Provider store={store}>
252
- <MenuItem id="sidebarMenuToggle" menuToggle open icon="layers" onClick={expect.it("to be a function")} />
253
- </Provider>,
254
- ));
255
- });
256
-
257
- describe("with theme values", () => {
258
- let theme;
259
- beforeEach(() => {
260
- theme = {
261
- icons: {
262
- sidebarOpen: "open",
263
- sidebarClosed: "closed",
264
- },
265
- };
266
- });
267
-
268
- it("renders a MenuItem with specific settings", () =>
269
- expect(
270
- <Provider store={store}>
271
- <ThemeProvider theme={theme}>
272
- <MemoryRouter>
273
- <MenuToggle toggle={toggle} />
274
- </MemoryRouter>
275
- </ThemeProvider>
276
- </Provider>,
277
- "when mounted",
278
- "to satisfy",
279
- <Provider store={store}>
280
- <MenuItem menuToggle icon="closed" onClick={expect.it("to be a function")} />
281
- </Provider>,
282
- ));
283
-
284
- it("renders as open", () =>
285
- expect(
286
- <Provider store={store}>
287
- <ThemeProvider theme={theme}>
288
- <MemoryRouter>
289
- <MenuToggle toggle={toggle} open />
290
- </MemoryRouter>
291
- </ThemeProvider>
292
- </Provider>,
293
- "when mounted",
294
- "to satisfy",
295
- <Provider store={store}>
296
- <MenuItem menuToggle open icon="open" onClick={expect.it("to be a function")} />
297
- </Provider>,
215
+ <TestWrapper provider={{ store }} stylesProvider muiThemeProvider memoryRouter>
216
+ <MenuItem id="sidebarMenuToggle" menuToggle open icon="collapse" onClick={expect.it("to be a function")} />
217
+ </TestWrapper>,
298
218
  ));
299
219
  });
300
220
  });
@@ -1,8 +1,7 @@
1
1
  import React from "react";
2
- import styled from "styled-components";
3
2
  import { useDispatch, useSelector } from "react-redux";
4
3
  import { useIntl } from "react-intl";
5
- import { getThemeProp } from "../../utils";
4
+ import { makeStyles } from "@material-ui/core/styles";
6
5
  import { selectCurrentUsername } from "../../selectors/authentication";
7
6
  import { setStateField } from "../../actions/view";
8
7
  import { signOut } from "../../actions/authentication";
@@ -14,12 +13,36 @@ import Anchor from "./Anchor";
14
13
  import Help from "./Help";
15
14
  import sharedMessages from "./../../sharedMessages";
16
15
 
17
- export const Wrapper = styled.div`
18
- height: 40px;
19
- color: ${getThemeProp(["colors", "textMedium"], "#999999")};
20
- display: flex;
21
- justify-content: space-between;
22
- `;
16
+ const useStyles = makeStyles(theme => ({
17
+ wrapper: {
18
+ height: "40px",
19
+ color: theme.palette.text.hint,
20
+ display: "flex",
21
+ justifyContent: "space-between",
22
+ },
23
+ appBox: {
24
+ height: "100%",
25
+ display: "flex",
26
+ flex: 1,
27
+ alignItems: "stretch",
28
+ },
29
+ appLabel: {
30
+ backgroundColor: "#000000",
31
+ color: theme.palette.primary.light,
32
+ fontFamily: theme.typography.button.fontFamily,
33
+ fontSize: "14px",
34
+ textTransform: "uppercase",
35
+ paddingRight: "20px",
36
+ paddingLeft: "6px",
37
+ display: "flex",
38
+ alignItems: "center",
39
+ },
40
+ appLogo: {
41
+ height: "30px",
42
+ marginRight: "10px",
43
+ },
44
+ }));
45
+
23
46
  export const useMenuProps = () => {
24
47
  const intl = useIntl();
25
48
  const dispatch = useDispatch();
@@ -58,52 +81,36 @@ export const Menu = () => {
58
81
  );
59
82
  };
60
83
 
61
- export const AppBox = styled.div`
62
- height: 100%;
63
- display: flex;
64
- flex: 1;
65
- align-items: stretch;
66
- `;
67
-
68
- export const AppLabel = styled.div`
69
- background-color: #000000;
70
- color: ${getThemeProp(["colors", "application", "primary"], "#ffffff")};
71
- font-family: ${getThemeProp(["fonts", "header"], "sans-serif")};
72
- font-size: 14px;
73
- text-transform: uppercase;
74
- padding-right: 20px;
75
- padding-left: 6px;
76
- display: flex;
77
- align-items: center;
78
- `;
79
-
80
- export const AppLogo = styled.img.attrs(() => ({ alt: "" }))`
81
- height: 30px;
82
- margin-right: 10px;
83
- `;
84
+ export const CurrentApp = ({ displayName, iconUri }) => {
85
+ const classes = useStyles();
84
86
 
85
- export const CurrentApp = ({ displayName, iconUri }) => (
86
- <AppLabel>
87
- <AppLogo src={iconUri} />
88
- {displayName}
89
- </AppLabel>
90
- );
87
+ return (
88
+ <div className={classes.appLabel}>
89
+ <img src={iconUri} className={classes.appLogo} />
90
+ {displayName}
91
+ </div>
92
+ );
93
+ };
91
94
  CurrentApp.displayName = "CurrentApp";
92
95
 
93
- const Topbar = ({ applications, applicationId, currentApplication, onClick, helpUrl, ...config }) => (
94
- <Wrapper onClick={onClick}>
95
- <AppBox>
96
- <ApplicationSelector
97
- {...{
98
- applications,
99
- applicationId,
100
- }}
101
- />
102
- <CurrentApp {...(currentApplication || {})} />
103
- </AppBox>
104
- <Menu {...config} />
105
- <Help {...{ helpUrl }} />
106
- </Wrapper>
107
- );
96
+ const Topbar = ({ applications, applicationId, currentApplication, onClick, helpUrl, ...config }) => {
97
+ const classes = useStyles();
98
+
99
+ return (
100
+ <div onClick={onClick} className={classes.wrapper} data-test-id="wrapper">
101
+ <div className={classes.appBox}>
102
+ <ApplicationSelector
103
+ {...{
104
+ applications,
105
+ applicationId,
106
+ }}
107
+ />
108
+ <CurrentApp {...(currentApplication || {})} />
109
+ </div>
110
+ <Menu {...config} />
111
+ <Help {...{ helpUrl }} />
112
+ </div>
113
+ );
114
+ };
108
115
 
109
116
  export default Topbar;
@@ -10,9 +10,7 @@ import { SIGN_OUT_REQUEST, SIGN_OUT_SUCCESS, SIGN_OUT_FAILURE } from "../../acti
10
10
  import { PREFS_NAME } from "./Preferences";
11
11
  import { ABOUT_NAME } from "./About";
12
12
  import ApplicationSelector from "./ApplicationSelector";
13
- import { Wrapper as MenuWrapper } from "../DropMenu";
14
- import Topbar, { Wrapper, AppBox, CurrentApp, AppLabel, AppLogo, useMenuProps } from "./Topbar";
15
- import { HelpLink } from "./Help";
13
+ import Topbar, { CurrentApp, useMenuProps } from "./Topbar";
16
14
 
17
15
  jest.mock("../../utils/buildUrl", () => {
18
16
  const modExport = {};
@@ -77,19 +75,17 @@ describe("Topbar", () => {
77
75
  </Provider>,
78
76
  "when mounted",
79
77
  "to satisfy",
80
- <Wrapper onClick={clicker}>
81
- <AppBox>
78
+ <div onClick={clicker}>
79
+ <div>
82
80
  <ApplicationSelector {...props} />
83
- <AppLabel>
84
- <AppLogo src="/test/url" />
81
+ <div>
82
+ <img src="/test/url" />
85
83
  Test label
86
- </AppLabel>
87
- </AppBox>
88
- <MenuWrapper>
89
- <Ignore />
90
- </MenuWrapper>
91
- <HelpLink>Help</HelpLink>
92
- </Wrapper>,
84
+ </div>
85
+ </div>
86
+ <Ignore />
87
+ <a>Help</a>
88
+ </div>,
93
89
  ));
94
90
 
95
91
  it("doesn't break if no current app", () =>
@@ -101,18 +97,16 @@ describe("Topbar", () => {
101
97
  </Provider>,
102
98
  "when mounted",
103
99
  "to satisfy",
104
- <Wrapper onClick={clicker}>
105
- <AppBox>
106
- <Ignore />
107
- <AppLabel>
108
- <AppLogo />
109
- </AppLabel>
110
- </AppBox>
111
- <MenuWrapper>
100
+ <div onClick={clicker}>
101
+ <div>
112
102
  <Ignore />
113
- </MenuWrapper>
114
- <HelpLink>Help</HelpLink>
115
- </Wrapper>,
103
+ <div>
104
+ <img />
105
+ </div>
106
+ </div>
107
+ <Ignore />
108
+ <a>Help</a>
109
+ </div>,
116
110
  ));
117
111
 
118
112
  it("doesn't break if no apps at all", () =>
@@ -124,18 +118,16 @@ describe("Topbar", () => {
124
118
  </Provider>,
125
119
  "when mounted",
126
120
  "to satisfy",
127
- <Wrapper onClick={clicker}>
128
- <AppBox>
129
- <Ignore />
130
- <AppLabel>
131
- <AppLogo />
132
- </AppLabel>
133
- </AppBox>
134
- <MenuWrapper>
121
+ <div onClick={clicker}>
122
+ <div>
135
123
  <Ignore />
136
- </MenuWrapper>
137
- <HelpLink>Help</HelpLink>
138
- </Wrapper>,
124
+ <div>
125
+ <img />
126
+ </div>
127
+ </div>
128
+ <Ignore />
129
+ <a>Help</a>
130
+ </div>,
139
131
  ));
140
132
  });
141
133
 
@@ -246,9 +238,9 @@ describe("CurrentApp", () => {
246
238
  <CurrentApp displayName="Test label" iconUri="/test/url" />,
247
239
  "when mounted",
248
240
  "to satisfy",
249
- <AppLabel>
250
- <AppLogo src="/test/url" />
241
+ <div>
242
+ <img src="/test/url" />
251
243
  Test label
252
- </AppLabel>,
244
+ </div>,
253
245
  ));
254
246
  });
@@ -1,11 +1,20 @@
1
- import styled from "styled-components";
2
-
3
- const ColumnWrapper = styled.div`
4
- flex: 0 1 100%;
5
- display: flex;
6
- flex-direction: column;
7
- min-height: 0;
8
- min-width: 0;
9
- `;
1
+ import React from "react";
2
+ import { makeStyles } from "@material-ui/core/styles";
3
+
4
+ const useStyles = makeStyles(() => ({
5
+ columnWrapper: {
6
+ flex: "0 1 100%",
7
+ display: "flex",
8
+ flexDirection: "column",
9
+ minHeight: 0,
10
+ minWidth: 0,
11
+ },
12
+ }));
13
+
14
+ const ColumnWrapper = ({ children }) => {
15
+ const classes = useStyles();
16
+
17
+ return <div className={classes.columnWrapper}>{children}</div>;
18
+ };
10
19
 
11
20
  export default ColumnWrapper;