Pivot is a complex widget created with Webix Jet, the MV* framework for Webix Library. It is a ready-to-use application with minimum configuration settings but has API for redefining the logic of inner modules.
You will need to study the source code to customize views and models.
Pivot is built as a Jet App and wrapped into a Webix view, so you can initialize Pivot in either of the ways.
The interface of Pivot is split into parts (views). Each view is a class that extends the JetView class and has own handlers for setting the configuration and logic.
The sources for interface parts (Jet Views) are located in the sources/views folder.
views
config
properties
index.js
chart.js
mode.js
...
Go to the Class Map page to see the list of all Jet views in Pivot and where they are in the interface.
Pivot models contain the logic for working with data items. They are defined as Jet Services.
The sources for models (Jet Services) are located in the sources/models folder.
models
LocalData.js
Backend.js
Service methods are called by the UI and can be called by a programmer as:
$$("pivot").getService("local").getData();
To use ColorSelector as a custom palette in chart mode create a custom class and inherit it from the default pivot.views["config/properties/values"]
. Redefine its ItemConfig()
so that it returns config with the colorselect control.
class CustomValuesProperty extends pivot.views["config/properties/values"] {
ItemConfig(val, i) {
const config = super.ItemConfig(val, i);
config[1].suggest = {
padding: 0,
type: "colorselect",
body: {
button: true,
},
};
return config;
}
}
After that you need to override
the default view with the new one:
webix.ui({
view: "pivot",
structure: {
rows: ["form", "name"],
columns: ["year"],
values: [{ name: "oil", operation: ["min", "sum"] }],
},
override: new Map([
[pivot.views["config/properties/values"], CustomValuesProperty], ]),
});
Related sample: Pivot: Custom Palette for Chart Mode
See more examples of customization in the How-tos article.
Notes
1. We do not recommend to remove any component from the interface as the inner logic might still try accessing it. Instead, hide the components.
class CustomBar extends pivot.views.toolbar {
init(view) {
// default logic
super.init(view);
// hide the "Configure Pivot" button from toolbar
view.queryView("template").hide();
}
}
2. You can access component instances within a Jet view by:
It works for an inner component that is assigned the localId setting.
init() {
// default logic
super.init();
// get instance of the component with "config" localId
const config = this.$$("config");
}
init(view) {
// default logic
super.init();
// get instance of the first button
const button = view.queryView("icon");
}
3. You can find out whether the app is currently compact from any view or service method as:
const compact = this.getParam("compact", true);
4. You can get state properties from any view or service method as:
const state = this.app.getState();
// or
const state = this.getParam("state");
Firstly, create your own service class and inherit it from one of the default services:
class MyBackend extends pivot.services.Backend {
data() {
// client-side data
return webix.promise.resolve(data);
}
}
Secondly, replace the default service via the override map:
webix.ui({
view: "pivot",
url: "https://docs.webix.com/pivot-backend/",
override: new Map([[pivot.services.Backend, MyBackend]]),
});
Related sample: Pivot: Local Data
Pivot is extremely flexible when it comes to customizations: you can change almost anything in it. However, keep in mind the following:
Code for Edge Сhromium must be with different syntax.