/** * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ import type { KubeObject } from "@k8slens/kube-object"; import type { BaseKubeObjectListLayoutColumn, GeneralKubeObjectListLayoutColumn, SpecificKubeListLayoutColumn, } from "@k8slens/list-layout"; import { getInjectionToken } from "@ogre-tools/injectable"; import type { IComputedValue, IObservableValue } from "mobx"; type Column = ( | BaseKubeObjectListLayoutColumn | SpecificKubeListLayoutColumn | GeneralKubeObjectListLayoutColumn ); export interface TableComponentProps { tableId?: string; columns?: Column[]; save?: (state: object) => void; load?: (tableId: string) => object; } export interface TableComponent { Component: React.ComponentType; } export interface AddRemoveButtonsProps extends React.HTMLAttributes { onAdd?: () => void; onRemove?: () => void; addTooltip?: React.ReactNode; removeTooltip?: React.ReactNode; } export interface AddOrRemoveButtons { Component: React.ComponentType; } export type CreateTableState = (params: { dataItems: IComputedValue; headingColumns: object[]; customizeRows?: (row: object) => object; getRowId?: (dataItem: any) => string | number | symbol; searchBox?: IComputedValue | IObservableValue; }) => any; export const tableComponentInjectionToken = getInjectionToken({ id: "table-component-injection-token", }); export const addOrRemoveButtonsInjectionToken = getInjectionToken({ id: "add-or-remove-buttons-injection-token", }); export const createTableStateInjectionToken = getInjectionToken({ id: "create-table-state-injection-token", })