pageBody.tsx 1.3 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1
import { ref, renderSlot, defineComponent, Ref } from 'vue'
fxy060608's avatar
fxy060608 已提交
2

fxy060608's avatar
fxy060608 已提交
3
import { usePageMeta } from '../../setup/provide'
fxy060608's avatar
fxy060608 已提交
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

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 =
fxy060608's avatar
fxy060608 已提交
19 20 21
      !__NODE_JS__ &&
      __UNI_FEATURE_PULL_DOWN_REFRESH__ &&
      pageMeta.enablePullDownRefresh
fxy060608's avatar
fxy060608 已提交
22 23 24 25
        ? usePageRefresh(refreshRef)
        : null

    return () => {
fxy060608's avatar
fxy060608 已提交
26 27 28
      const pageRefreshTsx =
        __UNI_FEATURE_PULL_DOWN_REFRESH__ &&
        createPageRefreshTsx(refreshRef, pageMeta)
fxy060608's avatar
fxy060608 已提交
29
      return (
fxy060608's avatar
fxy060608 已提交
30
        <div>
fxy060608's avatar
fxy060608 已提交
31 32 33 34
          {pageRefreshTsx}
          <uni-page-wrapper {...pageRefresh}>
            <uni-page-body>{renderSlot(ctx.slots, 'default')}</uni-page-body>
          </uni-page-wrapper>
fxy060608's avatar
fxy060608 已提交
35
        </div>
fxy060608's avatar
fxy060608 已提交
36 37 38 39 40 41 42 43 44 45 46
      )
    }
  },
})

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