40 lines
1.5 KiB
TypeScript
40 lines
1.5 KiB
TypeScript
|
|
/**
|
|||
|
|
* ColumnStylingDto tabanlı koşullu hücre/satır stilleri.
|
|||
|
|
* Grid, Tree ve Pivot aynı handler'ı kullanır.
|
|||
|
|
*/
|
|||
|
|
import type { GridDto } from '@/proxy/form/models'
|
|||
|
|
import { controlStyleCondition } from '../Utils'
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* `onCellPrepared` handler'ı üretir. Yapılandırılmış stil bulunmayan
|
|||
|
|
* liste formlarında hiç iş yapmaması için önceden filtreleme yapılır.
|
|||
|
|
*/
|
|||
|
|
export const createConditionalCellStyleHandler = (gridDto?: GridDto) => {
|
|||
|
|
const styledColumns = (gridDto?.columnFormats ?? [])
|
|||
|
|
.filter((colFormat) => colFormat.columnStylingDto?.length)
|
|||
|
|
.map((colFormat) => ({ fieldName: colFormat.fieldName, styles: colFormat.columnStylingDto }))
|
|||
|
|
|
|||
|
|
if (!styledColumns.length) {
|
|||
|
|
return undefined
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return (e: any) => {
|
|||
|
|
styledColumns.forEach(({ fieldName, styles }) => {
|
|||
|
|
styles.forEach((colStyle) => {
|
|||
|
|
// header, filter, data, group, summaries… her satır tipine stil verilebilir.
|
|||
|
|
if (e.rowType !== colStyle.rowType) return
|
|||
|
|
// Stil tüm satıra mı yoksa yalnızca ilgili kolona mı uygulanacak?
|
|||
|
|
if (!colStyle.useRow && e.column?.dataField !== fieldName) return
|
|||
|
|
if (colStyle.conditionValue && !controlStyleCondition(e.data, fieldName, colStyle)) return
|
|||
|
|
|
|||
|
|
if (colStyle.cssClassName) {
|
|||
|
|
e.cellElement.addClass(colStyle.cssClassName)
|
|||
|
|
}
|
|||
|
|
if (colStyle.cssStyles) {
|
|||
|
|
e.cellElement.attr('style', `${e.cellElement.attr('style')};${colStyle.cssStyles}`)
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|