packages/issue-dashboard-widgets/widgets/youtrack-activities-widget/app/resources.js (106 lines of code) (raw):

const QUERY_ASSIST_FIELDS = 'query,caret,styleRanges(start,length,style),suggestions(options,prefix,option,suffix,description,matchingStart,matchingEnd,caret,completionStart,completionEnd,group,icon)'; const GENERAL_PROFILE_FIELDS = 'dateFieldFormat(datePattern,pattern)'; 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})`; export async function loadIssue(fetchYouTrack, id) { return await fetchYouTrack(`api/issues/${id}?fields=${ISSUE_FIELDS}`); } export async function underlineAndSuggest(fetchYouTrack, query, caret, folder) { return await fetchYouTrack(`api/search/assist?fields=${QUERY_ASSIST_FIELDS}`, { method: 'POST', body: {query, caret, folder} }); } export async function queryUsers(fetchHub, query) { return fetchHub('api/rest/users', { query: { query, fields: 'id,name,profile(avatar(url))', orderBy: 'login', $top: 10 } }); } export async function loadMeProfile(fetchYouTrack) { const path = 'api/users/me/profiles/general'; return await fetchYouTrack(`${path}?fields=${GENERAL_PROFILE_FIELDS}`); } export async function loadConfigL10n(fetchYouTrack) { return fetchYouTrack('api/config', { query: { fields: 'l10n(predefinedQueries)' } }); } const ISSUE = 'id,idReadable,summary,resolved'; const AUTHOR = 'author(id,login,email,fullName,avatarUrl,ringId,isLocked)'; const CHANGED_VALUES = [ 'id,name', 'text', 'urls', 'version', 'project(shortName),numberInProject', 'agile(id,name)', 'date', 'url', 'mimeType', 'thumbnailURL', 'type(name)', 'duration(presentation,updated,minutes)', AUTHOR, ISSUE ]; const CHANGE = CHANGED_VALUES.join(','); const ADD = `added(${CHANGE})`; const REM = `removed(${CHANGE})`; const TARGET = `target(${ISSUE},issue(${ISSUE}))`; const FIELD = 'field(presentation,customField(name,fieldType(valueType,isMultiValue)))'; const CONTAINER = 'container(id,trimmedDescription)'; const ASSISTANT = `assistantActivities(id,${FIELD},added(id,name),removed(id,name))`; // eslint-disable-next-line max-len const ACTIVITIES_FIELDS = `id,timestamp,category(id),emptyFieldText,${TARGET},${AUTHOR},${ADD},${REM},${FIELD},${CONTAINER},${ASSISTANT}`; // eslint-disable-next-line max-len const ALL_CATEGORIES = 'CommentsCategory,AttachmentsCategory,AttachmentRenameCategory,CustomFieldCategory,DescriptionCategory,IssueCreatedCategory,IssueResolvedCategory,IssueDeletedCategory,IssueRestoredCategory,LinksCategory,ProjectCategory,IssueVisibilityCategory,SprintCategory,SummaryCategory,TagsCategory,VcsChangeCategory'; export async function loadActivities(fetchYouTrack, params) { const packSize = 50; const skipSize = 0; //TODO implement paging const categories = params.categoriesIds && params.categoriesIds.join(','); const queryParams = [ `fields=${ACTIVITIES_FIELDS}`, `categories=${categories || ALL_CATEGORIES}`, `$top=${packSize}`, `$skip=${skipSize}`, 'reverse=true', 'effective=true', 'imported=false', params.author && `author=${params.author.id}`, params.query && `issueQuery=${encodeURIComponent(params.query)}`, params.start && `start=${params.start}`, params.end && `end=${params.end}` ]; const queryParamsStr = queryParams.filter(p => !!p).join('&'); return await fetchYouTrack(`api/activities?${queryParamsStr}`); } const ACTIVITIES_FIELDS_PAGE = `beforeCursor,hasBefore,afterCursor,hasAfter,activities(${ACTIVITIES_FIELDS})`; function getQueryParams(categories, packSize, params) { return [ `fields=${ACTIVITIES_FIELDS_PAGE}`, `categories=${categories || ALL_CATEGORIES}`, `$top=${packSize}`, 'reverse=true', 'effective=true', 'imported=false', params.cursor && `cursor=${encodeURIComponent(params.cursor)}`, params.author && `author=${params.author.id}`, params.query && `issueQuery=${encodeURIComponent(params.query)}`, params.start && `start=${params.start}`, params.end && `end=${params.end}` ]; } export async function loadActivitiesPage(fetchYouTrack, params) { const packSize = 50; const categories = params.categoriesIds && params.categoriesIds.join(','); const queryParams = getQueryParams(categories, packSize, params); const queryParamsStr = queryParams.filter(p => !!p).join('&'); return await fetchYouTrack(`api/activitiesPage?${queryParamsStr}`); }