tdesign-mobile-vue
Version:
tdesign-mobile-vue
110 lines (106 loc) • 4.28 kB
JavaScript
/**
* tdesign v1.7.0
* (c) 2024 TDesign Group
* @license MIT
*/
import { defineComponent, ref, createVNode } from 'vue';
import { useWindowSize, useEventListener } from '@vueuse/core';
import { useTNodeJSX } from '../hooks/tnode.js';
import { Loading } from '../loading/index.js';
import config from '../config.js';
import props from './props.js';
import { usePrefixClass } from '../hooks/useClass.js';
import { useConfig } from '../config-provider/useConfig.js';
import { useScrollParent } from '../shared/useScrollParent/index.js';
import 'lodash/isFunction';
import 'lodash/camelCase';
import 'lodash/kebabCase';
import '../hooks/render-tnode.js';
import 'lodash/isEmpty';
import 'lodash/isString';
import 'lodash/isObject';
import '../loading/loading.js';
import '@babel/runtime/helpers/defineProperty';
import '../loading/icon/gradient.js';
import '../_common/js/loading/circle-adapter.js';
import '../_common/js/utils/set-style.js';
import '../_common/js/utils/helper.js';
import '@babel/runtime/helpers/toConsumableArray';
import '@babel/runtime/helpers/objectWithoutProperties';
import '@babel/runtime/helpers/slicedToArray';
import 'lodash/isNull';
import 'lodash/isUndefined';
import 'lodash/isNumber';
import 'lodash/isArray';
import '../loading/icon/spinner.js';
import '../loading/props.js';
import '../shared/dom.js';
import '../loading/plugin.js';
import 'lodash/merge';
import 'lodash/cloneDeep';
import '../config-provider/context.js';
import 'lodash/mergeWith';
import '../_common/js/global-config/mobile/default-config.js';
import '../_common/js/global-config/mobile/locale/zh_CN.js';
import '../_chunks/dep-d5364bc4.js';
import '@babel/runtime/helpers/typeof';
import '../_chunks/dep-eb734424.js';
import 'dayjs';
import '../shared/component.js';
import '../shared/util.js';
var prefix = config.prefix;
var _List = defineComponent({
name: "".concat(prefix, "-list"),
components: {
TLoading: Loading
},
props: props,
emits: ["load-more", "scroll"],
setup: function setup(props2, _ref) {
var slots = _ref.slots;
var listClass = usePrefixClass("list");
var _useConfig = useConfig("list"),
globalConfig = _useConfig.globalConfig;
var renderTNodeJSX = useTNodeJSX();
var LOADING_TEXT_MAP = {
loading: globalConfig.value.loading,
"load-more": globalConfig.value.loadingMoreText
};
var root = ref();
var scrollParent = useScrollParent(root);
var _useWindowSize = useWindowSize(),
height = _useWindowSize.height;
var onLoadMore = function onLoadMore(e) {
if (props2.asyncLoading === "load-more") {
var _props2$onLoadMore;
(_props2$onLoadMore = props2.onLoadMore) === null || _props2$onLoadMore === void 0 || _props2$onLoadMore.call(props2);
}
};
var handleScroll = function handleScroll(e) {
var _props2$onScroll;
var scrollHeight = e.target.scrollHeight || Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);
var scrollTop = e.target.scrollTop || document.documentElement.scrollTop || document.body.scrollTop;
var offsetHeight = e.target.offsetHeight || height.value;
(_props2$onScroll = props2.onScroll) === null || _props2$onScroll === void 0 || _props2$onScroll.call(props2, scrollHeight - (scrollTop + offsetHeight), scrollTop);
};
useEventListener(scrollParent, "scroll", handleScroll);
return function () {
var headerContent = renderTNodeJSX("header");
var footerContent = renderTNodeJSX("footer");
return createVNode("div", {
"ref": root,
"class": listClass.value,
"onScroll": handleScroll
}, [headerContent, slots.default && slots.default(), createVNode("div", {
"class": "".concat(listClass.value, "__loading--wrapper"),
"onClick": onLoadMore
}, [typeof props2.asyncLoading === "string" && ["loading", "load-more"].includes(props2.asyncLoading) && createVNode(Loading, {
"indicator": props2.asyncLoading === "loading",
"text": typeof props2.asyncLoading === "string" ? LOADING_TEXT_MAP[props2.asyncLoading] : "",
"class": "".concat(listClass.value, "__loading")
}, null)]), footerContent]);
};
}
});
export { _List as default };
//# sourceMappingURL=list.js.map