@bagelink/vue 1.15.321 → 1.15.323
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/components/dataTable/useTableData.d.ts.map +1 -1
- package/dist/form-flow/FormFlow.vue.d.ts.map +1 -1
- package/dist/form-flow/schema-fields.d.ts +1 -0
- package/dist/form-flow/schema-fields.d.ts.map +1 -1
- package/dist/index.cjs +77 -77
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +8255 -8211
- package/dist/utils/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/dataTable/useTableData.ts +19 -4
- package/src/components/layout/AppSidebar.vue +1 -1
- package/src/form-flow/FormFlow.vue +31 -2
- package/src/form-flow/schema-fields.ts +22 -2
- package/src/index.ts +1 -1
- package/src/utils/index.ts +7 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -32,8 +32,19 @@ interface TransformedDataBase {
|
|
|
32
32
|
type TransformedData<TransDataT> = TransDataT & TransformedDataBase
|
|
33
33
|
|
|
34
34
|
function autoTransform<T>(field: Field<T, DefaultPathsOptions>): Field<T, DefaultPathsOptions> {
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
const autoDateFields = {
|
|
36
|
+
created_at: 'Created Date',
|
|
37
|
+
updated_at: 'Last Update',
|
|
38
|
+
} as const
|
|
39
|
+
const fieldId = field.id as keyof typeof autoDateFields
|
|
40
|
+
|
|
41
|
+
if (fieldId in autoDateFields) {
|
|
42
|
+
if (!field.label || field.label === keyToLabel(field.id as string)) {
|
|
43
|
+
field.label = autoDateFields[fieldId]
|
|
44
|
+
}
|
|
45
|
+
if (!field.transform) {
|
|
46
|
+
field.transform = (val?: any) => val ? formatDate(val, 'DD.MM.YY HH:mm') : val
|
|
47
|
+
}
|
|
37
48
|
}
|
|
38
49
|
return field
|
|
39
50
|
}
|
|
@@ -76,12 +87,16 @@ export function useTableData<T extends { [key: string]: any }>(options: UseTable
|
|
|
76
87
|
.filter(key => key !== 'id' && !key.startsWith('_')) // Exclude id and internal fields
|
|
77
88
|
.map(key => ({
|
|
78
89
|
id: key as any, // Cast to any to resolve type issues with Path<T>
|
|
79
|
-
label:
|
|
90
|
+
label: key === 'created_at'
|
|
91
|
+
? 'Created Date'
|
|
92
|
+
: key === 'updated_at'
|
|
93
|
+
? 'Last Update'
|
|
94
|
+
: keyToLabel(key),
|
|
80
95
|
$el: 'div',
|
|
81
96
|
transform: (val?: any) => {
|
|
82
97
|
// Handle date fields
|
|
83
98
|
const dateFields = ['created_at', 'updated_at']
|
|
84
|
-
if (dateFields.includes(key)) { return val ?
|
|
99
|
+
if (dateFields.includes(key)) { return val ? formatDate(val, 'DD.MM.YY HH:mm') : val }
|
|
85
100
|
return val
|
|
86
101
|
}
|
|
87
102
|
}))
|
|
@@ -213,7 +213,7 @@ const sidebarStyles = computed(() => {
|
|
|
213
213
|
:active-color="props.activeColor"
|
|
214
214
|
/>
|
|
215
215
|
</nav>
|
|
216
|
-
<div class="sidebar-footer flex column flex-stretch gap-025 px-05 mx-auto mt-auto m_border-top">
|
|
216
|
+
<div class="sidebar-footer flex column flex-stretch gap-025 px-05 mx-auto mt-auto m_border-top m_pt-05">
|
|
217
217
|
<Btn
|
|
218
218
|
v-for="link in props.footerLinks" :key="link.to || link.label"
|
|
219
219
|
:title="!isOpen && !isMobile ? resolveI18n(link.label) : ''"
|
|
@@ -101,12 +101,41 @@ function cloneDefault<V>(value: V): V {
|
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
function coerceBuilderValue(field: FieldBuilder, value: any): any {
|
|
105
|
+
if (typeof value !== 'string') return value
|
|
106
|
+
const stripped = value.trim()
|
|
107
|
+
switch (field._type) {
|
|
108
|
+
case 'checkbox':
|
|
109
|
+
case 'toggle':
|
|
110
|
+
if (stripped.toLowerCase() === 'true') return true
|
|
111
|
+
if (stripped.toLowerCase() === 'false') return false
|
|
112
|
+
return value
|
|
113
|
+
case 'number':
|
|
114
|
+
case 'range': {
|
|
115
|
+
if (!stripped) return value
|
|
116
|
+
const parsed = Number(stripped)
|
|
117
|
+
return Number.isNaN(parsed) ? value : parsed
|
|
118
|
+
}
|
|
119
|
+
default:
|
|
120
|
+
return value
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
104
124
|
function applyDefaults(modelValue: T | undefined): T {
|
|
105
125
|
const data = { ...(modelValue ?? {}) } as T
|
|
106
126
|
for (const [key, field] of Object.entries(props.schema._fields)) {
|
|
127
|
+
const current = getNestedValue(data, key)
|
|
128
|
+
if (current !== undefined) {
|
|
129
|
+
setNestedValue(data, key, coerceBuilderValue(field as FieldBuilder, current))
|
|
130
|
+
continue
|
|
131
|
+
}
|
|
107
132
|
const defaultValue = (field as FieldBuilder)._config.default
|
|
108
|
-
if (defaultValue !== undefined
|
|
109
|
-
setNestedValue(
|
|
133
|
+
if (defaultValue !== undefined) {
|
|
134
|
+
setNestedValue(
|
|
135
|
+
data,
|
|
136
|
+
key,
|
|
137
|
+
coerceBuilderValue(field as FieldBuilder, cloneDefault(defaultValue)),
|
|
138
|
+
)
|
|
110
139
|
}
|
|
111
140
|
}
|
|
112
141
|
return data
|
|
@@ -422,6 +422,26 @@ export function fieldsToSchema(fields: FormField[]): JSONSchemaObject {
|
|
|
422
422
|
|
|
423
423
|
// ─── Form Data Utilities ─────────────────────────────────────────────────────
|
|
424
424
|
|
|
425
|
+
export function coerceFieldValue(field: FormField, value: any): any {
|
|
426
|
+
if (typeof value !== 'string') return value
|
|
427
|
+
const stripped = value.trim()
|
|
428
|
+
switch (field.type) {
|
|
429
|
+
case 'checkbox':
|
|
430
|
+
case 'toggle':
|
|
431
|
+
if (stripped.toLowerCase() === 'true') return true
|
|
432
|
+
if (stripped.toLowerCase() === 'false') return false
|
|
433
|
+
return value
|
|
434
|
+
case 'number':
|
|
435
|
+
case 'range': {
|
|
436
|
+
if (!stripped) return value
|
|
437
|
+
const parsed = Number(stripped)
|
|
438
|
+
return Number.isNaN(parsed) ? value : parsed
|
|
439
|
+
}
|
|
440
|
+
default:
|
|
441
|
+
return value
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
425
445
|
export function initFormData(fields: FormField[], existing?: Record<string, any>): Record<string, any> {
|
|
426
446
|
const data: Record<string, any> = {}
|
|
427
447
|
|
|
@@ -429,12 +449,12 @@ export function initFormData(fields: FormField[], existing?: Record<string, any>
|
|
|
429
449
|
if (field.type === 'heading' || field.type === 'divider') continue
|
|
430
450
|
|
|
431
451
|
if (existing && field.key in existing) {
|
|
432
|
-
data[field.key] = existing[field.key]
|
|
452
|
+
data[field.key] = coerceFieldValue(field, existing[field.key])
|
|
433
453
|
continue
|
|
434
454
|
}
|
|
435
455
|
|
|
436
456
|
if (field.defaultValue !== undefined) {
|
|
437
|
-
data[field.key] = field.defaultValue
|
|
457
|
+
data[field.key] = coerceFieldValue(field, field.defaultValue)
|
|
438
458
|
continue
|
|
439
459
|
}
|
|
440
460
|
|
package/src/index.ts
CHANGED
|
@@ -14,7 +14,7 @@ export { default as MultiStepForm } from './form-flow/MultiStepForm.vue'
|
|
|
14
14
|
export * from './form-flow/structure'
|
|
15
15
|
export { default as FormFlowPlayer } from './form-flow/FormFlowPlayer.vue'
|
|
16
16
|
export type { FormFieldType, FormFieldValidation, FormField, JSONSchemaProperty, JSONSchemaObject } from './form-flow/schema-fields'
|
|
17
|
-
export { defaultRowSpan, inferFieldType, schemaToFields, fieldsToSchema, initFormData, validateFormData, useSchemaToFields } from './form-flow/schema-fields'
|
|
17
|
+
export { coerceFieldValue, defaultRowSpan, inferFieldType, schemaToFields, fieldsToSchema, initFormData, validateFormData, useSchemaToFields } from './form-flow/schema-fields'
|
|
18
18
|
// i18n exports
|
|
19
19
|
export {
|
|
20
20
|
bagelinkLocales,
|
package/src/utils/index.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Attributes, BglFormSchemaT, Path } from '../types/BagelForm'
|
|
2
|
+
import { formatDate } from './date'
|
|
2
3
|
|
|
3
4
|
const debouncers = new Map<() => void, ReturnType<typeof setTimeout>>()
|
|
4
5
|
|
|
@@ -140,10 +141,14 @@ export function getFallbackSchema<T>(
|
|
|
140
141
|
|
|
141
142
|
const schema = keys.map(id => ({
|
|
142
143
|
id,
|
|
143
|
-
label:
|
|
144
|
+
label: id === 'created_at'
|
|
145
|
+
? 'Created Date'
|
|
146
|
+
: id === 'updated_at'
|
|
147
|
+
? 'Last Update'
|
|
148
|
+
: keyToLabel(id),
|
|
144
149
|
transform: (val: any) => {
|
|
145
150
|
const dateFields = ['created_at', 'updated_at']
|
|
146
|
-
if (dateFields.includes(id)) { return val ?
|
|
151
|
+
if (dateFields.includes(id)) { return val ? formatDate(val, 'DD.MM.YY HH:mm') : val }
|
|
147
152
|
return val
|
|
148
153
|
},
|
|
149
154
|
})) as BglFormSchemaT<T>
|