@flyanra/vue-core 1.0.2 → 1.2.0
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/components/navigation/menu/fly-sidebar/FlySidebar.types.d.ts +14 -1
- package/dist/types/components/navigation/menu/fly-sidebar/FlySidebar.vue.d.ts +10 -4
- package/dist/types/composables/UseLocaleInjector.d.ts +7 -1
- package/dist/types/composables/index.d.ts +3 -1
- package/dist/types/composables/useSidebarActiveIndex.d.ts +66 -0
- package/package.json +158 -156
- package/src/components/basic/fly-button/FlyButton.types.ts +28 -28
- package/src/components/basic/fly-button/FlyButton.vue +178 -178
- package/src/components/basic/typography/FlyCollapseTitleRenderer.vue +46 -46
- package/src/components/feedback/tooltip/FlyInfoTooltip.vue +49 -49
- package/src/components/feedback/tooltip/FlyTooltip.element.scss +4 -4
- package/src/components/feedback/tooltip/FlyTooltip.vue +60 -60
- package/src/components/form/form.utils.ts +72 -72
- package/src/components/form/index.ts +6 -6
- package/src/components/form/input-renderers/boolean/FlyBoolean.vue +48 -48
- package/src/components/form/input-renderers/form-item-renderer/FlyFormItemRenderer.vue +48 -48
- package/src/components/form/input-renderers/form-item-renderer/index.ts +4 -4
- package/src/components/form/input-renderers/form-schema-renderer/FlyFormSchemaRenderer.types.ts +3 -3
- package/src/components/form/input-renderers/form-schema-renderer/FlyFormSchemaRenderer.utils.ts +221 -221
- package/src/components/form/input-renderers/form-schema-renderer/FlyFormSchemaRenderer.vue +75 -75
- package/src/components/form/input-renderers/form-schema-renderer/UseFormSchemaRenderer.ts +97 -97
- package/src/components/form/input-renderers/input-renderer/FlyInputRenderer.vue +49 -49
- package/src/components/form/input-renderers/input-renderer/index.ts +4 -4
- package/src/components/form/input-renderers/input-renderer.utils.ts +18 -18
- package/src/components/form/input-renderers/number/FlyNumber.vue +64 -64
- package/src/components/form/input-renderers/regional-tenant-form-renderer/FlyRegionalTenantFormRenderer.types.ts +15 -15
- package/src/components/form/input-renderers/regional-tenant-form-renderer/FlyRegionalTenantFormRenderer.vue +99 -99
- package/src/components/form/input-renderers/select/FlySelect.scss +1 -1
- package/src/components/form/input-renderers/select/FlySelect.utils.ts +37 -37
- package/src/components/form/input-renderers/text/FlyText.vue +70 -70
- package/src/components/form/input-renderers/value-unit/FlyValueUnit.vue +102 -102
- package/src/components/form/input-validators.ts +99 -99
- package/src/components/general/fly-icon-v2/FlyIconV2.types.ts +6 -6
- package/src/components/general/fly-icon-v2/FlyIconV2.vue +17 -17
- package/src/components/general/fly-icon-v2/index.ts +6 -6
- package/src/components/general/index.ts +5 -5
- package/src/components/index.ts +7 -7
- package/src/components/navigation/menu/fly-mini-sidebar/FlyMiniSidebar.types.ts +8 -8
- package/src/components/navigation/menu/fly-mini-sidebar/FlyMiniSidebarItem.vue +55 -55
- package/src/components/navigation/menu/fly-sidebar/FlySidebar.types.ts +49 -36
- package/src/components/navigation/menu/fly-sidebar/FlySidebar.vue +146 -151
- package/src/components/navigation/menu/fly-sidebar/FlySidebarNode.vue +47 -47
- package/src/composables/UseLocaleInjector.ts +37 -18
- package/src/composables/index.ts +4 -1
- package/src/composables/useSidebarActiveIndex.ts +103 -0
- package/src/styles/element/mixins/collapse.scss +61 -61
- package/src/styles/element/overrides/form.scss +121 -121
- package/src/styles/element/overrides/message-box.scss +2 -2
- package/src/styles/element/overrides/radio.scss +2 -2
- package/src/styles/element/overrides/select.scss +9 -9
- package/src/utils/index.ts +2 -2
- package/src/utils/pure-functions.ts +15 -15
- package/src/utils/validators.ts +81 -81
|
@@ -1,72 +1,72 @@
|
|
|
1
|
-
import type { FormInstance } from 'element-plus'
|
|
2
|
-
|
|
3
|
-
import { UseLocaleInjector } from '../../composables/UseLocaleInjector'
|
|
4
|
-
|
|
5
|
-
export type ValidateFieldsError = { [K: string]: { message?: string }[] }
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @returns Translated error message based on active locale
|
|
9
|
-
*/
|
|
10
|
-
export function formFieldErrorMessageFormatter(errors: ValidateFieldsError) {
|
|
11
|
-
const { t, locale } = UseLocaleInjector()
|
|
12
|
-
const keys = Object.keys(errors)
|
|
13
|
-
|
|
14
|
-
if (keys.length) {
|
|
15
|
-
const requiredFieldNames: (string | undefined)[] = []
|
|
16
|
-
const otherErrors: (string | undefined)[] = []
|
|
17
|
-
let formFieldErrorMessage = ''
|
|
18
|
-
|
|
19
|
-
keys.forEach((k) => {
|
|
20
|
-
const msg = errors[k][0].message
|
|
21
|
-
const index = msg?.indexOf(t ? t('validation.isRequired') : 'validation.isRequired')
|
|
22
|
-
|
|
23
|
-
if (index && index >= 0) {
|
|
24
|
-
requiredFieldNames.push(msg?.slice(0, index)?.trim())
|
|
25
|
-
} else {
|
|
26
|
-
otherErrors.push(msg)
|
|
27
|
-
}
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
const requiredFieldsLength = requiredFieldNames.length
|
|
31
|
-
const otherErrorsLength = otherErrors.length
|
|
32
|
-
|
|
33
|
-
if (requiredFieldsLength >= 1) {
|
|
34
|
-
const joinedList = new Intl.ListFormat(locale, {
|
|
35
|
-
style: 'long',
|
|
36
|
-
type: 'conjunction'
|
|
37
|
-
}).format(requiredFieldNames.filter((item): item is string => Boolean(item)))
|
|
38
|
-
|
|
39
|
-
formFieldErrorMessage = t
|
|
40
|
-
? t('validation.requiredFields', {
|
|
41
|
-
field: joinedList,
|
|
42
|
-
count: requiredFieldNames.length
|
|
43
|
-
})
|
|
44
|
-
: joinedList
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (otherErrorsLength) {
|
|
48
|
-
if (formFieldErrorMessage) formFieldErrorMessage += ' || ' // temporary
|
|
49
|
-
otherErrors.forEach((e, i) => {
|
|
50
|
-
formFieldErrorMessage += e + `${i === otherErrorsLength - 1 ? '' : ' || '}` // temporary
|
|
51
|
-
})
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return formFieldErrorMessage
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return t ? t('validation.someInputsInvalid') : 'validation.someInputsInvalid'
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export async function genericFormValidator(formRef: FormInstance): Promise<true> {
|
|
61
|
-
return new Promise((resolve, reject) => {
|
|
62
|
-
formRef.validate((valid, errors) => {
|
|
63
|
-
if (!valid) {
|
|
64
|
-
if (errors) {
|
|
65
|
-
return reject(formFieldErrorMessageFormatter(errors))
|
|
66
|
-
}
|
|
67
|
-
} else {
|
|
68
|
-
return resolve(true)
|
|
69
|
-
}
|
|
70
|
-
})
|
|
71
|
-
})
|
|
72
|
-
}
|
|
1
|
+
import type { FormInstance } from 'element-plus'
|
|
2
|
+
|
|
3
|
+
import { UseLocaleInjector } from '../../composables/UseLocaleInjector'
|
|
4
|
+
|
|
5
|
+
export type ValidateFieldsError = { [K: string]: { message?: string }[] }
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @returns Translated error message based on active locale
|
|
9
|
+
*/
|
|
10
|
+
export function formFieldErrorMessageFormatter(errors: ValidateFieldsError) {
|
|
11
|
+
const { t, locale } = UseLocaleInjector()
|
|
12
|
+
const keys = Object.keys(errors)
|
|
13
|
+
|
|
14
|
+
if (keys.length) {
|
|
15
|
+
const requiredFieldNames: (string | undefined)[] = []
|
|
16
|
+
const otherErrors: (string | undefined)[] = []
|
|
17
|
+
let formFieldErrorMessage = ''
|
|
18
|
+
|
|
19
|
+
keys.forEach((k) => {
|
|
20
|
+
const msg = errors[k][0].message
|
|
21
|
+
const index = msg?.indexOf(t ? t('validation.isRequired') : 'validation.isRequired')
|
|
22
|
+
|
|
23
|
+
if (index && index >= 0) {
|
|
24
|
+
requiredFieldNames.push(msg?.slice(0, index)?.trim())
|
|
25
|
+
} else {
|
|
26
|
+
otherErrors.push(msg)
|
|
27
|
+
}
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
const requiredFieldsLength = requiredFieldNames.length
|
|
31
|
+
const otherErrorsLength = otherErrors.length
|
|
32
|
+
|
|
33
|
+
if (requiredFieldsLength >= 1) {
|
|
34
|
+
const joinedList = new Intl.ListFormat(locale, {
|
|
35
|
+
style: 'long',
|
|
36
|
+
type: 'conjunction'
|
|
37
|
+
}).format(requiredFieldNames.filter((item): item is string => Boolean(item)))
|
|
38
|
+
|
|
39
|
+
formFieldErrorMessage = t
|
|
40
|
+
? t('validation.requiredFields', {
|
|
41
|
+
field: joinedList,
|
|
42
|
+
count: requiredFieldNames.length
|
|
43
|
+
})
|
|
44
|
+
: joinedList
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (otherErrorsLength) {
|
|
48
|
+
if (formFieldErrorMessage) formFieldErrorMessage += ' || ' // temporary
|
|
49
|
+
otherErrors.forEach((e, i) => {
|
|
50
|
+
formFieldErrorMessage += e + `${i === otherErrorsLength - 1 ? '' : ' || '}` // temporary
|
|
51
|
+
})
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return formFieldErrorMessage
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return t ? t('validation.someInputsInvalid') : 'validation.someInputsInvalid'
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export async function genericFormValidator(formRef: FormInstance): Promise<true> {
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
formRef.validate((valid, errors) => {
|
|
63
|
+
if (!valid) {
|
|
64
|
+
if (errors) {
|
|
65
|
+
return reject(formFieldErrorMessageFormatter(errors))
|
|
66
|
+
}
|
|
67
|
+
} else {
|
|
68
|
+
return resolve(true)
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export * from './input-renderers/form-item-renderer'
|
|
2
|
-
export * from './input-renderers/input-renderer'
|
|
3
|
-
|
|
4
|
-
export type { T_InputRendererBase } from './input-renderers/input-renderer.types'
|
|
5
|
-
export * from './input-validators'
|
|
6
|
-
export * from './form.utils'
|
|
1
|
+
export * from './input-renderers/form-item-renderer'
|
|
2
|
+
export * from './input-renderers/input-renderer'
|
|
3
|
+
|
|
4
|
+
export type { T_InputRendererBase } from './input-renderers/input-renderer.types'
|
|
5
|
+
export * from './input-validators'
|
|
6
|
+
export * from './form.utils'
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<el-switch
|
|
3
|
-
v-model="inputProxy"
|
|
4
|
-
v-bind="input?.attrs"
|
|
5
|
-
@change="(v) => emit('change', v)"
|
|
6
|
-
></el-switch>
|
|
7
|
-
</template>
|
|
8
|
-
|
|
9
|
-
<script setup lang="ts">
|
|
10
|
-
import { computed, watch } from 'vue'
|
|
11
|
-
|
|
12
|
-
import { ElSwitch } from 'element-plus'
|
|
13
|
-
|
|
14
|
-
import './FlyBoolean.scss'
|
|
15
|
-
import type { T_InputBoolean, T_InputBooleanValues } from './FlyBoolean.types'
|
|
16
|
-
|
|
17
|
-
const emit = defineEmits<{
|
|
18
|
-
(e: 'update:modelValue', v: T_InputBooleanValues): void
|
|
19
|
-
(e: 'change', v: T_InputBooleanValues): void
|
|
20
|
-
}>()
|
|
21
|
-
|
|
22
|
-
const props = defineProps<{
|
|
23
|
-
modelValue?: T_InputBooleanValues
|
|
24
|
-
input?: T_InputBoolean
|
|
25
|
-
}>()
|
|
26
|
-
|
|
27
|
-
const inputProxy = computed({
|
|
28
|
-
get: () => {
|
|
29
|
-
return Boolean(props.modelValue)
|
|
30
|
-
},
|
|
31
|
-
set: (v) => {
|
|
32
|
-
emit('update:modelValue', Boolean(v))
|
|
33
|
-
}
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
watch(
|
|
37
|
-
() => props.modelValue,
|
|
38
|
-
() => {
|
|
39
|
-
const parsed = Boolean(props.modelValue)
|
|
40
|
-
if (parsed !== props.modelValue) {
|
|
41
|
-
emit('update:modelValue', parsed)
|
|
42
|
-
}
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
immediate: true
|
|
46
|
-
}
|
|
47
|
-
)
|
|
48
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<el-switch
|
|
3
|
+
v-model="inputProxy"
|
|
4
|
+
v-bind="input?.attrs"
|
|
5
|
+
@change="(v) => emit('change', v)"
|
|
6
|
+
></el-switch>
|
|
7
|
+
</template>
|
|
8
|
+
|
|
9
|
+
<script setup lang="ts">
|
|
10
|
+
import { computed, watch } from 'vue'
|
|
11
|
+
|
|
12
|
+
import { ElSwitch } from 'element-plus'
|
|
13
|
+
|
|
14
|
+
import './FlyBoolean.scss'
|
|
15
|
+
import type { T_InputBoolean, T_InputBooleanValues } from './FlyBoolean.types'
|
|
16
|
+
|
|
17
|
+
const emit = defineEmits<{
|
|
18
|
+
(e: 'update:modelValue', v: T_InputBooleanValues): void
|
|
19
|
+
(e: 'change', v: T_InputBooleanValues): void
|
|
20
|
+
}>()
|
|
21
|
+
|
|
22
|
+
const props = defineProps<{
|
|
23
|
+
modelValue?: T_InputBooleanValues
|
|
24
|
+
input?: T_InputBoolean
|
|
25
|
+
}>()
|
|
26
|
+
|
|
27
|
+
const inputProxy = computed({
|
|
28
|
+
get: () => {
|
|
29
|
+
return Boolean(props.modelValue)
|
|
30
|
+
},
|
|
31
|
+
set: (v) => {
|
|
32
|
+
emit('update:modelValue', Boolean(v))
|
|
33
|
+
}
|
|
34
|
+
})
|
|
35
|
+
|
|
36
|
+
watch(
|
|
37
|
+
() => props.modelValue,
|
|
38
|
+
() => {
|
|
39
|
+
const parsed = Boolean(props.modelValue)
|
|
40
|
+
if (parsed !== props.modelValue) {
|
|
41
|
+
emit('update:modelValue', parsed)
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
immediate: true
|
|
46
|
+
}
|
|
47
|
+
)
|
|
48
|
+
</script>
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<el-form-item :prop="input.prop || input.key">
|
|
3
|
-
<template #label>
|
|
4
|
-
<FlyInfoTooltip v-if="input.tooltip" :content="input.tooltip" />
|
|
5
|
-
{{ t(input.label) }}
|
|
6
|
-
</template>
|
|
7
|
-
|
|
8
|
-
<FlyInputRenderer
|
|
9
|
-
v-model="modelProxy"
|
|
10
|
-
:input="input"
|
|
11
|
-
@change="(val: unknown) => emit('change', val)"
|
|
12
|
-
@blur="() => emit('blur')"
|
|
13
|
-
@focus="() => emit('focus')"
|
|
14
|
-
/>
|
|
15
|
-
</el-form-item>
|
|
16
|
-
</template>
|
|
17
|
-
|
|
18
|
-
<script setup lang="ts">
|
|
19
|
-
import { computed } from 'vue'
|
|
20
|
-
|
|
21
|
-
import { ElFormItem } from 'element-plus'
|
|
22
|
-
|
|
23
|
-
import { UseLocaleInjector } from '../../../../composables/UseLocaleInjector'
|
|
24
|
-
import FlyInfoTooltip from '../../../feedback/tooltip/FlyInfoTooltip.vue'
|
|
25
|
-
import type { T_InputRendererBase } from '../input-renderer.types'
|
|
26
|
-
import FlyInputRenderer from '../input-renderer/FlyInputRenderer.vue'
|
|
27
|
-
|
|
28
|
-
import './FlyFormItemRenderer.scss'
|
|
29
|
-
|
|
30
|
-
const props = defineProps<{
|
|
31
|
-
modelValue: unknown
|
|
32
|
-
input: T_InputRendererBase
|
|
33
|
-
}>()
|
|
34
|
-
|
|
35
|
-
const emit = defineEmits<{
|
|
36
|
-
(e: 'update:modelValue', value: unknown): void
|
|
37
|
-
(e: 'change', value: unknown): void
|
|
38
|
-
(e: 'blur'): void
|
|
39
|
-
(e: 'focus'): void
|
|
40
|
-
}>()
|
|
41
|
-
|
|
42
|
-
const { t } = UseLocaleInjector()
|
|
43
|
-
|
|
44
|
-
const modelProxy = computed({
|
|
45
|
-
get: () => props.modelValue,
|
|
46
|
-
set: (val) => emit('update:modelValue', val)
|
|
47
|
-
})
|
|
48
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<el-form-item :prop="input.prop || input.key">
|
|
3
|
+
<template #label>
|
|
4
|
+
<FlyInfoTooltip v-if="input.tooltip" :content="input.tooltip" />
|
|
5
|
+
{{ t(input.label) }}
|
|
6
|
+
</template>
|
|
7
|
+
|
|
8
|
+
<FlyInputRenderer
|
|
9
|
+
v-model="modelProxy"
|
|
10
|
+
:input="input"
|
|
11
|
+
@change="(val: unknown) => emit('change', val)"
|
|
12
|
+
@blur="() => emit('blur')"
|
|
13
|
+
@focus="() => emit('focus')"
|
|
14
|
+
/>
|
|
15
|
+
</el-form-item>
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
|
+
<script setup lang="ts">
|
|
19
|
+
import { computed } from 'vue'
|
|
20
|
+
|
|
21
|
+
import { ElFormItem } from 'element-plus'
|
|
22
|
+
|
|
23
|
+
import { UseLocaleInjector } from '../../../../composables/UseLocaleInjector'
|
|
24
|
+
import FlyInfoTooltip from '../../../feedback/tooltip/FlyInfoTooltip.vue'
|
|
25
|
+
import type { T_InputRendererBase } from '../input-renderer.types'
|
|
26
|
+
import FlyInputRenderer from '../input-renderer/FlyInputRenderer.vue'
|
|
27
|
+
|
|
28
|
+
import './FlyFormItemRenderer.scss'
|
|
29
|
+
|
|
30
|
+
const props = defineProps<{
|
|
31
|
+
modelValue: unknown
|
|
32
|
+
input: T_InputRendererBase
|
|
33
|
+
}>()
|
|
34
|
+
|
|
35
|
+
const emit = defineEmits<{
|
|
36
|
+
(e: 'update:modelValue', value: unknown): void
|
|
37
|
+
(e: 'change', value: unknown): void
|
|
38
|
+
(e: 'blur'): void
|
|
39
|
+
(e: 'focus'): void
|
|
40
|
+
}>()
|
|
41
|
+
|
|
42
|
+
const { t } = UseLocaleInjector()
|
|
43
|
+
|
|
44
|
+
const modelProxy = computed({
|
|
45
|
+
get: () => props.modelValue,
|
|
46
|
+
set: (val) => emit('update:modelValue', val)
|
|
47
|
+
})
|
|
48
|
+
</script>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import FlyFormItemRenderer from './FlyFormItemRenderer.vue'
|
|
2
|
-
|
|
3
|
-
export default FlyFormItemRenderer
|
|
4
|
-
export { FlyFormItemRenderer }
|
|
1
|
+
import FlyFormItemRenderer from './FlyFormItemRenderer.vue'
|
|
2
|
+
|
|
3
|
+
export default FlyFormItemRenderer
|
|
4
|
+
export { FlyFormItemRenderer }
|
package/src/components/form/input-renderers/form-schema-renderer/FlyFormSchemaRenderer.types.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type FlyFormSchemaRenderer from './FlyFormSchemaRenderer.vue'
|
|
2
|
-
|
|
3
|
-
export type T_FlyFormSchemaRendererInstance = InstanceType<typeof FlyFormSchemaRenderer> | null
|
|
1
|
+
import type FlyFormSchemaRenderer from './FlyFormSchemaRenderer.vue'
|
|
2
|
+
|
|
3
|
+
export type T_FlyFormSchemaRendererInstance = InstanceType<typeof FlyFormSchemaRenderer> | null
|