Application Android et IOS pour l'amicale des élèves
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CollapsibleComponent.js 1.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // @flow
  2. import * as React from 'react';
  3. import {Collapsible} from 'react-navigation-collapsible';
  4. import withCollapsible from '../../utils/withCollapsible';
  5. import CustomTabBar from '../Tabbar/CustomTabBar';
  6. export type CollapsibleComponentPropsType = {
  7. children?: React.Node,
  8. hasTab?: boolean,
  9. onScroll?: (event: SyntheticEvent<EventTarget>) => void,
  10. };
  11. type PropsType = {
  12. ...CollapsibleComponentPropsType,
  13. collapsibleStack: Collapsible,
  14. // eslint-disable-next-line flowtype/no-weak-types
  15. component: any,
  16. };
  17. class CollapsibleComponent extends React.Component<PropsType> {
  18. static defaultProps = {
  19. children: null,
  20. hasTab: false,
  21. onScroll: null,
  22. };
  23. onScroll = (event: SyntheticEvent<EventTarget>) => {
  24. const {props} = this;
  25. if (props.onScroll) props.onScroll(event);
  26. };
  27. render(): React.Node {
  28. const {props} = this;
  29. const Comp = props.component;
  30. const {
  31. containerPaddingTop,
  32. scrollIndicatorInsetTop,
  33. onScrollWithListener,
  34. } = props.collapsibleStack;
  35. return (
  36. <Comp
  37. // eslint-disable-next-line react/jsx-props-no-spreading
  38. {...props}
  39. onScroll={onScrollWithListener(this.onScroll)}
  40. contentContainerStyle={{
  41. paddingTop: containerPaddingTop,
  42. paddingBottom: props.hasTab ? CustomTabBar.TAB_BAR_HEIGHT : 0,
  43. minHeight: '100%',
  44. }}
  45. scrollIndicatorInsets={{top: scrollIndicatorInsetTop}}>
  46. {props.children}
  47. </Comp>
  48. );
  49. }
  50. }
  51. export default withCollapsible(CollapsibleComponent);