@flyanra/vue-core 1.0.0 → 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.
@@ -1 +1 @@
1
- export {};
1
+ export { UseLocaleInjector } from './UseLocaleInjector';
@@ -0,0 +1,2 @@
1
+ export { checkRange } from './pure-functions';
2
+ export { checkInputRange, isRequiredError } from './validators';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flyanra/vue-core",
3
- "version": "1.0.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",
@@ -87,7 +97,7 @@
87
97
  "devDependencies": {
88
98
  "@changesets/cli": "^2.30.0",
89
99
  "@eslint/js": "^10.0.1",
90
- "@flyanra/js-utils": "^1.3.2",
100
+ "@flyanra/js-utils": "^1.5.0",
91
101
  "@iconify-json/ri": "^1.2.10",
92
102
  "@jamescoyle/vue-icon": "^0.1.2",
93
103
  "@mdi/js": "^7.4.47",
@@ -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,2 @@
1
+ export { checkRange } from './pure-functions'
2
+ export { checkInputRange, isRequiredError } from './validators'
@@ -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
+ }