75 lines
2.2 KiB
JavaScript
75 lines
2.2 KiB
JavaScript
import { uniqueId } from 'lodash';
|
|
import {
|
|
WIDGET_TYPE_HIERARCHY,
|
|
WIDGET_TYPE_CURRENT_USER_TODOS,
|
|
CURRENT_USER_TODOS_TYPENAME,
|
|
TODO_CONNECTION_TYPENAME,
|
|
TODO_EDGE_TYPENAME,
|
|
TODO_TYPENAME,
|
|
WORK_ITEM_TYPENAME,
|
|
WORK_ITEM_UPDATE_PAYLOAD_TYPENAME,
|
|
} from '~/work_items/constants';
|
|
import workItemQuery from './graphql/work_item.query.graphql';
|
|
import workItemByIidQuery from './graphql/work_item_by_iid.query.graphql';
|
|
|
|
export function getWorkItemQuery(isFetchedByIid) {
|
|
return isFetchedByIid ? workItemByIidQuery : workItemQuery;
|
|
}
|
|
|
|
export const findHierarchyWidgets = (widgets) =>
|
|
widgets?.find((widget) => widget.type === WIDGET_TYPE_HIERARCHY);
|
|
|
|
export const findHierarchyWidgetChildren = (workItem) =>
|
|
findHierarchyWidgets(workItem.widgets).children.nodes;
|
|
|
|
const autocompleteSourcesPath = (autocompleteType, fullPath, workItemIid) => {
|
|
return `${
|
|
gon.relative_url_root || ''
|
|
}/${fullPath}/-/autocomplete_sources/${autocompleteType}?type=WorkItem&type_id=${workItemIid}`;
|
|
};
|
|
|
|
export const autocompleteDataSources = (fullPath, iid) => ({
|
|
labels: autocompleteSourcesPath('labels', fullPath, iid),
|
|
members: autocompleteSourcesPath('members', fullPath, iid),
|
|
commands: autocompleteSourcesPath('commands', fullPath, iid),
|
|
});
|
|
|
|
export const markdownPreviewPath = (fullPath, iid) =>
|
|
`${
|
|
gon.relative_url_root || ''
|
|
}/${fullPath}/preview_markdown?target_type=WorkItem&target_id=${iid}`;
|
|
|
|
export const getWorkItemTodoOptimisticResponse = ({ workItem, pendingTodo }) => {
|
|
const todo = pendingTodo
|
|
? [
|
|
{
|
|
node: {
|
|
id: -uniqueId(),
|
|
state: 'pending',
|
|
__typename: TODO_TYPENAME,
|
|
},
|
|
__typename: TODO_EDGE_TYPENAME,
|
|
},
|
|
]
|
|
: [];
|
|
return {
|
|
workItemUpdate: {
|
|
errors: [],
|
|
workItem: {
|
|
...workItem,
|
|
widgets: [
|
|
{
|
|
type: WIDGET_TYPE_CURRENT_USER_TODOS,
|
|
currentUserTodos: {
|
|
edges: todo,
|
|
__typename: TODO_CONNECTION_TYPENAME,
|
|
},
|
|
__typename: CURRENT_USER_TODOS_TYPENAME,
|
|
},
|
|
],
|
|
__typename: WORK_ITEM_TYPENAME,
|
|
},
|
|
__typename: WORK_ITEM_UPDATE_PAYLOAD_TYPENAME,
|
|
},
|
|
};
|
|
};
|