12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- import { createSlice} from '@reduxjs/toolkit';
- import axios from 'axios';
- import { createAsyncThunk } from '@reduxjs/toolkit';
- const initialState = {
- startMessages: [],
- message:'',
- editMessage: '',
- messageId: '',
- files: [],
- ref: null
- }
- const POST_FILES_URL = 'http://localhost:5000/files';
- export const sendMessageToSocket = (state, data) => {
- if (state.message && state.message.length < 200) { //remove to other file
- data.socket.emit('message', {...data.user, message: state.message});
-
- }
- };
- export const editMessageToSocket = (state, data) => {
- if (state.message && state.message.length < 200) {
- data.socket.emit('editmessage', {...data.user, message: state.message}); //add backend functional later find by id and edit
- }
- };
- export const fileMessage = createAsyncThunk(
- 'messageReducer/fileMessage',
- async (files) => {
- const token = localStorage.getItem('token')
- try {
- const formData = new FormData();
- console.log(files)
- 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
-
- }
- })
- const messageReducerSlice = createSlice({
- name: 'messageReducer',
- initialState,
- reducers: {
- storeMessage: (state, action) => {state.message = action.payload.message},
- editMessage: (state, action) => {
- state.editMessage = action.payload.editMessage;
- state.messageId = action.payload.messageId;
- state.ref = action.payload.ref;
- },
- sendMessage: (state, action) => sendMessageToSocket(state, action.payload),
- 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)
- })
-
- },
- });
- const {actions, reducer} = messageReducerSlice;
- const messageReducer = reducer;
- export default messageReducer;
- export const {
- storeMessage,
- sendMessage,
- clearMessage,
- editMessage
- } = actions;
|