forked from M-Labs/web2019
53 lines
2.1 KiB
JavaScript
53 lines
2.1 KiB
JavaScript
import {apply as json_logic_apply} from "json-logic-js";
|
|
import {componentsList} from "./components/components";
|
|
|
|
// https://stackoverflow.com/a/70511311
|
|
export const true_type_of = (obj) => Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
|
|
|
|
export function FillExtCardData(data, index) {
|
|
return {
|
|
// we cannot use value id, because they are substituted with uuid
|
|
has_other_dio: data.filter((value, item_index) => index !== item_index && value.name &&value.name.endsWith("-TTL")).length > 0,
|
|
has_dds: data.filter(((value, _) => value.name === "DDS" && value.name_number === "4410" && (!value.options_data || !value.options_data.mono_eem))).length > 0,
|
|
has_sampler: data.filter(((value, _) => value.name === "Sampler" && (!value.options_data || !value.options_data.mono_eem))).length > 0,
|
|
has_thermostat: data.filter((value, item_index) => index !== item_index && value.name_number && value.name_number === '8451').length > 0
|
|
}
|
|
}
|
|
|
|
export function FillExtCrateData(crate) {
|
|
return {
|
|
crate_mode: crate.crate_mode
|
|
}
|
|
}
|
|
|
|
export function FillExtOrderData(crates, modes_order) {
|
|
return {
|
|
has_crate: crates.filter((crate) => modes_order.includes(crate.crate_mode)).length >= 1,
|
|
}
|
|
}
|
|
|
|
export function FilterOptions(options, data) {
|
|
let options_t = true_type_of(options);
|
|
let target = {};
|
|
|
|
if (options_t === "array") {
|
|
options.map((option_item, _) => {
|
|
Object.assign(target, FilterOptions(option_item, data))
|
|
});
|
|
} else if (options_t === "object") {
|
|
if (
|
|
true_type_of(options.type) === "string" &&
|
|
(true_type_of(options.args) === "object" || true_type_of(options.items) === "array")
|
|
) {
|
|
if (options.type in componentsList) {
|
|
target[options.args.outvar] = data[options.args.outvar];
|
|
} else if (options.type === "Group") {
|
|
Object.assign(target, FilterOptions(json_logic_apply(options.items, data), data))
|
|
}
|
|
} else {
|
|
Object.assign(target, FilterOptions(json_logic_apply(options, data), data))
|
|
}
|
|
}
|
|
return target
|
|
}
|