@ministryofjustice/hmpps-digital-prison-reporting-frontend
Version:
The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.
94 lines (91 loc) • 3.61 kB
JavaScript
import { ReportStoreService } from '../../../../services/reportStoreService.js';
import logger from '../../../../utils/logger.js';
class BookmarkService extends ReportStoreService {
enabled;
constructor(reportDataStore, serviceFeatureConfig) {
super(reportDataStore);
this.enabled = Boolean(serviceFeatureConfig.bookmarking);
if (!this.enabled)
logger.info(`Bookmarking: disabled `);
}
async getAllBookmarks(userId) {
if (!this.enabled)
return [];
const userConfig = await this.getState(userId);
return userConfig.bookmarks;
}
async addBookmark(userId, reportId, id, type, automatic) {
if (!this.enabled)
return;
const userConfig = await this.getState(userId);
if (!this.isBookmarkedCheck(userConfig, id, reportId)) {
userConfig.bookmarks.unshift({ reportId, id, type, automatic });
}
await this.saveState(userId, userConfig);
}
async removeBookmark(userId, id, reportId) {
if (!this.enabled)
return;
const userConfig = await this.getState(userId);
const index = userConfig.bookmarks.findIndex(bookmark => {
const bmVarId = bookmark.id || bookmark.variantId;
return bmVarId === id && bookmark.reportId === reportId;
});
if (index >= 0) {
userConfig.bookmarks.splice(index, 1);
}
await this.saveState(userId, userConfig);
}
isBookmarked = async (id, reportId, userId) => {
if (!this.enabled)
return false;
const userConfig = await this.getState(userId);
const isBookmarked = this.isBookmarkedCheck(userConfig, id, reportId);
let bookmark;
if (isBookmarked) {
bookmark = this.getBookmark(userConfig, id, reportId);
}
return bookmark?.automatic ? undefined : isBookmarked;
};
isBookmarkedCheck = (userConfig, id, reportId) => {
return userConfig.bookmarks.some(bookmark => {
const bmVarId = bookmark.id;
return bmVarId === id && bookmark.reportId === reportId;
});
};
getBookmark = (userConfig, id, reportId) => {
return userConfig.bookmarks.find(bookmark => {
const bmVarId = bookmark.id;
return bmVarId === id && bookmark.reportId === reportId;
});
};
async createBookMarkButtonHtml({ userConfig, reportId, id, csrfToken, ctxId, reportType, isMissing, endpoint, }) {
let linkText = 'Add bookmark';
let automatic = false;
let linkType = 'add';
if (userConfig?.bookmarks) {
const bookmark = this.getBookmark(userConfig, id, reportId);
if (bookmark) {
linkType = 'remove';
linkText = 'Remove bookmark';
automatic = Boolean(bookmark.automatic);
}
}
const classes = 'govuk-link govuk-link--no-visited-state dpr-bookmark-link dpr-user-list-action';
const linkId = `${reportId}-${id}-${ctxId}`;
const bookmarkLinkHtml = `<a href="#"
class="${classes}"
id="${linkId}"
data-dpr-module="bookmark-button"
data-id="${id}"
data-report-id="${reportId}"
data-report-type="${reportType}"
data-endpoint="${endpoint}"
data-csrf-token="${csrfToken}"
data-link-type="${linkType}"
>${linkText}</a>`;
return automatic || isMissing ? '' : bookmarkLinkHtml;
}
}
export { BookmarkService, BookmarkService as default };
//# sourceMappingURL=service.js.map