|
@@ -1,12 +1,20 @@
|
|
import { createSlice} from '@reduxjs/toolkit';
|
|
import { createSlice} from '@reduxjs/toolkit';
|
|
|
|
+import axios from 'axios';
|
|
|
|
+import { createAsyncThunk } from '@reduxjs/toolkit';
|
|
|
|
+
|
|
|
|
|
|
const initialState = {
|
|
const initialState = {
|
|
startMessages: [],
|
|
startMessages: [],
|
|
message:'',
|
|
message:'',
|
|
editMessage: '',
|
|
editMessage: '',
|
|
messageId: '',
|
|
messageId: '',
|
|
|
|
+ files: [],
|
|
|
|
+ ref: null
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+const POST_FILES_URL = 'http://localhost:5000/files';
|
|
|
|
+
|
|
|
|
+
|
|
export const sendMessageToSocket = (state, data) => {
|
|
export const sendMessageToSocket = (state, data) => {
|
|
if (state.message && state.message.length < 200) { //remove to other file
|
|
if (state.message && state.message.length < 200) { //remove to other file
|
|
data.socket.emit('message', {...data.user, message: state.message});
|
|
data.socket.emit('message', {...data.user, message: state.message});
|
|
@@ -21,6 +29,32 @@ export const editMessageToSocket = (state, data) => {
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+export const fileMessage = createAsyncThunk(
|
|
|
|
+ 'messageReducer/fileMessage',
|
|
|
|
+ async (files) => {
|
|
|
|
+ const token = localStorage.getItem('token')
|
|
|
|
+ try {
|
|
|
|
+ const formData = new FormData();
|
|
|
|
+ for (let i = 0; i < files.length; i++) {
|
|
|
|
+ formData.append('files', files[i])
|
|
|
|
+ }
|
|
|
|
+ formData.append('token', token)
|
|
|
|
+ const response = await axios.post(POST_FILES_URL, formData,
|
|
|
|
+ {
|
|
|
|
+ headers: {
|
|
|
|
+ "Content-type": "multipart/form-data",
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ return await response;
|
|
|
|
+
|
|
|
|
+ } catch (err) {
|
|
|
|
+ console.log('error messageReducer thunk', err)
|
|
|
|
+ return err?.message
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -32,9 +66,19 @@ const messageReducerSlice = createSlice({
|
|
editMessage: (state, action) => {
|
|
editMessage: (state, action) => {
|
|
state.editMessage = action.payload.editMessage;
|
|
state.editMessage = action.payload.editMessage;
|
|
state.messageId = action.payload.messageId;
|
|
state.messageId = action.payload.messageId;
|
|
|
|
+ state.ref = action.payload.ref;
|
|
},
|
|
},
|
|
sendMessage: (state, action) => sendMessageToSocket(state, action.payload),
|
|
sendMessage: (state, action) => sendMessageToSocket(state, action.payload),
|
|
- clearMessage: (state) => {state.message = ''}
|
|
|
|
|
|
+ clearMessage: (state) => {state.message = ''},
|
|
|
|
+ extraReducers: (bilder) =>
|
|
|
|
+ bilder
|
|
|
|
+ .addCase(fileMessage.fulfilled, (state, action) => {
|
|
|
|
+ state.files = action.payload.data?.files
|
|
|
|
+
|
|
|
|
+ })
|
|
|
|
+ .addCase(fileMessage.rejected, (state, action) => {
|
|
|
|
+ console.log('post file rejected', action.payload)
|
|
|
|
+ })
|
|
|
|
|
|
},
|
|
},
|
|
});
|
|
});
|