chore: adjust callInterceptor params (#9674)

* chore: adjust callInterceptor params

* chore: upd
This commit is contained in:
neverland 2021-10-14 10:21:09 +08:00 committed by GitHub
parent 2bd6bc48c2
commit 66cf1dabba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 36 additions and 46 deletions

View File

@ -74,10 +74,7 @@ export default defineComponent({
const close = (action: DialogAction) => { const close = (action: DialogAction) => {
updateShow(false); updateShow(false);
props.callback?.(action);
if (props.callback) {
props.callback(action);
}
}; };
const getActionHandler = (action: DialogAction) => () => { const getActionHandler = (action: DialogAction) => () => {
@ -90,8 +87,7 @@ export default defineComponent({
if (props.beforeClose) { if (props.beforeClose) {
loading[action] = true; loading[action] = true;
callInterceptor({ callInterceptor(props.beforeClose, {
interceptor: props.beforeClose,
args: [action], args: [action],
done() { done() {
close(action); close(action);

View File

@ -49,7 +49,7 @@ Dialog.defaultOptions = {
className: '', className: '',
allowHtml: false, allowHtml: false,
lockScroll: true, lockScroll: true,
transition: 'van-dialog-bounce', transition: undefined,
beforeClose: null, beforeClose: null,
overlayClass: '', overlayClass: '',
overlayStyle: undefined, overlayStyle: undefined,

View File

@ -100,8 +100,7 @@ export default defineComponent({
const updateShow = (show: boolean) => emit('update:show', show); const updateShow = (show: boolean) => emit('update:show', show);
const emitClose = () => { const emitClose = () => {
callInterceptor({ callInterceptor(props.beforeClose, {
interceptor: props.beforeClose,
args: [state.active], args: [state.active],
done: () => updateShow(false), done: () => updateShow(false),
}); });

View File

@ -113,8 +113,7 @@ export default defineComponent({
const close = () => { const close = () => {
if (opened) { if (opened) {
callInterceptor({ callInterceptor(props.beforeClose, {
interceptor: props.beforeClose,
done() { done() {
opened = false; opened = false;
emit('close'); emit('close');

View File

@ -128,9 +128,8 @@ export default defineComponent({
const setValue = (value: string | number) => { const setValue = (value: string | number) => {
if (props.beforeChange) { if (props.beforeChange) {
callInterceptor({ callInterceptor(props.beforeChange, {
args: [value], args: [value],
interceptor: props.beforeChange,
done() { done() {
current.value = value; current.value = value;
}, },

View File

@ -162,8 +162,7 @@ export default defineComponent({
emit('click', position); emit('click', position);
if (opened && !lockClick) { if (opened && !lockClick) {
callInterceptor({ callInterceptor(props.beforeClose, {
interceptor: props.beforeClose,
args: [ args: [
{ {
name: props.name, name: props.name,

View File

@ -83,8 +83,7 @@ export default defineComponent({
const setActive = (active: number | string) => { const setActive = (active: number | string) => {
if (active !== props.modelValue) { if (active !== props.modelValue) {
callInterceptor({ callInterceptor(props.beforeChange, {
interceptor: props.beforeChange,
args: [active], args: [active],
done() { done() {
emit('update:modelValue', active); emit('update:modelValue', active);

View File

@ -307,8 +307,7 @@ export default defineComponent({
// should be removed in next major version // should be removed in next major version
emit('disabled', name, title); emit('disabled', name, title);
} else { } else {
callInterceptor({ callInterceptor(props.beforeChange, {
interceptor: props.beforeChange,
args: [name], args: [name],
done: () => { done: () => {
setCurrentIndex(index); setCurrentIndex(index);

View File

@ -60,8 +60,7 @@ export default defineComponent({
const onDelete = (event: MouseEvent) => { const onDelete = (event: MouseEvent) => {
const { name, item, index, beforeDelete } = props; const { name, item, index, beforeDelete } = props;
event.stopPropagation(); event.stopPropagation();
callInterceptor({ callInterceptor(beforeDelete, {
interceptor: beforeDelete,
args: [item, { name, index }], args: [item, { name, index }],
done: () => emit('delete'), done: () => emit('delete'),
}); });

View File

@ -3,17 +3,21 @@ import { isPromise } from './validate';
export type Interceptor = (...args: any[]) => Promise<boolean> | boolean; export type Interceptor = (...args: any[]) => Promise<boolean> | boolean;
export function callInterceptor(options: { export function callInterceptor(
interceptor?: Interceptor; interceptor: Interceptor | undefined,
args?: any[]; {
done: () => void; args = [],
canceled?: () => void; done,
}) { canceled,
const { interceptor, args, done, canceled } = options; }: {
args?: any[];
done: () => void;
canceled?: () => void;
}
) {
if (interceptor) { if (interceptor) {
// eslint-disable-next-line prefer-spread // eslint-disable-next-line prefer-spread
const returnVal = interceptor.apply(null, args || []); const returnVal = interceptor.apply(null, args);
if (isPromise(returnVal)) { if (isPromise(returnVal)) {
returnVal returnVal

View File

@ -3,50 +3,47 @@ import { callInterceptor } from '../interceptor';
test('callInterceptor', async () => { test('callInterceptor', async () => {
const done = jest.fn(); const done = jest.fn();
callInterceptor({ done }); callInterceptor(undefined, { done });
expect(done).toHaveBeenCalledTimes(1); expect(done).toHaveBeenCalledTimes(1);
callInterceptor({ callInterceptor(() => false, {
interceptor: () => false,
done, done,
}); });
expect(done).toHaveBeenCalledTimes(1); expect(done).toHaveBeenCalledTimes(1);
callInterceptor({ callInterceptor(() => true, {
interceptor: () => true,
done, done,
}); });
expect(done).toHaveBeenCalledTimes(2); expect(done).toHaveBeenCalledTimes(2);
callInterceptor({ callInterceptor(() => Promise.resolve(false), {
interceptor: () => Promise.resolve(false),
done, done,
}); });
await later(); await later();
expect(done).toHaveBeenCalledTimes(2); expect(done).toHaveBeenCalledTimes(2);
callInterceptor({ callInterceptor(() => Promise.resolve(true), {
interceptor: () => Promise.resolve(true),
done, done,
}); });
await later(); await later();
expect(done).toHaveBeenCalledTimes(3); expect(done).toHaveBeenCalledTimes(3);
callInterceptor({ callInterceptor(() => Promise.reject(), {
interceptor: () => Promise.reject(),
done, done,
}); });
await later(); await later();
expect(done).toHaveBeenCalledTimes(3); expect(done).toHaveBeenCalledTimes(3);
callInterceptor({ callInterceptor(
interceptor: (...args) => { (...args) => {
expect(args).toEqual(['foo']); expect(args).toEqual(['foo']);
return false; return false;
}, },
args: ['foo'], {
done, args: ['foo'],
}); done,
}
);
expect(done).toHaveBeenCalledTimes(3); expect(done).toHaveBeenCalledTimes(3);
}); });