UNPKG

@atlaskit/global-search

Version:

A cross-product search component (batteries included)

61 lines (54 loc) 2.05 kB
import { utils } from '@atlaskit/util-service-support'; import { AnalyticsType, ContentType, ResultType } from '../model/Result'; const RECENT_PAGES_PATH = 'rest/recentlyviewed/1.0/recent'; const RECENT_SPACE_PATH = 'rest/recentlyviewed/1.0/recent/spaces'; export default class ConfluenceClientImpl { constructor(url) { this.serviceConfig = { url: url }; } async getRecentItems() { const recentPages = await this.createRecentRequestPromise(RECENT_PAGES_PATH); const baseUrl = this.serviceConfig.url; return recentPages.filter(page => !!page.title).map(recentPage => recentPageToResult(recentPage, baseUrl)); } async getRecentSpaces() { const recentSpaces = await this.createRecentRequestPromise(RECENT_SPACE_PATH); const baseUrl = this.serviceConfig.url; return recentSpaces.map(recentSpace => recentSpaceToResult(recentSpace, baseUrl)); } createRecentRequestPromise(path) { const options = { path: path }; return utils.requestService(this.serviceConfig, options); } } function recentPageToResult(recentPage, baseUrl) { return { resultId: String(recentPage.id), name: recentPage.title || '', // This is a failsafe, there should be a filter to drop pages with no titles href: `${baseUrl}${recentPage.url}`, containerName: recentPage.space, analyticsType: AnalyticsType.RecentConfluence, resultType: ResultType.ConfluenceObjectResult, contentType: `confluence-${recentPage.contentType}`, iconClass: recentPage.iconClass, containerId: recentPage.spaceKey, isRecentResult: true, friendlyLastModified: undefined // not available for recent results }; } function recentSpaceToResult(recentSpace, baseUrl) { return { resultId: recentSpace.id, name: recentSpace.name, href: `${baseUrl}/spaces/${recentSpace.key}/overview`, avatarUrl: recentSpace.icon, analyticsType: AnalyticsType.RecentConfluence, resultType: ResultType.GenericContainerResult, contentType: ContentType.ConfluenceSpace }; }