Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add Custom Global Item Data Provider
Browse files Browse the repository at this point in the history
ghiscoding committed Jan 11, 2025
1 parent a04fb21 commit 94b8cd8
Showing 3 changed files with 23 additions and 8 deletions.
22 changes: 16 additions & 6 deletions packages/common/src/core/slickDataview.ts
Original file line number Diff line number Diff line change
@@ -7,6 +7,7 @@ import type {
Grouping,
GroupingFormatterItem,
ItemMetadata,
ItemMetadataProvider,
OnGroupCollapsedEventArgs,
OnGroupExpandedEventArgs,
OnRowCountChangedEventArgs,
@@ -27,6 +28,9 @@ export interface DataViewOption {
*/
inlineFilters: boolean;

/** global override for all rows */
globalItemMetadataProvider: ItemMetadataProvider | null;

/** Optionally provide a GroupItemMetadataProvider in order to use Grouping/DraggableGrouping features */
groupItemMetadataProvider: SlickGroupItemMetadataProvider | null;

@@ -52,6 +56,7 @@ export type GroupGetterFn = (val: any) => string | number;
*/
export class SlickDataView<TData extends SlickDataItem = any> implements CustomDataView {
protected defaults: DataViewOption = {
globalItemMetadataProvider: null,
groupItemMetadataProvider: null,
inlineFilters: false,
useCSPSafeFilter: false,
@@ -749,20 +754,25 @@ export class SlickDataView<TData extends SlickDataItem = any> implements CustomD
return item;
}

getItemMetadata(i: number): ItemMetadata | null {
const item = this.rows[i];
getItemMetadata(row: number): ItemMetadata | null {
const item = this.rows[row];
if (item === undefined) {
return null;
}

// global override for all regular rows
if (this._options.globalItemMetadataProvider?.getRowMetadata) {
return this._options.globalItemMetadataProvider.getRowMetadata(item, row);
}

// overrides for grouping rows
if ((item as SlickGroup).__group) {
return this._options.groupItemMetadataProvider!.getGroupRowMetadata(item as GroupingFormatterItem);
if ((item as SlickGroup).__group && this._options.groupItemMetadataProvider?.getGroupRowMetadata) {
return this._options.groupItemMetadataProvider.getGroupRowMetadata(item as GroupingFormatterItem, row);
}

// overrides for totals rows
if ((item as SlickGroupTotals).__groupTotals) {
return this._options.groupItemMetadataProvider!.getTotalsRowMetadata(item as { group: GroupingFormatterItem });
if ((item as SlickGroupTotals).__groupTotals && this._options.groupItemMetadataProvider?.getTotalsRowMetadata) {
return this._options.groupItemMetadataProvider.getTotalsRowMetadata(item as { group: GroupingFormatterItem }, row);
}

return null;
Original file line number Diff line number Diff line change
@@ -85,7 +85,7 @@ export class SlickGroupItemMetadataProvider implements SlickPlugin {
this._options = { ...this._options, ...inputOptions };
}

getGroupRowMetadata(item: GroupingFormatterItem): ItemMetadata {
getGroupRowMetadata(item: GroupingFormatterItem, _row: number): ItemMetadata {
return {
selectable: false,
focusable: this._options.groupFocusable,
@@ -101,7 +101,8 @@ export class SlickGroupItemMetadataProvider implements SlickPlugin {
};
}

getTotalsRowMetadata(item: { group: GroupingFormatterItem }): {
// prettier-ignore
getTotalsRowMetadata(item: { group: GroupingFormatterItem }, _row: number): {
selectable: boolean;
focusable: boolean | undefined;
cssClasses: string;
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
import type { Formatter } from './formatter.interface.js';
import type { SlickCheckboxSelectColumn } from '../extensions/slickCheckboxSelectColumn.js';

export interface ItemMetadataProvider {
getRowMetadata(item: any, row: number): any;
}

export interface GroupItemMetadataProviderOption {
/** Whether or not we want to use group select checkbox. */
checkboxSelect?: boolean;

0 comments on commit 94b8cd8

Please sign in to comment.