@flyanra/vue-core 1.0.1 → 1.0.2
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/dist/types/composables/index.d.ts +1 -1
- package/dist/types/utils/index.d.ts +2 -0
- package/package.json +11 -1
- package/src/composables/UseLocaleInjector.ts +18 -0
- package/src/composables/index.ts +1 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/pure-functions.ts +15 -0
- package/src/utils/validators.ts +81 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
export {};
|
|
1
|
+
export { UseLocaleInjector } from './UseLocaleInjector';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flyanra/vue-core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Source-distributed Vue component library for Vite and Nuxt consumers.",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -38,11 +38,21 @@
|
|
|
38
38
|
"types": "./dist/types/composables/*/index.d.ts",
|
|
39
39
|
"import": "./src/composables/*/index.ts"
|
|
40
40
|
},
|
|
41
|
+
"./utils": {
|
|
42
|
+
"types": "./dist/types/utils/index.d.ts",
|
|
43
|
+
"import": "./src/utils/index.ts"
|
|
44
|
+
},
|
|
45
|
+
"./utils/*": {
|
|
46
|
+
"types": "./dist/types/utils/*.d.ts",
|
|
47
|
+
"import": "./src/utils/*.ts"
|
|
48
|
+
},
|
|
41
49
|
"./package.json": "./package.json"
|
|
42
50
|
},
|
|
43
51
|
"types": "./dist/types/index.d.ts",
|
|
44
52
|
"files": [
|
|
45
53
|
"src/components",
|
|
54
|
+
"src/composables",
|
|
55
|
+
"src/utils",
|
|
46
56
|
"src/styles",
|
|
47
57
|
"src/index.ts",
|
|
48
58
|
"dist/types",
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { inject } from 'vue'
|
|
2
|
+
|
|
3
|
+
import { FallbackTranslateFn, I18N_KEY } from '@flyanra/js-utils/constants'
|
|
4
|
+
import type { Locale } from '@flyanra/js-utils/locales'
|
|
5
|
+
import type { ComposerTranslation } from 'vue-i18n'
|
|
6
|
+
|
|
7
|
+
type T_LocaleInjector = {
|
|
8
|
+
t: ComposerTranslation
|
|
9
|
+
locale: Locale
|
|
10
|
+
}
|
|
11
|
+
export function UseLocaleInjector(): T_LocaleInjector {
|
|
12
|
+
const i18n = inject(I18N_KEY)
|
|
13
|
+
|
|
14
|
+
return {
|
|
15
|
+
t: i18n?.t || FallbackTranslateFn,
|
|
16
|
+
locale: (i18n?.locale as Locale | undefined) || 'en'
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { UseLocaleInjector } from './UseLocaleInjector'
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { isArray, isNumber, isString } from 'lodash-es'
|
|
2
|
+
|
|
3
|
+
export function checkRange(value: unknown, min = 0, max = Infinity) {
|
|
4
|
+
if (isString(value) || isArray(value)) {
|
|
5
|
+
if (value.length < min || value.length > max) {
|
|
6
|
+
return false
|
|
7
|
+
}
|
|
8
|
+
} else if (isNumber(value)) {
|
|
9
|
+
if (value < min || value > max) {
|
|
10
|
+
return false
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return true
|
|
15
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { FormItemRule } from 'element-plus'
|
|
2
|
+
|
|
3
|
+
import { UseLocaleInjector } from '../composables/UseLocaleInjector'
|
|
4
|
+
|
|
5
|
+
import { checkRange } from './pure-functions'
|
|
6
|
+
|
|
7
|
+
export const isRequiredError = (languageKey: string) => {
|
|
8
|
+
const { t } = UseLocaleInjector()
|
|
9
|
+
|
|
10
|
+
return t('validation.fieldIsRequired', {
|
|
11
|
+
fieldName: t(languageKey)
|
|
12
|
+
})
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type RangeObject = {
|
|
16
|
+
min?: number
|
|
17
|
+
max?: number
|
|
18
|
+
}
|
|
19
|
+
export const checkInputRange = (
|
|
20
|
+
languageKey: string = 'validation.value',
|
|
21
|
+
range: RangeObject,
|
|
22
|
+
valueTypeLanguageKey: string = 'validation.valueTypes.characters',
|
|
23
|
+
errorMessage?: string
|
|
24
|
+
): FormItemRule['validator'] => {
|
|
25
|
+
const { t } = UseLocaleInjector()
|
|
26
|
+
|
|
27
|
+
// used in element form validator
|
|
28
|
+
return (_rule: unknown, value: unknown, callback: (_?: string | Error | undefined) => void) => {
|
|
29
|
+
// used in element form validator
|
|
30
|
+
if (!checkRange(value, range.min, range.max)) {
|
|
31
|
+
let message = errorMessage
|
|
32
|
+
const l = t ? t(languageKey) : languageKey
|
|
33
|
+
|
|
34
|
+
if (!message) {
|
|
35
|
+
if (range.min === range.max) {
|
|
36
|
+
message = `${
|
|
37
|
+
t
|
|
38
|
+
? t('validation.valueMustBe', {
|
|
39
|
+
value: l,
|
|
40
|
+
validValue: `${range.max} ${t(valueTypeLanguageKey)}`
|
|
41
|
+
})
|
|
42
|
+
: 'validation.valueMustBe'
|
|
43
|
+
}`
|
|
44
|
+
} else if (range.min && !range.max) {
|
|
45
|
+
message = `${
|
|
46
|
+
t
|
|
47
|
+
? t('validation.mustBeGreaterEqual', {
|
|
48
|
+
value: l,
|
|
49
|
+
validRange: `${range.min} ${t(valueTypeLanguageKey)}`
|
|
50
|
+
})
|
|
51
|
+
: 'validation.mustBeGreaterEqual'
|
|
52
|
+
}`
|
|
53
|
+
} else if (!range.min && range.max) {
|
|
54
|
+
message = `${
|
|
55
|
+
t
|
|
56
|
+
? t('validation.cannotExceed', {
|
|
57
|
+
value: l,
|
|
58
|
+
validRange: `${range.max} ${t(valueTypeLanguageKey)}`
|
|
59
|
+
})
|
|
60
|
+
: 'validation.cannotExceed'
|
|
61
|
+
}`
|
|
62
|
+
} else if (range.min && range.max) {
|
|
63
|
+
message = `${
|
|
64
|
+
t
|
|
65
|
+
? t('validation.mustBetween', {
|
|
66
|
+
value: l,
|
|
67
|
+
minRange: `${range.min} ${t(valueTypeLanguageKey)}`,
|
|
68
|
+
maxRange: `${range.max} ${t(valueTypeLanguageKey)}`,
|
|
69
|
+
valueType: `${t(valueTypeLanguageKey)}`
|
|
70
|
+
})
|
|
71
|
+
: 'validation.mustBetween'
|
|
72
|
+
}`
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return callback(new Error(message))
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return callback()
|
|
80
|
+
}
|
|
81
|
+
}
|