{"version":3,"file":"js/4984.e380ff614e8cd1d627ec.chunk.js","mappings":"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","sources":["webpack://ti_west/./app/containers/webinar-ce-information/index.tsx","webpack://ti_west/./app/hooks/use-ce-information.ts","webpack://ti_west/./app/utility/sort.ts"],"sourcesContent":["import classNames from 'classnames';\nimport { DateTime } from 'luxon';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\n\nimport { ChevronRightIcon } from '@app/components/icons';\nimport { UserLicenseByCourse } from '@app/containers/course-licenses/course-licenses.type';\nimport { useCeInformation } from '@app/hooks/use-ce-information';\nimport { Auth } from '@app/interfaces/store/auth';\nimport { Store } from '@app/interfaces/store/store';\nimport { mapDispatchToProps } from '@app/store/map-dispatch-to-props';\nimport { getAlphaOrder } from '@app/utility/sort';\n\nconst { useState } = React;\n\ninterface Props extends Store {\n\tapiId?: string;\n\tcourseCode?: string;\n\tauth: Auth;\n}\n\nconst Requirement = ({ data }: { data: UserLicenseByCourse }) => {\n\tconst {\n\t\tcourseCategory,\n\t\tcourseApprovalNumber,\n\t\tending,\n\t\tcourseNotes,\n\t\tunits,\n\t\trulesetId,\n\t\tstate,\n\t\tsplitUnits,\n\t\tsplitRequirement,\n\t\ttype,\n\t\truleset,\n\t\tlicenseSubtype,\n\t} = data;\n\n\treturn (\n\t\t\n\t\t\t
  • {state}
  • \n\t\t\t{licenseSubtype}\n\t\t\t{splitRequirement ? (\n\t\t\t\t
  • \n\t\t\t\t\t{`${units} ${ruleset?.unitType}:`}{' '}\n\t\t\t\t\t{`${splitUnits?.toNumber()} ${type}, ${splitRequirement.splitUnits?.toNumber()} ${\n\t\t\t\t\t\tsplitRequirement.type\n\t\t\t\t\t}`}\n\t\t\t\t
  • \n\t\t\t) : (\n\t\t\t\t
  • {`${units?.toNumber()} ${type} ${ruleset?.unitType}`}
  • \n\t\t\t)}\n\n\t\t\t{courseCategory &&
  • Category: {courseCategory}
  • }\n\n\t\t\t{courseApprovalNumber &&
  • Approval Number: {courseApprovalNumber}
  • }\n\n\t\t\t{ending && (\n\t\t\t\t
  • Expiration Date: {ending.toLocaleString(DateTime.DATE_SHORT)}
  • \n\t\t\t)}\n\n\t\t\t{courseNotes &&
  • Notes: {courseNotes}
  • }\n\t\t\n\t);\n};\n\nconst WebinarCEInformationRaw = (props: Props) => {\n\t// API ID of webinar passed from drupal twig file\n\tconst { apiId, auth, courseCode } = props;\n\n\t// Determines when the accordion is open or closed\n\tconst [open, setOpen] = useState(false);\n\n\tconst toggleStep = () => {\n\t\tsetOpen(!open);\n\t};\n\n\tconst {\n\t\tgroupedLicenses,\n\t\tuserHasLicenses,\n\t\tfilteredGroupedLicenses,\n\t\tfilteredLicenseCount,\n\t\tcontentData,\n\t} = useCeInformation({\n\t\tapiId,\n\t\tauth,\n\t\tcourseCode,\n\t});\n\n\tfunction renderRequirements() {\n\t\tif (!groupedLicenses) return null;\n\t\tconst nonEmptyLicenses =\n\t\t\tfilteredLicenseCount === 0 ? groupedLicenses : filteredGroupedLicenses;\n\n\t\tconst elementsToRender: JSX.Element[] = [];\n\n\t\tObject.entries(nonEmptyLicenses!).forEach(([line, licenseArr]) => {\n\t\t\tif (licenseArr.length > 0) {\n\t\t\t\telementsToRender.push(\n\t\t\t\t\t
    \n\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t{line.replace(/_/g, ' ')}\n\t\t\t\t\t\t

    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{licenseArr\n\t\t\t\t\t\t\t\t.map((license) =>\n\t\t\t\t\t\t\t\t\t!license.state ? { ...license, state: 'DC' } : license,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.sort((licenseA, licenseB) =>\n\t\t\t\t\t\t\t\t\tgetAlphaOrder(licenseA.state!, licenseB.state!),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.map((requirement) => {\n\t\t\t\t\t\t\t\t\tconst requirementProps = {\n\t\t\t\t\t\t\t\t\t\t...requirement,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\treturn requirementProps;\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.map((d) => (\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t
    \n\t\t\t\t\t
    ,\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{userHasLicenses &&\n\t\t\t\t\tfilteredLicenseCount === 0 &&\n\t\t\t\t\tauth.isAuthenticated && (\n\t\t\t\t\t\t

    This CEU product is not available for CE in your state

    \n\t\t\t\t\t)}\n\t\t\t\t{elementsToRender}\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t
    \n\t\t\t\n\t\t\t\t

    \n\t\t\t\t\tCE Credits and Information\n\t\t\t\t

    \n\t\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\t\t{!contentData && !groupedLicenses ? (\n\t\t\t\t\t

    No CE information is available for this item at this time.

    \n\t\t\t\t) : (\n\t\t\t\t\trenderRequirements()\n\t\t\t\t)}\n\t\t\t
    \n\t\t\n\t);\n};\n\nexport const WebinarCEInformation = connect(\n\t({ auth }: Store) => ({ auth }),\n\tmapDispatchToProps,\n)(WebinarCEInformationRaw);\n\nexport default WebinarCEInformation;\n","import groupby from 'lodash.groupby';\nimport { DateTime } from 'luxon';\nimport { useEffect, useState } from 'react';\n\nimport {\n\tCeRulesetState,\n\tLicense as WebApiLicense,\n\tCourse,\n\tWebinar,\n} from '@aicpcu/web-api-spec-model';\n\nimport { UserLicenseByCourse } from '@app/containers/course-licenses/course-licenses.type';\nimport { License as UserLicense } from '@app/interfaces/api-contact/person/license';\nimport { Auth } from '@app/interfaces/store/auth';\nimport { apiService } from '@app/services/api.service';\nimport { webApi } from '@app/services/web-api';\nimport { isCeRulesetState } from '@app/utility/ceu';\n\ntype JoinedLicense = WebApiLicense & UserLicense;\n\ninterface JoinedLicenses {\n\tvalues: JoinedLicense[];\n}\n\ninterface Dictionary {\n\t[index: string]: T;\n}\n\ninterface Param {\n\tapiId: string | undefined;\n\tcourseCode: string | undefined;\n\tauth: Auth;\n}\n\n// Convert spaces to underscores\nconst createKey = (name: string) => name.replace(/\\s/g, '_');\n\nexport function useCeInformation(param: Param) {\n\tconst { apiId, courseCode, auth } = param;\n\tconst { isAuthenticated } = auth;\n\n\tconst [userHasLicenses, setUserHasLicenses] = useState(false);\n\tconst [userLicenses, setUserLicenses] = useState(null);\n\tconst [filteredLicenseCount, setFilteredLicenseCount] = useState(0);\n\tconst [filteredGroupedLicenses, setFilteredGroupedLicenses] =\n\t\tuseState | null>(null);\n\tconst [contentData, setContentData] = useState(null);\n\n\t// The data of the current content type (webinar or course)\n\tconst [groupedLicenses, setGroupedLicenses] = useState | null>(null);\n\n\t// Constants to determine if we are trying to find CE information for\n\t// webinars or for a course content type\n\tconst IS_WEBINAR = (apiId && apiId.length > 0) as boolean;\n\tconst IS_COURSE = !IS_WEBINAR && courseCode;\n\n\tif (!IS_WEBINAR && !IS_COURSE) {\n\t\tthrow new Error(\n\t\t\t'Expected information to be for a webinar or course content type, received invalid/unknown data.',\n\t\t);\n\t}\n\n\tuseEffect(() => {\n\t\tconst fetchCeInformation = async () => {\n\t\t\tlet fetchedContentData: Course | Webinar | null = null;\n\t\t\t/**\n\t\t\t * Fetches contentData and sets its value using setContentData\n\t\t\t */\n\t\t\t// Get all states\n\t\t\tif (IS_COURSE && courseCode) {\n\t\t\t\tconst { courses } = await webApi.getCoursesByCode([courseCode]);\n\t\t\t\tconst matchingCourse = courses.get(courseCode);\n\n\t\t\t\tfetchedContentData = matchingCourse || null;\n\t\t\t}\n\n\t\t\tif (IS_WEBINAR && apiId) {\n\t\t\t\tconst { courses: allCeuCourses } = await webApi.getCourses(['ceu']);\n\n\t\t\t\t/**\n\t\t\t\t * a string[] of all CEU course codes\n\t\t\t\t */\n\t\t\t\tconst allCeuCourseCodes: string[] = [];\n\t\t\t\tallCeuCourses.forEach((course) => allCeuCourseCodes.push(course.code));\n\n\t\t\t\tconst { webinars } = await webApi.getCoursesWithWebinarByCodeOnTimeWindow(\n\t\t\t\t\tallCeuCourseCodes,\n\t\t\t\t);\n\n\t\t\t\twebinars.forEach((webinar) => {\n\t\t\t\t\tif (webinar.id === Number(apiId)) {\n\t\t\t\t\t\tfetchedContentData = webinar;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsetContentData(fetchedContentData);\n\n\t\t\tlet stateRulesetsData = new Array();\n\t\t\tlet ceReqRulesetMapped: UserLicenseByCourse[] = [];\n\t\t\tconst ul: JoinedLicenses = { values: [] };\n\t\t\tlet allRulesets = await webApi.getCeRulesets();\n\t\t\tallRulesets = allRulesets.filter(isCeRulesetState);\n\t\t\tconst rulesetIds = allRulesets.map((ruleset) => ruleset.id);\n\n\t\t\tconst stateData = await webApi.getStates();\n\n\t\t\tlet ceRequirements =\n\t\t\t\tIS_COURSE && courseCode\n\t\t\t\t\t? await webApi.getCeRequirementsByCourse(courseCode)\n\t\t\t\t\t: await webApi.getCeRequirements(true, rulesetIds);\n\n\t\t\tif (IS_WEBINAR) {\n\t\t\t\tceRequirements = ceRequirements.filter(\n\t\t\t\t\t(req) =>\n\t\t\t\t\t\treq.courseCode === (fetchedContentData as Webinar).courseCode,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst rulesetsData = await webApi.getCeRulesets();\n\t\t\tstateRulesetsData = rulesetsData.filter(isCeRulesetState);\n\n\t\t\t/**\n\t\t\t * Using rulesetIds from webApi.getCeRequirementsByCourse(code);\n\t\t\t * To filter\n\t\t\t */\n\t\t\tif (ceRequirements && stateRulesetsData) {\n\t\t\t\tconst stateList = stateData;\n\t\t\t\tconst ceRequirementsList = ceRequirements;\n\n\t\t\t\t/**\n\t\t\t\t * Filter stateRulesetsData based on ruleset ids from ceRequirements\n\t\t\t\t */\n\t\t\t\tconst ceReqRulesetFiltered = stateRulesetsData.filter((ruleSet) =>\n\t\t\t\t\tceRequirementsList.some((ceReq) => ceReq.rulesetId === ruleSet.id),\n\t\t\t\t);\n\n\t\t\t\t/**\n\t\t\t\t * Merge properties from both ceReqRulesetFiltered\n\t\t\t\t * and ceRequirementsList so that we can use fields such as:\n\t\t\t\t * courseApprovalNumber, ending (expiration), totalUnits,\n\t\t\t\t * type, state, local ...etc\n\t\t\t\t */\n\t\t\t\tconst rulesetsRequirementMerge: UserLicenseByCourse[] =\n\t\t\t\t\tceReqRulesetFiltered.map((v) => ({\n\t\t\t\t\t\t...v,\n\t\t\t\t\t\t...ceRequirementsList.find((sp) => sp.rulesetId === v.id),\n\t\t\t\t\t}));\n\n\t\t\t\t/**\n\t\t\t\t * Map and reduce to only the fields needed for displaying plus state\n\t\t\t\t */\n\t\t\t\tceReqRulesetMapped = rulesetsRequirementMerge.map((val) => ({\n\t\t\t\t\t...val,\n\t\t\t\t\tstate: stateList.find((state) => state.name === val.locale)\n\t\t\t\t\t\t?.abbreviation,\n\t\t\t\t\truleset: stateRulesetsData.find((rs: any) => rs.id === val.id),\n\t\t\t\t\tsplitRequirement: ceRequirements!.find(\n\t\t\t\t\t\t(cer: any) =>\n\t\t\t\t\t\t\tval.rulesetId === cer.rulesetId && val.type !== cer.type,\n\t\t\t\t\t),\n\t\t\t\t}));\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * If user is authenticated, get licenses for this user\n\t\t\t */\n\t\t\tif (isAuthenticated) {\n\t\t\t\tconst { data } = await apiService.contact.person.getLicenses();\n\t\t\t\tconst allLicenses = await webApi.getLicenses();\n\t\t\t\tul.values = data.values\n\t\t\t\t\t.filter((license: UserLicense) => {\n\t\t\t\t\t\tconst { invalid } = license;\n\t\t\t\t\t\tconst expired = license.expiration\n\t\t\t\t\t\t\t? DateTime.fromISO(license.expiration) < DateTime.now()\n\t\t\t\t\t\t\t: false;\n\t\t\t\t\t\t// return only valid and non expired courses\n\t\t\t\t\t\treturn !invalid && !expired;\n\t\t\t\t\t})\n\t\t\t\t\t.map((license: UserLicense) => {\n\t\t\t\t\t\tconst foundLicense = allLicenses.find(\n\t\t\t\t\t\t\t(l) => l.id === license.id.licenseId,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn { ...foundLicense, ...license };\n\t\t\t\t\t});\n\n\t\t\t\tsetUserLicenses(ul);\n\n\t\t\t\tif (ul.values.length > 0) {\n\t\t\t\t\tsetUserHasLicenses(true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst gl = groupby(ceReqRulesetMapped, (item) => {\n\t\t\t\tconst keyPropertiesToGroupBy = `${item.licenseType}_${item.line}${\n\t\t\t\t\titem.specialty ? `_${item.specialty}` : ''\n\t\t\t\t}`;\n\t\t\t\treturn createKey(keyPropertiesToGroupBy);\n\t\t\t});\n\n\t\t\tsetGroupedLicenses(gl as Dictionary);\n\t\t};\n\n\t\tif (!groupedLicenses && !contentData) {\n\t\t\tfetchCeInformation();\n\t\t}\n\t}, [\n\t\tIS_COURSE,\n\t\tcourseCode,\n\t\tisAuthenticated,\n\t\tIS_WEBINAR,\n\t\tapiId,\n\t\tuserLicenses,\n\t\tgroupedLicenses,\n\t\tcontentData,\n\t]);\n\n\t// create filtered groupedLicenses\n\tuseEffect(() => {\n\t\tconst results: Dictionary = {};\n\t\tlet resultCount = 0;\n\t\tconst getFilteredGroupLicenses = async () => {\n\t\t\tObject.entries(groupedLicenses!).forEach(([key, value]) => {\n\t\t\t\tconst filteredValues = value.filter((license) =>\n\t\t\t\t\tuserLicenses!.values.some(\n\t\t\t\t\t\t(ul) =>\n\t\t\t\t\t\t\tul.line === license.line &&\n\t\t\t\t\t\t\tul.licenseType === license.licenseType &&\n\t\t\t\t\t\t\tul.line === license.line &&\n\t\t\t\t\t\t\tul.id.state === license.state &&\n\t\t\t\t\t\t\tul.specialty === license.specialty,\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\t\tconst licenseCount = filteredValues.length;\n\t\t\t\tif (licenseCount > 0) {\n\t\t\t\t\tresults[key] = filteredValues;\n\t\t\t\t\tresultCount += licenseCount;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tsetFilteredGroupedLicenses(results);\n\t\t\tsetFilteredLicenseCount(resultCount);\n\t\t};\n\n\t\tif (groupedLicenses && userLicenses) {\n\t\t\tgetFilteredGroupLicenses();\n\t\t}\n\t}, [groupedLicenses, userLicenses]);\n\n\treturn {\n\t\tfilteredGroupedLicenses,\n\t\tfilteredLicenseCount,\n\t\tgroupedLicenses,\n\t\tuserHasLicenses,\n\t\tuserLicenses,\n\t\tcontentData,\n\t};\n}\n","export const isRecommended = (str: string) =>\n\tstr.toLowerCase().includes('recommended');\n\nexport const getAlphaOrder = (prev: string, next: string) =>\n\tprev.localeCompare(next);\n\nexport const byLabel = (a: { label: string }, b: { label: string }) =>\n\ta.label.localeCompare(b.label);\n"],"names":["classnames_1","__importDefault","require","luxon_1","React","__importStar","react_redux_1","icons_1","use_ce_information_1","map_dispatch_to_props_1","sort_1","useState","Requirement","_a","data","courseCategory","courseApprovalNumber","ending","courseNotes","units","rulesetId","state","splitUnits","splitRequirement","type","ruleset","licenseSubtype","createElement","style","paddingRight","key","concat","className","unitType","toNumber","_b","toLocaleString","DateTime","DATE_SHORT","exports","connect","auth","mapDispatchToProps","props","apiId","courseCode","open","setOpen","useCeInformation","groupedLicenses","userHasLicenses","filteredGroupedLicenses","filteredLicenseCount","contentData","onClick","ChevronRightIcon","closed","display","overflowY","maxHeight","nonEmptyLicenses","elementsToRender","Object","entries","forEach","line","licenseArr","length","push","replace","map","license","__assign","sort","licenseA","licenseB","getAlphaOrder","requirement","d","Fragment","isAuthenticated","renderRequirements","WebinarCEInformation","lodash_groupby_1","react_1","api_service_1","web_api_1","ceu_1","param","_this","setUserHasLicenses","userLicenses","setUserLicenses","_c","setFilteredLicenseCount","_d","setFilteredGroupedLicenses","_e","setContentData","_f","setGroupedLicenses","IS_WEBINAR","IS_COURSE","Error","useEffect","__awaiter","fetchedContentData","webApi","getCoursesByCode","courses","sent","matchingCourse","get","getCourses","allCeuCourses","allCeuCourseCodes_1","course","code","getCoursesWithWebinarByCodeOnTimeWindow","webinars","webinar","id","Number","stateRulesetsData","Array","ceReqRulesetMapped","ul","values","getCeRulesets","allRulesets","filter","isCeRulesetState","rulesetIds","getStates","stateData","getCeRequirementsByCourse","getCeRequirements","ceRequirements","req","rulesetsData","stateList_1","ceRequirementsList_1","ceReqRulesetFiltered","ruleSet","some","ceReq","rulesetsRequirementMerge","v","find","sp","val","name","locale","abbreviation","rs","cer","apiService","contact","person","getLicenses","allLicenses_1","invalid","expired","expiration","fromISO","now","foundLicense","l","licenseId","gl","item","licenseType","specialty","results","resultCount","filteredValues","licenseCount","str","toLowerCase","includes","prev","next","localeCompare","a","b","label"],"sourceRoot":""}