Skip to content

Commit f4a2c91

Browse files
committed
Bringing back customRenderer
1 parent ef7ebe8 commit f4a2c91

27 files changed

Lines changed: 279 additions & 66 deletions

packages/angular/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@simple-table/angular",
3-
"version": "3.0.0-beta.15",
3+
"version": "3.0.0-beta.16",
44
"main": "dist/cjs/index.js",
55
"module": "dist/index.es.js",
66
"types": "dist/types/angular/src/index.d.ts",

packages/angular/src/buildVanillaConfig.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,11 @@ export function buildVanillaConfig(
2828
wrapAngularRenderer<P>(component, appRef, injector);
2929

3030
function transformColumnEditorConfig(cfg: AngularColumnEditorConfig): ColumnEditorConfig {
31-
const { rowRenderer, ...cfgRest } = cfg;
31+
const { rowRenderer, customRenderer, ...cfgRest } = cfg;
3232
return {
3333
...cfgRest,
3434
...(rowRenderer ? { rowRenderer: wrap(rowRenderer) as any } : {}),
35+
...(customRenderer ? { customRenderer: wrap(customRenderer) as any } : {}),
3536
};
3637
}
3738

packages/angular/src/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export type {
1515
AngularFooterRenderer,
1616
AngularHeaderDropdown,
1717
AngularColumnEditorRowRenderer,
18+
AngularColumnEditorCustomRenderer,
1819
AngularLoadingStateRenderer,
1920
AngularErrorStateRenderer,
2021
AngularEmptyStateRenderer,
@@ -36,6 +37,8 @@ export type {
3637
ColumnEditorConfig,
3738
ColumnEditorRowRenderer,
3839
ColumnEditorRowRendererComponents,
40+
ColumnEditorCustomRenderer,
41+
ColumnEditorCustomRendererProps,
3942
ColumnEditorRowRendererProps,
4043
ColumnEditorSearchFunction,
4144
ColumnType,

packages/angular/src/types.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import type {
1212
EmptyStateRendererProps,
1313
HeaderDropdownProps,
1414
ColumnEditorRowRendererProps,
15+
ColumnEditorCustomRendererProps,
1516
ColumnEditorConfig,
1617
IconsConfig,
1718
} from "simple-table-core";
@@ -31,13 +32,16 @@ export type AngularHeaderRenderer = Type<HeaderRendererProps>;
3132
export type AngularFooterRenderer = Type<FooterRendererProps>;
3233
export type AngularHeaderDropdown = Type<HeaderDropdownProps>;
3334
export type AngularColumnEditorRowRenderer = Type<ColumnEditorRowRendererProps>;
35+
export type AngularColumnEditorCustomRenderer = Type<ColumnEditorCustomRendererProps>;
3436
export type AngularLoadingStateRenderer = Type<LoadingStateRendererProps>;
3537
export type AngularErrorStateRenderer = Type<ErrorStateRendererProps>;
3638
export type AngularEmptyStateRenderer = Type<EmptyStateRendererProps>;
3739

3840
// ─── Column editor config override ───────────────────────────────────────────
39-
export interface AngularColumnEditorConfig extends Omit<ColumnEditorConfig, "rowRenderer"> {
41+
export interface AngularColumnEditorConfig
42+
extends Omit<ColumnEditorConfig, "rowRenderer" | "customRenderer"> {
4043
rowRenderer?: AngularColumnEditorRowRenderer;
44+
customRenderer?: AngularColumnEditorCustomRenderer;
4145
}
4246

4347
// ─── HeaderObject override ────────────────────────────────────────────────────
@@ -98,4 +102,5 @@ export type {
98102
EmptyStateRendererProps,
99103
HeaderDropdownProps,
100104
ColumnEditorRowRendererProps,
105+
ColumnEditorCustomRendererProps,
101106
};

packages/core/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "simple-table-core",
3-
"version": "3.0.0-beta.15",
3+
"version": "3.0.0-beta.16",
44
"main": "dist/cjs/index.js",
55
"module": "dist/index.es.js",
66
"types": "dist/src/index.d.ts",

packages/core/src/core/initialization/TableInitializer.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import { SimpleTableConfig } from "../../types/SimpleTableConfig";
22
import { CustomTheme, DEFAULT_CUSTOM_THEME } from "../../types/CustomTheme";
33
import { DEFAULT_COLUMN_EDITOR_CONFIG } from "../../types/ColumnEditorConfig";
4+
import { ColumnEditorRowRenderer } from "../../types/ColumnEditorRowRendererProps";
5+
import { ColumnEditorCustomRenderer } from "../../types/ColumnEditorCustomRendererProps";
46
import HeaderObject, { Accessor } from "../../types/HeaderObject";
57
import {
68
createAngleLeftIcon,
@@ -31,7 +33,8 @@ export interface MergedColumnEditorConfig {
3133
searchPlaceholder: string;
3234
allowColumnPinning: boolean;
3335
searchFunction?: (header: HeaderObject, searchText: string) => boolean;
34-
rowRenderer?: any;
36+
rowRenderer?: ColumnEditorRowRenderer;
37+
customRenderer?: ColumnEditorCustomRenderer;
3538
}
3639

3740
export class TableInitializer {
@@ -84,6 +87,7 @@ export class TableInitializer {
8487
DEFAULT_COLUMN_EDITOR_CONFIG.allowColumnPinning,
8588
searchFunction: config.columnEditorConfig?.searchFunction,
8689
rowRenderer: config.columnEditorConfig?.rowRenderer,
90+
customRenderer: config.columnEditorConfig?.customRenderer,
8791
};
8892
}
8993

packages/core/src/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ import type {
5555
ColumnEditorRowRenderer,
5656
ColumnEditorRowRendererComponents,
5757
} from "./types/ColumnEditorRowRendererProps";
58+
import type {
59+
ColumnEditorCustomRendererProps,
60+
ColumnEditorCustomRenderer,
61+
} from "./types/ColumnEditorCustomRendererProps";
5862
import type HeaderDropdownProps from "./types/HeaderDropdownProps";
5963
import type { HeaderDropdown } from "./types/HeaderDropdownProps";
6064
import type { RowButtonProps } from "./types/RowButton";
@@ -91,6 +95,8 @@ export type {
9195
CellValue,
9296
ChartOptions,
9397
ColumnEditorConfig,
98+
ColumnEditorCustomRenderer,
99+
ColumnEditorCustomRendererProps,
94100
ColumnEditorRowRenderer,
95101
ColumnEditorRowRendererComponents,
96102
ColumnEditorRowRendererProps,

packages/core/src/types/ColumnEditorConfig.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import HeaderObject from "./HeaderObject";
22
import { ColumnEditorRowRenderer } from "./ColumnEditorRowRendererProps";
3+
import { ColumnEditorCustomRenderer } from "./ColumnEditorCustomRendererProps";
34

45
/**
56
* Custom search function for filtering columns in the column editor
@@ -28,10 +29,12 @@ export interface ColumnEditorConfig {
2829
allowColumnPinning?: boolean;
2930
/** Custom renderer for column editor row layout to reposition icons and labels */
3031
rowRenderer?: ColumnEditorRowRenderer;
32+
/** Custom renderer for the entire column editor panel. Receives pre-built sections (search, list, reset) and headers. */
33+
customRenderer?: ColumnEditorCustomRenderer;
3134
}
3235

3336
export const DEFAULT_COLUMN_EDITOR_CONFIG: Required<
34-
Omit<ColumnEditorConfig, "searchFunction" | "rowRenderer">
37+
Omit<ColumnEditorConfig, "searchFunction" | "rowRenderer" | "customRenderer">
3538
> = {
3639
text: "Columns",
3740
searchEnabled: true,
@@ -43,4 +46,4 @@ export const DEFAULT_COLUMN_EDITOR_CONFIG: Required<
4346
export type MergedColumnEditorConfig = Required<
4447
Pick<ColumnEditorConfig, "text" | "searchEnabled" | "searchPlaceholder" | "allowColumnPinning">
4548
> &
46-
Pick<ColumnEditorConfig, "searchFunction" | "rowRenderer">;
49+
Pick<ColumnEditorConfig, "searchFunction" | "rowRenderer" | "customRenderer">;
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import type HeaderObject from "./HeaderObject";
2+
3+
export interface ColumnEditorCustomRendererProps {
4+
/** The current headers array */
5+
headers: HeaderObject[];
6+
/** Pre-built search input section, or null if search is disabled */
7+
searchSection: HTMLElement | null;
8+
/** Pre-built column list section with drag-and-drop, checkboxes, etc. */
9+
listSection: HTMLElement;
10+
/** Pre-built reset button section, or null if no default headers are configured */
11+
resetSection: HTMLElement | null;
12+
/** Function to reset columns to their default configuration */
13+
resetColumns?: () => void;
14+
}
15+
16+
export type ColumnEditorCustomRenderer = (
17+
props: ColumnEditorCustomRendererProps,
18+
) => HTMLElement | string | null;

0 commit comments

Comments
 (0)