@diagramers/admin
Version:
Diagramers Admin Template - React starter for admin dashboards.
83 lines (74 loc) • 2.5 kB
JavaScript
import { createSlice } from '@reduxjs/toolkit';
import { SERVICE_URL } from 'config.js';
import axios from 'axios';
const initialState = {
mailbox: [],
loading: false,
showSettings: { folder: 'inbox', starred: 'All', important: 'All', tags: 'All' },
selectedItems: [],
viewingMail: null,
};
const mailboxSlice = createSlice({
name: 'mailbox',
initialState,
reducers: {
receiveService(state, action) {
const { mailbox, loading } = action.payload;
state.mailbox = mailbox;
state.loading = loading;
},
setLoading(state, action) {
state.loading = action.payload;
},
toggleSelectMail(state, action) {
const item = action.payload;
if (state.selectedItems.find((x) => x.id === item.id)) {
state.selectedItems = state.selectedItems.filter((x) => x.id !== item.id);
} else {
state.selectedItems = [item, ...state.selectedItems];
}
},
setSelectedMails(state, action) {
state.selectedItems = action.payload;
},
setViewingMail(state, action) {
state.viewingMail = action.payload;
},
setShowSettings(state, action) {
state.showSettings = action.payload;
},
},
});
const { setLoading, receiveService } = mailboxSlice.actions;
export const { toggleSelectMail, setSelectedMails, setViewingMail, setShowSettings } = mailboxSlice.actions;
export const getMailbox = () => async (dispatch) => {
dispatch(setLoading(true));
const response = await axios.get(`${SERVICE_URL}/apps/mailbox`);
const mailbox = response.data;
dispatch(receiveService({ mailbox, loading: false }));
};
export const createMail =
({ item }) =>
async (dispatch) => {
dispatch(setLoading(true));
const response = await axios.post(`${SERVICE_URL}/apps/mailbox`, { item });
const mailbox = response.data;
dispatch(receiveService({ mailbox, loading: false }));
};
export const updateMail =
({ item }) =>
async (dispatch) => {
dispatch(setLoading(true));
const response = await axios.put(`${SERVICE_URL}/apps/mailbox`, { item });
const mailbox = response.data;
dispatch(receiveService({ mailbox, loading: false }));
};
export const deleteMail =
({ ids }) =>
async (dispatch) => {
const response = await axios.delete(`${SERVICE_URL}/apps/mailbox`, { ids });
const mailbox = response.data;
dispatch(receiveService({ mailbox, loading: false }));
};
const mailboxReducer = mailboxSlice.reducer;
export default mailboxReducer;