@wix/design-system
Version:
@wix/design-system
86 lines (76 loc) • 2.5 kB
TypeScript
import * as React from 'react';
export type TimeTableInsertPosition = 'start' | 'end' | 'any';
export interface TimeTableItemProps {
disabled: boolean;
draggable: boolean;
}
export interface TimeTableContentRenderFunctionData {
Item: React.FC<TimeTableItemProps>;
disabled: boolean;
draggable: boolean;
}
export type TimeTableContentRenderFunction = (
data: TimeTableContentRenderFunctionData,
) => React.ReactNode;
export interface TimeTableItem {
content: React.ReactNode | TimeTableContentRenderFunction;
disabled?: boolean;
draggable?: boolean;
}
export interface TimeTableColumn {
title: string;
subtitle: string;
disabled?: boolean;
droppable?: boolean;
active?: boolean;
actions?: {
prefixIcon?: React.ReactNode;
label: string;
onClick(e: Event, item: TimeTableColumn, index: number): void;
}[];
items: TimeTableItem[];
}
export interface TimeTableChangeDetails {
addedToColumnIndex: number;
removedFromColumnIndex: number;
addedItemIndex: number;
removedItemIndex: number;
}
export interface TimeTableProps {
/** Hook for testing purposes. */
dataHook?: string;
/**
* Position where dragged items will be inserted. Using `any` value will
* allow the items to be re-ordered within the same column.
* @default 'any'
*/
insertPosition?: TimeTableInsertPosition;
/** Title of add button. */
addItemButtonLabel?: React.ReactNode;
/**
* Column data configuration. Item content is provided as a simple node or a
* render function with `content` property. When render function is used the
* signature is:
* `({ Item, draggable, disabled }) => {}`:
* - `Item` - component used to provide default item visual representation.
* You should render `<Item draggable={draggable} disabled={disabled}>...</Item>`
* - `draggable` - item is draggable.
* - `disabled` - item is disabled.
*/
columns?: TimeTableColumn[];
/** Custom table height.
* @default '283px'
*/
height?: string | number;
/**
* Event triggered on add button click: `onAdd(columnIndex)`.
* When not provided the button will be hidden.
*/
onAdd?(columnIndex: number): void;
/**
* Event triggered on column data change:
* `onChange(columns, { addedToColumnIndex, removedFromColumnIndex, addedItemIndex, removedItemIndex })`
*/
onChange?(columns: TimeTableColumn[], details: TimeTableChangeDetails): void;
}
export default class TimeTable extends React.PureComponent<TimeTableProps> {}