@rangertechnologies/ngnxt
Version:
This library was used for creating dymanic UI based on the input JSON/data
597 lines • 105 kB
JavaScript
import { Component, Input, Output, EventEmitter, } from "@angular/core";
import * as i0 from "@angular/core";
import * as i1 from "../../services/salesforce.service";
import * as i2 from "../../services/data.service";
import * as i3 from "../../services/storage.service";
import * as i4 from "@angular/router";
import * as i5 from "@angular/platform-browser";
import * as i6 from "../../services/change.service";
import * as i7 from "../../i18n.service";
import * as i8 from "@angular/common/http";
import * as i9 from "@angular/common";
import * as i10 from "ngx-spinner";
import * as i11 from "../questionbook/questionbook.component";
export class BookletComponent {
sfService;
dataService;
storageService;
route;
sanitizer;
changeService;
i18nService;
http;
bookletId;
serv;
tkn;
bookletJSON;
dropdownDependentData;
labelValue;
token;
languageCode; // VD 11Jun24 - translation changes
fieldRestrictions; // VD 12Jun24 - field permission change
from; // Form Builder dependent change
handleBookletActionEvent = new EventEmitter();
handlePage = new EventEmitter();
hadleDropDownDependent = new EventEmitter();
// VD 06Sep24 calendar changes
handleCalendarDate = new EventEmitter();
handleCalendarEvent = new EventEmitter();
nxtBooklet;
booklet = [];
abItem = {};
actions = [];
bookQuestionsMap = new Map();
translateMap = new Map(); // VD 11Jun24 - translation changes
sqOptions = new Map();
isAnswerFlag = false;
spinnerName;
spinnerType;
// HA 19DEC23 langDirection variable is created to assign the direction as class
langDirection = 'ltr'; // HA 28DEC23 making ltr as default direction
answerList = []; // HA 11-JAN-24 Answerlist to store the minimal value
dataBind; // HA 18-JAN-24 To insert the endpoint value to the question
allEvents = []; // VD 06Sep24 calendar changes
constructor(sfService, dataService, storageService, route, sanitizer, changeService, el, i18nService, http) {
this.sfService = sfService;
this.dataService = dataService;
this.storageService = storageService;
this.route = route;
this.sanitizer = sanitizer;
this.changeService = changeService;
this.i18nService = i18nService;
this.http = http;
this.spinnerName = "sp1";
this.spinnerType = "ball-spin-clockwise";
}
ngOnInit() {
// VD 12Jan24 fieldRestrictions formate
// {
// "fields" : {
// "transQb-01" : "readOnly",
// "TransFir02" : "",
// "TransLast03" : "readOnly",
// "bk2-q2" : "hide"
// }
// }
// HA 18-JAN-24 Dummy Static data for testing
// this.dataBind = {
// "_id": "659ed002ed51bb8061544255",
// "companyId": "5ullh1BWpYqnvzKh9L",
// "name": "Al Yasmine",
// "code": "check",
// "status": "In-Progress",
// "createdAt": "2024-01-10T17:12:34.686Z",
// "updatedAt": "2024-01-10T19:53:08.135Z",
// "__v": 0,
// "owner": "check",
// "customer": "check",
// "dati": "2024-01-23T18:30:00.000Z",
// "timi": "2024-01-23T18:30:00.000Z",
// "fName": "Haider",
// "lName": "Ali",
// "defaultApp": "NXT",
// "email": "haider@gmail.com",
// "location": {address: "107, Ashok Nagar, Kadugondanahalli, Bengaluru, Karnataka 560045, India",
// latitude: 13.0200575,
// longitude: 77.6129816},
// "location": "107, Ashok Nagar, Kadugondanahalli, Bengaluru, Karnataka 560045, India",
// "textArea": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum",
// };
this.processBooklet();
}
// VD NOV23 - update the json data when bookletId and bookletJSON changes
ngOnChanges(simplechanges) {
// HA 23JAN24 To avoid undefined error
if (simplechanges['bookletId'] || (simplechanges['bookletJSON'] && (simplechanges['bookletJSON'].currentValue != null || simplechanges['bookletJSON'].currentValue != undefined)) || (simplechanges['dataBind'] && (simplechanges['dataBind'].currentValue != null || simplechanges['dataBind'].currentValue != undefined))) {
this.allEvents = [];
this.processBooklet();
}
// if(this.booklet == undefined || this.booklet.length == 0) {
// this.processBooklet();
// }
}
processBooklet() {
if (this.bookletId) {
if (this.bookletId.length == 18) {
this.readBooklet(this.bookletId);
}
}
else if (this.bookletJSON) {
// Try to pass a value from Backend to differentiate the QuestionBook Read and AnswerBook Read
this.isAnswerFlag = true;
if (this.bookletJSON != null || this.bookletJSON != undefined) {
// SKS28MAR25 get the nested reference qb
let tempbook = this.bookletJSON?.bookQuestionsMap[Object.keys(this.bookletJSON.bookQuestionsMap)[0]].subQuestions;
tempbook.forEach((element) => {
if (element.type === "book" && element?.qbReference) {
this.getRefQbData(element?.qbReference).subscribe((response) => {
element['qbReferenceQuestions'] = response; // Assign response to qbReferenceQuestions
}, (error) => {
console.error("API Error:", error);
});
}
});
this.bookletJSON.bookQuestionsMap[Object.keys(this.bookletJSON.bookQuestionsMap)[0]].subQuestions = tempbook;
// Storing the API response for future use
this.storageService.save(this.bookletJSON);
}
this.booklet = this.bookletJSON.records;
this.abItem = this.bookletJSON.answerbook;
// Process the Sub Question Options - This should be merged with bookQuestionsMap in future
for (var sq in this.bookletJSON.sqOptions) {
this.sqOptions.set(sq, this.bookletJSON.sqOptions[sq]);
}
// Process the Questions
// HA 28DEC23 this applies for booklet
// HA 17JAN24 Added ternary operator to avoid undefined scenario
// HA 09FEB24 Adding condition to avoid undefined error
if (this.bookletJSON?.bookQuestionsMap && Object.keys(this.bookletJSON?.bookQuestionsMap).length > 0) {
for (var value in this.bookletJSON.bookQuestionsMap) {
this.bookQuestionsMap.set(value, this.bookletJSON.bookQuestionsMap[value]);
}
}
// HA 28DEC23 this applies for book or questions
else {
var value = '';
// HA 09FEB24 Added ternary
// RS 09DEC24 Changed keys
value = this.bookletJSON.records[0]?.id;
this.bookQuestionsMap.set(value, this.bookletJSON.questionbook);
}
// VD 20Jun24 - translation changes
for (var value in this.bookletJSON?.translationMap) {
this.translateMap.set(value, this.bookletJSON.translationMap[value]);
}
// VD 31NOV24 wrapper changes
if (this.bookletJSON.questionbook?.action != undefined && this.bookletJSON.questionbook?.action != '') {
this.actions = JSON.parse(this.bookletJSON.questionbook.action);
}
}
// HA 19DEC23 langDirection variable value assigning
// RS 09DEC24 Changed keys
if (this.bookletJSON?.questionbook?.style) {
var style = typeof this.bookletJSON?.questionbook?.style === 'object' ? this.bookletJSON?.questionbook?.style : JSON.parse(this.bookletJSON?.questionbook?.style);
this.langDirection = style?.direction;
}
else if (this.bookletJSON?.records && this.bookletJSON?.records[0]?.style) {
var style = typeof this.bookletJSON?.records[0]?.style === 'object' ? this.bookletJSON?.records[0]?.style : JSON.parse(this.bookletJSON?.records[0]?.style);
this.langDirection = style?.direction;
}
// HA 18-JAN-24 The condition is used for Bind-In Logic
this.handleCompleteBooklet(this.bookletJSON);
}
// VD 12Jun24 - translation changes
readBooklet = (uuid) => {
if (this.serv == "api") {
this.dataService.getAPIData(this.tkn, ["Booklet", "read", uuid, this.languageCode], this.successReadBooklet, this.failureReadBooklet);
}
else {
// VD 31NOV24 param changes with new method
let paramMap = { createAnswerBookFlag: false };
paramMap['c__qb_id'] = '';
paramMap["c__record_id"] = '';
let para = {
dataType: "Booklet",
operation: "read",
param1: uuid,
paramJSON: JSON.stringify(paramMap),
languageCode: this.languageCode
};
this.sfService.remoteAction("NxtController.processData", [JSON.stringify(para)], this.successReadBooklet, this.failureReadBooklet);
}
};
successReadBooklet = (response) => {
console.log('Inside the successReadBooklet');
if (response != null || response != undefined) {
// Storing the API response for future use
this.storageService.save(response);
// Try to pass a value from Backend to differentiate the QuestionBook Read and AnswerBook Read
// this.isAnswerFlag = true;
this.booklet = response.records;
this.abItem = response.answerbook;
// Process the Sub Question Options - This should be merged with bookQuestionsMap in future
for (var sq in response.sqOptions) {
this.sqOptions.set(sq, response.sqOptions[sq]);
}
// Process the Questions
for (var value in response.bookQuestionsMap) {
this.bookQuestionsMap.set(value, response.bookQuestionsMap[value]);
}
// VD 11Jun24 - translation changes
for (var value in response.translationMap) {
this.translateMap.set(value, response.translationMap[value]);
}
// VD 31NOV24 wrapper changes
if (response.questionbook?.action != undefined) {
this.actions = JSON.parse(response.questionbook.action);
}
}
// HA 19DEC23 langDirection variable value assigning
if (response?.questionbook?.style) {
var style = typeof response?.questionbook?.style === 'object' ? response?.questionbook?.style : JSON.parse(response?.questionbook?.style);
this.langDirection = style?.direction;
}
else if (response?.records[0]?.style) {
var style = typeof response?.records[0]?.style === 'object' ? response?.records[0]?.style : JSON.parse(response?.records[0]?.style);
this.langDirection = style?.direction;
}
};
failureReadBooklet = (response) => {
};
//SKS28MAR25 Function to fetch refqb data
getRefQbData(refqbid) {
return this.http.get(`https://dev-api.valarhr.com/nxt?name=${refqbid}`);
}
handleBookletActionClick(action) {
// HA 19JAN24 Action changes
// RS 09DEC24 Changed keys
this.answerList = [];
this.dataBind = []; // HA 12FEB24 Clearing dataBind upon button action so that dataBind value will not override the changed value
let dataToParent = {};
let validForm = true; // VD 01Aug24 - validation change
// HA 22JAN24 this change to make close event work
dataToParent['action'] = action.eventtoemit;
if (!(action.eventtoemit === 'close' || action.eventtoemit === 'print')) {
// HA 18-JAN-24 Sending the complete json data also
dataToParent['jsonBook'] = this.storageService.get();
// HA 17JAN24 nxtId to dataParent object
if (this.bookletJSON) {
dataToParent['nxtId'] = Object.keys(this.bookletJSON?.bookQuestionsMap)[0];
}
// HA 11-JAN-24 Minimizing the value which has to be passed to the server
this.handleCompleteBooklet(dataToParent['jsonBook']);
dataToParent['data'] = this.answerList ? this.answerList : dataToParent['data'];
// when clicking the submit button validating the required fields
for (let key in dataToParent['jsonBook'].bookQuestionsMap) {
const currentBook = dataToParent['jsonBook'].bookQuestionsMap[key];
currentBook.subQuestions.forEach(element => {
// VD 01Aug24 - validation change
if (element.isOptional && dataToParent['action'] == 'submit' && (!element.input || (Array.isArray(element.input) && element.input.length === 0)) && !element.isHidden && element.type != 'Label' && element.type != 'Image') { //SKS5NOV25
element.error = true;
validForm = false;
this.changeService.submitChange(element.id);
}
// VD 02Aug24 - clear action changes
if (dataToParent['action'] == 'clear') {
if (element.type == 'Dropdown' || element.type == 'Location' || element.type == 'Radio') {
element.selectedValue = undefined;
}
else if (element.type == 'File') {
element.input = [];
}
else {
element.input = '';
}
}
});
}
}
// VD 13MAY24 - print QR button changes
if (action.eventtoemit === 'print') {
dataToParent['actionData'] = action['data'];
}
// HA 23JAN24 To call the action on any event
// VD 01Aug24 - validation change
if (validForm) {
this.handleBookletActionEvent.emit(dataToParent);
}
else {
dataToParent['action'] = 'error';
this.handleBookletActionEvent.emit(dataToParent);
}
}
// HA 18-JAN-24 handleCompleteBooklet is to simplify the logic
handleCompleteBooklet(completeBooklet) {
if (Object.keys(completeBooklet?.bookQuestionsMap ?? {}).length === 0) { // HA 11-JAN-24 If condition to load booklet
this.handleBook(completeBooklet?.questionbook?.subQuestions);
}
else { // HA 11-JAN-24 To load book questions
for (const key in completeBooklet.bookQuestionsMap) {
const val = completeBooklet.bookQuestionsMap[key];
if (val.type === 'Book') {
this.handleBook(val.subQuestions);
}
else {
this.handleQues(val);
}
}
}
}
// HA 11-JAN-24 handleBook loads the Book
// RS 09DEC24 Changed keys
handleBook(quesList) {
quesList?.forEach(element => {
if (element.type === 'Book' && element.qbReferenceQuestions) {
// HA 24JAN24 Fetching from QB reference
var book = typeof element.qbReferenceQuestions === 'object' ? element.qbReferenceQuestions : JSON.parse(element.qbReferenceQuestions);
const firstKey = Object.keys(book?.bookQuestionsMap || {})[0];
book?.bookQuestionsMap[firstKey]?.subQuestions?.forEach(ques => {
this.handleQues(ques);
});
}
else {
this.handleQues(element);
}
});
// VD 13Sep24 - databind changes
// VD 23 Oct24 - file type changes
if (this.dataBind && Object.keys(this.dataBind).length > 0) {
this.changeService.dataChanges('dataBind');
}
}
// SKS20MAR25 flattening nested objects, mapping values using referenceField
flattenObject(obj, parentKey = '', includeObjects = true) {
let result = [];
for (let [key, val] of Object.entries(obj)) {
let newKey = parentKey ? `${parentKey}.${key}` : key;
if (Array.isArray(val)) {
result.push([newKey, val]); // Include full array
val.forEach((item, index) => {
if (typeof item === 'object' && item !== null) {
result.push(...this.flattenObject(item, `${newKey}[${index}]`, false)); // Flatten objects in arrays
}
else {
result.push([`${newKey}[${index}]`, item]); // Store primitive values in arrays
}
});
}
else if (typeof val === 'object' && val !== null) {
if (includeObjects) {
result.push([newKey, val]); // Include full object
}
result.push(...this.flattenObject(val, newKey, false)); // Flatten nested objects
}
else {
result.push([newKey, val]); // Store key-value pairs
}
}
return result;
}
// SKS20MAR25 referenceField set like this
// name --> normal
// items[0].name --> value in a array set like this
// addresses.line2 ---> if value in a json set like this
// addresses.line4.dd ---> if value in a nested json set like this
// HA 11-JAN-24 handleQues to load question
// VD 06Sep24 calendar changes
handleQues(ques) {
// HA 19-JAN-24 If condition is for bind-in, correction
// HA 09FEB24 Adding condition to avoid undefined error
if (this.dataBind && Object.keys(this.dataBind).length > 0) {
let result = this.flattenObject(this.dataBind);
for (let [key, val] of result) {
let value = val;
if (ques.referenceField === key) {
if (ques.type === 'Dropdown' || ques.type === 'Radio') {
this.sqOptions.forEach(element => {
if (element['referenceField'] === key) {
element['input'] = ques.input = value || ques.defaultValue;
element['selectedValue'] = ques.selectedValue = value || ques.defaultValue;
}
});
}
// HA 24JAN24 To bind-in Date and DateTime
else if (ques.type === 'Date' || ques.type == 'DateTime') {
ques.input = new Date(value?.toString()) || ques.defaultValue;
}
// HA 12FEB24 To bind-in Location Type
else if (ques.type === 'Location') {
ques.input = value || ques.defaultValue;
ques.selectedValue = value['address'] ? value['address'] : value || ques.defaultValue;
}
// VD 06Sep24 calendar changes for data bindIn
else if (ques.type === 'Calendar') {
let entries = typeof ques['fieldsMeta'] === 'object' ? ques['fieldsMeta'] : JSON.parse(ques['fieldsMeta']);
if (entries) {
let referenceQuestions = [];
if (entries.length > 0) {
entries.forEach(element => {
if (element.questionReference) {
let qReference = JSON.parse(element.questionReference);
referenceQuestions.push(qReference?.question);
}
});
}
if (referenceQuestions.length > 0) {
value?.forEach(calendarArray => {
let date = new Date(calendarArray.date);
calendarArray.entries.forEach(inputEntry => {
for (let [k, v] of Object.entries(inputEntry)) {
referenceQuestions.forEach(field => {
if (field.referenceField == k) {
if (field.type === 'Date' || field.type == 'DateTime' || field.type == 'Time') {
field.input = new Date(v?.toString()) || ques.defaultValue;
}
if (field.type === 'Dropdown' || field.type === 'Radio') {
field.selectedValue = v;
field.input = v || ques.defaultValue;
}
else {
field.input = v || ques.defaultValue;
}
}
});
}
this.addEvent(date, referenceQuestions); //SKS 27SEP24 each event added to allEvents array
});
// this.addEvent(date,referenceQuestions); //this is only last event added to allEvents array
});
}
}
ques.input = this.allEvents.length > 0 ? this.allEvents : '';
}
// VD 23 Oct24 - file type changes
else if (ques.type === 'File') {
ques.input = [];
ques.input = value;
}
else {
ques.input = value || ques.defaultValue;
}
this.answerList.push(ques); // HA 12FEB24 To give the value for data
}
else {
//console.log("reference field not found");
}
}
}
else {
const question = {};
question['id'] = ques.id;
question['input'] = ques.input || ques.defaultValue;
// HA 12FEB24 To bind-out Location Type
if (ques.type === 'Location') {
question['input'] = ques.input ? ques.input : ques.selectedValue;
}
else if (ques.type == 'File') {
// VD 23 Oct24 - file type changes
question['input'] = ques.input ? ques.input : ques.defaultValue || [];
}
question['type'] = ques.type;
question['questionNumber'] = ques.questionNumber;
question['referenceField'] = ques?.referenceField;
question['selectedValue'] = ques?.selectedValue; // MR 31JAN24 Need to pass the selected value too
this.answerList.push(question);
}
}
// VD 06Sep24 calendar changes for data bindIn
addEvent(day, entryQues) {
// Transform new entries into the desired format
const newEntries = entryQues.reduce((acc, q) => {
acc[q.id] = { ...q };
return acc;
}, {});
// Find if an event already exists for the given date
const existingEvent = this.allEvents.find(event => event.date.toDateString() === day.toDateString());
if (existingEvent) {
// If the event exists, push the new entries to the existing entries
const existingEntries = existingEvent.entries.map(entry => ({ ...entry }));
existingEntries.push(newEntries);
existingEvent.entries = existingEntries;
}
else {
// Create a new event if it doesn't exist for the given date
const newEvent = {
id: '_' + Math.random().toString(36).substr(2, 9),
date: day,
entries: [newEntries] // Wrap the new entries in an array
};
this.allEvents.push(newEvent);
}
}
readQuestions(qbId) {
let questions = [];
// HA 31-JAN-24 Added ternary to avoid undefined
for (var sq in this.bookQuestionsMap?.get(qbId)?.subQuestions) {
let q = this.bookQuestionsMap?.get(qbId).subQuestions[sq];
// HA 09FEB24 if question is there process
if (q) {
if ((q.type == 'Dropdown' || q.type == 'Radio') && this.sqOptions.get(q.id)) {
questions.push(this.sqOptions.get(q.id));
}
else {
questions.push(q);
}
}
}
// VD 12Jun24 field permisision changes
if (this.fieldRestrictions) {
const fieldRestrictions = new Map(Object.entries(this.fieldRestrictions.fields));
questions.forEach(ques => {
const restriction = fieldRestrictions.get(ques.uniqueIdentifier);
if (restriction) {
ques.isReadOnly = restriction === 'readOnly';
ques.isHidden = restriction === 'hide';
}
});
}
return questions;
}
// VD 11Jun24 - translation changes
readTransQuestions(qbId) {
let record = [];
let translateRecord = this.translateMap.get(qbId);
if (translateRecord && translateRecord.length > 0) {
translateRecord.forEach(lanRec => {
if (lanRec.languageCode == this.languageCode) {
record = lanRec.fields;
}
});
}
return record;
}
getText(value) {
var doc = new DOMParser().parseFromString(value, "text/html");
return this.sanitizer.bypassSecurityTrustHtml(doc.documentElement.textContent);
}
getDropDown(event) {
this.hadleDropDownDependent.emit(event);
}
// VD 06Sep24 calendar changes
getCalendarDate(event) {
this.handleCalendarDate.emit(event);
}
getCalendarEvent(event) {
event["nxtId"] = Object.keys(this.bookletJSON?.bookQuestionsMap)[0];
this.handleCalendarEvent.emit(event);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BookletComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.StorageService }, { token: i4.ActivatedRoute }, { token: i5.DomSanitizer }, { token: i6.ChangeService }, { token: i0.ElementRef }, { token: i7.I18nService }, { token: i8.HttpClient }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: BookletComponent, selector: "lib-booklet", inputs: { bookletId: "bookletId", serv: "serv", tkn: "tkn", bookletJSON: "bookletJSON", dropdownDependentData: "dropdownDependentData", labelValue: "labelValue", token: "token", languageCode: "languageCode", fieldRestrictions: "fieldRestrictions", from: "from", dataBind: "dataBind" }, outputs: { handleBookletActionEvent: "handleBookletActionEvent", handlePage: "handlePage", hadleDropDownDependent: "hadleDropDownDependent", handleCalendarDate: "handleCalendarDate", handleCalendarEvent: "handleCalendarEvent" }, usesOnChanges: true, ngImport: i0, template: "<ngx-spinner size=\"medium\" [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\n<!-- Booklet Handling-->\n<!-- HA 19DEC23 For Direction -->\n<div *ngFor=\"let qb of booklet\" [ngClass]=\"langDirection\">\n <!-- MR Commented below code to ensure single JSON for UNCONDITIONAL Booklets -->\n <!-- RS 09DEC24 Changed keys-->\n <!-- <lib-questionnaire [serv]=\"serv\" [qbId]=\"qb.id\" [tkn]=\"tkn\"></lib-questionnaire> -->\n <!-- HA 28DEC23 Below If logic is to load from booklet -->\n <div *ngIf=\"qb.subQuestions; else elseBlock\">\n <div *ngFor=\"let ques of qb.subQuestions\" class=\"questiondiv1\">\n <div>\n <!-- HA 17JAN24 - Is title is enabled so that based on the boolean div will be visible -->\n <div *ngIf=\"ques.isTitle\" [class]=\"qb.isShengel ? 'header-style' : 'question-f-size additional'\">\n <!-- VD 08NOV23 - showing lable when its available-->\n <div [innerHTML]=\"getText(ques?.questionText)\" *ngIf=\"ques?.questionText && ques?.style?.showLabel !== false\" >\n {{ ques?.questionText }}\n </div>\n </div> <!-- VD 19JAN24 - getting token as input --> <!--VD 11Jun24 - translation changes-->\n <!--VD 06Sep24 calendar changes-->\n <lib-questionbook [qbItem]=\"qb\" [token]=\"token\"\n [labelValue]=\"labelValue\"\n [questionItem]=\"ques\"\n [translatedQuestions]=\"readTransQuestions(qb.id)\"\n [questions]=\"readQuestions(qb.id)\"\n (handleDropDown)=\"getDropDown($event)\"\n (handleCalendarDate)=\"getCalendarDate($event)\"\n (handleCalendarEvent)=\"getCalendarEvent($event)\"\n ></lib-questionbook>\n </div>\n </div>\n </div>\n <!-- HA 28DEC23 Below else logic is to load from books or questions -->\n <ng-template #elseBlock>\n <div class=\"questiondiv1\">\n <div>\n <div *ngIf=\"!qb.isTitle\" [class]=\"qb.isShengel ? 'header-style' : 'question-f-size additional'\">\n <!-- VD 08NOV23 - showing lable when its available-->\n <div [innerHTML]=\"getText(qb?.questionText)\" *ngIf=\"qb?.questionText && qb?.style?.showLabel !== false\" >\n {{ qb?.questionText }}\n {{ qb?.title }}\n </div>\n </div> <!-- VD 19JAN24 - getting token as input --> <!-- // VD 11Jun24 - translation changes-->\n <lib-questionbook [qbItem]=\"qb\" [token]=\"token\" [labelValue]=\"labelValue\" [questionItem]=\"qb\" [translatedQuestions]=\"readTransQuestions(qb.id)\" [questions]=\"readQuestions(qb.id)\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n </div>\n </div>\n </ng-template>\n</div>\n<!-- RS 09DEC24 Changed keys-->\n<!-- Group Actions -->\n<!-- HA 19DEC23 For Direction -->\n<div class=\"align-submit-row\" *ngIf=\"abItem?.status != 'Completed'\" [ngClass]=\"langDirection\">\n <div *ngFor=\"let action of actions; let i = index\">\n <!-- // HA 22JAN24 Commonise the button style in fusion -->\n <button (click)=\"handleBookletActionClick(action)\" ngClass=\"btn btn-primary fc-button nxtButton\">\n {{ action.name }}\n </button>\n </div>\n</div>\n", styles: [".align-submit-row{display:flex}.header-style{padding:15px;background:#f8f8f8;color:#898989;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0;justify-content:left;font-size:15px}.rtl{flex-direction:row-reverse}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.NgxSpinnerComponent, selector: "ngx-spinner", inputs: ["bdColor", "size", "color", "type", "fullScreen", "name", "zIndex", "template", "showSpinner", "disableAnimation"] }, { kind: "component", type: i11.QuestionbookComponent, selector: "lib-questionbook", inputs: ["qbItem", "questionItem", "translatedQuestions", "questions", "errorFieldId", "labelValue", "token", "dropDownData"], outputs: ["handleDropDown", "handleQuestion", "hadleDropDownDependent", "handleCalendarDate", "handleCalendarEvent"] }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BookletComponent, decorators: [{
type: Component,
args: [{ selector: 'lib-booklet', template: "<ngx-spinner size=\"medium\" [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\n<!-- Booklet Handling-->\n<!-- HA 19DEC23 For Direction -->\n<div *ngFor=\"let qb of booklet\" [ngClass]=\"langDirection\">\n <!-- MR Commented below code to ensure single JSON for UNCONDITIONAL Booklets -->\n <!-- RS 09DEC24 Changed keys-->\n <!-- <lib-questionnaire [serv]=\"serv\" [qbId]=\"qb.id\" [tkn]=\"tkn\"></lib-questionnaire> -->\n <!-- HA 28DEC23 Below If logic is to load from booklet -->\n <div *ngIf=\"qb.subQuestions; else elseBlock\">\n <div *ngFor=\"let ques of qb.subQuestions\" class=\"questiondiv1\">\n <div>\n <!-- HA 17JAN24 - Is title is enabled so that based on the boolean div will be visible -->\n <div *ngIf=\"ques.isTitle\" [class]=\"qb.isShengel ? 'header-style' : 'question-f-size additional'\">\n <!-- VD 08NOV23 - showing lable when its available-->\n <div [innerHTML]=\"getText(ques?.questionText)\" *ngIf=\"ques?.questionText && ques?.style?.showLabel !== false\" >\n {{ ques?.questionText }}\n </div>\n </div> <!-- VD 19JAN24 - getting token as input --> <!--VD 11Jun24 - translation changes-->\n <!--VD 06Sep24 calendar changes-->\n <lib-questionbook [qbItem]=\"qb\" [token]=\"token\"\n [labelValue]=\"labelValue\"\n [questionItem]=\"ques\"\n [translatedQuestions]=\"readTransQuestions(qb.id)\"\n [questions]=\"readQuestions(qb.id)\"\n (handleDropDown)=\"getDropDown($event)\"\n (handleCalendarDate)=\"getCalendarDate($event)\"\n (handleCalendarEvent)=\"getCalendarEvent($event)\"\n ></lib-questionbook>\n </div>\n </div>\n </div>\n <!-- HA 28DEC23 Below else logic is to load from books or questions -->\n <ng-template #elseBlock>\n <div class=\"questiondiv1\">\n <div>\n <div *ngIf=\"!qb.isTitle\" [class]=\"qb.isShengel ? 'header-style' : 'question-f-size additional'\">\n <!-- VD 08NOV23 - showing lable when its available-->\n <div [innerHTML]=\"getText(qb?.questionText)\" *ngIf=\"qb?.questionText && qb?.style?.showLabel !== false\" >\n {{ qb?.questionText }}\n {{ qb?.title }}\n </div>\n </div> <!-- VD 19JAN24 - getting token as input --> <!-- // VD 11Jun24 - translation changes-->\n <lib-questionbook [qbItem]=\"qb\" [token]=\"token\" [labelValue]=\"labelValue\" [questionItem]=\"qb\" [translatedQuestions]=\"readTransQuestions(qb.id)\" [questions]=\"readQuestions(qb.id)\" (handleDropDown)=\"getDropDown($event)\"></lib-questionbook>\n </div>\n </div>\n </ng-template>\n</div>\n<!-- RS 09DEC24 Changed keys-->\n<!-- Group Actions -->\n<!-- HA 19DEC23 For Direction -->\n<div class=\"align-submit-row\" *ngIf=\"abItem?.status != 'Completed'\" [ngClass]=\"langDirection\">\n <div *ngFor=\"let action of actions; let i = index\">\n <!-- // HA 22JAN24 Commonise the button style in fusion -->\n <button (click)=\"handleBookletActionClick(action)\" ngClass=\"btn btn-primary fc-button nxtButton\">\n {{ action.name }}\n </button>\n </div>\n</div>\n", styles: [".align-submit-row{display:flex}.header-style{padding:15px;background:#f8f8f8;color:#898989;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0;justify-content:left;font-size:15px}.rtl{flex-direction:row-reverse}\n"] }]
}], ctorParameters: () => [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.StorageService }, { type: i4.ActivatedRoute }, { type: i5.DomSanitizer }, { type: i6.ChangeService }, { type: i0.ElementRef }, { type: i7.I18nService }, { type: i8.HttpClient }], propDecorators: { bookletId: [{
type: Input
}], serv: [{
type: Input
}], tkn: [{
type: Input
}], bookletJSON: [{
type: Input
}], dropdownDependentData: [{
type: Input
}], labelValue: [{
type: Input
}], token: [{
type: Input
}], languageCode: [{
type: Input
}], fieldRestrictions: [{
type: Input
}], from: [{
type: Input
}], handleBookletActionEvent: [{
type: Output
}], handlePage: [{
type: Output
}], hadleDropDownDependent: [{
type: Output
}], handleCalendarDate: [{
type: Output
}], handleCalendarEvent: [{
type: Output
}], dataBind: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2xldC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvYm9va2xldC9ib29rbGV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9ib29rbGV0L2Jvb2tsZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksR0FJYixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7OztBQW9CdkIsTUFBTSxPQUFPLGdCQUFnQjtJQXFDakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUQ7SUFDQztJQTVDRCxTQUFTLENBQVM7SUFDbEIsSUFBSSxDQUFTO0lBQ2IsR0FBRyxDQUFTO0lBQ1osV0FBVyxDQUFNO0lBQ2pCLHFCQUFxQixDQUFNO0lBQzNCLFVBQVUsQ0FBUztJQUNuQixLQUFLLENBQVM7SUFDZCxZQUFZLENBQVMsQ0FBRSxtQ0FBbUM7SUFDMUQsaUJBQWlCLENBQU0sQ0FBQyx1Q0FBdUM7SUFDL0QsSUFBSSxDQUFNLENBQUMsZ0NBQWdDO0lBRTFDLHdCQUF3QixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ2pFLFVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNuRCxzQkFBc0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUN6RSw4QkFBOEI7SUFDcEIsa0JBQWtCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFDM0QsbUJBQW1CLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFFL0QsVUFBVSxDQUFpQjtJQUUzQixPQUFPLEdBQVUsRUFBRSxDQUFDO0lBQ3BCLE1BQU0sR0FBUSxFQUFFLENBQUM7SUFDakIsT0FBTyxHQUFpQixFQUFFLENB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