diff --git a/src/components/TemplateList.jsx b/src/components/TemplateList.jsx
index 9a009f0..9ac12c3 100644
--- a/src/components/TemplateList.jsx
+++ b/src/components/TemplateList.jsx
@@ -3,7 +3,7 @@ import { Button } from 'react-bootstrap';
import { useSelector } from 'react-redux';
import Spinning from './Spinning';
-export default function TemplateList({ activeTab }) {
+export default function TemplateList({ activeTab, openModal, setFormData }) {
const { templates, templatesStatus } = useSelector((state) => state.inbox);
// 如果正在加载,显示加载中
if (templatesStatus === 'loading') {
@@ -16,6 +16,17 @@ export default function TemplateList({ activeTab }) {
);
}
+ const handleEdit = (template) => {
+ setFormData({
+ id: template.id,
+ mission: template.type,
+ platform: template.platform,
+ service: template.service,
+ template: template.message,
+ });
+ openModal();
+ }
+
return (
{templates.map((template) => (
@@ -37,7 +48,7 @@ export default function TemplateList({ activeTab }) {
- {template.name}
-
-
+
setShowEditTemplateModal(true)}
+ setFormData={setFormData}
+ />
+ setShowAddTemplateModal(false)}
+ type='add'
+ formData={formData}
+ setFormData={setFormData}
+ />
+ setShowEditTemplateModal(false)}
+ type='edit'
+ formData={formData}
+ setFormData={setFormData}
+ />
);
}
+
+function AddTemplateModal({ show, formData, setFormData, handleClose, type = 'add' }) {
+ const dispatch = useDispatch();
+
+ const handleChange = (e) => {
+ setFormData({
+ ...formData,
+ [e.target.name]: e.target.value,
+ });
+ };
+
+ const handleSubmit = () => {
+ console.log(formData);
+ if(type === 'add') {
+ dispatch(addTemplateApi(formData));
+ } else {
+ dispatch(editTemplateApi(formData));
+ }
+ };
+
+ useEffect(() => {
+ }, [formData]);
+
+ return (
+
+
+ {type === 'add' ? 'Add Template' : 'Edit Template'}
+
+
+
+ Mission
+
+
+
+
+
+
+
+
+
+ Platform
+
+
+
+
+
+
+
+
+
+ 合作模式
+
+
+
+
+
+
+
+
+
+
+ Template
+
+
+
+
+
+
+ Close
+
+
+ Create
+
+
+
+ );
+}
diff --git a/src/store/slices/inboxSlice.js b/src/store/slices/inboxSlice.js
index ce8ad1a..3f4f10e 100644
--- a/src/store/slices/inboxSlice.js
+++ b/src/store/slices/inboxSlice.js
@@ -191,6 +191,25 @@ export const fetchTemplates = createAsyncThunk('inbox/fetchTemplates', async (ty
return mockTemplates.filter((item) => item.type === type);
});
+export const editTemplateApi = createAsyncThunk('inbox/editTemplate', async (formData) => {
+ await new Promise((resolve) => setTimeout(resolve, 500));
+ const {id, ...rest} = formData;
+ const index = mockTemplates.findIndex((item) => item.id === id);
+ mockTemplates[index] = { ...mockTemplates[index], ...rest };
+ return mockTemplates;
+});
+
+export const addTemplateApi = createAsyncThunk('inbox/addTemplate', async (formData) => {
+ await new Promise((resolve) => setTimeout(resolve, 500));
+ const newTemplate = {
+ id: mockTemplates.length + 1,
+ message: formData.template,
+ ...formData,
+ };
+ const newTemplates = [...mockTemplates, newTemplate];
+ return newTemplates;
+});
+
const initialState = {
inboxList: [],
inboxStatus: 'idle', // 'idle' | 'loading' | 'succeeded' | 'failed'
@@ -252,6 +271,29 @@ const inboxSlice = createSlice({
.addCase(fetchTemplates.fulfilled, (state, action) => {
state.templatesStatus = 'succeeded';
state.templates = action.payload;
+ })
+ .addCase(editTemplateApi.pending, (state) => {
+ state.templatesStatus = 'loading';
+ })
+ .addCase(editTemplateApi.fulfilled, (state, action) => {
+ state.templatesStatus = 'succeeded';
+ state.templates = action.payload;
+ })
+ .addCase(editTemplateApi.rejected, (state, action) => {
+ state.templatesStatus = 'failed';
+ state.error = action.error.message;
+ })
+ .addCase(addTemplateApi.pending, (state) => {
+ state.templatesStatus = 'loading';
+ })
+ .addCase(addTemplateApi.fulfilled, (state, action) => {
+ console.log(action.payload);
+ state.templatesStatus = 'succeeded';
+ state.templates = action.payload;
+ })
+ .addCase(addTemplateApi.rejected, (state, action) => {
+ state.templatesStatus = 'failed';
+ state.error = action.error.message;
});
},
});