in packages/issue-dashboard-widgets/widgets/due-dates-calendar/app/due_dates_calendar_widget.js [453:565]
async loadIssuesUnsafe(search, context, scheduleField, eventEndField) {
const currentDate = moment(this.state.date);
const startDate = moment(currentDate).startOf('month').startOf('week').format('YYYY-MM-DD');
const endDate = moment(currentDate).endOf('month').endOf('week').format('YYYY-MM-DD');
const searchPrefix = search && search.trim() ? `${search} AND` : '';
const issuesQuery = scheduleField === eventEndField
? `${searchPrefix} ${scheduleField}: ${startDate} .. ${endDate}`
: `${searchPrefix} ((${scheduleField}: ${startDate} .. ${endDate} or ${eventEndField}: ${startDate} .. ${endDate}) or (${scheduleField}: * .. ${startDate} and ${eventEndField}: ${endDate} .. *))`;
const isDateAndTime = this.state.isDateAndTime;
const issues = await loadIssues(
this.fetchYouTrack, issuesQuery, context
);
const permCache = new PermissionCache(
await loadPermissionCache(this.fetchHub));
const events = [];
if (Array.isArray(issues)) {
issues.forEach(issue => {
let issueScheduleField = '';
let issueScheduleFieldDbId = '';
let issueEventEndField = '';
let issueEventEndFieldDbId = '';
let issueAssignee = '';
let foregroundColor = '#9c9c9c';
let backgroundColor = '#e8e8e8';
let issuePriority = '';
let isResolved = false;
const customFields = [];
// eslint-disable-next-line complexity
issue.fields.forEach(field => {
if (field.hasOwnProperty('projectCustomField') && field.value) {
const fieldType =
field.projectCustomField.field.fieldType.valueType;
// eslint-disable-next-line max-len
if (fieldType === DATE_FIELD_TYPE && !isDateAndTime || fieldType === DATE_AND_TIME_FIELD_TYPE && isDateAndTime) {
// eslint-disable-next-line max-len
if (field.projectCustomField.field.name === scheduleField || field.projectCustomField.field.localizedName === scheduleField) {
issueScheduleField = field.value;
issueScheduleFieldDbId = field.id;
}
// eslint-disable-next-line max-len
if (field.projectCustomField.field.name === eventEndField || field.projectCustomField.field.localizedName === eventEndField) {
issueEventEndField = field.value;
issueEventEndFieldDbId = field.id;
}
}
// eslint-disable-next-line max-len
if (field.projectCustomField.field.name === ASSIGNEE_FIELD_NAME || field.projectCustomField.field.localizedName === ASSIGNEE_FIELD_NAME) {
issueAssignee = field.value;
}
// eslint-disable-next-line max-len
if (field.projectCustomField.field.name === this.state.colorField || field.projectCustomField.field.localizedName === this.state.colorField) {
issuePriority = field.value.name;
foregroundColor = field.value.color.foreground;
backgroundColor = field.value.color.background;
} else if (field.value.color) {
const prjCustomField = field.projectCustomField;
customFields.push({
name: prjCustomField.localizedName !== null
? prjCustomField.localizedName
: prjCustomField.field.name,
value: field.value.name,
foregroundColor: field.value.color.foreground,
backgroundColor: field.value.color.background
});
}
if (field.projectCustomField.field.name === STATE_FIELD_NAME) {
// eslint-disable-next-line max-len
isResolved = Boolean(field.value.isResolved);
}
}
});
if (issueScheduleField !== '') {
events.push({
dbIssueId: issue.id,
issueId: issue.idReadable,
description: `${issue.idReadable} ${issue.summary}`,
url: `${this.state.youTrack.homeUrl}/issue/${issue.idReadable}`,
priority: issuePriority,
isResolved,
issueScheduleFieldDbId,
// eslint-disable-next-line max-len
issueEventEndFieldDbId: issueEventEndFieldDbId !== '' ? issueEventEndFieldDbId : issueScheduleFieldDbId,
start: (new Date(issueScheduleField)),
// eslint-disable-next-line max-len
end: (issueEventEndField !== '' ? new Date(issueEventEndField) : new Date(issueScheduleField)),
allDay: !this.state.isDateAndTime,
foregroundColor,
backgroundColor,
customFields,
issueAssignee,
isUpdatable: permCache.has('JetBrains.YouTrack.UPDATE_ISSUE',
issue.project.ringId),
ytHomeUrl: this.state.youTrack.homeUrl
});
}
});
}
this.setState({issues, events, fromCache: false, isLoadDataError: false});
this.props.dashboardApi.storeCache({
search, context, issues
});
}