36 lines
802 B
Plaintext
36 lines
802 B
Plaintext
import { Slots } from 'vue';
|
|
import { isFunction } from '@/utils/is';
|
|
|
|
/**
|
|
* @description: Get slot to prevent empty error
|
|
*/
|
|
export function getSlot(slots: Slots, slot = 'default', data?: any) {
|
|
if (!slots || !Reflect.has(slots, slot)) {
|
|
return null;
|
|
}
|
|
if (!isFunction(slots[slot])) {
|
|
console.error(`${slot} is not a function!`);
|
|
return null;
|
|
}
|
|
const slotFn = slots[slot];
|
|
if (!slotFn) return null;
|
|
return slotFn(data);
|
|
}
|
|
|
|
/**
|
|
* extends slots
|
|
* @param slots
|
|
* @param excludeKeys
|
|
*/
|
|
export function extendSlots(slots: Slots, excludeKeys: string[] = []) {
|
|
const slotKeys = Object.keys(slots);
|
|
const ret: any = {};
|
|
slotKeys.map((key) => {
|
|
if (excludeKeys.includes(key)) {
|
|
return null;
|
|
}
|
|
ret[key] = () => getSlot(slots, key);
|
|
});
|
|
return ret;
|
|
}
|