Конфигурация
Настройте таблицу Pivot и панель конфигурации с помощью следующего API:
config— определяет структуру таблицы Pivot и способ агрегации данныхrender-table— изменяет конфигурацию таблицы на летуtableShape— настраивает внешний вид таблицы PivotcolumnShape— настраивает внешний вид и поведение столбцовheaderShape— настраивает внешний вид и поведение заголовковconfigPanel— управляет видимостью панели конфигурацииsetLocale— применяет локаль (см. Локализация)data,fields— загружают данные и метаданные полейpredicates— предварительно обрабатывают данные перед агрегациейmethods— определяют пользовательские методы агрегацииlimits— ограничивают количество строк и столбцов в итоговом наборе данных
Инструкции по работе с данными см. в разделе Работа с данными.
Вы можете настроить следующие элементы таблицы Pivot:
- столбцы и строки
- заголовки и подвалы
- ячейки
- размеры таблицы
Изменение размеров таблицы
Используйте свойство tableShape, чтобы изменить размер строк, столбцов, заголовка и подвала.
Следующий фрагмент кода показывает размеры по умолчанию:
const sizes = {
rowHeight: 34,
headerHeight: 30,
footerHeight: 30,
columnWidth: 150
};
Следующий фрагмент кода переопределяет размеры по умолчанию:
const table = new pivot.Pivot("#root", {
fields,
data,
tableShape: {
sizes: {
rowHeight: 44,
headerHeight: 60,
footerHeight: 30,
columnWidth: 170
}
},
config: {
rows: ["studio", "genre"],
columns: [],
values: [
{
field: "title",
method: "count"
},
{
field: "score",
method: "max"
}
]
}
});
Чтобы задать ширину конкретных столбцов, используйте параметр width свойства columnShape.
Автоматическое изменение ширины столбцов по содержимому
Используйте параметр autoWidth свойства columnShape, чтобы вычислять ширину столбцов автоматически. Все подпараметры autoWidth являются необязательными — полные описания см. в справочнике columnShape.
Объект autoWidth принимает следующие параметры:
columns— объект, определяющий, для каких полей вычисляется ширина автоматическиauto— подстраивает ширину под заголовок, содержимое ячейки или под оба вариантаmaxRows— количество строк данных, анализируемых для определения размера столбца (по умолчанию: 20)firstOnly— еслиtrue(по умолчанию), каждое поле анализируется только один раз. Когда несколько столбцов основаны на одном поле (например,oilсcountиoilсsum), анализируется только первый столбец, а остальные наследуют его ширину
Следующий фрагмент кода включает autoWidth для четырёх полей и отключает firstOnly, чтобы каждый столбец получил собственное измерение:
const table = new pivot.Pivot("#root", {
fields,
data,
config: {
rows: ["studio", "genre"],
columns: [],
values: [
{
field: "title",
method: "count"
},
{
field: "score",
method: "max"
}
]
},
columnShape: {
autoWidth: {
// вычислять ширину столбца для этих полей
columns: {
studio: true,
genre: true,
title: true,
score: true
},
// анализировать все поля
firstOnly: false
}
}
});
Применение шаблонов к ячейкам
Добавление шаблонов через tableShape
Используйте параметр templates свойства tableShape, чтобы отображать значения ячеек через функцию. Каждый ключ — это идентификатор поля, а каждое значение — функция, возвращающая строку. Все столбцы, основанные на указанном поле, получают этот шаблон.
В примере ниже к ячейкам state применяется шаблон, который отображает объединённое название штата (полное название и аббревиатура):
const states = {
"California": "CA",
"Colorado": "CO",
"Connecticut": "CT",
"Florida": "FL",
// другие значения
};
const table = new pivot.Pivot("#root", {
tableShape: {
templates: {
// настроить значения ячеек "state"
state: v => v + ` (${states[v]})`,
}
},
fields,
data,
config: {
rows: ["state", "product_type"],
columns: [],
values: [
{
field: "profit",
method: "sum"
},
{
field: "sales",
method: "sum"
},
// другие значения
],
},
fields,
});
Добавление шаблона через хелпер template
Чтобы вставить HTML-содержимое в ячейки тела таблицы, используйте хелпер pivot.template и присвойте результат свойству cell объекта столбца. Применяйте шаблон непосредственно перед отрисовкой таблицы, перехватывая событие render-table с помощью метода api.intercept.
В примере ниже в ячейки тела добавляются иконки (звезда или флаг) в зависимости от пол я (id, user_score):
function cellTemplate(value, method, row, column) {
const field = column.fields ? column.fields[row.$level] : column.field;
if (field === "id") {
return idTemplate(value);
}
if (field === "user_score") {
return scoreTemplate(value);
}
return value;
}
function idTemplate(value) {
const name = value?.toString().split("-")[0];
return `<span className="cell-id flag-${name}"></span> ${value}`;
}
function scoreTemplate(value) {
return `<i className="cell-score wxi-star"></i> ${value}`;
}
widget.api.intercept("render-table", ({ config: tableConfig }) => {
tableConfig.columns = tableConfig.columns.map((c) => {
if (c.area === "rows") {
// применить шаблон к ячейкам столбца из области "rows"
c.cell = pivot.template(({ value, method, row, column }) => cellTemplate(value, method, row, column));
}
return c;
});
});