0.4.6 • Published 2 years ago

@grossb/react-data-table v0.4.6

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

Библиотека сделана на основе библиотеки @grossb/react-table

Описание типов

Перечисления (enum)

SELECT_STATUSES - Статус выбора

НазваниеОписание
NOT_SELECTEDНе выбран
INDETERMINATEНеопреден. Используется для чекбокса - Выбрать все в заголовке таблицы. Используется, если выбраны некоторые значения из списка, но не все
SELECTEDВыбран

SORTING_ORDER - Порядок сортировки

НазваниеОписание
ASCПо возрастанию
DESCПо убыванию

SORTING_MODE - Режим работы сортировки

НазваниеОписание
SERVER = "server"Режим сервера
CLIENT = "client"Режим клиента

FILTERING_MODE - Режим работы фильтрации

НазваниеОписание
SERVER = "server"Режим сервера
CLIENT = "client"Режим клиента

DataItem

DataItem - базовый тип объекта данных из массива data. Тип данных, который будет передаваться в массиве data, должен быть расширен от данного типа.

НазваниеОписание
id: number \| stringУникальные идентификатор объекта. Он используется как ключ для строк в таблице.
[key: string]: anyДополнительные поля объекта.

FilterComponentProps

FilterComponentProps - параметры, которые передаются в компоненты фильтрации

НазваниеОписание
column: Column<T>Объект типа Column из массива columns
allFilterData?: AllFilterDataФильтры для всех столбцов
columnFilterData?: FilterDataФильтры для столбца column
onSubmit: (data: any) => voidФункция, которая принимает объект с полями фильтра. Данный объект будет передаваться в filterComparator из column
onReset: () => voidФункция сброса значений фильтров для столбца

Column

Column - тип, которые описывается все ячейки одного столбца.

НазваниеОписание
id?: ColumnIdУнивальный идентификатор столбца. Необязательное поле. (string \| number ).
dataField?: stringПоле объекта из которого будут браться данные для вывода в ячейку. Необязательный параметр.
valueGetter?: (value: T) => ReactNodeФункция для преобазования данных с поля объекта для вывода в ячейку. Необязательный параметр.
header?: ReactNodeЗагловок столбца, которые будет выводится в Head таблицы.Необязательный параметр.
headCellProps?: CellPropsПараметры ячейки в заголовке таблицы. Можно задать стили или класс и т.д. Необязательный параметр.
bodyCellProps?: ((dataItem: T) => CellProps) \| CellPropsПараметры ячейки в тебе таблицы. Можно задать стили или класс и т.д. Принимается как функция, так и объект. Необязательный параметр.
sortComparator?: SortComparator<T>Функция для сортировки данных в столбце. Чтобы сортировка работала, нужно для таблицы указать параметр sortable и указать данную функцию. Необязательный параметр.
filterComparator?: FilterComparator<T>Функция фля фильтрации данных в таблице по столбцу. Функция получается как данные фильтра для конкретного столбца, так и фильтры для всех столбцов. Названия полей задаются пользователем в компоненте фильтра. Чтобы фильтрация работала, нужно для таблицы указать параметр filterable и указать данную функцию. Необязательный параметр.
filterComponent?: ColumnFilterComponent<T>Компонент фильтра для столбца. Можно указать false, чтобы не отображать компонент фильтра для столбца, даже есть будет указан общий компонент фильтра в таблице. Необязательный параметр.

ColumnId

ColumnId - это вычисляемое значение на основе объекта типа Column.

Принцип работы следующий:

  1. Если в объекте типа Column объявлено поле id, то ColumnId будет равно значению id
  2. Если в объекте типа Column не объявлено поле id, но объявлено поле dataField, то ColumnId будет равно значению dataField
  3. Если в объекте типа Column не объявлены поля id и dataField, то ColumnId будет равно значению undefined

SortingColumnOrder

SortingColumnOrder - описывает сортировку для столбца и порядок сортировки

НазваниеОписание
column: Column<T>объект типа Column
sortingOrder: SORTING_ORDERзначение из enum SORTING_ORDER

DataTableProps

НазваниеОписание
data: Array<T>Массив данных для таблицы. Каждый объект должен наследовать тип от DataItem, чтобы компонент работал корректно
columns: Array<Column<T>>Массив объектов столбцов, которые описывают отдельно взятый столбец
onRowClick?: (event: any, dataItem: T) => voidСобытие нажатия на строку в теле таблицы
selectable?: booleanВключает возможность выбора строк в таблице при помощи чекбоксов.
onSelectChange?: (selectedItems: Array<T>) => voidСобытие, которые вызывается при изменении выбора строк. Передает массив объектов из data, у которых стоит чекбокс
onSortChange?: (sortingColumnOrder?: SortingColumnOrder<T>) => voidСобытие изменения сортировки. В объекте sortingColumnOrder содежиться объект столбца из columns и порядок сортировки из enum SORTING_ORDER
sortable?: booleanВключает возможность сортировки строк в таблицею Для работы сортировки необходимо передать данный параметр и реализовать sortComparator в объекте столбца из массива columns
filterable?: booleanВключает возможность фильтрации данных. Для работы фильтрации необходимо передать данный параметр, реализовать filterComparator в объекте столбца из массива columns и реализовать компонент фильтра, которые будет отображаться в заголовке таблицы. Компонент фильтра можно реализовать двумя способами: передать в объекте столбца из массива columns или передать общий компонент фильтра для всех столбцов через параметр commonFilterComponent
defaultSortingColumnOrder?: SortingColumnOrder<T>Сортировка по умолчанию. В объекте необходимо указать column и sortingOrder, где column - это объект из columns, а sortingOrder - значение из enum SORTING_ORDER
commonFilterComponent?: FilterComponent<T>Общий компонент фильтра для всех столбцов. Чтобы его переопределить или отключить для конкретного столбца, нужно в объекте из columns в поле filterComponent или передать нужный фильтр или передать false, чтобы отключить его.
onFilterChange?: (allFilterData?: AllFilterData) => voidСобытие изменения фильтров для столбцов. Передаются все значения фильтров. Ключом является ColumnId на основе объекта из columns, а значением - объект с полями из фильтра.
sortingMode?: SORTING_MODEРежим работы сортировки: server или client. В режиме client при изменении сортировки происходит сортировка данных на основе sortComparator из объекта типа Column и вызывается событие onSortChange. В режиме server только вызывается событие onSortChange. По умолчанию режим client
filterMode?: FILTERING_MODEРежим работы фильтрации: server или client. Принцип работы такой же, как и в sortingMode. Но используются функции filterComparator и onFilterChange соответственно. По умолчанию режим client
rowProps?: ((dataItem: T) => RowProps) \| RowPropsФункция или объект для передачи параметров для строк. Например, если нужно в процессе работы передать стиль для одной строки.
fixedTopTitleЗафиксировать заголовок при скролле таблицы. (position: sticky)
fixedLeftColumnЗафиксировать левый столбец про горизонтальном скролле. (position: sticky)
stripedСтроки таблицы будут полосатыми. Одни темнее, другие светлее через одну.

CSS переменные

Описание CSS переменных находится тут

Пример использования

function alphabeticalSortComparator<T extends DataItem>(a: T, b: T, sortingOrder: SORTING_ORDER, fieldName: keyof T) {
  const res = a[fieldName].toLocaleLowerCase().localeCompare(b[fieldName].toLocaleLowerCase())

  if (sortingOrder === SORTING_ORDER.DESC) {
    return res * -1
  }

  return res
}

class User {
  constructor(
    public id: number,
    public firstName: string,
    public lastName: string,
    public middleName: string,
    public email: string,
  ) { }

  get fullName() {
    return `${this.lastName} ${this.firstName} ${this.middleName}`
  }
}

const columns: Array<Column<User>> = [
  {
    dataField: "fullName",
    header: "ФИО",
    headCellProps: {
      width: 300
    },
    sortComparator: (a, b, sortingOrder) => alphabeticalSortComparator<User>(a, b, sortingOrder, "fullName")
  },
  {
    dataField: "email",
    header: "Электронная почта",
    headCellProps: {
      width: 300
    },
    sortComparator: (a, b, sortingOrder) => alphabeticalSortComparator<User>(a, b, sortingOrder, "email")
  },
]

const data = [
  new User(1, "string", "string", "string", "string@string.com"),
  new User(2, "а", "а", "а", "a@a.com"),
  new User(3, "test", "test", "test", "test@test.com"),
  new User(4, "example", "example", "example", "example@example.com"),
  new User(5, "Иван", "Иванов", "Иванович", "email@example.com"),
]

  //////// DataTableExample.ts

  <DataTable<User>
    selectable
    filterable
    sortable
    striped
    fixedTopTitle
    data={data}
    columns={columns}
  />
0.4.5

2 years ago

0.4.4

2 years ago

0.4.6

2 years ago

0.4.1

2 years ago

0.4.0

2 years ago

0.4.3

2 years ago

0.4.2

2 years ago

0.3.0

2 years ago

0.3.2

2 years ago

0.3.1

2 years ago

0.1.0

2 years ago

0.2.0

2 years ago

0.1.1

2 years ago

0.0.7

2 years ago

0.0.6

2 years ago

0.0.5

2 years ago

0.0.4

2 years ago

0.0.3

2 years ago