@sheetwrite/core/adapterinterface
Event callbacks a host (a framework adapter, or any plain app) hangs off a grid's lifecycle.
The controller reads these fields live on every event — see
createGridController — so a host may swap any callback at any time by
mutating the fields of the object it passed in, without recreating the grid.
Every field is optional; a missing callback simply drops that event.
- Package
@sheetwrite/core/adapter- Source
packages/core/src/grid-controller.ts#L16
Members 7
onGridChange Forwarded from the grid's change event (a committed transaction).
onGridChange?(event: ChangeEventinterface ChangeEvent {
transaction: Transaction;
changes: CellChange[];
commitReason: CommitReason;
source: OperationSource;
epoch?: number;
}interface ChangeEvent {
transaction: Transaction;
changes: CellChange[];
commitReason: CommitReason;
source: OperationSource;
epoch?: number;
}interface ChangeEvent {
transaction: Transaction;
changes: CellChange[];
commitReason: CommitReason;
source: OperationSource;
epoch?: number;
}Payload of the change event; flows OUT for API submission/reconcile.API reference →): void;onSelectionChange Forwarded from the grid's selection event; null when nothing is selected.
onSelectionChange?(selection: Selectiontype Selection =
| { kind: "cell"; addr: CellAddress }
| { kind: "range"; range: Range }
| { kind: "row"; sheet: SheetId; row: number }
| { kind: "column"; sheet: SheetId; col: number }
| { kind: "multi"; ranges: Range[] };type Selection =
| { kind: "cell"; addr: CellAddress }
| { kind: "range"; range: Range }
| { kind: "row"; sheet: SheetId; row: number }
| { kind: "column"; sheet: SheetId; col: number }
| { kind: "multi"; ranges: Range[] };type Selection =
| {
kind: "cell";
addr: CellAddress;
}
| {
kind: "range";
range: Range;
}
| {
kind: "row";
sheet: SheetId;
row: number;
}
| {
kind: "column";
sheet: SheetId;
col: number;
}
// … 4 more lines — see the API reference
}Current cell, range, row, column, or multi-range selection.API reference → | null): void;onViewportChange Forwarded from the grid's scroll event.
onViewportChange?(event: GridEventsinterface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: {
selection: Selection | null;
};
scroll: {
scrollTop: number;
firstRow: number;
lastRow: number;
};
"edit-begin": {
addr: CellAddress;
};
"edit-commit": {
addr: CellAddress;
value: CellValue;
};
search: SearchResult;
"mutation-rejected": {
// … 21 more lines — see the API reference
}Payload map for events emitted by a Grid.API reference →["scroll"]): void;onEditBegin Forwarded when a cell editor opens.
onEditBegin?(event: GridEventsinterface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: {
selection: Selection | null;
};
scroll: {
scrollTop: number;
firstRow: number;
lastRow: number;
};
"edit-begin": {
addr: CellAddress;
};
"edit-commit": {
addr: CellAddress;
value: CellValue;
};
search: SearchResult;
"mutation-rejected": {
// … 21 more lines — see the API reference
}Payload map for events emitted by a Grid.API reference →["edit-begin"]): void;onEditCommit Forwarded after a cell editor commits.
onEditCommit?(event: GridEventsinterface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: {
selection: Selection | null;
};
scroll: {
scrollTop: number;
firstRow: number;
lastRow: number;
};
"edit-begin": {
addr: CellAddress;
};
"edit-commit": {
addr: CellAddress;
value: CellValue;
};
search: SearchResult;
"mutation-rejected": {
// … 21 more lines — see the API reference
}Payload map for events emitted by a Grid.API reference →["edit-commit"]): void;onSearch Forwarded whenever the active search result changes.
onSearch?(result: GridEventsinterface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: {
selection: Selection | null;
};
scroll: {
scrollTop: number;
firstRow: number;
lastRow: number;
};
"edit-begin": {
addr: CellAddress;
};
"edit-commit": {
addr: CellAddress;
value: CellValue;
};
search: SearchResult;
"mutation-rejected": {
// … 21 more lines — see the API reference
}Payload map for events emitted by a Grid.API reference →["search"]): void;onActiveSheetChange Forwarded after the visible sheet changes.
onActiveSheetChange?(event: GridEventsinterface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: {
selection: Selection | null;
};
scroll: {
scrollTop: number;
firstRow: number;
lastRow: number;
};
"edit-begin": {
addr: CellAddress;
};
"edit-commit": {
addr: CellAddress;
value: CellValue;
};
search: SearchResult;
"mutation-rejected": {
// … 21 more lines — see the API reference
}Payload map for events emitted by a Grid.API reference →["active-sheet"]): void;Declaration
View full TypeScript declaration
export interface GridControllerHandlers { onGridChange?(event: ChangeEventinterface ChangeEvent {
transaction: Transaction;
changes: CellChange[];
commitReason: CommitReason;
source: OperationSource;
epoch?: number;
}interface ChangeEvent {
transaction: Transaction;
changes: CellChange[];
commitReason: CommitReason;
source: OperationSource;
epoch?: number;
}interface ChangeEvent {
transaction: Transaction;
changes: CellChange[];
commitReason: CommitReason;
source: OperationSource;
epoch?: number;
}Payload of the change event; flows OUT for API submission/reconcile.API reference →): void; onSelectionChange?(selection: Selectiontype Selection =
| { kind: "cell"; addr: CellAddress }
| { kind: "range"; range: Range }
| { kind: "row"; sheet: SheetId; row: number }
| { kind: "column"; sheet: SheetId; col: number }
| { kind: "multi"; ranges: Range[] };type Selection =
| { kind: "cell"; addr: CellAddress }
| { kind: "range"; range: Range }
| { kind: "row"; sheet: SheetId; row: number }
| { kind: "column"; sheet: SheetId; col: number }
| { kind: "multi"; ranges: Range[] };type Selection =
| {
kind: "cell";
addr: CellAddress;
}
| {
kind: "range";
range: Range;
}
| {
kind: "row";
sheet: SheetId;
row: number;
}
| {
kind: "column";
sheet: SheetId;
col: number;
}
// … 4 more lines — see the API reference
}Current cell, range, row, column, or multi-range selection.API reference → | null): void; onViewportChange?(event: GridEventsinterface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: {
selection: Selection | null;
};
scroll: {
scrollTop: number;
firstRow: number;
lastRow: number;
};
"edit-begin": {
addr: CellAddress;
};
"edit-commit": {
addr: CellAddress;
value: CellValue;
};
search: SearchResult;
"mutation-rejected": {
// … 21 more lines — see the API reference
}Payload map for events emitted by a Grid.API reference →["scroll"]): void; onEditBegin?(event: GridEventsinterface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: {
selection: Selection | null;
};
scroll: {
scrollTop: number;
firstRow: number;
lastRow: number;
};
"edit-begin": {
addr: CellAddress;
};
"edit-commit": {
addr: CellAddress;
value: CellValue;
};
search: SearchResult;
"mutation-rejected": {
// … 21 more lines — see the API reference
}Payload map for events emitted by a Grid.API reference →["edit-begin"]): void; onEditCommit?(event: GridEventsinterface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: {
selection: Selection | null;
};
scroll: {
scrollTop: number;
firstRow: number;
lastRow: number;
};
"edit-begin": {
addr: CellAddress;
};
"edit-commit": {
addr: CellAddress;
value: CellValue;
};
search: SearchResult;
"mutation-rejected": {
// … 21 more lines — see the API reference
}Payload map for events emitted by a Grid.API reference →["edit-commit"]): void; onSearch?(result: GridEventsinterface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: {
selection: Selection | null;
};
scroll: {
scrollTop: number;
firstRow: number;
lastRow: number;
};
"edit-begin": {
addr: CellAddress;
};
"edit-commit": {
addr: CellAddress;
value: CellValue;
};
search: SearchResult;
"mutation-rejected": {
// … 21 more lines — see the API reference
}Payload map for events emitted by a Grid.API reference →["search"]): void; onActiveSheetChange?(event: GridEventsinterface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: { selection: Selection | null };
scroll: { scrollTop: number; firstRow: number; lastRow: number };
"edit-begin": { addr: CellAddress };
"edit-commit": { addr: CellAddress; value: CellValue };
search: SearchResult;
"mutation-rejected": { issues: MutationIssue[] };
"active-sheet": { sheet: SheetId };
"renderer-fallback": { requested: "worker"; error: unknown };
"datasource-error": {
request: Omit<DataSourceRequest, "signal">;
error: unknown;
};
"export-error": { format: "xlsx"; error: unknown };
}interface GridEvents {
change: ChangeEvent;
selection: {
selection: Selection | null;
};
scroll: {
scrollTop: number;
firstRow: number;
lastRow: number;
};
"edit-begin": {
addr: CellAddress;
};
"edit-commit": {
addr: CellAddress;
value: CellValue;
};
search: SearchResult;
"mutation-rejected": {
// … 21 more lines — see the API reference
}Payload map for events emitted by a Grid.API reference →["active-sheet"]): void;}