@toast-ui/chart
Version:
TOAST UI Application: Chart
74 lines (73 loc) • 2.74 kB
JavaScript
import { isNull, isNumber, isUndefined, sortCategories } from "../helpers/utils";
import { getCoordinateXValue } from "../helpers/coordinate";
import { getDataInRange } from "../helpers/range";
export function makeRawCategories(series, categories) {
if (categories) {
return categories;
}
const firstValues = new Set();
Object.keys(series).forEach((key) => {
var _a;
if (key === 'pie' || key === 'gauge') {
return;
}
(_a = series[key].data, (_a !== null && _a !== void 0 ? _a : series[key])).forEach(({ data, name, visible }) => {
if (Array.isArray(data)) {
data.forEach((datum) => {
if (!isNull(datum)) {
const rawXValue = getCoordinateXValue(datum);
firstValues.add(isNumber(rawXValue) ? rawXValue : rawXValue.toString());
}
});
}
else if ((key === 'bullet' && isUndefined(visible)) || visible) {
firstValues.add(name);
}
});
});
return Array.from(firstValues)
.sort(sortCategories)
.map((category) => String(category));
}
const category = {
name: 'category',
state: ({ categories, series }) => ({
categories: makeRawCategories(series, categories),
}),
action: {
setCategory({ state, computed }) {
const { viewRange } = computed;
let categories = state.rawCategories;
if (viewRange) {
if (Array.isArray(categories)) {
categories = getDataInRange(categories, viewRange);
}
else {
categories = Object.assign(Object.assign({}, categories), { x: getDataInRange(categories.x, viewRange) });
}
}
state.categories = categories;
this.notify(state, 'categories');
},
initCategory({ initStoreState, state }) {
const { zoomRange } = state;
let categories = makeRawCategories(initStoreState.series);
if (zoomRange && Array.isArray(categories)) {
categories = getDataInRange(categories, zoomRange);
}
state.categories = categories;
this.notify(state, 'categories');
},
removeCategoryByName({ state }, name) {
const index = state.categories.findIndex((seriesName) => seriesName === name);
state.categories.splice(index, 1);
this.notify(state, 'axes');
},
},
observe: {
updateCategory() {
this.dispatch('setCategory');
},
},
};
export default category;