src/app/manage-learn/questionnaire/questionnaire.page.ts
OnInit
OnDestroy
selector | app-questionnaire |
styleUrls | ./questionnaire.page.scss |
templateUrl | ./questionnaire.page.html |
constructor(localStorage: LocalStorageService, loader: LoaderService, utils: UtilsService, toast: ToastService, location: Location, actionSheetCtrl: ActionSheetController, routerParam: ActivatedRoute, network: Network, alertCtrl: AlertController, headerService: AppHeaderService, modalCtrl: ModalController, translate: TranslateService, router: Router, commonUtilService: CommonUtilService)
|
|||||||||||||||||||||||||||||||||||||||||||||
Parameters :
|
allowStart |
allowStart()
|
Returns :
void
|
back |
back()
|
Returns :
void
|
checkForAllEcmCompletion |
checkForAllEcmCompletion()
|
Returns :
void
|
checkForEvidenceCompletion |
checkForEvidenceCompletion()
|
Returns :
boolean
|
Async checkForNetworkTypeAlert |
checkForNetworkTypeAlert()
|
Returns :
any
|
checkForQuestionDisplay | ||||
checkForQuestionDisplay(qst)
|
||||
Parameters :
Returns :
boolean
|
feedBack |
feedBack()
|
Returns :
void
|
getQuestions | ||||
getQuestions(data)
|
||||
Parameters :
Returns :
void
|
getSectionStatus |
getSectionStatus()
|
Returns :
string
|
goToImageListing |
goToImageListing()
|
Returns :
void
|
ionViewDidLoad |
ionViewDidLoad()
|
Returns :
void
|
ionViewWillEnter |
ionViewWillEnter()
|
Returns :
void
|
ionViewWillLeave |
ionViewWillLeave()
|
Returns :
void
|
next | ||||||
next(status?: string)
|
||||||
Parameters :
Returns :
void
|
ngOnDestroy |
ngOnDestroy()
|
Returns :
void
|
ngOnInit |
ngOnInit()
|
Returns :
void
|
Async openActionSheet |
openActionSheet()
|
Returns :
any
|
Async openQuestionMap |
openQuestionMap()
|
Returns :
any
|
setModalRefernc | ||||
setModalRefernc(refrc)
|
||||
Parameters :
Returns :
void
|
showMessageForNONTargetUsers |
showMessageForNONTargetUsers()
|
Returns :
void
|
Async startAction |
startAction()
|
Returns :
any
|
updateCompletedQuestionCount |
updateCompletedQuestionCount()
|
Returns :
void
|
updateLocalData |
updateLocalData()
|
Returns :
void
|
updateTheChildrenQuestions | ||||
updateTheChildrenQuestions(parentQuestion)
|
||||
Parameters :
Returns :
void
|
Private Optional _appHeaderSubscription |
Type : Subscription
|
Public actionSheetCtrl |
Type : ActionSheetController
|
allQuestionsOfEvidence |
Type : Array<any>
|
Default value : []
|
captureGpsLocationAtQuestionLevel |
Type : boolean
|
countCompletedQuestion |
Type : number
|
dashbordData |
Type : any
|
enableQuestionReadOut |
Type : boolean
|
end |
Type : number
|
Default value : 1
|
extrasState |
Type : any
|
headerConfig |
Type : object
|
Default value : {
showHeader: true,
showBurgerMenu: false,
actionButtons: [],
}
|
isCurrentEvidenceSubmitted |
Type : any
|
isFirst |
Type : boolean
|
isLast |
Type : boolean
|
isSurvey |
Type : boolean
|
Default value : false
|
isTargeted |
Type : boolean
|
isViewOnly |
Type : boolean
|
localImageListKey |
Type : any
|
modalRefrnc |
Type : any
|
nameInputRef |
Type : ElementRef
|
Decorators :
@ViewChild('sample', {static: false})
|
networkAvailable |
pageTop |
Type : IonContent
|
Decorators :
@ViewChild('pageTop', {static: false})
|
questions |
Type : any
|
schoolData |
Type : any
|
schoolName |
Type : string
|
selectedEvidenceId |
Type : string
|
selectedEvidenceIndex |
Type : any
|
Default value : 0
|
selectedSectionIndex |
Type : any
|
Default value : 0
|
start |
Type : number
|
Default value : 0
|
submissionId |
Type : any
|
import { Location } from '@angular/common';
import { Component, OnInit, ViewChild, ElementRef, OnDestroy } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { ActionSheetController, AlertController, IonContent, ModalController } from '@ionic/angular';
import { LocalStorageService, LoaderService, UtilsService, ToastService } from '../core';
import { AppHeaderService, CommonUtilService } from '@app/services';
import { Subscription } from 'rxjs';
import { QuestionMapModalComponent } from './question-map-modal/question-map-modal.component';
import { TranslateService } from '@ngx-translate/core';
import { RouterLinks } from '@app/app/app.constant';
import { Network } from '@ionic-native/network/ngx';
@Component({
selector: 'app-questionnaire',
templateUrl: './questionnaire.page.html',
styleUrls: ['./questionnaire.page.scss'],
})
export class QuestionnairePage implements OnInit, OnDestroy {
@ViewChild('sample', {static: false}) nameInputRef: ElementRef;
@ViewChild('pageTop', {static: false}) pageTop: IonContent;
private _appHeaderSubscription?: Subscription;
headerConfig = {
showHeader: true,
showBurgerMenu: false,
actionButtons: [],
};
extrasState:any;
questions: any;
schoolName: string;
submissionId: any;
selectedEvidenceIndex: any = 0;
selectedSectionIndex: any = 0;
start: number = 0;
end: number = 1;
schoolData: any;
isLast: boolean;
isFirst: boolean;
selectedEvidenceId: string;
isCurrentEvidenceSubmitted: any;
allQuestionsOfEvidence: Array<any> = [];
isViewOnly: boolean;
dashbordData: any;
modalRefrnc: any;
localImageListKey: any;
countCompletedQuestion: number;
captureGpsLocationAtQuestionLevel: boolean;
enableQuestionReadOut: boolean;
networkAvailable;
isTargeted :boolean;
isSurvey : boolean = false;
constructor(
// public navCtrl: NavController,
// public navParams: NavParams,
private localStorage: LocalStorageService,
private loader: LoaderService,
private utils: UtilsService,
private toast: ToastService,
private location: Location,
// private feedback: FeedbackProvider,
public actionSheetCtrl: ActionSheetController,
// private events: Events,
private routerParam: ActivatedRoute,
// private diagnostic: Diagnostic,
// private translate: TranslateService,
private network: Network,
private alertCtrl: AlertController,
// private ngps: NetworkGpsProvider,
private headerService: AppHeaderService,
private modalCtrl: ModalController,
private translate: TranslateService,
private router: Router,
private commonUtilService:CommonUtilService
) {
this.routerParam.queryParams.subscribe((params) => {
this.submissionId = params.submisssionId;
this.selectedEvidenceIndex = params.evidenceIndex ? parseInt(params.evidenceIndex): 0;
this.selectedSectionIndex = params.sectionIndex ? parseInt(params.sectionIndex): 0;
this.schoolName = params.schoolName;
this.isSurvey = params.isSurvey == 'true';
});
// State is using for Template view for Deeplink.
this.extrasState = this.router.getCurrentNavigation().extras.state;
if(this.extrasState){
this.isTargeted = this.extrasState.isATargetedSolution;
}
if(this.extrasState && !this.isTargeted){
this.showMessageForNONTargetUsers();
}
this._appHeaderSubscription = this.headerService.headerEventEmitted$.subscribe((eventName) => {
if (eventName.name === 'questionMap') {
this.openQuestionMap();
}
});
// Online event
// this.networkAvailable = this.ngps.getNetworkStatus();
}
ngOnDestroy() {
if (this._appHeaderSubscription) {
this._appHeaderSubscription.unsubscribe();
}
}
ngOnInit() {
if(this.extrasState){
this.isViewOnly = true;
this.getQuestions(this.extrasState);
}else{
this.localStorage
.getLocalStorage(this.utils.getAssessmentLocalStorageKey(this.submissionId))
.then((data) => {
this.getQuestions(data);
})
}
}
getQuestions(data){
this.schoolData = data;
const currentEvidences = this.schoolData['assessment']['evidences'];
this.enableQuestionReadOut = this.schoolData['solution']['enableQuestionReadOut'];
this.captureGpsLocationAtQuestionLevel = this.schoolData['solution']['captureGpsLocationAtQuestionLevel'];
this.countCompletedQuestion = this.utils.getCompletedQuestionsCount(
this.schoolData['assessment']['evidences'][this.selectedEvidenceIndex]['sections'][this.selectedSectionIndex][
'questions'
]
);
this.selectedEvidenceId = currentEvidences[this.selectedEvidenceIndex].externalId;
this.localImageListKey = 'images_' + this.selectedEvidenceId + '_' + this.submissionId;
this.isViewOnly = !this.isSurvey && !currentEvidences[this.selectedEvidenceIndex]['startTime'] ? true : false;
this.questions =
currentEvidences[this.selectedEvidenceIndex]['sections'][this.selectedSectionIndex]['questions'];
this.schoolData['assessment']['evidences'][this.selectedEvidenceIndex]['sections'][
this.selectedSectionIndex
].totalQuestions = this.questions.length;
this.dashbordData = {
questions: this.questions,
evidenceMethod: currentEvidences[this.selectedEvidenceIndex]['name'],
sectionName: currentEvidences[this.selectedEvidenceIndex]['sections'][this.selectedSectionIndex].name,
currentViewIndex: this.start,
};
this.isCurrentEvidenceSubmitted = currentEvidences[this.selectedEvidenceIndex].isSubmitted;
if (!this.isSurvey && this.isCurrentEvidenceSubmitted || this.isViewOnly) {
document.getElementById('stop').style.pointerEvents = 'none';
}
}
ionViewWillEnter() {
this.headerConfig = this.headerService.getDefaultPageConfig();
this.headerConfig.actionButtons = ['questionMap'];
this.headerConfig.showHeader = true;
this.headerConfig.showBurgerMenu = false;
this.headerService.updatePageConfig(this.headerConfig);
}
allowStart(){
this.schoolData['assessment']['evidences'][this.selectedEvidenceIndex].startTime = Date.now();
this.isViewOnly = false;
document.getElementById('stop').style.pointerEvents = 'auto';
}
async startAction(){
await this.router.navigate([`/${RouterLinks.HOME}`]);
this.router.navigate([`/${RouterLinks.OBSERVATION}/${RouterLinks.OBSERVATION_DETAILS}`],
{queryParams: {solutionId: this.extrasState.solution._id, programId: this.extrasState.programId,
solutionName: this.extrasState.solution.name}})
}
ionViewDidLoad() {}
async openQuestionMap() {
const questionModal = await this.modalCtrl.create({
component: QuestionMapModalComponent,
componentProps: {
data: this.dashbordData,
},
});
await questionModal.present();
const { data } = await questionModal.onDidDismiss();
if (data >= 0) {
this.start = data;
this.end = data + 1;
this.dashbordData.currentViewIndex = data;
}
}
// images_CO_5bebcfcf92ec921dcf114828
next(status?: string) {
this.pageTop.scrollToTop();
if (this.questions[this.start].responseType === 'pageQuestions') {
this.questions[this.start].endTime = this.questions[this.start] ? Date.now() : '';
this.questions[this.start].isCompleted = this.utils.isPageQuestionComplete(this.questions[this.start]);
}
if (this.questions[this.start].children.length) {
this.updateTheChildrenQuestions(this.questions[this.start]);
}
if (this.end < this.questions.length && !status) {
if (this.submissionId) {
this.localStorage.setLocalStorage(this.utils.getAssessmentLocalStorageKey(this.submissionId), this.schoolData);
}
this.start++;
this.end++;
this.dashbordData.currentViewIndex = this.start;
if (
this.questions[this.start].visibleIf.length &&
this.questions[this.start].visibleIf[0] &&
!this.checkForQuestionDisplay(this.questions[this.start])
) {
this.questions[this.start].isCompleted = true;
this.next();
} else if (
this.questions[this.start].visibleIf.length &&
this.questions[this.start].visibleIf[0] &&
this.checkForQuestionDisplay(this.questions[this.start])
) {
}
} else if (status === 'completed' && this.submissionId) {
this.schoolData['assessment']['evidences'][this.selectedEvidenceIndex].sections[
this.selectedSectionIndex
].progressStatus = this.getSectionStatus();
this.localStorage
.setLocalStorage(this.utils.getAssessmentLocalStorageKey(this.submissionId), this.schoolData)
.then((success) => {
this.schoolData.observation || this.schoolData.survey
? this.checkForAllEcmCompletion()
: this.location.back();
});
} else {
this.next('completed');
}
this.updateCompletedQuestionCount();
}
getSectionStatus(): string {
let allAnswered = true;
let currentEcm = this.schoolData['assessment']['evidences'][this.selectedEvidenceIndex];
let currentSection = this.schoolData['assessment']['evidences'][this.selectedEvidenceIndex].sections[
this.selectedSectionIndex
];
for (const question of currentSection.questions) {
if (!question.isCompleted) {
allAnswered = false;
break;
}
}
if (currentEcm.isSubmitted) {
currentSection.progressStatus = 'submitted';
} else if (!currentEcm.startTime) {
currentSection.progressStatus = '';
} else if (allAnswered) {
currentSection.progressStatus = 'completed';
} else if (!allAnswered && currentSection.progressStatus) {
currentSection.progressStatus = 'inProgress';
} else if (!currentSection.progressStatus) {
currentSection.progressStatus = '';
}
return currentSection.progressStatus;
}
checkForAllEcmCompletion() {
this.localStorage
.getLocalStorage(this.utils.getAssessmentLocalStorageKey(this.submissionId))
.then((data) => {
let completedAllSections = true;
let currentEcm = data.assessment.evidences[this.selectedEvidenceIndex];
for (const section of currentEcm.sections) {
if (section.progressStatus !== 'completed') {
completedAllSections = false;
break;
}
}
if (completedAllSections && !currentEcm.isSubmitted) {
this.openActionSheet();
} else {
this.location.back();
}
})
}
async openActionSheet() {
let translateObject;
this.translate
.get(['FRMELEMNTS_BTN_SUBMIT_FORM', 'FRMELEMNTS_BTN_PREVIEW_FORM', 'FRMELEMNTS_BTN_SAVE_FORM'])
.subscribe((translations) => {
translateObject = translations;
});
let actionSheet = await this.actionSheetCtrl.create({
// title: 'Modify your album',
buttons: [
{
text: translateObject['FRMELEMNTS_BTN_SUBMIT_FORM'],
icon: 'cloud-upload',
handler: () => {
this.checkForNetworkTypeAlert();
},
},
{
text: translateObject['FRMELEMNTS_BTN_PREVIEW_FORM'],
icon: 'clipboard',
handler: () => {
this.router.navigate([RouterLinks.SUBMISSION_PREVIEW], {
queryParams: {
submissionId: this.submissionId,
name: this.schoolName,
selectedEvidenceIndex: this.selectedEvidenceIndex,
},
});
},
},
{
text: translateObject['FRMELEMNTS_BTN_SAVE_FORM'],
icon: 'file-tray-full',
handler: () => {
this.location.back();
},
},
],
});
actionSheet.present();
}
async checkForNetworkTypeAlert() {
if (
this.network.type === 'cellular' ||
this.network.type === 'unknown' ||
this.network.type === '2g' ||
this.network.type === 'ethernet'
) {
let translateObject;
this.translate
.get(['CONFIRM', 'YES', 'NO', 'FRMELEMENTS_LBL_SLOW_INTERNET'])
.subscribe((translations) => {
translateObject = translations;
});
let alert = await this.alertCtrl.create({
header: translateObject['CONFIRM'],
message: translateObject['FRMELEMENTS_LBL_SLOW_INTERNET'],
buttons: [
{
text: translateObject['NO'],
role: 'cancel',
handler: () => {
},
},
{
text: translateObject['YES'],
handler: () => {
this.goToImageListing();
},
},
],
});
await alert.present();
} else if (this.network.type === 'wifi' || this.network.type === '3g' || this.network.type === '4g') {
this.goToImageListing();
} else if (this.network.type === 'none') {
let noInternetMsg;
this.translate.get(['FRMELEMENTS_MSG_FEATURE_USING_OFFLINE']).subscribe((translations) => {
noInternetMsg = translations['FRMELEMENTS_MSG_FEATURE_USING_OFFLINE'];
this.toast.openToast(noInternetMsg);
});
}
}
goToImageListing() {
if (this.commonUtilService.networkInfo.isNetworkAvailable) {
this.router.navigate([RouterLinks.IMAGE_LISTING], {
queryParams: {
submissionId: this.submissionId,
name: this.schoolName,
selectedEvidenceIndex: this.selectedEvidenceIndex,
},
});
} else {
this.translate.get('FRMELEMNTS_MSG_CONNECT_TO_INTERNET').subscribe((translations) => {
this.toast.openToast(translations);
});
}
}
updateCompletedQuestionCount() {
this.schoolData['assessment']['evidences'][this.selectedEvidenceIndex]['sections'][
this.selectedSectionIndex
].completedQuestions = this.utils.getCompletedQuestionsCount(
this.schoolData['assessment']['evidences'][this.selectedEvidenceIndex]['sections'][this.selectedSectionIndex][
'questions'
]
);
this.countCompletedQuestion = this.utils.getCompletedQuestionsCount(
this.schoolData['assessment']['evidences'][this.selectedEvidenceIndex]['sections'][this.selectedSectionIndex][
'questions'
]
);
}
updateLocalData(): void {
if (this.submissionId) {
this.localStorage.setLocalStorage(this.utils.getAssessmentLocalStorageKey(this.submissionId), this.schoolData);
}
}
checkForQuestionDisplay(qst): boolean {
return this.utils.checkForDependentVisibility(qst, this.questions);
}
updateTheChildrenQuestions(parentQuestion) {
for (const child of parentQuestion.children) {
for (const question of this.questions) {
if (
child === question._id &&
eval(
'"' + parentQuestion.value + '"' + question.visibleIf[0].operator + '"' + question.visibleIf[0].value + '"'
) &&
!question.value
) {
question.isCompleted = false;
} else if (child === question._id && parentQuestion.value !== question.visibleIf[0].value) {
question.isCompleted = true;
}
}
}
}
back() {
this.pageTop.scrollToTop();
if (this.questions[this.start].responseType === 'pageQuestions') {
this.questions[this.start].endTime = this.questions[this.start] ? Date.now() : '';
this.questions[this.start].isCompleted = this.utils.isPageQuestionComplete(this.questions[this.start]);
}
if (this.questions[this.start].children.length) {
this.updateTheChildrenQuestions(this.questions[this.start]);
}
if (this.start > 0) {
if (this.submissionId) {
this.localStorage.setLocalStorage(this.utils.getAssessmentLocalStorageKey(this.submissionId), this.schoolData);
}
this.start--;
this.dashbordData.currentViewIndex = this.start;
this.end--;
if (this.questions[this.start].visibleIf.length && !this.checkForQuestionDisplay(this.questions[this.start])) {
this.back();
}
}
this.updateCompletedQuestionCount();
}
feedBack() {
// this.feedback.sendFeedback()
}
setModalRefernc(refrc): void {
this.modalRefrnc = refrc;
this.modalRefrnc.onDidDismiss((data) => {
if (data >= 0) {
this.start = data;
this.end = data + 1;
this.dashbordData.currentViewIndex = data;
}
});
}
checkForEvidenceCompletion(): boolean {
let allAnswered;
let evidenceSections = this.schoolData['assessment']['evidences'][this.selectedEvidenceIndex]['sections']
let currentEvidence = this.schoolData['assessment']['evidences'][this.selectedEvidenceIndex];
for (const section of evidenceSections) {
allAnswered = true;
for (const question of section.questions) {
if (!question.isCompleted) {
allAnswered = false;
break;
}
}
if (currentEvidence.isSubmitted) {
section.progressStatus = 'submitted';
} else if (!currentEvidence.startTime) {
section.progressStatus = '';
} else if (allAnswered) {
section.progressStatus = 'completed';
} else if (!allAnswered && section.progressStatus) {
section.progressStatus = 'inProgress';
} else if (!section.progressStatus) {
section.progressStatus = '';
}
}
let allAnsweredForEvidence = true;
for (const section of evidenceSections) {
if (section.progressStatus !== 'completed') {
allAnsweredForEvidence = false;
break;
}
}
return allAnsweredForEvidence
}
ionViewWillLeave() {
this.headerConfig.actionButtons = [];
this.headerService.updatePageConfig(this.headerConfig);
}
showMessageForNONTargetUsers(){
let msg;
this.translate.get(['FRMELEMENTS_MSG_FOR_NONTARGETED_USERS_QUESTIONNAIRE']).subscribe((translations) => {
msg = translations['FRMELEMENTS_MSG_FOR_NONTARGETED_USERS_QUESTIONNAIRE'];
this.toast.openToast(msg,'','top');
});
}
}
<ion-content #pageTop>
<div id="stop">
<div class="_container" *ngIf="submissionId || extrasState">
<ng-container *ngFor="let question of questions| slice:start:end; let i=index">
<ion-item-divider color="light" *ngIf="question?.sectionHeader">
<h4 class="bold _flex-box sectionHeader ion-text-wrap" >{{question?.sectionHeader}}</h4>
</ion-item-divider>
<ng-container [ngSwitch]="question.responseType.toLowerCase()">
<app-text-type-input [inputIndex]="start + 1" [evidenceId]="selectedEvidenceId" [submissionId]="submissionId"
[data]="question" [imageLocalCopyId]="localImageListKey" *ngSwitchCase="'text'"
[enableQuestionReadOut]="enableQuestionReadOut"></app-text-type-input>
<app-text-type-input [inputIndex]="start + 1" [evidenceId]="selectedEvidenceId" [submissionId]="submissionId"
[schoolId]="schoolId" [data]="question" [imageLocalCopyId]="localImageListKey" *ngSwitchCase="'number'"
[enableQuestionReadOut]="enableQuestionReadOut"></app-text-type-input>
<app-radio-type-input [inputIndex]="start + 1" [evidenceId]="selectedEvidenceId" [submissionId]="submissionId"
[schoolId]="schoolId" [data]="question" [imageLocalCopyId]="localImageListKey" *ngSwitchCase="'radio'"
[enableQuestionReadOut]="enableQuestionReadOut"></app-radio-type-input>
<app-date-type-input [inputIndex]="start + 1" [evidenceId]="selectedEvidenceId" [submissionId]="submissionId"
[schoolId]="schoolId" [data]="question" [imageLocalCopyId]="localImageListKey" *ngSwitchCase="'date'"
[enableQuestionReadOut]="enableQuestionReadOut"></app-date-type-input>
<app-multiple-type-input [inputIndex]="start + 1" [evidenceId]="selectedEvidenceId" [schoolId]="schoolId"
[data]="question" [imageLocalCopyId]="localImageListKey" [submissionId]="submissionId"
*ngSwitchCase="'multiselect'" [enableQuestionReadOut]="enableQuestionReadOut"></app-multiple-type-input>
<app-matrix-type-input [inputIndex]="start + 1" [evidenceId]="selectedEvidenceId" [schoolId]="schoolId"
[data]="question" [imageLocalCopyId]="localImageListKey" [submissionId]="submissionId"
(updateLocalData)="updateLocalData()" *ngSwitchCase="'matrix'" [enableGps]="captureGpsLocationAtQuestionLevel"
[enableQuestionReadOut]="enableQuestionReadOut">
</app-matrix-type-input>
<app-page-questions [inputIndex]="start + 1" [evidenceId]="selectedEvidenceId" [schoolId]="schoolId"
[data]="question" [imageLocalCopyId]="localImageListKey" [submissionId]="submissionId"
(updateLocalData)="updateLocalData()" *ngSwitchCase="'pagequestions'"
[enableQuestionReadOut]="enableQuestionReadOut">
</app-page-questions>
<app-slider-type-input [inputIndex]="start + 1" [evidenceId]="selectedEvidenceId" [submissionId]="submissionId"
[schoolId]="schoolId" [data]="question" [imageLocalCopyId]="localImageListKey" *ngSwitchCase="'slider'"
[enableQuestionReadOut]="enableQuestionReadOut"></app-slider-type-input>
</ng-container>
</ng-container>
</div>
</div>
</ion-content>
<app-footer-buttons *ngIf="questions" [updatedData]="questions[start]" [data]="questions[start]" [isFirst]="!start" [isStartBTNEnabled]="isTargeted" [showStartButton]="extrasState && !isSurvey" [viewOnly]="isViewOnly"
[enableGps]="captureGpsLocationAtQuestionLevel" [isSubmitted]="isCurrentEvidenceSubmitted"
[isLast]="questions?.length === end" [completedQuestionCount]="countCompletedQuestion"
[questionCount]="questions?.length" [showSubmit]="checkForEvidenceCompletion()" (nextAction)="next($event)" (backAction)="back()" (startAction)="startAction()" (allowStart)="allowStart()" (openSheetAction)="openActionSheet()" >
</app-footer-buttons>
./questionnaire.page.scss
.sectionHeader {
padding-top: 10px;
}