vuestic-ui
Version:
Vue 3 UI Framework
1 lines • 2.05 kB
Source Map (JSON)
{"version":3,"file":"useTrackBy.mjs","sources":["../../../../src/composables/useTrackBy.ts"],"sourcesContent":["import { PropType, ExtractPropTypes } from 'vue'\n\nimport { warn } from '../utils/console'\nimport { isFunction } from '../utils/is-function'\n\ntype AnyRecordOrArray = Array<any> | Record<string, any>\n\nexport const useTrackByProps = {\n trackBy: {\n type: [String, Number, Function] as PropType<string | number | ((item: AnyRecordOrArray) => string | number)>,\n default: '',\n },\n}\n\nexport const useTrackBy = (props: ExtractPropTypes<typeof useTrackByProps>) => {\n const getKey = (\n item: AnyRecordOrArray,\n index: number,\n defaultValue?: any,\n ) => {\n if (props.trackBy && item && typeof item === 'object' && !isFunction(props.trackBy)) {\n const isArrayItem = Array.isArray(item)\n\n let key: any\n if (isArrayItem && !isNaN(+props.trackBy)) { key = (item as any[])[+props.trackBy] }\n if (!isArrayItem) { key = (item as Record<string, any>)[props.trackBy] }\n\n if (key || key === 0) { return key }\n\n warn(`${isArrayItem ? 'Index' : 'Key'} '${props.trackBy}' wasn't found in provided ${isArrayItem ? 'array' : 'object'}: `, item)\n }\n\n if (isFunction(props.trackBy)) {\n return props.trackBy(item)\n }\n\n return defaultValue\n }\n\n return { getKey }\n}\n"],"names":[],"mappings":";;AAOO,MAAM,kBAAkB;AAAA,EAC7B,SAAS;AAAA,IACP,MAAM,CAAC,QAAQ,QAAQ,QAAQ;AAAA,IAC/B,SAAS;AAAA,EACX;AACF;AAEa,MAAA,aAAa,CAAC,UAAoD;AAC7E,QAAM,SAAS,CACb,MACA,OACA,iBACG;AACC,QAAA,MAAM,WAAW,QAAQ,OAAO,SAAS,YAAY,CAAC,WAAW,MAAM,OAAO,GAAG;AAC7E,YAAA,cAAc,MAAM,QAAQ,IAAI;AAElC,UAAA;AACJ,UAAI,eAAe,CAAC,MAAM,CAAC,MAAM,OAAO,GAAG;AAAS,cAAA,KAAe,CAAC,MAAM,OAAO;AAAA,MAAE;AACnF,UAAI,CAAC,aAAa;AAAS,cAAA,KAA6B,MAAM,OAAO;AAAA,MAAE;AAEnE,UAAA,OAAO,QAAQ,GAAG;AAAS,eAAA;AAAA,MAAI;AAEnC,WAAK,GAAG,cAAc,UAAU,KAAK,KAAK,MAAM,OAAO,8BAA8B,cAAc,UAAU,QAAQ,MAAM,IAAI;AAAA,IACjI;AAEI,QAAA,WAAW,MAAM,OAAO,GAAG;AACtB,aAAA,MAAM,QAAQ,IAAI;AAAA,IAC3B;AAEO,WAAA;AAAA,EAAA;AAGT,SAAO,EAAE,OAAO;AAClB;"}