{"version":3,"sources":["webpack:///./src/components/base/app-event-info.vue?9f3f","webpack:///./src/components/base/app-event-info.vue","webpack:///src/components/base/app-event-info.vue","webpack:///./src/components/base/app-event-info.vue?29f7","webpack:///./src/components/base/app-event-info.vue?3fb4","webpack:///./src/domain/services/event-date-service.js"],"names":["render","_vm","this","_c","_self","staticClass","logoUrl","withExternalLink","externalLink","staticStyle","attrs","ref","_e","messageAlert","typeAlert","_v","_s","event","displayName","technicalName","staticRenderFns","props","type","validator","default","showDate","computed","status","methods","eventStatus","dateService","message","months","eventRegistrationStatus","words","component","MIN_DATE","DateTime","fromSeconds","MAX_DATE","EventDateService","constructor","_event","getData","getMinDate","registrationStartedAt","getMaxDate","registrationEndedAt","EventService","isEventOccasion","eventOccasion","startedAt","endedAt","dateStr","date","fromISO","invalid","locale","start","end","Error","entity","divider","formatDateWithDivider","year","startYear","month","startMonth","day","startDay","endYear","endMonth","endDay","monthToStr","state","formatDate","before","during","after","onGoing","TIME_STATUSES","ENDED","WILL_START"],"mappings":"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","file":"js/change-password~check-email~email-confirmed~events~login~recovery~registration-success~reset-success.59419ca8.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!./app-event-info.vue?vue&type=style&index=0&id=55dc4af1&prod&lang=scss&\"","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"event-info-main\"},[(_vm.logoUrl)?_c('div',{staticClass:\"logo-wrapper\"},[(_vm.withExternalLink && _vm.externalLink)?_c('a',{staticClass:\"logo-wrapper__logo\",staticStyle:{\"display\":\"block\"},attrs:{\"href\":_vm.externalLink,\"target\":\"_blank\"}},[_c('img',{ref:\"img\",attrs:{\"src\":_vm.logoUrl,\"alt\":\"logo\"}})]):_c('div',{staticClass:\"logo-wrapper__logo\"},[_c('img',{attrs:{\"src\":_vm.logoUrl,\"alt\":\"logo\"}})])]):_vm._e(),(_vm.messageAlert)?_c('div',{staticClass:\"event-info-main__status\"},[_c('Alert',{attrs:{\"type\":_vm.typeAlert}},[_vm._v(\" \"+_vm._s(_vm.messageAlert)+\" \")])],1):_vm._e(),(_vm.event.displayName || _vm.event.technicalName)?_c('div',{staticClass:\"event-info-main__caption s-subtitle-secondary\"},[_vm._v(\" \"+_vm._s(_vm.event.displayName ? _vm.event.displayName : _vm.event.technicalName)+\" \")]):_vm._e()])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n  <div class=\"event-info-main\">\n    <div v-if=\"logoUrl\" class=\"logo-wrapper\">\n      <a\n        v-if=\"withExternalLink && externalLink\"\n        :href=\"externalLink\"\n        target=\"_blank\"\n        class=\"logo-wrapper__logo\"\n        style=\"display: block\"\n      >\n        <img ref=\"img\" :src=\"logoUrl\" alt=\"logo\" />\n      </a>\n      <div v-else class=\"logo-wrapper__logo\">\n        <img :src=\"logoUrl\" alt=\"logo\" />\n      </div>\n    </div>\n    <div v-if=\"messageAlert\" class=\"event-info-main__status\">\n      <Alert :type=\"typeAlert\">\n        {{ messageAlert }}\n      </Alert>\n    </div>\n    <div\n      v-if=\"event.displayName || event.technicalName\"\n      class=\"event-info-main__caption s-subtitle-secondary\"\n    >\n      {{ event.displayName ? event.displayName : event.technicalName }}\n    </div>\n  </div>\n</template>\n\n<script>\nimport EventDateService from '@/domain/services/event-date-service'\nimport EventService from '@/domain/services/event-service'\n\nexport default {\n  props: {\n    type: {\n      validator(value) {\n        return ['event', 'registration'].includes(value)\n      },\n      default: 'registration',\n    },\n    showDate: { type: Boolean, default: true },\n    event: { type: Object, default: () => {} },\n    withExternalLink: { type: Boolean, default: false },\n  },\n\n  computed: {\n    logoUrl() {\n      return EventService.extractLogoUrl(this.event)\n    },\n\n    status() {\n      if (this.type === 'registration') {\n        return this.eventRegistrationStatus()\n      }\n      return this.eventStatus()\n    },\n\n    messageAlert() {\n      const dateStr = this.status.message\n      const locationStr = this.event.location || ''\n      if (dateStr && locationStr) {\n        return `${dateStr}, ${locationStr}`\n      } else if (dateStr && !locationStr) {\n        return dateStr\n      } else if (!dateStr && locationStr) {\n        return locationStr\n      }\n      return ''\n    },\n\n    typeAlert() {\n      if (this.status.state === 'after') {\n        return 'warning'\n      }\n\n      if (this.type === 'event') {\n        return 'info'\n      }\n\n      return 'success'\n    },\n\n    externalLink() {\n      return this.event.formLink?.externalUrl || ''\n    },\n  },\n  methods: {\n    eventStatus() {\n      const months = this.$tr('months')\n      // todo: записать код красивее (придумать как)\n      const dateService = new EventDateService(this.event)\n      if (\n        dateService.startEventTime === EventDateService.MIN_DATE &&\n        dateService.endEventTime === EventDateService.MAX_DATE\n      ) {\n        return {\n          message: '',\n        }\n      }\n\n      if (dateService.startEventTime === EventDateService.MIN_DATE) {\n        return {\n          message: EventDateService.getMessageWithOneDate(\n            { months },\n            dateService.endEventTime,\n          ),\n        }\n      }\n      if (dateService.endEventTime === EventDateService.MAX_DATE) {\n        return {\n          message: EventDateService.getMessageWithOneDate(\n            { months },\n            dateService.startEventTime,\n          ),\n        }\n      }\n\n      const status = EventDateService.getAlertMessageWithDivider(\n        { months },\n        dateService.startEventTime,\n        dateService.endEventTime,\n      )\n      return status\n    },\n\n    eventRegistrationStatus() {\n      const dateService = new EventDateService(this.event)\n\n      const words = { ...this.$tr('auth.statusWordsRegistration') }\n      words.months = this.$tr('months')\n      words.onGoing = this.$tr('alertTime.onGoing')\n\n      return EventDateService.getEntityStatusAlert(\n        words,\n        dateService.startRegistrationTime,\n        dateService.endRegistrationTime,\n        this.event.registrationTimeStatus,\n      )\n    },\n  },\n}\n</script>\n<style lang=\"scss\">\n.event-info-main {\n  &__caption {\n    padding: 0 24px;\n    font-size: 14px;\n    font-weight: 500;\n    line-height: 1.375;\n    color: var(--s-black-color-60);\n\n    @include media-breakpoint-up(lg) {\n      font-size: 16px;\n    }\n  }\n}\n.logo-wrapper {\n  padding: 0px 24px;\n\n  &__logo {\n    padding-bottom: 24px;\n    margin: 0 auto;\n    display: flex;\n    width: 100%;\n    max-width: 196px;\n  }\n\n  &__logo img {\n    width: 100%;\n    height: 100%;\n  }\n}\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!./app-event-info.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!./app-event-info.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./app-event-info.vue?vue&type=template&id=55dc4af1&\"\nimport script from \"./app-event-info.vue?vue&type=script&lang=js&\"\nexport * from \"./app-event-info.vue?vue&type=script&lang=js&\"\nimport style0 from \"./app-event-info.vue?vue&type=style&index=0&id=55dc4af1&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","import EventService from '@/domain/services/event-service'\nimport { DateTime } from '@/plugins/luxon'\nimport { monthToStr, formatDate, TIME_STATUSES } from '@/utils'\n\nconst MIN_DATE = DateTime.fromSeconds(0)\nconst MAX_DATE = DateTime.fromSeconds(2177280000) // 2038 12 30\n\nexport default class EventDateService {\n  static MIN_DATE = MIN_DATE\n  static MAX_DATE = MAX_DATE\n  constructor(event) {\n    this._event = event\n  }\n\n  getData() {\n    return this._event\n  }\n\n  /**\n   * @returns {DateTime}\n   */\n  get startRegistrationTime() {\n    return EventDateService.getMinDate(this._event.registrationStartedAt)\n  }\n\n  /**\n   * @returns {DateTime}\n   */\n  get endRegistrationTime() {\n    return EventDateService.getMaxDate(this._event.registrationEndedAt)\n  }\n\n  /**\n   * @returns {DateTime}\n   */\n  get startEventTime() {\n    if (!EventService.isEventOccasion(this._event)) {\n      return EventDateService.MIN_DATE\n    }\n    return EventDateService.getMinDate(this._event.eventOccasion.startedAt)\n  }\n\n  /**\n   * @returns {DateTime}\n   */\n  get endEventTime() {\n    if (!EventService.isEventOccasion(this._event)) {\n      return EventDateService.MAX_DATE\n    }\n    return EventDateService.getMaxDate(this._event.eventOccasion.endedAt)\n  }\n\n  static getMinDate(dateStr) {\n    const date = DateTime.fromISO(dateStr)\n    if (date.invalid) {\n      return EventDateService.MIN_DATE\n    }\n    return date\n  }\n\n  static getMaxDate(dateStr) {\n    const date = DateTime.fromISO(dateStr)\n    if (date.invalid) {\n      return EventDateService.MAX_DATE\n    }\n    return date\n  }\n\n  /**\n   * функция возвращает две даты через символ, отправленный в поле \"locale.divider\" - по умолчанию черточка:\n   * @param locale\n   * @param start\n   * @param end\n   */\n  static getAlertMessageWithDivider(locale, start, end) {\n    if ((!start) instanceof DateTime || (!end) instanceof DateTime) {\n      throw new Error(\n        'Неверный тип даты, передаваемый в функцию getEntityStatus!',\n      )\n    }\n\n    const { entity = '', months = [], divider = '-' } = locale\n\n    const formatDateWithDivider = (start, end) => {\n      const { year: startYear, month: startMonth, day: startDay } = start\n      const { year: endYear, month: endMonth, day: endDay } = end\n\n      // отбрасываем одинаковые года и месяцы\n      if (\n        endDay === startDay &&\n        startMonth === endMonth &&\n        startYear === endYear\n      ) {\n        return `${startDay} ${monthToStr(startMonth, months)} ${startYear}`\n      } else if (startMonth === +endMonth && startYear === endYear) {\n        return `${startDay} ${divider} ${endDay} ${monthToStr(\n          startMonth,\n          months,\n        )} ${startYear}`\n      } else if (startYear === endYear) {\n        return `${startDay} ${monthToStr(\n          startMonth,\n          months,\n        )} ${divider} ${endDay} ${monthToStr(endMonth, months)} ${startYear}`\n      }\n      return `${startDay} ${monthToStr(\n        startMonth,\n        months,\n      )} ${startYear} ${divider} ${endDay} ${monthToStr(\n        endMonth,\n        months,\n      )} ${endYear}`\n    }\n\n    return {\n      message: `${entity} ${formatDateWithDivider(start, end)}`,\n      state: 'info',\n    }\n  }\n\n  static getMessageWithOneDate(locale, date) {\n    if (!locale.entity) {\n      return formatDate(date, locale.months)\n    }\n    return `${locale.entity} ${formatDate(date, locale.months)}`\n  }\n\n  static getEntityStatusAlert = (locale, start, end, status) => {\n    if ((!start) instanceof DateTime || (!end) instanceof DateTime) {\n      throw new Error(\n        'Неверный тип даты, передаваемый в функцию getEntityStatus!',\n      )\n    }\n\n    const {\n      entity = '',\n      before = '',\n      during = '',\n      after = '',\n      months = [''],\n      onGoing = '',\n    } = locale\n\n    if (status === TIME_STATUSES.ENDED) {\n      return {\n        message: `${entity} ${after} ${formatDate(end, months)}`,\n        state: 'after',\n      }\n    }\n\n    if (status === TIME_STATUSES.WILL_START) {\n      return {\n        message: `${entity} ${before} ${formatDate(start, months)}`,\n        state: 'before',\n      }\n    }\n\n    if (end === EventDateService.MAX_DATE) {\n      // \"Регистрация идет\" (без даты)\n      return {\n        message: `${entity} ${onGoing}`,\n        state: 'during',\n      }\n    }\n\n    return {\n      message: `${entity} ${during} ${formatDate(end, months)}`,\n      state: 'during',\n    }\n  }\n}\n"],"sourceRoot":""}