mirror of
https://github.com/khairul169/vaulterm.git
synced 2025-06-17 17:19:37 +07:00
76 lines
2.0 KiB
TypeScript
76 lines
2.0 KiB
TypeScript
|
import Icons from "@/components/ui/icons";
|
||
|
import Modal from "@/components/ui/modal";
|
||
|
import { useZForm } from "@/hooks/useZForm";
|
||
|
import { createDisclosure } from "@/lib/utils";
|
||
|
import React from "react";
|
||
|
import { ScrollView, XStack } from "tamagui";
|
||
|
import FormField from "@/components/ui/form";
|
||
|
import { ErrorAlert } from "@/components/ui/alert";
|
||
|
import Button from "@/components/ui/button";
|
||
|
import {
|
||
|
SetRoleSchema,
|
||
|
setRoleSchema,
|
||
|
teamMemberRoles,
|
||
|
} from "../schema/team-form";
|
||
|
import { SelectField } from "@/components/ui/select";
|
||
|
import { useSetRoleMutation } from "../hooks/query";
|
||
|
|
||
|
export const changeRoleModal = createDisclosure<SetRoleSchema>();
|
||
|
|
||
|
const ChangeRoleForm = () => {
|
||
|
const { data } = changeRoleModal.use();
|
||
|
const form = useZForm(setRoleSchema, data);
|
||
|
const setRole = useSetRoleMutation(data?.teamId || "");
|
||
|
|
||
|
const onSubmit = form.handleSubmit((values) => {
|
||
|
setRole.mutate(values, {
|
||
|
onSuccess: () => {
|
||
|
changeRoleModal.onClose();
|
||
|
form.reset();
|
||
|
},
|
||
|
});
|
||
|
});
|
||
|
|
||
|
return (
|
||
|
<Modal
|
||
|
disclosure={changeRoleModal}
|
||
|
title="Change Role"
|
||
|
description="Change team member role."
|
||
|
maxHeight={280}
|
||
|
>
|
||
|
<ScrollView contentContainerStyle={{ padding: "$4", pt: 0, gap: "$4" }}>
|
||
|
<ErrorAlert error={setRole.error} />
|
||
|
|
||
|
<FormField label="Role">
|
||
|
<SelectField
|
||
|
items={teamMemberRoles}
|
||
|
form={form}
|
||
|
name="role"
|
||
|
placeholder="Select Role..."
|
||
|
/>
|
||
|
</FormField>
|
||
|
</ScrollView>
|
||
|
|
||
|
<XStack p="$4" gap="$4">
|
||
|
<Button
|
||
|
flex={1}
|
||
|
onPress={changeRoleModal.onClose}
|
||
|
bg="$colorTransparent"
|
||
|
>
|
||
|
Cancel
|
||
|
</Button>
|
||
|
<Button
|
||
|
flex={1}
|
||
|
icon={<Icons name="account-plus" size={18} />}
|
||
|
onPress={onSubmit}
|
||
|
isLoading={setRole.isPending}
|
||
|
>
|
||
|
Update Role
|
||
|
</Button>
|
||
|
</XStack>
|
||
|
</Modal>
|
||
|
);
|
||
|
};
|
||
|
|
||
|
export default ChangeRoleForm;
|