Skip to content

Commit 4eff160

Browse files
authored
Merge pull request #728 from revolist/provider-core
feat: improved providers core with column
2 parents 43749f3 + c69c69d commit 4eff160

5 files changed

Lines changed: 33 additions & 14 deletions

File tree

src/components.d.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* It contains typing information for all components that exist in this project.
66
*/
77
import { HTMLStencilElement, JSXBase } from "@stencil/core/internal";
8-
import { AdditionalData, AfterEditEvent, AllDimensionType, ApplyFocusEvent, BeforeCellRenderEvent, BeforeEdit, BeforeRangeSaveDataDetails, BeforeRowRenderEvent, BeforeSaveDataDetails, Cell, CellTemplateProp, ChangedRange, ColumnDataSchemaModel, ColumnGrouping, ColumnProp, ColumnRegular, ColumnType, DataFormat, DataType, DimensionCols, DimensionRows, DimensionSettingsState, DimensionType, DimensionTypeCol, DragStartEvent, EditCell, EditorCtr, Editors, ElementScroll, ExtraNodeFuncConfig, FocusAfterRenderEvent, FocusRenderEvent, FocusTemplateFunc, InitialHeaderClick, MultiDimensionType, Nullable, PluginBaseComponent, PositionItem, Providers, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowDragStartDetails, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, Theme, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
8+
import { AdditionalData, AfterEditEvent, AllDimensionType, ApplyFocusEvent, BeforeCellRenderEvent, BeforeEdit, BeforeRangeSaveDataDetails, BeforeRowRenderEvent, BeforeSaveDataDetails, Cell, CellTemplateProp, ChangedRange, ColumnDataSchemaModel, ColumnGrouping, ColumnProp, ColumnRegular, ColumnType, DataFormat, DataType, DimensionCols, DimensionRows, DimensionSettingsState, DimensionType, DimensionTypeCol, DragStartEvent, EditCell, EditorCtr, Editors, ElementScroll, ExtraNodeFuncConfig, FocusAfterRenderEvent, FocusRenderEvent, FocusTemplateFunc, InitialHeaderClick, MultiDimensionType, Nullable, PluginBaseComponent, PositionItem, ProvidersColumns, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowDragStartDetails, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, Theme, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
99
import { GridPlugin } from "./plugins/base.plugin";
1010
import { AutoSizeColumnConfig } from "./plugins/column.auto-size.plugin";
1111
import { ColumnFilterConfig, FilterCaptions, FilterCollectionItem, LogicFunction, MultiFilterItem, ShowData } from "./plugins/filter/filter.types";
@@ -21,7 +21,7 @@ import { ResizeProps } from "./components/header/resizable.directive";
2121
import { HeaderRenderProps } from "./components/header/header-renderer";
2222
import { HeaderGroupRendererProps } from "./components/header/header-group-renderer";
2323
import { EventData } from "./components/overlay/selection.utils";
24-
export { AdditionalData, AfterEditEvent, AllDimensionType, ApplyFocusEvent, BeforeCellRenderEvent, BeforeEdit, BeforeRangeSaveDataDetails, BeforeRowRenderEvent, BeforeSaveDataDetails, Cell, CellTemplateProp, ChangedRange, ColumnDataSchemaModel, ColumnGrouping, ColumnProp, ColumnRegular, ColumnType, DataFormat, DataType, DimensionCols, DimensionRows, DimensionSettingsState, DimensionType, DimensionTypeCol, DragStartEvent, EditCell, EditorCtr, Editors, ElementScroll, ExtraNodeFuncConfig, FocusAfterRenderEvent, FocusRenderEvent, FocusTemplateFunc, InitialHeaderClick, MultiDimensionType, Nullable, PluginBaseComponent, PositionItem, Providers, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowDragStartDetails, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, Theme, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
24+
export { AdditionalData, AfterEditEvent, AllDimensionType, ApplyFocusEvent, BeforeCellRenderEvent, BeforeEdit, BeforeRangeSaveDataDetails, BeforeRowRenderEvent, BeforeSaveDataDetails, Cell, CellTemplateProp, ChangedRange, ColumnDataSchemaModel, ColumnGrouping, ColumnProp, ColumnRegular, ColumnType, DataFormat, DataType, DimensionCols, DimensionRows, DimensionSettingsState, DimensionType, DimensionTypeCol, DragStartEvent, EditCell, EditorCtr, Editors, ElementScroll, ExtraNodeFuncConfig, FocusAfterRenderEvent, FocusRenderEvent, FocusTemplateFunc, InitialHeaderClick, MultiDimensionType, Nullable, PluginBaseComponent, PositionItem, ProvidersColumns, RangeArea, RangeClipboardCopyEventProps, RangeClipboardPasteEvent, RowDefinition, RowDragStartDetails, RowHeaders, SaveDataDetails, SelectionStoreState, TempRange, Theme, ViewportData, ViewPortResizeEvent, ViewPortScrollEvent, ViewportState, ViewSettingSizeProp } from "./types/index";
2525
export { GridPlugin } from "./plugins/base.plugin";
2626
export { AutoSizeColumnConfig } from "./plugins/column.auto-size.plugin";
2727
export { ColumnFilterConfig, FilterCaptions, FilterCollectionItem, LogicFunction, MultiFilterItem, ShowData } from "./plugins/filter/filter.types";
@@ -1067,7 +1067,7 @@ declare global {
10671067
"headerdblclick": InitialHeaderClick;
10681068
"beforeheaderrender": HeaderRenderProps;
10691069
"beforegroupheaderrender": HeaderGroupRendererProps;
1070-
"afterheaderrender": Providers<DimensionCols | 'rowHeaders'>;
1070+
"afterheaderrender": ProvidersColumns;
10711071
}
10721072
interface HTMLRevogrHeaderElement extends Components.RevogrHeader, HTMLStencilElement {
10731073
addEventListener<K extends keyof HTMLRevogrHeaderElementEventMap>(type: K, listener: (this: HTMLRevogrHeaderElement, ev: RevogrHeaderCustomEvent<HTMLRevogrHeaderElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
@@ -1938,7 +1938,7 @@ declare namespace LocalJSX {
19381938
/**
19391939
* After all header cells rendered. Finalizes cell rendering.
19401940
*/
1941-
"onAfterheaderrender"?: (event: RevogrHeaderCustomEvent<Providers<DimensionCols | 'rowHeaders'>>) => void;
1941+
"onAfterheaderrender"?: (event: RevogrHeaderCustomEvent<ProvidersColumns>) => void;
19421942
/**
19431943
* Before each group header cell render function. Allows to override group header cell properties
19441944
*/

src/components/data/revogr-data.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,10 @@ export class RevogrData {
172172
// make sure we have correct data, before render
173173
this.providers = {
174174
type: this.type,
175+
colType: this.colType,
175176
readonly: this.readonly,
176177
data: this.dataStore,
178+
columns: this.colData,
177179
viewport: this.viewportCol,
178180
dimension: this.dimensionRow,
179181
selection: this.rowSelectionStore,

src/components/header/header-group-renderer.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { h } from '@stencil/core';
22
import { Group } from '@store';
3-
import type { CellProps, Providers, DimensionCols } from '@type';
3+
import type { CellProps, ProvidersColumns } from '@type';
44
import { ResizeEvent, ResizeProps } from './resizable.directive';
55
import { HEADER_CLASS, MIN_COL_SIZE } from '../../utils/consts';
66
import { HeaderCellRenderer } from './header-cell-renderer';
@@ -9,7 +9,7 @@ export type HeaderGroupRendererProps = {
99
start: number;
1010
end: number;
1111
group: Group;
12-
providers: Providers<DimensionCols | 'rowHeaders'>;
12+
providers: ProvidersColumns;
1313
additionalData: any;
1414
canResize?: boolean;
1515
onResize?(e: ResizeEvent): void;

src/components/header/revogr-header.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ import type {
1717
ColumnRegular,
1818
DimensionSettingsState,
1919
InitialHeaderClick,
20-
Providers,
2120
ViewportState,
2221
ViewSettingSizeProp,
2322
DimensionCols,
2423
SelectionStoreState,
2524
RangeArea,
2625
VirtualPositionItem,
26+
ProvidersColumns,
2727
} from '@type';
2828
import type { Observable } from '../../utils';
2929
import GroupHeaderRenderer, {
@@ -137,7 +137,7 @@ export class RevogrHeaderComponent {
137137
* After all header cells rendered. Finalizes cell rendering.
138138
*/
139139
@Event({ eventName: 'afterheaderrender' })
140-
afterHeaderRender: EventEmitter<Providers<DimensionCols | 'rowHeaders'>>;
140+
afterHeaderRender: EventEmitter<ProvidersColumns>;
141141

142142
// #endregion
143143

@@ -269,7 +269,7 @@ export class RevogrHeaderComponent {
269269
return groupRow;
270270
}
271271

272-
get providers(): Providers<DimensionCols | 'rowHeaders'> {
272+
get providers(): ProvidersColumns<DimensionCols | 'rowHeaders'> {
273273
return {
274274
type: this.type,
275275
readonly: this.readonly,

src/types/interfaces.ts

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ export interface ColumnTemplateProp extends ColumnRegular {
257257
/**
258258
* Providers injected into the template.
259259
*/
260-
providers: Providers<DimensionCols | 'rowHeaders'>;
260+
providers: ProvidersColumns;
261261
/**
262262
* Index of the column, used for mapping value to cell from data source model/row.
263263
*/
@@ -280,23 +280,40 @@ export type CellProps = JSXBase.HTMLAttributes<HTMLDivElement> & {
280280
[attr: string]: string | number | object | boolean | undefined;
281281
};
282282

283+
/**
284+
* Providers for columns which are going to be injected into each header renderer
285+
*/
286+
export interface ProvidersColumns<T = DimensionCols | 'rowHeaders'> extends Omit<Providers<T>, 'data' | 'columns' | 'colType'> {
287+
/**
288+
* Column data source store
289+
*/
290+
data: ColumnRegular[];
291+
}
283292

284293
/**
285294
* Providers for grid which are going to be injected into each cell template
286295
*/
287-
export type Providers<T = DimensionRows> = {
296+
export interface Providers<T = DimensionRows> {
288297
/**
289298
* Dimension type (e.g. row or column)
290299
*/
291300
type: T;
301+
/**
302+
* Dimension type (e.g. row or column)
303+
*/
304+
colType: DimensionCols | 'rowHeaders';
292305
/**
293306
* Flag indicating if grid is in readonly mode
294307
*/
295308
readonly: boolean;
296309
/**
297310
* Data source store
298311
*/
299-
data: Observable<DataSourceState<any, any>> | ColumnRegular[];
312+
data: Observable<DataSourceState<any, any>>;
313+
/**
314+
* Column data source store
315+
*/
316+
columns: Observable<DataSourceState<ColumnRegular, DimensionCols>>;
300317
/**
301318
* Viewport store
302319
*/
@@ -309,7 +326,7 @@ export type Providers<T = DimensionRows> = {
309326
* Selection store
310327
*/
311328
selection: Observable<SelectionStoreState>;
312-
};
329+
}
313330
/**
314331
* `HyperFunc` is a function that takes an HTML tag or component, and returns a
315332
* JSX element. This function is used to create JSX elements in a context where
@@ -498,7 +515,7 @@ export type InitialHeaderClick = {
498515
* The column that was clicked.
499516
*/
500517
column: ColumnRegular;
501-
providers: Providers<DimensionCols | 'rowHeaders'>;
518+
providers: ProvidersColumns;
502519
};
503520

504521
/**

0 commit comments

Comments
 (0)