Messages.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import React, { useCallback, useMemo, useState } from 'react';
  2. import TopicMessagesContext from 'components/contexts/TopicMessagesContext';
  3. import { SeekDirection } from 'generated-sources';
  4. import { useSearchParams } from 'react-router-dom';
  5. import MessagesTable from './MessagesTable';
  6. import FiltersContainer from './Filters/FiltersContainer';
  7. export const SeekDirectionOptionsObj = {
  8. [SeekDirection.BACKWARD]: {
  9. value: SeekDirection.BACKWARD,
  10. label: 'Newest First',
  11. isLive: false,
  12. },
  13. [SeekDirection.FORWARD]: {
  14. value: SeekDirection.FORWARD,
  15. label: 'Oldest First',
  16. isLive: false,
  17. },
  18. [SeekDirection.TAILING]: {
  19. value: SeekDirection.TAILING,
  20. label: 'Live Mode',
  21. isLive: true,
  22. },
  23. };
  24. export const SeekDirectionOptions = Object.values(SeekDirectionOptionsObj);
  25. const Messages: React.FC = () => {
  26. const [searchParams] = useSearchParams();
  27. const defaultSeekValue = SeekDirectionOptions[0];
  28. const [seekDirection, setSeekDirection] = React.useState<SeekDirection>(
  29. (searchParams.get('seekDirection') as SeekDirection) ||
  30. defaultSeekValue.value
  31. );
  32. const [isLive, setIsLive] = useState<boolean>(
  33. SeekDirectionOptionsObj[seekDirection].isLive
  34. );
  35. const [page, setPage] = React.useState<number>(1);
  36. const changeSeekDirection = useCallback((val: string) => {
  37. switch (val) {
  38. case SeekDirection.FORWARD:
  39. setSeekDirection(SeekDirection.FORWARD);
  40. setIsLive(SeekDirectionOptionsObj[SeekDirection.FORWARD].isLive);
  41. break;
  42. case SeekDirection.BACKWARD:
  43. setSeekDirection(SeekDirection.BACKWARD);
  44. setIsLive(SeekDirectionOptionsObj[SeekDirection.BACKWARD].isLive);
  45. break;
  46. case SeekDirection.TAILING:
  47. setSeekDirection(SeekDirection.TAILING);
  48. setIsLive(SeekDirectionOptionsObj[SeekDirection.TAILING].isLive);
  49. break;
  50. default:
  51. }
  52. }, []);
  53. const contextValue = useMemo(
  54. () => ({
  55. seekDirection,
  56. changeSeekDirection,
  57. page,
  58. setPage,
  59. isLive,
  60. }),
  61. [seekDirection, changeSeekDirection, page, setPage]
  62. );
  63. return (
  64. <TopicMessagesContext.Provider value={contextValue}>
  65. <FiltersContainer />
  66. <MessagesTable />
  67. </TopicMessagesContext.Provider>
  68. );
  69. };
  70. export default Messages;