82 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { computed, nextTick, reactive, onMounted, defineComponent, createVNode as _createVNode } from "vue";
 | 
						|
import { createNamespace } from "../utils/index.mjs";
 | 
						|
import { SWIPE_KEY } from "../swipe/Swipe.mjs";
 | 
						|
import { useParent } from "@vant/use";
 | 
						|
import { useExpose } from "../composables/use-expose.mjs";
 | 
						|
const [name, bem] = createNamespace("swipe-item");
 | 
						|
var stdin_default = defineComponent({
 | 
						|
  name,
 | 
						|
  setup(props, {
 | 
						|
    slots
 | 
						|
  }) {
 | 
						|
    let rendered;
 | 
						|
    const state = reactive({
 | 
						|
      offset: 0,
 | 
						|
      inited: false,
 | 
						|
      mounted: false
 | 
						|
    });
 | 
						|
    const {
 | 
						|
      parent,
 | 
						|
      index
 | 
						|
    } = useParent(SWIPE_KEY);
 | 
						|
    if (!parent) {
 | 
						|
      if (process.env.NODE_ENV !== "production") {
 | 
						|
        console.error("[Vant] <SwipeItem> must be a child component of <Swipe>.");
 | 
						|
      }
 | 
						|
      return;
 | 
						|
    }
 | 
						|
    const style = computed(() => {
 | 
						|
      const style2 = {};
 | 
						|
      const {
 | 
						|
        vertical
 | 
						|
      } = parent.props;
 | 
						|
      if (parent.size.value) {
 | 
						|
        style2[vertical ? "height" : "width"] = `${parent.size.value}px`;
 | 
						|
      }
 | 
						|
      if (state.offset) {
 | 
						|
        style2.transform = `translate${vertical ? "Y" : "X"}(${state.offset}px)`;
 | 
						|
      }
 | 
						|
      return style2;
 | 
						|
    });
 | 
						|
    const shouldRender = computed(() => {
 | 
						|
      const {
 | 
						|
        loop,
 | 
						|
        lazyRender
 | 
						|
      } = parent.props;
 | 
						|
      if (!lazyRender || rendered) {
 | 
						|
        return true;
 | 
						|
      }
 | 
						|
      if (!state.mounted) {
 | 
						|
        return false;
 | 
						|
      }
 | 
						|
      const active = parent.activeIndicator.value;
 | 
						|
      const maxActive = parent.count.value - 1;
 | 
						|
      const prevActive = active === 0 && loop ? maxActive : active - 1;
 | 
						|
      const nextActive = active === maxActive && loop ? 0 : active + 1;
 | 
						|
      rendered = index.value === active || index.value === prevActive || index.value === nextActive;
 | 
						|
      return rendered;
 | 
						|
    });
 | 
						|
    const setOffset = (offset) => {
 | 
						|
      state.offset = offset;
 | 
						|
    };
 | 
						|
    onMounted(() => {
 | 
						|
      nextTick(() => {
 | 
						|
        state.mounted = true;
 | 
						|
      });
 | 
						|
    });
 | 
						|
    useExpose({
 | 
						|
      setOffset
 | 
						|
    });
 | 
						|
    return () => {
 | 
						|
      var _a;
 | 
						|
      return _createVNode("div", {
 | 
						|
        "class": bem(),
 | 
						|
        "style": style.value
 | 
						|
      }, [shouldRender.value ? (_a = slots.default) == null ? void 0 : _a.call(slots) : null]);
 | 
						|
    };
 | 
						|
  }
 | 
						|
});
 | 
						|
export {
 | 
						|
  stdin_default as default
 | 
						|
};
 |