UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 5.58 kB
{"version":3,"file":"notificationList.mjs","sources":["../../src/notification/notificationList.tsx"],"sourcesContent":["import { defineComponent, ref, computed, Ref, CSSProperties } from 'vue';\nimport Notification from './notification';\nimport { TdNotificationProps, NotificationOptions } from './type';\nimport { DEFAULT_Z_INDEX, PLACEMENT_OFFSET, DISTANCE } from './const';\nimport { usePrefixClass } from '../hooks/useConfig';\n\nexport default defineComponent({\n props: {\n placement: {\n type: String,\n default: 'top-right',\n validator(v: string): boolean {\n return ['top-left', 'top-right', 'bottom-left', 'bottom-right'].indexOf(v) > -1;\n },\n },\n },\n setup(props, { expose }) {\n const COMPONENT_NAME = usePrefixClass('notification-list');\n\n const { placement } = props as NotificationOptions;\n\n const list: Ref<NotificationOptions[]> = ref([]);\n const notificationList = ref([]);\n\n const styles = computed(() => ({\n zIndex: DEFAULT_Z_INDEX,\n ...PLACEMENT_OFFSET[placement],\n }));\n\n const add = (options: TdNotificationProps): number => {\n list.value.push(options);\n return list.value.length - 1;\n };\n\n const remove = (index: number) => {\n list.value.splice(index, 1);\n };\n\n const removeAll = () => {\n list.value = [];\n };\n\n const getOffset = (val: string | number) => {\n if (!val) return;\n return isNaN(Number(val)) ? val : `${val}px`;\n };\n\n const notificationStyles = (item: { offset: NotificationOptions['offset']; zIndex: number }) => {\n const styles: CSSProperties = {\n marginBottom: DISTANCE,\n };\n if (item.offset) {\n styles.position = 'relative';\n styles.left = getOffset(item.offset[0]);\n styles.top = getOffset(item.offset[1]);\n }\n if (item.zIndex) styles['z-index'] = item.zIndex;\n return styles;\n };\n\n const getProps = (index: number, item: NotificationOptions) => {\n return {\n ...item,\n onCloseBtnClick: (e: any) => {\n if (item.onCloseBtnClick) {\n item.onCloseBtnClick(e);\n }\n return remove(index);\n },\n onDurationEnd: () => {\n if (item.onDurationEnd) {\n item.onDurationEnd();\n }\n return remove(index);\n },\n };\n };\n\n const addChild = (el: Element) => {\n if (el) {\n notificationList.value.push(el);\n }\n };\n expose({ add, remove, removeAll, list, notificationList });\n\n return () => {\n if (!list.value.length) return;\n\n return (\n <div class={`${COMPONENT_NAME.value}__show`} style={styles.value}>\n {list.value.map((item: { offset: NotificationOptions['offset']; zIndex: number; id: number }, index) => (\n <Notification ref={addChild} key={item.id} style={notificationStyles(item)} {...getProps(index, item)} />\n ))}\n </div>\n );\n };\n },\n});\n"],"names":["props","placement","type","setup","zIndex","list","marginBottom","styles","onCloseBtnClick","item","notificationList","expose","add","remove","removeAll","_createVNode","Notification","_mergeProps"],"mappings":"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"}