@visactor/vchart
Version:
charts lib based @visactor/VGrammar
34 lines (30 loc) • 1.63 kB
JavaScript
import { setProperty, mergeSpec } from "@visactor/vutils-extension";
import { isArray, isFunction, isNil } from "../../../../util";
import { executeMediaQueryActionFilter } from "./filter";
export const executeMediaQueryAction = (action, query, chartSpec, chartSpecInfo) => {
const {spec: spec, filter: filter, filterType: filterType, forceAppend: forceAppend} = action, {isChart: isChart, modelType: modelType, specKey: specKey, type: type, modelInfo: modelInfo} = executeMediaQueryActionFilter(filterType, filter, action, query, chartSpec, chartSpecInfo);
if (0 === modelInfo.length && !forceAppend) return {
chartSpec: chartSpec,
hasChanged: !1
};
const targetSpec = mergeSpec({}, chartSpec), newSpec = isFunction(spec) ? spec(modelInfo, action, query) : spec;
for (const {spec: spec, specPath: specPath} of modelInfo) {
if (isChart) return {
chartSpec: mergeSpec(targetSpec, newSpec),
hasChanged: !0
};
const modelSpec = mergeSpec({}, spec, newSpec);
setProperty(targetSpec, specPath, modelSpec);
}
if (0 === modelInfo.length && forceAppend) {
const newSpecToAppend = Object.assign({
type: type
}, newSpec);
isArray(targetSpec[specKey]) ? targetSpec[specKey].push(newSpecToAppend) : isNil(targetSpec[specKey]) ? targetSpec[specKey] = "component" === modelType ? newSpecToAppend : [ newSpecToAppend ] : targetSpec[specKey] = [ targetSpec[specKey], newSpecToAppend ];
}
return {
chartSpec: targetSpec,
hasChanged: !0
};
};
//# sourceMappingURL=action.js.map