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 { 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, } } 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 }