nitro-web 0.0.199 → 0.0.201
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/.eslintrc.json +1 -1
- package/client/index.ts +1 -1
- package/components/partials/element/avatar.tsx +1 -1
- package/components/partials/form/location.tsx +6 -4
- package/components/partials/form/select.tsx +36 -13
- package/package.json +1 -1
- package/server/constants.js +1 -1
- package/types/server/models/company.d.ts +4 -7
- package/types/server/models/company.d.ts.map +1 -1
- package/types/util.d.ts +17 -12
- package/types/util.d.ts.map +1 -1
- package/util.js +35 -15
package/.eslintrc.json
CHANGED
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"allowObject": true
|
|
42
42
|
}],
|
|
43
43
|
"indent": ["error", 2, { "SwitchCase": 1, "offsetTernaryExpressions": true }],
|
|
44
|
-
"max-len": ["error", { "code":
|
|
44
|
+
"max-len": ["error", { "code": 142, "ignorePattern": "^\\s*(<(rect|path|line)\\s|class=|className=|'|`)" }],
|
|
45
45
|
"no-var": "off",
|
|
46
46
|
"no-prototype-builtins": "off",
|
|
47
47
|
"@typescript-eslint/no-this-alias": "off",
|
package/client/index.ts
CHANGED
|
@@ -50,7 +50,7 @@ export { type FieldColorProps } from '../components/partials/form/field-color'
|
|
|
50
50
|
export { type FieldCurrencyProps } from '../components/partials/form/field-currency'
|
|
51
51
|
export { type FieldDateProps } from '../components/partials/form/field-date'
|
|
52
52
|
export { Location } from '../components/partials/form/location'
|
|
53
|
-
export { Select, getSelectClassName, type SelectProps, type SelectOption } from '../components/partials/form/select'
|
|
53
|
+
export { Select, getSelectClassName, type SelectProps, type SelectOption, type SelectedOption } from '../components/partials/form/select'
|
|
54
54
|
|
|
55
55
|
// Component Other Components
|
|
56
56
|
export { IsFirstRender } from '../components/partials/is-first-render'
|
|
@@ -34,7 +34,7 @@ export function Avatar({ awsUrl, isRound, user, showPlaceholderImage, className
|
|
|
34
34
|
? <img class={classes} src={s3Image(awsUrl, user.avatar, 'small')} />
|
|
35
35
|
: showPlaceholderImage
|
|
36
36
|
? <img class={classes} src={avatarImg} width="30px" />
|
|
37
|
-
: <Initials className={classes}
|
|
37
|
+
: <Initials className={classes} initials={getInitials(user)} color={getHex(user)} isRound={isRound} />
|
|
38
38
|
)
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -117,20 +117,22 @@ export function Location({ clear, id, name, onInput, onSelect, placeholder, plac
|
|
|
117
117
|
if (clear) setInputValue('')
|
|
118
118
|
else setInputValue(place.formatted_address)
|
|
119
119
|
const addressObject = formatAddressObject(place)
|
|
120
|
+
// removed: line1 (unit/number street)
|
|
121
|
+
// removed: line2 (suburb, postcode)
|
|
122
|
+
// removed: unit
|
|
120
123
|
onSelect({
|
|
121
124
|
city: addressObject.city,
|
|
122
125
|
country: addressObject.country,
|
|
123
|
-
line1: [[addressObject.unit, addressObject.number].filter(o=>o).join('/'), addressObject.street].join(' '),
|
|
124
|
-
line2: [addressObject.suburb, addressObject.postcode].filter(o=>o).join(', '),
|
|
125
126
|
full: place.formatted_address,
|
|
126
|
-
number: addressObject.number,
|
|
127
|
+
number: [addressObject.unit,addressObject.number].filter(o=>o).join('/'),
|
|
127
128
|
postcode: addressObject.postcode,
|
|
129
|
+
region: addressObject.region,
|
|
130
|
+
street: addressObject.street,
|
|
128
131
|
suburb: addressObject.suburb,
|
|
129
132
|
location: {
|
|
130
133
|
coordinates: [place.geometry.location.lng(), place.geometry.location.lat()],
|
|
131
134
|
type: 'Point',
|
|
132
135
|
},
|
|
133
|
-
unit: addressObject.unit,
|
|
134
136
|
area: !util.deepFind(place, 'geometry.viewport') ? undefined : {
|
|
135
137
|
bottomLeft: [
|
|
136
138
|
place.geometry.viewport.getSouthWest().lng(),
|
|
@@ -32,10 +32,14 @@ export type SelectOption = {
|
|
|
32
32
|
fixed?: boolean,
|
|
33
33
|
IconLeft?: React.ReactNode,
|
|
34
34
|
flag?: string | React.ReactNode,
|
|
35
|
+
className?: string,
|
|
35
36
|
data?: { [key: string]: unknown }
|
|
36
37
|
}
|
|
38
|
+
|
|
39
|
+
export type SelectedOption = SelectOption | null
|
|
40
|
+
|
|
37
41
|
/** Select (all other props are passed to react-select) **/
|
|
38
|
-
export type SelectProps = {
|
|
42
|
+
export type SelectProps<IsMulti extends boolean = false> = {
|
|
39
43
|
/** field name or path on state (used to match errors), e.g. 'date', 'company.email' **/
|
|
40
44
|
name: string
|
|
41
45
|
/** inputId, the name is used if not provided **/
|
|
@@ -46,8 +50,10 @@ export type SelectProps = {
|
|
|
46
50
|
minMenuWidth?: number
|
|
47
51
|
/** The prefix to add to the input **/
|
|
48
52
|
prefix?: string
|
|
49
|
-
/**
|
|
50
|
-
|
|
53
|
+
/** Whether multiple values can be selected **/
|
|
54
|
+
isMulti?: IsMulti
|
|
55
|
+
/** The onChange handler (option should really ref options using ts generics) **/
|
|
56
|
+
onChange?: (event: { target: { name: string, value: unknown } }, option: IsMulti extends true ? SelectOption[] : SelectedOption) => void
|
|
51
57
|
/** The options to display in the dropdown, data is used to pass additional data to the option **/
|
|
52
58
|
options: SelectOption[]
|
|
53
59
|
/** The state object to get the value and check errors from **/
|
|
@@ -68,13 +74,13 @@ export type SelectProps = {
|
|
|
68
74
|
|
|
69
75
|
export const Select = memo(SelectBase, (prev, next) => {
|
|
70
76
|
return isFieldCached(prev, next)
|
|
71
|
-
})
|
|
77
|
+
}) as <IsMulti extends boolean = false>(props: SelectProps<IsMulti>) => React.ReactElement | null
|
|
72
78
|
|
|
73
|
-
function SelectBase({
|
|
79
|
+
function SelectBase<IsMulti extends boolean = false>({
|
|
74
80
|
id, containerId, minMenuWidth, name, prefix='', onChange, options, state, mode='', errorTitle, classNames: classNamesProp,
|
|
75
81
|
showSearchIcon, className,
|
|
76
82
|
...props
|
|
77
|
-
}: SelectProps) {
|
|
83
|
+
}: SelectProps<IsMulti>) {
|
|
78
84
|
let value: unknown|unknown[]
|
|
79
85
|
const error = getErrorFromState(state, errorTitle || name)
|
|
80
86
|
if (!name) throw new Error('Select component requires a `name` and `options` prop')
|
|
@@ -89,6 +95,7 @@ function SelectBase({
|
|
|
89
95
|
|
|
90
96
|
// Input is always controlled if state is passed in
|
|
91
97
|
if (typeof state == 'object' && typeof value == 'undefined') value = ''
|
|
98
|
+
else if (typeof value == 'undefined') value = null // new
|
|
92
99
|
|
|
93
100
|
// Merge class names (up to 1 level deep)
|
|
94
101
|
const classNames = useMemo(() => {
|
|
@@ -126,7 +133,6 @@ function SelectBase({
|
|
|
126
133
|
* menuIsOpen={false}
|
|
127
134
|
*/
|
|
128
135
|
{...props}
|
|
129
|
-
// @ts-expect-error
|
|
130
136
|
_nitro={{ prefix, mode, showSearchIcon }}
|
|
131
137
|
key={value as string}
|
|
132
138
|
unstyled={true}
|
|
@@ -140,14 +146,31 @@ function SelectBase({
|
|
|
140
146
|
menuPlacement="auto"
|
|
141
147
|
minMenuHeight={250}
|
|
142
148
|
onChange={!onChange ? undefined : (o) => {
|
|
143
|
-
//
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
149
|
+
// An array is returned for multi-select
|
|
150
|
+
type OptionType = IsMulti extends true ? SelectOption[] : SelectedOption
|
|
151
|
+
let value: unknown | unknown[] = []
|
|
152
|
+
let optionCopy = [] as unknown as OptionType
|
|
153
|
+
|
|
154
|
+
if (Array.isArray(o)) {
|
|
155
|
+
for (const v of o) {
|
|
156
|
+
const isObject = typeof v == 'object' && v !== null && 'value' in v;
|
|
157
|
+
(optionCopy as OptionType[]).push(isObject ? { ...v } : v);
|
|
158
|
+
(value as unknown[]).push(isObject ? v.value : v)
|
|
159
|
+
}
|
|
160
|
+
} else {
|
|
161
|
+
const isObject = typeof o == 'object' && o !== null && 'value' in o
|
|
162
|
+
value = isObject ? o.value : o
|
|
163
|
+
optionCopy = (isObject ? { ...o } : o) as OptionType
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return onChange(
|
|
167
|
+
{ target: { name: name, value: value }},
|
|
168
|
+
optionCopy
|
|
169
|
+
)
|
|
148
170
|
}}
|
|
149
171
|
options={options}
|
|
150
172
|
value={value}
|
|
173
|
+
// @ts-expect-error
|
|
151
174
|
classNames={useMemo(() => ({
|
|
152
175
|
// Input container
|
|
153
176
|
control: (p) => getSelectClassName({ name: 'control', hasError: !!error, ...p, classNames: classNames }),
|
|
@@ -263,7 +286,7 @@ function SingleValue({ children, ...props }: SingleValueProps) {
|
|
|
263
286
|
}
|
|
264
287
|
|
|
265
288
|
function Option(props: OptionProps) {
|
|
266
|
-
const data = props.data as
|
|
289
|
+
const data = props.data as SelectOption
|
|
267
290
|
// const _nitro = (props.selectProps as { _nitro?: { mode?: string } })?._nitro
|
|
268
291
|
// @ts-expect-error
|
|
269
292
|
const flagClassName = props.getClassNames('flag')
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nitro-web",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.201",
|
|
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/server/constants.js
CHANGED
|
@@ -67,7 +67,7 @@ export const currencies = {
|
|
|
67
67
|
twd: { name: 'New Taiwan Dollar', symbol: 'NT$', digits: 2, flag: '🇹🇼' },
|
|
68
68
|
uah: { name: 'Ukrainian Hryvnia', symbol: '₴', digits: 2, flag: '🇺🇦' },
|
|
69
69
|
vnd: { name: 'Vietnamese Dong', symbol: '₫', digits: 0, flag: '🇻🇳' },
|
|
70
|
-
zar: { name: 'South African Rand', symbol: 'R', digits: 2, flag: '🇿🇦' }
|
|
70
|
+
zar: { name: 'South African Rand', symbol: 'R', digits: 2, flag: '🇿🇦' },
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
/** @type {{ [key in Country]: { name: string, flag: string } }} */
|
|
@@ -13,24 +13,21 @@ declare namespace _default {
|
|
|
13
13
|
type: string;
|
|
14
14
|
index: string;
|
|
15
15
|
};
|
|
16
|
-
|
|
16
|
+
number: {
|
|
17
17
|
type: string;
|
|
18
18
|
};
|
|
19
|
-
|
|
19
|
+
postcode: {
|
|
20
20
|
type: string;
|
|
21
21
|
};
|
|
22
|
-
|
|
22
|
+
region: {
|
|
23
23
|
type: string;
|
|
24
24
|
};
|
|
25
|
-
|
|
25
|
+
street: {
|
|
26
26
|
type: string;
|
|
27
27
|
};
|
|
28
28
|
suburb: {
|
|
29
29
|
type: string;
|
|
30
30
|
};
|
|
31
|
-
unit: {
|
|
32
|
-
type: string;
|
|
33
|
-
};
|
|
34
31
|
area: {
|
|
35
32
|
bottomLeft: {
|
|
36
33
|
type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"company.d.ts","sourceRoot":"","sources":["../../../server/models/company.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"company.d.ts","sourceRoot":"","sources":["../../../server/models/company.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA+CgB,sCAEX;QACc;;;;;;;;;;;;;;;;;;;;;;;YAyBd"}
|
package/types/util.d.ts
CHANGED
|
@@ -13,24 +13,21 @@ export function addressSchema(): {
|
|
|
13
13
|
type: string;
|
|
14
14
|
index: string;
|
|
15
15
|
};
|
|
16
|
-
|
|
16
|
+
number: {
|
|
17
17
|
type: string;
|
|
18
18
|
};
|
|
19
|
-
|
|
19
|
+
postcode: {
|
|
20
20
|
type: string;
|
|
21
21
|
};
|
|
22
|
-
|
|
22
|
+
region: {
|
|
23
23
|
type: string;
|
|
24
24
|
};
|
|
25
|
-
|
|
25
|
+
street: {
|
|
26
26
|
type: string;
|
|
27
27
|
};
|
|
28
28
|
suburb: {
|
|
29
29
|
type: string;
|
|
30
30
|
};
|
|
31
|
-
unit: {
|
|
32
|
-
type: string;
|
|
33
|
-
};
|
|
34
31
|
area: {
|
|
35
32
|
bottomLeft: {
|
|
36
33
|
type: string;
|
|
@@ -110,13 +107,21 @@ export function capitalise(str?: string): string;
|
|
|
110
107
|
/**
|
|
111
108
|
* Formats a currency string
|
|
112
109
|
* @param {number} cents
|
|
113
|
-
* @param {
|
|
114
|
-
* @param {
|
|
115
|
-
* @param {
|
|
116
|
-
* @param {
|
|
110
|
+
* @param {object} [options]
|
|
111
|
+
* @param {string} [options.currency='usd'] - prefix and decimals auto-retrieved from the default currencies
|
|
112
|
+
* @param {number} [options.decimals] - number of decimals to display
|
|
113
|
+
* @param {number} [options.decimalsMinimum] - minimum number of decimals to display
|
|
114
|
+
* @param {string} [options.prefix]
|
|
115
|
+
* @param {string} [options.suffix]
|
|
117
116
|
* @returns {string}
|
|
118
117
|
*/
|
|
119
|
-
export function currency(cents: number,
|
|
118
|
+
export function currency(cents: number, options?: {
|
|
119
|
+
currency?: string;
|
|
120
|
+
decimals?: number;
|
|
121
|
+
decimalsMinimum?: number;
|
|
122
|
+
prefix?: string;
|
|
123
|
+
suffix?: string;
|
|
124
|
+
}): string;
|
|
120
125
|
/**
|
|
121
126
|
* Converts a currency string to cents
|
|
122
127
|
* @param {string} currency string, e.g. '$1,234.00'
|
package/types/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../util.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../util.js"],"names":[],"mappings":"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"}
|
package/util.js
CHANGED
|
@@ -4,6 +4,7 @@ import { format } from 'date-fns'
|
|
|
4
4
|
import { TZDate } from '@date-fns/tz'
|
|
5
5
|
import { loadStripe } from '@stripe/stripe-js/pure.js' // pure removes ping
|
|
6
6
|
import { twMerge as _twMerge, twJoin, createTailwindMerge, getDefaultConfig } from 'tailwind-merge'
|
|
7
|
+
import { currencies } from 'nitro-web/constants'
|
|
7
8
|
|
|
8
9
|
// Re-export TZDate
|
|
9
10
|
export { TZDate } from '@date-fns/tz'
|
|
@@ -54,21 +55,25 @@ let axiosInstance
|
|
|
54
55
|
*/
|
|
55
56
|
export function addressSchema () {
|
|
56
57
|
// Google autocomplete should return the following object
|
|
58
|
+
//
|
|
57
59
|
/** @param {any} array @param {object} schema @returns {[]} */
|
|
58
60
|
function arrayWithSchema (array, schema) {
|
|
59
61
|
array.schema = schema
|
|
60
62
|
return array
|
|
61
63
|
}
|
|
62
64
|
return {
|
|
65
|
+
// removed: line1 (unit/number street)
|
|
66
|
+
// removed: line2 (suburb, postcode)
|
|
67
|
+
// removed: unit
|
|
68
|
+
// added: region
|
|
63
69
|
city: { type: 'string' },
|
|
64
70
|
country: { type: 'string', default: 'New Zealand' },
|
|
65
71
|
full: { type: 'string', index: 'text' },
|
|
66
|
-
line1: { type: 'string' },
|
|
67
|
-
line2: { type: 'string' },
|
|
68
72
|
number: { type: 'string' },
|
|
69
73
|
postcode: { type: 'string' },
|
|
74
|
+
region: { type: 'string' },
|
|
75
|
+
street: { type: 'string' },
|
|
70
76
|
suburb: { type: 'string' },
|
|
71
|
-
unit: { type: 'string' },
|
|
72
77
|
// Google places viewport
|
|
73
78
|
area: {
|
|
74
79
|
bottomLeft: [{ type: 'number' }], // lng, lat
|
|
@@ -198,20 +203,33 @@ export function capitalise (str) {
|
|
|
198
203
|
/**
|
|
199
204
|
* Formats a currency string
|
|
200
205
|
* @param {number} cents
|
|
201
|
-
* @param {
|
|
202
|
-
* @param {
|
|
203
|
-
* @param {
|
|
204
|
-
* @param {
|
|
206
|
+
* @param {object} [options]
|
|
207
|
+
* @param {string} [options.currency='usd'] - prefix and decimals auto-retrieved from the default currencies
|
|
208
|
+
* @param {number} [options.decimals] - number of decimals to display
|
|
209
|
+
* @param {number} [options.decimalsMinimum] - minimum number of decimals to display
|
|
210
|
+
* @param {string} [options.prefix]
|
|
211
|
+
* @param {string} [options.suffix]
|
|
205
212
|
* @returns {string}
|
|
206
213
|
*/
|
|
207
|
-
export function currency (cents,
|
|
208
|
-
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
214
|
+
export function currency (cents, options) {
|
|
215
|
+
const { currency, decimals, decimalsMinimum, prefix, suffix } = options || { currency: 'usd' }
|
|
216
|
+
const currencyObject = currencies[/**@type {keyof typeof currencies}*/(currency)]
|
|
217
|
+
|
|
218
|
+
if (currency && !currencyObject) {
|
|
219
|
+
throw new Error(`Currency ${currency} not found in default currencies, please pass custom format options`)
|
|
220
|
+
} else if (!currency && typeof decimals === 'undefined') {
|
|
221
|
+
throw new Error('currency: When passing custom options, you must include a `currency` or `decimals` option')
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
const _prefix = prefix ?? typeof suffix === 'undefined' ? currencyObject?.symbol : ''
|
|
225
|
+
const _decimals = decimals ?? currencyObject?.digits
|
|
226
|
+
let displayNum = Number(cents / Math.pow(10, _decimals))
|
|
227
|
+
if (!isNumber(displayNum)) displayNum = 0
|
|
228
|
+
|
|
229
|
+
return _prefix + displayNum.toLocaleString(undefined, {
|
|
230
|
+
minimumFractionDigits: typeof decimalsMinimum == 'undefined' ? _decimals : decimalsMinimum,
|
|
231
|
+
maximumFractionDigits: _decimals,
|
|
232
|
+
}) + (suffix || '')
|
|
215
233
|
}
|
|
216
234
|
|
|
217
235
|
/**
|
|
@@ -898,6 +916,7 @@ export function getDirectories (path, pwd) {
|
|
|
898
916
|
distDir: path.join(_pwd, process.env.distDir || ((process.env.clientDir || 'client') + '/dist'), '/'),
|
|
899
917
|
emailTemplateDir: path.join(_pwd, process.env.emailTemplateDir || 'server/email', '/'),
|
|
900
918
|
imgsDir: path.join(_pwd, (process.env.clientDir || 'client'), 'imgs', '/'),
|
|
919
|
+
fontsDir: path.join(_pwd, (process.env.clientDir || 'client'), 'fonts', '/'),
|
|
901
920
|
tmpDir: path.join(_pwd, process.env.tmpDir || 'tmp', '/'),
|
|
902
921
|
}
|
|
903
922
|
}
|
|
@@ -934,6 +953,7 @@ export function getResponseErrors (errs) {
|
|
|
934
953
|
|
|
935
954
|
// new Error
|
|
936
955
|
} else if (errs instanceof Error || errs === null) {
|
|
956
|
+
console.error('getResponseErrors(): ', errs)
|
|
937
957
|
return [{ title: 'error', detail: 'Oops there was an error' }]
|
|
938
958
|
|
|
939
959
|
// Mongo errors (when called on the backend)
|