Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
chamilo-lms/assets/vue/components/ccalendarevent/CCalendarEventForm.vue

102 lines
2.2 KiB

<template>
<form>
<BaseInputText
v-model="item.title"
:error-text="v$.item.title.$errors.map((error) => error.$message).join('<br>')"
:is-invalid="v$.item.title.$invalid"
:label="t('Title')"
/>
3 years ago
<BaseCalendar
10 months ago
id="calendar-id"
v-model="dateRange"
10 months ago
:initial-value="[item.startDate, item.endDate]"
:is-invalid="v$.item.startDate.$invalid || v$.item.endDate.$invalid"
:label="t('Date')"
10 months ago
class="max-w-sm w-full"
show-icon
show-time
type="range"
/>
3 years ago
<BaseTinyEditor
v-model="item.content"
:required="false"
10 months ago
editor-id="calendar-event-content"
/>
<CalendarInvitations v-model="item" />
3 years ago
<CalendarRemindersEditor
v-if="!isGlobal"
v-model="item"
/>
3 years ago
<slot />
</form>
</template>
3 years ago
<script setup>
import { computed, ref, watch } from "vue"
import { useVuelidate } from "@vuelidate/core"
import { required } from "@vuelidate/validators"
import BaseInputText from "../basecomponents/BaseInputText.vue"
import { useI18n } from "vue-i18n"
import BaseCalendar from "../basecomponents/BaseCalendar.vue"
import CalendarInvitations from "./CalendarInvitations.vue"
import CalendarRemindersEditor from "./CalendarRemindersEditor.vue"
import BaseTinyEditor from "../basecomponents/BaseTinyEditor.vue"
3 years ago
const { t } = useI18n()
3 years ago
// eslint-disable-next-line no-undef
const props = defineProps({
values: {
type: Object,
required: true,
},
errors: {
type: Object,
default: () => {},
},
3 years ago
initialValues: {
type: Object,
default: () => {},
},
isGlobal: Boolean,
})
3 years ago
const item = computed(() => props.initialValues || props.values)
3 years ago
const rules = computed(() => ({
item: {
title: {
required,
},
3 years ago
startDate: {
required,
},
3 years ago
endDate: {
required,
},
},
}))
const v$ = useVuelidate(rules, { item })
3 years ago
// eslint-disable-next-line no-undef
defineExpose({
v$,
})
const dateRange = ref()
if (item.value?.startDate || item.value?.endDate) {
dateRange.value = [item.value?.startDate, item.value?.endDate]
}
watch(dateRange, (newValue) => {
item.value.startDate = newValue[0]
item.value.endDate = newValue[1]
})
</script>