mirror of
https://github.com/frappe/books.git
synced 2025-04-02 08:11:52 +00:00
refactor: prevent bubbling
- update this.$set - beforeDestroy -> beforeUnmount
This commit is contained in:
parent
51c066e926
commit
fec1f65e33
@ -54,7 +54,7 @@
|
|||||||
:class="inputClasses"
|
:class="inputClasses"
|
||||||
:checked="value"
|
:checked="value"
|
||||||
:readonly="isReadOnly"
|
:readonly="isReadOnly"
|
||||||
@change="(e) => triggerChange(+e.target.checked)"
|
@change.stop="(e) => triggerChange(+e.target.checked)"
|
||||||
@focus="(e) => $emit('focus', e)"
|
@focus="(e) => $emit('focus', e)"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
:placeholder="t('Custom Hex')"
|
:placeholder="t('Custom Hex')"
|
||||||
:class="inputClasses"
|
:class="inputClasses"
|
||||||
:value="value"
|
:value="value"
|
||||||
@change="(e) => setColorValue(e.target.value)"
|
@change.stop="(e) => setColorValue(e.target.value)"
|
||||||
class="bg-gray-100"
|
class="bg-gray-100"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -3,6 +3,7 @@ import frappe from 'frappe';
|
|||||||
import AutoComplete from './AutoComplete';
|
import AutoComplete from './AutoComplete';
|
||||||
import Badge from '@/components/Badge';
|
import Badge from '@/components/Badge';
|
||||||
import { openQuickEdit } from '@/utils';
|
import { openQuickEdit } from '@/utils';
|
||||||
|
import { markRaw } from 'vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Link',
|
name: 'Link',
|
||||||
@ -64,7 +65,7 @@ export default {
|
|||||||
label: 'Create',
|
label: 'Create',
|
||||||
value: 'Create',
|
value: 'Create',
|
||||||
action: () => this.openNewDoc(),
|
action: () => this.openNewDoc(),
|
||||||
component: {
|
component: markRaw({
|
||||||
template: `
|
template: `
|
||||||
<div class="flex items-center font-semibold">{{ t('Create') }}
|
<div class="flex items-center font-semibold">{{ t('Create') }}
|
||||||
<Badge color="blue" class="ml-2" v-if="isNewValue">{{ linkValue }}</Badge>
|
<Badge color="blue" class="ml-2" v-if="isNewValue">{{ linkValue }}</Badge>
|
||||||
@ -78,7 +79,7 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
components: { Badge },
|
components: { Badge },
|
||||||
},
|
}),
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
async getFilters(keyword) {
|
async getFilters(keyword) {
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
'text-gray-400': !value,
|
'text-gray-400': !value,
|
||||||
}"
|
}"
|
||||||
:value="value"
|
:value="value"
|
||||||
@change="(e) => triggerChange(e.target.value)"
|
@change.stop="(e) => triggerChange(e.target.value)"
|
||||||
@focus="(e) => $emit('focus', e)"
|
@focus="(e) => $emit('focus', e)"
|
||||||
>
|
>
|
||||||
<option value="" disabled selected>
|
<option value="" disabled selected>
|
||||||
|
@ -59,14 +59,14 @@ export default {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.$set(this.errors, df.fieldname, null);
|
this.errors[df.fieldname] = null;
|
||||||
const oldValue = this.row.get(df.fieldname);
|
const oldValue = this.row.get(df.fieldname);
|
||||||
if (oldValue === value) {
|
if (oldValue === value) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.row.set(df.fieldname, value).catch((e) => {
|
this.row.set(df.fieldname, value).catch((e) => {
|
||||||
this.$set(this.errors, df.fieldname, getErrorMessage(e, this.row));
|
this.errors[df.fieldname] = getErrorMessage(e, this.row);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
getErrorString() {
|
getErrorString() {
|
||||||
|
@ -70,7 +70,7 @@ export default {
|
|||||||
document.addEventListener('click', this.listener);
|
document.addEventListener('click', this.listener);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
beforeDestroy() {
|
beforeUnmount() {
|
||||||
this.popper && this.popper.destroy();
|
this.popper && this.popper.destroy();
|
||||||
if (this.listener) {
|
if (this.listener) {
|
||||||
document.removeEventListener('click', this.listener);
|
document.removeEventListener('click', this.listener);
|
||||||
|
@ -167,7 +167,7 @@ let TwoColumnForm = {
|
|||||||
|
|
||||||
let oldValue = this.doc.get(df.fieldname);
|
let oldValue = this.doc.get(df.fieldname);
|
||||||
|
|
||||||
this.$set(this.errors, df.fieldname, null);
|
this.errors[df.fieldname] = null;
|
||||||
if (oldValue === value) {
|
if (oldValue === value) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -186,7 +186,7 @@ let TwoColumnForm = {
|
|||||||
onChangeCommon(df, value) {
|
onChangeCommon(df, value) {
|
||||||
this.doc.set(df.fieldname, value).catch((e) => {
|
this.doc.set(df.fieldname, value).catch((e) => {
|
||||||
// set error message for this field
|
// set error message for this field
|
||||||
this.$set(this.errors, df.fieldname, getErrorMessage(e, this.doc));
|
this.errors[df.fieldname] = getErrorMessage(e, this.doc);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (this.autosave && this.doc._dirty && !this.doc.isNew()) {
|
if (this.autosave && this.doc._dirty && !this.doc.isNew()) {
|
||||||
|
@ -2,17 +2,20 @@
|
|||||||
export default {
|
export default {
|
||||||
name: 'WithScroll',
|
name: 'WithScroll',
|
||||||
mounted() {
|
mounted() {
|
||||||
let handler = () => {
|
this.listener = () => {
|
||||||
let { scrollLeft, scrollTop } = this.$el;
|
let { scrollLeft, scrollTop } = this.$el;
|
||||||
this.$emit('scroll', { scrollLeft, scrollTop });
|
this.$emit('scroll', { scrollLeft, scrollTop });
|
||||||
};
|
};
|
||||||
this.$el.addEventListener('scroll', handler);
|
this.$el.addEventListener('scroll', this.listener);
|
||||||
this.$once('hook:beforeDestroy', () => {
|
},
|
||||||
this.$el.removeEventListener('scroll', handler);
|
beforeUnmount() {
|
||||||
});
|
if (this.listener) {
|
||||||
|
this.$el.removeEventListener('scroll', this.listener);
|
||||||
|
delete this.listener;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
render() {
|
render() {
|
||||||
return this.$slots.default[0];
|
return this.$slots.default[0];
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user