{"version":3,"file":"./assets/dist/js/search.js","mappings":"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","sources":["webpack:///./wwwroot/app/Enums/SearchType.ts","webpack:///./wwwroot/app/Enums/Page.ts","webpack:///./wwwroot/app/Services/storageService.ts","webpack:///./wwwroot/app/Enums/FilterType.ts","webpack:///./wwwroot/app/Interfaces/IStorageItem.ts","webpack:///./wwwroot/app/searchMain.ts","webpack:///./wwwroot/app/constants.ts","webpack:///./wwwroot/app/Helpers/htmlHelper.ts"],"sourcesContent":["export enum SearchType {\r\n Qualifications = \"Qualifications\",\r\n Frameworks = \"Frameworks\",\r\n Units = \"Units\",\r\n Standards = \"Standards\",\r\n TLevels = \"TLevels\"\r\n}","export enum Page{\r\n Home = \"Home\",\r\n Results = \"Results\",\r\n LearningAimDetails = \"LearningAimDetails\",\r\n Pathway = \"Pathway\",\r\n Category = \"Category\",\r\n CommonComponent = \"CommonComponent\",\r\n Standard = \"Standard\",\r\n RelatedLearningAims = \"RelatedLearningAims\"\r\n}","import { IStorageItem, emptyIStorageItem } from '../Interfaces/IStorageItem';\r\nimport { IFilterItem } from '../Interfaces/IFilterItem';\r\n\r\nexport default class StorageService {\r\n\r\n private readonly storage: Storage;\r\n\r\n constructor(storageType: Storage)\r\n {\r\n this.storage = storageType;\r\n }\r\n\r\n retrieve(key: string): IStorageItem\r\n {\r\n const item = this.storage.getItem(key);\r\n\r\n if (item && item !== 'undefined') {\r\n return JSON.parse(item) as IStorageItem;\r\n }\r\n\r\n return emptyIStorageItem();\r\n }\r\n\r\n store(key: string, value: IStorageItem): void {\r\n this.storage.setItem(key, JSON.stringify(value));\r\n }\r\n\r\n updateFilters(key: string, filters: Array) : void {\r\n const item = this.retrieve(key);\r\n item.filters = filters;\r\n this.store(key, item);\r\n }\r\n\r\n getFilters(key: string): Array {\r\n const item = this.retrieve(key);\r\n return item.filters;\r\n }\r\n\r\n clearFilters(key: string) : void {\r\n const item = this.retrieve(key) as IStorageItem;\r\n item.filters = [];\r\n this.store(key, item);\r\n }\r\n\r\n clear(key: string) : void {\r\n this.storage.removeItem(key);\r\n }\r\n\r\n clearAll() : void {\r\n this.storage.clear();\r\n }\r\n}","export enum FilterType {\r\n AwardingBodies = \"AwardingBodies\",\r\n Levels = \"Levels\",\r\n FundingStreams = \"FundingStreams\",\r\n FrameworkTypes = \"FrameworkTypes\",\r\n IssuingAuthorities = \"IssuingAuthorities\",\r\n Sectors = \"Sectors\",\r\n SectorSubjectAreaTier1s = \"SectorSubjectAreaTier1s\",\r\n SectorSubjectAreaTier2s = \"SectorSubjectAreaTier2s\",\r\n EFAFundingConditions = \"EFAFundingConditions\",\r\n Categories = \"Categories\"\r\n}","import { IFilterItem } from '../Interfaces/IFilterItem';\r\nimport { SearchType } from '../Enums/SearchType';\r\nimport { Page } from '../Enums/Page';\r\n\r\nexport interface IStorageItem {\r\n searchTerm: string;\r\n academicYear: string;\r\n learnAimRef: string;\r\n learningAimTitle: string;\r\n standardName: string;\r\n standardCode: string;\r\n currentAcademicYear: string;\r\n searchType: SearchType;\r\n frameworkCode: string;\r\n programType: string;\r\n pathwayCode: string;\r\n filters: IFilterItem[];\r\n page: Page;\r\n hasFilterMismatch: boolean\r\n}\r\n\r\nexport function emptyIStorageItem(): IStorageItem {\r\n return {\r\n searchTerm: '', academicYear:'', learnAimRef: '', learningAimTitle: '', standardName: '', standardCode: '', page: Page.Home, hasFilterMismatch: false,\r\n currentAcademicYear: '', searchType: SearchType.Qualifications, frameworkCode: '', programType: '', pathwayCode: '', filters: [],\r\n };\r\n}","import StorageService from \"./Services/storageService\";\r\nimport { SearchType } from \"./Enums/SearchType\";\r\nimport { constants } from './constants';\r\nimport { FilterType } from './Enums/FilterType';\r\nimport { IFilterItem } from './Interfaces/IFilterItem';\r\nimport { setElementVisible, setElementDisplay } from './Helpers/htmlHelper';\r\n\r\nclass SearchMain {\r\n\r\n constructor() {\r\n const storageService = new StorageService(sessionStorage);\r\n storageService.clearAll();\r\n window.GOVUKFrontend.initAll();\r\n\r\n this.registerEvents();\r\n }\r\n\r\n private registerEvents(): void {\r\n document.getElementById(\"searchType\")?.addEventListener(\"change\", () => { this.learningTypeChanged()});\r\n document.getElementById(\"search\")?.addEventListener(\"click\", () => { this.updateFilters() });\r\n }\r\n\r\n public getSearchType(): string {\r\n const searchTypeElement = document.getElementById('searchType') as HTMLSelectElement;\r\n\r\n if (searchTypeElement) {\r\n return searchTypeElement.options[searchTypeElement.selectedIndex].text;\r\n }\r\n return '';\r\n }\r\n\r\n public updateFilters(): void {\r\n if (this.getSearchType() == SearchType.Qualifications) {\r\n const storageService = new StorageService(sessionStorage);\r\n const storageItem = storageService.retrieve('');\r\n const filterItems: NodeListOf = document.querySelectorAll(\"[name='EFAFundingConditions']\"); \r\n\r\n filterItems.forEach(filterItem => {\r\n if (filterItem.checked) {\r\n const filter: IFilterItem = {\r\n key: filterItem.value,\r\n type: FilterType.EFAFundingConditions,\r\n value: filterItem.dataset.description\r\n };\r\n storageItem.filters.push(filter);\r\n }\r\n });\r\n\r\n if (storageItem.filters.length > 0) {\r\n const hasFilters = document.getElementById('hasClientSideFilters') as HTMLSelectElement;\r\n hasFilters.value = 'true';\r\n }\r\n\r\n storageService.store(constants.storageKey, storageItem);\r\n }\r\n }\r\n\r\n public learningTypeChanged(): void {\r\n const fundingConditions = document.getElementById('EFAFundingConditions');\r\n const academicYear = document.getElementById('academicYear');\r\n const selectedSearchType = this.getSearchType();\r\n\r\n setElementVisible(academicYear, (selectedSearchType === SearchType.Qualifications || selectedSearchType === SearchType.Units));\r\n setElementDisplay(fundingConditions, selectedSearchType === SearchType.Qualifications)\r\n }\r\n}\r\n\r\nexport const searchMain = new SearchMain();","export const constants = {\r\n storageKey: 'sessionData',\r\n debounceTime: '600ms',\r\n filterDebounceTime: '75ms',\r\n pageSize: 50\r\n};","export function setElementVisible($el: HTMLElement, isVisible: boolean): void {\r\n\tisVisible ? $el.classList.remove(\"visibility-hidden\") : $el.classList.add(\"visibility-hidden\");\r\n}\r\n\r\nexport function setElementDisplay($el: HTMLElement, isDisplayed: boolean): void {\r\n\tisDisplayed ? $el.classList.remove(\"display-none\") : $el.classList.add(\"display-none\");\r\n}\r\n\r\nexport function findAscendingTag($el: HTMLElement, tag: string) : HTMLElement {\r\n\twhile ($el.parentNode) {\r\n\t\t$el = $el.parentNode as HTMLElement;\r\n\t\tif ($el?.tagName?.toUpperCase() === tag.toUpperCase()) {\r\n\t\t\treturn $el;\r\n }\r\n\t}\r\n\tthrow new Error(\"Could not find parent tag\");\r\n}\r\n"],"names":["SearchType","Page","FilterType","storageType","this","storage","retrieve","key","item","getItem","JSON","parse","searchTerm","academicYear","learnAimRef","learningAimTitle","standardName","standardCode","page","Home","hasFilterMismatch","currentAcademicYear","searchType","Qualifications","frameworkCode","programType","pathwayCode","filters","store","value","setItem","stringify","updateFilters","getFilters","clearFilters","clear","removeItem","clearAll","sessionStorage","window","GOVUKFrontend","initAll","registerEvents","document","getElementById","addEventListener","learningTypeChanged","getSearchType","searchTypeElement","options","selectedIndex","text","storageService","querySelectorAll","forEach","filterItem","checked","filter","type","EFAFundingConditions","dataset","description","push","length","$el","fundingConditions","selectedSearchType","Units","classList","remove","add","isDisplayed","setElementDisplay"],"sourceRoot":""}