@causalfoundry/js-sdk
Version:
Causal Foundry WEB SDK (JS/TS)
83 lines (70 loc) • 3.02 kB
text/typescript
import ELearningPropertiesTI from './typings-ti'
import {
ELearningTypes,
ModuleProperties,
QuestionProperties,
ExamProperties, ExamAction,
} from "./typings"
import { injectEvent } from "../../core/injector"
import { ContentBlock } from '../Navigation/typings'
import CfExceptionHandler from "../../core/CfExceptionHandler";
const moduleName = ContentBlock.ELearning
const logModuleEvent = (properties: ModuleProperties, sendNow = false) => {
if(properties.id == ''){
new CfExceptionHandler().throwAndLogError(ELearningTypes.Module, 'empty module id')
}else if(properties.action == undefined){
new CfExceptionHandler().throwAndLogError(ELearningTypes.Module, 'invalid module action')
}else if(properties.progress == undefined){
new CfExceptionHandler().throwAndLogError(ELearningTypes.Module, 'invalid module progress')
}
injectEvent(
properties,
[ELearningPropertiesTI],
ELearningTypes.Module,
moduleName,
'',
sendNow)
}
const logExamEvent = (properties: ExamProperties, sendNow = false) => {
if(properties.id == ''){
new CfExceptionHandler().throwAndLogError(ELearningTypes.Exam, 'empty exam id')
}else if(properties.action == undefined){
new CfExceptionHandler().throwAndLogError(ELearningTypes.Exam, 'invalid exam action')
}else if(properties.action == ExamAction.Submit && properties.duration < 0){
new CfExceptionHandler().throwAndLogError(ELearningTypes.Exam, 'exam duration value required for submit action')
}else if(properties.action == ExamAction.Result && properties.score == undefined){
new CfExceptionHandler().throwAndLogError(ELearningTypes.Exam, 'exam score required for result action')
}else if(properties.action == ExamAction.Result && properties.is_passed == undefined){
new CfExceptionHandler().throwAndLogError(ELearningTypes.Exam, 'exam is_passed required for result action')
}
injectEvent(
properties,
[ELearningPropertiesTI],
ELearningTypes.Exam,
moduleName,
'',
sendNow)
}
const logQuestionEvent = (properties: QuestionProperties, sendNow = false) => {
if(properties.id == ''){
new CfExceptionHandler().throwAndLogError(ELearningTypes.Question, 'empty question id')
}else if(properties.action == undefined){
new CfExceptionHandler().throwAndLogError(ELearningTypes.Question, 'invalid question action')
}else if(properties.answer_id == ''){
new CfExceptionHandler().throwAndLogError(ELearningTypes.Question, 'empty question answer id')
}else if(properties.exam_id == ''){
new CfExceptionHandler().throwAndLogError(ELearningTypes.Question, 'empty question exam id')
}
injectEvent(
properties,
[ELearningPropertiesTI],
ELearningTypes.Question,
moduleName,
'',
sendNow)
}
export default {
logModuleEvent,
logQuestionEvent,
logExamEvent
}