import React from "react";
import type { Theme } from "../../common/styles.js";
import { DataEditorAll as DataEditor } from "../../data-editor-all.js";
import {
BeautifulWrapper,
Description,
PropName,
useMockDataGenerator,
defaultProps,
clearCell,
} from "../../data-editor/stories/utils.js";
import { GridColumnIcon, type GridColumn } from "../../internal/data-grid/data-grid-types.js";
import { SimpleThemeWrapper } from "../../stories/story-utils.js";
export default {
title: "Glide-Data-Grid/DataEditor Demos",
decorators: [
(Story: React.ComponentType) => (
You can customize the trailing row in each column by setting a{" "}
trailingRowOptions in your columns.
}>
),
],
};
const trailingRowOptionsColumnIndexesHint: Record = {
2: "Smol text",
3: "Add",
5: "New",
};
const trailingRowOptionsColumnIndexesIcon: Record = {
2: GridColumnIcon.HeaderArray,
3: GridColumnIcon.HeaderEmoji,
5: GridColumnIcon.HeaderNumber,
};
const trailingRowOptionsColumnIndexesTarget: Record = {
2: 0,
3: 0,
5: 0,
};
const trailingRowOptionsColumnIndexesDisabled: Record = {
3: true,
};
const trailingRowOptionsColumnIndexesTheme: Record> = {
2: {
baseFontStyle: "10px",
},
};
export const TrailingRowOptions: React.VFC = () => {
const { cols, getCellContent, setCellValueRaw, setCellValue } = useMockDataGenerator(60, false);
const [numRows, setNumRows] = React.useState(50);
const onRowAppended = React.useCallback(() => {
const newRow = numRows;
for (let c = 0; c < 6; c++) {
const cell = getCellContent([c, newRow]);
setCellValueRaw([c, newRow], clearCell(cell));
}
setNumRows(cv => cv + 1);
}, [getCellContent, numRows, setCellValueRaw]);
const columnsWithRowOptions: GridColumn[] = React.useMemo(() => {
return cols.map((c, idx) => ({
...c,
trailingRowOptions: {
hint: trailingRowOptionsColumnIndexesHint[idx],
addIcon: trailingRowOptionsColumnIndexesIcon[idx],
targetColumn: trailingRowOptionsColumnIndexesTarget[idx],
disabled: trailingRowOptionsColumnIndexesDisabled[idx],
themeOverride: trailingRowOptionsColumnIndexesTheme[idx],
},
}));
}, [cols]);
return (
);
};