element-plus
Version:
A Component Library for Vue 3
1 lines • 4.6 kB
Source Map (JSON)
{"version":3,"file":"collection.mjs","sources":["../../../../../../packages/components/collection/src/collection.ts"],"sourcesContent":["import { inject, onBeforeUnmount, onMounted, provide, ref, unref } from 'vue'\nimport Collection from './collection.vue'\nimport CollectionItem from './collection-item.vue'\n\nimport type { InjectionKey, SetupContext } from 'vue'\nimport type {\n ElCollectionInjectionContext,\n ElCollectionItemInjectionContext,\n} from './tokens'\n\nexport const COLLECTION_ITEM_SIGN = `data-el-collection-item`\n\n// Make sure the first letter of name is capitalized\nexport const createCollectionWithScope = (name: string) => {\n const COLLECTION_NAME = `El${name}Collection`\n const COLLECTION_ITEM_NAME = `${COLLECTION_NAME}Item`\n const COLLECTION_INJECTION_KEY: InjectionKey<ElCollectionInjectionContext> =\n Symbol(COLLECTION_NAME)\n const COLLECTION_ITEM_INJECTION_KEY: InjectionKey<ElCollectionItemInjectionContext> =\n Symbol(COLLECTION_ITEM_NAME)\n\n const ElCollection = Object.assign({}, Collection, {\n name: COLLECTION_NAME,\n setup() {\n const collectionRef = ref<HTMLElement>()\n const itemMap: ElCollectionInjectionContext['itemMap'] = new Map()\n const getItems = (() => {\n const collectionEl = unref(collectionRef)\n\n if (!collectionEl) return []\n const orderedNodes = Array.from(\n collectionEl.querySelectorAll(`[${COLLECTION_ITEM_SIGN}]`)\n )\n\n const items = [...itemMap.values()]\n\n return items.sort(\n (a, b) => orderedNodes.indexOf(a.ref!) - orderedNodes.indexOf(b.ref!)\n )\n }) as ElCollectionInjectionContext['getItems']\n\n provide(COLLECTION_INJECTION_KEY, {\n itemMap,\n getItems,\n collectionRef,\n })\n },\n })\n\n const ElCollectionItem = Object.assign({}, CollectionItem, {\n name: COLLECTION_ITEM_NAME,\n setup(_: unknown, { attrs }: SetupContext) {\n const collectionItemRef = ref<HTMLElement>()\n const collectionInjection = inject(COLLECTION_INJECTION_KEY, undefined)!\n\n provide(COLLECTION_ITEM_INJECTION_KEY, {\n collectionItemRef,\n })\n\n onMounted(() => {\n const collectionItemEl = unref(collectionItemRef)\n if (collectionItemEl) {\n collectionInjection.itemMap.set(collectionItemEl, {\n ref: collectionItemEl,\n ...attrs,\n })\n }\n })\n\n onBeforeUnmount(() => {\n const collectionItemEl = unref(collectionItemRef)!\n collectionInjection.itemMap.delete(collectionItemEl)\n })\n },\n })\n\n return {\n COLLECTION_INJECTION_KEY,\n COLLECTION_ITEM_INJECTION_KEY,\n ElCollection,\n ElCollectionItem,\n }\n}\n"],"names":[],"mappings":";;;;AAUO,MAAM,oBAAA,GAAuB,CAAA,uBAAA;AAG7B,MAAM,yBAAA,GAA4B,CAAC,IAAA,KAAiB;AACzD,EAAA,MAAM,eAAA,GAAkB,KAAK,IAAI,CAAA,UAAA,CAAA;AACjC,EAAA,MAAM,oBAAA,GAAuB,GAAG,eAAe,CAAA,IAAA,CAAA;AAC/C,EAAA,MAAM,wBAAA,GACJ,OAAO,eAAe,CAAA;AACxB,EAAA,MAAM,6BAAA,GACJ,OAAO,oBAAoB,CAAA;AAE7B,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,MAAA,CAAO,IAAI,UAAA,EAAY;AAAA,IACjD,IAAA,EAAM,eAAA;AAAA,IACN,KAAA,GAAQ;AACN,MAAA,MAAM,gBAAgB,GAAA,EAAiB;AACvC,MAAA,MAAM,OAAA,uBAAuD,GAAA,EAAI;AACjE,MAAA,MAAM,YAAY,MAAM;AACtB,QAAA,MAAM,YAAA,GAAe,MAAM,aAAa,CAAA;AAExC,QAAA,IAAI,CAAC,YAAA,EAAc,OAAO,EAAC;AAC3B,QAAA,MAAM,eAAe,KAAA,CAAM,IAAA;AAAA,UACzB,YAAA,CAAa,gBAAA,CAAiB,CAAA,CAAA,EAAI,oBAAoB,CAAA,CAAA,CAAG;AAAA,SAC3D;AAEA,QAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,OAAA,CAAQ,QAAQ,CAAA;AAElC,QAAA,OAAO,KAAA,CAAM,IAAA;AAAA,UACX,CAAC,CAAA,EAAG,CAAA,KAAM,YAAA,CAAa,OAAA,CAAQ,CAAA,CAAE,GAAI,CAAA,GAAI,YAAA,CAAa,OAAA,CAAQ,CAAA,CAAE,GAAI;AAAA,SACtE;AAAA,MACF,CAAA,CAAA;AAEA,MAAA,OAAA,CAAQ,wBAAA,EAA0B;AAAA,QAChC,OAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH;AAAA,GACD,CAAA;AAED,EAAA,MAAM,gBAAA,GAAmB,MAAA,CAAO,MAAA,CAAO,IAAI,cAAA,EAAgB;AAAA,IACzD,IAAA,EAAM,oBAAA;AAAA,IACN,KAAA,CAAM,CAAA,EAAY,EAAE,KAAA,EAAM,EAAiB;AACzC,MAAA,MAAM,oBAAoB,GAAA,EAAiB;AAC3C,MAAA,MAAM,mBAAA,GAAsB,MAAA,CAAO,wBAAA,EAA0B,MAAS,CAAA;AAEtE,MAAA,OAAA,CAAQ,6BAAA,EAA+B;AAAA,QACrC;AAAA,OACD,CAAA;AAED,MAAA,SAAA,CAAU,MAAM;AACd,QAAA,MAAM,gBAAA,GAAmB,MAAM,iBAAiB,CAAA;AAChD,QAAA,IAAI,gBAAA,EAAkB;AACpB,UAAA,mBAAA,CAAoB,OAAA,CAAQ,IAAI,gBAAA,EAAkB;AAAA,YAChD,GAAA,EAAK,gBAAA;AAAA,YACL,GAAG;AAAA,WACJ,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA;AAED,MAAA,eAAA,CAAgB,MAAM;AACpB,QAAA,MAAM,gBAAA,GAAmB,MAAM,iBAAiB,CAAA;AAChD,QAAA,mBAAA,CAAoB,OAAA,CAAQ,OAAO,gBAAgB,CAAA;AAAA,MACrD,CAAC,CAAA;AAAA,IACH;AAAA,GACD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,wBAAA;AAAA,IACA,6BAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}