mirror of
https://github.com/wassname/talk.git
synced 2026-07-03 15:11:12 +08:00
64 lines
1.6 KiB
JavaScript
64 lines
1.6 KiB
JavaScript
export const getTotalActionCount = (type, comment) => {
|
|
return comment.action_summaries
|
|
.filter(s => s.__typename === type)
|
|
.reduce((total, summary) => {
|
|
return total + summary.count;
|
|
}, 0);
|
|
};
|
|
|
|
export const iPerformedThisAction = (type, comment) => {
|
|
|
|
// if there is a current_user on any of the ActionSummary(s), the user performed this action
|
|
return comment.action_summaries
|
|
.filter(a => a.__typename === type)
|
|
.some(a => a.current_user);
|
|
};
|
|
|
|
export const getMyActionSummary = (type, comment) => {
|
|
return comment.action_summaries
|
|
.filter(a => a.__typename === type)
|
|
.find(a => a.current_user);
|
|
};
|
|
|
|
/**
|
|
* getActionSummary
|
|
* retrieves the action summaries based on the type and the comment
|
|
* array could be length > 1, as in the case of FlagActionSummary
|
|
*/
|
|
|
|
export const getActionSummary = (type, comment) => {
|
|
return comment.action_summaries.filter(a => a.__typename === type);
|
|
};
|
|
|
|
/**
|
|
* Get name of first (or $pos-th) definition
|
|
*/
|
|
export function getDefinitionName(doc, pos = 0) {
|
|
return doc.definitions[pos].name.value;
|
|
}
|
|
|
|
/**
|
|
* Separate apollo `data` props into `data` and `root`.
|
|
* `data` will contain props like `loading`, `fetchMore`...
|
|
* while `root` contains the actual query data.
|
|
*/
|
|
export function separateDataAndRoot(
|
|
{
|
|
fetchMore,
|
|
loading,
|
|
networkStatus,
|
|
refetch,
|
|
startPolling,
|
|
stopPolling,
|
|
subscribeToMore,
|
|
updateQuery,
|
|
variables,
|
|
...root,
|
|
}) {
|
|
return {
|
|
data: {fetchMore, loading, networkStatus, refetch, startPolling,
|
|
stopPolling, subscribeToMore, updateQuery, variables},
|
|
root,
|
|
};
|
|
}
|