tdesign-vue-next
Version:
TDesign Component for vue-next
1 lines • 8.11 kB
Source Map (JSON)
{"version":3,"file":"notification-list.mjs","sources":["../../../components/notification/notification-list.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 './constants';\nimport { usePrefixClass } from '@tdesign/shared-hooks';\n\nexport default defineComponent({\n props: {\n /**\n * 相对于 placement 的偏移量,示例:[-10, 20] 或 ['10em', '8rem']\n */\n offset: Array<string | number>,\n\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, offset } = props as NotificationOptions;\n\n const list: Ref<NotificationOptions[]> = ref([]);\n const notificationList = ref([]);\n\n const styles = computed(() => {\n const style: CSSProperties = {\n zIndex: DEFAULT_Z_INDEX,\n ...PLACEMENT_OFFSET[placement],\n };\n\n if (Array.isArray(offset) && offset.length === 2) {\n const horizontalProp = placement.includes('left') ? 'left' : 'right';\n const verticalProp = placement.includes('top') ? 'top' : 'bottom';\n\n style[horizontalProp as 'left' | 'right'] = getOffset(offset[0]) ?? style[horizontalProp as 'left' | 'right'];\n style[verticalProp as 'top' | 'bottom'] = getOffset(offset[1]) ?? style[verticalProp as 'top' | 'bottom'];\n }\n\n return style;\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: { zIndex: number }) => {\n const styles: CSSProperties = {\n marginBottom: DISTANCE,\n };\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 onClose: () => {\n if (item.onClose) {\n item.onClose();\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 return (\n <div class={`${COMPONENT_NAME.value}__show`} style={styles.value}>\n {list.value.map((item: { 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":["defineComponent","props","offset","Array","placement","type","String","validator","v","indexOf","setup","_ref","expose","COMPONENT_NAME","usePrefixClass","list","ref","notificationList","styles","computed","style","_objectSpread","zIndex","DEFAULT_Z_INDEX","PLACEMENT_OFFSET","isArray","length","_getOffset","_getOffset2","horizontalProp","includes","verticalProp","getOffset","add","options","value","push","remove","index","splice","removeAll","val","isNaN","Number","notificationStyles","item","marginBottom","DISTANCE","getProps","onCloseBtnClick","e","onDurationEnd","onClose","addChild","el","_createVNode","concat","map","Notification","_mergeProps","id"],"mappings":"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"}