improve row update of aggrid table actions

This commit is contained in:
Ruben Fiszel
2024-08-15 12:07:18 +02:00
parent 20905cee00
commit 8114c95084
3 changed files with 46 additions and 12 deletions

View File

@@ -202,7 +202,7 @@
['ContextPanel', contextPanel]
])
new AppAggridTableActions({
let ta = new AppAggridTableActions({
target: c.eGui,
props: {
id: id,
@@ -239,6 +239,15 @@
},
context: componentContext
})
return {
destroy: () => {
ta.$destroy()
},
refresh(params) {
ta.$set({ rowIndex: params.node.rowIndex ?? 0, row: params.data })
}
}
})
function mountGrid() {

View File

@@ -39,6 +39,14 @@
const parent = rowDiv.parentElement?.parentElement?.parentElement
if (parent) {
parent.classList.add('w-full')
} else {
//sometimes the parent is not available immediately
setTimeout(() => {
const parent = rowDiv?.parentElement?.parentElement?.parentElement
if (parent) {
parent.classList.add('w-full')
}
}, 10)
}
}
})

View File

@@ -11,18 +11,21 @@ import type { ICellRendererComp, ICellRendererParams } from 'ag-grid-community'
*/
export abstract class AbstractCellRenderer implements ICellRendererComp {
eGui: any
protected value: any
protected params: any
protected component:
| {
refresh: (params: ICellRendererParams) => void
destroy: () => void
}
| undefined
constructor(parentElement = 'span') {
// create empty span (or other element) to place svelte component in
this.component = undefined
this.eGui = document.createElement(parentElement)
}
init(params: ICellRendererParams & { onClick?: (data: any) => void }) {
this.value = params.value
this.createComponent(params)
this.component = this.createComponent(params)
this.eGui.addEventListener('click', () => params.onClick?.(params.data))
this.params = params
}
getGui() {
@@ -30,11 +33,13 @@ export abstract class AbstractCellRenderer implements ICellRendererComp {
}
refresh(params: ICellRendererParams) {
this.value = params.value
this.component?.refresh?.(params)
return true
}
destroy(): void {
this.component?.destroy?.()
}
/**
* Define and create the svelte component to use in the cell
* @example
@@ -48,7 +53,10 @@ export abstract class AbstractCellRenderer implements ICellRendererComp {
* }
* @param params params for rendering the call, including the value for the cell
*/
abstract createComponent(params: ICellRendererParams): void
abstract createComponent(params: ICellRendererParams): {
refresh: (params: ICellRendererParams) => void
destroy: () => void
}
}
/**
@@ -58,11 +66,20 @@ export abstract class AbstractCellRenderer implements ICellRendererComp {
* @returns
*/
export function cellRendererFactory(
svelteComponent: (cell: AbstractCellRenderer, params: ICellRendererParams) => void
svelteComponent: (
cell: AbstractCellRenderer,
params: ICellRendererParams
) => {
refresh: (params: ICellRendererParams) => void
destroy: () => void
}
) {
class Renderer extends AbstractCellRenderer {
createComponent(params: ICellRendererParams<any, any>): void {
svelteComponent(this, params)
createComponent(params: ICellRendererParams<any, any>): {
refresh: (params: ICellRendererParams) => void
destroy: () => void
} {
return svelteComponent(this, params)
}
}
return Renderer