@flyanra/vue-core 1.0.1 → 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.
Files changed (54) hide show
  1. package/dist/types/components/navigation/menu/fly-sidebar/FlySidebar.types.d.ts +14 -1
  2. package/dist/types/components/navigation/menu/fly-sidebar/FlySidebar.vue.d.ts +10 -4
  3. package/dist/types/composables/UseLocaleInjector.d.ts +7 -1
  4. package/dist/types/composables/index.d.ts +3 -1
  5. package/dist/types/composables/useSidebarActiveIndex.d.ts +66 -0
  6. package/dist/types/utils/index.d.ts +2 -0
  7. package/package.json +158 -146
  8. package/src/components/basic/fly-button/FlyButton.types.ts +28 -28
  9. package/src/components/basic/fly-button/FlyButton.vue +178 -178
  10. package/src/components/basic/typography/FlyCollapseTitleRenderer.vue +46 -46
  11. package/src/components/feedback/tooltip/FlyInfoTooltip.vue +49 -49
  12. package/src/components/feedback/tooltip/FlyTooltip.element.scss +4 -4
  13. package/src/components/feedback/tooltip/FlyTooltip.vue +60 -60
  14. package/src/components/form/form.utils.ts +72 -72
  15. package/src/components/form/index.ts +6 -6
  16. package/src/components/form/input-renderers/boolean/FlyBoolean.vue +48 -48
  17. package/src/components/form/input-renderers/form-item-renderer/FlyFormItemRenderer.vue +48 -48
  18. package/src/components/form/input-renderers/form-item-renderer/index.ts +4 -4
  19. package/src/components/form/input-renderers/form-schema-renderer/FlyFormSchemaRenderer.types.ts +3 -3
  20. package/src/components/form/input-renderers/form-schema-renderer/FlyFormSchemaRenderer.utils.ts +221 -221
  21. package/src/components/form/input-renderers/form-schema-renderer/FlyFormSchemaRenderer.vue +75 -75
  22. package/src/components/form/input-renderers/form-schema-renderer/UseFormSchemaRenderer.ts +97 -97
  23. package/src/components/form/input-renderers/input-renderer/FlyInputRenderer.vue +49 -49
  24. package/src/components/form/input-renderers/input-renderer/index.ts +4 -4
  25. package/src/components/form/input-renderers/input-renderer.utils.ts +18 -18
  26. package/src/components/form/input-renderers/number/FlyNumber.vue +64 -64
  27. package/src/components/form/input-renderers/regional-tenant-form-renderer/FlyRegionalTenantFormRenderer.types.ts +15 -15
  28. package/src/components/form/input-renderers/regional-tenant-form-renderer/FlyRegionalTenantFormRenderer.vue +99 -99
  29. package/src/components/form/input-renderers/select/FlySelect.scss +1 -1
  30. package/src/components/form/input-renderers/select/FlySelect.utils.ts +37 -37
  31. package/src/components/form/input-renderers/text/FlyText.vue +70 -70
  32. package/src/components/form/input-renderers/value-unit/FlyValueUnit.vue +102 -102
  33. package/src/components/form/input-validators.ts +99 -99
  34. package/src/components/general/fly-icon-v2/FlyIconV2.types.ts +6 -6
  35. package/src/components/general/fly-icon-v2/FlyIconV2.vue +17 -17
  36. package/src/components/general/fly-icon-v2/index.ts +6 -6
  37. package/src/components/general/index.ts +5 -5
  38. package/src/components/index.ts +7 -7
  39. package/src/components/navigation/menu/fly-mini-sidebar/FlyMiniSidebar.types.ts +8 -8
  40. package/src/components/navigation/menu/fly-mini-sidebar/FlyMiniSidebarItem.vue +55 -55
  41. package/src/components/navigation/menu/fly-sidebar/FlySidebar.types.ts +49 -36
  42. package/src/components/navigation/menu/fly-sidebar/FlySidebar.vue +146 -151
  43. package/src/components/navigation/menu/fly-sidebar/FlySidebarNode.vue +47 -47
  44. package/src/composables/UseLocaleInjector.ts +37 -0
  45. package/src/composables/index.ts +4 -0
  46. package/src/composables/useSidebarActiveIndex.ts +103 -0
  47. package/src/styles/element/mixins/collapse.scss +61 -61
  48. package/src/styles/element/overrides/form.scss +121 -121
  49. package/src/styles/element/overrides/message-box.scss +2 -2
  50. package/src/styles/element/overrides/radio.scss +2 -2
  51. package/src/styles/element/overrides/select.scss +9 -9
  52. package/src/utils/index.ts +2 -0
  53. package/src/utils/pure-functions.ts +15 -0
  54. package/src/utils/validators.ts +81 -0
@@ -1,221 +1,221 @@
1
- import type { FormItemRule } from 'element-plus'
2
-
3
- import { checkInputRange } from '../../../../utils/validators'
4
- import {
5
- checkInputRangeValidator,
6
- requiredField,
7
- requiredFieldArray,
8
- requiredFieldNumber,
9
- requiredFieldNumberSelect,
10
- requiredFieldValueUnit
11
- } from '../../input-validators'
12
- import type {
13
- T_FormSchemaLookupData,
14
- T_InputSchema,
15
- T_InputSchemaSelect,
16
- T_InputSchemaValueUnit
17
- } from '../form-schema.types'
18
- import type { T_InputRendererBase } from '../input-renderer.types'
19
- import type { T_InputSelectOption } from '../select/FlySelect.types'
20
-
21
- export function getValidatorsFromInputFields(fields: T_InputRendererBase[]) {
22
- const validators = fields.reduce(
23
- (p, c) => {
24
- if (c.validations) {
25
- p[c.key] = c.validations
26
- }
27
- return p
28
- },
29
- {} as Record<string, FormItemRule[]>
30
- )
31
-
32
- return validators
33
- }
34
-
35
- export function generateInputFromFormSchema(
36
- field: T_InputSchema,
37
- lookupData?: T_FormSchemaLookupData
38
- ) {
39
- switch (field.type) {
40
- case 'text': {
41
- const selectInput: T_InputRendererBase = {
42
- label: field.label,
43
- type: field.type,
44
- key: field.unique_key,
45
- attrs: {
46
- maxlength: field.config?.maxLength,
47
- minlength: field.config?.minLength,
48
- showWordLimit: true,
49
- type: field.config?.type || field.type,
50
- rows: field.config?.rows
51
- },
52
- placeholder: field.placeholder,
53
- tooltip: field.tooltip,
54
- validations: generateFormRule(field)
55
- }
56
-
57
- return selectInput
58
- }
59
- case 'select': {
60
- const selectInput: T_InputRendererBase = {
61
- label: field.label,
62
- type: field.type,
63
- key: field.unique_key,
64
- attrs: {
65
- multiple: field.config.multiple
66
- },
67
- placeholder: field.placeholder,
68
- tooltip: field.tooltip,
69
- validations: generateFormRule(field),
70
- config: {
71
- options: generateSelectOptionsFromSchema(field, lookupData)
72
- }
73
- }
74
-
75
- return selectInput
76
- }
77
- case 'valueUnit': {
78
- const selectInput: T_InputRendererBase = {
79
- label: field.label,
80
- type: field.type,
81
- key: field.unique_key,
82
- attrs: {},
83
- placeholder: field.placeholder,
84
- tooltip: field.tooltip,
85
- validations: generateFormRule(field),
86
- config: {
87
- options: generateSelectOptionsFromSchema(field, lookupData)
88
- }
89
- }
90
-
91
- return selectInput
92
- }
93
- case 'number': {
94
- const selectInput: T_InputRendererBase = {
95
- label: field.label,
96
- type: field.type,
97
- key: field.unique_key,
98
- attrs: {},
99
- placeholder: field.placeholder,
100
- tooltip: field.tooltip,
101
- validations: generateFormRule(field)
102
- }
103
-
104
- return selectInput
105
- }
106
- case 'boolean': {
107
- const selectInput: T_InputRendererBase = {
108
- label: field.label,
109
- type: field.type,
110
- key: field.unique_key,
111
- attrs: {
112
- activeText: field.config?.activeText,
113
- inactiveText: field.config?.inactiveText
114
- },
115
- placeholder: field.placeholder,
116
- tooltip: field.tooltip,
117
- validations: generateFormRule(field)
118
- }
119
-
120
- return selectInput
121
- }
122
- case 'dateTime': {
123
- const selectInput: T_InputRendererBase = {
124
- label: field.label,
125
- type: field.type,
126
- key: field.unique_key,
127
- placeholder: field.placeholder,
128
- tooltip: field.tooltip,
129
- validations: generateFormRule(field),
130
- config: {
131
- inputType: field.config?.inputType
132
- }
133
- }
134
-
135
- return selectInput
136
- }
137
- default:
138
- break
139
- }
140
- }
141
-
142
- export function generateFormRule(field: T_InputSchema): FormItemRule[] {
143
- const validations = field.validation
144
- const rules: FormItemRule[] = []
145
-
146
- if (validations?.required) {
147
- switch (field.type) {
148
- case 'text': {
149
- rules.push(requiredField(field.label, 'blur', true))
150
-
151
- if (field.validation?.minLength || field.validation?.maxLength) {
152
- rules.push(
153
- checkInputRangeValidator(
154
- checkInputRange(
155
- field.label,
156
- {
157
- min: field.validation?.minLength,
158
- max: field.validation?.maxLength
159
- },
160
- undefined,
161
- undefined
162
- ),
163
- 'blur'
164
- )
165
- )
166
- }
167
-
168
- break
169
- }
170
-
171
- case 'dateTime': {
172
- rules.push(requiredField(field.label, 'blur', true))
173
- break
174
- }
175
-
176
- case 'number': {
177
- rules.push(requiredFieldNumber(field.label, 'change'))
178
- break
179
- }
180
-
181
- case 'select': {
182
- if (field.config.multiple) {
183
- rules.push(requiredFieldArray(field.label, 'change', true))
184
- } else {
185
- rules.push(requiredField(field.label, 'change', true))
186
- }
187
- break
188
- }
189
-
190
- case 'valueUnit': {
191
- if (field.config.valueType === 'text') {
192
- rules.push(
193
- requiredFieldValueUnit(field.label, 'change', undefined, undefined, {
194
- valueType: 'text'
195
- })
196
- )
197
- } else {
198
- rules.push(requiredFieldNumberSelect(field.label, 'change', true))
199
- }
200
- }
201
- }
202
- }
203
-
204
- return rules
205
- }
206
-
207
- export function generateSelectOptionsFromSchema(
208
- field: T_InputSchemaSelect | T_InputSchemaValueUnit,
209
- lookupData?: T_FormSchemaLookupData
210
- ): T_InputSelectOption[] {
211
- const optionsArr = field.config?.options
212
- if (optionsArr) return optionsArr
213
-
214
- if (!lookupData) return []
215
- const lookupId = field.config.options_config_Lookup_id
216
- if (!lookupId) return []
217
-
218
- const record = lookupData[lookupId]
219
-
220
- return record ? (record as T_InputSelectOption[]) : []
221
- }
1
+ import type { FormItemRule } from 'element-plus'
2
+
3
+ import { checkInputRange } from '../../../../utils/validators'
4
+ import {
5
+ checkInputRangeValidator,
6
+ requiredField,
7
+ requiredFieldArray,
8
+ requiredFieldNumber,
9
+ requiredFieldNumberSelect,
10
+ requiredFieldValueUnit
11
+ } from '../../input-validators'
12
+ import type {
13
+ T_FormSchemaLookupData,
14
+ T_InputSchema,
15
+ T_InputSchemaSelect,
16
+ T_InputSchemaValueUnit
17
+ } from '../form-schema.types'
18
+ import type { T_InputRendererBase } from '../input-renderer.types'
19
+ import type { T_InputSelectOption } from '../select/FlySelect.types'
20
+
21
+ export function getValidatorsFromInputFields(fields: T_InputRendererBase[]) {
22
+ const validators = fields.reduce(
23
+ (p, c) => {
24
+ if (c.validations) {
25
+ p[c.key] = c.validations
26
+ }
27
+ return p
28
+ },
29
+ {} as Record<string, FormItemRule[]>
30
+ )
31
+
32
+ return validators
33
+ }
34
+
35
+ export function generateInputFromFormSchema(
36
+ field: T_InputSchema,
37
+ lookupData?: T_FormSchemaLookupData
38
+ ) {
39
+ switch (field.type) {
40
+ case 'text': {
41
+ const selectInput: T_InputRendererBase = {
42
+ label: field.label,
43
+ type: field.type,
44
+ key: field.unique_key,
45
+ attrs: {
46
+ maxlength: field.config?.maxLength,
47
+ minlength: field.config?.minLength,
48
+ showWordLimit: true,
49
+ type: field.config?.type || field.type,
50
+ rows: field.config?.rows
51
+ },
52
+ placeholder: field.placeholder,
53
+ tooltip: field.tooltip,
54
+ validations: generateFormRule(field)
55
+ }
56
+
57
+ return selectInput
58
+ }
59
+ case 'select': {
60
+ const selectInput: T_InputRendererBase = {
61
+ label: field.label,
62
+ type: field.type,
63
+ key: field.unique_key,
64
+ attrs: {
65
+ multiple: field.config.multiple
66
+ },
67
+ placeholder: field.placeholder,
68
+ tooltip: field.tooltip,
69
+ validations: generateFormRule(field),
70
+ config: {
71
+ options: generateSelectOptionsFromSchema(field, lookupData)
72
+ }
73
+ }
74
+
75
+ return selectInput
76
+ }
77
+ case 'valueUnit': {
78
+ const selectInput: T_InputRendererBase = {
79
+ label: field.label,
80
+ type: field.type,
81
+ key: field.unique_key,
82
+ attrs: {},
83
+ placeholder: field.placeholder,
84
+ tooltip: field.tooltip,
85
+ validations: generateFormRule(field),
86
+ config: {
87
+ options: generateSelectOptionsFromSchema(field, lookupData)
88
+ }
89
+ }
90
+
91
+ return selectInput
92
+ }
93
+ case 'number': {
94
+ const selectInput: T_InputRendererBase = {
95
+ label: field.label,
96
+ type: field.type,
97
+ key: field.unique_key,
98
+ attrs: {},
99
+ placeholder: field.placeholder,
100
+ tooltip: field.tooltip,
101
+ validations: generateFormRule(field)
102
+ }
103
+
104
+ return selectInput
105
+ }
106
+ case 'boolean': {
107
+ const selectInput: T_InputRendererBase = {
108
+ label: field.label,
109
+ type: field.type,
110
+ key: field.unique_key,
111
+ attrs: {
112
+ activeText: field.config?.activeText,
113
+ inactiveText: field.config?.inactiveText
114
+ },
115
+ placeholder: field.placeholder,
116
+ tooltip: field.tooltip,
117
+ validations: generateFormRule(field)
118
+ }
119
+
120
+ return selectInput
121
+ }
122
+ case 'dateTime': {
123
+ const selectInput: T_InputRendererBase = {
124
+ label: field.label,
125
+ type: field.type,
126
+ key: field.unique_key,
127
+ placeholder: field.placeholder,
128
+ tooltip: field.tooltip,
129
+ validations: generateFormRule(field),
130
+ config: {
131
+ inputType: field.config?.inputType
132
+ }
133
+ }
134
+
135
+ return selectInput
136
+ }
137
+ default:
138
+ break
139
+ }
140
+ }
141
+
142
+ export function generateFormRule(field: T_InputSchema): FormItemRule[] {
143
+ const validations = field.validation
144
+ const rules: FormItemRule[] = []
145
+
146
+ if (validations?.required) {
147
+ switch (field.type) {
148
+ case 'text': {
149
+ rules.push(requiredField(field.label, 'blur', true))
150
+
151
+ if (field.validation?.minLength || field.validation?.maxLength) {
152
+ rules.push(
153
+ checkInputRangeValidator(
154
+ checkInputRange(
155
+ field.label,
156
+ {
157
+ min: field.validation?.minLength,
158
+ max: field.validation?.maxLength
159
+ },
160
+ undefined,
161
+ undefined
162
+ ),
163
+ 'blur'
164
+ )
165
+ )
166
+ }
167
+
168
+ break
169
+ }
170
+
171
+ case 'dateTime': {
172
+ rules.push(requiredField(field.label, 'blur', true))
173
+ break
174
+ }
175
+
176
+ case 'number': {
177
+ rules.push(requiredFieldNumber(field.label, 'change'))
178
+ break
179
+ }
180
+
181
+ case 'select': {
182
+ if (field.config.multiple) {
183
+ rules.push(requiredFieldArray(field.label, 'change', true))
184
+ } else {
185
+ rules.push(requiredField(field.label, 'change', true))
186
+ }
187
+ break
188
+ }
189
+
190
+ case 'valueUnit': {
191
+ if (field.config.valueType === 'text') {
192
+ rules.push(
193
+ requiredFieldValueUnit(field.label, 'change', undefined, undefined, {
194
+ valueType: 'text'
195
+ })
196
+ )
197
+ } else {
198
+ rules.push(requiredFieldNumberSelect(field.label, 'change', true))
199
+ }
200
+ }
201
+ }
202
+ }
203
+
204
+ return rules
205
+ }
206
+
207
+ export function generateSelectOptionsFromSchema(
208
+ field: T_InputSchemaSelect | T_InputSchemaValueUnit,
209
+ lookupData?: T_FormSchemaLookupData
210
+ ): T_InputSelectOption[] {
211
+ const optionsArr = field.config?.options
212
+ if (optionsArr) return optionsArr
213
+
214
+ if (!lookupData) return []
215
+ const lookupId = field.config.options_config_Lookup_id
216
+ if (!lookupId) return []
217
+
218
+ const record = lookupData[lookupId]
219
+
220
+ return record ? (record as T_InputSelectOption[]) : []
221
+ }
@@ -1,75 +1,75 @@
1
- <template>
2
- <div class="fly-form-schema-renderer">
3
- <el-form
4
- ref="formRef"
5
- :rules="dynamicValidators"
6
- :model="formProxy"
7
- label-position="top"
8
- status-icon
9
- :disabled="disabled"
10
- @submit.prevent
11
- >
12
- <div class="fly-form-schema-renderer__form-holder">
13
- <div
14
- v-for="(input, i) in generatedForm?.inputs"
15
- :key="i"
16
- :style="{
17
- gridColumn: `span ${getSpan(input)} / span ${getSpan(input)}`
18
- }"
19
- >
20
- <FlyFormItemRenderer v-model="formProxy[input.key]" :input="input" />
21
- </div>
22
- </div>
23
- </el-form>
24
- </div>
25
- </template>
26
-
27
- <script setup lang="ts">
28
- import { ref } from 'vue'
29
-
30
- import { ElForm, type FormInstance } from 'element-plus'
31
-
32
- import '../../../../styles/element/overrides/form.scss'
33
- import FlyFormItemRenderer from '../form-item-renderer/FlyFormItemRenderer.vue'
34
- import type { T_InputRendererBase } from '../input-renderer.types'
35
-
36
- import {
37
- type T_FormSchemaRendererEmits,
38
- type T_FormSchemaRendererProps,
39
- UseFormSchemaRenderer
40
- } from './UseFormSchemaRenderer'
41
-
42
- const emit = defineEmits<T_FormSchemaRendererEmits>()
43
-
44
- const props = defineProps<
45
- T_FormSchemaRendererProps & {
46
- /**
47
- * Column span within a 12 column grid
48
- */
49
- columnSpan?: number
50
- }
51
- >()
52
-
53
- const formRef = ref<FormInstance>()
54
-
55
- const dynamicConfigFormComp = UseFormSchemaRenderer({ formRef, props, emit })
56
- const { dynamicValidators, formProxy, generatedForm } = dynamicConfigFormComp
57
-
58
- function getSpan(input?: T_InputRendererBase) {
59
- return input?.columnSpan || props.columnSpan || 4
60
- }
61
-
62
- defineExpose({
63
- validateForm: dynamicConfigFormComp.validateForm
64
- })
65
- </script>
66
-
67
- <style lang="scss" scoped>
68
- .fly-form-schema-renderer {
69
- &__form-holder {
70
- display: grid;
71
- grid-template-columns: repeat(12, minmax(0, 1fr));
72
- gap: 0.5rem;
73
- }
74
- }
75
- </style>
1
+ <template>
2
+ <div class="fly-form-schema-renderer">
3
+ <el-form
4
+ ref="formRef"
5
+ :rules="dynamicValidators"
6
+ :model="formProxy"
7
+ label-position="top"
8
+ status-icon
9
+ :disabled="disabled"
10
+ @submit.prevent
11
+ >
12
+ <div class="fly-form-schema-renderer__form-holder">
13
+ <div
14
+ v-for="(input, i) in generatedForm?.inputs"
15
+ :key="i"
16
+ :style="{
17
+ gridColumn: `span ${getSpan(input)} / span ${getSpan(input)}`
18
+ }"
19
+ >
20
+ <FlyFormItemRenderer v-model="formProxy[input.key]" :input="input" />
21
+ </div>
22
+ </div>
23
+ </el-form>
24
+ </div>
25
+ </template>
26
+
27
+ <script setup lang="ts">
28
+ import { ref } from 'vue'
29
+
30
+ import { ElForm, type FormInstance } from 'element-plus'
31
+
32
+ import '../../../../styles/element/overrides/form.scss'
33
+ import FlyFormItemRenderer from '../form-item-renderer/FlyFormItemRenderer.vue'
34
+ import type { T_InputRendererBase } from '../input-renderer.types'
35
+
36
+ import {
37
+ type T_FormSchemaRendererEmits,
38
+ type T_FormSchemaRendererProps,
39
+ UseFormSchemaRenderer
40
+ } from './UseFormSchemaRenderer'
41
+
42
+ const emit = defineEmits<T_FormSchemaRendererEmits>()
43
+
44
+ const props = defineProps<
45
+ T_FormSchemaRendererProps & {
46
+ /**
47
+ * Column span within a 12 column grid
48
+ */
49
+ columnSpan?: number
50
+ }
51
+ >()
52
+
53
+ const formRef = ref<FormInstance>()
54
+
55
+ const dynamicConfigFormComp = UseFormSchemaRenderer({ formRef, props, emit })
56
+ const { dynamicValidators, formProxy, generatedForm } = dynamicConfigFormComp
57
+
58
+ function getSpan(input?: T_InputRendererBase) {
59
+ return input?.columnSpan || props.columnSpan || 4
60
+ }
61
+
62
+ defineExpose({
63
+ validateForm: dynamicConfigFormComp.validateForm
64
+ })
65
+ </script>
66
+
67
+ <style lang="scss" scoped>
68
+ .fly-form-schema-renderer {
69
+ &__form-holder {
70
+ display: grid;
71
+ grid-template-columns: repeat(12, minmax(0, 1fr));
72
+ gap: 0.5rem;
73
+ }
74
+ }
75
+ </style>