Inside a modal
When working with the event calendar you will usually want to show an add/edit form in a popup rather than render it directly into the page markup. Simply configure the popup and add your form fields to it.
Interested in add/edit screens for events? Check out this example of a fully functional event form →
Demo
<script setup>
const popupOpen = ref(false)
const popupAnchor = ref(null)
const popupButtons = ['set', 'cancel']
function handleClick(ev) {
popupAnchor.value = ev.target
popupOpen.value = true
}
function handleClose() {
popupOpen.value = false
}
</script>
<template>
<MbscButton @click="handleClick">Show modal</MbscButton>
<MbscPopup
display="anchored"
:isOpen="popupOpen"
:anchor="popupAnchor"
:buttons="popupButtons"
:contentPadding="false"
@close="handleClose"
>
<div class="mbsc-form-group">
<MbscInput label="Title" />
<MbscTextarea label="Description" />
</div>
<div class="mbsc-form-group">
<MbscSwitch label="All-day" />
<MbscInput label="Starts" />
<MbscInput label="Ends" />
<MbscSegmentedGroup>
<MbscSegmented :defaultChecked="true">Show as busy</MbscSegmented>
<MbscSegmented>Show as free</MbscSegmented>
</MbscSegmentedGroup>
</div>
</MbscPopup>
</template>
SFC JSSFC TS
<script setup>
import {
MbscButton,
MbscInput,
MbscPage,
MbscPopup,
MbscSegmented,
MbscSegmentedGroup,
MbscSwitch,
MbscTextarea,
setOptions
} from '@mobiscroll/vue'
import { ref } from 'vue'
setOptions({
locale: ,
theme: ' ',
themeVariant: ' '
})
const popupOpen = ref(false)
const popupAnchor = ref(null)
const popupButtons = ['set', 'cancel']
const popupResponsive = {
medium: {
display: 'anchored',
width: 400,
fullScreen: false,
touchUi: false
}
}
function handleClick(ev) {
popupAnchor.value = ev.target
popupOpen.value = true
}
function handleClose() {
popupOpen.value = false
}
</script>
<template>
<MbscPage>
<MbscButton @click="handleClick">Show modal</MbscButton>
<MbscPopup
display="anchored"
:isOpen="popupOpen"
:anchor="popupAnchor"
:buttons="popupButtons"
:contentPadding="false"
:responsive="popupResponsive"
@close="handleClose"
>
<div class="mbsc-form-group">
<MbscInput label="Title" />
<MbscTextarea label="Description" />
</div>
<div class="mbsc-form-group">
<MbscSwitch label="All-day" />
<MbscInput label="Starts" />
<MbscInput label="Ends" />
<MbscSegmentedGroup>
<MbscSegmented :defaultChecked="true">Show as busy</MbscSegmented>
<MbscSegmented>Show as free</MbscSegmented>
</MbscSegmentedGroup>
</div>
</MbscPopup>
</MbscPage>
</template>
<script setup lang="ts">
import {
MbscButton,
MbscInput,
MbscPage,
MbscPopup,
MbscSegmented,
MbscSegmentedGroup,
MbscSwitch,
MbscTextarea,
setOptions
} from '@mobiscroll/vue'
import type { MbscPopupOptions, MbscResponsiveOptions } from '@mobiscroll/vue'
import { ref } from 'vue'
setOptions({
locale: ,
theme: ' ',
themeVariant: ' '
})
const popupOpen = ref<boolean>(false)
const popupAnchor = ref<any>(null)
const popupButtons = ['set', 'cancel']
const popupResponsive: MbscResponsiveOptions<MbscPopupOptions> = {
medium: {
display: 'anchored',
width: 400,
fullScreen: false,
touchUi: false
}
}
function handleClick(ev: any) {
popupAnchor.value = ev.target
popupOpen.value = true
}
function handleClose() {
popupOpen.value = false
}
</script>
<template>
<MbscPage>
<MbscButton @click="handleClick">Show modal</MbscButton>
<MbscPopup
display="anchored"
:isOpen="popupOpen"
:anchor="popupAnchor"
:buttons="popupButtons"
:contentPadding="false"
:responsive="popupResponsive"
@close="handleClose"
>
<div class="mbsc-form-group">
<MbscInput label="Title" />
<MbscTextarea label="Description" />
</div>
<div class="mbsc-form-group">
<MbscSwitch label="All-day" />
<MbscInput label="Starts" />
<MbscInput label="Ends" />
<MbscSegmentedGroup>
<MbscSegmented :defaultChecked="true">Show as busy</MbscSegmented>
<MbscSegmented>Show as free</MbscSegmented>
</MbscSegmentedGroup>
</div>
</MbscPopup>
</MbscPage>
</template>