blob: ce80a0a8d517c33bb0fc855c59689421bb088851 [file] [log] [blame] [edit]
// import React, { useState } from 'react';
// import { useGroupStore } from '../../context/useGroupStore';
// const CreatePostForm = ({ groupId, onClose, onPostCreated }) => {
// const { userId, handleCreatePost } = useGroupStore();
// const [title, setTitle] = useState('');
// const [content, setContent] = useState('');
// const [images, setImages] = useState([]);
// const [loading, setLoading] = useState(false);
// const [error, setError] = useState('');
// const [formError, setFormError] = useState({});
// // 表单验证
// const validateForm = () => {
// const errors = {};
// let isValid = true;
// if (!title.trim()) {
// errors.title = '请输入帖子标题';
// isValid = false;
// }
// if (!content.trim()) {
// errors.content = '请输入帖子内容';
// isValid = false;
// }
// setFormError(errors);
// return isValid;
// };
// const handleSubmit = async (e) => {
// e.preventDefault();
// // 先进行表单验证
// if (!validateForm()) {
// return;
// }
// console.log('点击发布,准备发送请求');
// setLoading(true);
// setError('');
// try {
// // 检查必要条件
// if (!groupId) {
// throw new Error('小组ID缺失');
// }
// if (!userId) {
// throw new Error('用户ID缺失,请先登录');
// }
// // 打印关键变量进行调试
// console.log('准备发布帖子:', {
// groupId,
// userId,
// title,
// content,
// imagesCount: images.length
// });
// // 调用创建帖子的方法
// const success = await handleCreatePost(groupId, userId, content, title, images);
// if (success) {
// alert('帖子发布成功');
// onPostCreated(); // 触发刷新
// onClose(); // 关闭弹窗
// } else {
// setError('帖子发布失败,请重试');
// }
// } catch (error) {
// console.error('发布帖子错误:', error);
// setError(error.message || '帖子发布失败');
// } finally {
// setLoading(false);
// }
// };
// return (
// <div className="create-post-form">
// <h4>发布新帖子</h4>
// <div className="form-group">
// <input
// type="text"
// placeholder="帖子标题"
// value={title}
// onChange={(e) => setTitle(e.target.value)}
// required
// />
// {formError.title && <p className="error-message">{formError.title}</p>}
// </div>
// <div className="form-group">
// <textarea
// placeholder="帖子内容"
// value={content}
// onChange={(e) => setContent(e.target.value)}
// required
// />
// {formError.content && <p className="error-message">{formError.content}</p>}
// </div>
// <div className="form-group">
// <input
// type="file"
// multiple
// onChange={(e) => setImages(e.target.files)}
// />
// </div>
// {error && <p className="error-message">{error}</p>}
// <div className="button-group">
// <button onClick={handleSubmit} disabled={loading}>
// {loading ? '发布中...' : '发布'}
// </button>
// <button onClick={onClose} disabled={loading}>
// 取消
// </button>
// </div>
// </div>
// );
// };
// export default CreatePostForm;
import React, { useState, useEffect } from 'react';
import { useUser } from '../../context/UserContext';
import { useGroupStore } from '../../context/useGroupStore';
const CreatePostForm = ({ groupId, onClose, onPostCreated }) => {
const { user, loading: userLoading } = useUser();
const { handleCreatePost } = useGroupStore();
const [title, setTitle] = useState('');
const [content, setContent] = useState('');
const [images, setImages] = useState([]);
const [loading, setLoading] = useState(false);
const [error, setError] = useState('');
const [formError, setFormError] = useState({});
// 处理用户状态加载中或未登录的情况
if (userLoading) {
return <div className="create-post-form loading">加载用户信息...</div>;
}
if (!user) {
return (
<div className="create-post-form">
<div className="error-message">请先登录以发布帖子</div>
<button className="close-btn" onClick={onClose}>
关闭
</button>
</div>
);
}
// 表单验证
const validateForm = () => {
const errors = {};
let isValid = true;
if (!title.trim()) {
errors.title = '请输入帖子标题';
isValid = false;
}
if (!content.trim()) {
errors.content = '请输入帖子内容';
isValid = false;
}
setFormError(errors);
return isValid;
};
const handleSubmit = async (e) => {
e.preventDefault();
if (!validateForm()) {
return;
}
console.log('点击发布,准备发送请求');
setLoading(true);
setError('');
try {
if (!groupId) {
throw new Error('小组ID缺失');
}
console.log('准备发布帖子:', {
groupId,
userId: user.userId,
title,
content,
imagesCount: images.length
});
// 调用创建帖子方法,不再传递 userId 参数
const success = await handleCreatePost(groupId, content, title, images);
if (success) {
alert('帖子发布成功');
onPostCreated();
onClose();
} else {
setError('帖子发布失败,请重试');
}
} catch (error) {
console.error('发布帖子错误:', error);
setError(error.message || '帖子发布失败');
} finally {
setLoading(false);
}
};
return (
<div className="create-post-form">
<h4>发布新帖子</h4>
<div className="form-group">
<input
type="text"
placeholder="帖子标题"
value={title}
onChange={(e) => setTitle(e.target.value)}
required
/>
{formError.title && <div className="error-message">{formError.title}</div>}
</div>
<div className="form-group">
<textarea
placeholder="帖子内容"
value={content}
onChange={(e) => setContent(e.target.value)}
required
/>
{formError.content && <div className="error-message">{formError.content}</div>}
</div>
<div className="form-group">
<label>上传图片:</label>
<input
type="file"
multiple
onChange={(e) => setImages(e.target.files)}
/>
</div>
{error && <div className="error-message">{error}</div>}
<div className="button-group">
<button className="submit-btn" onClick={handleSubmit} disabled={loading}>
{loading ? '发布中...' : '发布'}
</button>
<button className="cancel-btn" onClick={onClose} disabled={loading}>
取消
</button>
</div>
</div>
);
};
export default CreatePostForm;