mirror of
https://github.com/darkwire/darkwire.io.git
synced 2025-07-25 13:26:26 +00:00
216 lines
5.0 KiB
JavaScript
216 lines
5.0 KiB
JavaScript
const initialState = {
|
|
items: [],
|
|
};
|
|
|
|
const activities = (state = initialState, action) => {
|
|
switch (action.type) {
|
|
case 'CLEAR_ACTIVITIES':
|
|
return {
|
|
...state,
|
|
items: [],
|
|
};
|
|
case 'SEND_ENCRYPTED_MESSAGE_SLASH_COMMAND':
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
...action.payload,
|
|
type: 'SLASH_COMMAND',
|
|
},
|
|
],
|
|
};
|
|
case 'SEND_ENCRYPTED_MESSAGE_FILE_TRANSFER':
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
...action.payload,
|
|
type: 'FILE',
|
|
},
|
|
],
|
|
};
|
|
case 'SEND_ENCRYPTED_MESSAGE_TEXT_MESSAGE':
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
...action.payload,
|
|
type: 'TEXT_MESSAGE',
|
|
},
|
|
],
|
|
};
|
|
case 'RECEIVE_ENCRYPTED_MESSAGE_TEXT_MESSAGE':
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
...action.payload.payload,
|
|
type: 'TEXT_MESSAGE',
|
|
},
|
|
],
|
|
};
|
|
case 'SEND_ENCRYPTED_MESSAGE_SEND_FILE':
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
...action.payload,
|
|
type: 'SEND_FILE',
|
|
},
|
|
],
|
|
};
|
|
case 'RECEIVE_ENCRYPTED_MESSAGE_SEND_FILE':
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
...action.payload.payload,
|
|
type: 'RECEIVE_FILE',
|
|
},
|
|
],
|
|
};
|
|
case 'RECEIVE_ENCRYPTED_MESSAGE_ADD_USER':
|
|
if (action.payload.state.room.members.find(m => m.id === action.payload.payload.id)) {
|
|
return state;
|
|
}
|
|
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
userId: action.payload.payload.id,
|
|
type: 'USER_ENTER',
|
|
username: action.payload.payload.username,
|
|
},
|
|
],
|
|
};
|
|
case 'USER_EXIT':
|
|
if (!action.payload.id) {
|
|
return state;
|
|
}
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
userId: action.payload.id,
|
|
type: 'USER_EXIT',
|
|
username: action.payload.username,
|
|
},
|
|
],
|
|
};
|
|
case 'TOGGLE_LOCK_ROOM':
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
username: action.payload.username,
|
|
userId: action.payload.id,
|
|
type: 'TOGGLE_LOCK_ROOM',
|
|
locked: action.payload.locked,
|
|
sender: action.payload.sender,
|
|
},
|
|
],
|
|
};
|
|
case 'RECEIVE_TOGGLE_LOCK_ROOM':
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
username: action.payload.username,
|
|
userId: action.payload.id,
|
|
type: 'TOGGLE_LOCK_ROOM',
|
|
locked: action.payload.locked,
|
|
sender: action.payload.sender,
|
|
},
|
|
],
|
|
};
|
|
case 'SHOW_NOTICE':
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
type: 'NOTICE',
|
|
message: action.payload.message,
|
|
},
|
|
],
|
|
};
|
|
case 'SEND_ENCRYPTED_MESSAGE_CHANGE_USERNAME':
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
type: 'CHANGE_USERNAME',
|
|
currentUsername: action.payload.currentUsername,
|
|
newUsername: action.payload.newUsername,
|
|
},
|
|
].map(item => {
|
|
if (item.sender === action.payload.sender && item.type !== 'CHANGE_USERNAME') {
|
|
return {
|
|
...item,
|
|
username: action.payload.newUsername,
|
|
};
|
|
}
|
|
return item;
|
|
}),
|
|
};
|
|
case 'RECEIVE_ENCRYPTED_MESSAGE_CHANGE_USERNAME':
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
type: 'CHANGE_USERNAME',
|
|
currentUsername: action.payload.payload.currentUsername,
|
|
newUsername: action.payload.payload.newUsername,
|
|
},
|
|
].map(item => {
|
|
if (['TEXT_MESSAGE', 'USER_ACTION'].includes(item.type) && item.sender === action.payload.payload.sender) {
|
|
return {
|
|
...item,
|
|
username: action.payload.payload.newUsername,
|
|
};
|
|
}
|
|
return item;
|
|
}),
|
|
};
|
|
case 'SEND_ENCRYPTED_MESSAGE_USER_ACTION':
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
type: 'USER_ACTION',
|
|
...action.payload,
|
|
},
|
|
],
|
|
};
|
|
case 'RECEIVE_ENCRYPTED_MESSAGE_USER_ACTION':
|
|
return {
|
|
...state,
|
|
items: [
|
|
...state.items,
|
|
{
|
|
type: 'USER_ACTION',
|
|
...action.payload.payload,
|
|
},
|
|
],
|
|
};
|
|
default:
|
|
return state;
|
|
}
|
|
};
|
|
|
|
export default activities;
|