Skip to content

Commit

Permalink
Merge pull request #49 from CompositionalIT/SSRM
Browse files Browse the repository at this point in the history
Server Side Row Model
  • Loading branch information
Larocceau authored Feb 5, 2025
2 parents 8e45ca8 + b4d2399 commit df363ee
Showing 1 changed file with 101 additions and 11 deletions.
112 changes: 101 additions & 11 deletions src/AgGrid.fs
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ type IRowNode<'row> = {
isHovered: bool
isFullWidthCell: bool
isSelected: bool
level: int
}

[<Erase>]
Expand Down Expand Up @@ -659,6 +660,88 @@ type AgGrid<'row> =

module Enterprise =

type LoadSuccessParams<'row> = { rowData: 'row array; rowCount: int }

type ColV0 = {
id: string
displayName: string
field: string option
aggFunc: string option
}

type SortModelItem = { colId: string; sort: string }

[<StringEnum(caseRules = CaseRules.SnakeCaseAllCaps)>]
type JoinOperator =
| Or
| And

[<StringEnum>]
type FilterType =
| Empty
| Equals
| NotEqual
| LessThan
| LessThanOrEqual
| GreaterThan
| GreaterThanOrEqual
| InRange
| Contains
| NotContains
| StartsWith
| EndsWith
| Blank
| NotBlank

[<Erase>]
type IFilterCondition =
abstract member ``type``: FilterType with get, set
abstract member filter: string option with get, set
abstract member filterTo: string option with get, set
abstract member dateFrom: string option with get, set
abstract member dateTo: string option with get, set

[<Erase>]
type IFilterModel =
inherit IFilterCondition
abstract member filterType: string with get, set
abstract member operator: JoinOperator option with get, set
abstract member conditions: IFilterCondition array option with get, set

[<Erase>]
type FilterModelMap =
[<EmitIndexer>]
abstract member Item: string -> IFilterModel option

type ServerSideGetRowsRequest = {
startRow: int option
endRow: int option
groupKeys: obj array
rowGroupCols: ColV0 array
valueCols: ColV0 array
sortModel: SortModelItem array
filterModel: FilterModelMap
}

type ServerSideGetRowsParams<'row> = {
request: ServerSideGetRowsRequest
success: LoadSuccessParams<'row> -> unit
fail: unit -> unit
api: IGridApi<'row>
parentNode: IRowNode<'row>
}

type ServerSideDataSource<'row> = {
getRows: ServerSideGetRowsParams<'row> -> unit
destroy: unit -> unit
}

/// There are more supported types, but only these are supported by Feliz.Aggrid
[<StringEnum>]
type RowModelType =
| ClientSide
| ServerSide

[<RequireQualifiedAccess>]
type RowFilter =
| Number
Expand Down Expand Up @@ -789,20 +872,9 @@ type AgGrid<'row> =

[<Erase>]
type AgGrid<'row> =
static member inline rowGroupPanelShow(v: RowGroupPanelShow) =
agGridProp<'row> ("rowGroupPanelShow", v.RowGroupPanelShowText)

static member inline groupDisplayType(v: RowGroupingDisplayType) =
agGridProp<'row> ("groupDisplayType", v.RowGroupingDisplayTypeText)

static member inline autoGroupColumnDef(values: IColumnDefProp<'row, 'value> seq) =
agGridProp ("autoGroupColumnDef", values |> unbox<_ seq> |> createObj)

static member inline pivotMode(v: bool) = agGridProp<'row> ("pivotMode", v)

static member inline getDataPath( v: 'row -> string array) = agGridProp<'row> ("getDataPath", v)
static member inline treeData(v: bool) = agGridProp<'row> ("treeData", v)

static member inline getContextMenuItems(callback: int -> int -> MenuItem list) =
agGridProp<'row> (
"getContextMenuItems",
Expand All @@ -816,3 +888,21 @@ type AgGrid<'row> =
| Custom customMenuItem -> box customMenuItem
|]
)

static member inline getDataPath( v: 'row -> string array) = agGridProp<'row> ("getDataPath", v)

static member inline groupDisplayType(v: RowGroupingDisplayType) =
agGridProp<'row> ("groupDisplayType", v.RowGroupingDisplayTypeText)

static member inline pivotMode(v: bool) = agGridProp<'row> ("pivotMode", v)

static member inline rowGroupPanelShow(v: RowGroupPanelShow) =
agGridProp<'row> ("rowGroupPanelShow", v.RowGroupPanelShowText)

static member inline serverSideDataSource<'row>(v: ServerSideDataSource<'row>) =
agGridProp<'row> ("serverSideDatasource", v)

static member inline serverSideOnlyRefreshFilteredGroups<'row>(v: bool) =
agGridProp<'row> ("serverSideOnlyRefreshFilteredGroups", v)

static member inline treeData(v: bool) = agGridProp<'row> ("treeData", v)

0 comments on commit df363ee

Please sign in to comment.