@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,134 +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 { fireEvent, screen } from '@testing-library/react';
9
-
10
- import render from '../../test/testrenderer';
11
- import {
12
- ConfirmationDialog,
13
- Dialog,
14
- DialogButton,
15
- ErrorDialog,
16
- InfoDialog,
17
- } from './Dialog';
18
-
19
- const noop = jest.fn();
20
- describe('Dialog', () => {
21
- const dialog = (isVisible = true) => (
22
- <Dialog isVisible={isVisible}>
23
- <Dialog.Header title="Test Title" />
24
- <Dialog.Body>Test Text</Dialog.Body>
25
- <Dialog.Footer>
26
- <DialogButton onClick={noop}>Close</DialogButton>
27
- </Dialog.Footer>
28
- </Dialog>
29
- );
30
-
31
- test('is rendered when visible', () => {
32
- render(dialog());
33
- expect(screen.getByRole('dialog')).toBeInTheDocument();
34
- test;
35
- });
36
-
37
- test('is not rendered when not visible', () => {
38
- render(dialog(false));
39
- expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
40
- });
41
-
42
- test('shows the expected content', () => {
43
- render(dialog());
44
-
45
- expect(screen.getByText('Test Title')).toBeInTheDocument();
46
- expect(screen.getByText('Test Text')).toBeInTheDocument();
47
- expect(screen.getByText('Close')).toBeInTheDocument();
48
- });
49
- });
50
-
51
- describe('InfoDialog creator', () => {
52
- const dialog = (isVisible = true) => (
53
- <InfoDialog isVisible={isVisible} onHide={noop}>
54
- Test Body
55
- </InfoDialog>
56
- );
57
-
58
- test('shows the expected content', () => {
59
- render(dialog());
60
-
61
- expect(screen.getByText('Info')).toBeInTheDocument();
62
- expect(screen.getByText('Test Body')).toBeInTheDocument();
63
- expect(screen.getByText('Close')).toBeInTheDocument();
64
- });
65
-
66
- test('invokes the expected action', () => {
67
- render(dialog());
68
-
69
- const closeButton = screen.getByText('Close');
70
- fireEvent.click(closeButton);
71
-
72
- expect(noop).toHaveBeenCalled();
73
- });
74
- });
75
-
76
- describe('ErrorDialog creator', () => {
77
- const dialog = (isVisible = true) => (
78
- <ErrorDialog isVisible={isVisible} onHide={noop}>
79
- Test Body
80
- </ErrorDialog>
81
- );
82
-
83
- test('shows the expected content', () => {
84
- render(dialog());
85
-
86
- expect(screen.getByText('Error')).toBeInTheDocument();
87
- expect(screen.getByText('Test Body')).toBeInTheDocument();
88
- expect(screen.getByText('Close')).toBeInTheDocument();
89
- });
90
-
91
- test('invokes the expected action', () => {
92
- render(dialog());
93
-
94
- const closeButton = screen.getByText('Close');
95
- fireEvent.click(closeButton);
96
-
97
- expect(noop).toHaveBeenCalled();
98
- });
99
- });
100
- describe('ConfirmationDialog creator', () => {
101
- const dialog = (isVisible = true) => (
102
- <ConfirmationDialog
103
- isVisible={isVisible}
104
- confirmLabel="ConfButton"
105
- onConfirm={() => noop(true)}
106
- onCancel={() => noop(false)}
107
- optionalLabel="Optional"
108
- onOptional={() => noop()}
109
- >
110
- Test Body
111
- </ConfirmationDialog>
112
- );
113
-
114
- test('shows the expected content', () => {
115
- render(dialog());
116
-
117
- expect(screen.getByText('Confirm')).toBeInTheDocument();
118
- expect(screen.getByText('Test Body')).toBeInTheDocument();
119
- expect(screen.getByText('Optional')).toBeInTheDocument();
120
- expect(screen.getByText('ConfButton')).toBeInTheDocument();
121
- expect(screen.getByText('Cancel')).toBeInTheDocument();
122
- });
123
-
124
- test('invokes the expected action', () => {
125
- render(dialog());
126
-
127
- fireEvent.click(screen.getByText('Optional'));
128
- expect(noop).toHaveBeenCalled();
129
- fireEvent.click(screen.getByText('ConfButton'));
130
- expect(noop).toHaveBeenCalledWith(true);
131
- fireEvent.click(screen.getByText('Cancel'));
132
- expect(noop).toHaveBeenCalledWith(false);
133
- });
134
- });
@@ -1,236 +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 Modal from 'react-bootstrap/Modal';
10
-
11
- import Button, { ButtonVariants } from '../Button/Button';
12
-
13
- import './dialog.scss';
14
-
15
- type CoreProps = {
16
- isVisible: boolean;
17
- onHide?: () => void;
18
- className?: string;
19
- size?: 'sm' | 'm' | 'lg' | 'xl';
20
- children: ReactNode;
21
- };
22
-
23
- type DialogProps = CoreProps & {
24
- closeOnUnfocus?: boolean;
25
- closeOnEsc?: boolean;
26
- };
27
-
28
- export const Dialog = ({
29
- isVisible,
30
- closeOnUnfocus = false,
31
- closeOnEsc = false,
32
- onHide = () => {},
33
- className = '',
34
- size = 'm',
35
- children,
36
- }: DialogProps) => (
37
- <Modal
38
- onEscapeKeyDown={() => {
39
- if (closeOnEsc && onHide) {
40
- onHide();
41
- }
42
- }}
43
- show={isVisible}
44
- size={size === 'm' ? undefined : size}
45
- backdrop={closeOnUnfocus ? true : 'static'}
46
- onHide={() => {
47
- if (closeOnUnfocus && onHide) {
48
- onHide();
49
- }
50
- }}
51
- centered
52
- className={`dialog ${className}`}
53
- >
54
- {children}
55
- </Modal>
56
- );
57
-
58
- Dialog.Header = ({
59
- title,
60
- headerIcon,
61
- showSpinner,
62
- }: {
63
- title: string;
64
- headerIcon?: string;
65
- showSpinner?: boolean;
66
- }) => (
67
- <Modal.Header closeButton={false}>
68
- <div>
69
- <b>{title}</b>
70
- {showSpinner && <Spinner size="sm" animation="border" />}
71
- </div>
72
- {headerIcon && <span className={`mdi mdi-${headerIcon}`} />}
73
- </Modal.Header>
74
- );
75
-
76
- Dialog.Body = ({ children }: { children: ReactNode }) => (
77
- <Modal.Body>{children}</Modal.Body>
78
- );
79
-
80
- Dialog.Footer = ({ children }: { children: ReactNode }) => (
81
- <Modal.Footer>{children}</Modal.Footer>
82
- );
83
-
84
- export interface DialogButtonProps {
85
- onClick: () => void;
86
- variant?: ButtonVariants;
87
- className?: string;
88
- disabled?: boolean;
89
- children: ReactNode;
90
- }
91
-
92
- export const DialogButton = ({
93
- variant = 'secondary',
94
- onClick,
95
- className = '',
96
- disabled = false,
97
- children,
98
- }: DialogButtonProps) => (
99
- <Button
100
- large
101
- variant={variant}
102
- onClick={onClick}
103
- className={className}
104
- disabled={disabled}
105
- >
106
- {children}
107
- </Button>
108
- );
109
-
110
- interface GenericDialogProps extends CoreProps {
111
- title: string;
112
- footer: ReactNode;
113
- headerIcon?: string;
114
- showSpinner?: boolean;
115
- closeOnUnfocus?: boolean;
116
- closeOnEsc?: boolean;
117
- }
118
-
119
- export const GenericDialog = ({
120
- isVisible,
121
- onHide,
122
- title,
123
- headerIcon,
124
- children,
125
- className,
126
- footer,
127
- showSpinner = false,
128
- closeOnUnfocus,
129
- closeOnEsc,
130
- size,
131
- }: GenericDialogProps) => (
132
- <Dialog
133
- onHide={onHide}
134
- closeOnUnfocus={closeOnUnfocus}
135
- closeOnEsc={closeOnEsc}
136
- isVisible={isVisible}
137
- className={className}
138
- size={size}
139
- >
140
- <Dialog.Header
141
- title={title}
142
- headerIcon={headerIcon}
143
- showSpinner={showSpinner}
144
- />
145
- <Dialog.Body>{children}</Dialog.Body>
146
- <Dialog.Footer>{footer}</Dialog.Footer>
147
- </Dialog>
148
- );
149
-
150
- interface InfoProps extends CoreProps {
151
- title?: string;
152
- headerIcon?: string;
153
- onHide: () => void;
154
- }
155
-
156
- export const InfoDialog = ({
157
- isVisible,
158
- title = 'Info',
159
- headerIcon = 'info',
160
- children,
161
- onHide,
162
- size,
163
- className,
164
- }: InfoProps) => (
165
- <GenericDialog
166
- closeOnEsc
167
- closeOnUnfocus
168
- onHide={onHide}
169
- isVisible={isVisible}
170
- headerIcon={headerIcon}
171
- title={title}
172
- className={className}
173
- size={size}
174
- footer={<DialogButton onClick={onHide}>Close</DialogButton>}
175
- >
176
- {children}
177
- </GenericDialog>
178
- );
179
-
180
- export const ErrorDialog = (props: Omit<InfoProps, 'headerIcon'>) =>
181
- InfoDialog({
182
- ...props,
183
- title: props.title ?? 'Error',
184
- headerIcon: 'alert',
185
- });
186
-
187
- interface ConfirmationDialogProps extends Omit<CoreProps, 'onHide'> {
188
- title?: string;
189
- headerIcon?: string;
190
- confirmLabel?: string;
191
- onConfirm: () => void;
192
- cancelLabel?: string;
193
- onCancel: () => void;
194
- optionalLabel?: string;
195
- onOptional?: () => void;
196
- }
197
-
198
- export const ConfirmationDialog = ({
199
- isVisible,
200
- title = 'Confirm',
201
- headerIcon,
202
- children,
203
- className,
204
- confirmLabel = 'Confirm',
205
- onConfirm,
206
- cancelLabel = 'Cancel',
207
- onCancel,
208
- optionalLabel,
209
- onOptional = () => {},
210
- size,
211
- }: ConfirmationDialogProps) => (
212
- <GenericDialog
213
- onHide={onCancel}
214
- closeOnEsc
215
- isVisible={isVisible}
216
- headerIcon={headerIcon}
217
- title={title}
218
- className={className}
219
- size={size}
220
- footer={
221
- <>
222
- <DialogButton variant="primary" onClick={onConfirm}>
223
- {confirmLabel}
224
- </DialogButton>
225
- {optionalLabel && (
226
- <DialogButton onClick={onOptional}>
227
- {optionalLabel}
228
- </DialogButton>
229
- )}
230
- <DialogButton onClick={onCancel}>{cancelLabel}</DialogButton>
231
- </>
232
- }
233
- >
234
- {children}
235
- </GenericDialog>
236
- );
@@ -1,60 +0,0 @@
1
- /*
2
- * Copyright (c) 2021 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- @import '../variables';
8
-
9
- .dialog {
10
- .modal-content {
11
- border: 0 transparent;
12
- box-shadow: 0px 3px 6px #00000029;
13
- background: #ffffff 0% 0% no-repeat padding-box;
14
- }
15
-
16
- .modal-header {
17
- height: 40px;
18
- border: 0 transparent;
19
- background: $gray-50;
20
- padding: 0 16px;
21
-
22
- flex-direction: row;
23
- align-items: center;
24
-
25
- p {
26
- font-size: 14px;
27
- margin: 0;
28
- }
29
-
30
- .mdi {
31
- font-size: 20px;
32
- }
33
-
34
- .spinner-border {
35
- margin-left: 16px;
36
- border-width: 1px;
37
- }
38
- }
39
-
40
- .modal-body {
41
- overflow-wrap: anywhere;
42
- padding: 32px 16px 16px 16px;
43
- margin: 0;
44
- p {
45
- font-size: 14px;
46
- }
47
- }
48
-
49
- .modal-footer {
50
- padding: 16px;
51
- border: 0 transparent;
52
- flex-direction: row-reverse;
53
- justify-content: end;
54
- display: flex;
55
-
56
- button {
57
- padding: 0 16px;
58
- }
59
- }
60
- }
@@ -1,83 +0,0 @@
1
- /*
2
- * Copyright (c) 2015 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- @import '../../styles';
8
-
9
- $dropdown-item-height: 24px; //px unit dependency in dropdown.tsx
10
-
11
- :export {
12
- dropdownItemHeight: $dropdown-item-height;
13
- }
14
-
15
- .container {
16
- position: relative;
17
- width: 100%;
18
- }
19
-
20
- .label {
21
- font-size: 12px;
22
- margin-bottom: 4px !important;
23
- }
24
-
25
- .btn {
26
- width: 100%;
27
- height: 32px;
28
- padding: 0 8px;
29
- background: $gray-700;
30
- color: $white;
31
- display: flex;
32
- justify-content: space-between;
33
- align-items: center;
34
- border: none;
35
- }
36
-
37
- .mdi {
38
- font-size: 18px;
39
- }
40
-
41
- .btnActive .mdi {
42
- transform: rotate(180deg);
43
- }
44
-
45
- .content {
46
- background: $gray-700;
47
- color: $white;
48
- position: absolute;
49
- width: 100%;
50
- right: 0;
51
- padding: 0;
52
- border-top: solid 2px $gray-600;
53
- z-index: 2;
54
-
55
- &[data-height='true'] {
56
- overflow-y: scroll; // Make Scroll Fixed Height Scrolable
57
-
58
- @include scrollbars($gray-700);
59
- }
60
- }
61
-
62
- .itemsInactive {
63
- display: none;
64
- }
65
-
66
- .item {
67
- color: $white;
68
- padding: 4px 8px;
69
- height: $dropdown-item-height;
70
- background-color: transparent;
71
- border: 0;
72
- width: 100%;
73
- text-align: inherit;
74
- display: block;
75
- clear: both;
76
- font-weight: 400;
77
- white-space: nowrap;
78
- }
79
-
80
- .item:hover,
81
- .item:focus {
82
- background: $gray-600;
83
- }
@@ -1,62 +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 { fireEvent, screen } from '@testing-library/react';
9
-
10
- import render from '../../test/testrenderer';
11
- import Dropdown from './Dropdown';
12
-
13
- const items = [
14
- {
15
- label: 'Foo',
16
- value: 'foo',
17
- },
18
- {
19
- label: 'Bar',
20
- value: 'Bar',
21
- },
22
- ];
23
-
24
- describe('Dropdown', () => {
25
- it('renders a list of items', () => {
26
- render(
27
- <Dropdown
28
- items={items}
29
- onSelect={jest.fn()}
30
- selectedItem={items[0]}
31
- />
32
- );
33
- expect(screen.getAllByText('Foo').length).toBe(2); // default selected + item
34
- expect(screen.getByText('Bar')).toBeInTheDocument();
35
- });
36
-
37
- it('calls onSelect when item is clicked', () => {
38
- const onSelect = jest.fn();
39
- const item = items[1];
40
- render(
41
- <Dropdown
42
- items={items}
43
- onSelect={onSelect}
44
- selectedItem={items[0]}
45
- />
46
- );
47
- const dropdownItem = screen.getByText(item.label);
48
- fireEvent.click(dropdownItem);
49
- expect(onSelect).toHaveBeenCalledWith(item);
50
- });
51
-
52
- it('correct item is selected', () => {
53
- render(
54
- <Dropdown
55
- items={items}
56
- onSelect={jest.fn()}
57
- selectedItem={items[1]}
58
- />
59
- );
60
- expect(screen.getAllByText('Bar').length).toBe(2);
61
- });
62
- });
@@ -1,106 +0,0 @@
1
- /*
2
- * Copyright (c) 2015 Nordic Semiconductor ASA
3
- *
4
- * SPDX-License-Identifier: LicenseRef-Nordic-4-Clause
5
- */
6
-
7
- import React, { useState } from 'react';
8
- import FormLabel from 'react-bootstrap/FormLabel';
9
-
10
- import styles from './Dropdown.module.scss';
11
-
12
- export interface DropdownItem {
13
- label: React.ReactNode;
14
- value: string;
15
- }
16
-
17
- export interface DropdownProps {
18
- id?: string;
19
- label?: React.ReactNode;
20
- items: DropdownItem[];
21
- onSelect: (item: DropdownItem) => void;
22
- disabled?: boolean;
23
- selectedItem: DropdownItem;
24
- numItemsBeforeScroll?: number;
25
- }
26
-
27
- export default ({
28
- id,
29
- label,
30
- items,
31
- onSelect,
32
- disabled = false,
33
- selectedItem,
34
- numItemsBeforeScroll = 0,
35
- }: DropdownProps) => {
36
- const [isActive, setIsActive] = useState(false);
37
-
38
- const onClickItem = (item: DropdownItem) => {
39
- onSelect(item);
40
- setIsActive(false);
41
- };
42
-
43
- return (
44
- <div
45
- className={styles.container}
46
- onBlur={event => {
47
- if (!event.currentTarget.contains(event.relatedTarget)) {
48
- setIsActive(false);
49
- }
50
- }}
51
- >
52
- {label && <FormLabel className={styles.label}>{label}</FormLabel>}
53
- <button
54
- id={id}
55
- type="button"
56
- className={`${styles.btn} ${
57
- isActive ? styles.btnActive : styles.btnInactive
58
- }`}
59
- onClick={() => setIsActive(!isActive)}
60
- disabled={disabled}
61
- >
62
- <span>
63
- {items.findIndex(e => e.value === selectedItem.value) === -1
64
- ? ''
65
- : selectedItem.label}
66
- </span>
67
- <span className={`mdi mdi-chevron-down ${styles.mdi}`} />
68
- </button>
69
- {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions -- We need an interactive handler as described below */}
70
- <div
71
- onMouseDown={ev => {
72
- // To prevent the dropdown from closing when users click on the scrollbar of the items
73
- ev.preventDefault();
74
- }}
75
- style={
76
- numItemsBeforeScroll > 0
77
- ? {
78
- maxHeight: `${
79
- numItemsBeforeScroll *
80
- Number.parseInt(styles.dropdownItemHeight, 10)
81
- }px`,
82
- }
83
- : {}
84
- }
85
- data-height={
86
- numItemsBeforeScroll > 0 &&
87
- items.length > numItemsBeforeScroll
88
- }
89
- className={`${styles.content} ${
90
- isActive ? styles.itemsActive : styles.itemsInactive
91
- }`}
92
- >
93
- {items.map(item => (
94
- <button
95
- type="button"
96
- className={styles.item}
97
- key={item.value}
98
- onClick={() => onClickItem(item)}
99
- >
100
- {item.label}
101
- </button>
102
- ))}
103
- </div>
104
- </div>
105
- );
106
- };