Dive into secure and efficient coding practices with our curated list of the top 10 examples showcasing 'slickgrid' in functional components in JavaScript. Our advanced machine learning engine meticulously scans each line of code, cross-referencing millions of open source libraries to ensure your implementation is not just functional, but also robust and secure. Elevate your React applications to new heights by mastering the art of handling side effects, API calls, and asynchronous operations with confidence and precision.
args.node.tabIndex = 0;
});
// Unbind the slickgrid key handler from the canvas code
// We want to keep EnableCellNavigation on so that we can use the slickgrid
// public navigations functions, but we don't want the slickgrid keyhander
// to eat tab keys and prevent us from tabbing to input boxes or column headers
const canvasElement = grid.getCanvasNode();
slickgridJQ(canvasElement).off('keydown');
if (this.containerRef && this.containerRef.current) {
// slickgrid creates empty focus sink div elements that capture tab input we don't want that
// so unhook their key handlers and remove their tabindex
const firstFocus = slickgridJQ('.react-grid-container').children().first();
const lastFocus = slickgridJQ('.react-grid-container').children().last();
slickgridJQ(firstFocus).off('keydown').removeAttr('tabindex');
slickgridJQ(lastFocus).off('keydown').removeAttr('tabindex');
// Set our key handling on the actual grid viewport
slickgridJQ('.react-grid').on('keydown', this.slickgridHandleKeyDown).attr('role', 'grid').on('focusin', this.slickgridFocus);
slickgridJQ('.grid-canvas').on('keydown', this.slickgridHandleKeyDown);
}
// Setup the sorting
grid.onSort.subscribe(this.sort);
// Init to force the actual render.
grid.init();
// Set the initial sort column to our index column
const indexColumn = columns.find(c => c.field === this.props.idProperty);
if (indexColumn && indexColumn.id) {
// public navigations functions, but we don't want the slickgrid keyhander
// to eat tab keys and prevent us from tabbing to input boxes or column headers
const canvasElement = grid.getCanvasNode();
slickgridJQ(canvasElement).off('keydown');
if (this.containerRef && this.containerRef.current) {
// slickgrid creates empty focus sink div elements that capture tab input we don't want that
// so unhook their key handlers and remove their tabindex
const firstFocus = slickgridJQ('.react-grid-container').children().first();
const lastFocus = slickgridJQ('.react-grid-container').children().last();
slickgridJQ(firstFocus).off('keydown').removeAttr('tabindex');
slickgridJQ(lastFocus).off('keydown').removeAttr('tabindex');
// Set our key handling on the actual grid viewport
slickgridJQ('.react-grid').on('keydown', this.slickgridHandleKeyDown).attr('role', 'grid').on('focusin', this.slickgridFocus);
slickgridJQ('.grid-canvas').on('keydown', this.slickgridHandleKeyDown);
}
// Setup the sorting
grid.onSort.subscribe(this.sort);
// Init to force the actual render.
grid.init();
// Set the initial sort column to our index column
const indexColumn = columns.find(c => c.field === this.props.idProperty);
if (indexColumn && indexColumn.id) {
grid.setSortColumn(indexColumn.id, true);
}
// Save in our state
this.setState({ grid, fontSize });
grid.onHeaderCellRendered.subscribe((_e, args) => {
// Add a tab index onto our header cell
args.node.tabIndex = 0;
});
// Unbind the slickgrid key handler from the canvas code
// We want to keep EnableCellNavigation on so that we can use the slickgrid
// public navigations functions, but we don't want the slickgrid keyhander
// to eat tab keys and prevent us from tabbing to input boxes or column headers
const canvasElement = grid.getCanvasNode();
slickgridJQ(canvasElement).off('keydown');
if (this.containerRef && this.containerRef.current) {
// slickgrid creates empty focus sink div elements that capture tab input we don't want that
// so unhook their key handlers and remove their tabindex
const firstFocus = slickgridJQ('.react-grid-container').children().first();
const lastFocus = slickgridJQ('.react-grid-container').children().last();
slickgridJQ(firstFocus).off('keydown').removeAttr('tabindex');
slickgridJQ(lastFocus).off('keydown').removeAttr('tabindex');
// Set our key handling on the actual grid viewport
slickgridJQ('.react-grid').on('keydown', this.slickgridHandleKeyDown).attr('role', 'grid').on('focusin', this.slickgridFocus);
slickgridJQ('.grid-canvas').on('keydown', this.slickgridHandleKeyDown);
}
// Setup the sorting
grid.onSort.subscribe(this.sort);
// Init to force the actual render.
grid.init();
// Set the initial sort column to our index column
// We want to keep EnableCellNavigation on so that we can use the slickgrid
// public navigations functions, but we don't want the slickgrid keyhander
// to eat tab keys and prevent us from tabbing to input boxes or column headers
const canvasElement = grid.getCanvasNode();
slickgridJQ(canvasElement).off('keydown');
if (this.containerRef && this.containerRef.current) {
// slickgrid creates empty focus sink div elements that capture tab input we don't want that
// so unhook their key handlers and remove their tabindex
const firstFocus = slickgridJQ('.react-grid-container').children().first();
const lastFocus = slickgridJQ('.react-grid-container').children().last();
slickgridJQ(firstFocus).off('keydown').removeAttr('tabindex');
slickgridJQ(lastFocus).off('keydown').removeAttr('tabindex');
// Set our key handling on the actual grid viewport
slickgridJQ('.react-grid').on('keydown', this.slickgridHandleKeyDown).attr('role', 'grid').on('focusin', this.slickgridFocus);
slickgridJQ('.grid-canvas').on('keydown', this.slickgridHandleKeyDown);
}
// Setup the sorting
grid.onSort.subscribe(this.sort);
// Init to force the actual render.
grid.init();
// Set the initial sort column to our index column
const indexColumn = columns.find(c => c.field === this.props.idProperty);
if (indexColumn && indexColumn.id) {
grid.setSortColumn(indexColumn.id, true);
}
// Save in our state
});
// Unbind the slickgrid key handler from the canvas code
// We want to keep EnableCellNavigation on so that we can use the slickgrid
// public navigations functions, but we don't want the slickgrid keyhander
// to eat tab keys and prevent us from tabbing to input boxes or column headers
const canvasElement = grid.getCanvasNode();
slickgridJQ(canvasElement).off('keydown');
if (this.containerRef && this.containerRef.current) {
// slickgrid creates empty focus sink div elements that capture tab input we don't want that
// so unhook their key handlers and remove their tabindex
const firstFocus = slickgridJQ('.react-grid-container').children().first();
const lastFocus = slickgridJQ('.react-grid-container').children().last();
slickgridJQ(firstFocus).off('keydown').removeAttr('tabindex');
slickgridJQ(lastFocus).off('keydown').removeAttr('tabindex');
// Set our key handling on the actual grid viewport
slickgridJQ('.react-grid').on('keydown', this.slickgridHandleKeyDown).attr('role', 'grid').on('focusin', this.slickgridFocus);
slickgridJQ('.grid-canvas').on('keydown', this.slickgridHandleKeyDown);
}
// Setup the sorting
grid.onSort.subscribe(this.sort);
// Init to force the actual render.
grid.init();
// Set the initial sort column to our index column
const indexColumn = columns.find(c => c.field === this.props.idProperty);
if (indexColumn && indexColumn.id) {
grid.setSortColumn(indexColumn.id, true);
});
// Setup the filter render
grid.onHeaderRowCellRendered.subscribe(this.renderFilterCell);
grid.onHeaderCellRendered.subscribe((_e, args) => {
// Add a tab index onto our header cell
args.node.tabIndex = 0;
});
// Unbind the slickgrid key handler from the canvas code
// We want to keep EnableCellNavigation on so that we can use the slickgrid
// public navigations functions, but we don't want the slickgrid keyhander
// to eat tab keys and prevent us from tabbing to input boxes or column headers
const canvasElement = grid.getCanvasNode();
slickgridJQ(canvasElement).off('keydown');
if (this.containerRef && this.containerRef.current) {
// slickgrid creates empty focus sink div elements that capture tab input we don't want that
// so unhook their key handlers and remove their tabindex
const firstFocus = slickgridJQ('.react-grid-container').children().first();
const lastFocus = slickgridJQ('.react-grid-container').children().last();
slickgridJQ(firstFocus).off('keydown').removeAttr('tabindex');
slickgridJQ(lastFocus).off('keydown').removeAttr('tabindex');
// Set our key handling on the actual grid viewport
slickgridJQ('.react-grid').on('keydown', this.slickgridHandleKeyDown).attr('role', 'grid').on('focusin', this.slickgridFocus);
slickgridJQ('.grid-canvas').on('keydown', this.slickgridHandleKeyDown);
}
// Setup the sorting
grid.onSort.subscribe(this.sort);
render(): void {
let checkboxSelector
let columns = this.model.columns.map((column) => column.toColumn())
if (this.model.selectable == "checkbox") {
checkboxSelector = new CheckboxSelectColumn({cssClass: "bk-cell-select"})
columns.unshift(checkboxSelector.getColumnDefinition())
}
if (this.model.index_position != null) {
const index_position = this.model.index_position
const index = this.newIndexColumn()
// This is to be able to provide negative index behaviour that
// matches what python users will expect
if (index_position == -1) {
columns.push(index)
}
else if (index_position < -1) {
columns.splice(index_position+1, 0, index)
}
else {
columns.splice(index_position, 0, index)
render(): void {
let checkboxSelector
let columns = this.model.columns.map((column) => column.toColumn())
if (this.model.selectable == "checkbox") {
checkboxSelector = new CheckboxSelectColumn({cssClass: bk_cell_select})
columns.unshift(checkboxSelector.getColumnDefinition())
}
if (this.model.index_position != null) {
const index_position = this.model.index_position
const index = this.newIndexColumn()
// This is to be able to provide negative index behaviour that
// matches what python users will expect
if (index_position == -1)
columns.push(index)
else if (index_position < -1)
columns.splice(index_position+1, 0, index)
else
columns.splice(index_position, 0, index)
}
this.grid.onSort.subscribe((_event: any, args: any) => {
if (!this.model.sortable)
return
columns = args.sortCols
this.data.sort(columns)
this.grid.invalidate()
this.updateSelection()
this.grid.render()
if (!this.model.header_row) {
this._hide_header()
}
this.model.update_sort_columns(columns)
})
if (this.model.selectable !== false) {
this.grid.setSelectionModel(new RowSelectionModel({selectActiveRow: checkboxSelector == null}))
if (checkboxSelector != null)
this.grid.registerPlugin(checkboxSelector)
const pluginOptions = {
dataItemColumnValueExtractor(val: Item, col: TableColumn) {
// As defined in this file, Item can contain any type values
let value: any = val[col.field]
if (isString(value)) {
value = value.replace(/\n/g, "\\n")
}
return value
},
includeHeaderWhenCopying: false,
}
this.grid.registerPlugin(new CellExternalCopyManager(pluginOptions))
if (checkboxSelector != null)
this.grid.registerPlugin(checkboxSelector)
const pluginOptions = {
dataItemColumnValueExtractor(val: Item, col: TableColumn) {
// As defined in this file, Item can contain any type values
let value: any = val[col.field]
if (isString(value)) {
value = value.replace(/\n/g, "\\n")
}
return value
},
includeHeaderWhenCopying: false,
}
this.grid.registerPlugin(new CellExternalCopyManager(pluginOptions))
this.grid.onSelectedRowsChanged.subscribe((_event: any, args: any) => {
if (this._in_selection_update) {
return
}
this.model.source.selected.indices = args.rows.map((i: number) => this.data.index[i])
})
this.updateSelection()
if (!this.model.header_row) {
this._hide_header()
}
}
}