@nordicsemiconductor/pc-nrfconnect-shared 60.0.0-pre1 → 60.0.0-pre2

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 (232) hide show
  1. package/dist/bootstrap.css +8951 -0
  2. package/dist/index.css +1451 -0
  3. package/dist/index.js +122119 -0
  4. package/{src/Logo/nordic-logo-blue-icon-only.png → dist/nordic-logo-blue-icon-only-H7BABN6D.png} +0 -0
  5. package/{src/Logo/nordic-logo-gray-icon-only.png → dist/nordic-logo-gray-icon-only-GATOTR3L.png} +0 -0
  6. package/package.json +12 -3
  7. package/typings/generated/src/Device/deviceInfo/deviceInfo.d.ts +1 -2
  8. package/.github/ISSUE_TEMPLATE/custom.md +0 -10
  9. package/.husky/pre-push +0 -3
  10. package/.renovaterc.json +0 -10
  11. package/Changelog.md +0 -2973
  12. package/azure-pipelines.yml +0 -34
  13. package/config/eslintrc.js +0 -190
  14. package/config/jest.config.js +0 -41
  15. package/config/prettier.config.js +0 -13
  16. package/config/tsconfig.json +0 -15
  17. package/fw/bootloader/graviton_bootloader_v1.0.1-[nRF5_SDK_15.0.1-1.alpha_f76d012].zip +0 -0
  18. package/jest.config.js +0 -7
  19. package/main/index.ts +0 -32
  20. package/mocks/deviceLibMock.ts +0 -21
  21. package/mocks/electronMock.ts +0 -15
  22. package/mocks/electronStoreMock.ts +0 -19
  23. package/mocks/emptyMock.ts +0 -7
  24. package/mocks/fileMock.ts +0 -13
  25. package/mocks/gaMock.ts +0 -9
  26. package/mocks/mockTests.test.ts +0 -15
  27. package/mocks/packageJsonMock.ts +0 -10
  28. package/mocks/remoteMock.ts +0 -17
  29. package/scripts/esbuild-bootstrap.js +0 -15
  30. package/scripts/esbuild-renderer.js +0 -131
  31. package/scripts/installHusky.ts +0 -17
  32. package/scripts/prepare-shared-release.ts +0 -122
  33. package/scripts/release-shared.test.ts +0 -132
  34. package/scripts/release-shared.ts +0 -207
  35. package/src/About/About.tsx +0 -25
  36. package/src/About/AboutButton.tsx +0 -28
  37. package/src/About/ApplicationCard.tsx +0 -83
  38. package/src/About/DeviceCard.tsx +0 -74
  39. package/src/About/DocumentationCard.tsx +0 -18
  40. package/src/About/DocumentationSection.tsx +0 -24
  41. package/src/About/Section.tsx +0 -21
  42. package/src/About/ShortcutButton.tsx +0 -41
  43. package/src/About/SupportCard.tsx +0 -97
  44. package/src/About/about.scss +0 -40
  45. package/src/About/documentationSlice.ts +0 -41
  46. package/src/About/section.scss +0 -15
  47. package/src/About/shortcutSlice.ts +0 -52
  48. package/src/Alert/Alert.module.scss +0 -29
  49. package/src/Alert/Alert.tsx +0 -37
  50. package/src/App/App.test.tsx +0 -47
  51. package/src/App/App.tsx +0 -227
  52. package/src/App/ConnectedToStore.tsx +0 -19
  53. package/src/App/VisibilityBar.tsx +0 -103
  54. package/src/App/app.scss +0 -83
  55. package/src/App/appLayout.ts +0 -95
  56. package/src/App/shared.scss +0 -49
  57. package/src/App/visibility-bar.scss +0 -55
  58. package/src/Button/Button.tsx +0 -66
  59. package/src/Button/button.module.scss +0 -154
  60. package/src/Card/Card.tsx +0 -26
  61. package/src/Card/card.module.scss +0 -28
  62. package/src/Device/BrokenDeviceDialog/BrokenDeviceDialog.tsx +0 -58
  63. package/src/Device/BrokenDeviceDialog/broken-device-dialog.scss +0 -18
  64. package/src/Device/BrokenDeviceDialog/brokenDeviceDialogSlice.tsx +0 -48
  65. package/src/Device/DeviceSelector/BasicDeviceInfo.tsx +0 -115
  66. package/src/Device/DeviceSelector/DeviceIcon.tsx +0 -27
  67. package/src/Device/DeviceSelector/DeviceList/AnimatedList.tsx +0 -62
  68. package/src/Device/DeviceSelector/DeviceList/BrokenDevice.tsx +0 -34
  69. package/src/Device/DeviceSelector/DeviceList/Device.tsx +0 -84
  70. package/src/Device/DeviceSelector/DeviceList/DeviceList.tsx +0 -113
  71. package/src/Device/DeviceSelector/DeviceList/EditDeviceButtons.tsx +0 -28
  72. package/src/Device/DeviceSelector/DeviceList/MoreDeviceInfo.tsx +0 -65
  73. package/src/Device/DeviceSelector/DeviceList/RenameDevice.tsx +0 -22
  74. package/src/Device/DeviceSelector/DeviceList/broken-device.scss +0 -32
  75. package/src/Device/DeviceSelector/DeviceList/device-list.scss +0 -64
  76. package/src/Device/DeviceSelector/DeviceList/device.scss +0 -28
  77. package/src/Device/DeviceSelector/DeviceList/edit-device-buttons.scss +0 -31
  78. package/src/Device/DeviceSelector/DeviceList/more-device-info.scss +0 -33
  79. package/src/Device/DeviceSelector/DeviceList/rename-device.scss +0 -13
  80. package/src/Device/DeviceSelector/DeviceSelector.test.tsx +0 -342
  81. package/src/Device/DeviceSelector/DeviceSelector.tsx +0 -173
  82. package/src/Device/DeviceSelector/Favorite.tsx +0 -49
  83. package/src/Device/DeviceSelector/SelectDevice.tsx +0 -36
  84. package/src/Device/DeviceSelector/SelectedDevice.tsx +0 -65
  85. package/src/Device/DeviceSelector/arrow-down.svg +0 -1
  86. package/src/Device/DeviceSelector/basic-device-info.scss +0 -62
  87. package/src/Device/DeviceSelector/device-icon.scss +0 -27
  88. package/src/Device/DeviceSelector/favorite.scss +0 -17
  89. package/src/Device/DeviceSelector/select-device.scss +0 -38
  90. package/src/Device/DeviceSelector/selected-device.scss +0 -57
  91. package/src/Device/DeviceSetup/DeviceSetupView.tsx +0 -102
  92. package/src/Device/deviceAutoSelectSlice.ts +0 -144
  93. package/src/Device/deviceInfo/deviceInfo.ts +0 -254
  94. package/src/Device/deviceInfo/nRF51-Series-logo.svg +0 -1
  95. package/src/Device/deviceInfo/nRF52-Series-logo.svg +0 -1
  96. package/src/Device/deviceInfo/nRF53-Series-logo.svg +0 -1
  97. package/src/Device/deviceInfo/nRF70-Series_no-background_RGB.svg +0 -36
  98. package/src/Device/deviceInfo/nRF91-Series-logo.svg +0 -1
  99. package/src/Device/deviceInfo/ppk-logo.svg +0 -1
  100. package/src/Device/deviceInfo/unknown-logo.svg +0 -30
  101. package/src/Device/deviceInfo/unknown-nordic-logo.svg +0 -25
  102. package/src/Device/deviceLibWrapper.test.ts +0 -97
  103. package/src/Device/deviceLibWrapper.ts +0 -133
  104. package/src/Device/deviceLister.test.ts +0 -89
  105. package/src/Device/deviceLister.ts +0 -396
  106. package/src/Device/deviceSetup.ts +0 -264
  107. package/src/Device/deviceSetupSlice.ts +0 -94
  108. package/src/Device/deviceSlice.ts +0 -248
  109. package/src/Device/dfu-cc.ts +0 -162
  110. package/src/Device/initPacket.ts +0 -402
  111. package/src/Device/jprogOperations.ts +0 -206
  112. package/src/Device/sdfuOperations.ts +0 -601
  113. package/src/Dialog/Dialog.test.tsx +0 -134
  114. package/src/Dialog/Dialog.tsx +0 -236
  115. package/src/Dialog/dialog.scss +0 -60
  116. package/src/Dropdown/Dropdown.module.scss +0 -83
  117. package/src/Dropdown/Dropdown.test.tsx +0 -62
  118. package/src/Dropdown/Dropdown.tsx +0 -106
  119. package/src/ErrorBoundary/ErrorBoundary.test.tsx +0 -105
  120. package/src/ErrorBoundary/ErrorBoundary.tsx +0 -186
  121. package/src/ErrorBoundary/bug.svg +0 -1
  122. package/src/ErrorBoundary/error-boundary.scss +0 -102
  123. package/src/ErrorDialog/ErrorDialog.test.tsx +0 -70
  124. package/src/ErrorDialog/ErrorDialog.tsx +0 -94
  125. package/src/ErrorDialog/error.scss +0 -14
  126. package/src/ErrorDialog/errorDialogSlice.test.ts +0 -64
  127. package/src/ErrorDialog/errorDialogSlice.ts +0 -80
  128. package/src/FactoryReset/FactoryResetButton.test.tsx +0 -46
  129. package/src/FactoryReset/FactoryResetButton.tsx +0 -81
  130. package/src/InlineInput/InlineInput.tsx +0 -170
  131. package/src/InlineInput/NumberInlineInput.tsx +0 -107
  132. package/src/InlineInput/inline-input.scss +0 -38
  133. package/src/InlineInput/number-inline-input.scss +0 -15
  134. package/src/Log/LogEntry.tsx +0 -62
  135. package/src/Log/LogViewer.tsx +0 -54
  136. package/src/Log/log-entry.scss +0 -30
  137. package/src/Log/log-viewer.scss +0 -24
  138. package/src/Log/logSlice.ts +0 -73
  139. package/src/Log/syncLogToStore.ts +0 -36
  140. package/src/Logo/Logo.tsx +0 -48
  141. package/src/Logo/logo.scss +0 -11
  142. package/src/Main/Main.tsx +0 -13
  143. package/src/Main/main.scss +0 -13
  144. package/src/MasonryLayout/MasonryLayout.tsx +0 -234
  145. package/src/MasonryLayout/masonryLayout.module.scss +0 -46
  146. package/src/NavBar/NavBar.tsx +0 -22
  147. package/src/NavBar/NavMenu.test.tsx +0 -41
  148. package/src/NavBar/NavMenu.tsx +0 -53
  149. package/src/NavBar/NavMenuItem.tsx +0 -41
  150. package/src/NavBar/nav-bar.scss +0 -26
  151. package/src/NavBar/nav-menu-item.scss +0 -34
  152. package/src/OpenApp/openApp.ts +0 -18
  153. package/src/Panes/FeedbackPane.tsx +0 -149
  154. package/src/PseudoButton/PseudoButton.tsx +0 -56
  155. package/src/PseudoButton/pseudo-button.scss +0 -11
  156. package/src/SerialPort/ConflictingSettingsDialog.tsx +0 -242
  157. package/src/SerialPort/SerialPort.test.ts +0 -54
  158. package/src/SerialPort/SerialPort.ts +0 -202
  159. package/src/Shortcuts/Shortcut-item.scss +0 -33
  160. package/src/Shortcuts/Shortcut-modal.scss +0 -20
  161. package/src/Shortcuts/ShortcutItem.tsx +0 -48
  162. package/src/Shortcuts/ShortcutModal.tsx +0 -67
  163. package/src/SidePanel/Group.tsx +0 -106
  164. package/src/SidePanel/SidePanel.tsx +0 -19
  165. package/src/SidePanel/group.scss +0 -42
  166. package/src/SidePanel/sidepanel.scss +0 -20
  167. package/src/Slider/Bar.tsx +0 -24
  168. package/src/Slider/Factor.test.ts +0 -48
  169. package/src/Slider/Handle.tsx +0 -121
  170. package/src/Slider/Slider.test.tsx +0 -25
  171. package/src/Slider/Slider.tsx +0 -91
  172. package/src/Slider/Ticks.tsx +0 -54
  173. package/src/Slider/__snapshots__/Slider.test.tsx.snap +0 -50
  174. package/src/Slider/bar.scss +0 -24
  175. package/src/Slider/factor.ts +0 -24
  176. package/src/Slider/handle.scss +0 -32
  177. package/src/Slider/percentage.ts +0 -67
  178. package/src/Slider/range.ts +0 -92
  179. package/src/Slider/slider.scss +0 -14
  180. package/src/Slider/ticks.scss +0 -28
  181. package/src/Slider/variables.scss +0 -16
  182. package/src/StartStopButton/StartStopButton.tsx +0 -60
  183. package/src/StartStopButton/play-circle.svg +0 -1
  184. package/src/StartStopButton/start-stop-button.scss +0 -47
  185. package/src/StartStopButton/stop-circle.svg +0 -1
  186. package/src/StateSelector/StateSelector.tsx +0 -64
  187. package/src/StateSelector/state-selector.scss +0 -38
  188. package/src/Stepper/Stepper.tsx +0 -139
  189. package/src/Stepper/stepper.scss +0 -127
  190. package/src/Toggle/Toggle.tsx +0 -120
  191. package/src/Toggle/toggle.scss +0 -109
  192. package/src/bootstrap.scss +0 -14
  193. package/src/index.ts +0 -146
  194. package/src/logging/appTransport.test.ts +0 -78
  195. package/src/logging/appTransport.ts +0 -41
  196. package/src/logging/describeError.test.ts +0 -38
  197. package/src/logging/describeError.ts +0 -56
  198. package/src/logging/index.ts +0 -103
  199. package/src/logging/logBuffer.test.ts +0 -41
  200. package/src/logging/logBuffer.ts +0 -24
  201. package/src/logging/sendInitialLogMessages.ts +0 -64
  202. package/src/store.ts +0 -60
  203. package/src/svg.d.ts +0 -15
  204. package/src/utils/AppTypes.ts +0 -60
  205. package/src/utils/appDirs.ts +0 -78
  206. package/src/utils/bleChannels.ts +0 -16
  207. package/src/utils/classNames.test.ts +0 -29
  208. package/src/utils/classNames.ts +0 -25
  209. package/src/utils/colors.scss +0 -46
  210. package/src/utils/colors.ts +0 -38
  211. package/src/utils/describeVersion.ts +0 -21
  212. package/src/utils/environment.ts +0 -6
  213. package/src/utils/logLibVersions.ts +0 -103
  214. package/src/utils/open.ts +0 -46
  215. package/src/utils/packageJson.ts +0 -60
  216. package/src/utils/persistentStore.ts +0 -144
  217. package/src/utils/systemReport.ts +0 -160
  218. package/src/utils/truncateMiddle.test.ts +0 -21
  219. package/src/utils/truncateMiddle.ts +0 -20
  220. package/src/utils/usageData.ts +0 -189
  221. package/src/utils/useHotKey.ts +0 -62
  222. package/src/utils/useStopwatch.test.tsx +0 -311
  223. package/src/utils/useStopwatch.ts +0 -140
  224. package/src/variables.scss +0 -820
  225. package/styles.scss +0 -88
  226. package/test/dispatchTo.ts +0 -23
  227. package/test/index.ts +0 -7
  228. package/test/jestResolver.js +0 -28
  229. package/test/setupTests.ts +0 -27
  230. package/test/testUtil.ts +0 -20
  231. package/test/testrenderer.tsx +0 -39
  232. /package/{src/Logo/nordic-logo-white-icon-only.png → dist/nordic-logo-white-icon-only-XIZBW537.png} +0 -0
@@ -1,105 +0,0 @@
1
- /*
2
- * Copyright (c) 2015 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import React from 'react';
8
- import reactGA from 'react-ga';
9
- import { fireEvent, screen, waitFor } from '@testing-library/react';
10
-
11
- import render from '../../test/testrenderer';
12
- import { getAppSpecificStore as store } from '../utils/persistentStore';
13
- import { generateSystemReport } from '../utils/systemReport';
14
- import ErrorBoundary from './ErrorBoundary';
15
-
16
- const mockReactGA = reactGA;
17
-
18
- jest.mock('../utils/systemReport');
19
- jest.mock('react-ga');
20
- jest.mock('../utils/usageData', () => ({
21
- ...jest.requireActual('../utils/usageData'),
22
- init: jest.fn(() => {
23
- mockReactGA.initialize('');
24
- }),
25
- sendErrorReport: jest.fn(),
26
- isEnabled: () => true,
27
- }));
28
-
29
- const SYSTEM_REPORT = 'system report';
30
- const OKBUTTONTEXT = 'Restore';
31
-
32
- jest.mocked(generateSystemReport).mockImplementation(
33
- () =>
34
- new Promise(res => {
35
- res(SYSTEM_REPORT);
36
- })
37
- );
38
-
39
- const Child = () => {
40
- throw new Error();
41
- };
42
-
43
- describe('ErrorBoundary', () => {
44
- beforeEach(() => {
45
- const spy = jest.spyOn(console, 'error');
46
- spy.mockImplementation(() => {});
47
- });
48
-
49
- afterEach(() => {
50
- jest.clearAllMocks();
51
- });
52
-
53
- it('should send GA event', async () => {
54
- render(
55
- <ErrorBoundary>
56
- <Child />
57
- </ErrorBoundary>
58
- );
59
-
60
- await waitFor(() => expect(reactGA.initialize).toHaveBeenCalled());
61
- });
62
-
63
- it('can take custom reporting functions', () => {
64
- const sendUsageData = jest.fn();
65
-
66
- render(
67
- <ErrorBoundary sendUsageData={sendUsageData}>
68
- <Child />
69
- </ErrorBoundary>
70
- );
71
- expect(sendUsageData).toHaveBeenCalled();
72
- });
73
-
74
- it('should render error boundary component when there is an error', () => {
75
- render(
76
- <ErrorBoundary>
77
- <Child />
78
- </ErrorBoundary>
79
- );
80
- const errorMessage = screen.getByText('Oops! There was a problem');
81
- expect(errorMessage).toBeDefined();
82
- });
83
-
84
- it('should clear store if factory reset', async () => {
85
- render(
86
- <ErrorBoundary>
87
- <Child />
88
- </ErrorBoundary>
89
- );
90
- fireEvent.click(screen.getByText('Restore default settings'));
91
- await screen.findByText(OKBUTTONTEXT);
92
- fireEvent.click(screen.getByText(OKBUTTONTEXT));
93
- expect(store().clear).toHaveBeenCalled();
94
- });
95
-
96
- it('should present system information', async () => {
97
- render(
98
- <ErrorBoundary>
99
- <Child />
100
- </ErrorBoundary>
101
- );
102
- const report = await screen.findByText(SYSTEM_REPORT);
103
- expect(report).toBeDefined();
104
- });
105
- });
@@ -1,186 +0,0 @@
1
- /*
2
- * Copyright (c) 2015 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import React, { ReactNode } from 'react';
8
- import { Spinner } from 'react-bootstrap';
9
- import { getCurrentWindow } from '@electron/remote';
10
-
11
- import Button from '../Button/Button';
12
- import { Device } from '../Device/deviceSlice';
13
- import FactoryResetButton from '../FactoryReset/FactoryResetButton';
14
- import { CollapsibleGroup } from '../SidePanel/Group';
15
- import { openUrl } from '../utils/open';
16
- import packageJson from '../utils/packageJson';
17
- import { getAppSpecificStore as store } from '../utils/persistentStore';
18
- import { generateSystemReport } from '../utils/systemReport';
19
- import {
20
- init as initGA,
21
- isEnabled,
22
- isInitialized as isGAInitialized,
23
- sendErrorReport,
24
- } from '../utils/usageData';
25
- import bugIcon from './bug.svg';
26
-
27
- import './error-boundary.scss';
28
-
29
- const sendGAEvent = (error: string) => {
30
- if (!isEnabled()) {
31
- return;
32
- }
33
- if (!isGAInitialized()) {
34
- initGA(packageJson());
35
- }
36
- sendErrorReport(error);
37
- };
38
-
39
- interface Props {
40
- children: ReactNode;
41
- selectedSerialNumber?: string;
42
- selectedDevice?: Device;
43
- devices?: Device[];
44
- appName?: string;
45
- restoreDefaults?: () => void;
46
- sendUsageData?: (message: string) => void;
47
- }
48
-
49
- const genericRestoreDefaults = () => {
50
- store().clear();
51
- getCurrentWindow().reload();
52
- };
53
-
54
- class ErrorBoundary extends React.Component<
55
- Props,
56
- { hasError: boolean; error: Error | null; systemReport: string | null }
57
- > {
58
- constructor(props: Props) {
59
- super(props);
60
- this.state = {
61
- hasError: false,
62
- error: null,
63
- systemReport: null,
64
- };
65
- }
66
-
67
- static getDerivedStateFromError(error: Error) {
68
- return {
69
- hasError: true,
70
- error,
71
- };
72
- }
73
-
74
- componentDidCatch(error: Error) {
75
- const { devices, selectedDevice, selectedSerialNumber, sendUsageData } =
76
- this.props;
77
- sendUsageData != null
78
- ? sendUsageData(error.message)
79
- : sendGAEvent(error.message);
80
-
81
- generateSystemReport(
82
- new Date().toISOString().replace(/:/g, '-'),
83
- devices,
84
- selectedDevice,
85
- selectedSerialNumber
86
- ).then(report => {
87
- this.setState({ systemReport: report });
88
- });
89
- }
90
-
91
- render() {
92
- const { hasError, error, systemReport } = this.state;
93
-
94
- const { children, appName, restoreDefaults } = this.props;
95
-
96
- if (!hasError) {
97
- return children;
98
- }
99
-
100
- const appDisplayName = appName || packageJson().displayName;
101
-
102
- return (
103
- <div className="error-boundary__container">
104
- <div className="error-boundary__header">
105
- <h1>Oops! There was a problem</h1>
106
- <img src={bugIcon} alt="" />
107
- </div>
108
- <div className="error-boundary__main">
109
- <div className="error-boundary__info">
110
- <div className="info-header">
111
- nRF Connect for Desktop {appDisplayName} experienced
112
- an unrecoverable error
113
- </div>
114
- <p>
115
- If this is the first time you&apos;ve seen this
116
- problem we recommend restarting the application.
117
- </p>
118
- <Button
119
- large
120
- variant="primary"
121
- onClick={() => getCurrentWindow().reload()}
122
- >
123
- Restart application
124
- </Button>
125
- <p>
126
- If restarting didn&apos;t help, you can also try
127
- restoring to default values.
128
- </p>
129
- <FactoryResetButton
130
- large
131
- resetFn={restoreDefaults || genericRestoreDefaults}
132
- label="Restore default settings"
133
- variant="primary"
134
- />
135
- </div>
136
- </div>
137
- <div className="error-boundary__footer">
138
- {error !== null && (
139
- <div className="error-boundary__message">
140
- <CollapsibleGroup heading="Show detailed error message">
141
- <div className="report">
142
- <h4>{error.message}</h4>
143
- <pre>{error.stack}</pre>
144
- </div>
145
- </CollapsibleGroup>
146
- </div>
147
- )}
148
- <hr />
149
- {systemReport !== null ? (
150
- <div className="error-boundary__message">
151
- <CollapsibleGroup heading="Show system report">
152
- <div className="report">
153
- <pre>{systemReport}</pre>
154
- </div>
155
- </CollapsibleGroup>
156
- </div>
157
- ) : (
158
- <div className="error-boundary__message--loading">
159
- <h2 className="loading-header">
160
- Generating system report...
161
- </h2>
162
- <Spinner size="sm" animation="border" />
163
- </div>
164
- )}
165
- <p>
166
- Please report the problem on DevZone if you have
167
- experienced it multiple times
168
- </p>
169
- <Button
170
- large
171
- variant="primary"
172
- onClick={() =>
173
- openUrl(
174
- 'https://devzone.nordicsemi.com/support/add'
175
- )
176
- }
177
- >
178
- Go to DevZone
179
- </Button>
180
- </div>
181
- </div>
182
- );
183
- }
184
- }
185
-
186
- export default ErrorBoundary;
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#455a64"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M20 8h-2.81c-.45-.78-1.07-1.45-1.82-1.96L17 4.41 15.59 3l-2.17 2.17C12.96 5.06 12.49 5 12 5s-.96.06-1.41.17L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8zm-4 4v3c0 .22-.03.47-.07.7l-.1.65-.37.65c-.72 1.24-2.04 2-3.46 2s-2.74-.77-3.46-2l-.37-.64-.1-.65C8.03 15.48 8 15.23 8 15v-4c0-.23.03-.48.07-.7l.1-.65.37-.65c.3-.52.72-.97 1.21-1.31l.57-.39.74-.18c.31-.08.63-.12.94-.12.32 0 .63.04.95.12l.68.16.61.42c.5.34.91.78 1.21 1.31l.38.65.1.65c.04.22.07.47.07.69v1zm-6 2h4v2h-4zm0-4h4v2h-4z"/></svg>
@@ -1,102 +0,0 @@
1
- /*
2
- * Copyright (c) 2021 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- @import '../variables.scss';
8
-
9
- .error-boundary {
10
- &__container {
11
- background: white;
12
- position: absolute;
13
- left: 50%;
14
- top: 50%;
15
- transform: translate(-50%, -50%);
16
- padding: 16px;
17
- width: 700px;
18
- border: 1px solid $gray-400;
19
- box-shadow: 5px 6px 5px -1px rgba(0, 0, 0, 0.1);
20
- height: 100%;
21
- overflow-y: overlay;
22
- @include scrollbars($white);
23
- }
24
-
25
- &__header {
26
- margin-bottom: 16px;
27
- color: $nordic-blue;
28
- display: flex;
29
- justify-content: space-between;
30
- align-items: center;
31
-
32
- img {
33
- height: 32px;
34
- width: 32px;
35
- }
36
- }
37
-
38
- &__main {
39
- button {
40
- margin-right: 8px;
41
- }
42
- }
43
-
44
- &__info {
45
- .info-header {
46
- font-weight: 700;
47
- color: $gray-700;
48
- }
49
-
50
- p {
51
- margin-top: 16px;
52
- }
53
- }
54
-
55
- &__footer {
56
- margin-top: 32px;
57
-
58
- p {
59
- margin-top: 16px;
60
- }
61
-
62
- button {
63
- margin-top: 16px;
64
- }
65
- }
66
-
67
- &__message {
68
- margin-bottom: 16px;
69
-
70
- &--loading {
71
- margin-bottom: 16px;
72
- display: flex;
73
- justify-content: space-between;
74
- align-items: center;
75
-
76
- .loading-header {
77
- color: #263238;
78
- font-size: 10px;
79
- font-weight: 400;
80
- line-height: 13px;
81
- text-transform: uppercase;
82
- letter-spacing: 2.6416px;
83
- }
84
- }
85
-
86
- .report {
87
- border: 1px solid $gray-400;
88
- padding: 16px;
89
- user-select: text;
90
- }
91
-
92
- pre {
93
- margin-top: 12px;
94
- font-size: 12px;
95
- }
96
- }
97
-
98
- .spinner-border {
99
- margin-left: 16px;
100
- border-width: 1px;
101
- }
102
- }
@@ -1,70 +0,0 @@
1
- /*
2
- * Copyright (c) 2015 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import React from 'react';
8
- import {
9
- fireEvent,
10
- screen,
11
- waitForElementToBeRemoved,
12
- } from '@testing-library/react';
13
-
14
- import render from '../../test/testrenderer';
15
- import ErrorDialog from './ErrorDialog';
16
- import { showDialog } from './errorDialogSlice';
17
-
18
- describe('ErrorDialog', () => {
19
- it('is not rendered when there is no error', () => {
20
- render(<ErrorDialog />);
21
- expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
22
- });
23
-
24
- it('should render visible dialog with one message', () => {
25
- render(<ErrorDialog />, [showDialog('An error occured')]);
26
-
27
- expect(screen.getByRole('dialog')).toBeInTheDocument();
28
- expect(screen.getByText('An error occured')).toBeInTheDocument();
29
- });
30
-
31
- it('should render visible dialog with two messages', () => {
32
- render(<ErrorDialog />, [
33
- showDialog('An error occured'),
34
- showDialog('Another error occured'),
35
- ]);
36
-
37
- expect(screen.getByRole('dialog')).toBeInTheDocument();
38
- expect(screen.getByText('An error occured')).toBeInTheDocument();
39
- expect(screen.getByText('Another error occured')).toBeInTheDocument();
40
- });
41
-
42
- describe('has a close button', () => {
43
- it('with the text "Close"', () => {
44
- render(<ErrorDialog />, [showDialog('An error occured')]);
45
-
46
- expect(screen.getByRole('button')).toHaveTextContent('Close');
47
- });
48
-
49
- it('of which the first closes the dialog', async () => {
50
- render(<ErrorDialog />, [showDialog('An error occured')]);
51
- fireEvent.click(screen.getByRole('button'));
52
-
53
- await waitForElementToBeRemoved(screen.queryByRole('dialog'));
54
- });
55
- });
56
-
57
- it('can have a custom error resolutions', () => {
58
- const specialHandling = jest.fn();
59
-
60
- render(<ErrorDialog />, [
61
- showDialog('An error occured', {
62
- 'Special Handling': specialHandling,
63
- }),
64
- ]);
65
-
66
- fireEvent.click(screen.getByText('Special Handling'));
67
-
68
- expect(specialHandling).toHaveBeenCalled();
69
- });
70
- });
@@ -1,94 +0,0 @@
1
- /*
2
- * Copyright (c) 2015 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import React, { Fragment } from 'react';
8
- import ReactMarkdown from 'react-markdown';
9
- import { useDispatch, useSelector } from 'react-redux';
10
-
11
- import { Dialog, DialogButton } from '../Dialog/Dialog';
12
- import {
13
- ErrorMessage,
14
- errorResolutions as errorResolutionsSelector,
15
- hideDialog,
16
- isVisible as isVisibleSelector,
17
- messages as messagesSelector,
18
- } from './errorDialogSlice';
19
-
20
- import './error.scss';
21
-
22
- const ErrorMessage = ({
23
- error: { message, detail },
24
- }: {
25
- error: ErrorMessage;
26
- }) => (
27
- <>
28
- <ReactMarkdown source={message} linkTarget="_blank" />
29
- {detail != null && (
30
- <details className="details">
31
- <summary>Show technical details</summary>
32
- <pre>{detail}</pre>
33
- </details>
34
- )}
35
- </>
36
- );
37
-
38
- const MultipleErrorMessages = ({ messages }: { messages: ErrorMessage[] }) => (
39
- <>
40
- There are multiple errors:
41
- <ul>
42
- {messages.map(message => (
43
- <li key={message.message}>
44
- <ErrorMessage error={message} />
45
- </li>
46
- ))}
47
- </ul>
48
- </>
49
- );
50
-
51
- const ErrorDialog = () => {
52
- const dispatch = useDispatch();
53
-
54
- const isVisible = useSelector(isVisibleSelector);
55
- const messages = useSelector(messagesSelector);
56
-
57
- const defaultErrorResolutions = {
58
- Close: () => dispatch(hideDialog()),
59
- };
60
- const errorResolutions =
61
- useSelector(errorResolutionsSelector) || defaultErrorResolutions;
62
-
63
- return (
64
- <Dialog
65
- isVisible={isVisible}
66
- onHide={() => dispatch(hideDialog())}
67
- className="core19-error-body"
68
- >
69
- <Dialog.Header title="Error" headerIcon="alert" />
70
- <Dialog.Body>
71
- {messages.length === 1 ? (
72
- <ErrorMessage error={messages[0]} />
73
- ) : (
74
- <MultipleErrorMessages messages={messages} />
75
- )}
76
- </Dialog.Body>
77
- <Dialog.Footer>
78
- {Object.entries(errorResolutions).map(
79
- ([label, handler], index) => (
80
- <DialogButton
81
- key={label}
82
- onClick={handler}
83
- variant={index === 0 ? 'primary' : 'secondary'}
84
- >
85
- {label}
86
- </DialogButton>
87
- )
88
- )}
89
- </Dialog.Footer>
90
- </Dialog>
91
- );
92
- };
93
-
94
- export default ErrorDialog;
@@ -1,14 +0,0 @@
1
- /*
2
- * Copyright (c) 2021 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- .core19-error-body {
8
- user-select: text;
9
-
10
- .details {
11
- margin-bottom: 1rem;
12
- font-size: 14px;
13
- }
14
- }
@@ -1,64 +0,0 @@
1
- /*
2
- * Copyright (c) 2015 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import dispatchTo from '../../test/dispatchTo';
8
- import { hideDialog, reducer, showDialog } from './errorDialogSlice';
9
-
10
- const anErrorMessage = 'An error occurred';
11
- const anotherErrorMessage = 'Another error occurred';
12
-
13
- describe('errorDialogReducer', () => {
14
- it('should be hidden by default', () => {
15
- const initialState = dispatchTo(reducer);
16
-
17
- expect(initialState.isVisible).toEqual(false);
18
- });
19
-
20
- it('should be visible and have the supplied message after show action has been dispatched', () => {
21
- const withAnError = dispatchTo(reducer, [
22
- showDialog(anErrorMessage, {}),
23
- ]);
24
- expect(withAnError.isVisible).toEqual(true);
25
- expect(withAnError.messages).toContainEqual({
26
- message: 'An error occurred',
27
- });
28
- });
29
-
30
- it('should be visible and have all messages after multiple show actions have been dispatched', () => {
31
- const withTwoErrors = dispatchTo(reducer, [
32
- showDialog(anErrorMessage, {}),
33
- showDialog(anotherErrorMessage, {}),
34
- ]);
35
- expect(withTwoErrors.isVisible).toEqual(true);
36
- expect(withTwoErrors.messages).toContainEqual({
37
- message: anErrorMessage,
38
- });
39
- expect(withTwoErrors.messages).toContainEqual({
40
- message: anotherErrorMessage,
41
- });
42
- });
43
-
44
- it('should not add message if it already exists in list', () => {
45
- const withAnError = dispatchTo(reducer, [
46
- showDialog(anErrorMessage, {}),
47
- showDialog(anErrorMessage, {}),
48
- ]);
49
-
50
- expect(withAnError.messages).toEqual([
51
- expect.objectContaining({ message: anErrorMessage }),
52
- ]);
53
- });
54
-
55
- it('should set dialog to invisible and clear message list when hide action has been dispatched', () => {
56
- const withAClearedError = dispatchTo(reducer, [
57
- showDialog(anErrorMessage, {}),
58
- hideDialog(),
59
- ]);
60
-
61
- expect(withAClearedError.isVisible).toEqual(false);
62
- expect(withAClearedError.messages.length).toEqual(0);
63
- });
64
- });