index.tsx 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import React from 'react';
  2. import BaseComponent, { BaseProps } from '../_base/baseComponent';
  3. import { cssClasses } from '@douyinfe/semi-foundation/scrollList/constants';
  4. import classnames from 'classnames';
  5. import propTypes from 'prop-types';
  6. import ScrollItem from './scrollItem';
  7. import Foundation from '@douyinfe/semi-foundation/scrollList/foundation';
  8. import '@douyinfe/semi-foundation/scrollList/scrollList.scss';
  9. export { ScrollItemProps } from './scrollItem';
  10. export interface ScrollListProps extends BaseProps {
  11. header?: React.ReactNode;
  12. footer?: React.ReactNode;
  13. children?: React.ReactNode;
  14. bodyHeight?: number | string;
  15. prefixCls?: string;
  16. }
  17. // eslint-disable-next-line @typescript-eslint/ban-types
  18. class ScrollList extends BaseComponent<ScrollListProps, {}> {
  19. static Item = ScrollItem;
  20. static propTypes = {
  21. className: propTypes.string,
  22. header: propTypes.node,
  23. footer: propTypes.node,
  24. children: propTypes.node,
  25. bodyHeight: propTypes.oneOfType([propTypes.number, propTypes.string]),
  26. };
  27. constructor(props: ScrollListProps) {
  28. super(props);
  29. this.foundation = new Foundation(this.adapter);
  30. }
  31. render() {
  32. const { children, header, footer, prefixCls, bodyHeight, className, style } = this.props;
  33. const clsWrapper = classnames(className, {
  34. [prefixCls || cssClasses.PREFIX]: true,
  35. });
  36. const clsHeader = classnames({
  37. [`${prefixCls || cssClasses.PREFIX}-header`]: true,
  38. });
  39. return (
  40. <div className={clsWrapper} style={style}>
  41. {header ? (
  42. <div className={clsHeader}>
  43. <div className={`${clsHeader}-title`}>{header}</div>
  44. <div className={`${clsWrapper}-line`} />
  45. </div>
  46. ) : null}
  47. <div className={`${clsWrapper}-body`} style={{ height: bodyHeight ? bodyHeight : '' }}>
  48. {children}
  49. </div>
  50. {footer ? <div className={`${clsWrapper}-footer`}>{footer}</div> : null}
  51. </div>
  52. );
  53. }
  54. }
  55. export default ScrollList;