Raju2024's picture
Upload 1072 files
e3278e4 verified
import React, { useState, useEffect } from 'react';
import { Modal, Form, Input, Select as AntSelect, Button as AntButton, message } from 'antd';
import { Select, SelectItem } from "@tremor/react";
import { Card, Text } from "@tremor/react";
import { Member } from "@/components/networking";
interface TeamMemberModalProps {
visible: boolean;
onCancel: () => void;
onSubmit: (data: Member) => void;
initialData?: Member | null;
mode: 'add' | 'edit';
}
const TeamMemberModal: React.FC<TeamMemberModalProps> = ({
visible,
onCancel,
onSubmit,
initialData,
mode
}) => {
const [form] = Form.useForm();
useEffect(() => {
if (initialData) {
form.setFieldsValue({
user_email: initialData.user_email,
user_id: initialData.user_id,
role: initialData.role,
});
}
}, [initialData, form]);
const handleSubmit = async (values: any) => {
try {
const formData: Member = {
user_email: values.user_email,
user_id: values.user_id,
role: values.role,
};
onSubmit(formData);
form.resetFields();
message.success(`Successfully ${mode === 'add' ? 'added' : 'updated'} team member`);
} catch (error) {
message.error('Failed to submit form');
console.error('Form submission error:', error);
}
};
return (
<Modal
title={mode === 'add' ? "Add Team Member" : "Edit Team Member"}
visible={visible}
width={800}
footer={null}
onCancel={onCancel}
>
<Form
form={form}
onFinish={handleSubmit}
labelCol={{ span: 8 }}
wrapperCol={{ span: 16 }}
labelAlign="left"
initialValues={{
user_email: initialData?.user_email?.trim() || '',
user_id: initialData?.user_id?.trim() || '',
role: initialData?.role || 'user',
}}
>
<Form.Item
label="Email"
name="user_email"
className="mb-4"
rules={[
{ type: 'email', message: 'Please enter a valid email!' }
]}
>
<Input
name="user_email"
className="px-3 py-2 border rounded-md w-full"
placeholder="[email protected]"
onChange={(e) => {
e.target.value = e.target.value.trim();
}}
/>
</Form.Item>
<div className="text-center mb-4">
<Text>OR</Text>
</div>
<Form.Item
label="User ID"
name="user_id"
className="mb-4"
>
<Input
name="user_id"
className="px-3 py-2 border rounded-md w-full"
placeholder="user_123"
onChange={(e) => {
e.target.value = e.target.value.trim();
}}
/>
</Form.Item>
<Form.Item
label="Member Role"
name="role"
className="mb-4"
rules={[
{ required: true, message: 'Please select a role!' }
]}
>
<AntSelect defaultValue="user">
<AntSelect.Option value="admin">admin</AntSelect.Option>
<AntSelect.Option value="user">user</AntSelect.Option>
</AntSelect>
</Form.Item>
<div style={{ textAlign: "right", marginTop: "20px" }}>
<AntButton
onClick={onCancel}
style={{ marginRight: 8 }}
>
Cancel
</AntButton>
<AntButton
type="primary"
htmlType="submit"
>
{mode === 'add' ? 'Add Member' : 'Save Changes'}
</AntButton>
</div>
</Form>
</Modal>
);
};
export default TeamMemberModal;