packages/issue-dashboard-widgets/widgets/due-dates-calendar/app/resources.js (82 lines of code) (raw):
const PROJECT_CUSTOM_FIELD_FIELDS = 'id,bundle(id),field(id,name,localizedName,fieldType(id,valueType))';
const ISSUE_FIELD_VALUE_FIELDS = 'id,name,localizedName,login,avatarUrl,ringId,presentation,minutes,color(id,foreground,background),isResolved';
const ISSUE_FIELD_FIELDS = `id,value(${ISSUE_FIELD_VALUE_FIELDS}),projectCustomField(${PROJECT_CUSTOM_FIELD_FIELDS})`;
const ISSUE_FIELDS = `id,idReadable,summary,resolved,project(ringId),fields(${ISSUE_FIELD_FIELDS})`;
const QUERY_ASSIST_FIELDS = 'query,caret,styleRanges(start,length,style),suggestions(options,prefix,option,suffix,description,matchingStart,matchingEnd,caret,completionStart,completionEnd,group,icon)';
const WATCH_FOLDERS_FIELDS = 'id,$type,name,query,shortName';
const PACK_SIZE_ALL = -1;
export async function loadIssues(fetchYouTrack, query, context, skip) {
const packSize = PACK_SIZE_ALL;
const encodedQuery = encodeURIComponent(query);
if (context && context.id) {
return await fetchYouTrack(
`api/issueFolders/${context.id}/sortOrder/issues?fields=${ISSUE_FIELDS}&query=${encodedQuery}&$top=${packSize}&$skip=${skip || 0}`
);
}
return await fetchYouTrack(
`api/issues?fields=${ISSUE_FIELDS}&query=${encodedQuery}&$top=${packSize}&$skip=${skip || 0}`
);
}
export async function loadTotalIssuesCount(
fetchYouTrack, query, context
) {
const issues = await loadQueryHasIssues(fetchYouTrack, query);
const searchPage = await fetchYouTrack(
'api/searchPage?fields=total', {
method: 'POST',
body: {
pageSize: 0,
folder: context && context.id && {
id: context.id,
$type: context.$type
},
query,
issue: {id: issues[0].id}
}
}
);
return searchPage && searchPage.total;
}
export async function loadQueryHasIssues(fetchYouTrack, query) {
return await fetchYouTrack(`api/issues?q=${query}&$top=1`);
}
export async function loadPinnedIssueFolders(fetchYouTrack, loadAll) {
const packSize = 100;
return await fetchYouTrack(`api/userIssueFolders?fields=${WATCH_FOLDERS_FIELDS}&$top=${loadAll ? -1 : packSize}`);
}
export async function underlineAndSuggest(fetchYouTrack, query, caret) {
return await fetchYouTrack(`api/search/assist?fields=${QUERY_ASSIST_FIELDS}`, {
method: 'POST',
body: {query, caret}
});
}
export async function loadFieldsWithType(fetchYouTrack, fieldType, context) {
let request = `api/filterFields?$top=-1&fieldTypes=${fieldType}&fields=name,customField(fieldType(id)),projects(name)`;
if (context && context !== '') {
request += `&fld=${context.id}`;
}
return await fetchYouTrack(request);
}
export async function loadProfile(fetchYouTrack) {
return await fetchYouTrack('api/users/me?$top=-1&fields=profiles(appearance(firstDayOfWeek),general(locale(locale)))');
}
export async function loadPermissionCache(fetchHub) {
return await fetchHub('api/rest/permissions/cache?fields=permission/key,global,projects(id)');
}
export async function loadConfigL10n(fetchYouTrack) {
return fetchYouTrack('api/config', {
query: {
fields: 'l10n(predefinedQueries)'
}
});
}
// eslint-disable-next-line max-len
export async function updateIssueScheduleField(fetchYouTrack, dbIssueId, scheduleFieldDbId, scheduleFieldValue) {
return await fetchYouTrack(`api/issues/${dbIssueId}/fields/${scheduleFieldDbId}?$top=-1&fields=$type,id,value($type,archived,avatarUrl,buildIntegration,buildLink,color(id),fullName,id,isResolved,localizedName,login,markdownText,minutes,name,presentation,ringId,text)`, {
method: 'POST',
body: {
$type: 'DateIssueCustomField',
id: scheduleFieldDbId,
value: scheduleFieldValue
}
});
}