IKHSAN
EN Read in EnglishID

opendesk

Publik
Branch
main
Commit terakhir
08d9f3328 Oktober 2026

fieldDependsOn.ts

Buka raw
import { parseLinkFilters } from "@opendesk/shared/utils";

// ps: used to be form customizations but now is formScripts is extracted to shared module in formScripts.ts
export function parseField(field, doc) {
  return {
    display_via_depends_on: evaluateDependsOnValue(field?.depends_on, doc),
    ...field,
    required:
      field.required ||
      (field.mandatory_depends_on &&
        evaluateDependsOnValue(field.mandatory_depends_on, doc)),
    filters: field.link_filters && parseLinkFilters(field.link_filters),
    disabled: field.disabled,
    readonly:
      field.readonly ||
      (field.read_only_depends_on &&
        evaluateDependsOnValue(field.read_only_depends_on, doc)),
  };
}

export function evaluateDependsOnValue(expression, doc) {
  if (!expression) return true;
  let out = null;
  if (expression.substr(0, 5) == "eval:") {
    try {
      out = _eval(expression.substr(5), { doc });
    } catch (e) {
      out = true;
    }
  } else if (expression.substr(0, 4) == "doc.") {
    out = doc[expression.substr(4)];
  } else {
    let value = doc[expression];
    if (Array.isArray(value)) {
      out = !!value.length;
    } else {
      out = !!value;
    }
  }
  return out;
}
function _eval(code, context = {}) {
  let variable_names = Object.keys(context);
  let variables = Object.values(context);
  code = `let out = ${code}; return out`;
  try {
    let expression_function = new Function(...variable_names, code);
    return expression_function(...variables);
  } catch (error) {
    console.error("Could not evaluate depends_on:", code);
    throw error;
  }
}
byte
1.600
baris
54
Jenis
ts
Commit terakhir
28 Oktober 2026