import { computed } from 'vue';
// Utils
import { createNamespace, addUnit } from '../utils';
import { BORDER } from '../utils/constant';
import { GRID_KEY } from '../grid';
// Composition
import { useParent } from '@vant/use';
import { useRoute, routeProps } from '../composables/use-route';
// Components
import Icon from '../icon';
import Badge from '../badge';
const [createComponent, bem] = createNamespace('grid-item');
export default createComponent({
props: {
...routeProps,
dot: Boolean,
text: String,
icon: String,
badge: [Number, String],
iconPrefix: String,
},
setup(props, { slots }) {
const { parent, index } = useParent(GRID_KEY);
const route = useRoute();
const rootStyle = computed(() => {
const { square, gutter, columnNum } = parent.props;
const percent = `${100 / columnNum}%`;
const style = {
flexBasis: percent,
};
if (square) {
style.paddingTop = percent;
} else if (gutter) {
const gutterValue = addUnit(gutter);
style.paddingRight = gutterValue;
if (index.value >= columnNum) {
style.marginTop = gutterValue;
}
}
return style;
});
const contentStyle = computed(() => {
const { square, gutter } = parent.props;
if (square && gutter) {
const gutterValue = addUnit(gutter);
return {
right: gutterValue,
bottom: gutterValue,
height: 'auto',
};
}
});
const renderIcon = () => {
if (slots.icon) {
return (