packages/issue-dashboard-widgets/widgets/youtrack-issues-list/app/resources.js (65 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,name,presentation,minutes,color(id,foreground,background)'; const ISSUE_FIELD_FIELDS = `id,value(${ISSUE_FIELD_VALUE_FIELDS}),projectCustomField(${PROJECT_CUSTOM_FIELD_FIELDS})`; const ISSUE_FIELDS = `id,idReadable,summary,resolved,fields(${ISSUE_FIELD_FIELDS})`; const NODES_FIELDS = 'tree(id,ordered)'; 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 DATE_PRESENTATION_SETTINGS = 'id,dateFieldFormat(pattern,datePattern)'; export const ISSUES_PACK_SIZE = 50; // eslint-disable-next-line complexity export async function loadIssues(fetchYouTrack, query, context, skip) { const encodedQuery = encodeURIComponent(query); if (context && context.id) { return await fetchYouTrack( `api/issueFolders/${context.id}/sortOrder/issues?fields=${ISSUE_FIELDS}&query=${encodedQuery}&$top=${ISSUES_PACK_SIZE}&$skip=${skip || 0}` ); } const sortedNodes = await fetchYouTrack( `api/sortedIssues?fields=${NODES_FIELDS}&query=${encodedQuery}&topRoot=${ISSUES_PACK_SIZE}&skipRoot=${skip || 0}&flatten=true` ); return await fetchYouTrack( `api/issuesGetter?$top=-1&fields=${ISSUE_FIELDS}`, { method: 'POST', body: (sortedNodes.tree || []).map(node => ({id: node.id})) } ); } export async function loadTotalIssuesCount( fetchYouTrack, issue, query, context ) { const searchPage = await fetchYouTrack( 'api/issuesGetter/count?fields=count', { method: 'POST', body: { folder: context && context.id && { $type: context.$type, id: context.id } || null, query: query || null } } ); return searchPage && searchPage.count; } 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 loadDateFormats(fetchYouTrack) { const generalUserProfile = await fetchYouTrack(`api/users/me/profiles/general?fields=${DATE_PRESENTATION_SETTINGS}`); const dateFormats = (generalUserProfile && generalUserProfile.dateFieldFormat) || {}; return { datePattern: toFechaFormat(dateFormats.datePattern), dateTimePattern: toFechaFormat(dateFormats.pattern) }; function toFechaFormat(pattern) { return (pattern || '').replace(/y/g, 'Y').replace(/d/g, 'D').replace('aaa', 'A'); } } export async function underlineAndSuggest(fetchYouTrack, query, caret, folder) { return await fetchYouTrack(`api/search/assist?fields=${QUERY_ASSIST_FIELDS}`, { method: 'POST', body: {query, caret, folder} }); }