@@ -56,10 +56,12 @@ export const VDateInput = genericComponent<VDateInputSlots>()({
56
56
props : makeVDateInputProps ( ) ,
57
57
58
58
emits : {
59
+ save : ( value : string ) => true ,
60
+ cancel : ( ) => true ,
59
61
'update:modelValue' : ( val : string ) => true ,
60
62
} ,
61
63
62
- setup ( props , { slots } ) {
64
+ setup ( props , { emit , slots } ) {
63
65
const { t } = useLocale ( )
64
66
const adapter = useDate ( )
65
67
const { isFocused, focus, blur } = useFocus ( props )
@@ -118,11 +120,17 @@ export const VDateInput = genericComponent<VDateInputSlots>()({
118
120
menu . value = true
119
121
}
120
122
121
- function onSave ( ) {
123
+ function onCancel ( ) {
124
+ emit ( 'cancel' )
122
125
menu . value = false
123
126
}
124
127
125
- function onUpdateModel ( value : string ) {
128
+ function onSave ( value : string ) {
129
+ emit ( 'save' , value )
130
+ menu . value = false
131
+ }
132
+
133
+ function onUpdateDisplayModel ( value : string ) {
126
134
if ( value != null ) return
127
135
128
136
model . value = null
@@ -146,7 +154,7 @@ export const VDateInput = genericComponent<VDateInputSlots>()({
146
154
onBlur = { blur }
147
155
onClick :control = { isInteractive . value ? onClick : undefined }
148
156
onClick :prepend = { isInteractive . value ? onClick : undefined }
149
- onUpdate :modelValue = { onUpdateModel }
157
+ onUpdate :modelValue = { onUpdateDisplayModel }
150
158
>
151
159
{ {
152
160
...slots ,
@@ -165,23 +173,30 @@ export const VDateInput = genericComponent<VDateInputSlots>()({
165
173
{ ...confirmEditProps }
166
174
v-model = { model . value }
167
175
onSave = { onSave }
168
- onCancel = { ( ) => menu . value = false }
176
+ onCancel = { onCancel }
169
177
>
170
178
{ {
171
179
default : ( { actions, model : proxyModel , save, cancel, isPristine } ) => {
180
+ function onUpdateModel ( value : string ) {
181
+ if ( ! props . hideActions ) {
182
+ proxyModel . value = value
183
+ } else {
184
+ model . value = value
185
+
186
+ if ( ! props . multiple ) {
187
+ menu . value = false
188
+ }
189
+ }
190
+
191
+ emit ( 'save' , value )
192
+ vDateInputRef . value ?. blur ( )
193
+ }
194
+
172
195
return (
173
196
< VDatePicker
174
197
{ ...datePickerProps }
175
198
modelValue = { props . hideActions ? model . value : proxyModel . value }
176
- onUpdate :modelValue = { val => {
177
- if ( ! props . hideActions ) {
178
- proxyModel . value = val
179
- } else {
180
- model . value = val
181
-
182
- if ( ! props . multiple ) menu . value = false
183
- }
184
- } }
199
+ onUpdate :modelValue = { value => onUpdateModel ( value ) }
185
200
onMousedown = { ( e : MouseEvent ) => e . preventDefault ( ) }
186
201
>
187
202
{ {
0 commit comments