Howdy,
This is one does not reproduce on the examples side so I am attaching the full code below.
The issue: When copy and pasting an event with the CrudMananger, it emits an update to the backend rather than and added event. I know the the CrudManager generally speaking can handle CopyPasteEvents correctly, but not here. See this video:
https://www.dropbox.com/s/3maue33s36wwsxm/Screen%20Recording%202022-12-09%20at%2010.14.59.mov?dl=0
Here is the full code and I am running Bryntum 5.2.3.
<script lang="ts">
import type {Ref, UnwrapRef} from "vue";
import {ref} from "vue";
import EnLocale from '@bryntum/scheduler/locales/scheduler.locale.En';
import {LocaleManager, AjaxStore} from '@bryntum/scheduler';
import {BryntumScheduler} from '@bryntum/scheduler-vue-3';
import {storeToRefs} from "pinia";
import {commonStore} from "../../stores/common";
export default {
components: {
BryntumScheduler
},
setup() {
const {teamFilter, isoLanguage} = storeToRefs(commonStore())
LocaleManager.registerLocale('En', {
...EnLocale,
desc: 'En',
locale: {
DateHelper: {
locale: isoLanguage.value,
weekStartDay: 1
}
}
});
LocaleManager.applyLocale('En');
const wishTypes = new AjaxStore({ id: 'wishTypes', })
const teamId = teamFilter.value
const wishesConfig = {
ref: "wishRef",
insertFirst: "wishes-view",
viewPreset: 'dayAndWeek',
eventStyle: 'border',
flex: 1,
syncMask: null,
loadMask: null,
rowHeight: 35,
weekStartDay: 1,
zoomOnMouseWheel: true,
zoomOnTimeAxisDoubleClick: false,
infiniteScroll: true,
useInitialAnimation: 'slide-from-left',
createEventOnDblClick: true,
features: {
stripe: true,
sort: 'list_order',
eventCopyPaste: {
generateNewName: (event) => event.name
},
eventDragSelect: true,
eventDragCreate: false,
eventResize: {
disabled: true,
},
timeRanges: false,
},
columns: [
{
type: "resourceInfo",
text: "Name",
field: "name",
showImage: false,
showEventCount: false,
width: 250,
locked: true,
},
],
crudManager: {
resourceStore: {
fields: ['id', 'name', 'list_order', 'color']
},
eventStore: {
fields: [
{name: "id", dataSource: "frontendId",},
{name: "backendId", type: "integer"},
{name: "startDate", dataSource: "start",},
{name: "endDate", dataSource: "end",},
{name: "resourceId", dataSource: "userId",},
{name: "wishTypeId", type: "integer"},
{name: "historic", type: "boolean", defaultValue: true},
{name: "note", type: "string"},
{name: "name", type: "string"},
{name: "schedule_id", type: "integer"},
{name: "plan_detail_id", type: "integer"},
{name: "color", type: "string"},
{name: "roomId", type: "integer"},
{name: "state", type: "string"},
{name: "staffing_mode", type: "string"},
{name: "preferred_user_ids", type: "array"},
{name: "allowed_room_collisions", type: "array"},
{name: "is_pinned", type: "boolean"},
{name: "durationUnit", defaultValue: "day"},
{name: "eventType", type: "string", defaultValue: "shift"},
]
},
stores: [wishTypes,],
autoLoad: true,
autoSync: true,
writeAllFields: true,
transport: {
load: {
url: `/api/scheduler/wishes/${teamId}`,
method: 'GET',
},
sync: {
url: `/api/scheduler/wishes/${teamId}`,
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-XSRF-TOKEN': decodeURIComponent(document.cookie.split(";").find(x => x.includes("XSRF")).trim().replace("XSRF-TOKEN=", ""))
}
}
},
validateResponse: true,
},
}
const wishRef: Ref<UnwrapRef<BryntumScheduler>> = ref(null);
return {
teamFilter,
wishesConfig,
wishRef,
}
}
}
</script>
<template>
<div id="wishes-view" v-if="teamFilter !== 0">
<bryntum-scheduler
ref="wishRef"
v-bind="wishesConfig" />
</div>
</template>
<style scoped>
#wishes-view {
display: flex;
flex-direction: row;
flex: 1 1 100%;
margin: 2px;
padding: 2px;
height: 100%;
}
</style>