pageBody.tsx 1.3 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
import {
  ref,
  Fragment,
  openBlock,
  renderSlot,
  createBlock,
  createVNode,
  defineComponent,
  createCommentVNode,
  Ref,
  VNodeProps,
} from 'vue'

import { usePageMeta } from '../../plugin/provide'

import PageRefresh from './page-refresh/component.vue'

import { usePageRefresh } from './page-refresh'

export default defineComponent({
  name: 'PageBody',
  setup(props, ctx) {
    const pageMeta = (__UNI_FEATURE_PULL_DOWN_REFRESH__ &&
      usePageMeta()) as UniApp.PageRouteMeta

    const refreshRef = (__UNI_FEATURE_PULL_DOWN_REFRESH__ &&
      ref(null)) as Ref<null>

    const pageRefresh =
      __UNI_FEATURE_PULL_DOWN_REFRESH__ && pageMeta.enablePullDownRefresh
        ? usePageRefresh(refreshRef)
        : null

    return () => {
      const pageRefreshTsx = createPageRefreshTsx(refreshRef, pageMeta)
      return (
        <>
          {pageRefreshTsx}
          <uni-page-wrapper {...pageRefresh}>
            <uni-page-body>{renderSlot(ctx.slots, 'default')}</uni-page-body>
          </uni-page-wrapper>
        </>
      )
    }
  },
})

function createPageRefreshTsx(refreshRef: Ref, pageMeta: UniApp.PageRouteMeta) {
  if (!__UNI_FEATURE_PULL_DOWN_REFRESH__ || !pageMeta.enablePullDownRefresh) {
    return null
  }
  return <PageRefresh ref={refreshRef} />
}