{"version":3,"sources":["webpack:///./src/views/Search.vue?c8bd","webpack:///./src/views/Search.vue","webpack:///./src/views/Search.vue?0758","webpack:///./src/views/Search.vue?8b6f"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","directives","name","rawName","staticClass","_l","contentItem","key","contentItems","length","contentItemId","_v","_e","staticRenderFns","extend","components","ContentItemSummary","metaInfo","link","rel","href","$route","path","watch","page","contentType","window","onscroll","checkScroll","isLoading","loadItems","data","searchTerm","loadingNextPage","stopLoading","itemsPerPage","mounted","itemsLoaded","beforeDestroy","methods","contentsClient","query","offset","typeKeyword","isRecent","includes","split","trim","typeEntered","pop","toLowerCase","Article","DrugBrandGroup","Trial","Decision","analyticsStore","startTime","Date","getContentItems","newContentItems","submitEventTimer","loadSearchItems","search","fetchCount","concat","loadedNewContent","currentPosition","Math","max","pageYOffset","document","documentElement","scrollTop","body","innerHeight","documentHeight","offsetHeight","beforeRouteLeave","to","from","next","component","VCol","VContainer","VProgressLinear","VRow","VSkeletonLoader"],"mappings":"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","file":"js/chunk-2d0bd977.ac05b105.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{attrs:{\"fluid\":\"\"}},[(_vm.isLoading)?_c('v-row',{directives:[{name:\"masonry-tile\",rawName:\"v-masonry-tile\"}],staticClass:\"ma-9\",attrs:{\"transition-duration\":\"0\"}},_vm._l((10),function(contentItem){return _c('v-col',{key:contentItem,staticClass:\"pa-5\",attrs:{\"cols\":\"12\",\"sm\":\"6\",\"md\":\"4\",\"lg\":\"3\"}},[_c('v-skeleton-loader',{attrs:{\"type\":\"image\"}})],1)}),1):_c('div',[(_vm.contentItems.length !== 0)?_c('v-row',{directives:[{name:\"masonry\",rawName:\"v-masonry\"}],staticClass:\"ma-9\",attrs:{\"transition-duration\":\"0\"}},_vm._l((_vm.contentItems),function(contentItem){return _c('v-col',{key:contentItem.contentItemId,staticClass:\"pa-5\",attrs:{\"cols\":\"12\",\"sm\":\"6\",\"md\":\"4\",\"lg\":\"3\"}},[_c('content-item-summary',{attrs:{\"height\":\"100%\",\"contentItemSummary\":contentItem}})],1)}),1):_c('v-row',{staticClass:\"pt-9\"},[_c('v-col',{staticClass:\"text-center\"},[_vm._v(\"No results were found\")])],1),(_vm.loadingNextPage)?_c('v-row',{attrs:{\"justify\":\"center\"}},[_c('v-col',{attrs:{\"cols\":\"6\"}},[_c('v-progress-linear',{attrs:{\"indeterminate\":\"\"}})],1)],1):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { ContentItemSummaryResult, ContentItemType, ContentsClient, DrugContentItemSummaryResult } from \"@/api/DoceoApi\";\r\nimport ContentItemSummary from \"@/components/contentItems/ContentItemSummary.vue\";\r\nimport Vue from \"vue\";\r\nimport { EventTimeCategory, EventTimeName, useAnalyticsStore } from \"@/store/analyticsStore\";\r\nimport DrugContentItemGroupSummaryResult from \"@/models/drugContentItemGroupSummaryResult\";\r\n\r\nexport default Vue.extend({\r\n components: { ContentItemSummary },\r\n metaInfo() {\r\n return {\r\n link: [\r\n {\r\n rel: \"canonical\",\r\n href: `${process.env.VUE_APP_BASE_URL}${this.$route.path}`,\r\n },\r\n ],\r\n };\r\n },\r\n\r\n watch: {\r\n $route: async function() {\r\n this.page = 0;\r\n this.contentItems = [];\r\n this.contentType = null;\r\n window.onscroll = this.checkScroll;\r\n this.isLoading = true;\r\n await this.loadItems();\r\n this.isLoading = false;\r\n },\r\n },\r\n\r\n data() {\r\n return {\r\n contentItems: [] as ContentItemSummaryResult[],\r\n searchTerm: \"\",\r\n contentType: null as ContentItemType | null,\r\n isLoading: false,\r\n page: 0,\r\n loadingNextPage: false,\r\n stopLoading: false,\r\n itemsPerPage: 30,\r\n };\r\n },\r\n\r\n async mounted() {\r\n this.isLoading = true;\r\n let itemsLoaded = await this.loadItems();\r\n this.isLoading = false;\r\n\r\n // load until there are no more items or the screen is filled or the user navigated away\r\n while (itemsLoaded == this.itemsPerPage && this.page < 50 && !this.stopLoading) {\r\n itemsLoaded = await this.checkScroll();\r\n }\r\n\r\n // set up scroll handler\r\n window.onscroll = this.checkScroll;\r\n },\r\n\r\n beforeDestroy() {\r\n // remove scroll handler\r\n window.onscroll = async () => {};\r\n },\r\n\r\n methods: {\r\n /**\r\n * Loads search results\r\n * Returns how many results were loaded\r\n */\r\n async loadItems(): Promise {\r\n const contentsClient = new ContentsClient();\r\n this.searchTerm = this.$route.query.searchTerm as string;\r\n let offset = this.page * this.itemsPerPage;\r\n let typeKeyword = \"type:\";\r\n let isRecent = null as boolean | null; // This is only used for trials to determine if we should get recent/upcoming trials otherwise null\r\n\r\n if (this.$route.query.contentType) {\r\n this.contentType = this.$route.query.contentType as ContentItemType;\r\n } else {\r\n this.contentType = null;\r\n }\r\n\r\n if (this.searchTerm.includes(typeKeyword)) {\r\n const split = this.searchTerm.split(typeKeyword);\r\n this.searchTerm = split[0].trim();\r\n let typeEntered = (split.pop() ?? \"\").trim();\r\n\r\n switch (typeEntered?.toLowerCase()) {\r\n case \"journal\":\r\n case \"article\":\r\n this.contentType = ContentItemType.Article;\r\n break;\r\n case \"drug\":\r\n case \"drugGroup\":\r\n this.contentType = ContentItemType.DrugBrandGroup;\r\n break;\r\n case \"trial\":\r\n case \"clinicaltrial\":\r\n this.contentType = ContentItemType.Trial;\r\n break;\r\n case \"recenttrial\":\r\n case \"recentclinicaltrial\":\r\n this.contentType = ContentItemType.Trial;\r\n isRecent = true;\r\n break;\r\n case \"upcomingtrial\":\r\n case \"upcomingclinicaltrial\":\r\n this.contentType = ContentItemType.Trial;\r\n isRecent = false;\r\n break;\r\n case \"decision\":\r\n this.contentType = ContentItemType.Decision;\r\n }\r\n }\r\n\r\n const analyticsStore = useAnalyticsStore();\r\n let startTime = new Date();\r\n let newContentItems = await contentsClient.getContentItems(this.searchTerm, this.itemsPerPage, offset, this.contentType, isRecent);\r\n analyticsStore.submitEventTimer(startTime, new Date(), EventTimeName.loadSearchItems, EventTimeCategory.search);\r\n let fetchCount = newContentItems.length;\r\n\r\n this.contentItems = this.contentItems.concat(newContentItems);\r\n return fetchCount;\r\n },\r\n\r\n /**\r\n * Checks the scroll position and loads more items if close to bottom of the page.\r\n * Returns how many results were loaded (can be used to load content in a loop until the whole page is filled)\r\n */\r\n async checkScroll(): Promise {\r\n let loadedNewContent = 0;\r\n\r\n if (!this.loadingNextPage) {\r\n let currentPosition = Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop) + window.innerHeight;\r\n let documentHeight = document.documentElement.offsetHeight;\r\n let offset = 1000; // How many pixels before the end of the page, we want to fetch the next set of summaries\r\n\r\n if (currentPosition >= documentHeight - offset) {\r\n this.loadingNextPage = true;\r\n this.page++;\r\n loadedNewContent = await this.loadItems();\r\n this.loadingNextPage = false;\r\n\r\n if (loadedNewContent < this.itemsPerPage) {\r\n window.onscroll = null;\r\n }\r\n }\r\n }\r\n\r\n return loadedNewContent;\r\n },\r\n },\r\n\r\n beforeRouteLeave(to, from, next) {\r\n this.stopLoading = true;\r\n next();\r\n },\r\n});\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Search.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--14-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--14-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Search.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./Search.vue?vue&type=template&id=1ef33832&scoped=true&\"\nimport script from \"./Search.vue?vue&type=script&lang=ts&\"\nexport * from \"./Search.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1ef33832\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VProgressLinear } from 'vuetify/lib/components/VProgressLinear';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSkeletonLoader } from 'vuetify/lib/components/VSkeletonLoader';\ninstallComponents(component, {VCol,VContainer,VProgressLinear,VRow,VSkeletonLoader})\n"],"sourceRoot":""}