{"version":3,"sources":["webpack:///./src/pages/stream.vue?927b","webpack:///./src/pages/stream.vue","webpack:///./src/domain/composables/use-stream.js","webpack:///src/pages/stream.vue","webpack:///./src/pages/stream.vue?1ff6","webpack:///./src/pages/stream.vue?194f"],"names":["render","_vm","this","_c","_self","hallGroup","staticClass","halls","length","attrs","streamId","on","loadStream","_l","item","key","id","_v","_s","name","_e","programFile","baseUrl","path","$tr","showErrorAlert","class","isLoading","directives","rawName","value","expression","staticStyle","content","domProps","staticRenderFns","useStream","async","getHallGroupWithHalls","api","getExistingApiInstance","data","getOne","include","filter","active","autoActiveTimeStatus","TIME_STATUSES","IN_PROGRESS","hall","sort","a","b","stream","currentStreamId","computed","hallGroupId","watch","handler","immediate","methods","console","streamSDK","document","streamSDKScript","resolve","material_id","email","firstname","lastname","middlename","credentials","rootId","addLoadListenerToIframe","iframeElement","query","component"],"mappings":"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","file":"js/stream.2556f486.js","sourcesContent":["export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/style-resources-loader/lib/index.js??ref--9-oneOf-1-4!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stream.vue?vue&type=style&index=0&id=61a1761a&prod&lang=scss&\"","var render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.hallGroup)?_c('div',{staticClass:\"stream-page\"},[_c('div',{staticClass:\"stream-page__content s-card\"},[_c('div',{staticClass:\"stream-page__nav\"},[(_vm.halls.length > 1)?_c('Select',{staticClass:\"stream-page__select-stream\",attrs:{\"value\":_vm.streamId},on:{\"on-change\":_vm.loadStream}},_vm._l((_vm.halls),function(item){return _c('Option',{key:item.id,attrs:{\"value\":item.streamId}},[_vm._v(\" \"+_vm._s(item.name)+\" \")])}),1):_vm._e(),(_vm.hallGroup.programFile)?_c('a',{staticClass:\"stream-page__link-programs\",attrs:{\"target\":\"_blank\",\"href\":`${_vm.hallGroup.programFile.baseUrl}${_vm.hallGroup.programFile.path}`}},[_c('feather',{staticClass:\"stream-page__icon-link\",attrs:{\"stroke\":\"var(--s-primary-color)\",\"type\":\"download-cloud\",\"size\":\"24\"}}),_c('span',[_vm._v(_vm._s(_vm.$tr('stream.program')))])],1):_vm._e()],1),_c('div',{staticClass:\"stream-page__stream\"},[_c('transition',{attrs:{\"name\":\"slide-fade\"}},[(_vm.showErrorAlert)?_c('div',[_c('Alert',{attrs:{\"type\":\"error\",\"closable\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.$tr('stream.errorMessage'))+\" \")])],1):_vm._e()]),_c('div',{staticClass:\"stream-page__stream\",class:{ 'stream-page__stream--uploaded-height': !_vm.isLoading }},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.isLoading),expression:\"!isLoading\"}],staticStyle:{\"height\":\"100%\"},attrs:{\"id\":\"s-stream-root\"}}),_c('Spin',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.isLoading),expression:\"isLoading\"}],attrs:{\"size\":\"large\",\"fix\":\"\"}})],1)],1),(!_vm.isLoading && _vm.hallGroup.content)?_c('div',{staticClass:\"stream-page__stream-info\"},[_c('div',{staticClass:\"stream-page__article-editor arx-content\",domProps:{\"innerHTML\":_vm._s(_vm.hallGroup.content)}})]):_vm._e()])]):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { getExistingApiInstance } from '@/api'\nimport { TIME_STATUSES } from '@/utils'\n\nexport default function useStream() {\n  async function getHallGroupWithHalls(streamId) {\n    const api = getExistingApiInstance()\n    const { data: hallGroup } = await api.hallGroup.getOne(streamId, {\n      include: 'halls,programFile',\n      filter: {\n        active: true,\n        autoActiveTimeStatus: TIME_STATUSES.IN_PROGRESS,\n      },\n    })\n\n    const halls = hallGroup.halls\n      ? hallGroup.halls\n          .filter(\n            (hall) =>\n              hall.active &&\n              hall.autoActiveTimeStatus === TIME_STATUSES.IN_PROGRESS,\n          )\n          .sort((a, b) => b.sort - a.sort)\n      : []\n    delete hallGroup.halls\n\n    return {\n      hallGroup,\n      halls,\n    }\n  }\n\n  return {\n    getHallGroupWithHalls,\n  }\n}\n","<template>\n  <div v-if=\"hallGroup\" class=\"stream-page\">\n    <div class=\"stream-page__content s-card\">\n      <div class=\"stream-page__nav\">\n        <Select\n          v-if=\"halls.length > 1\"\n          :value=\"streamId\"\n          class=\"stream-page__select-stream\"\n          @on-change=\"loadStream\"\n        >\n          <Option v-for=\"item in halls\" :key=\"item.id\" :value=\"item.streamId\">\n            {{ item.name }}\n          </Option>\n        </Select>\n        <a\n          v-if=\"hallGroup.programFile\"\n          target=\"_blank\"\n          class=\"stream-page__link-programs\"\n          :href=\"`${hallGroup.programFile.baseUrl}${hallGroup.programFile.path}`\"\n        >\n          <feather\n            class=\"stream-page__icon-link\"\n            stroke=\"var(--s-primary-color)\"\n            type=\"download-cloud\"\n            size=\"24\"\n          />\n          <span>{{ $tr('stream.program') }}</span>\n        </a>\n      </div>\n      <div class=\"stream-page__stream\">\n        <transition name=\"slide-fade\">\n          <div v-if=\"showErrorAlert\">\n            <Alert type=\"error\" closable>\n              {{ $tr('stream.errorMessage') }}\n            </Alert>\n          </div>\n        </transition>\n        <div\n          :class=\"{ 'stream-page__stream--uploaded-height': !isLoading }\"\n          class=\"stream-page__stream\"\n        >\n          <div\n            v-show=\"!isLoading\"\n            id=\"s-stream-root\"\n            style=\"height: 100%\"\n          ></div>\n          <Spin v-show=\"isLoading\" size=\"large\" fix></Spin>\n        </div>\n      </div>\n      <div\n        v-if=\"!isLoading && hallGroup.content\"\n        class=\"stream-page__stream-info\"\n      >\n        <div\n          class=\"stream-page__article-editor arx-content\"\n          v-html=\"hallGroup.content\"\n        ></div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport useStream from '@/domain/composables/use-stream'\nimport LangService from '@/domain/services/lang-service'\n\nexport default {\n  data() {\n    return {\n      stream: null,\n      isLoading: true,\n      showErrorAlert: false,\n      hallGroup: null,\n      halls: [],\n      currentStreamId: this.$route.query.currentStreamId,\n    }\n  },\n  computed: {\n    hallGroupId() {\n      return this.$route.params.hallGroupId\n    },\n    streamId() {\n      if (this.$route.query.streamId) {\n        return this.$route.query.streamId\n      }\n\n      const [current] = this.halls\n      return current.streamId\n    },\n  },\n  watch: {\n    '$route.params.hallGroupId': {\n      handler() {\n        this.init()\n      },\n      immediate: true,\n    },\n  },\n  methods: {\n    async init() {\n      try {\n        await this.createScriptSDK()\n\n        const { halls, hallGroup } = await useStream().getHallGroupWithHalls(\n          this.hallGroupId,\n        )\n        this.halls = halls\n        this.hallGroup = hallGroup\n\n        await this.loadStream(this.streamId)\n      } catch (e) {\n        await LangService.toLocalePath({ path: '/404' })\n        console.error(e)\n      }\n    },\n    async createScriptSDK() {\n      if (window.StreamSDK) {\n        return\n      } // если скрипт уже загружен, не запрашивать его заново\n\n      const streamSDK = document.createElement('script')\n      streamSDK.setAttribute(\n        'src',\n        'https://med.studio/js/stream-sdk.bundle.js',\n      )\n      streamSDK.setAttribute('id', 'stream-sdk')\n      document.head.appendChild(streamSDK)\n      const streamSDKScript = document.querySelector('#stream-sdk')\n\n      return new Promise((resolve) => {\n        streamSDKScript.addEventListener('load', () => {\n          resolve()\n        })\n      })\n    },\n\n    async initSDK(streamId) {\n      if (!streamId) {\n        console.error('Не найдено id трансляции')\n        return\n      }\n      const userData = this.$store.state.auth.userData\n\n      const credentials = {\n        material_id: streamId,\n        email: userData.email,\n        firstname: userData.firstName,\n        lastname: userData.lastName,\n        middlename: userData.middleName,\n      }\n\n      const sdk = new window.StreamSDK({\n        credentials,\n        rootId: 's-stream-root',\n      })\n\n      await sdk.init()\n      this.addLoadListenerToIframe()\n    },\n    addLoadListenerToIframe() {\n      const iframeElement = document.querySelector('#s-stream-root>iframe')\n      if (!iframeElement) {\n        this.isLoading = false\n        this.showErrorAlert = true\n        console.warn('Что-то пошло не так при загрузке встроенной трансляции')\n        // this.$sentry.captureMessage('iframeElement is null ' + JSON.stringify(this.stream));\n        return\n      }\n      iframeElement.addEventListener('load', () => {\n        this.isLoading = false\n        this.showErrorAlert = false\n      })\n    },\n    async loadStream(streamId) {\n      if (this.$route.query.streamId !== streamId) {\n        await this.$router.replace({\n          ...this.$route,\n          query: { ...this.$route.query, streamId },\n        })\n      }\n      await this.initSDK(streamId)\n    },\n  },\n}\n</script>\n<style lang=\"scss\">\n@import '~@/styles/pages/stream-page.scss';\n@import '~@meromed/article-editor/article-editor.min.css';\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stream.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./stream.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./stream.vue?vue&type=template&id=61a1761a&\"\nimport script from \"./stream.vue?vue&type=script&lang=js&\"\nexport * from \"./stream.vue?vue&type=script&lang=js&\"\nimport style0 from \"./stream.vue?vue&type=style&index=0&id=61a1761a&prod&lang=scss&\"\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  null,\n  null\n  \n)\n\nexport default component.exports"],"sourceRoot":""}