123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- import { createSlice} from '@reduxjs/toolkit';
- import axios from 'axios';
- import { createAsyncThunk } from '@reduxjs/toolkit';
- const initialState = {
- message:'',
- editMessage: '',
- messageId: '',
- files: [],
- isLoading: false,
- loadingPercentage: 0,
- ref: null
- }
- const POST_FILES_URL = process.env.REACT_APP_SERVER_URL + `/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 sendPrivateMessageToSocket = (state, data) => {
- if (!!state.message && state.message.length < 200) { //remove to other file
- //need to check and fix data from dispatch
-
- // data.socket.emit("private message", {
- // fromUser: data.user,
- // message: data.message.message,
- // to: data.chatId,
- // toUser:data.toUser
- // })
-
- // data.socket.emit('message', {...data.user, message: state.message});
- }
- };
- export const deleteMessageHandler = (state, data) => {
- data.socket.emit('deleteMessage', {messageId: data.messageId, token: data.socket.auth.token});
- };
-
- export const editMessageHandler = (state, data) => {
- if(data.socket){
- data.socket.emit('editmessage', {messageNewText: data.editMessage.message, messageId: data.messageId, token: data.socket.auth.token}); //add backend functional later find by id and edit
- }
- };
- export const fileMessage = createAsyncThunk(
- 'messageReducer/fileMessageStatus',
- async (payload) => {
- const {files, axiosConfig} = payload;
- const token = localStorage.getItem('token')
- try {
- const formData = new FormData();
- if(files?.length) {
- for (let i = 0; i < files?.length; i++) {
- formData.append('files', files[i])
- }
- } else {
- formData.append('files', files)
- }
- formData.append('token', token)
- const response = await axios.post(POST_FILES_URL, formData,axiosConfig);
- 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) => {
- editMessageHandler(state, action.payload)
- state.editMessage = action.payload.editMessage;
- state.messageId = action.payload.messageId;
- state.ref = action.payload.ref;
- },
- deleteMessage: (state, action) => {
- deleteMessageHandler(state, action.payload)
-
- },
- sendMessage: (state, action) => sendMessageToSocket(state, action.payload),
- sendPrivateMessage:(state, action) => sendPrivateMessageToSocket(state, action.payload),
- clearMessage: (state) => {state.message = ''}
- },
- extraReducers: (bilder) => {
- bilder
- .addCase(fileMessage.fulfilled, (state, action) => {
- console.log(action.payload)
- state.files = action.payload.data?.files
-
- })
- .addCase(fileMessage.pending, (state, action) => {
- console.log('pending', fileMessage.pending())
- })
- .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,
- sendPrivateMessage,
- clearMessage,
- editMessage,
- deleteMessage
- } = actions;
|