{"version":3,"file":"getFieldDisplayValuesProxy.cjs","sources":["../../../src/field/getFieldDisplayValuesProxy.ts"],"sourcesContent":["import { toNumber } from 'lodash';\n\nimport { DataFrame } from '../types/dataFrame';\nimport { DisplayValue } from '../types/displayValue';\nimport { TimeZone } from '../types/time';\nimport { formattedValueToString } from '../valueFormats/valueFormats';\n\nimport { getDisplayProcessor } from './displayProcessor';\n\n/**\n * Creates a proxy object that allows accessing fields on dataFrame through various means and then returns it's\n * display value. This is mainly useful for example in data links interpolation where you can easily create a scoped\n * variable that will allow you to access dataFrame data with ${__data.fields.fieldName}.\n * Allows accessing fields by name, index, displayName or 'name' label\n *\n * @param options\n * @internal\n */\nexport function getFieldDisplayValuesProxy(options: {\n  frame: DataFrame;\n  rowIndex: number;\n  timeZone?: TimeZone;\n}): Record<string, DisplayValue> {\n  return new Proxy(\n    {},\n    {\n      get: (obj, key): DisplayValue | undefined => {\n        // 1. Match the name\n        let field = options.frame.fields.find((f) => key === f.name);\n        if (!field) {\n          // 2. Match the array index\n          const k = toNumber(key);\n          field = options.frame.fields[k];\n        }\n        if (!field) {\n          // 3. Match the config displayName\n          field = options.frame.fields.find((f) => key === f.config.displayName);\n        }\n        if (!field) {\n          // 4. Match the name label\n          field = options.frame.fields.find((f) => {\n            if (f.labels) {\n              return key === f.labels.name;\n            }\n            return false;\n          });\n        }\n        if (!field) {\n          return undefined;\n        }\n        // TODO: we could supply the field here for the getDisplayProcessor fallback but we would also need theme which\n        //  we do not have access to here\n        const displayProcessor = field.display ?? getDisplayProcessor();\n        const raw = field.values[options.rowIndex];\n        const disp = displayProcessor(raw);\n        disp.toString = () => formattedValueToString(disp);\n        return disp;\n      },\n    }\n  );\n}\n"],"names":["toNumber","displayProcessor","getDisplayProcessor","formattedValueToString"],"mappings":";;;;;;;;;AAkBO,SAAS,2BAA2B,OAAA,EAIV;AAC/B,EAAA,OAAO,IAAI,KAAA;AAAA,IACT,EAAC;AAAA,IACD;AAAA,MACE,GAAA,EAAK,CAAC,GAAA,EAAK,GAAA,KAAkC;AA1BnD,QAAA,IAAA,EAAA;AA4BQ,QAAA,IAAI,KAAA,GAAQ,QAAQ,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC,CAAA,KAAM,GAAA,KAAQ,CAAA,CAAE,IAAI,CAAA;AAC3D,QAAA,IAAI,CAAC,KAAA,EAAO;AAEV,UAAA,MAAM,CAAA,GAAIA,gBAAS,GAAG,CAAA;AACtB,UAAA,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AAAA,QAChC;AACA,QAAA,IAAI,CAAC,KAAA,EAAO;AAEV,UAAA,KAAA,GAAQ,OAAA,CAAQ,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,GAAA,KAAQ,CAAA,CAAE,MAAA,CAAO,WAAW,CAAA;AAAA,QACvE;AACA,QAAA,IAAI,CAAC,KAAA,EAAO;AAEV,UAAA,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM;AACvC,YAAA,IAAI,EAAE,MAAA,EAAQ;AACZ,cAAA,OAAO,GAAA,KAAQ,EAAE,MAAA,CAAO,IAAA;AAAA,YAC1B;AACA,YAAA,OAAO,KAAA;AAAA,UACT,CAAC,CAAA;AAAA,QACH;AACA,QAAA,IAAI,CAAC,KAAA,EAAO;AACV,UAAA,OAAO,KAAA,CAAA;AAAA,QACT;AAGA,QAAA,MAAMC,kBAAA,GAAA,CAAmB,EAAA,GAAA,KAAA,CAAM,OAAA,KAAN,IAAA,GAAA,EAAA,GAAiBC,oCAAA,EAAoB;AAC9D,QAAA,MAAM,GAAA,GAAM,KAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA;AACzC,QAAA,MAAM,IAAA,GAAOD,mBAAiB,GAAG,CAAA;AACjC,QAAA,IAAA,CAAK,QAAA,GAAW,MAAME,mCAAA,CAAuB,IAAI,CAAA;AACjD,QAAA,OAAO,IAAA;AAAA,MACT;AAAA;AACF,GACF;AACF;;;;"}