Merge pull request #35 from cmath10/field-unregister-behavior
feat!: Added property "unregisterBehavior" to FormularioField to cont…
This commit is contained in:
commit
e3084fdf85
@ -32,6 +32,8 @@ import {
|
|||||||
Empty,
|
Empty,
|
||||||
} from '@/types'
|
} from '@/types'
|
||||||
|
|
||||||
|
import { UNREGISTER_BEHAVIOR } from '@/enum'
|
||||||
|
|
||||||
const VALIDATION_BEHAVIOR = {
|
const VALIDATION_BEHAVIOR = {
|
||||||
DEMAND: 'demand',
|
DEMAND: 'demand',
|
||||||
LIVE: 'live',
|
LIVE: 'live',
|
||||||
@ -72,6 +74,7 @@ export default class FormularioField extends Vue {
|
|||||||
@Prop({ default: () => <T, U>(value: U|T): U|T => value }) modelSetConverter!: ModelSetConverter
|
@Prop({ default: () => <T, U>(value: U|T): U|T => value }) modelSetConverter!: ModelSetConverter
|
||||||
|
|
||||||
@Prop({ default: 'div' }) tag!: string
|
@Prop({ default: 'div' }) tag!: string
|
||||||
|
@Prop({ default: UNREGISTER_BEHAVIOR.NONE }) unregisterBehavior!: string
|
||||||
|
|
||||||
public proxy: unknown = this.hasModel ? this.value : ''
|
public proxy: unknown = this.hasModel ? this.value : ''
|
||||||
|
|
||||||
@ -156,7 +159,7 @@ export default class FormularioField extends Vue {
|
|||||||
*/
|
*/
|
||||||
public beforeDestroy (): void {
|
public beforeDestroy (): void {
|
||||||
if (typeof this.__FormularioForm_unregister === 'function') {
|
if (typeof this.__FormularioForm_unregister === 'function') {
|
||||||
this.__FormularioForm_unregister(this.fullPath)
|
this.__FormularioForm_unregister(this.fullPath, this.unregisterBehavior)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,6 +27,8 @@ import {
|
|||||||
import { FormularioField } from '@/types'
|
import { FormularioField } from '@/types'
|
||||||
import { Violation } from '@/validation/validator'
|
import { Violation } from '@/validation/validator'
|
||||||
|
|
||||||
|
import { UNREGISTER_BEHAVIOR } from '@/enum'
|
||||||
|
|
||||||
const update = (state: Record<string, unknown>, path: string, value: unknown): Record<string, unknown> => {
|
const update = (state: Record<string, unknown>, path: string, value: unknown): Record<string, unknown> => {
|
||||||
if (value === undefined) {
|
if (value === undefined) {
|
||||||
return unset(state, path) as Record<string, unknown>
|
return unset(state, path) as Record<string, unknown>
|
||||||
@ -88,13 +90,16 @@ export default class FormularioForm extends Vue {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Provide('__FormularioForm_unregister')
|
@Provide('__FormularioForm_unregister')
|
||||||
private unregister (path: string): void {
|
private unregister (path: string, behavior: string): void {
|
||||||
if (this.registry.has(path)) {
|
if (this.registry.has(path)) {
|
||||||
this.registry.delete(path)
|
this.registry.delete(path)
|
||||||
|
|
||||||
|
if (behavior === UNREGISTER_BEHAVIOR.UNSET) {
|
||||||
this.proxy = unset(this.proxy, path) as Record<string, unknown>
|
this.proxy = unset(this.proxy, path) as Record<string, unknown>
|
||||||
this.emitInput()
|
this.emitInput()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Provide('__FormularioForm_getState')
|
@Provide('__FormularioForm_getState')
|
||||||
private getState (): Record<string, unknown> {
|
private getState (): Record<string, unknown> {
|
||||||
|
4
src/enum.ts
Normal file
4
src/enum.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export const UNREGISTER_BEHAVIOR = {
|
||||||
|
NONE: 'none',
|
||||||
|
UNSET: 'unset',
|
||||||
|
}
|
@ -286,4 +286,37 @@ describe('FormularioField', () => {
|
|||||||
[{ date: new Date('2001-05-12') }],
|
[{ date: new Date('2001-05-12') }],
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('unregister behavior', async () => {
|
||||||
|
const wrapper = mount({
|
||||||
|
props: {
|
||||||
|
formExists: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: () => ({ state: { fieldA: '', fieldB: '' } }),
|
||||||
|
watch: {
|
||||||
|
state () {
|
||||||
|
this.$emit('updated', this.state)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
template: `
|
||||||
|
<div>
|
||||||
|
<FormularioForm v-if="formExists" v-model="state">
|
||||||
|
<FormularioField name="fieldA" />
|
||||||
|
<FormularioField name="fieldB" unregister-behavior="unset" />
|
||||||
|
</FormularioForm>
|
||||||
|
</div>
|
||||||
|
`,
|
||||||
|
})
|
||||||
|
|
||||||
|
await wrapper.vm.$nextTick()
|
||||||
|
|
||||||
|
wrapper.setProps({ formExists: false })
|
||||||
|
|
||||||
|
await wrapper.vm.$nextTick()
|
||||||
|
|
||||||
|
expect(wrapper.emitted('updated')).toEqual([[{ fieldA: '' }]])
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user