ColumnConfig.fromJson constructor

ColumnConfig.fromJson(
  1. Map<String, dynamic> json
)

Parse from visualResponse JSON

Implementation

factory ColumnConfig.fromJson(Map<String, dynamic> json) {
  // Parse nested columns if present
  List<ColumnConfig>? nestedColumns;
  if (json['columns'] is List) {
    nestedColumns = (json['columns'] as List)
        .whereType<Map<String, dynamic>>()
        .map((colJson) => ColumnConfig.fromJson(colJson))
        .toList();
  }

  // Match Angular: column.field = column.field ? column.field : column.title
  // For chart columns, Angular falls back field to title when field is not provided
  final rawField = json['field']?.toString() ?? '';
  final rawTitle = json['title']?.toString() ?? '';
  final columnType = json['columnType']?.toString() ?? 'stringColumn';
  final field = (rawField.isNotEmpty) ? rawField
      : (columnType == 'chartColumn' ? rawTitle : rawField);

  return ColumnConfig(
    field: field,
    title: rawTitle,
    columnType: columnType,
    headerSort: _parseBooleanValue(json['headerSort'], defaultValue: true),
    resizable: _parseBooleanValue(json['resizable'], defaultValue: true),
    width: _parseWidth(json['fixedColumnWidth']),
    hozAlign: json['hozAlign']?.toString() ?? 'left',
    sorter: json['sorter']?.toString(),
    headerWordWrap: _parseBooleanValue(json['headerWordWrap'], defaultValue: true),
    formatterParams: _parseFormatterParams(json['formatterParams']),
    headerFilter: _parseHeaderFilter(json['headerFilter']),
    headerFilterPlaceholder: json['headerFilterPlaceholder']?.toString(),
    columns: nestedColumns,
  );
}