@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
JavaScript
;
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;