Skip to content

Commit

Permalink
fix: gridstack should drive removing widgets/tiles
Browse files Browse the repository at this point in the history
  • Loading branch information
filipgutica committed Feb 12, 2025
1 parent 1d3ffc5 commit 09cf80f
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
:config="dashboardConfig"
:context="context"
@edit-tile="onEditTile"
@remove-tile="onRemoveTile"
@update-tiles="onUpdateTiles"
>
<template #slot-1>
Expand Down Expand Up @@ -409,11 +408,6 @@ const addTile = () => {
})
}
const onRemoveTile = (tile: GridTile<TileDefinition>) => {
console.log('@remove-tile', tile)
dashboardConfig.value.tiles = dashboardConfig.value.tiles.filter((_, i) => i !== tile.id)
}
const onUpdateTiles = (tiles: TileConfig[]) => {
console.log('@update-tiles', tiles)
dashboardConfig.value.tiles = tiles
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<component
:is="canEdit ? DraggableGridLayout : GridLayout"
v-else
ref="gridLayoutRef"
:grid-size="config.gridSize"
:tile-height="config.tileHeight"
:tiles="gridTiles"
Expand Down Expand Up @@ -44,9 +45,11 @@ import type { DashboardRendererContext, DashboardRendererContextInternal, GridTi
import type { DashboardConfig, TileConfig, TileDefinition } from '@kong-ui-public/analytics-utilities'
import DashboardTile from './DashboardTile.vue'
import { computed, inject, ref } from 'vue'
import type { ComponentPublicInstance } from 'vue'
import composables from '../composables'
import GridLayout from './layout/GridLayout.vue'
import DraggableGridLayout from './layout/DraggableGridLayout.vue'
import type { DraggableGridLayoutExpose } from './layout/DraggableGridLayout.vue'
import type { AnalyticsBridge, TimeRangeV4 } from '@kong-ui-public/analytics-utilities'
import {
DEFAULT_TILE_HEIGHT,
Expand All @@ -67,12 +70,12 @@ const props = withDefaults(defineProps<{
const emit = defineEmits<{
(e: 'edit-tile', tile: GridTile<TileDefinition>): void
(e: 'remove-tile', tile: GridTile<TileDefinition>): void
(e: 'update-tiles', tiles: TileConfig[]): void
}>()
const { i18n } = composables.useI18n()
const refreshCounter = ref(0)
const gridLayoutRef = ref<ComponentPublicInstance<DraggableGridLayoutExpose> | null>(null)
// Note: queryBridge is not directly used by the DashboardRenderer component. It is required by many of the
// subcomponents that get rendered in the dashboard, however. Check for its existence here in order to catch
Expand Down Expand Up @@ -180,7 +183,9 @@ const onEditTile = (tile: GridTile<TileDefinition>) => {
}
const onRemoveTile = (tile: GridTile<TileDefinition>) => {
emit('remove-tile', tile)
if (gridLayoutRef.value) {
gridLayoutRef.value.removeWidget(tile.id)
}
}
const refreshTiles = () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ import type { GridSize, GridTile } from 'src/types'
import 'gridstack/dist/gridstack.min.css'
import 'gridstack/dist/gridstack-extra.min.css'
export type DraggableGridLayoutExpose = {
removeWidget: (id: number | string) => void
}
const props = withDefaults(defineProps<{
tiles: GridTile<T>[],
gridSize: GridSize,
Expand Down Expand Up @@ -122,6 +126,18 @@ watch(() => props.tiles, async (tiles) => {
}
}, { deep: true })
const removeWidget = (id: number | string) => {
if (grid && gridContainer.value) {
const el = gridContainer.value.querySelector(`#tile-${id}`) as HTMLElement
if (el) {
grid.removeWidget(el)
grid.compact('compact', false)
}
}
}
defineExpose({ removeWidget })
</script>

<style lang="scss" scoped>
Expand Down

0 comments on commit 09cf80f

Please sign in to comment.