feature: board operations (#1800)

This commit is contained in:
Manuel
2024-01-13 22:52:44 +01:00
committed by GitHub
parent 6717bcf8b4
commit c7992260f0
7 changed files with 241 additions and 22 deletions

View File

@@ -0,0 +1,68 @@
import { modals } from '@mantine/modals';
import { Alert, Button, TextInput } from '@mantine/core';
import { api } from '~/utils/api';
import { useForm, zodResolver } from '@mantine/form';
import { z } from 'zod';
import { IconAlertCircle } from '@tabler/icons-react';
import { useTranslation } from 'next-i18next';
import { configNameSchema } from '~/validations/boards';
type RenameBoardModalProps = {
boardName: string;
configNames: string[];
onClose: () => void;
}
export const RenameBoardModal = ({ boardName, configNames, onClose }: RenameBoardModalProps) => {
const { t } = useTranslation(['manage/boards', 'common']);
const utils = api.useUtils();
const { mutateAsync: mutateRenameBoardAsync, isLoading, isError, error } = api.boards.renameBoard.useMutation({
onSettled: () => {
void utils.boards.all.invalidate();
}
});
const form = useForm({
initialValues: {
newName: '',
},
validate: zodResolver(z.object({
newName: configNameSchema.refine(value => !configNames.includes(value)),
})),
validateInputOnBlur: true,
validateInputOnChange: true,
});
const handleSubmit = () => {
mutateRenameBoardAsync({
oldName: boardName,
newName: form.values.newName,
}).then(() => {
onClose();
});
};
return (
<form onSubmit={form.onSubmit(handleSubmit)}>
{isError && error && (
<Alert icon={<IconAlertCircle size={"1rem"} />} mb={"md"}>
{error.message}
</Alert>
)}
<TextInput
label={t('cards.menu.rename.modal.fields.name.label')}
placeholder={t('cards.menu.rename.modal.fields.name.placeholder') as string}
data-autofocus
{...form.getInputProps('newName')} />
<Button
loading={isLoading}
fullWidth
mt="md"
type={'submit'}
variant={"light"}>
{t('common:confirm')}
</Button>
</form>
);
};