taro-ui-vue3
Version:
Taro UI Rewritten in Vue 3.0
177 lines (176 loc) • 6.83 kB
JavaScript
var __defProp = Object.defineProperty;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {enumerable: true, configurable: true, writable: true, value}) : obj[key] = value;
var __objSpread = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
import {h, defineComponent, computed, mergeProps} from "vue";
import {Text, View} from "@tarojs/components";
import {mergeStyle, pxTransform} from "../utils/common";
const AtNavBar = defineComponent({
name: "AtNavBar",
props: {
title: {
type: String,
default: ""
},
fixed: Boolean,
border: {
type: Boolean,
default: true
},
color: {
type: String,
default: "#6190E8"
},
leftIconType: {
type: [String, Object],
default: ""
},
leftText: {
type: String,
default: ""
},
rightFirstIconType: {
type: [String, Object],
default: ""
},
rightSecondIconType: {
type: [String, Object],
default: ""
},
onClickLeftIcon: Function,
onClickRightFirstIcon: Function,
onClickRightSecondIcon: Function
},
setup(props, {attrs, slots}) {
const linkStyle = computed(() => ({color: props.color}));
const defaultIconInfo = {
customStyle: "",
className: "",
prefixClass: "at-icon",
value: "",
color: "",
size: 24
};
const leftIconInfo = computed(() => props.leftIconType instanceof Object ? __objSpread(__objSpread({}, defaultIconInfo), props.leftIconType) : __objSpread(__objSpread({}, defaultIconInfo), {value: props.leftIconType}));
const leftIconClasses = computed(() => ({
[`${leftIconInfo.value.prefixClass}`]: Boolean(leftIconInfo.value.prefixClass),
[`${leftIconInfo.value.prefixClass}-${leftIconInfo.value.value}`]: Boolean(leftIconInfo.value.value),
[`${leftIconInfo.value.className}`]: Boolean(leftIconInfo.value.className)
}));
const rightFirstIconInfo = computed(() => props.rightFirstIconType instanceof Object ? __objSpread(__objSpread({}, defaultIconInfo), props.rightFirstIconType) : __objSpread(__objSpread({}, defaultIconInfo), {value: props.rightFirstIconType}));
const rightFirstIconClasses = computed(() => ({
[`${rightFirstIconInfo.value.prefixClass}`]: Boolean(rightFirstIconInfo.value.prefixClass),
[`${rightFirstIconInfo.value.prefixClass}-${rightFirstIconInfo.value.value}`]: Boolean(rightFirstIconInfo.value.value),
[`${rightFirstIconInfo.value.className}`]: Boolean(rightFirstIconInfo.value.className)
}));
const rightSecondIconInfo = computed(() => props.rightSecondIconType instanceof Object ? __objSpread(__objSpread({}, defaultIconInfo), props.rightSecondIconType) : __objSpread(__objSpread({}, defaultIconInfo), {value: props.rightSecondIconType}));
const rightSecondIconClasses = computed(() => ({
[`${rightSecondIconInfo.value.prefixClass}`]: Boolean(rightSecondIconInfo.value.prefixClass),
[`${rightSecondIconInfo.value.prefixClass}-${rightSecondIconInfo.value.value}`]: Boolean(rightSecondIconInfo.value.value),
[`${rightSecondIconInfo.value.className}`]: Boolean(rightSecondIconInfo.value.className)
}));
const rootClass = computed(() => ({
"at-nav-bar": true,
"at-nav-bar--fixed": props.fixed,
"at-nav-bar--no-border": !props.border
}));
const leftIconStyle = computed(() => mergeStyle({
color: leftIconInfo.value.color,
fontSize: `${pxTransform(parseInt(leftIconInfo.value.size.toString()) * 2)}`
}, leftIconInfo.value.customStyle));
const rightSecondIconStyle = computed(() => mergeStyle({
color: rightSecondIconInfo.value.color,
fontSize: `${pxTransform(parseInt(rightSecondIconInfo.value.size.toString()) * 2)}`
}, rightSecondIconInfo.value.customStyle));
const genContainerClasses = computed(() => (iconType) => ({
"at-nav-bar__container": true,
"at-nav-bar__container--hide": !iconType
}));
const rightFirstIconStyle = computed(() => mergeStyle({
color: rightFirstIconInfo.value.color,
fontSize: `${pxTransform(parseInt(rightFirstIconInfo.value.size.toString()) * 2)}`
}, rightFirstIconInfo.value.customStyle));
function handleLeftIconClick(event) {
var _a;
(_a = props.onClickLeftIcon) == null ? void 0 : _a.call(props, event);
}
function handleFirstIconClick(event) {
var _a;
(_a = props.onClickRightFirstIcon) == null ? void 0 : _a.call(props, event);
}
function handleSecondIconClick(event) {
var _a;
(_a = props.onClickRightSecondIcon) == null ? void 0 : _a.call(props, event);
}
return () => h(View, mergeProps(attrs, {
class: rootClass.value
}), {
default: () => [
h(View, {
class: "at-nav-bar__left-view",
style: linkStyle.value,
onTap: handleLeftIconClick
}, {
default: () => [
props.leftIconType && h(Text, {
class: leftIconClasses.value,
style: leftIconStyle.value
}),
h(Text, {
class: "at-nav-bar__text"
}, {default: () => props.leftText})
]
}),
h(View, {
class: "at-nav-bar__title"
}, {default: () => props.title || slots.default && slots.default()}),
h(View, {
class: "at-nav-bar__right-view"
}, {
default: () => [
h(View, {
class: genContainerClasses.value(props.rightSecondIconType),
style: linkStyle.value,
onTap: handleSecondIconClick
}, {
default: () => [
props.rightSecondIconType && h(Text, {
class: rightSecondIconClasses.value,
style: rightSecondIconStyle.value
})
]
}),
h(View, {
class: genContainerClasses.value(props.rightFirstIconType),
style: linkStyle.value,
onTap: handleFirstIconClick
}, {
default: () => [
props.rightFirstIconType && h(Text, {
class: rightFirstIconClasses.value,
style: rightFirstIconStyle.value
})
]
})
]
})
]
});
}
});
var nav_bar_default = AtNavBar;
export {
nav_bar_default as default
};