import { ref, onMounted } from 'vue'; // Utils import { createNamespace } from '../utils'; import { BORDER_BOTTOM } from '../utils/constant'; // Composition import { useHeight } from '../composition/use-rect'; // Components import Icon from '../icon'; const [createComponent, bem] = createNamespace('nav-bar'); export default createComponent({ props: { title: String, fixed: Boolean, zIndex: [Number, String], leftText: String, rightText: String, leftArrow: Boolean, placeholder: Boolean, border: { type: Boolean, default: true, }, }, emits: ['click-left', 'click-right'], setup(props, { emit, slots }) { const height = ref(null); const navBarRef = ref(null); onMounted(() => { if (props.placeholder && props.fixed) { height.value = useHeight(navBarRef); } }); const onClickLeft = (event) => { emit('click-left', event); }; const onClickRight = (event) => { emit('click-right', event); }; const renderLeft = () => { if (slots.left) { return slots.left(); } return [ props.leftArrow && , props.leftText && {props.leftText}, ]; }; const renderRight = () => { if (slots.right) { return slots.right(); } if (props.rightText) { return {props.rightText}; } }; const renderNavBar = () => { const { title, fixed, border, zIndex } = props; return (
{renderLeft()}
{slots.title ? slots.title() : title}
{renderRight()}
); }; return () => { if (props.placeholder && props.fixed) { return (
{renderNavBar()}
); } return renderNavBar(); }; }, });