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.
@@ -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={<>Reset your Password</>} />
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(setState, e)} placeholder="Your email address..." />
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={<>Reset your Password</>} />
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(setState, e)} />
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(setState, e)} />
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={<>Sign in to your Account</>} />
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(setState, e)}
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(setState, e)}/>
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={<>Start your 21 day Free Trial</>} />
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(setState, e)}
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(setState, e)} />
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(setState, e)} placeholder="Your email address..." />
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(setState, e)}/>
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(setState, e)
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(setState, e)} />
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(setFilterState, e)
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(setState, e)} />
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(setState, e)}
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(setState, e)}
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(setState, e)}
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(setState, e)} />
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(setState, e)} />
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(setState, e)} />
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(setState, e)}
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(setState, e)} />
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(setState, e)}
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(setState, e)} dir="bottom-right" />
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(setState, e)} />
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(setState, e)} awsUrl={injectedConfig.awsUrl} />
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(setState, { target: { name: 'calendar', value: value } })
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(setState, e)}
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.135",
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
- * Updates state from an input event (deep state properties are supported)
501
- * E.g. setState(s => ({ ...s, [e.target.id]: e.target.value }))
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 {{target: {name: string, value: unknown}}|[string, function|unknown]} eventOrPathValue
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(setState, e)} />
512
- * - <input onChange={() => onChange(setState, ['address.name', 'Joe'])} />
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>>, eventOrPathValue: {
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]: string }} query - req.query
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]: 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: number;
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] - if limit is falsy, exclude limit and skip to fetch regardless of pagination
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
  */
@@ -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":"AA2CA;;GAEG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BC;AAED;;;;;;;;;GASG;AACH,yBARa,sBAAsB,CAoBlC;AAED;;;;;GAKG;AACH,8BAJW,MAAM,cACN;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAC,GACrB,MAAM,CAKlB;AAED;;;;;;GAMG;AACH,+BALW,MAAM,oBACN,OAAO,gBACP,OAAO,GACL,MAAM,CAelB;AAED;;;;;GAKG;AACH,sCAJW,MAAM,wBACN,OAAO,GACL,MAAM,CAMlB;AAED;;;;GAIG;AACH,sCAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;GAIG;AACH,iCAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;GAMG;AACH,gCALW,MAAM,aACN,MAAM,oBACN,MAAM,GACJ,MAAM,CAUlB;AAED;;;;GAIG;AACH,0CAHW,MAAM,GACJ,MAAM,CAMlB;AAED;;;;;;;;;;;GAWG;AACH,4BAVW,MAAM,GAAC,IAAI,WACX,MAAM,aACN,MAAM,GACJ,MAAM,CAsBlB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,yBAnBuC,CAAC,SAA3B,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAI,QAI3B,CAAC,SACD,MAAM,YACN;IACN,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,GACS,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG;IACpD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,CAAA;CAC7B,CAwKH;AAED;;;;;GAKG;AACH,yBAJa,CAAC,OACH,CAAC,GACC,CAAC,CAgBb;AAED;;;;;GAKG;AACH,8BAJW,MAAM,GAAC,GAAG,EAAE,QACZ,MAAM,GACJ,OAAO,CAgBnB;AAED;;;;;;;GAOG;AACH,wBANa,CAAC,OACH,CAAC,QACD,MAAM,SACN,OAAO,WAAS,GACd,CAAC,CAKb;AAED;;;;;;;GAOG;AACH,gCANa,CAAC,QACH,CAAC,QACD,MAAM,SACN,OAAO,WAAS,GACd;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,CAAC,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAgCpD;AAED;;;;;;GAMG;AACH,0BALW;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAC,GAAC,EAAE,GAAC,IAAI,gCAE5B,MAAM,GACJ,MAAM,GAAC,EAAE,GAAC,IAAI,CAmB1B;AAED;;;;;;;;;GASG;AACH,mCARW,MAAM,GAAC,IAAI,GAAC,IAAI,GAAC,UAAU,CAAC,WAAW,CAAC,YACxC,MAAM,SACN,MAAM,QACN,MAAM,GACJ,IAAI,CA+BhB;AAED;;;;;GAKG;AACH,mCAJW,MAAM,iBACN,OAAO,GACL,MAAM,CAMlB;AAED;;;;GAIG;AACH,mCAHW,MAAM,GACJ,MAAM,CAWlB;AAED;;;;;;;;GAQG;AACH,8BAPW,MAAM,QACN;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAE,qBAC5G,QAAQ,cACR,MAAM,GACJ,QAAQ,CAwEpB;AAED;;;;GAIG;AACH,iCAHW;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,GACnC,MAAM,CAIlB;AAED;;;;GAIG;AACH,sCAHW,MAAM,GACJ,MAAM,EAAE,CASpB;AAED;;;;GAIG;AACH,6CAHW;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACjC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAS5D;AAED;;;;GAIG;AACH,+CAHW;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACjC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAS9C;AAED;;;;;GAKG;AACH,yCAJW;IAAE,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,GAAC,SAAS,QAC1D,MAAM,GAAC,MAAM,GACX;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAC,SAAS,CAQvD;AAED;;;;;GAKG;AACH,uCAJW,MAAM,iBACN,MAAM,GACJ,MAAM,CAYlB;AAED;;;;;GAKG;AACH,qCAJW;IAAE,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,QACvC,MAAM,GACJ,MAAM,CAYlB;AAED;;;;GAIG;AACH,6DAHW,MAAM,GACJ,OAAO,CAAC,OAAO,mBAAmB,EAAE,MAAM,GAAC,IAAI,CAAC,CAI5D;AAED;;;;;;GAMG;AACH,wCAHW,aAAa,GACX,UAAU,EAAE,CAgCxB;AAED;;;;GAIG;AACH,4CAHW,UAAU,EAAE,GAAC,SAAS,GACpB,MAAM,CAMlB;AAED;;;;;;GAMG;AACH,+BALW,GAAG,EAAE,UACL,OAAO,QACP,MAAM,GACJ,OAAO,CAcnB;AAED;;;;GAIG;AACH,kCAHW,OAAO,GACL,OAAO,CAInB;AAED;;;;GAIG;AACH,iCAHW,OAAO,GACL,OAAO,CAInB;AAED;;;;GAIG;AACH,oCAHW,OAAO,GACL,OAAO,CAInB;AAED;;;;GAIG;AACH,+BAHW,MAAM,GACJ,OAAO,CAMnB;AAED;;;;;GAKG;AACH,8BAJW;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAC,GAAC,IAAI,qBAC7B,OAAO,GACL,OAAO,CASnB;AAED;;;;GAIG;AACH,qCAHW,OAAO,GACL,OAAO,CAInB;AAED;;;;GAIG;AACH,+BAHW,OAAO,GACL,OAAO,CAmBnB;AAED;;;;GAIG;AACH,mCAHW,OAAO,GACL,OAAO,CAInB;AAED;;;;GAIG;AACH,mCAHW,OAAO,GACL,OAAO,CAKnB;AAED;;;;GAIG;AACH,kCAHW,OAAO,GACL,OAAO,CAInB;AAED;;;;GAIG;AACH,mCAHW,OAAO,GACL,OAAO,CAInB;AAED;;;;GAIG;AACH,gCAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;GAMG;AACH,kCALW,MAAM,QACN,MAAM,iBACN,OAAO,GACL,MAAM,CAalB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,qCAxBW,MAAM,mBACN,KAAK,GAAC,GAAG,aACT,KAAK,GACH,CAAC,KAAK,EAAE,KAAK,CAAC,GAAC,IAAI,CAuC/B;AAED;;;;;;;;;GASG;AACH,qDARW;IACN,IAAI,CAAC,EAAE;QAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAC,CAAA;IACjE,QAAQ,CAAC,EAAE;QAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAC,CAAA;CAC3C,MACO,MAAM,UACN,MAAM,OA+ChB;AAED;;;;;GAKG;AACH,6CAJW,MAAM,EAAE,UACR,MAAM,EAAE,GACP,MAAM,CAgBjB;AAED;;;;GAIG;AACH,kCAHW;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,MACtB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,KAAK,GAAG;;EAS1C;AAED;;;;;GAKG;AACH,0BAJW;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,UAC1B,MAAM,EAAE,GACN;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAStC;AAED;;GAEG;AAEH;;;;;;;;;;;;;GAaG;AACH,yBAXa,CAAC,oBACH,gBAAgB,YAChB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,mBACvC,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,8BAEzB,OAAO,CAAC,CAAC,CAAC,CA+CtB;AAED;;;;;;GAMG;AACH,0BALW,MAAM,YACN,MAAM,eACN,MAAM,GACJ,MAAM,CAUlB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,oCAvCW;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,UAY1B;IACV,CAAK,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAC,QAAQ,GAAC,SAAS,GAAC,QAAQ,GAAC,WAAW,GAAC,SAAS,GAAC;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAA;CAC5G;;iBA6BmD,MAAM;;eAAY,MAAM;cAAQ,MAAM;eAAS,MAAM;cAAQ,MAAM;;aAC1G,QAAQ,EAAE;;EA+EzB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wCAhBW;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,GAAC,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,SAMnD;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,UACzC,MAAM,YACN,OAAO;;;;;;EAgCjB;AAED;;;;GAIG;AACH,0BAHW;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,QACtB,MAAM,GAAC,MAAM,GAAC,MAAM,EAAE,GAAC,MAAM,EAAE;;EAiBzC;AAED;;;;;;;;;;;;GAYG;AACH,0CAVW,MAAM,YAEd;IAA0B,iBAAiB,GAAnC,OAAO;IACW,mBAAmB,GAArC,OAAO;IACW,iBAAiB,GAAnC,OAAO;CAEf,GAAU;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAC,IAAI,GAAC,CAAC,MAAM,GAAC,IAAI,CAAC,EAAE,CAAA;CAAC,CAyCxD;AAED;;;;GAIG;AACH,yCAHW,MAAM,GACJ,MAAM,EAAE,CAOpB;AAED;;;;;;;;;GASG;AACH,iCARW;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAC,UACxB,MAAM,YACN;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAC,YAE/B;IAA0B,iBAAiB,GAAnC,OAAO;CAEf,GAAU,MAAM,CAkBlB;AAED;;;;;;;;;;;;GAYG;AACH,+BAXW,MAAM,SACN;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,UACtB;IAAC,cAAc,CAAC,WAAU;CAAC,cAC3B,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,aACnC,QAAQ,GACN,OAAO,CAAC,GAAG,CAAC,CAyDxB;AAED;;;;GAIG;AACH,0CAHW,EAAE,GAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAC,GACrB,EAAE,GAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAC,CAcnC;AAED;;;;;;;;GAQG;AACH,gCANW,MAAM,gBACN,KAAK,EAAE,GAAC,KAAK,SACb,MAAM,MACN,MAAM,GACJ,MAAM,CAclB;AAED;;;;GAIG;AACH,qCAHW,MAAM,GACJ,MAAM,CAMlB;AAED;;;;;;;;GAQG;AACH,yCAPW,MAAM,gBACN,MAAM,wBAEN,MAAM,aADN,MAAM,GAEJ,MAAM,CA8ClB;AAED;;;;;GAKG;AACH,uCAJW,MAAM,cACN,OAAO,GACL,MAAM,CAelB;AAED;;;;;GAKG;AACH,gEAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAMzB;AAED;;;;GAIG;AACH,oDAFW,aAAa,QAKvB;AAED;;;;;GAKG;AACH,sCAJW;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAC,EAAE,OACtB,MAAM,GACJ,MAAM,EAAE,CAQpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,yBAhBuC,CAAC,SAA3B,CAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAI,QAG3B,CAAC,SACD,MAAM,YACN;IACL,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACrB,GACS,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG;IACpD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,CAAA;CAC7B,CAmBH;AAED;;;;;GAKG;AACH,wBAJa,CAAC,YACH,CAAC,GAAG,SAAS,GACX,CAAC,CAAC,SAAS,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CASvC;AAED;;;;GAIG;AACH,6BAHW,MAAM,GACJ,MAAM,CAKlB;AAwED;;;;GAIG;AACH,gCAHW,MAAM,GACJ,MAAM,CAKlB;AA3ED,2FAiEE;;;;4BAzkCW,KAAK,GAAC,UAAU,EAAE,GAAC,UAAU,GAAC,eAAe,GAAC,MAAM,GAAC,GAAG;;;;oBA+NxD,CAAC,MAAM,EAAE,MAAM,CAAC;;;;kBAChB;IAAC,UAAU,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAA;CAAC;+BA0JpC,CAAC;IAAC,MAAM,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAC,CAAA;CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;;;oBAic9D;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC;uBA3kD7D,OAAO,OAAO,EAAE,QAAQ,CAAC,OAAO,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC;;;;4BAI9D,OAAO,OAAO,EAAE,aAAa;;;;iCAC7B,OAAO,OAAO,EAAE,kBAAkB;;;;4BAClC,OAAO,OAAO,EAAE,aAAa;;;;wCAC7B,OAAO,aAAa,EAAE,yBAAyB;;;;0CAG/C,kBAAkB,GAAG;IAAE,aAAa,CAAC,EAAE,yBAAyB,CAAA;CAAE;;;;qCAGlE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG;IACrC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACzG;uBAGW,MAAM;sBACN,CAAC,KAAK,EAAE,MAAM,KAAK,QAAQ;;;;wBAC3B,CAAC,MAAM,GAAC,MAAM,GAAC,OAAO,CAAC,EAAE;yBACzB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;yBACjC;IAAE,MAAM,EAAE,MAAM;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;8BACrC;IAAE,QAAQ,EAAE;QAAE,IAAI,EAAE;YAAE,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAAE"}
package/util.js CHANGED
@@ -1166,60 +1166,62 @@ export function omit (obj, fields) {
1166
1166
  }
1167
1167
 
1168
1168
  /**
1169
- * Updates state from an input event (deep state properties are supported)
1170
- * E.g. setState(s => ({ ...s, [e.target.id]: e.target.value }))
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 {{target: {name: string, value: unknown}}|[string, function|unknown]} eventOrPathValue
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(setState, e)} />
1181
- * - <input onChange={() => onChange(setState, ['address.name', 'Joe'])} />
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, eventOrPathValue, beforeSetState) {
1184
- /** @type {unknown|function} */
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) // we need to assume this is an input
1193
- path = (element.name || element.id)
1195
+ const element = /** @type {HTMLInputElement & {_value?: unknown}} */(eventOrPathValue.target)
1196
+ path = element.name || element.id || ''
1194
1197
  hasFiles = !!element.files
1195
- value = element.files
1196
- ? element.files[0]
1197
- : typeof element._value !== 'undefined'
1198
- ? element._value
1199
- : element.type === 'checkbox'
1200
- ? element.checked
1201
- : element.value
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: newState, parent, fieldName } = deepSetWithInfo({ ...state, ...(hasFiles ? { hasFiles } : {}) }, path, value)
1218
- if (beforeSetState) {
1219
- beforeSetState({ newState, fieldName, parent })
1220
- }
1221
- resolve(/** @type {T} */(newState))
1222
- return /** @type {T} */(newState)
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]: string }} query - req.query
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: number; $lte?: number; }|{ $in: ObjectId[] } }} */
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] - if limit is falsy, exclude limit and skip to fetch regardless of pagination
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
- if (!fields.includes(sortBy)) {
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