Files
mono/components/desktop/extensions/chatcoop/widgets/CalendarPageToolbar/ui/CalendarPageToolbar.vue
T
2026-03-28 21:09:57 +05:00

68 lines
2.0 KiB
Vue

<template lang="pug">
div
.row.items-center.q-mb-md
.text-h6 Календарь событий
q-space
q-btn.q-mr-sm(
color="primary",
outline,
:loading="calendarStore.isLoading",
@click="onRefresh"
)
q-icon(name="fa-solid fa-rotate").q-mr-sm
span Обновить
q-btn.q-mr-sm(
color="secondary",
outline,
:loading="icsLoading",
@click="toggleIcsPanel"
)
q-icon(name="fa-solid fa-link").q-mr-sm
span Установить
q-btn(
v-if="canManageCalendarEvents",
color="primary",
icon="fa-solid fa-plus",
@click="onRequestCreate"
) Новое событие
q-card(v-if="icsPanelOpen && icsUrl", flat, class="q-mb-md")
q-card-section
.text-subtitle2.q-mb-sm Скопируйте ссылку и импортируйте в ваш календарь для синхронизации событий
CopyableInput(:model-value="icsUrl", label="URL", standout)
</template>
<script lang="ts" setup>
import { ref } from 'vue'
import { CopyableInput } from 'src/shared/ui/CopyableInput'
import { api } from '../../../entities/ChatCoopCalendar/api'
import { useChatCoopCalendarStore } from '../../../entities/ChatCoopCalendar/model/store'
import { useCalendarBoardPermissions } from '../../../shared/lib/useCalendarBoardPermissions'
defineProps<{
onRefresh: () => void
onRequestCreate: () => void
}>()
const calendarStore = useChatCoopCalendarStore()
const { canManageCalendarEvents } = useCalendarBoardPermissions()
const icsUrl = ref<string | null>(null)
const icsPanelOpen = ref(false)
const icsLoading = ref(false)
async function toggleIcsPanel(): Promise<void> {
if (icsPanelOpen.value) {
icsPanelOpen.value = false
return
}
icsLoading.value = true
try {
icsUrl.value = await api.createIcsSubscription()
icsPanelOpen.value = true
} catch (e: unknown) {
console.error(e)
} finally {
icsLoading.value = false
}
}
</script>