dce-reactkit 3.0.1 → 3.0.4
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.
- package/README.md +1 -546
- package/dist/cjs/index.js +1841 -0
- package/dist/cjs/index.js.map +1 -0
- package/{lib/esm → dist/cjs}/types/components/AppWrapper.d.ts +26 -1
- package/dist/cjs/types/components/ButtonInputGroup.d.ts +12 -0
- package/dist/cjs/types/components/CheckboxButton.d.ts +20 -0
- package/dist/cjs/types/components/Drawer.d.ts +10 -0
- package/{lib/cjs/lib → dist/cjs/types}/components/ErrorBox.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/components/LoadingSpinner.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/components/Modal.d.ts +0 -0
- package/dist/cjs/types/components/RadioButton.d.ts +20 -0
- package/dist/cjs/types/components/SimpleDateChooser.d.ts +22 -0
- package/{lib/esm/lib → dist/cjs/types}/components/TabBox.d.ts +1 -0
- package/{lib/cjs/lib → dist/cjs/types}/errors/ErrorWithCode.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/helpers/abbreviate.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/helpers/avg.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/helpers/ceilToNumDecimals.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/helpers/floorToNumDecimals.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/helpers/forceNumIntoBounds.d.ts +0 -0
- package/dist/cjs/types/helpers/genRouteHandler.d.ts +34 -0
- package/dist/cjs/types/helpers/getOrdinal.d.ts +8 -0
- package/dist/cjs/types/helpers/getTimeInfoInET.d.ts +17 -0
- package/{lib/cjs/lib → dist/cjs/types}/helpers/handleError.d.ts +5 -1
- package/{lib/cjs/lib → dist/cjs/types}/helpers/handleSuccess.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/helpers/padDecimalZeros.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/helpers/padZerosLeft.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/helpers/roundToNumDecimals.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/helpers/sum.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/helpers/visitServerEndpoint.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/helpers/waitMs.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/index.d.ts +14 -6
- package/dist/cjs/types/server/initServer.d.ts +21 -0
- package/{lib/cjs/lib → dist/cjs/types}/types/ModalButtonType.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/types/ModalSize.d.ts +0 -0
- package/{lib/cjs/lib → dist/cjs/types}/types/ModalType.d.ts +0 -0
- package/{lib → dist}/cjs/types/types/ParamType.d.ts +1 -1
- package/{lib → dist}/cjs/types/types/ReactKitErrorCode.d.ts +3 -1
- package/{lib/cjs/lib → dist/cjs/types}/types/Variant.d.ts +0 -0
- package/dist/esm/index.js +1797 -0
- package/dist/esm/index.js.map +1 -0
- package/{lib/cjs → dist/esm}/types/components/AppWrapper.d.ts +26 -1
- package/dist/esm/types/components/ButtonInputGroup.d.ts +12 -0
- package/dist/esm/types/components/CheckboxButton.d.ts +20 -0
- package/dist/esm/types/components/Drawer.d.ts +10 -0
- package/{lib/cjs → dist/esm}/types/components/ErrorBox.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/components/LoadingSpinner.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/components/Modal.d.ts +0 -0
- package/dist/esm/types/components/RadioButton.d.ts +20 -0
- package/dist/esm/types/components/SimpleDateChooser.d.ts +22 -0
- package/{lib/cjs/lib → dist/esm/types}/components/TabBox.d.ts +1 -0
- package/{lib/cjs → dist/esm}/types/errors/ErrorWithCode.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/helpers/abbreviate.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/helpers/avg.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/helpers/ceilToNumDecimals.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/helpers/floorToNumDecimals.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/helpers/forceNumIntoBounds.d.ts +0 -0
- package/dist/esm/types/helpers/genRouteHandler.d.ts +34 -0
- package/dist/esm/types/helpers/getOrdinal.d.ts +8 -0
- package/dist/esm/types/helpers/getTimeInfoInET.d.ts +17 -0
- package/{lib/cjs → dist/esm}/types/helpers/handleError.d.ts +5 -1
- package/{lib/cjs → dist/esm}/types/helpers/handleSuccess.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/helpers/padDecimalZeros.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/helpers/padZerosLeft.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/helpers/roundToNumDecimals.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/helpers/sum.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/helpers/visitServerEndpoint.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/helpers/waitMs.d.ts +0 -0
- package/{lib/esm/lib → dist/esm/types}/index.d.ts +14 -6
- package/dist/esm/types/server/initServer.d.ts +21 -0
- package/{lib/cjs → dist/esm}/types/types/ModalButtonType.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/types/ModalSize.d.ts +0 -0
- package/{lib/cjs → dist/esm}/types/types/ModalType.d.ts +0 -0
- package/{lib/esm/lib → dist/esm/types}/types/ParamType.d.ts +1 -1
- package/{lib/esm/lib → dist/esm/types}/types/ReactKitErrorCode.d.ts +3 -1
- package/{lib/cjs → dist/esm}/types/types/Variant.d.ts +0 -0
- package/dist/index.d.ts +507 -0
- package/package.json +18 -29
- package/rollup.config.js +14 -13
- package/src/components/AppWrapper.tsx +74 -12
- package/src/components/ButtonInputGroup.tsx +89 -0
- package/src/components/CheckboxButton.tsx +100 -0
- package/src/components/Drawer.tsx +76 -0
- package/src/components/ErrorBox.tsx +4 -4
- package/src/components/LoadingSpinner.tsx +3 -3
- package/src/components/Modal.tsx +214 -97
- package/src/components/RadioButton.tsx +102 -0
- package/src/components/SimpleDateChooser.tsx +222 -0
- package/src/components/TabBox.tsx +65 -58
- package/src/helpers/genRouteHandler.ts +348 -0
- package/src/helpers/getOrdinal.tsx +13 -0
- package/src/helpers/getTimeInfoInET.tsx +56 -0
- package/src/helpers/handleError.ts +65 -0
- package/src/helpers/handleSuccess.ts +18 -0
- package/src/helpers/visitServerEndpoint.tsx +110 -0
- package/src/index.ts +29 -0
- package/src/server/initServer.ts +53 -0
- package/src/types/ParamType.ts +18 -0
- package/src/types/ReactKitErrorCode.tsx +3 -1
- package/tsconfig.json +9 -7
- package/lib/cjs/index.js +0 -2
- package/lib/cjs/index.js.map +0 -1
- package/lib/cjs/lib/components/AppWrapper.d.ts +0 -35
- package/lib/cjs/lib/helpers/parseRequest.d.ts +0 -21
- package/lib/cjs/lib/types/ParamType.d.ts +0 -17
- package/lib/cjs/lib/types/ReactKitErrorCode.d.ts +0 -13
- package/lib/cjs/types/components/TabBox.d.ts +0 -11
- package/lib/cjs/types/helpers/alert.d.ts +0 -2
- package/lib/cjs/types/helpers/confirm.d.ts +0 -2
- package/lib/cjs/types/helpers/parseRequest.d.ts +0 -21
- package/lib/cjs/types/helpers/showFatalError.d.ts +0 -2
- package/lib/cjs/types/index.d.ts +0 -22
- package/lib/esm/index.js +0 -16
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/lib/components/AppWrapper.d.ts +0 -35
- package/lib/esm/lib/components/ErrorBox.d.ts +0 -12
- package/lib/esm/lib/components/LoadingSpinner.d.ts +0 -7
- package/lib/esm/lib/components/Modal.d.ts +0 -40
- package/lib/esm/lib/errors/ErrorWithCode.d.ts +0 -9
- package/lib/esm/lib/helpers/abbreviate.d.ts +0 -10
- package/lib/esm/lib/helpers/avg.d.ts +0 -8
- package/lib/esm/lib/helpers/ceilToNumDecimals.d.ts +0 -9
- package/lib/esm/lib/helpers/floorToNumDecimals.d.ts +0 -9
- package/lib/esm/lib/helpers/forceNumIntoBounds.d.ts +0 -10
- package/lib/esm/lib/helpers/handleError.d.ts +0 -14
- package/lib/esm/lib/helpers/handleSuccess.d.ts +0 -8
- package/lib/esm/lib/helpers/padDecimalZeros.d.ts +0 -10
- package/lib/esm/lib/helpers/padZerosLeft.d.ts +0 -9
- package/lib/esm/lib/helpers/parseRequest.d.ts +0 -21
- package/lib/esm/lib/helpers/roundToNumDecimals.d.ts +0 -9
- package/lib/esm/lib/helpers/sum.d.ts +0 -8
- package/lib/esm/lib/helpers/visitServerEndpoint.d.ts +0 -23
- package/lib/esm/lib/helpers/waitMs.d.ts +0 -7
- package/lib/esm/lib/types/ModalButtonType.d.ts +0 -17
- package/lib/esm/lib/types/ModalSize.d.ts +0 -11
- package/lib/esm/lib/types/ModalType.d.ts +0 -16
- package/lib/esm/lib/types/Variant.d.ts +0 -15
- package/lib/esm/types/components/ErrorBox.d.ts +0 -12
- package/lib/esm/types/components/LoadingSpinner.d.ts +0 -7
- package/lib/esm/types/components/Modal.d.ts +0 -40
- package/lib/esm/types/components/TabBox.d.ts +0 -11
- package/lib/esm/types/errors/ErrorWithCode.d.ts +0 -9
- package/lib/esm/types/helpers/abbreviate.d.ts +0 -10
- package/lib/esm/types/helpers/alert.d.ts +0 -2
- package/lib/esm/types/helpers/avg.d.ts +0 -8
- package/lib/esm/types/helpers/ceilToNumDecimals.d.ts +0 -9
- package/lib/esm/types/helpers/confirm.d.ts +0 -2
- package/lib/esm/types/helpers/floorToNumDecimals.d.ts +0 -9
- package/lib/esm/types/helpers/forceNumIntoBounds.d.ts +0 -10
- package/lib/esm/types/helpers/handleError.d.ts +0 -14
- package/lib/esm/types/helpers/handleSuccess.d.ts +0 -8
- package/lib/esm/types/helpers/padDecimalZeros.d.ts +0 -10
- package/lib/esm/types/helpers/padZerosLeft.d.ts +0 -9
- package/lib/esm/types/helpers/parseRequest.d.ts +0 -21
- package/lib/esm/types/helpers/roundToNumDecimals.d.ts +0 -9
- package/lib/esm/types/helpers/showFatalError.d.ts +0 -2
- package/lib/esm/types/helpers/sum.d.ts +0 -8
- package/lib/esm/types/helpers/visitServerEndpoint.d.ts +0 -23
- package/lib/esm/types/helpers/waitMs.d.ts +0 -7
- package/lib/esm/types/index.d.ts +0 -22
- package/lib/esm/types/types/ModalButtonType.d.ts +0 -17
- package/lib/esm/types/types/ModalSize.d.ts +0 -11
- package/lib/esm/types/types/ModalType.d.ts +0 -16
- package/lib/esm/types/types/ParamType.d.ts +0 -17
- package/lib/esm/types/types/ReactKitErrorCode.d.ts +0 -13
- package/lib/esm/types/types/Variant.d.ts +0 -15
- package/lib/index.d.ts +0 -274
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A wrapper for the entire React app that adds global functionality like
|
|
3
|
-
* handling for fatal error messages
|
|
3
|
+
* handling for fatal error messages, adds bootstrap support
|
|
4
4
|
* @author Gabe Abrams
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -28,22 +28,70 @@ import ErrorWithCode from '../errors/ErrorWithCode';
|
|
|
28
28
|
type Props = {
|
|
29
29
|
// The entire app
|
|
30
30
|
children: React.ReactNode,
|
|
31
|
+
// Copy of CACCL's send request function
|
|
32
|
+
sendRequest: SendRequestFunction,
|
|
31
33
|
// True if this app is a dark-themed app
|
|
32
34
|
dark?: boolean,
|
|
33
35
|
// Custom session expired message
|
|
34
36
|
sessionExpiredMessage?: string,
|
|
35
37
|
};
|
|
36
38
|
|
|
39
|
+
// Type of CACCL's send request function
|
|
40
|
+
type SendRequestFunction = (
|
|
41
|
+
opts: {
|
|
42
|
+
path: string;
|
|
43
|
+
method: ('GET' | 'POST' | 'DELETE' | 'PUT');
|
|
44
|
+
params?: {
|
|
45
|
+
[x: string]: any;
|
|
46
|
+
} | undefined;
|
|
47
|
+
headers?: {
|
|
48
|
+
[x: string]: any;
|
|
49
|
+
} | undefined;
|
|
50
|
+
numRetries?: number | undefined;
|
|
51
|
+
},
|
|
52
|
+
) => Promise<{
|
|
53
|
+
body: any;
|
|
54
|
+
status: number;
|
|
55
|
+
headers: {
|
|
56
|
+
[x: string]: any;
|
|
57
|
+
};
|
|
58
|
+
}>;
|
|
59
|
+
|
|
37
60
|
/*------------------------------------------------------------------------*/
|
|
38
61
|
/* Static Helpers */
|
|
39
62
|
/*------------------------------------------------------------------------*/
|
|
40
63
|
|
|
64
|
+
/*----------------------------------------*/
|
|
65
|
+
/* Send Request */
|
|
66
|
+
/*----------------------------------------*/
|
|
67
|
+
|
|
68
|
+
// Store copy of caccl send request
|
|
69
|
+
let _cacclSendRequest: SendRequestFunction;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Send a request using caccl's send request feature
|
|
73
|
+
* @author Gabe Abrams
|
|
74
|
+
* @param opts send request options
|
|
75
|
+
* @returns send request response
|
|
76
|
+
*/
|
|
77
|
+
export const cacclSendRequest: SendRequestFunction = async (opts) => {
|
|
78
|
+
// Make sure send request has been passed in
|
|
79
|
+
if (!_cacclSendRequest) {
|
|
80
|
+
throw new ErrorWithCode(
|
|
81
|
+
'The request could not be sent because the AppWrapper component does not have a copy of sendRequest from CACCL.',
|
|
82
|
+
ReactKitErrorCode.NoCACCLSendRequestFunction,
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return _cacclSendRequest(opts);
|
|
87
|
+
};
|
|
88
|
+
|
|
41
89
|
/*----------------------------------------*/
|
|
42
90
|
/* Alert */
|
|
43
91
|
/*----------------------------------------*/
|
|
44
92
|
|
|
45
93
|
// Stored copies of setters
|
|
46
|
-
let setAlertInfo: (info: { title: string, text: string }) => void;
|
|
94
|
+
let setAlertInfo: (info: undefined | { title: string, text: string }) => void;
|
|
47
95
|
let onAlertClosed: () => void;
|
|
48
96
|
|
|
49
97
|
/**
|
|
@@ -79,7 +127,7 @@ export const alert = async (title: string, text: string): Promise<undefined> =>
|
|
|
79
127
|
/*----------------------------------------*/
|
|
80
128
|
|
|
81
129
|
// Stored copies of setters
|
|
82
|
-
let setConfirmInfo: (info: { title: string, text: string }) => void;
|
|
130
|
+
let setConfirmInfo: (info: undefined | { title: string, text: string }) => void;
|
|
83
131
|
let onConfirmClosed: (confirmed: boolean) => void;
|
|
84
132
|
|
|
85
133
|
/**
|
|
@@ -190,10 +238,14 @@ const AppWrapper: React.FC<Props> = (props: Props): React.ReactElement => {
|
|
|
190
238
|
|
|
191
239
|
const {
|
|
192
240
|
children,
|
|
241
|
+
sendRequest,
|
|
193
242
|
dark,
|
|
194
243
|
sessionExpiredMessage = 'Your session has expired. Please go back to Canvas and start over.',
|
|
195
244
|
} = props;
|
|
196
245
|
|
|
246
|
+
// Store copy of send request
|
|
247
|
+
_cacclSendRequest = sendRequest;
|
|
248
|
+
|
|
197
249
|
/* -------------- State ------------- */
|
|
198
250
|
|
|
199
251
|
// Fatal error
|
|
@@ -217,20 +269,26 @@ const AppWrapper: React.FC<Props> = (props: Props): React.ReactElement => {
|
|
|
217
269
|
const [
|
|
218
270
|
alertInfo,
|
|
219
271
|
setAlertInfoInner,
|
|
220
|
-
] = useState<
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
272
|
+
] = useState<
|
|
273
|
+
undefined
|
|
274
|
+
| {
|
|
275
|
+
title: string,
|
|
276
|
+
text: string
|
|
277
|
+
}
|
|
278
|
+
>(undefined);
|
|
224
279
|
setAlertInfo = setAlertInfoInner;
|
|
225
280
|
|
|
226
281
|
// Confirm
|
|
227
282
|
const [
|
|
228
283
|
confirmInfo,
|
|
229
284
|
setConfirmInfoInner,
|
|
230
|
-
] = useState<
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
285
|
+
] = useState<
|
|
286
|
+
undefined
|
|
287
|
+
| {
|
|
288
|
+
title: string,
|
|
289
|
+
text: string
|
|
290
|
+
}
|
|
291
|
+
>(undefined);
|
|
234
292
|
setConfirmInfo = setConfirmInfoInner;
|
|
235
293
|
|
|
236
294
|
// Session expired
|
|
@@ -256,10 +314,12 @@ const AppWrapper: React.FC<Props> = (props: Props): React.ReactElement => {
|
|
|
256
314
|
if (alertInfo) {
|
|
257
315
|
modal = (
|
|
258
316
|
<Modal
|
|
317
|
+
key={`alert-${alertInfo.title}-${alertInfo.text}`}
|
|
259
318
|
title={alertInfo.title}
|
|
260
319
|
type={ModalType.Okay}
|
|
261
320
|
onClose={() => {
|
|
262
321
|
// Alert closed
|
|
322
|
+
setAlertInfo(undefined);
|
|
263
323
|
if (onAlertClosed) {
|
|
264
324
|
onAlertClosed();
|
|
265
325
|
}
|
|
@@ -276,16 +336,18 @@ const AppWrapper: React.FC<Props> = (props: Props): React.ReactElement => {
|
|
|
276
336
|
if (confirmInfo) {
|
|
277
337
|
modal = (
|
|
278
338
|
<Modal
|
|
339
|
+
key={`confirm-${confirmInfo.title}-${confirmInfo.text}`}
|
|
279
340
|
title={confirmInfo.title}
|
|
280
341
|
type={ModalType.OkayCancel}
|
|
281
342
|
onClose={(buttonType) => {
|
|
343
|
+
setConfirmInfo(undefined);
|
|
282
344
|
if (onConfirmClosed) {
|
|
283
345
|
onConfirmClosed(buttonType === ModalButtonType.Okay);
|
|
284
346
|
}
|
|
285
347
|
}}
|
|
286
348
|
dontAllowBackdropExit
|
|
287
349
|
>
|
|
288
|
-
|
|
350
|
+
{confirmInfo.text}
|
|
289
351
|
</Modal>
|
|
290
352
|
);
|
|
291
353
|
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input group with a title and space for buttons
|
|
3
|
+
* @author Gabe Abrams
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Import React
|
|
7
|
+
import React from 'react';
|
|
8
|
+
|
|
9
|
+
/*------------------------------------------------------------------------*/
|
|
10
|
+
/* Types */
|
|
11
|
+
/*------------------------------------------------------------------------*/
|
|
12
|
+
|
|
13
|
+
// Props definition
|
|
14
|
+
type Props = {
|
|
15
|
+
// Label text
|
|
16
|
+
label: string,
|
|
17
|
+
// Minimum width of the label (css units)
|
|
18
|
+
minLabelWidth?: string,
|
|
19
|
+
// Buttons
|
|
20
|
+
children: React.ReactNode,
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/*------------------------------------------------------------------------*/
|
|
24
|
+
/* Component */
|
|
25
|
+
/*------------------------------------------------------------------------*/
|
|
26
|
+
|
|
27
|
+
const ButtonInputGroup: React.FC<Props> = (props) => {
|
|
28
|
+
/*------------------------------------------------------------------------*/
|
|
29
|
+
/* Setup */
|
|
30
|
+
/*------------------------------------------------------------------------*/
|
|
31
|
+
|
|
32
|
+
/* -------------- Props ------------- */
|
|
33
|
+
|
|
34
|
+
// Destructure all props
|
|
35
|
+
const {
|
|
36
|
+
label,
|
|
37
|
+
minLabelWidth,
|
|
38
|
+
children,
|
|
39
|
+
} = props;
|
|
40
|
+
|
|
41
|
+
/*------------------------------------------------------------------------*/
|
|
42
|
+
/* Render */
|
|
43
|
+
/*------------------------------------------------------------------------*/
|
|
44
|
+
|
|
45
|
+
/*----------------------------------------*/
|
|
46
|
+
/* Main UI */
|
|
47
|
+
/*----------------------------------------*/
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<div className="input-group">
|
|
51
|
+
<div className="input-group-prepend d-flex w-100">
|
|
52
|
+
{/* Label */}
|
|
53
|
+
<span
|
|
54
|
+
className="input-group-text"
|
|
55
|
+
style={{
|
|
56
|
+
minWidth: (
|
|
57
|
+
minLabelWidth
|
|
58
|
+
?? undefined
|
|
59
|
+
),
|
|
60
|
+
borderTopRightRadius: 0,
|
|
61
|
+
borderBottomRightRadius: 0,
|
|
62
|
+
}}
|
|
63
|
+
>
|
|
64
|
+
{label}
|
|
65
|
+
</span>
|
|
66
|
+
|
|
67
|
+
{/* Contents */}
|
|
68
|
+
<span
|
|
69
|
+
className="input-group-text flex-grow-1 rounded-right"
|
|
70
|
+
style={{
|
|
71
|
+
backgroundColor: 'white',
|
|
72
|
+
borderTopLeftRadius: 0,
|
|
73
|
+
borderBottomLeftRadius: 0,
|
|
74
|
+
borderLeftWidth: 0,
|
|
75
|
+
}}
|
|
76
|
+
>
|
|
77
|
+
{children}
|
|
78
|
+
</span>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
/*------------------------------------------------------------------------*/
|
|
85
|
+
/* Wrap Up */
|
|
86
|
+
/*------------------------------------------------------------------------*/
|
|
87
|
+
|
|
88
|
+
// Export component
|
|
89
|
+
export default ButtonInputGroup;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A checkbox button
|
|
3
|
+
* @author Gabe Abrams
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Import React
|
|
7
|
+
import React from 'react';
|
|
8
|
+
|
|
9
|
+
// Import FontAwesome Icons
|
|
10
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
|
11
|
+
import { faCheckSquare } from '@fortawesome/free-solid-svg-icons';
|
|
12
|
+
import { faSquare } from '@fortawesome/free-regular-svg-icons';
|
|
13
|
+
|
|
14
|
+
// Import shared types
|
|
15
|
+
import Variant from '../types/Variant';
|
|
16
|
+
|
|
17
|
+
/*------------------------------------------------------------------------*/
|
|
18
|
+
/* Types */
|
|
19
|
+
/*------------------------------------------------------------------------*/
|
|
20
|
+
|
|
21
|
+
type Props = {
|
|
22
|
+
// Text of the button
|
|
23
|
+
text: string,
|
|
24
|
+
// Handler for when this item is toggled
|
|
25
|
+
onChanged: (checked: boolean) => void,
|
|
26
|
+
// Aria label
|
|
27
|
+
ariaLabel: string,
|
|
28
|
+
// Button title
|
|
29
|
+
title?: string,
|
|
30
|
+
// True if checked
|
|
31
|
+
checked?: boolean,
|
|
32
|
+
// The id of the button
|
|
33
|
+
id?: string,
|
|
34
|
+
// If true, no margin on right
|
|
35
|
+
noMarginOnRight?: boolean,
|
|
36
|
+
// Variant for when checkbox is checked
|
|
37
|
+
checkedVariant?: Variant,
|
|
38
|
+
// Variant for when checkbox is not checked
|
|
39
|
+
uncheckedVariant?: Variant,
|
|
40
|
+
// True if using a small button
|
|
41
|
+
small?: boolean,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/*------------------------------------------------------------------------*/
|
|
45
|
+
/* Component */
|
|
46
|
+
/*------------------------------------------------------------------------*/
|
|
47
|
+
|
|
48
|
+
const CheckboxButton: React.FC<Props> = (props) => {
|
|
49
|
+
/*------------------------------------------------------------------------*/
|
|
50
|
+
/* Setup */
|
|
51
|
+
/*------------------------------------------------------------------------*/
|
|
52
|
+
|
|
53
|
+
/* -------------- Props ------------- */
|
|
54
|
+
|
|
55
|
+
const {
|
|
56
|
+
text,
|
|
57
|
+
onChanged,
|
|
58
|
+
ariaLabel,
|
|
59
|
+
title,
|
|
60
|
+
checked,
|
|
61
|
+
id,
|
|
62
|
+
noMarginOnRight,
|
|
63
|
+
checkedVariant = Variant.Secondary,
|
|
64
|
+
uncheckedVariant = Variant.Light,
|
|
65
|
+
small,
|
|
66
|
+
} = props;
|
|
67
|
+
|
|
68
|
+
/*------------------------------------------------------------------------*/
|
|
69
|
+
/* Render */
|
|
70
|
+
/*------------------------------------------------------------------------*/
|
|
71
|
+
|
|
72
|
+
/*----------------------------------------*/
|
|
73
|
+
/* Main UI */
|
|
74
|
+
/*----------------------------------------*/
|
|
75
|
+
|
|
76
|
+
return (
|
|
77
|
+
<button
|
|
78
|
+
type="button"
|
|
79
|
+
id={id}
|
|
80
|
+
title={title}
|
|
81
|
+
className={`btn btn-${checked ? checkedVariant : uncheckedVariant}${checked ? ' selected' : ''}${small ? ' btn-sm' : ''} m-0${noMarginOnRight ? '' : ' me-1'}`}
|
|
82
|
+
aria-label={`${ariaLabel}${checked ? ': currently checked' : ''}`}
|
|
83
|
+
onClick={() => {
|
|
84
|
+
onChanged(!checked);
|
|
85
|
+
}}
|
|
86
|
+
>
|
|
87
|
+
<FontAwesomeIcon
|
|
88
|
+
icon={checked ? faCheckSquare : faSquare}
|
|
89
|
+
className="me-1"
|
|
90
|
+
/>
|
|
91
|
+
{text}
|
|
92
|
+
</button>
|
|
93
|
+
);
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
/*------------------------------------------------------------------------*/
|
|
97
|
+
/* Wrap up */
|
|
98
|
+
/*------------------------------------------------------------------------*/
|
|
99
|
+
|
|
100
|
+
export default CheckboxButton;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drawer container
|
|
3
|
+
* @author Gabe Abrams
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// Import React
|
|
7
|
+
import React from 'react';
|
|
8
|
+
|
|
9
|
+
/*------------------------------------------------------------------------*/
|
|
10
|
+
/* Types */
|
|
11
|
+
/*------------------------------------------------------------------------*/
|
|
12
|
+
|
|
13
|
+
// Props definition
|
|
14
|
+
type Props = {
|
|
15
|
+
// Children to display
|
|
16
|
+
children: React.ReactNode,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/*------------------------------------------------------------------------*/
|
|
20
|
+
/* Style */
|
|
21
|
+
/*------------------------------------------------------------------------*/
|
|
22
|
+
|
|
23
|
+
const style = `
|
|
24
|
+
.Drawer-container {
|
|
25
|
+
margin-left: 1rem;
|
|
26
|
+
margin-right: 1rem;
|
|
27
|
+
margin-top: 0;
|
|
28
|
+
margin-bottom: 1rem;
|
|
29
|
+
padding: 0.75rem;
|
|
30
|
+
border-left: 1px solid #dee2e6;
|
|
31
|
+
border-bottom: 1px solid #dee2e6;
|
|
32
|
+
border-right: 1px solid #dee2e6;
|
|
33
|
+
border-bottom-left-radius: .25rem;
|
|
34
|
+
border-bottom-right-radius: .25rem;
|
|
35
|
+
box-shadow: inset 0 0 0.5rem 0 rgba(0, 0, 0, 0.05);
|
|
36
|
+
}
|
|
37
|
+
`;
|
|
38
|
+
|
|
39
|
+
/*------------------------------------------------------------------------*/
|
|
40
|
+
/* Component */
|
|
41
|
+
/*------------------------------------------------------------------------*/
|
|
42
|
+
|
|
43
|
+
const Drawer: React.FC<Props> = (props) => {
|
|
44
|
+
/*------------------------------------------------------------------------*/
|
|
45
|
+
/* Setup */
|
|
46
|
+
/*------------------------------------------------------------------------*/
|
|
47
|
+
|
|
48
|
+
/* -------------- Props ------------- */
|
|
49
|
+
|
|
50
|
+
// Destructure all props
|
|
51
|
+
const {
|
|
52
|
+
children,
|
|
53
|
+
} = props;
|
|
54
|
+
|
|
55
|
+
/*------------------------------------------------------------------------*/
|
|
56
|
+
/* Render */
|
|
57
|
+
/*------------------------------------------------------------------------*/
|
|
58
|
+
|
|
59
|
+
/*----------------------------------------*/
|
|
60
|
+
/* Main UI */
|
|
61
|
+
/*----------------------------------------*/
|
|
62
|
+
|
|
63
|
+
return (
|
|
64
|
+
<div className="Drawer-container">
|
|
65
|
+
<style>{style}</style>
|
|
66
|
+
{children}
|
|
67
|
+
</div>
|
|
68
|
+
);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/*------------------------------------------------------------------------*/
|
|
72
|
+
/* Wrap Up */
|
|
73
|
+
/*------------------------------------------------------------------------*/
|
|
74
|
+
|
|
75
|
+
// Export component
|
|
76
|
+
export default Drawer;
|
|
@@ -63,9 +63,9 @@ const ErrorBox: React.FC<Props> = (props) => {
|
|
|
63
63
|
<span
|
|
64
64
|
style={{
|
|
65
65
|
backgroundColor: 'white',
|
|
66
|
-
borderRadius: '
|
|
67
|
-
paddingLeft: '
|
|
68
|
-
paddingRight: '
|
|
66
|
+
borderRadius: '0.3rem',
|
|
67
|
+
paddingLeft: '0.2rem',
|
|
68
|
+
paddingRight: '0.2rem',
|
|
69
69
|
color: '#DC4150',
|
|
70
70
|
fontVariant: 'small-caps',
|
|
71
71
|
fontSize: '80%',
|
|
@@ -85,7 +85,7 @@ const ErrorBox: React.FC<Props> = (props) => {
|
|
|
85
85
|
<div
|
|
86
86
|
className="alert alert-danger text-center"
|
|
87
87
|
style={{
|
|
88
|
-
maxWidth: '
|
|
88
|
+
maxWidth: '40rem',
|
|
89
89
|
margin: 'auto',
|
|
90
90
|
}}
|
|
91
91
|
>
|
|
@@ -20,10 +20,10 @@ const style = `
|
|
|
20
20
|
.LoadingSpinner-blip-2,
|
|
21
21
|
.LoadingSpinner-blip-3,
|
|
22
22
|
.LoadingSpinner-blip-4 {
|
|
23
|
-
font-size:
|
|
23
|
+
font-size: 1.8rem;
|
|
24
24
|
opacity: 0.6;
|
|
25
|
-
margin-top:
|
|
26
|
-
margin-bottom:
|
|
25
|
+
margin-top: 1rem;
|
|
26
|
+
margin-bottom: 1rem;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
/* First Blip */
|