primevue-mirror/packages/core/src/baseeditableholder/BaseEditableHolder.vue

103 lines
2.5 KiB
Vue
Raw Normal View History

2024-10-18 14:50:18 +00:00
<script>
import { isNotEmpty } from '@primeuix/utils';
import BaseComponent from '@primevue/core/basecomponent';
export default {
name: 'BaseEditableHolder',
extends: BaseComponent,
emits: ['update:modelValue', 'value-change'],
props: {
modelValue: {
type: null,
default: undefined
},
defaultValue: {
type: null,
default: undefined
},
name: {
type: String,
default: undefined
},
invalid: {
type: Boolean,
2024-10-18 16:29:47 +00:00
default: undefined
2024-10-18 14:50:18 +00:00
},
disabled: {
type: Boolean,
default: false
},
formControl: {
type: Object,
default: undefined
}
},
inject: {
$parentInstance: {
default: undefined
},
$pcForm: {
default: undefined
}
},
data() {
return {
d_value: this.defaultValue || this.modelValue
};
},
watch: {
modelValue(newValue) {
this.d_value = newValue;
},
2024-10-22 09:40:03 +00:00
defaultValue(newValue) {
this.d_value = newValue;
},
2024-10-18 14:50:18 +00:00
formControl: {
immediate: true,
handler(newValue) {
this.formField = this.$pcForm?.register?.(this.$formName, newValue) || {};
}
},
$formName: {
immediate: true,
handler(newValue) {
this.formField = this.$pcForm?.register?.(newValue, this.formControl) || {};
}
}
},
formField: {},
methods: {
updateValue(value, event) {
// uncontrolled
2024-10-22 09:40:03 +00:00
if (this.uncontolled) {
this.$emit('value-change', value);
} else {
// controlled
this.d_value = value;
this.$emit('update:modelValue', value);
}
2024-10-18 14:50:18 +00:00
this.formField.onChange?.({ originalEvent: event, value });
}
},
computed: {
$filled() {
return isNotEmpty(this.d_value);
},
$invalid() {
2024-10-18 16:29:47 +00:00
return this.invalid ?? this.$pcForm?.states?.[this.$formName]?.invalid;
2024-10-18 14:50:18 +00:00
},
$formName() {
2024-10-20 23:35:26 +00:00
return this.formControl?.name || this.name;
2024-10-18 14:50:18 +00:00
},
2024-10-22 09:40:03 +00:00
uncontolled() {
return this.defaultValue !== undefined && this.modelValue === undefined;
},
2024-10-18 14:50:18 +00:00
// @deprecated use $filled instead
filled() {
return this.$filled;
}
}
};
</script>