Skip to content

Commit 78a4cda

Browse files
Widgets: make widget names unique
1 parent e227e60 commit 78a4cda

File tree

1 file changed

+33
-4
lines changed

1 file changed

+33
-4
lines changed

src/components/EditMenu.vue

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -472,7 +472,7 @@
472472
<v-btn
473473
type="flat"
474474
class="bg-[#FFFFFF33] text-white w-[95%]"
475-
@click="store.addWidget(WidgetType.CustomWidgetBase, store.currentView)"
475+
@click="store.addWidget(makeNewWidget(WidgetType.CustomWidgetBase), store.currentView)"
476476
>Add widget base
477477
</v-btn>
478478
</div>
@@ -714,7 +714,36 @@ const emit = defineEmits<{
714714
(e: 'update:editMode', editMode: boolean): void
715715
}>()
716716
717-
const availableWidgetTypes = computed(() =>
717+
const findUniqueName = (name: string): string => {
718+
let newName = name
719+
let i = 1
720+
const existingNames = store.currentView.widgets.map((widget) => widget.name)
721+
while (existingNames.includes(newName)) {
722+
newName = `${name} ${i}`
723+
i++
724+
}
725+
return newName
726+
}
727+
/*
728+
* Makes a new widget with an unique name
729+
*/
730+
const makeNewWidget = (widget: WidgetType, name?: string, options?: Record<string, any>): InternalWidgetSetupInfo => {
731+
const newName = name || widget
732+
return {
733+
name: findUniqueName(newName),
734+
component: widget,
735+
options: options || {},
736+
}
737+
}
738+
739+
const makeWidgetUnique = (widget: InternalWidgetSetupInfo): InternalWidgetSetupInfo => {
740+
return {
741+
...widget,
742+
name: findUniqueName(widget.name),
743+
}
744+
}
745+
746+
const availableInternalWidgets = computed(() =>
718747
Object.values(WidgetType).map((widgetType) => {
719748
return {
720749
component: widgetType,
@@ -1020,8 +1049,8 @@ const onRegularWidgetDragStart = (event: DragEvent): void => {
10201049
}
10211050
}
10221051
1023-
const onRegularWidgetDragEnd = (widgetType: ExtendedWidget): void => {
1024-
store.addWidget(widgetType, store.currentView)
1052+
const onRegularWidgetDragEnd = (widget: InternalWidgetSetupInfo): void => {
1053+
store.addWidget(makeWidgetUnique(widget), store.currentView)
10251054
10261055
const widgetCards = document.querySelectorAll('[draggable="true"]')
10271056
widgetCards.forEach((card) => {

0 commit comments

Comments
 (0)