{"version":3,"sources":["modeler/pathway-search.js"],"names":["exports","sortCreditsHighToLow","sortCreditsLowToHigh","creditDifference","a","b","maxPotentialCredits","minPotentialCredits","PathwaySorting","ModelerPathwaySearch","options","afterPickProgram","getProgramNameUrl","selectedPrograms","ko","observableArray","coupleDelimiter","targetProgramCoupleDelimiter","selectedProgramAsCouple","prog","institutionProgramId","titleDisplay","targetProgramList","computed","map","join","alreadyPickedProgramForBriefDisplay","observable","resolveProgramNames","programId","findIndex","it","program","i","findProgramIndex","splice","id","push","resolveProgramName","programs","forEach","isResolved","url","App","common","getJson","then","response","updated","Object","assign","data","replaceMatchingProgram","fail","DisplayPathway","pathwayData","makePathwayDetailUrl","detailUrl","pathwayId","displayTemplate","creditRange","min","max","hasDistinctMinAndMax","toFixed","DisplayComparable","comparable","makeDetailUrl","comparableId","ModelerProgramPathwayList","commonTerms","_options","fetchUrl","getUrlForProgramPathwayList","pathways","comparables","sortType","subscribe","prev","cur","isExpanded","expand","sortTypeDisplay","pureComputed","changeSortTypeTo","val","pathwayLoad","Types","ObservableRemoteResource","sortedPathways","sortFn","sort","allTransferable","Array","prototype","concat","sortedEntities","length","inProgress","start","setPathways","p","makeComparableDetailUrl","okThen","err","complete","load","collapse","ensureLoaded","ModelerPathwayResultList","programPathwayLists","progs","findProgram","find","Modeler"],"mappings":"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","file":"pathway-search.js","sourcesContent":[" ((exports) => {\r\n\tconst sortCreditsHighToLow = \"credits-high-to-low\";\r\n\tconst sortCreditsLowToHigh = \"credits-low-to-high\";\r\n\r\n\tconst creditDifference = (a, b) =>\r\n\t\t(a.maxPotentialCredits - b.maxPotentialCredits)\r\n\t\t|| (a.minPotentialCredits - b.minPotentialCredits);\r\n\r\n\tconst PathwaySorting = {\r\n\t\t[sortCreditsHighToLow]: (a, b) => creditDifference(b, a),\r\n\r\n\t\t[sortCreditsLowToHigh]: (a, b) => creditDifference(a, b)\r\n\t};\r\n\r\n\t/**\r\n\t * @type PreSelectedProgram\r\n\t * @field {int} institutionProgramId\r\n\t * @field {string} titleDisplay\r\n\t */\r\n\r\n\t/**\r\n\t * @type DetailedSelectedProgram extends ProgramName\r\n\t * @field {int} institutionProgramId\r\n\t * @field {bool} isResolved\r\n\t */\r\n\r\n\t/**\r\n\t * @callback GetProgramNameUrl\r\n\t * @param {int} institutionProgramId\r\n\t * @returns {string} url\r\n\t */\r\n\r\n\t/**\r\n\t * @callback ProgramCallback\r\n\t * @param {TargetInstitutionProgramInfo} program\r\n\t */\r\n\r\n\tclass ModelerPathwaySearch {\r\n\t\t/**\r\n\t\t * @param {Nullback} options.afterPickProgram\r\n\t\t * @param {GetProgramNameUrl} options.getProgramNameUrl\r\n\t\t * @param {string} options.targetProgramCoupleDelimiter\r\n\t\t * @param {ProgramCallback} options.afterPickProgramFailure\r\n\t\t */\r\n\t\tconstructor(options) {\r\n\t\t\tthis.afterPickProgram = options.afterPickProgram || (() => { /* noop */ });\r\n\r\n\t\t\tthis.getProgramNameUrl = options.getProgramNameUrl;\r\n\r\n\t\t\tthis.selectedPrograms = ko.observableArray([]);\r\n\t\t\t\t\t\r\n\t\t\tconst coupleDelimiter = options.targetProgramCoupleDelimiter;\r\n\r\n\t\t\tconst selectedProgramAsCouple = (prog) => `${prog.institutionProgramId}${coupleDelimiter}${prog.titleDisplay}`;\r\n\r\n\t\t\tthis.targetProgramList = ko.computed(() =>\r\n\t\t\t\tthis.selectedPrograms().map(selectedProgramAsCouple).join(coupleDelimiter));\r\n\r\n\t\t\tthis.alreadyPickedProgramForBriefDisplay = ko.observable(null);\r\n\t\t}\r\n\r\n\t\t/**\r\n\t\t * @param {PreSelectedProgram[]} [selectedPrograms=[]]\r\n\t\t */\r\n\t\tinit(selectedPrograms) {\r\n\t\t\tthis.selectedPrograms(selectedPrograms || []);\r\n\r\n\t\t\tthis.resolveProgramNames();\r\n\t\t}\r\n\r\n\t\tfindProgramIndex(programId) {\r\n\t\t\treturn this.selectedPrograms().findIndex((it) =>\r\n\t\t\t\tit.institutionProgramId === programId);\r\n\t\t}\r\n\r\n\t\treplaceMatchingProgram(program) {\r\n\t\t\tconst i = this.findProgramIndex(program.institutionProgramId);\r\n\r\n\t\t\tif (i === -1) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.selectedPrograms.splice(i, 1, program);\r\n\t\t}\r\n\r\n\t\tpickProgram(program) {\r\n\t\t\tthis.afterPickProgram();\r\n\r\n\t\t\tconst id = program.institutionProgramId;\r\n\r\n\t\t\tif (this.findProgramIndex(id) !== -1) {\r\n\t\t\t\tthis.alreadyPickedProgramForBriefDisplay(program);\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.alreadyPickedProgramForBriefDisplay(null);\r\n\t\t\tthis.selectedPrograms.push(program);\r\n\t\t\tthis.resolveProgramName(program);\r\n\t\t}\r\n\r\n\t\tremoveProgram(programId) {\r\n\t\t\tconst i = this.findProgramIndex(programId);\r\n\r\n\t\t\tif (i === -1) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.selectedPrograms.splice(i, 1);\r\n\t\t}\r\n\r\n\t\tresolveProgramNames() {\r\n\t\t\tconst programs = this.selectedPrograms();\r\n\r\n\t\t\tprograms.forEach((prog) => {\r\n\t\t\t\tif (!prog.isResolved) {\r\n\t\t\t\t\tthis.resolveProgramName(prog);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tresolveProgramName(program) {\r\n\t\t\tconst url = this.getProgramNameUrl(program.institutionProgramId);\r\n\r\n\t\t\tApp.common.getJson(url)\r\n\t\t\t\t.then((response) => {\r\n\t\t\t\t\tconst updated = Object.assign({\r\n\t\t\t\t\t\tisResolved: true\r\n\t\t\t\t\t}, program, response.data);\r\n\r\n\t\t\t\t\tthis.replaceMatchingProgram(updated);\r\n\t\t\t\t})\r\n\t\t\t\t.fail(() => {\r\n\t\t\t\t\tconst updated = Object.assign({\r\n\t\t\t\t\t\tisResolved: true\r\n\t\t\t\t\t}, program);\r\n\r\n\t\t\t\t\tthis.replaceMatchingProgram(updated);\r\n\t\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\tclass DisplayPathway {\r\n\t\t/**\r\n\t\t * @param {ProgramPathwayListItem} pathwayData\r\n\t\t * @param {PathwayProgramModel} program\r\n\t\t * @param {PathwayIdCallback} makePathwayDetailUrl\r\n\t\t */\r\n\t\tconstructor(pathwayData, program, makePathwayDetailUrl) {\r\n\t\t\tObject.assign(this, pathwayData);\r\n\r\n\t\t\tthis.program = program;\r\n\t\t\tthis.detailUrl = makePathwayDetailUrl(this.pathwayId);\r\n\t\t\tthis.displayTemplate = \"pathway-template\";\r\n\t\t\tthis.creditRange = (() => {\r\n\t\t\t\tconst min = pathwayData.minPotentialCredits || 0;\r\n\t\t\t\tconst max = pathwayData.maxPotentialCredits || 0;\r\n\t\t\t\tconst hasDistinctMinAndMax = (min !== max);\r\n\r\n\t\t\t\tif (hasDistinctMinAndMax) {\r\n\t\t\t\t\treturn `${min.toFixed(2)} - ${max.toFixed(2)}`;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn (max || min || 0).toFixed(2);\r\n\t\t\t})();\r\n\t\t}\r\n\t}\r\n\r\n\tclass DisplayComparable {\r\n\t\tconstructor(comparable, program, makeDetailUrl) {\r\n\t\t\tObject.assign(this, comparable);\r\n\r\n\t\t\tthis.program = program;\r\n\t\t\tthis.detailUrl = makeDetailUrl(this.comparableId);\r\n\t\t\tthis.displayTemplate = \"comparable-template\";\r\n\r\n\t\t\tthis.creditRange = (() => {\r\n\t\t\t\tconst min = comparable.minPotentialCredits || 0;\r\n\t\t\t\tconst max = comparable.maxPotentialCredits || 0;\r\n\t\t\t\tconst hasDistinctMinAndMax = (min !== max);\r\n\r\n\t\t\t\tif (hasDistinctMinAndMax) {\r\n\t\t\t\t\treturn `${min.toFixed(2)} - ${max.toFixed(2)}`;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn (max || min || 0).toFixed(2);\r\n\t\t\t})();\r\n\t\t}\r\n\t}\r\n\r\n\tclass ModelerProgramPathwayList {\r\n\t\t/**\r\n\t\t * @callback GetUrlForProgram\r\n\t\t * @param {int} programId\r\n\t\t * @returns {string}\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * @callback ProgramIdCallback\r\n\t\t * @param {int} programId\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * @callback PathwayIdCallback\r\n\t\t * @param {int} pathwayId\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * @callback ComparableIdCallback\r\n\t\t * @param {int} comparableId\r\n\t\t */\r\n\r\n\t\t/**\r\n\t\t * @param {PathwayProgramModel} program\r\n\t\t * @param {GetUrlForProgram} options.getUrlForProgramPathwayList\r\n\t\t * @param {PathwayIdCallback} options.makePathwayDetailUrl\r\n\t\t * @param {string} options.commonTerms[credits-low-to-high]\r\n\t\t * @param {string} options.commonTerms[credits-high-to-low]\r\n\t\t */\r\n\t\tconstructor(program, options) {\r\n\t\t\tconst commonTerms = options.commonTerms;\r\n\r\n\t\t\tthis._options = options;\r\n\t\t\tthis.program = program;\r\n\t\t\tthis.fetchUrl = options.getUrlForProgramPathwayList(program.programId);\r\n\r\n\t\t\tthis.pathways = ko.observableArray([]);\r\n\t\t\tthis.comparables = ko.observableArray([]);\r\n\r\n\t\t\tthis.sortType = ko.observable(sortCreditsHighToLow);\r\n\t\t\tthis.sortType.subscribe((prev, cur) => {\r\n\t\t\t\tif (prev !== cur && !this.isExpanded()) {\r\n\t\t\t\t\tthis.expand();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tthis.sortTypeDisplay = ko.pureComputed(() => commonTerms[this.sortType()]);\r\n\r\n\t\t\tthis.changeSortTypeTo = (val) => this.sortType(val);\r\n\r\n\t\t\tthis.pathwayLoad = new App.Types.ObservableRemoteResource();\r\n\r\n\t\t\tthis.isExpanded = ko.observable(false);\r\n\t\t\t\r\n\t\t\tthis.programId = ko.computed(() => this.program.programId);\r\n\r\n\t\t\tthis.sortedPathways = ko.computed(() => {\r\n\t\t\t\tif (!this.pathways()) {\r\n\t\t\t\t\treturn [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst sortFn = PathwaySorting[this.sortType()]\r\n\t\t\t\t\t|| PathwaySorting[sortCreditsHighToLow];\r\n\r\n\t\t\t\treturn this.pathways().sort(sortFn);\r\n\t\t\t});\r\n\r\n\t\t\tthis.allTransferable = ko.pureComputed(() => Array.prototype.concat([], this.pathways() || [], this.comparables() || []));\r\n\r\n\t\t\tthis.sortedEntities = ko.pureComputed(() => {\r\n\t\t\t\tif (!this.allTransferable().length) {\r\n\t\t\t\t\treturn [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst sortFn = PathwaySorting[this.sortType()]\r\n\t\t\t\t\t|| PathwaySorting[sortCreditsHighToLow];\r\n\r\n\t\t\t\treturn this.allTransferable().sort(sortFn);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tload() {\r\n\t\t\tif (this.pathwayLoad.inProgress()) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.pathwayLoad.start();\r\n\t\t\r\n\t\t\tconst setPathways = () => {\r\n\t\t\t\tconst pathways = this.pathwayLoad.data().pathways || [];\r\n\t\t\t\tconst comparables = this.pathwayLoad.data().comparables || [];\r\n\r\n\t\t\t\tthis.pathways(pathways.map(p => new DisplayPathway(p, this.program, this._options.makePathwayDetailUrl)));\r\n\t\t\t\tthis.comparables(comparables.map(p => new DisplayComparable(p, this.program, this._options.makeComparableDetailUrl)));\r\n\t\t\t};\t\t\t\t\r\n\r\n\t\t\treturn App.common.getJson(this.fetchUrl)\r\n\t\t\t\t.then(this.pathwayLoad.okThen(setPathways))\r\n\t\t\t\t.fail(this.pathwayLoad.err);\r\n\t\t}\r\n\r\n\t\tensureLoaded() {\r\n\t\t\tif (this.pathwayLoad.inProgress()\r\n\t\t\t\t|| this.pathwayLoad.complete()) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.load();\r\n\t\t}\r\n\r\n\t\ttoggle() {\r\n\t\t\tif (this.isExpanded()) {\r\n\t\t\t\tthis.collapse();\r\n\t\t\t} else {\r\n\t\t\t\tthis.expand();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\texpand() {\r\n\t\t\tthis.ensureLoaded();\r\n\t\t\tthis.isExpanded(true);\r\n\t\t}\r\n\r\n\t\tcollapse() {\r\n\t\t\tthis.isExpanded(false);\r\n\t\t}\r\n\t}\r\n\r\n\tclass ModelerPathwayResultList {\r\n\t\t/**\r\n\t\t * @param {GetUrlForProgram} options.getUrlForProgramPathwayList\r\n\t\t * @param {PathwayIdCallback} options.makePathwayDetailUrl\r\n\t\t * @param {ComparableIdCallback} options.makeComparableDetailUrl\r\n\t\t * @param {string} options.commonTerms[credits-low-to-high]\r\n\t\t * @param {string} options.commonTerms[credits-high-to-low]\r\n\t\t */\r\n\t\tconstructor(options) {\r\n\t\t\tthis._options = options;\r\n\r\n\t\t\tthis.programPathwayLists = ko.observableArray([]);\r\n\t\t}\r\n\r\n\t\tinit(programs) {\r\n\t\t\tconst progs = programs.map(prog =>\r\n\t\t\t\tnew ModelerProgramPathwayList(prog, this._options));\r\n\r\n\t\t\tthis.programPathwayLists(progs);\r\n\r\n\t\t\tif (programs.length) {\r\n\t\t\t\tthis.findProgram(programs[0].programId).expand();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfindProgram(programId) {\r\n\t\t\tif (!this.programPathwayLists().length) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\treturn this.programPathwayLists()\r\n\t\t\t\t.find(p => p.programId() === programId);\r\n\t\t}\r\n\t}\r\n\r\n\texports.Modeler = exports.Modeler || {};\r\n\texports.Modeler.ModelerPathwaySearch = ModelerPathwaySearch;\r\n\texports.Modeler.ModelerPathwayResultList = ModelerPathwayResultList;\r\n\texports.Modeler.ModelerProgramPathwayList = ModelerProgramPathwayList;\r\n})(App);"]}