Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
u({ this: 2 })(true); // UpdateReturnMap<{ this: number; }>
u({ this: 2 })({ that: 3 }); // $ExpectType object
u.ifElse(false as boolean, { a: 1 }, { a: 2 }, { a: 3 }); // $ExpectType object
u.ifElse(false as boolean, "foo", 3, { a: 3 }); // $ExpectType 3 | "foo"
u.ifElse(false, "foo", 3, { a: 3 }); // $ExpectType 3
u.ifElse(true, "foo", 3, { a: 3 }); // $ExpectType "foo"
// *** map ***
const inc = (i:number) => i+1;
u.map(inc, [1,2,3]); // $ExpectType number[]
u.map(inc, ["potato"]); // $ExpectType number[]
u.map({a:1},{a:2}); // $ExpectType Mapped<{ a: number; }, { a: number; }>
u.omit('bar', { }); // $ExpectType object
u.omit(['bar'], { }); // $ExpectType object
u.omitBy([ 'banana' ], { } ); // $ExpectError
// *** constant ***
// $ExpectType { banana: number; }
u.constant({ banana: 1 })('foo');
/// *** freeze ***
// $ExpectType { potato: number; }
u.freeze({ potato: 1 });
u({ this: 2 })({ that: 3 }); // $ExpectType object
u({ this: 2 })(true); // UpdateReturnMap<{ this: number; }>
u({ this: 2 })({ that: 3 }); // $ExpectType object
u.ifElse(false as boolean, { a: 1 }, { a: 2 }, { a: 3 }); // $ExpectType object
u.ifElse(false as boolean, "foo", 3, { a: 3 }); // $ExpectType 3 | "foo"
u.ifElse(false, "foo", 3, { a: 3 }); // $ExpectType 3
u.ifElse(true, "foo", 3, { a: 3 }); // $ExpectType "foo"
// *** map ***
const inc = (i:number) => i+1;
u.map(inc, [1,2,3]); // $ExpectType number[]
u.map(inc, ["potato"]); // $ExpectType number[]
u.map({a:1},{a:2}); // $ExpectType Mapped<{ a: number; }, { a: number; }>
u.omit('bar', { }); // $ExpectType object
u.omit(['bar'], { }); // $ExpectType object
u.omitBy([ 'banana' ], { } ); // $ExpectError
// *** constant ***
// $ExpectType { banana: number; }
u.constant({ banana: 1 })('foo');
/// *** freeze ***
// $ExpectType { potato: number; }
u.freeze({ potato: 1 });
export default function messages(state = {}, action) {
switch (action.type) {
case ActionTypes.CLICK_THREAD: {
let markRead = u({isRead: true});
return u(
u.map(m => m.threadID === action.threadID ? markRead(m) : m),
state);
}
case ActionTypes.CREATE_MESSAGE: {
return {
...state,
[action.message.id]: action.message
};
}
case ActionTypes.RECEIVE_RAW_CREATED_MESSAGE: {
let message = ChatMessageUtils.convertRawMessage(action.rawMessage);
message.isRead = true;
return compose(
u({[message.id]: message}),
u(u.omit(action.tempMessageID))
};
}
case ActionTypes.RECEIVE_RAW_CREATED_MESSAGE: {
let message = ChatMessageUtils.convertRawMessage(action.rawMessage);
message.isRead = true;
return compose(
u({[message.id]: message}),
u(u.omit(action.tempMessageID))
)(state);
}
case ActionTypes.RECEIVE_RAW_MESSAGES: {
let lastThreadID = last(action.rawMessages).threadID;
let messages = indexBy(action.rawMessages, 'id');
let formatMessage = u.map(message => u({
isRead: message.threadID === lastThreadID,
date: new Date(message.timestamp)
}, message));
let updated = u(formatMessage, messages);
return {...state, ...updated};
}
default:
return state;
}
}
case ActionTypes.RECEIVE_RAW_CREATED_MESSAGE: {
let {rawMessage: message, tempMessageID} = action;
return u({
[message.threadID]: {
lastMessage: message.id,
messages: arr =>
u.reject(id => id === tempMessageID, arr).concat([message.id])
}
}, state);
}
case ActionTypes.RECEIVE_RAW_MESSAGES: {
let threads = groupBy(action.rawMessages, 'threadID');
let updated = u(
u.map(messages => {
return {
id: messages[0].threadID,
threadName: messages[0].threadName,
lastMessage: last(messages).id,
messages: pluck(messages, 'id')
};
}),
threads);
return {...state, ...updated};
}
default:
return state;
}
}