Skip to content
代码片段 群组 项目
未验证 提交 bc67e2ec 编辑于 作者: Natalia Tepluhina's avatar Natalia Tepluhina 提交者: GitLab
浏览文件

Merge branch 'refactor-work_item-graphql-resolvers' into 'master'

No related branches found
No related tags found
无相关合并请求
import { set } from 'lodash';
import { produce } from 'immer'; import { produce } from 'immer';
import { findWidget } from '~/issues/list/utils'; import { findWidget } from '~/issues/list/utils';
import { pikadayToString } from '~/lib/utils/datetime_utility'; import { pikadayToString } from '~/lib/utils/datetime_utility';
...@@ -13,6 +14,35 @@ import { ...@@ -13,6 +14,35 @@ import {
} from '../constants'; } from '../constants';
import workItemByIidQuery from './work_item_by_iid.query.graphql'; import workItemByIidQuery from './work_item_by_iid.query.graphql';
const updateWidget = (draftData, widgetType, newData, nodePath) => {
if (!newData) return;
const widget = findWidget(widgetType, draftData.workspace.workItem);
set(widget, nodePath, newData);
};
const updateRolledUpDatesWidget = (draftData, rolledUpDates) => {
if (!rolledUpDates) return;
const dueDateFixed = rolledUpDates.dueDateFixed
? pikadayToString(rolledUpDates.dueDateFixed)
: null;
const startDateFixed = rolledUpDates.startDateFixed
? pikadayToString(rolledUpDates.startDateFixed)
: null;
const widget = findWidget(WIDGET_TYPE_ROLLEDUP_DATES, draftData.workspace.workItem);
Object.assign(widget, {
dueDate: dueDateFixed,
dueDateFixed,
dueDateIsFixed: rolledUpDates.dueDateIsFixed,
startDate: startDateFixed,
startDateFixed,
startDateIsFixed: rolledUpDates.startDateIsFixed,
__typename: 'WorkItemWidgetRolledupDates',
});
};
export const updateNewWorkItemCache = (input, cache) => { export const updateNewWorkItemCache = (input, cache) => {
const { const {
healthStatus, healthStatus,
...@@ -28,7 +58,6 @@ export const updateNewWorkItemCache = (input, cache) => { ...@@ -28,7 +58,6 @@ export const updateNewWorkItemCache = (input, cache) => {
} = input; } = input;
const query = workItemByIidQuery; const query = workItemByIidQuery;
const variables = { const variables = {
fullPath: newWorkItemFullPath(fullPath, workItemType), fullPath: newWorkItemFullPath(fullPath, workItemType),
iid: NEW_WORK_ITEM_IID, iid: NEW_WORK_ITEM_IID,
...@@ -36,101 +65,42 @@ export const updateNewWorkItemCache = (input, cache) => { ...@@ -36,101 +65,42 @@ export const updateNewWorkItemCache = (input, cache) => {
cache.updateQuery({ query, variables }, (sourceData) => cache.updateQuery({ query, variables }, (sourceData) =>
produce(sourceData, (draftData) => { produce(sourceData, (draftData) => {
if (healthStatus) { const widgetUpdates = [
const healthStatusWidget = findWidget( {
WIDGET_TYPE_HEALTH_STATUS, widgetType: WIDGET_TYPE_HEALTH_STATUS,
draftData?.workspace?.workItem, newData: healthStatus,
); nodePath: 'healthStatus',
},
healthStatusWidget.healthStatus = healthStatus; {
widgetType: WIDGET_TYPE_ASSIGNEES,
const healthStatusWidgetIndex = draftData.workspace.workItem.widgets.findIndex( newData: assignees,
(widget) => widget.type === WIDGET_TYPE_HEALTH_STATUS, nodePath: 'assignees.nodes',
); },
draftData.workspace.workItem.widgets[healthStatusWidgetIndex] = healthStatusWidget; {
} widgetType: WIDGET_TYPE_LABELS,
newData: labels,
if (assignees) { nodePath: 'labels.nodes',
const assigneesWidget = findWidget(WIDGET_TYPE_ASSIGNEES, draftData?.workspace?.workItem); },
assigneesWidget.assignees.nodes = assignees; {
widgetType: WIDGET_TYPE_COLOR,
const assigneesWidgetIndex = draftData.workspace.workItem.widgets.findIndex( newData: color,
(widget) => widget.type === WIDGET_TYPE_ASSIGNEES, nodePath: 'color',
); },
draftData.workspace.workItem.widgets[assigneesWidgetIndex] = assigneesWidget; {
} widgetType: WIDGET_TYPE_DESCRIPTION,
newData: description,
if (labels) { nodePath: 'description',
const labelsWidget = findWidget(WIDGET_TYPE_LABELS, draftData?.workspace?.workItem); },
];
labelsWidget.labels.nodes = labels;
widgetUpdates.forEach(({ widgetType, newData, nodePath }) => {
const labelsWidgetIndex = draftData.workspace.workItem.widgets.findIndex( updateWidget(draftData, widgetType, newData, nodePath);
(widget) => widget.type === WIDGET_TYPE_LABELS, });
);
updateRolledUpDatesWidget(draftData, rolledUpDates);
draftData.workspace.workItem.widgets[labelsWidgetIndex] = labelsWidget;
} if (title) draftData.workspace.workItem.title = title;
if (confidential !== undefined) draftData.workspace.workItem.confidential = confidential;
if (rolledUpDates) {
let rolledUpDatesWidget = findWidget(
WIDGET_TYPE_ROLLEDUP_DATES,
draftData?.workspace?.workItem,
);
const dueDate = rolledUpDates.dueDateFixed || null;
const dueDateFixed = dueDate ? pikadayToString(rolledUpDates.dueDateFixed) : null;
const startDate = rolledUpDates.startDateFixed || null;
const startDateFixed = startDate ? pikadayToString(rolledUpDates.startDateFixed) : null;
rolledUpDatesWidget = {
type: 'ROLLEDUP_DATES',
dueDate: dueDateFixed,
dueDateFixed,
dueDateIsFixed: rolledUpDates.dueDateIsFixed,
startDate: startDateFixed,
startDateFixed,
startDateIsFixed: rolledUpDates.startDateIsFixed,
__typename: 'WorkItemWidgetRolledupDates',
};
const rolledUpDatesWidgetIndex = draftData.workspace.workItem.widgets.findIndex(
(widget) => widget.type === WIDGET_TYPE_ROLLEDUP_DATES,
);
draftData.workspace.workItem.widgets[rolledUpDatesWidgetIndex] = rolledUpDatesWidget;
}
if (color) {
const colorWidget = findWidget(WIDGET_TYPE_COLOR, draftData?.workspace?.workItem);
colorWidget.color = color;
const colorWidgetIndex = draftData.workspace.workItem.widgets.findIndex(
(widget) => widget.type === WIDGET_TYPE_COLOR,
);
draftData.workspace.workItem.widgets[colorWidgetIndex] = colorWidget;
}
if (title) {
draftData.workspace.workItem.title = title;
}
if (description) {
const descriptionWidget = findWidget(
WIDGET_TYPE_DESCRIPTION,
draftData?.workspace?.workItem,
);
descriptionWidget.description = description;
const descriptionWidgetIndex = draftData.workspace.workItem.widgets.findIndex(
(widget) => widget.type === WIDGET_TYPE_DESCRIPTION,
);
draftData.workspace.workItem.widgets[descriptionWidgetIndex] = descriptionWidget;
}
if (confidential !== undefined) {
draftData.workspace.workItem.confidential = confidential;
}
}), }),
); );
}; };
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册