nitro-web 0.0.135 → 0.0.138
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/components/auth/reset.tsx +6 -5
- package/components/auth/signin.tsx +4 -3
- package/components/auth/signup.tsx +6 -5
- package/components/partials/styleguide.tsx +19 -19
- package/package.json +1 -1
- package/types/util.d.ts +23 -18
- package/types/util.d.ts.map +1 -1
- package/util.js +43 -36
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Topbar, Field, FormError, Button, request, onChange } from 'nitro-web'
|
|
2
2
|
import { Errors } from 'nitro-web/types'
|
|
3
|
+
import { Fragment } from 'react'
|
|
3
4
|
|
|
4
5
|
type resetInstructionsProps = {
|
|
5
6
|
className?: string,
|
|
@@ -29,12 +30,12 @@ export function ResetInstructions({ className, elements, redirectTo }: resetInst
|
|
|
29
30
|
|
|
30
31
|
return (
|
|
31
32
|
<div className={className}>
|
|
32
|
-
<Topbar title={
|
|
33
|
+
<Topbar title={<Fragment>Reset your Password</Fragment>} />
|
|
33
34
|
|
|
34
35
|
<form onSubmit={onSubmit} class="mb-0">
|
|
35
36
|
<div>
|
|
36
37
|
<label for="email">Email Address</label>
|
|
37
|
-
<Field name="email" type="email" state={state} onChange={(e) => onChange(
|
|
38
|
+
<Field name="email" type="email" state={state} onChange={(e) => onChange(e, setState)} placeholder="Your email address..." />
|
|
38
39
|
</div>
|
|
39
40
|
|
|
40
41
|
<div class="mb-14">
|
|
@@ -76,16 +77,16 @@ export function ResetPassword({ className, elements, redirectTo }: resetInstruct
|
|
|
76
77
|
|
|
77
78
|
return (
|
|
78
79
|
<div className={className}>
|
|
79
|
-
<Topbar title={
|
|
80
|
+
<Topbar title={<Fragment>Reset your Password</Fragment>} />
|
|
80
81
|
|
|
81
82
|
<form onSubmit={onSubmit} class="mb-0">
|
|
82
83
|
<div>
|
|
83
84
|
<label for="password">Your New Password</label>
|
|
84
|
-
<Field name="password" type="password" state={state} onChange={(e) => onChange(
|
|
85
|
+
<Field name="password" type="password" state={state} onChange={(e) => onChange(e, setState)} />
|
|
85
86
|
</div>
|
|
86
87
|
<div>
|
|
87
88
|
<label for="password2">Repeat Your New Password</label>
|
|
88
|
-
<Field name="password2" type="password" state={state} onChange={(e) => onChange(
|
|
89
|
+
<Field name="password2" type="password" state={state} onChange={(e) => onChange(e, setState)} />
|
|
89
90
|
</div>
|
|
90
91
|
|
|
91
92
|
<div class="mb-14">
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Topbar, Field, Button, FormError, request, queryObject, injectedConfig, updateJwt, onChange } from 'nitro-web'
|
|
2
2
|
import { Errors } from 'nitro-web/types'
|
|
3
|
+
import { Fragment } from 'react'
|
|
3
4
|
|
|
4
5
|
type signinProps = {
|
|
5
6
|
className?: string,
|
|
@@ -58,12 +59,12 @@ export function Signin({ className, elements, redirectTo }: signinProps) {
|
|
|
58
59
|
|
|
59
60
|
return (
|
|
60
61
|
<div className={className}>
|
|
61
|
-
<Topbar title={
|
|
62
|
+
<Topbar title={<Fragment>Sign in to your Account</Fragment>} />
|
|
62
63
|
|
|
63
64
|
<form onSubmit={onSubmit} class="mb-0">
|
|
64
65
|
<div>
|
|
65
66
|
<label for="email">Email Address</label>
|
|
66
|
-
<Field name="email" type="email" state={state} onChange={(e) => onChange(
|
|
67
|
+
<Field name="email" type="email" state={state} onChange={(e) => onChange(e, setState)}
|
|
67
68
|
placeholder="Your email address..." />
|
|
68
69
|
</div>
|
|
69
70
|
<div>
|
|
@@ -71,7 +72,7 @@ export function Signin({ className, elements, redirectTo }: signinProps) {
|
|
|
71
72
|
<label for="password">Password</label>
|
|
72
73
|
<Link to="/reset" class="label underline2">Forgot?</Link>
|
|
73
74
|
</div>
|
|
74
|
-
<Field name="password" type="password" state={state} onChange={(e) => onChange(
|
|
75
|
+
<Field name="password" type="password" state={state} onChange={(e) => onChange(e, setState)}/>
|
|
75
76
|
</div>
|
|
76
77
|
|
|
77
78
|
<div class="mb-14">
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Button, Field, FormError, Topbar, request, injectedConfig, onChange } from 'nitro-web'
|
|
2
2
|
import { Errors } from 'nitro-web/types'
|
|
3
|
+
import { Fragment } from 'react'
|
|
3
4
|
|
|
4
5
|
type signupProps = {
|
|
5
6
|
className?: string,
|
|
@@ -35,29 +36,29 @@ export function Signup({ className, elements, redirectTo }: signupProps) {
|
|
|
35
36
|
|
|
36
37
|
return (
|
|
37
38
|
<div className={className}>
|
|
38
|
-
<Topbar title={
|
|
39
|
+
<Topbar title={<Fragment>Start your 21 day Free Trial</Fragment>} />
|
|
39
40
|
|
|
40
41
|
<form onSubmit={onSubmit} class="mb-0">
|
|
41
42
|
<div class="grid grid-cols-2 gap-6">
|
|
42
43
|
<div>
|
|
43
44
|
<label for="name">Your Name</label>
|
|
44
45
|
<Field name="name" placeholder="E.g. Bruce Wayne" state={state}
|
|
45
|
-
onChange={(e) => onChange(
|
|
46
|
+
onChange={(e) => onChange(e, setState)}
|
|
46
47
|
errorTitle={/^(name|firstName|lastName)$/} // if different from `name`
|
|
47
48
|
/>
|
|
48
49
|
</div>
|
|
49
50
|
<div>
|
|
50
51
|
<label for="business.name">Company Name</label>
|
|
51
|
-
<Field name="business.name" placeholder="E.g. Wayne Enterprises" state={state} onChange={(e) => onChange(
|
|
52
|
+
<Field name="business.name" placeholder="E.g. Wayne Enterprises" state={state} onChange={(e) => onChange(e, setState)} />
|
|
52
53
|
</div>
|
|
53
54
|
</div>
|
|
54
55
|
<div>
|
|
55
56
|
<label for="email">Email Address</label>
|
|
56
|
-
<Field name="email" type="email" state={state} onChange={(e) => onChange(
|
|
57
|
+
<Field name="email" type="email" state={state} onChange={(e) => onChange(e, setState)} placeholder="Your email address..." />
|
|
57
58
|
</div>
|
|
58
59
|
<div>
|
|
59
60
|
<label for="password">Password</label>
|
|
60
|
-
<Field name="password" type="password" state={state} onChange={(e) => onChange(
|
|
61
|
+
<Field name="password" type="password" state={state} onChange={(e) => onChange(e, setState)}/>
|
|
61
62
|
</div>
|
|
62
63
|
|
|
63
64
|
<div class="mb-14">
|
|
@@ -130,7 +130,7 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
130
130
|
e.target.value = null // clear the select's selected value
|
|
131
131
|
setTimeout(() => alert('Adding new customer...'), 0)
|
|
132
132
|
}
|
|
133
|
-
onChange(
|
|
133
|
+
onChange(e, setState)
|
|
134
134
|
}
|
|
135
135
|
|
|
136
136
|
const onCustomerSearch = (search: string) => {
|
|
@@ -187,7 +187,7 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
187
187
|
<form class="mb-8 text-left">
|
|
188
188
|
<div>
|
|
189
189
|
<label for="firstName2">First Name</label>
|
|
190
|
-
<Field name="firstName2" state={state} onChange={(e) => onChange(
|
|
190
|
+
<Field name="firstName2" state={state} onChange={(e) => onChange(e, setState)} />
|
|
191
191
|
</div>
|
|
192
192
|
<div>
|
|
193
193
|
<label for="email2">Email Address</label>
|
|
@@ -264,7 +264,7 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
264
264
|
iconPos="left"
|
|
265
265
|
state={filterState}
|
|
266
266
|
onChange={(e) => {
|
|
267
|
-
onChange(
|
|
267
|
+
onChange(e, setFilterState)
|
|
268
268
|
filtersRef.current?.submit()
|
|
269
269
|
}}
|
|
270
270
|
placeholder="Linked search bar..."
|
|
@@ -301,7 +301,7 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
301
301
|
<div>
|
|
302
302
|
<label for="input2">Toggles</label>
|
|
303
303
|
<Checkbox name="input2" type="toggle" text="Toggle sm" subtext="some additional text here." class="!mb-0"
|
|
304
|
-
state={state} onChange={(e) => onChange(
|
|
304
|
+
state={state} onChange={(e) => onChange(e, setState)} />
|
|
305
305
|
<Checkbox name="input3" type="toggle" text="Toggle 22px" subtext="some additional text here." size={22} />
|
|
306
306
|
</div>
|
|
307
307
|
<div>
|
|
@@ -350,7 +350,7 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
350
350
|
{ value: 'black', label: 'Black' },
|
|
351
351
|
{ value: 'white', label: 'White' },
|
|
352
352
|
], [])}
|
|
353
|
-
onChange={(e) => onChange(
|
|
353
|
+
onChange={(e) => onChange(e, setState)}
|
|
354
354
|
/>
|
|
355
355
|
</div>
|
|
356
356
|
<div>
|
|
@@ -361,7 +361,7 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
361
361
|
mode="country"
|
|
362
362
|
state={state}
|
|
363
363
|
options={useMemo(() => [{ value: 'nz', label: 'New Zealand' }, { value: 'au', label: 'Australia' }], [])}
|
|
364
|
-
onChange={(e) => onChange(
|
|
364
|
+
onChange={(e) => onChange(e, setState)}
|
|
365
365
|
/>
|
|
366
366
|
</div>
|
|
367
367
|
<div>
|
|
@@ -398,7 +398,7 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
398
398
|
name="currency"
|
|
399
399
|
state={state}
|
|
400
400
|
options={useMemo(() => (currencies ? getCurrencyOptions(currencies) : [{ value: 'nzd', label: 'New Zealand Dollar' }, { value: 'aud', label: 'Australian Dollar' }]), [])}
|
|
401
|
-
onChange={(e) => onChange(
|
|
401
|
+
onChange={(e) => onChange(e, setState)}
|
|
402
402
|
/>
|
|
403
403
|
</div>
|
|
404
404
|
</div>
|
|
@@ -407,7 +407,7 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
407
407
|
<div class="grid grid-cols-3 gap-x-6 mb-4">
|
|
408
408
|
<div>
|
|
409
409
|
<label for="firstName">First Name</label>
|
|
410
|
-
<Field name="firstName" state={state} onChange={(e) => onChange(
|
|
410
|
+
<Field name="firstName" state={state} onChange={(e) => onChange(e, setState)} />
|
|
411
411
|
</div>
|
|
412
412
|
<div>
|
|
413
413
|
<label for="email">Email Address</label>
|
|
@@ -434,7 +434,7 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
434
434
|
</div>
|
|
435
435
|
<div>
|
|
436
436
|
<label for="address">Input Error</label>
|
|
437
|
-
<Field name="address" placeholder="Address..." state={state} onChange={(e) => onChange(
|
|
437
|
+
<Field name="address" placeholder="Address..." state={state} onChange={(e) => onChange(e, setState)} />
|
|
438
438
|
</div>
|
|
439
439
|
<div>
|
|
440
440
|
<label for="description">Description</label>
|
|
@@ -442,12 +442,12 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
442
442
|
</div>
|
|
443
443
|
<div>
|
|
444
444
|
<label for="brandColor">Brand Color</label>
|
|
445
|
-
<Field name="brandColor" type="color" iconPos="left" state={state} onChange={(e) => onChange(
|
|
445
|
+
<Field name="brandColor" type="color" iconPos="left" state={state} onChange={(e) => onChange(e, setState)} />
|
|
446
446
|
</div>
|
|
447
447
|
<div>
|
|
448
448
|
<label for="amount">Amount ({state.amount})</label>
|
|
449
449
|
<Field
|
|
450
|
-
name="amount" type="currency" state={state} currency={state.currency || 'nzd'} onChange={(e) => onChange(
|
|
450
|
+
name="amount" type="currency" state={state} currency={state.currency || 'nzd'} onChange={(e) => onChange(e, setState)}
|
|
451
451
|
// Example of using a custom format and currencies, e.g.
|
|
452
452
|
format={'¤#,##0.00'}
|
|
453
453
|
currencies={currencies}
|
|
@@ -459,7 +459,7 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
459
459
|
<div class="grid grid-cols-1 gap-x-6 mb-4 sm:grid-cols-3">
|
|
460
460
|
<div>
|
|
461
461
|
<label for="date">Date with time</label>
|
|
462
|
-
<Field name="date-time" type="date" mode="single" showTime={true} state={state} onChange={(e) => onChange(
|
|
462
|
+
<Field name="date-time" type="date" mode="single" showTime={true} state={state} onChange={(e) => onChange(e, setState)} />
|
|
463
463
|
</div>
|
|
464
464
|
<div>
|
|
465
465
|
<label for="date-range">Date range (with prefix & disabled days)</label>
|
|
@@ -469,7 +469,7 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
469
469
|
mode="range"
|
|
470
470
|
prefix="Date:"
|
|
471
471
|
state={state}
|
|
472
|
-
onChange={(e) => onChange(
|
|
472
|
+
onChange={(e) => onChange(e, setState)}
|
|
473
473
|
DayPickerProps={{
|
|
474
474
|
disabled: { after: new Date(Date.now() + 1000 * 60 * 60 * 24 * 45) }
|
|
475
475
|
}}
|
|
@@ -477,11 +477,11 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
477
477
|
</div>
|
|
478
478
|
<div>
|
|
479
479
|
<label for="date">Date multi-select (right aligned)</label>
|
|
480
|
-
<Field name="date" type="date" mode="multiple" state={state} onChange={(e) => onChange(
|
|
480
|
+
<Field name="date" type="date" mode="multiple" state={state} onChange={(e) => onChange(e, setState)} dir="bottom-right" />
|
|
481
481
|
</div>
|
|
482
482
|
<div>
|
|
483
483
|
<label for="time">Time</label>
|
|
484
|
-
<Field name="time" type="time" state={state} onChange={(e) => onChange(
|
|
484
|
+
<Field name="time" type="time" state={state} onChange={(e) => onChange(e, setState)} />
|
|
485
485
|
</div>
|
|
486
486
|
</div>
|
|
487
487
|
|
|
@@ -489,13 +489,13 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
489
489
|
<div class="grid grid-cols-3 gap-x-6 mb-4">
|
|
490
490
|
<div>
|
|
491
491
|
<label for="avatar">Avatar</label>
|
|
492
|
-
<Drop class="is-small" name="avatar" state={state} onChange={(e) => onChange(
|
|
492
|
+
<Drop class="is-small" name="avatar" state={state} onChange={(e) => onChange(e, setState)} awsUrl={injectedConfig.awsUrl} />
|
|
493
493
|
</div>
|
|
494
494
|
<div>
|
|
495
495
|
<label for="calendar">Calendar</label>
|
|
496
496
|
<Calendar mode="range" value={state.calendar} numberOfMonths={1}
|
|
497
497
|
onChange={(value) => {
|
|
498
|
-
onChange(
|
|
498
|
+
onChange({ target: { name: 'calendar', value: value } }, setState)
|
|
499
499
|
}}
|
|
500
500
|
/>
|
|
501
501
|
</div>
|
|
@@ -508,7 +508,7 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
508
508
|
type="search"
|
|
509
509
|
state={state}
|
|
510
510
|
placeholder="Basic table filter..."
|
|
511
|
-
onChange={(e) => onChange(
|
|
511
|
+
onChange={(e) => onChange(e, setState)}
|
|
512
512
|
className="!my-0 [&>input]:font-normal [&>input]:text-xs [&>input]:py-1.5" /////todo: need to allow twmerge here
|
|
513
513
|
/>
|
|
514
514
|
</div>
|
|
@@ -538,7 +538,7 @@ export function Styleguide({ className, elements, children, currencies }: Styleg
|
|
|
538
538
|
rowGap={8}
|
|
539
539
|
rowHeightMin={42}
|
|
540
540
|
rowSideColor={(row) => ({ className: `rounded-l-xl ${statusColors(row?.status as string)}`, width: 10 })}
|
|
541
|
-
rowOnClick={useCallback((row: QuoteExample) => {setStore(s => ({ ...s, message: `Row ${row?._id} clicked` }))}, [setStore])}
|
|
541
|
+
rowOnClick={useCallback((row: QuoteExample) => {setStore((s) => ({ ...s, message: `Row ${row?._id} clicked` }))}, [setStore])}
|
|
542
542
|
generateCheckboxActions={generateCheckboxActions}
|
|
543
543
|
generateTd={generateTd}
|
|
544
544
|
className="mb-5"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nitro-web",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.138",
|
|
4
4
|
"repository": "github:boycce/nitro-web",
|
|
5
5
|
"homepage": "https://boycce.github.io/nitro-web/",
|
|
6
6
|
"description": "Nitro is a battle-tested, modular base project to turbocharge your projects, styled using Tailwind 🚀",
|
package/types/util.d.ts
CHANGED
|
@@ -497,26 +497,23 @@ export function omit(obj: {
|
|
|
497
497
|
[key: string]: unknown;
|
|
498
498
|
};
|
|
499
499
|
/**
|
|
500
|
-
*
|
|
501
|
-
|
|
502
|
-
|
|
500
|
+
* @typedef {({target: {name: string, value: unknown}} | [string, unknown])} EventOrPathValue
|
|
501
|
+
*/
|
|
502
|
+
/**
|
|
503
|
+
* Automatically updates a state object from a field event by using the input name/value (deep paths supported)
|
|
504
|
+
* E.g. setState(s => ({ ...s, [e.target.name]: e.target.value }))
|
|
503
505
|
* @template T
|
|
506
|
+
* @param {EventOrPathValue} eventOrPathValue - The input/select change event or [path, value] to update the state with
|
|
504
507
|
* @param {React.Dispatch<React.SetStateAction<T>>} setState
|
|
505
|
-
* @param {
|
|
506
|
-
* - The input/select change event or path/value pair to update the state with
|
|
508
|
+
* @param {(value: unknown) => unknown} [beforeSetValue] - optional function to change the value before setting the state
|
|
507
509
|
* @param {Function} [beforeSetState] - optional function to run before setting the state
|
|
508
510
|
* @returns {Promise<T>}
|
|
509
511
|
*
|
|
510
|
-
* @example
|
|
511
|
-
* - <input onChange={(e) => onChange(
|
|
512
|
-
* - <input onChange={() => onChange(
|
|
512
|
+
* @example usage:
|
|
513
|
+
* - <input onChange={(e) => onChange(e, setState)} />
|
|
514
|
+
* - <input onChange={() => onChange(['address.name', 'Joe'], setState)} />
|
|
513
515
|
*/
|
|
514
|
-
export function onChange<T>(setState: React.Dispatch<React.SetStateAction<T>>,
|
|
515
|
-
target: {
|
|
516
|
-
name: string;
|
|
517
|
-
value: unknown;
|
|
518
|
-
};
|
|
519
|
-
} | [string, Function | unknown], beforeSetState?: Function): Promise<T>;
|
|
516
|
+
export function onChange<T>(eventOrPathValue: EventOrPathValue, setState: React.Dispatch<React.SetStateAction<T>>, beforeSetValue?: (value: unknown) => unknown, beforeSetState?: Function): Promise<T>;
|
|
520
517
|
/**
|
|
521
518
|
* Pads a number
|
|
522
519
|
* @param {number} [num=0]
|
|
@@ -527,7 +524,7 @@ export function onChange<T>(setState: React.Dispatch<React.SetStateAction<T>>, e
|
|
|
527
524
|
export function pad(num?: number, padLeft?: number, fixedRight?: number): string;
|
|
528
525
|
/**
|
|
529
526
|
* Validates req.query "filters" against a config object, and returns a MongoDB-compatible query object.
|
|
530
|
-
* @param {{ [key: string]:
|
|
527
|
+
* @param {{ [key: string]: unknown }} query - req.query
|
|
531
528
|
* E.g. {
|
|
532
529
|
* location: '10-RS',
|
|
533
530
|
* age: '33',
|
|
@@ -567,7 +564,7 @@ export function pad(num?: number, padLeft?: number, fixedRight?: number): string
|
|
|
567
564
|
* }
|
|
568
565
|
*/
|
|
569
566
|
export function parseFilters(query: {
|
|
570
|
-
[key: string]:
|
|
567
|
+
[key: string]: unknown;
|
|
571
568
|
}, config: {
|
|
572
569
|
[key: string]: "string" | "number" | "boolean" | "search" | "dateRange" | EnumArray | {
|
|
573
570
|
rule: "ids";
|
|
@@ -577,8 +574,10 @@ export function parseFilters(query: {
|
|
|
577
574
|
[key: string]: string | number | boolean | {
|
|
578
575
|
$search: string;
|
|
579
576
|
} | {
|
|
580
|
-
$gte
|
|
577
|
+
$gte?: number;
|
|
578
|
+
$gt?: number;
|
|
581
579
|
$lte?: number;
|
|
580
|
+
$lt?: number;
|
|
582
581
|
} | {
|
|
583
582
|
$in: ObjectId[];
|
|
584
583
|
};
|
|
@@ -592,7 +591,7 @@ export function parseFilters(query: {
|
|
|
592
591
|
* sortBy: 'createdAt'
|
|
593
592
|
* }
|
|
594
593
|
* @param {{ fieldsFlattened: object, name: string }} model - The Monastery model
|
|
595
|
-
* @param {number} [limit=10] -
|
|
594
|
+
* @param {number} [limit=10] - pass 0 to exclude limit/skip, regardless of pagination
|
|
596
595
|
* @param {boolean} [hasMore] - hasMore parameter on parseSortOptions has been deprecated.
|
|
597
596
|
* @example returned object (using the examples above):
|
|
598
597
|
* E.g. {
|
|
@@ -810,6 +809,12 @@ export type Box = {
|
|
|
810
809
|
bottomLeft: Point;
|
|
811
810
|
topRight: Point;
|
|
812
811
|
};
|
|
812
|
+
export type EventOrPathValue = ({
|
|
813
|
+
target: {
|
|
814
|
+
name: string;
|
|
815
|
+
value: unknown;
|
|
816
|
+
};
|
|
817
|
+
} | [string, unknown]);
|
|
813
818
|
/**
|
|
814
819
|
* Build image URL from image array or object
|
|
815
820
|
*/
|
package/types/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../util.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../util.js"],"names":[],"mappings":"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"}
|
package/util.js
CHANGED
|
@@ -1166,60 +1166,62 @@ export function omit (obj, fields) {
|
|
|
1166
1166
|
}
|
|
1167
1167
|
|
|
1168
1168
|
/**
|
|
1169
|
-
*
|
|
1170
|
-
|
|
1171
|
-
|
|
1169
|
+
* @typedef {({target: {name: string, value: unknown}} | [string, unknown])} EventOrPathValue
|
|
1170
|
+
*/
|
|
1171
|
+
|
|
1172
|
+
/**
|
|
1173
|
+
* Automatically updates a state object from a field event by using the input name/value (deep paths supported)
|
|
1174
|
+
* E.g. setState(s => ({ ...s, [e.target.name]: e.target.value }))
|
|
1172
1175
|
* @template T
|
|
1176
|
+
* @param {EventOrPathValue} eventOrPathValue - The input/select change event or [path, value] to update the state with
|
|
1173
1177
|
* @param {React.Dispatch<React.SetStateAction<T>>} setState
|
|
1174
|
-
* @param {
|
|
1175
|
-
* - The input/select change event or path/value pair to update the state with
|
|
1178
|
+
* @param {(value: unknown) => unknown} [beforeSetValue] - optional function to change the value before setting the state
|
|
1176
1179
|
* @param {Function} [beforeSetState] - optional function to run before setting the state
|
|
1177
1180
|
* @returns {Promise<T>}
|
|
1178
1181
|
*
|
|
1179
|
-
* @example
|
|
1180
|
-
* - <input onChange={(e) => onChange(
|
|
1181
|
-
* - <input onChange={() => onChange(
|
|
1182
|
+
* @example usage:
|
|
1183
|
+
* - <input onChange={(e) => onChange(e, setState)} />
|
|
1184
|
+
* - <input onChange={() => onChange(['address.name', 'Joe'], setState)} />
|
|
1182
1185
|
*/
|
|
1183
|
-
export function onChange (setState,
|
|
1184
|
-
/** @type {unknown
|
|
1186
|
+
export function onChange (eventOrPathValue, setState, beforeSetValue, beforeSetState) {
|
|
1187
|
+
/** @type {unknown} */
|
|
1185
1188
|
let value
|
|
1186
1189
|
/** @type {string} */
|
|
1187
1190
|
let path = ''
|
|
1188
|
-
/** @type {boolean} */
|
|
1191
|
+
/** @type {boolean | undefined} */
|
|
1189
1192
|
let hasFiles
|
|
1190
1193
|
|
|
1191
1194
|
if (typeof eventOrPathValue === 'object' && 'target' in eventOrPathValue) {
|
|
1192
|
-
const element = /** @type {HTMLInputElement & {_value?: unknown}} */(eventOrPathValue.target)
|
|
1193
|
-
path =
|
|
1195
|
+
const element = /** @type {HTMLInputElement & {_value?: unknown}} */(eventOrPathValue.target)
|
|
1196
|
+
path = element.name || element.id || ''
|
|
1194
1197
|
hasFiles = !!element.files
|
|
1195
|
-
value =
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1198
|
+
value = (
|
|
1199
|
+
element.files
|
|
1200
|
+
? element.files[0]
|
|
1201
|
+
: typeof element._value !== 'undefined'
|
|
1202
|
+
? element._value
|
|
1203
|
+
: element.type === 'checkbox'
|
|
1204
|
+
? element.checked
|
|
1205
|
+
: element.value
|
|
1206
|
+
)
|
|
1203
1207
|
} else if (Array.isArray(eventOrPathValue)) {
|
|
1204
1208
|
path = eventOrPathValue[0]
|
|
1205
1209
|
value = eventOrPathValue[1]
|
|
1206
1210
|
}
|
|
1207
|
-
|
|
1208
|
-
// Removing leading zero(s) on number fields
|
|
1209
|
-
// if (element.type == 'number' && !isFunction(value) && (value||'').match(/^0+([1-9])/)) {
|
|
1210
|
-
// value = value.replace(/^0+([1-9])/, '$1')
|
|
1211
|
-
// }
|
|
1212
1211
|
|
|
1213
1212
|
// Update state
|
|
1214
1213
|
return new Promise((resolve) => {
|
|
1215
1214
|
setState((state) => {
|
|
1215
|
+
const newValue = beforeSetValue ? beforeSetValue(value) : value
|
|
1216
|
+
const baseState = { ...state, ...(hasFiles ? { hasFiles } : {}) }
|
|
1217
|
+
|
|
1216
1218
|
/** @type {{[key: string]: any}} */
|
|
1217
|
-
const { obj
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
resolve(
|
|
1222
|
-
return
|
|
1219
|
+
const { obj, parent, fieldName } = deepSetWithInfo(baseState, path, newValue)
|
|
1220
|
+
|
|
1221
|
+
const newState = beforeSetState ? beforeSetState({ state: obj, parent: parent, key: fieldName }) : obj
|
|
1222
|
+
|
|
1223
|
+
resolve(newState)
|
|
1224
|
+
return newState
|
|
1223
1225
|
})
|
|
1224
1226
|
})
|
|
1225
1227
|
}
|
|
@@ -1243,7 +1245,7 @@ export function pad (num=0, padLeft=0, fixedRight) {
|
|
|
1243
1245
|
|
|
1244
1246
|
/**
|
|
1245
1247
|
* Validates req.query "filters" against a config object, and returns a MongoDB-compatible query object.
|
|
1246
|
-
* @param {{ [key: string]:
|
|
1248
|
+
* @param {{ [key: string]: unknown }} query - req.query
|
|
1247
1249
|
* E.g. {
|
|
1248
1250
|
* location: '10-RS',
|
|
1249
1251
|
* age: '33',
|
|
@@ -1286,7 +1288,8 @@ export function parseFilters(query, config) {
|
|
|
1286
1288
|
/**
|
|
1287
1289
|
* Should match the example returned object above
|
|
1288
1290
|
* @type {{
|
|
1289
|
-
* [key: string]: string|number|boolean|{ $search: string }|{ $gte
|
|
1291
|
+
* [key: string]: string|number|boolean|{ $search: string }|{ $gte?: number; $gt?: number; $lte?: number; $lt?: number; }|
|
|
1292
|
+
* { $in: ObjectId[] } }} */
|
|
1290
1293
|
const mongoQuery = {}
|
|
1291
1294
|
|
|
1292
1295
|
// Convert splayed array items into a unified array objects, e.g. 'customer.0' = '1' and 'customer.1' = '2' -> 'customer' = '1,2'
|
|
@@ -1300,6 +1303,7 @@ export function parseFilters(query, config) {
|
|
|
1300
1303
|
}
|
|
1301
1304
|
|
|
1302
1305
|
for (const key in query) {
|
|
1306
|
+
if (typeof query[key] !== 'string') continue
|
|
1303
1307
|
const val = query[key]
|
|
1304
1308
|
const rule = config[key]
|
|
1305
1309
|
|
|
@@ -1375,7 +1379,7 @@ export function parseFilters(query, config) {
|
|
|
1375
1379
|
* sortBy: 'createdAt'
|
|
1376
1380
|
* }
|
|
1377
1381
|
* @param {{ fieldsFlattened: object, name: string }} model - The Monastery model
|
|
1378
|
-
* @param {number} [limit=10] -
|
|
1382
|
+
* @param {number} [limit=10] - pass 0 to exclude limit/skip, regardless of pagination
|
|
1379
1383
|
* @param {boolean} [hasMore] - hasMore parameter on parseSortOptions has been deprecated.
|
|
1380
1384
|
* @example returned object (using the examples above):
|
|
1381
1385
|
* E.g. {
|
|
@@ -1391,7 +1395,10 @@ export function parseSortOptions(query, model, limit = 10, hasMore) {
|
|
|
1391
1395
|
// Validate sortBy value
|
|
1392
1396
|
const sortBy = query.sortBy || 'createdAt'
|
|
1393
1397
|
const fields = Object.keys(model.fieldsFlattened)
|
|
1394
|
-
|
|
1398
|
+
|
|
1399
|
+
if (!fields.includes(sortBy) && fields.includes(`${sortBy}.0`)) {
|
|
1400
|
+
throw new Error(`"${sortBy}" is an invalid sortBy value for the "${model.name}" model, please use "${sortBy}.0" to sort array fields.`)
|
|
1401
|
+
} else if (!fields.includes(sortBy)) {
|
|
1395
1402
|
throw new Error(`"${sortBy}" is an invalid sortBy value for the "${model.name}" model.`)
|
|
1396
1403
|
}
|
|
1397
1404
|
|