1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- import React from 'react';
- import BaseComponent, { BaseProps } from '../_base/baseComponent';
- import { cssClasses } from '@douyinfe/semi-foundation/scrollList/constants';
- import classnames from 'classnames';
- import propTypes from 'prop-types';
- import ScrollItem from './scrollItem';
- import Foundation from '@douyinfe/semi-foundation/scrollList/foundation';
- import '@douyinfe/semi-foundation/scrollList/scrollList.scss';
- export { ScrollItemProps } from './scrollItem';
- export interface ScrollListProps extends BaseProps {
- header?: React.ReactNode;
- footer?: React.ReactNode;
- children?: React.ReactNode;
- bodyHeight?: number | string;
- prefixCls?: string;
- }
- // eslint-disable-next-line @typescript-eslint/ban-types
- class ScrollList extends BaseComponent<ScrollListProps, {}> {
- static Item = ScrollItem;
- static propTypes = {
- className: propTypes.string,
- header: propTypes.node,
- footer: propTypes.node,
- children: propTypes.node,
- bodyHeight: propTypes.oneOfType([propTypes.number, propTypes.string]),
- };
- constructor(props: ScrollListProps) {
- super(props);
- this.foundation = new Foundation(this.adapter);
- }
- render() {
- const { children, header, footer, prefixCls, bodyHeight, className, style } = this.props;
- const clsWrapper = classnames(className, {
- [prefixCls || cssClasses.PREFIX]: true,
- });
- const clsHeader = classnames({
- [`${prefixCls || cssClasses.PREFIX}-header`]: true,
- });
- return (
- <div className={clsWrapper} style={style}>
- {header ? (
- <div className={clsHeader}>
- <div className={`${clsHeader}-title`}>{header}</div>
- <div className={`${clsWrapper}-line`} />
- </div>
- ) : null}
- <div className={`${clsWrapper}-body`} style={{ height: bodyHeight ? bodyHeight : '' }}>
- {children}
- </div>
- {footer ? <div className={`${clsWrapper}-footer`}>{footer}</div> : null}
- </div>
- );
- }
- }
- export default ScrollList;
|