UNPKG

@ministryofjustice/hmpps-digital-prison-reporting-frontend

Version:

The Digital Prison Reporting Frontend contains templates and code to help display data effectively in UI applications.

80 lines (79 loc) 3.92 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const reportStoreService_1 = __importDefault(require("./reportStoreService")); const logger_1 = __importDefault(require("../utils/logger")); class BookmarkService extends reportStoreService_1.default { constructor(reportDataStore) { super(reportDataStore); this.isBookmarked = async (id, reportId, userId) => { 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 === null || bookmark === void 0 ? void 0 : bookmark.automatic) ? undefined : isBookmarked; }; this.isBookmarkedCheck = (userConfig, id, reportId) => { return userConfig.bookmarks.some((bookmark) => { const bmVarId = bookmark.variantId || bookmark.id; return bmVarId === id && bookmark.reportId === reportId; }); }; this.getBookmark = (userConfig, id, reportId) => { return userConfig.bookmarks.find((bookmark) => { const bmVarId = bookmark.variantId || bookmark.id; return bmVarId === id && bookmark.reportId === reportId; }); }; this.isAutomatic = async (userId, id, reportId) => { const userConfig = await this.getState(userId); const bookmark = this.getBookmark(userConfig, id, reportId); return bookmark === null || bookmark === void 0 ? void 0 : bookmark.automatic; }; logger_1.default.info('Service created: BookmarkService'); } async getAllBookmarks(userId) { const userConfig = await this.getState(userId); return userConfig.bookmarks; } async addBookmark(userId, reportId, id, type, automatic) { 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) { const userConfig = await this.getState(userId); const index = userConfig.bookmarks.findIndex((bookmark) => { const bmVarId = bookmark.variantId || bookmark.id; return bmVarId === id && bookmark.reportId === reportId; }); if (index >= 0) { userConfig.bookmarks.splice(index, 1); } await this.saveState(userId, userConfig); } async createBookMarkToggleHtml({ userId, reportId, id, csrfToken, ctxId, reportType, }) { const userConfig = await this.getState(userId); const checked = this.isBookmarkedCheck(userConfig, id, reportId) ? 'checked' : null; let tooltip = 'Add bookmark'; let automatic = false; if (checked) { tooltip = 'Remove bookmark'; const bookmark = this.getBookmark(userConfig, id, reportId); automatic = bookmark.automatic; } return automatic ? '' : `<div class='dpr-bookmark dpr-bookmark-table' data-dpr-module="bookmark-toggle"> <input class="bookmark-input" aria-label="bookmark toggle" type='checkbox' id='${reportId}-${id}-${ctxId}' data-report-id='${reportId}' data-id='${id}' data-report-type='${reportType}' data-csrf-token='${csrfToken}' ${checked} /> <label id="${id}-${reportId}-${ctxId}-bookmark-label" for='${reportId}-${id}-${ctxId}'><span class="dpr-bookmark-label govuk-body-s">${tooltip}</span></label> </div>`; } } exports.default = BookmarkService;