File

src/services/segmentation-tag/segmentation-tag.service.ts

Index

Properties

Properties

Static Readonly ALL
Type : string
Default value : 'ALL_'
Static Readonly APP_VER
Type : string
Default value : 'APPVERSION_'
Static Readonly CONTENT_ID
Type : string
Default value : 'CONTENT_'
Static Readonly DEVICE_CONFIG
Type : string
Default value : 'DEVCONFIG_'
Static Readonly USER_ATRIBUTE
Type : string
Default value : 'USERFRAMEWORK_'
Static Readonly USER_LANG
Type : string
Default value : 'USERLANG_'
Static Readonly USER_LOCATION
Type : string
Default value : 'USERLOCATION_'
Static Readonly USER_ROLE
Type : string
Default value : 'USERROLE_'
import {Inject, Injectable} from '@angular/core';
import {PreferenceKey, ProfileConstants} from '@app/app/app.constant';
import {
    AuthService,
    DebuggingService,
    Profile,
    ProfileService,
    SegmentationService,
    SharedPreferences
} from 'sunbird-sdk';
import {AppGlobalService} from '../app-global-service.service';
import {NotificationService} from '@app/services/notification.service';
import {FormAndFrameworkUtilService} from '../formandframeworkutil.service';
import {SplaschreenDeeplinkActionHandlerDelegate} from '../sunbird-splashscreen/splaschreen-deeplink-action-handler-delegate';
import {FormConstants} from '@app/app/form.constants';
import {Events} from '@app/util/events';

export class TagPrefixConstants {
    static readonly DEVICE_CONFIG = 'DEVCONFIG_';
    static readonly USER_ATRIBUTE = 'USERFRAMEWORK_';
    static readonly USER_LOCATION = 'USERLOCATION_';
    static readonly CONTENT_ID = 'CONTENT_';
    static readonly USER_LANG = 'USERLANG_';
    static readonly ALL = 'ALL_';
    static readonly USER_ROLE = 'USERROLE_';
    static readonly APP_VER = 'APPVERSION_';
}

export class CommandFunctions {
    static readonly LOCAL_NOTIFICATION = 'LOCAL_NOTIF';
    static readonly BANNER = 'BANNER_CONFIG';
    static readonly DEBUGGING = 'DEBUGGING_MODE';
}

@Injectable()
export class SegmentationTagService {

    private _localNotificationId: number;
    public exeCommands = [];

    private comdList = [];

    set localNotificationId(id) {
        this._localNotificationId = id;
    }

    get localNotificationId() {
        return this._localNotificationId;
    }

    constructor(
        @Inject('SEGMENTATION_SERVICE') private segmentationService: SegmentationService,
        @Inject('PROFILE_SERVICE') private profileService: ProfileService,
        @Inject('AUTH_SERVICE') private authService: AuthService,
        @Inject('SHARED_PREFERENCES') private preferences: SharedPreferences,
        @Inject('DEBUGGING_SERVICE') private debugginService: DebuggingService,
        private notificationSrc: NotificationService,
        private appGlobalService: AppGlobalService,
        private formAndFrameworkUtilService: FormAndFrameworkUtilService,
        private splaschreenDeeplinkActionHandlerDelegate: SplaschreenDeeplinkActionHandlerDelegate,
        private events: Events
    ) {
    }

    persistSegmentation() {
        this.profileService.getActiveSessionProfile({requiredFields: ProfileConstants.REQUIRED_FIELDS}).toPromise()
            .then((userProfile: Profile) => {
                if (userProfile && userProfile.uid) {
                    console.log(this);

                    this.segmentationService.saveTags(JSON.stringify(window['segmentation'].SBTagService), userProfile.uid)
                        .subscribe(response => {
                            console.log(response);
                            if (response) {
                                window['segmentation'].SBTagService.removeAllTags();
                            }
                        });
                    this.segmentationService.saveCommandList(JSON.stringify(this.exeCommands), userProfile.uid).subscribe(response => {
                        console.log(response);
                        if (response) {
                            this.exeCommands = [] 
                        }
                    });
                }
            });
    }

    getPersistedSegmentaion() {
        this.profileService.getActiveSessionProfile({requiredFields: ProfileConstants.REQUIRED_FIELDS}).toPromise()
            .then((userProfile: Profile) => {
                if (userProfile && userProfile.uid) {
                    this.segmentationService.getTags(userProfile.uid)
                        .subscribe(response => {
                            if (response) {
                                window['segmentation'].SBTagService.restoreTags(response);
                            }
                        });

                    this.segmentationService.getCommand(userProfile.uid)
                        .subscribe(cmdList => {
                            if (cmdList) {
                                this.exeCommands = JSON.parse(cmdList);
                            }
                            this.getSegmentCommand();
                        });
                }
            });
    }

    getSegmentCommand() {
        // FormConfig for Segment
        this.formAndFrameworkUtilService.getFormFields(FormConstants.SEGMENTATION)
        .then(cmdList => {
            if (cmdList && cmdList.length) {
                this.comdList = cmdList.filter(v => !v.targetedClient);
                this.evalCriteria();
            }
        });
    }

    evalCriteria() {
        const validCommand = window['segmentation'].SBActionCriteriaService.evaluateCriteria(
            window['segmentation'].SBTagService.__tagList,
            this.comdList
        );
        this.executeCommand(validCommand);
        this.evalExecutedCommands();
    }

    async executeCommand(validCmdList, revert?) {
        /*
        ** check if command already exist in command list
        ** check if command already executed, then do nothing
        ** if new command then execute command and store it in executedCommandList
        */
        const selectedLanguage = await this.preferences.getString(PreferenceKey.SELECTED_LANGUAGE_CODE).toPromise();
        validCmdList.forEach(cmdCriteria => {
            if (!this.exeCommands.find(ele => ele.commandId === cmdCriteria.commandId)) {
                switch (cmdCriteria.controlFunction) {
                    case CommandFunctions.LOCAL_NOTIFICATION:
                        this.notificationSrc.setupLocalNotification(selectedLanguage, cmdCriteria.controlFunctionPayload);
                        this.exeCommands.push(cmdCriteria);
                        break;
                    case CommandFunctions.BANNER:
                        if (cmdCriteria.controlFunctionPayload && cmdCriteria.controlFunctionPayload.showBanner && !revert) {
                            this.exeCommands.push(cmdCriteria);
                        }
                        break;
                    case CommandFunctions.DEBUGGING:
                        if (cmdCriteria.controlFunctionPayload && cmdCriteria.controlFunctionPayload.traceId && !revert) {
                            this.exeCommands.push(cmdCriteria);
                            this.preferences.putString('debug_started_at', new Date().getTime().toString()).toPromise();
                            this.debugginService.enableDebugging(cmdCriteria.controlFunctionPayload.traceId)
                                .subscribe((isDebugMode) => {
                                    this.events.publish('debug_mode', isDebugMode);
                                });
                        }
                        break;
                    default:
                        break;
                }
            }
        });
        this.handleLocalNotificationTap();
    }

    handleLocalNotificationTap() {
        let payloadData;
        if (this._localNotificationId) {
            payloadData = this.exeCommands.find((ele) => {
                return ele.controlFunctionPayload[0].config[0].id === this._localNotificationId;
            }).controlFunctionPayload[0].config;
            this.splaschreenDeeplinkActionHandlerDelegate.onAction(payloadData[0]);
            this.localNotificationId = null;
        }
    }

    evalExecutedCommands() {
        const validCommand = window['segmentation'].SBActionCriteriaService.evaluateCriteria(
            window['segmentation'].SBTagService.__tagList,
            this.exeCommands
        );
        const invalidcomd = this.exeCommands.filter(exeCmd => !validCommand.some(validCmd => validCmd.commandId === exeCmd.commandId));
        for (let i = (invalidcomd.length - 1); i >= 0; i--) {
            this.exeCommands.splice(this.exeCommands.indexOf(invalidcomd[i]), 1);
        }
        this.executeCommand(invalidcomd, true);
    }

    createSegmentTags(res) {
        const tagObj = {
          board: res.board.map( x => x.replace(/\s/g, '').toLowerCase()),
          grade: res.grade.map( x => x.replace(/\s/g, '').toLowerCase()),
          medium: res.medium.map( x => x.replace(/\s/g, '').toLowerCase())
        };
        window['segmentation'].SBTagService.pushTag(tagObj, TagPrefixConstants.USER_ATRIBUTE, true);
        this.evalCriteria();
      }
    
      refreshSegmentTags(profile) {
        const tagObj = {
            board: profile.board,
            grade: profile.grade,
            syllabus: profile.syllabus,
            medium: profile.medium,
          };
        window['segmentation'].SBTagService.pushTag(tagObj, TagPrefixConstants.USER_ATRIBUTE, true);
        this.evalCriteria();
    }
}

function SEGMENTATION(SEGMENTATION: any) {
    throw new Error('Function not implemented.');
}

results matching ""

    No results matching ""