Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/js/calendar/sharing/public/dist/ |
Upload File : |
this.BX=this.BX||{};this.BX.Calendar=this.BX.Calendar||{};(function(t,e,_,n,a,i){"use strict";const s={props:{owner:Object,calendarSettings:Object,userAccessibility:Object,timezoneList:Object},name:"DateSelector",data(){return{accessibility:this.userAccessibility,eventDurability:36e5,stepSize:36e5,nowTime:new Date,timezoneOffsetUtc:(new Date).getTimezoneOffset(),currentTimezoneOffsetUtc:(new Date).getTimezoneOffset(),selectedTimezoneId:Intl.DateTimeFormat().resolvedOptions().timeZone,currentMonthIndex:0,currentDayNumber:1,isMobileBrowser:false,displayedMonth:[0],isMonthAnimating:false,isSlotListAnimating:false,addFormCreated:false,months:[],monthsSlots:[],monthsSlotsMap:{},loc:{weekdays:n.Util.getWeekdaysLoc()},config:{weekHolidays:[6,0],weekStart:1}}},created(){this.setConfig(this.calendarSettings);this.isMobileBrowser=n.Util.isMobileBrowser();setInterval(this.incrementTime,15e3);const t=this.calculateDateTimeSlots(this.nowTime.getFullYear(),this.nowTime.getMonth());this.monthsSlots.push(t);const e=this.getDateTimeSlotsMap(t);const _=this.nowTime.getMonth()+1+"."+this.nowTime.getFullYear();this.monthsSlotsMap[_]=e;const a=this.createMonth(this.nowTime.getFullYear(),this.nowTime.getMonth());this.months.push(a);this.$Bitrix.eventEmitter.subscribe("calendar:sharing:onEventAdd",(async()=>{await this.updateEventSlotsList();this.openEventSlotList(this.getDayByNumber(this.currentDayNumber))}));this.$Bitrix.eventEmitter.subscribe("calendar:sharing:onShowCalendar",(()=>{this.setPageVisualSettings();setTimeout((()=>{this.resizeSelect()}),100)}));this.$Bitrix.eventEmitter.subscribe("calendar:sharing:changeApplicationType",(t=>{if(t.getData().type==="addForm"){this.addFormCreated=true}if(t.getData().type==="viewForm"){this.addFormCreated=false}}));this.setPageVisualSettings()},mounted(){this.resizeSelect();this.selectFirstAvailableDay();this.setMonthHeight();this.DOM={monthsContainer:document.querySelector(".calendar-sharing__months-container")}},updated(){if(this.displayedMonth.length===1){return}if(this.displayedMonth[0]===-1){this.DOM.monthsContainer.scrollLeft=this.DOM.monthsContainer.scrollWidth-this.DOM.monthsContainer.offsetWidth;this.animateToPreviousMonth()}if(this.displayedMonth[1]===1){this.animateToNextMonth()}},methods:{resizeSelect(){const t=document.querySelector(".calendar-sharing__event-slot-timezone_select_box");const e=document.querySelector(".calendar-sharing__event-slot-timezone_select");const _=document.querySelector(".calendar-sharing__event-slot-timezone_select_helper-element");const n=_.querySelector("option");const a=document.querySelector(".calendar-sharing__event-slot-timezone_select option:checked");if(e){if(a!==null){n.innerHTML=a.innerText;let e=_.offsetWidth;t.style.setProperty("--dynamic-size",`${e}px`)}e.addEventListener("change",i)}function i(t){n.innerHTML=t.target.querySelector("option:checked").innerText;s(_.offsetWidth)}function s(e){t.style.setProperty("--dynamic-size",`${e}px`)}this.setMonthHeight()},setConfig(t){if(t.weekHolidays){this.config.weekHolidays=t.weekHolidays.map((t=>n.Util.getIndByWeekDay(t)))}if(t.yearHolidays){this.config.yearHolidays=t.yearHolidays}if(t.weekStart){this.config.weekStart=n.Util.getIndByWeekDay(t.weekStart);this.loc.weekdays.push(...this.loc.weekdays.splice(0,this.config.weekStart))}const e=n.Util.getTimeZoneOffset(this.selectedTimezoneId)/60;if(t.workTimeStart){const _=parseFloat(t.workTimeStart)-e;this.config.workTimeStartHours=_-_%1;this.config.workTimeStartMinutes=_%1*60}if(t.workTimeEnd){const _=parseFloat(t.workTimeEnd)-e;this.config.workTimeEndHours=_-_%1;this.config.workTimeEndMinutes=_%1*60}},getTimezonePrefix(t){const e=t*1e3-this.timezoneOffsetUtc*-6e4;const a=new Date(this.nowTime.getTime()+e);return _.DateTimeFormat.format(n.Util.getTimeFormatShort(),a.getTime()/1e3)},incrementTime(){this.nowTime=new Date},onTimezoneSelect(){const t=this.timezoneList[this.selectedTimezoneId];this.currentTimezoneOffsetUtc=-(t.offset/60);this.reCreateMonth();if(this.currentDayNumber){const t=this.getDayByNumber(this.currentDayNumber);this.openEventSlotList(t)}this.$Bitrix.eventEmitter.emit("calendar:sharing:onTimezoneChange",{selectedTimezone:t})},async updateEventSlotsList(){const t=this.months[this.currentMonthIndex];const e=t.year;const _=t.month+1;const n=_+"."+e;this.accessibility[n]=await this.loadMonthAccessibility(e,_);this.monthsSlots[this.currentMonthIndex]=this.calculateDateTimeSlots(e,_-1);this.reCreateMonth()},getDayByNumber(t){const e=this.months[this.currentMonthIndex];const _=e.days.flat().filter((t=>t.day>0));return _[t-1]},createMonth(t,e){return{year:t,month:e,currentTimezoneOffset:this.currentTimezoneOffsetUtc,name:this.getMonthName(e),days:this.getMonthDays(t,e)}},reCreateMonth(){const t=this.months[this.currentMonthIndex].year;const e=this.months[this.currentMonthIndex].month;const _=this.monthsSlots[this.currentMonthIndex];const n=e+1+"."+t;this.monthsSlotsMap[n]=this.getDateTimeSlotsMap(_);this.months[this.currentMonthIndex]=this.createMonth(t,e)},getFirstMonthDay(t,e){const _=new Date(t,e,1).getDay();return _===0?7:_},getMonthName(t){const e=new Date;const n=new Date(e.getFullYear(),t,1);return _.DateTimeFormat.format("f",n.getTime()/1e3)},getMonthDays(t,e){const _=[];const n=new Date(t,e+1,0).getDate();const a=this.getFirstMonthDay(t,e);const i=e+1+"."+t;for(let r=1;r<=6;r++){const o=[];for(let _=1;_<=7;_++){const l=_+this.config.weekStart+(r-1)*7-a;if(l<=0){o.push({day:-1,unavailable:false,weekend:false})}else if(l>n){o.push({day:0,unavailable:false,weekend:false})}else{var s;const _=new Date(t,e,l);const n=(s=this.monthsSlotsMap[i][_.getDate()])!=null?s:[];const a=_<this.nowTime&&_.getDate()<this.nowTime.getDate();const r=this.isHoliday(_);const c=n.filter((t=>t.available)).length>0;o.push({slots:n,day:l,unavailable:a,isWeekend:r,hasFreeWindows:c})}}if(r===1&&o[6].day===-1){continue}_.push(o)}return _},isHoliday(t){const e=t.getDate()+"."+("0"+(t.getMonth()+1)).slice(-2);return this.config.weekHolidays.includes(t.getDay())||this.config.yearHolidays[e]!==undefined},async createNextMonth(){const t=this.months[this.currentMonthIndex];const e=t.year;const _=t.month;const n=(_+1)%12;const a=e+Math.floor((_+1)/12);const i=n+1;const s=i+"."+a;this.accessibility[s]=await this.loadMonthAccessibility(a,i);const r=this.calculateDateTimeSlots(a,n);this.monthsSlots.push(r);this.monthsSlotsMap[s]=this.getDateTimeSlotsMap(r);const o=this.createMonth(a,n);this.months.push(o)},async loadMonthAccessibility(t,e){const _=new Date(t,e-1,1);const n=new Date(t,e,0,23,59);const a=await BX.ajax.runAction("calendar.api.sharingajax.getUserAccessibility",{data:{userId:this.owner.id,timestampFrom:_.getTime(),timestampTo:n.getTime()}});return a.data},returnToAddForm(){this.$Bitrix.eventEmitter.emit("calendar:sharing:changeApplicationType",{type:"addForm"})},async handleNextMonthArrowClick(){if(this.isMonthAnimating){return}this.isMonthAnimating=true;this.$Bitrix.eventEmitter.emit("calendar:sharing:onBeforeOpenSlotList");if(this.currentMonthIndex===this.months.length-1){await this.createNextMonth()}this.startNextMonthAnimation()},handlePreviousMonthArrowClick(){if(this.isMonthAnimating||this.currentMonthIndex===0){return}this.isMonthAnimating=true;this.$Bitrix.eventEmitter.emit("calendar:sharing:onBeforeOpenSlotList");this.startPreviousMonthAnimation()},startNextMonthAnimation(){this.displayedMonth=[0,1]},startPreviousMonthAnimation(){this.displayedMonth=[-1,0]},animateToNextMonth(){this.animateMonthSwitch("next")},animateToPreviousMonth(){this.animateMonthSwitch("previous")},animateMonthSwitch(t){let e,_,n;if(t==="next"){e=this.DOM.monthsContainer.children[0];const t=this.DOM.monthsContainer.children[1];_=this.DOM.monthsContainer.scrollWidth-this.DOM.monthsContainer.offsetWidth;n=this.getMonthHeight(t,this.currentMonthIndex+1)}if(t==="previous"){const t=this.DOM.monthsContainer.children[0];e=this.DOM.monthsContainer.children[1];_=0;n=this.getMonthHeight(t,this.currentMonthIndex-1)}new BX.easing({duration:300,start:{scrollLeft:this.DOM.monthsContainer.scrollLeft,height:this.getMonthHeight(e,this.currentMonthIndex)},finish:{scrollLeft:_,height:n},transition:BX.easing.makeEaseOut(BX.easing.transitions.quad),step:t=>{this.DOM.monthsContainer.scrollLeft=t.scrollLeft;this.DOM.monthsContainer.style.height=t.height+"px"},complete:()=>{if(t==="next"&&this.currentMonthIndex<this.months.length-1){this.currentMonthIndex++}if(t==="previous"&&this.currentMonthIndex>0){this.currentMonthIndex--}if(this.months[this.currentMonthIndex].currentTimezoneOffset!==this.currentTimezoneOffsetUtc){this.reCreateMonth()}this.selectMonthDay();this.isMonthAnimating=false;this.displayedMonth=[0]}}).animate()},openEventSlotList(t){this.currentDayNumber=t.day;const e={slots:t.slots,day:t.day,month:this.months[this.currentMonthIndex].month,year:this.months[this.currentMonthIndex].year};this.$Bitrix.eventEmitter.emit("calendar:sharing:doOpenEventSlotList",e)},calculateDateTimeSlots(t,e){const _=[];const a=new Date(t,e+1,0).getDate();const i=e+1+"."+t;const s=this.nowTime.getTime();const r=(n.Util.getTimeZoneOffset(this.selectedTimezoneId)-this.nowTime.getTimezoneOffset())*6e4;const o=this.getDateInSelectedTimezoneFromTimestampUTC(s)-s;for(let n=1;n<=a;n++){const a=new Date(t,e,n);const l=new Date(t,e,n,this.config.workTimeStartHours,this.config.workTimeStartMinutes);const c=new Date(t,e,n,this.config.workTimeEndHours,this.config.workTimeEndMinutes);const h=this.accessibility[i].filter((t=>this.doIntervalsIntersect(parseInt(t.timestampFromUTC)*1e3,parseInt(t.timestampToUTC)*1e3,l.getTime(),c.getTime())));while(l.getTime()<c.getTime()){const t=l.getTime();const e=t+this.eventDurability;if(e>c.getTime()){break}const n=h.filter((_=>this.doIntervalsIntersect(parseInt(_.timestampFromUTC)*1e3,parseInt(_.timestampToUTC)*1e3,t,e)));const i=n.length===0&&!this.isHoliday(a)&&t>s;const d=new Date(t+r+o);const m=new Date(d.getTime()+(e-t));_.push({timeFrom:d,timeTo:m,available:i});l.setTime(l.getTime()+this.stepSize)}}return _},doIntervalsIntersect(t,e,_,n){const a=_<=t&&t<n;const i=_<e&&e<=n;const s=t<=_&&e>=n;return a||i||s},getDateInSelectedTimezoneFromTimestampUTC(t){const e=this.selectedTimezoneId;return n.Util.getTimezoneDateFromTimestampUTC(t,e)},getDateTimeSlotsMap(t){let e=[];t.forEach((t=>{const _=(this.currentTimezoneOffsetUtc-this.timezoneOffsetUtc)*-60*1e3;const n={timeFrom:new Date(t.timeFrom.getTime()+_),timeTo:new Date(t.timeTo.getTime()+_),available:t.available};let a=n.timeFrom.getDate();if(e[a]===undefined){e[a]=[]}if(t.timeFrom.getMonth()===n.timeFrom.getMonth()){e[a].push(n)}}));return e},selectMonthDay(){const t=this.months[this.currentMonthIndex].days.flat().filter((t=>t.day>0));let e=t.find((t=>t.day===this.currentDayNumber));if(e===undefined){e=t[t.length-1]}this.currentDayNumber=e.day;this.openEventSlotList(e)},selectFirstAvailableDay(){let t=this.months[this.currentMonthIndex].days.flat();if(this.currentMonthIndex===0){const e=(new Date).getDate();t=t.filter((t=>t.day>=e)).slice(0,14)}let e=t.find((t=>t.hasFreeWindows));if(e===undefined){e=t[0]}this.openEventSlotList(e)},setMonthHeight(){const t=document.querySelector(".calendar-sharing__month");t.style.height=this.getMonthHeight(t,this.currentMonthIndex)+"px"},getMonthHeight(t,e){const _=t.querySelector(".calendar-sharing__days-container").children;const n=_[0].offsetHeight;if(this.months[e].days.flat()[35].day===0){return n*6}return n*7},setPageVisualSettings(){const t=document.querySelector("html");const e=document.querySelector("body");if(!a.Dom.hasClass(e,"calendar-sharing--public-body")){a.Dom.addClass(e,"calendar-sharing--public-body")}if(!a.Dom.hasClass(t,"calendar-sharing--public-html")){a.Dom.addClass(t,"calendar-sharing--public-html")}if(!a.Dom.hasClass(t,"calendar-sharing--slots")){a.Dom.addClass(t,"calendar-sharing--slots")}if(a.Dom.hasClass(t,"calendar-sharing--bg-green")){a.Dom.removeClass(t,"calendar-sharing--bg-green")}if(a.Dom.hasClass(t,"calendar-sharing--bg-red")){a.Dom.removeClass(t,"calendar-sharing--bg-red")}if(!a.Dom.hasClass(t,"calendar-sharing--bg-gray")&&this.isMobileBrowser){a.Dom.addClass(t,"calendar-sharing--bg-gray")}if(!a.Dom.hasClass(t,"calendar-sharing--bg-blue")&&!this.isMobileBrowser){a.Dom.addClass(t,"calendar-sharing--bg-blue")}if(a.Dom.hasClass(t,"calendar-sharing-html-body-center")){a.Dom.removeClass(t,"calendar-sharing-html-body-center")}if(a.Dom.hasClass(e,"calendar-sharing-html-body-center")){a.Dom.removeClass(e,"calendar-sharing-html-body-center")}if(n.Util.isMobileBrowser()){if(!a.Dom.hasClass(e,"calendar-sharing--public-body-mobile")){a.Dom.addClass(e,"calendar-sharing--public-body-mobile")}if(!a.Dom.hasClass(t,"calendar-sharing--public-html-mobile")){a.Dom.addClass(t,"calendar-sharing--public-html-mobile")}}}},template:`\n\t\t<div class="calendar-sharing-main__container">\n\t\t\t<div class="calendar-sharing_title-header">\n\t\t\t\t<div class="calendar-sharing_title">\n\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_TITLE') }}\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclass="calendar-sharing_next-month-arrow"\n\t\t\t\t\t@click="returnToAddForm()"\n\t\t\t\t\tv-if="addFormCreated"\n\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="calendar-sharing-month__container">\n\t\t\t\t<div class="calendar-sharing_month-title">\n\t\t\t\t\t<div class="calendar-sharing_mount-name">{{ months[currentMonthIndex].name }}, {{ months[currentMonthIndex].year }}</div>\n\t\t\t\t\t<div class="calendar-sharing_month_btn-box">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass="calendar-sharing_previous-month-arrow"\n\t\t\t\t\t\t\t:class="{'--unavailable': !currentMonthIndex}"\n\t\t\t\t\t\t\t@click="handlePreviousMonthArrowClick"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass="calendar-sharing_next-month-arrow"\n\t\t\t\t\t\t\t@click="handleNextMonthArrowClick"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="calendar-sharing__months-container">\n\t\t\t\t<div class="calendar-sharing__month" v-for="i in displayedMonth">\n\t\t\t\t\t<div class="calendar-sharing__weekdays-container">\n\t\t\t\t\t\t<div class="calendar-sharing_weekday" v-for="weekday in loc.weekdays">{{ weekday }}</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="calendar-sharing__days-container">\n\t\t\t\t\t\t<div class="calendar-sharing_week-line" v-for="w in months[currentMonthIndex + i].days">\n\t\t\t\t\t\t\t<div class="calendar-sharing__day-container" v-for="d in w">\n\t\t\t\t\t\t\t\t<div class="calendar-sharing_day --first-week" v-if="d.day === -1"></div>\n\t\t\t\t\t\t\t\t<div class="calendar-sharing_day --empty" v-else-if="d.day === 0"></div>\n\t\t\t\t\t\t\t\t<div class="calendar-sharing_day --unavailable" v-else-if="d.unavailable">{{ d.day }}</div>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass="calendar-sharing_day"\n\t\t\t\t\t\t\t\t\t:class="\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t'--weekend': d.isWeekend,\n\t\t\t\t\t\t\t\t\t'--enable-booking': d.hasFreeWindows,\n\t\t\t\t\t\t\t\t\t'--active': d.day === currentDayNumber,\n\t\t\t\t\t\t\t\t}"\n\t\t\t\t\t\t\t\t\t@click="openEventSlotList(d)"\n\t\t\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{ d.day }}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class="calendar-sharing-main__bottom-container">\n\t\t\t<div class="calendar-sharing__event-slot-timezone">\n\t\t\t\t<div class="calendar-sharing__event-slot-timezone_name">{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_TIMEZONE') }}:</div>\n\t\t\t\t<div class="calendar-sharing__event-slot-timezone_select_box">\n\t\t\t\t\t<select class="calendar-sharing__event-slot-timezone_select"\n\t\t\t\t\t\t\tv-model="selectedTimezoneId"\n\t\t\t\t\t\t\t@change="onTimezoneSelect"\n\t\t\t\t\t>\n\t\t\t\t\t\t<option v-for="timezone in timezoneList" :value="timezone.timezone_id">\n\t\t\t\t\t\t\t{{ this.getTimezonePrefix(timezone.offset) }} - {{ timezone.timezone_id }}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t</select>\n\t\t\t\t\t<select class="calendar-sharing__event-slot-timezone_select_helper-element" aria-hidden="true">\n\t\t\t\t\t\t<option value="value" selected>value</option>\n\t\t\t\t\t</select>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t`};const r={props:["item","key"],data(){return{}},computed:{timeInput(){return n.Util.formatTimeInterval(this.item.timeFrom,this.item.timeTo)}},methods:{handleSetEventButtonClick(){this.$emit("handleSetEventButtonClick",{timeFrom:this.item.timeFrom,timeTo:this.item.timeTo})}},template:`\n\t\t<div class="calendar-sharing-event-slot-item" :class="{'calendar-sharing-event-slot-item-hidden': !item.available}">\n\t\t\t<div class="calendar-sharing-event-slot-item-time">\n\t\t\t\t{{ timeInput }}\n\t\t\t</div>\n\t\t\t<button\n\t\t\t\tclass="ui-btn ui-btn-success ui-btn-xs ui-btn-round"\n\t\t\t\t@click="handleSetEventButtonClick"\n\t\t\t>\n\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_CREATE_MEETING') }}\n\t\t\t</button>\n\t\t</div>\n\t`};const o={template:`\n\t\t<div class="calendar-sharing__timer_box">\n\t\t\t<div class="calendar-sharing__time_icon"></div>\n\t\t\t<div class="calendar-sharing__timer_title">{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_TIMER_TITLE') }}</div>\n\t\t\t<div class="calendar-sharing__timer_desc">{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_TIMER_DESC') }}</div>\n\t\t</div>\n\t`};const l={name:"EventSlotList",props:{timezoneList:Object,link:Object},components:{EventSlotItem:r,Timer:o},data(){return{itemList:[],isItemSelected:false,selectedTimezone:null,nowTime:new Date,currentTimezoneName:Intl.DateTimeFormat().resolvedOptions().timeZone}},created(){this.selectCurrentTimezone();this.$Bitrix.eventEmitter.subscribe("calendar:sharing:onTimezoneChange",(t=>{this.updateTimezoneParams(t)}));this.$Bitrix.eventEmitter.subscribe("calendar:sharing:doOpenEventSlotList",(t=>{this.openEventSlotList(t)}))},mounted(){this.DOM={slotContainer:document.querySelector(".calendar-sharing-event-slot-container")}},methods:{selectCurrentTimezone(){for(let[t,e]of Object.entries(this.timezoneList)){if(t===this.currentTimezoneName){this.selectedTimezone=e;break}}},openEventSlotList(t){const e=t.getData();this.itemList=e.slots;this.isItemSelected=true},updateTimezoneParams(t){this.selectedTimezone=t.data.selectedTimezone},async handleSetEventButtonClick(t){this.$Bitrix.eventEmitter.emit("calendar:sharing:changeEventData",{timeFrom:t.timeFrom,timeTo:t.timeTo,timezone:this.selectedTimezone});this.$Bitrix.eventEmitter.emit("calendar:sharing:changeApplicationType",{type:"addForm"})}},template:`\n\t\t<div class="calendar-sharing-event-slot-container" v-show="isItemSelected">\n\t\t\t<EventSlotItem\n\t\t\t\tv-for="(item, index) in itemList"\n\t\t\t\t:key="index"\n\t\t\t\t:item="item"\n\t\t\t\t:index="index + 1"\n\t\t\t\t@handleSetEventButtonClick="handleSetEventButtonClick"\n\t\t\t/>\n\t\t\t<div class="calendar-sharing-event-slot-empty" :class="{'calendar-sharing-event-slot-item-hidden': itemList.filter(a => a.available).length}">\n\t\t\t\t<Timer/>\n\t\t\t</div>\n\t\t</div>\n\t`};const c={template:`\n\t\t<div class="calendar-sharing_header">\n\t\t\t<slot/>\n\t\t</div>\n\t`};const h={props:{event:{type:Object,required:true},showClockIcon:Boolean},data(){return{loc:{today:a.Loc.getMessage("CALENDAR_SHARING_TODAY"),tomorrow:a.Loc.getMessage("CALENDAR_SHARING_TOMORROW")}}},methods:{getEventWeekDayShort(){return _.DateTimeFormat.format("D",this.event.timeFrom.getTime()/1e3).toLowerCase()},getEventMonthDay(){return this.event.timeFrom.getDate()},getEventDate(){let t="";const e=n.Util.getDayMonthFormat();const a=new Date;const i=new Date(this.event.timeFrom.getFullYear(),this.event.timeFrom.getMonth(),this.event.timeFrom.getDate());if(a.getTime()>i.getTime()&&a.getTime()<i.getTime()+86e6){t=this.loc.today}else if(a.getTime()<i.getTime()&&a.getTime()>i.getTime()-86e6){t=this.loc.tomorrow}else{t=_.DateTimeFormat.format("l",this.event.timeFrom.getTime()/1e3).toLowerCase()}return _.DateTimeFormat.format(e,this.event.timeFrom.getTime()/1e3)+", "+t},getEventTime(){return n.Util.formatTimeInterval(this.event.timeFrom,this.event.timeTo)},getEventTimezone(){return n.Util.getFormattedTimezone(this.event.timezone.timezone_id)},getEventName(){return BX.util.htmlspecialchars(this.event.name)}},template:`\n\t\t<div\n\t\t\tclass="calendar-sharing-event-start__info_container" \n\t\t\t:class="{'calendar-sharing--bg-gray': !this.event.name}"\n\t\t>\n\t\t\t<div class="calendar-sharing-event-start__info-icon" :class="{'--xl': this.event.name}">\n\t\t\t\t<div class="calendar-sharing-event-start__info-icon_status" v-if="showClockIcon"></div>\n\t\t\t\t<div class="calendar-sharing-event-start__info-icon_day" :class="{'--xl': this.event.name}">\n\t\t\t\t\t{{ getEventWeekDayShort() }}\n\t\t\t\t</div>\n\t\t\t\t<div class="calendar-sharing-event-start__info-icon_date" :class="{'--xl': this.event.name}">\n\t\t\t\t\t{{ getEventMonthDay() }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="calendar-sharing-event-start__info_datetime">\n\t\t\t\t<div class="calendar-sharing-event-start__event-name" v-if="this.event.name">\n\t\t\t\t\t{{ getEventName() }}\n\t\t\t\t</div>\n\t\t\t\t<div class="calendar-sharing-event-start__info_date">\n\t\t\t\t\t{{ getEventDate() }}\n\t\t\t\t</div>\n\t\t\t\t<div class="calendar-sharing-event-start__info_time_box">\n\t\t\t\t\t<div class="calendar-sharing-event-start__info_time">\n\t\t\t\t\t\t{{ getEventTime() }}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class="calendar-sharing-event-start__info_timezone">\n\t\t\t\t\t{{ getEventTimezone() }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t`};const d={props:{hasBackButton:{type:Boolean,default:false},backButtonCallback:{type:Function,default:()=>{}},text:{type:String,required:true}},template:`\n\t\t<div class="calendar-sharing-header-title_container" :class="{'--center': !hasBackButton}">\n\t\t\t<div class="calendar-sharing-header-title_icon"></div>\n\t\t\t<div\n\t\t\t\tv-show="hasBackButton"\n\t\t\t\t@click="backButtonCallback"\n\t\t\t\tclass="calendar-sharing-header-title_back-button"\n\t\t\t>\n\t\t\t</div>\n\t\t\t<div class="calendar-sharing-header-title_text">{{text}}</div>\n\t\t</div>\n\t`};const m={template:`\n\t\t<div class="calendar-sharing__loader_box">\n\t\t\t<svg class="calendar-sharing_circular" viewBox="25 25 50 50">\n\t\t\t\t<circle class="calendar-sharing_path" cx="50" cy="50" r="20" fill="none" stroke-miterlimit="10"/>\n\t\t\t</svg>\n\t\t</div>\n\t`};const g={components:{Header:c,HeaderTitle:d,StartInfo:h,SharingLoader:m},name:"EventAddForm",props:{event:{type:Object,required:true},owner:{type:Object,required:true},phoneFeatureEnabled:{type:Boolean,required:true},mailFeatureEnabled:{type:Boolean,required:true},sharingUser:Object,lastEventName:String,link:Object,fromCrmEntity:{type:Boolean,required:true},hasContactData:{type:Boolean,required:true}},data(){return{eventName:this.link.eventName||this.lastEventName,authorName:this.link.contactName||this.sharingUser.userName,contactData:this.link.contactData||this.sharingUser.personalMailbox||this.sharingUser.personalPhone,description:"",isEmptyContactName:false,contactDataError:false,isEmptyContactData:false,saveButton:{text:"",disabled:false},validated:true,loadingProcess:false}},created(){if(this.fromCrmEntity){this.saveButton.text=a.Loc.getMessage("CALENDAR_SHARING_SEND_REQUEST_CRM_DEAL")}else{this.saveButton.text=a.Loc.getMessage("CALENDAR_SHARING_SEND_REQUEST")}if(this.sharingUser.ownerCreated&&this.fromCrmEntity){this.saveButton.disabled=true}},mounted(){this.DOM={inputContact:document.getElementById("calendar-sharing-event-add-form_input-contact"),calendarContainer:document.querySelector(".calendar-sharing__calendar"),addFormElement:document.querySelector(".calendar-sharing__add-form").firstElementChild}},updated(){if(this.DOM.addFormElement.offsetHeight>0){this.DOM.calendarContainer.style.height=this.DOM.addFormElement.offsetHeight+"px"}},methods:{async handleSaveEventButton(){this.fillEventNameIfEmpty();this.clearContactDataError();this.clearContactNameError();if(!this.validateData()){this.validated=false;return}this.validated=true;this.disableSaveButton();this.loadingProcess=true;const t=await this.saveEvent();this.enableSaveButton();this.loadingProcess=false;if(!t&&!this.validated){return}this.$Bitrix.eventEmitter.emit("calendar:sharing:onEventAdd");this.$Bitrix.eventEmitter.emit("calendar:sharing:setEventViewError",{viewFormError:!t});this.$Bitrix.eventEmitter.emit("calendar:sharing:updateAddFormDefaultParams",{userName:this.authorName,contactData:this.contactData,eventName:this.eventName});this.$Bitrix.eventEmitter.emit("calendar:sharing:changeApplicationType",{type:"viewForm"})},clearContactNameError(){this.isEmptyContactName=false},clearContactDataError(){this.contactDataError=false;this.isEmptyContactData=false},validateData(){if(this.isCrmAndHasContact()){return true}if(this.authorName.length===0){this.isEmptyContactName=true}if(this.contactData.length===0){this.isEmptyContactData=true}if(!this.isEmptyContactData){this.contactDataError=!this.validatePhone()&&!this.validateEmail()}return!this.isEmptyContactName&&!this.isEmptyContactData&&!this.contactDataError},async saveEvent(){let t=null;this.loadingProcess=true;try{if(this.fromCrmEntity){t=await BX.ajax.runAction("calendar.api.sharingajax.saveCrmEvent",{data:{ownerCreated:this.sharingUser.ownerCreated,ownerId:this.owner.id,dateFrom:this.parseDate(this.event.timeFrom),dateTo:this.parseDate(this.event.timeTo),userName:this.authorName,userContact:this.contactData,timezone:this.event.timezone.timezone_id,crmDealLinkHash:this.link.hash,description:this.description}})}else{t=await BX.ajax.runAction("calendar.api.sharingajax.saveEvent",{data:{ownerCreated:this.sharingUser.ownerCreated,ownerId:this.owner.id,eventName:this.eventName,userName:this.authorName,userContact:this.contactData,dateFrom:this.parseDate(this.event.timeFrom),dateTo:this.parseDate(this.event.timeTo),timezone:this.event.timezone.timezone_id,parentLinkHash:this.link.hash}})}}catch(e){t=e}if(t.errors.length===0){this.$Bitrix.eventEmitter.emit("calendar:sharing:onSetEventData",{eventId:t.data.eventId,eventLinkId:t.data.eventLinkId,eventLinkHash:t.data.eventLinkHash,eventLinkShortUrl:t.data.eventLinkShortUrl,eventName:t.data.eventName});return true}else{this.$Bitrix.eventEmitter.emit("calendar:sharing:onSetEventData",{eventName:this.eventName})}if(t.data.contactDataError===true){this.contactDataError=true;this.validated=false}if(t.data.isEmptyContactName===true){this.isEmptyContactName=true;this.validated=false}return false},disableSaveButton(){this.saveButton.text=this.$Bitrix.Loc.getMessage("CALENDAR_SHARING_SEND_REQUEST_PROCESSING");this.saveButton.disabled=true},enableSaveButton(){if(this.fromCrmEntity){this.saveButton.text=this.$Bitrix.Loc.getMessage("CALENDAR_SHARING_SEND_REQUEST_CRM_DEAL")}else{this.saveButton.text=this.$Bitrix.Loc.getMessage("CALENDAR_SHARING_SEND_REQUEST")}this.saveButton.disabled=false},parseDate(t){const e=_.DateTimeFormat.format(n.Util.getDateFormat(),t.getTime()/1e3);const a=_.DateTimeFormat.format(n.Util.getTimeFormat(),t.getTime()/1e3);return e+" "+a},returnToDateSelector(){this.$Bitrix.eventEmitter.emit("calendar:sharing:changeApplicationType",{type:"calendar"})},fillEventNameIfEmpty(){if(this.eventName.length===0){this.eventName=a.Loc.getMessage("CALENDAR_SHARING_NEW_EVENT")}return true},validatePhone(){if(this.isMailContactOnly()){return false}const t=this.contactData.replace(/[()\s\-]+/g,"");const e=t.match(/(^\+?\d{4,25}$)/i);return(e==null?void 0:e[0])===t},validateEmail(){if(this.isPhoneContactOnly()){return false}const t=this.contactData.match(/(^[^@]+@.+$)/i);return(t==null?void 0:t[0])===this.contactData},getContactDataPlaceholder(){let t="CALENDAR_SHARING_AUTHOR_CONTACT_DATA_PLACEHOLDER_PHONE_FEATURE_ENABLED";if(this.isMailContactOnly()){t="CALENDAR_SHARING_AUTHOR_CONTACT_DATA_PLACEHOLDER_PHONE_FEATURE_DISABLED"}if(this.isPhoneContactOnly()){t="CALENDAR_SHARING_AUTHOR_CONTACT_DATA_PLACEHOLDER_MAIL_FEATURE_DISABLED"}return this.$Bitrix.Loc.getMessage(t)},onPhoneInput(){this.clearContactDataError();if(!this.isPhoneTypeInput()){return}const t=this.getTextBeforeCursor(this.DOM.inputContact);this.contactData=this.formatPhone(this.contactData);this.DOM.inputContact.value=this.contactData;this.setCursorToFormattedPosition(this.DOM.inputContact,t)},getTextBeforeCursor(t){const e=t.selectionStart;return t.value.slice(0,e)},setCursorToFormattedPosition(t,e){const _=this.getTextEscapedForRegex(e.slice(0,-1));const n=this.getTextEscapedForRegex(e.slice(-1));const a=t.value.match(`${_}.*?${n}`);if(!a){return}const i=a[0];const s=t.value.indexOf(i)+i.length;t.setSelectionRange(s,s)},getTextEscapedForRegex(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},onPhoneInputKeyDown(t){if(!this.isPhoneTypeInput()){return}if(!this.isDigit(t.key)&&!this.isControlKey(t.key)&&!n.Util.isAnyModifierKeyPressed(t)){t.preventDefault()}},isPhoneTypeInput(){return this.isPhoneContactOnly()||this.showFullContactPlaceholder()&&this.contactData.slice(0,1)==="+"},showFullContactPlaceholder(){return!this.isMailContactOnly()&&!this.isPhoneContactOnly()},isMailContactOnly(){return!this.phoneFeatureEnabled&&this.mailFeatureEnabled},isPhoneContactOnly(){return this.phoneFeatureEnabled&&!this.mailFeatureEnabled},isDigit(t){return/^\d+$/.test(t)},isCrmAndHasContact(){return this.fromCrmEntity&&this.hasContactData},isControlKey(t){return["Esc","Delete","Backspace","Tab"].indexOf(t)>=0||t.includes("Arrow")},formatPhone(t){var e;(e=t)!=null?e:t="";let _=t.indexOf("+")===0;t=t.replace(/\D/g,"");if(!_&&t.substr(0,1)==="8"){t="7"+t.substr(1)}if(!this.phoneDb){this.phoneDb="247,ac,___-____|376,ad,___-___-___|971,ae,___-_-___-____|93,af,__-__-___-____|1268,ag,_ (___) ___-____|1264,ai,_ (___) ___-____|355,al,___ (___) ___-___|374,am,___-__-___-___|599,bq,___-___-____|244,ao,___ (___) ___-___|6721,aq,___-___-___|54,ar,__ (___) ___-____|1684,as,_ (___) ___-____|43,at,__ (___) ___-____|61,au,__-_-____-____|297,aw,___-___-____|994,az,___ (__) ___-__-__|387,ba,___-__-____|1246,bb,_ (___) ___-____|880,bd,___-__-___-___|32,be,__ (___) ___-___|226,bf,___-__-__-____|359,bg,___ (___) ___-___|973,bh,___-____-____|257,bi,___-__-__-____|229,bj,___-__-__-____|1441,bm,_ (___) ___-____|673,bn,___-___-____|591,bo,___-_-___-____|55,br,__-(__)-____-____|1242,bs,_ (___) ___-____|975,bt,___-_-___-___|267,bw,___-__-___-___|375,by,___ (__) ___-__-__|501,bz,___-___-____|243,cd,___ (___) ___-___|236,cf,___-__-__-____|242,cg,___-__-___-____|41,ch,__-__-___-____|225,ci,___-__-___-___|682,ck,___-__-___|56,cl,__-_-____-____|237,cm,___-____-____|86,cn,__ (___) ____-___|57,co,__ (___) ___-____|506,cr,___-____-____|53,cu,__-_-___-____|238,cv,___ (___) __-__|357,cy,___-__-___-___|420,cz,___ (___) ___-___|49,de,__-___-___|253,dj,___-__-__-__-__|45,dk,__-__-__-__-__|1767,dm,_ (___) ___-____|1809,do,_ (___) ___-____|,do,_ (___) ___-____|213,dz,___-__-___-____|593,ec,___-_-___-____|372,ee,___-___-____|20,eg,__ (___) ___-____|291,er,___-_-___-___|34,es,__ (___) ___-___|251,et,___-__-___-____|358,fi,___ (___) ___-__-__|679,fj,___-__-_____|500,fk,___-_____|691,fm,___-___-____|298,fo,___-___-___|262,fr,___-_____-____|33,fr,__ (___) ___-___|508,fr,___-__-____|590,fr,___ (___) ___-___|241,ga,___-_-__-__-__|1473,gd,_ (___) ___-____|995,ge,___ (___) ___-___|594,gf,___-_____-____|233,gh,___ (___) ___-___|350,gi,___-___-_____|299,gl,___-__-__-__|220,gm,___ (___) __-__|224,gn,___-__-___-___|240,gq,___-__-___-____|30,gr,__ (___) ___-____|502,gt,___-_-___-____|1671,gu,_ (___) ___-____|245,gw,___-_-______|592,gy,___-___-____|852,hk,___-____-____|504,hn,___-____-____|385,hr,___-__-___-___|509,ht,___-__-__-____|36,hu,__ (___) ___-___|62,id,__-__-___-__|353,ie,___ (___) ___-___|972,il,___-_-___-____|91,in,__ (____) ___-___|246,io,___-___-____|964,iq,___ (___) ___-____|98,ir,__ (___) ___-____|354,is,___-___-____|39,it,__ (___) ____-___|1876,jm,_ (___) ___-____|962,jo,___-_-____-____|81,jp,__ (___) ___-___|254,ke,___-___-______|996,kg,___ (___) ___-___|855,kh,___ (__) ___-___|686,ki,___-__-___|269,km,___-__-_____|1869,kn,_ (___) ___-____|850,kp,___-___-___|82,kr,__-__-___-____|965,kw,___-____-____|1345,ky,_ (___) ___-____|77,kz,_ (___) ___-__-__|856,la,___-__-___-___|961,lb,___-_-___-___|1758,lc,_ (___) ___-____|423,li,___ (___) ___-____|94,lk,__-__-___-____|231,lr,___-__-___-___|266,ls,___-_-___-____|370,lt,___ (___) __-___|352,lu,___ (___) ___-___|371,lv,___-__-___-___|218,ly,___-__-___-___|212,ma,___-__-____-___|377,mc,___-__-___-___|373,md,___-____-____|382,me,___-__-___-___|261,mg,___-__-__-_____|692,mh,___-___-____|389,mk,___-__-___-___|223,ml,___-__-__-____|95,mm,__-___-___|976,mn,___-__-__-____|853,mo,___-____-____|1670,mp,_ (___) ___-____|596,mq,___ (___) __-__-__|222,mr,___ (__) __-____|1664,ms,_ (___) ___-____|356,mt,___-____-____|230,mu,___-___-____|960,mv,___-___-____|265,mw,___-_-____-____|52,mx,__-__-__-____|60,my,__-_-___-___|258,mz,___-__-___-___|264,na,___-__-___-____|687,nc,___-__-____|227,ne,___-__-__-____|6723,nf,___-___-___|234,ng,___-__-___-__|505,ni,___-____-____|31,nl,__-__-___-____|47,no,__ (___) __-___|977,np,___-__-___-___|674,nr,___-___-____|683,nu,___-____|64,nz,__-__-___-___|968,om,___-__-___-___|507,pa,___-___-____|51,pe,__ (___) ___-___|689,pf,___-__-__-__|675,pg,___ (___) __-___|63,ph,__ (___) ___-____|92,pk,__ (___) ___-____|48,pl,__ (___) ___-___|970,ps,___-__-___-____|351,pt,___-__-___-____|680,pw,___-___-____|595,py,___ (___) ___-___|974,qa,___-____-____|40,ro,__-__-___-____|381,rs,___-__-___-____|7,ru,_ (___) ___-__-__|250,rw,___ (___) ___-___|966,sa,___-_-___-____|677,sb,___-_____|248,sc,___-_-___-___|249,sd,___-__-___-____|46,se,__-__-___-____|65,sg,__-____-____|386,si,___-__-___-___|421,sk,___ (___) ___-___|232,sl,___-__-______|378,sm,___-____-______|221,sn,___-__-___-____|252,so,___-_-___-___|597,sr,___-___-___|211,ss,___-__-___-____|239,st,___-__-_____|503,sv,___-__-__-____|1721,sx,_ (___) ___-____|963,sy,___-__-____-___|268,sz,___ (__) __-____|1649,tc,_ (___) ___-____|235,td,___-__-__-__-__|228,tg,___-__-___-___|66,th,__-__-___-___|992,tj,___-__-___-____|690,tk,___-____|670,tl,___-___-____|993,tm,___-_-___-____|216,tn,___-__-___-___|676,to,___-_____|90,tr,__ (___) ___-____|1868,tt,_ (___) ___-____|688,tv,___-_____|886,tw,___-____-____|255,tz,___-__-___-____|380,ua,___ (__) ___-__-__|256,ug,___ (___) ___-___|44,gb,__-__-____-____|598,uy,___-_-___-__-__|998,uz,___-__-___-____|396698,va,__-_-___-_____|1784,vc,_ (___) ___-____|58,ve,__ (___) ___-____|1284,vg,_ (___) ___-____|1340,vi,_ (___) ___-____|84,vn,__-__-____-___|678,vu,___-_____|681,wf,___-__-____|685,ws,___-__-____|967,ye,___-_-___-___|27,za,__-__-___-____|260,zm,___ (__) ___-____|263,zw,___-_-______|1,us,_ (___) ___-____|".split("|").map((t=>{t=t.split(",");return{code:t[0],id:t[1],mask:t[2]}}))}if(t.length>0){let e=this.findMask(t);e+=((e.indexOf("-")>=0?"-":" ")+"__").repeat(10);for(let _=0;_<t.length;_++){e=e.replace("_",t.slice(_,_+1))}t=e.replace(/\D+$/,"").replace(/_/g,"0")}if(_||t.length>0){t="+"+t}return t},findMask(t){let e=this.phoneDb.filter((e=>t.indexOf(e.code)===0)).sort(((t,e)=>e.code.length-t.code.length))[0];return e?e.mask:"_ ___ __ __ __"}},template:`\n\t\t<Header>\n\t\t\t<template v-slot>\n\t\t\t\t<HeaderTitle\n\t\t\t\t\t:has-back-button="true"\n\t\t\t\t\t:back-button-callback="returnToDateSelector"\n\t\t\t\t\t:text="$Bitrix.Loc.getMessage('CALENDAR_SHARING_ADD_FORM_HEADER_TITLE')"\n\t\t\t\t/>\n\t\t\t\t<StartInfo\n\t\t\t\t\t:show-clock-icon="false"\n\t\t\t\t\t:event="this.event"\n\t\t\t\t/>\n\t\t\t</template>\n\t\t</Header>\n\t\t<div class="calendar-sharing-event-add-form">\n\t\t\t<div class="calendar-sharing-event-add-form_content">\n\t\t\t\t<div \n\t\t\t\t\tclass="calendar-sharing-event-add-form_input_box"\n\t\t\t\t\t:class="{\n\t\t\t\t\t\t'--disabled': fromCrmEntity\n\t\t\t\t\t}"\n\t\t\t\t\t:hidden="fromCrmEntity"\n\t\t\t\t>\n\t\t\t\t\t<input\n\t\t\t\t\t\tclass="calendar-sharing-event-add-form_input"\n\t\t\t\t\t\ttype="text"\n\t\t\t\t\t\t:placeholder="$Bitrix.Loc.getMessage('CALENDAR_SHARING_EVENT_NAME_PLACEHOLDER')"\n\t\t\t\t\t\t:disabled="fromCrmEntity"\n\t\t\t\t\t\tv-model="eventName"\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t\t<div \n\t\t\t\t\tclass="calendar-sharing-event-add-form_input_box" \n\t\t\t\t\t:class="{\n\t\t\t\t\t\t'--error': isEmptyContactName,\n\t\t\t\t\t}"\n\t\t\t\t\t:hidden="isCrmAndHasContact()"\n\t\t\t\t>\n\t\t\t\t\t<input\n\t\t\t\t\t\tclass="calendar-sharing-event-add-form_input"\n\t\t\t\t\t\ttype="text"\n\t\t\t\t\t\t:placeholder="$Bitrix.Loc.getMessage('CALENDAR_SHARING_AUTHOR_NAME_PLACEHOLDER')"\n\t\t\t\t\t\tv-model="authorName"\n\t\t\t\t\t\t@input="clearContactNameError"\n\t\t\t\t\t\t@focus="clearContactNameError"\n\t\t\t\t\t>\n\t\t\t\t\t<span \n\t\t\t\t\t\tclass="calendar-sharing-event-add-form_input_note" \n\t\t\t\t\t\tv-if="isEmptyContactName"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_REQUIRED_FIELD') }}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div \n\t\t\t\t\tclass="calendar-sharing-event-add-form_input_box" \n\t\t\t\t\t:class="{\n\t\t\t\t\t\t'--error': contactDataError || isEmptyContactData,\n\t\t\t\t\t}"\n\t\t\t\t\t:hidden="isCrmAndHasContact()"\n\t\t\t\t>\n\t\t\t\t\t<input\n\t\t\t\t\t\tid="calendar-sharing-event-add-form_input-contact"\n\t\t\t\t\t\tclass="calendar-sharing-event-add-form_input"\n\t\t\t\t\t\t:type="isPhoneContactOnly() ? 'tel' : 'text'"\n\t\t\t\t\t\t:placeholder="getContactDataPlaceholder()"\n\t\t\t\t\t\tv-model="contactData"\n\t\t\t\t\t\t@focus="clearContactDataError"\n\t\t\t\t\t\t@keydown="onPhoneInputKeyDown"\n\t\t\t\t\t\t@input="onPhoneInput"\n\t\t\t\t\t>\n\t\t\t\t\t<span class="calendar-sharing-event-add-form_input_note" v-if="contactDataError">\n\t\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_ERROR_FIELD') }}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class="calendar-sharing-event-add-form_input_note" v-if="isEmptyContactData">\n\t\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_REQUIRED_FIELD') }}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\tclass="calendar-sharing-event-add-form_input_box"\n\t\t\t\t\t:hidden="!fromCrmEntity"\n\t\t\t\t>\n\t\t\t\t\t<input\n\t\t\t\t\t\tid="calendar-sharing-event-add-form_input-contact"\n\t\t\t\t\t\tclass="calendar-sharing-event-add-form_input"\n\t\t\t\t\t\ttype="text"\n\t\t\t\t\t\t:placeholder="$Bitrix.Loc.getMessage('CALENDAR_SHARING_ADD_FORM_DESCRIPTION_INPUT')"\n\t\t\t\t\t\tv-model="description"\n\t\t\t\t\t>\n\t\t\t\t\t\x3c!-- TODO REMOVE CODE BELOW IF IT IS NOT NEEDED--\x3e\n\x3c!--\t\t\t\t\t<div class="calendar-inviting-person__list_inner">--\x3e\n\x3c!--\t\t\t\t\t\t<div class="calendar-inviting-person__list_invited">--\x3e\n\x3c!--\t\t\t\t\t\t\t<div class="calendar-inviting-person__list_title">--\x3e\n\x3c!--\t\t\t\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_ADD_FORM_YOU_WERE_INVITED_CRM_DEAL') }}--\x3e\n\x3c!--\t\t\t\t\t\t\t</div>--\x3e\n\x3c!--\t\t\t\t\t\t\t<div class="calendar-inviting-person__list_item">--\x3e\n\x3c!--\t\t\t\t\t\t\t\t<div class="ui-icon ui-icon-common-user">--\x3e\n\x3c!--\t\t\t\t\t\t\t\t\t<img--\x3e\n\x3c!--\t\t\t\t\t\t\t\t\t\tv-if="owner.photo"--\x3e\n\x3c!--\t\t\t\t\t\t\t\t\t\tclass="calendar-inviting-person__list_icon"--\x3e\n\x3c!--\t\t\t\t\t\t\t\t\t\t:src="owner.photo"--\x3e\n\x3c!--\t\t\t\t\t\t\t\t\t\talt=""--\x3e\n\x3c!--\t\t\t\t\t\t\t\t\t>--\x3e\n\x3c!--\t\t\t\t\t\t\t\t\t<i class="calendar-inviting-person__list_icon" v-else></i>--\x3e\n\x3c!--\t\t\t\t\t\t\t\t</div>--\x3e\n\x3c!--\t\t\t\t\t\t\t\t<div class="calendar-inviting-person__list_name">--\x3e\n\x3c!--\t\t\t\t\t\t\t\t\t{{ owner.name }} {{ owner.lastName }}--\x3e\n\x3c!--\t\t\t\t\t\t\t\t</div>--\x3e\n\x3c!--\t\t\t\t\t\t\t</div>--\x3e\n\x3c!--\t\t\t\t\t\t</div>--\x3e\n\x3c!--\t\t\t\t\t</div>--\x3e\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class="calendar-sharing-event-add-form_buttons">\n\t\t\t\t<button\n\t\t\t\t\tclass="ui-btn ui-btn-success ui-btn-round"\n\t\t\t\t\t@click="handleSaveEventButton"\n\t\t\t\t\t:disabled="saveButton.disabled"\n\t\t\t\t>\n\t\t\t\t\t{{ saveButton.text }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t\t<SharingLoader v-if="loadingProcess"/>\n\t\t</div>\n\t`};let v=t=>t,u;const f={components:{Header:c,HeaderTitle:d,StartInfo:h},name:"ViewForm",props:{event:{type:Object,required:true},owner:{type:Object,required:true},viewFormError:Boolean,linkType:String,fromCrmEntity:{type:Boolean,required:true}},data(){return{backButton:null,icsFileSrc:null}},created(){const t=document.querySelector("html");const e=document.querySelector("body");if(!this.fromCrmEntity){this.backButton=a.Tag.render(u||(u=v`<div class="calendar-sharing-view-form__back-button"> <div class="calendar-sharing_previous-month-arrow"></div> <div class="calendar-sharing-view-form__text">${0}</div> </div>`),a.Loc.getMessage("CALENDAR_SHARING_BACK"));a.Event.bind(this.backButton,"click",this.returnToDateSelector.bind(this));a.Dom.append(this.backButton,e)}if(a.Dom.hasClass(t,"calendar-sharing--bg-gray")){a.Dom.removeClass(t,"calendar-sharing--bg-gray")}if(!a.Dom.hasClass(t,"calendar-sharing-html-body-center")){a.Dom.addClass(t,"calendar-sharing-html-body-center")}if(!a.Dom.hasClass(e,"calendar-sharing-html-body-center")){a.Dom.addClass(e,"calendar-sharing-html-body-center")}if(this.viewFormError){a.Dom.addClass(t,"calendar-sharing--bg-red")}else{a.Dom.addClass(t,"calendar-sharing--bg-green")}},methods:{async downloadIcsFile(){if(!this.icsFile){const t=await BX.ajax.runAction("calendar.api.sharingajax.getIcsFileContent",{data:{eventLinkHash:this.event.linkHash}});this.icsFile=t.data}n.Util.downloadIcsFile(this.icsFile,"event")},returnToDateSelector(){if(this.backButton){a.Dom.remove(this.backButton)}this.$Bitrix.eventEmitter.emit("calendar:sharing:changeApplicationType",{type:"calendar"})}},template:`\n\t\t<div \n\t\t\tclass="calendar-sharing-main__container calendar-sharing--subtract"\n\t\t\t:class="{\n\t\t\t\t'calendar-sharing--success': !viewFormError,\n\t\t\t\t'calendar-sharing--error': viewFormError\n\t\t\t}"\n\t\t>\n\t\t\t<Header>\n\t\t\t\t<template v-slot>\n\t\t\t\t\t<HeaderTitle\n\t\t\t\t\t\t:has-back-button="false"\n\t\t\t\t\t\t:back-button-callback="returnToDateSelector"\n\t\t\t\t\t\t:text="$Bitrix.Loc.getMessage('CALENDAR_SHARING_VIEW_FORM_HEADER_TITLE_ERROR')"\n\t\t\t\t\t\tv-if="viewFormError"\n\t\t\t\t\t/>\n\t\t\t\t\t<HeaderTitle\n\t\t\t\t\t\t:has-back-button="false"\n\t\t\t\t\t\t:back-button-callback="returnToDateSelector"\n\t\t\t\t\t\t:text="\n\t\t\t\t\t\t\tthis.fromCrmEntity\n\t\t\t\t\t\t\t? $Bitrix.Loc.getMessage('CALENDAR_SHARING_VIEW_FORM_HEADER_TITLE_CRM_DEAL')\n\t\t\t\t\t\t\t: $Bitrix.Loc.getMessage('CALENDAR_SHARING_VIEW_FORM_HEADER_TITLE')\n\t\t\t\t\t\t"\n\t\t\t\t\t\tv-else\n\t\t\t\t\t/>\n\t\t\t\t\t<StartInfo\n\t\t\t\t\t\t:event="this.event"\n\t\t\t\t\t\t:show-clock-icon="!viewFormError"\n\t\t\t\t\t/>\n\t\t\t\t\t<div class="calendar-sharing-view-form__owner_container">\n\t\t\t\t\t\t<div class="calendar-sharing-view-form__owner_icon_container ui-icon ui-icon-common-user">\n\t\t\t\t\t\t\t<img class="calendar-sharing-view-form__owner_icon" :src="owner.photo" alt="" v-if="owner.photo">\n\t\t\t\t\t\t\t<i class="calendar-sharing-view-form__owner_icon" v-else></i>\n\t\t\t\t\t\t\t<div class="calendar-sharing-view-form__owner_icon_status" v-if="!viewFormError"></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<div class="calendar-sharing-view-form__owner_name">\n\t\t\t\t\t\t\t\t{{ owner.name }} {{ owner.lastName }}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class="calendar-sharing-view-form__owner_status" v-if="viewFormError">\n\t\t\t\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_EVENT_CREATE_ERROR') }}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class="calendar-sharing-view-form__owner_status" v-else>\n\t\t\t\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_EVENT_CREATE_SUCCESS') }}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t</Header>\n\t\t\t<div class="calendar-sharing-event-add-form">\n\t\t\t\t<div class="calendar-sharing-event-add-form_buttons">\n\t\t\t\t\t<button class="ui-btn ui-btn-success ui-btn-round" @click="returnToDateSelector" v-if="viewFormError">\n\t\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_RETURN_TO_CALENDAR') }}\n\t\t\t\t\t</button>\n\t\t\t\t\t<button class="ui-btn ui-btn-success ui-btn-round" @click="downloadIcsFile" v-else>\n\t\t\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_DOWNLOAD_ICS') }}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t`};const p={props:{owner:Object,sharingUser:Object,link:Object},mounted(){this.setPageVisualSettings();if(!this.sharingUser.ownerCreated){BX.ajax.runAction("calendar.api.sharingajax.handleTimelineNotify",{data:{linkHash:this.link.hash,entityId:this.link.entityId,entityType:this.link.type,notifyType:"notViewed"}})}},methods:{async closeWelcomePage(){this.$Bitrix.eventEmitter.emit("calendar:sharing:changeApplicationType",{type:"calendar"})},async addEntryInfoIntoTimeline(){if(!this.sharingUser.ownerCreated){await BX.ajax.runAction("calendar.api.sharingajax.handleTimelineNotify",{data:{linkHash:this.link.hash,entityId:this.link.entityId,entityType:this.link.type,notifyType:"viewed"}})}this.$Bitrix.eventEmitter.emit("calendar:sharing:changeApplicationType",{type:"calendar"});setTimeout((()=>{s.methods.resizeSelect()}),100)},setPageVisualSettings(){const t=document.querySelector("html");const e=document.querySelector("body");if(a.Dom.hasClass(t,"calendar-sharing--bg-gray")){a.Dom.removeClass(t,"calendar-sharing--bg-gray")}if(!a.Dom.hasClass(t,"calendar-sharing--bg-blue")){a.Dom.addClass(t,"calendar-sharing--bg-blue")}if(!a.Dom.hasClass(t,"calendar-sharing-html-body-center")){a.Dom.addClass(t,"calendar-sharing-html-body-center")}if(!a.Dom.hasClass(e,"calendar-sharing-html-body-center")){a.Dom.addClass(e,"calendar-sharing-html-body-center")}}},template:`\n\t\t<div class="calendar-sharing-welcome-page__container calendar-sharing--subtract">\n\t\t\t<div class="calendar-sharing-welcome-page__photo ui-icon ui-icon-common-user">\n\t\t\t\t<img class="calendar-sharing-welcome-page__photo_item" :src="owner.photo" alt="" v-if="owner.photo">\n\t\t\t\t<i class="calendar-sharing-welcome-page__photo_item" v-else></i>\n\t\t\t</div>\n\t\t\t<div class="calendar-sharing-welcome-page_title">\n\t\t\t\t{{ owner.name }} {{ owner.lastName }}\n\t\t\t</div>\n\t\t\t<div class="calendar-sharing-welcome-page_subtitle" v-if="link.type === 'crm_deal'">\n\t\t\t {{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_WELCOME_PAGE_TEXT_CRM_DEAL') }}\n\t\t\t</div>\n\t\t\t<div class="calendar-sharing-welcome-page_subtitle" v-else>\n\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_WELCOME_PAGE_TEXT') }}\n\t\t\t</div>\n\t\t\t<button class="ui-btn ui-btn-success ui-btn-round" @click="addEntryInfoIntoTimeline" v-if="link.type === 'crm_deal'">\n\t\t\t {{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_WELCOME_PAGE_NEXT_CRM_DEAL') }}\n\t\t\t</button>\n\t\t\t<button class="ui-btn ui-btn-success ui-btn-round" @click="closeWelcomePage" v-else>\n\t\t\t\t{{ $Bitrix.Loc.getMessage('CALENDAR_SHARING_WELCOME_PAGE_NEXT') }}\n\t\t\t</button>\n\t\t</div>\n\t`};const D={props:{link:Object,owner:Object,sharingUser:Object,calendarSettings:Object,userAccessibility:Object,timezoneList:Object,welcomePageVisited:String,hasContactData:Boolean},components:{DateSelector:s,EventSlotList:l,AddForm:g,ViewForm:f,WelcomePage:p},name:"Application",data(){return{type:"",lastEventName:"",viewFormError:false,eventData:{timeFrom:new Date,timeTo:new Date,timezone:this.timezoneList[Intl.DateTimeFormat().resolvedOptions().timeZone]},fromCrmEntity:this.link.type==="crm_deal"}},created(){this.type=this.welcomePageVisited?"calendar":"welcomePage";this.$Bitrix.eventEmitter.subscribe("calendar:sharing:changeApplicationType",(t=>{this.changeApplicationTypeHandler(t)}));this.$Bitrix.eventEmitter.subscribe("calendar:sharing:changeEventData",(t=>{this.changeEventDataHandler(t)}));this.$Bitrix.eventEmitter.subscribe("calendar:sharing:onSetEventData",(t=>{this.onSetEventDataHandler(t)}));this.$Bitrix.eventEmitter.subscribe("calendar:sharing:setEventViewError",(t=>{this.viewFormError=t.data.viewFormError}));this.$Bitrix.eventEmitter.subscribe("calendar:sharing:updateAddFormDefaultParams",(t=>{this.updateAddFormDefaultParams(t)}))},mounted(){this.DOM={welcomePage:document.querySelector(".calendar-sharing-welcome-page"),calendarContainer:document.querySelector(".calendar-sharing__calendar"),dateSelectorContainer:document.querySelector(".calendar-sharing__date-selector"),addFormElement:document.querySelector(".calendar-sharing__add-form").firstElementChild,logoBitrix24:document.querySelector(".calendar-sharing__b24-logo")}},methods:{changeApplicationTypeHandler(t){const e=this.type;const _=t.data.type;if(e==="welcomePage"&&_==="calendar"){this.transitFromWelcomePageToCalendar()}if(e==="calendar"&&_==="addForm"){this.transitFromCalendarToAddForm()}if(e==="addForm"&&_==="calendar"){this.transitFromAddFormToCalendar()}if(e==="addForm"&&_==="viewForm"){this.transitFromAddFormToViewForm()}if(e==="viewForm"&&_==="calendar"){this.transitFromViewFormToCalendar()}this.type=_},changeEventDataHandler(t){this.eventData=t.data},onSetEventDataHandler(t){if(t.data.eventId){this.eventData.id=t.data.eventId}if(t.data.eventName){this.eventData.name=t.data.eventName}if(t.data.eventLinkId){this.eventData.linkId=t.data.eventLinkId}if(t.data.eventLinkHash){this.eventData.linkHash=t.data.eventLinkHash}if(t.data.eventLinkShortUrl){this.eventData.eventLinkShortUrl=t.data.eventLinkShortUrl}},updateAddFormDefaultParams(t){this.sharingUser.userName=t.data.userName;this.sharingUser.personalMailbox=t.data.contactData;if(this.viewFormError){this.lastEventName=t.data.eventName}else{this.lastEventName=""}},transitFromWelcomePageToCalendar(){this.DOM.calendarContainer.style.transform="scale(1.5)";this.DOM.calendarContainer.style.filter="blur(1px)";this.DOM.calendarContainer.style.opacity=0;this.DOM.calendarContainer.style.transition="300ms all ease";this.DOM.welcomePage.style.transition="300ms all ease";this.DOM.welcomePage.style.transform="scale(1.5)";this.DOM.welcomePage.style.filter="blur(1px)";this.DOM.welcomePage.style.opacity=0;this.DOM.logoBitrix24.style.position="absolute";setTimeout((()=>{this.DOM.welcomePage.remove();this.DOM.calendarContainer.style.display="";this.$Bitrix.eventEmitter.emit("calendar:sharing:onShowCalendar");setTimeout((()=>{this.DOM.calendarContainer.style.transform="";this.DOM.calendarContainer.style.filter="";this.DOM.calendarContainer.style.opacity="";setTimeout((()=>{this.DOM.calendarContainer.style.transition="";this.DOM.logoBitrix24.style.position=""}),300)}),100)}),300)},transitFromCalendarToAddForm(){this.DOM.calendarContainer.style.height=this.DOM.dateSelectorContainer.offsetHeight+"px";new BX.easing({duration:150,start:{scrollLeft:this.DOM.calendarContainer.scrollLeft,height:this.DOM.dateSelectorContainer.offsetHeight},finish:{scrollLeft:this.DOM.calendarContainer.scrollWidth-this.DOM.calendarContainer.offsetWidth,height:this.DOM.addFormElement.offsetHeight},transition:BX.easing.makeEaseOut(BX.easing.transitions.quad),step:t=>{this.DOM.calendarContainer.scrollLeft=t.scrollLeft;this.DOM.calendarContainer.style.height=t.height+"px"},complete:()=>{}}).animate()},transitFromAddFormToCalendar(){this.DOM.calendarContainer.style.height=this.DOM.addFormElement.offsetHeight+"px";new BX.easing({duration:150,start:{scrollLeft:this.DOM.calendarContainer.scrollLeft,height:this.DOM.addFormElement.offsetHeight},finish:{scrollLeft:0,height:this.DOM.dateSelectorContainer.offsetHeight},transition:BX.easing.makeEaseOut(BX.easing.transitions.quad),step:t=>{this.DOM.calendarContainer.scrollLeft=t.scrollLeft;this.DOM.calendarContainer.style.height=t.height+"px"},complete:()=>{this.DOM.calendarContainer.style.height=""}}).animate()},transitFromAddFormToViewForm(){this.DOM.calendarContainer.scrollLeft=0;this.DOM.calendarContainer.style.height="";this.DOM.calendarContainer.style.display="none";if(!this.viewFormError){i.Confetti.fire({particleCount:240,spread:70,origin:{y:.3,x:.5},zIndex:2})}},transitFromViewFormToCalendar(){this.DOM.calendarContainer.style.display="";this.eventData.name=false;this.$Bitrix.eventEmitter.emit("calendar:sharing:onShowCalendar")}},template:`\n\t\t<div class="calendar-sharing-welcome-page">\n\t\t\t<WelcomePage\n\t\t\t\t:owner="owner"\n\t\t\t\t:sharingUser="sharingUser"\n\t\t\t\t:link="link"\n\t\t\t/>\n\t\t</div>\n\t\t<div class="calendar-sharing__calendar" style="display: none;">\n\t\t\t<div class="calendar-sharing__date-selector calendar-sharing--bg-gray">\n\t\t\t\t<DateSelector\n\t\t\t\t\t:userAccessibility="userAccessibility"\n\t\t\t\t\t:calendarSettings="calendarSettings"\n\t\t\t\t\t:timezoneList="timezoneList"\n\t\t\t\t\t:owner="owner"\n\t\t\t\t/>\n\t\t\t\t<EventSlotList\n\t\t\t\t\t:timezoneList="timezoneList"\n\t\t\t\t\t:link="link"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class="calendar-sharing__add-form">\n\t\t\t\t<div class="calendar-sharing-main__container calendar-sharing__form_box">\n\t\t\t\t\t<AddForm\n\t\t\t\t\t\t:owner="owner"\n\t\t\t\t\t\t:sharingUser="sharingUser"\n\t\t\t\t\t\t:event="eventData"\n\t\t\t\t\t\t:last-event-name="lastEventName"\n\t\t\t\t\t\t:phone-feature-enabled="calendarSettings.phoneFeatureEnabled"\n\t\t\t\t\t\t:link="link"\n\t\t\t\t\t\t:fromCrmEntity="fromCrmEntity"\n\t\t\t\t\t\t:hasContactData="hasContactData"\n\t\t\t\t\t\t:mail-feature-enabled="calendarSettings.mailFeatureEnabled"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if="type === 'viewForm'">\n\t\t\t<ViewForm\n\t\t\t\t:owner="owner"\n\t\t\t\t:event="eventData"\n\t\t\t\t:view-form-error="viewFormError"\n\t\t\t \t:from-crm-entity="fromCrmEntity"\n\t\t\t/>\n\t\t\t<div \n\t\t\t\tclass="calendar-sharing-event-created-info"\n\t\t\t\tv-if="!viewFormError"\n\t\t\t\tv-html="$Bitrix.Loc.getMessage('CALENDAR_SHARING_EVENT_CREATED_INFO').replace('#EVENT_LINK#', eventData.eventLinkShortUrl)"\n\t\t\t>\n\t\t\t</div>\n\t\t</div>\n\t`};class y{constructor(t={}){this.owner=t.owner;this.sharingUser=t.sharingUser;this.link=t.link;this.calendarSettings=t.calendarSettings;this.userAccessibility=t.userAccessibility;this.timezoneList=t.timezoneList;this.welcomePageVisited=t.welcomePageVisited;this.hasContactData=t.hasContactData;this.rootNode=BX("calendar-sharing-main");this.buildViews()}buildViews(){this.application=e.BitrixVue.createApp(D,{link:this.link,owner:this.owner,sharingUser:this.sharingUser,calendarSettings:this.calendarSettings,userAccessibility:this.userAccessibility,timezoneList:this.timezoneList,welcomePageVisited:this.welcomePageVisited,hasContactData:this.hasContactData}).mount(this.rootNode)}}t.Public=y})(this.BX.Calendar.Sharing=this.BX.Calendar.Sharing||{},BX.Vue3,BX.Main,BX.Calendar,BX,BX.UI); //# sourceMappingURL=public.bundle.map.js