150 lines
4.2 KiB
TypeScript
150 lines
4.2 KiB
TypeScript
import { useFieldSchema, useForm } from '@formily/react';
|
|
import { Modal } from 'antd';
|
|
import { useTranslation } from 'react-i18next';
|
|
import { useHistory } from 'react-router-dom';
|
|
import { useActionContext } from '../../schema-component';
|
|
import { useBlockRequestContext, useFilterByTk } from '../BlockProvider';
|
|
import { useFormBlockContext } from '../FormBlockProvider';
|
|
import { TableFieldResource } from '../TableFieldProvider';
|
|
|
|
export const usePickActionProps = () => {
|
|
const form = useForm();
|
|
return {
|
|
onClick() {
|
|
console.log('usePickActionProps', form.values);
|
|
},
|
|
};
|
|
};
|
|
|
|
function isURL(string) {
|
|
let url;
|
|
|
|
try {
|
|
url = new URL(string);
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
|
|
return url.protocol === 'http:' || url.protocol === 'https:';
|
|
}
|
|
|
|
export const useCreateActionProps = () => {
|
|
const form = useForm();
|
|
const { resource, __parent } = useBlockRequestContext();
|
|
const { visible, setVisible } = useActionContext();
|
|
const { field } = useFormBlockContext();
|
|
const history = useHistory();
|
|
const { t } = useTranslation();
|
|
const actionSchema = useFieldSchema();
|
|
return {
|
|
async onClick() {
|
|
const skipValidator = actionSchema?.['x-action-settings']?.skipValidator;
|
|
const overwriteValues = actionSchema?.['x-action-settings']?.overwriteValues;
|
|
if (!skipValidator) {
|
|
await form.submit();
|
|
}
|
|
await resource.create({
|
|
values: {
|
|
...form.values,
|
|
...overwriteValues,
|
|
},
|
|
});
|
|
__parent?.service?.refresh?.();
|
|
setVisible?.(false);
|
|
const onSuccess = actionSchema?.['x-action-settings']?.onSuccess;
|
|
if (!onSuccess?.successMessage) {
|
|
return;
|
|
}
|
|
Modal.success({
|
|
title: onSuccess?.successMessage,
|
|
onOk: async () => {
|
|
await form.reset();
|
|
if (onSuccess?.redirecting && onSuccess?.redirectTo) {
|
|
if (isURL(onSuccess.redirectTo)) {
|
|
window.location.href = onSuccess.redirectTo;
|
|
} else {
|
|
history.push(onSuccess.redirectTo);
|
|
}
|
|
}
|
|
},
|
|
});
|
|
},
|
|
};
|
|
};
|
|
|
|
export const useUpdateActionProps = () => {
|
|
const form = useForm();
|
|
const filterByTk = useFilterByTk();
|
|
const { resource, __parent } = useBlockRequestContext();
|
|
const { setVisible } = useActionContext();
|
|
const actionSchema = useFieldSchema();
|
|
const history = useHistory();
|
|
return {
|
|
async onClick() {
|
|
const skipValidator = actionSchema?.['x-action-settings']?.skipValidator;
|
|
const overwriteValues = actionSchema?.['x-action-settings']?.overwriteValues;
|
|
if (!skipValidator) {
|
|
await form.submit();
|
|
}
|
|
await resource.update({
|
|
filterByTk,
|
|
values: {
|
|
...form.values,
|
|
...overwriteValues,
|
|
},
|
|
});
|
|
__parent?.service?.refresh?.();
|
|
if (!(resource instanceof TableFieldResource)) {
|
|
__parent?.__parent?.service?.refresh?.();
|
|
}
|
|
setVisible?.(false);
|
|
const onSuccess = actionSchema?.['x-action-settings']?.onSuccess;
|
|
if (onSuccess?.successMessage) {
|
|
Modal.success({
|
|
title: onSuccess?.successMessage,
|
|
onOk: async () => {
|
|
await form.reset();
|
|
if (onSuccess?.redirecting && onSuccess?.redirectTo) {
|
|
if (isURL(onSuccess.redirectTo)) {
|
|
window.location.href = onSuccess.redirectTo;
|
|
} else {
|
|
history.push(onSuccess.redirectTo);
|
|
}
|
|
}
|
|
},
|
|
});
|
|
}
|
|
},
|
|
};
|
|
};
|
|
|
|
export const useDestroyActionProps = () => {
|
|
const filterByTk = useFilterByTk();
|
|
const { resource, service } = useBlockRequestContext();
|
|
return {
|
|
async onClick() {
|
|
await resource.destroy({
|
|
filterByTk,
|
|
});
|
|
service?.refresh?.();
|
|
},
|
|
};
|
|
};
|
|
|
|
export const useBulkDestroyActionProps = () => {
|
|
const { field } = useBlockRequestContext();
|
|
const { resource, service } = useBlockRequestContext();
|
|
return {
|
|
async onClick() {
|
|
if (!field?.data?.selectedRowKeys?.length) {
|
|
return;
|
|
}
|
|
await resource.destroy({
|
|
filterByTk: field.data?.selectedRowKeys,
|
|
});
|
|
field.data.selectedRowKeys = [];
|
|
service?.refresh?.();
|
|
},
|
|
};
|
|
};
|