Messages.tsx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import React, { useCallback, useMemo, useState } from 'react';
  2. import TopicMessagesContext from 'components/contexts/TopicMessagesContext';
  3. import { SeekDirection } from 'generated-sources';
  4. import { useLocation } from 'react-router-dom';
  5. import FiltersContainer from './Filters/FiltersContainer';
  6. import MessagesTable from './MessagesTable';
  7. export const SeekDirectionOptionsObj = {
  8. [SeekDirection.FORWARD]: {
  9. value: SeekDirection.FORWARD,
  10. label: 'Oldest First',
  11. isLive: false,
  12. },
  13. [SeekDirection.BACKWARD]: {
  14. value: SeekDirection.BACKWARD,
  15. label: 'Newest 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 location = useLocation();
  27. const searchParams = React.useMemo(
  28. () => new URLSearchParams(location.search),
  29. [location.search]
  30. );
  31. const defaultSeekValue = SeekDirectionOptions[0];
  32. const [seekDirection, setSeekDirection] = React.useState<SeekDirection>(
  33. (searchParams.get('seekDirection') as SeekDirection) ||
  34. defaultSeekValue.value
  35. );
  36. const [isLive, setIsLive] = useState<boolean>(
  37. SeekDirectionOptionsObj[seekDirection].isLive
  38. );
  39. const changeSeekDirection = useCallback((val: string) => {
  40. switch (val) {
  41. case SeekDirection.FORWARD:
  42. setSeekDirection(SeekDirection.FORWARD);
  43. setIsLive(SeekDirectionOptionsObj[SeekDirection.FORWARD].isLive);
  44. break;
  45. case SeekDirection.BACKWARD:
  46. setSeekDirection(SeekDirection.BACKWARD);
  47. setIsLive(SeekDirectionOptionsObj[SeekDirection.BACKWARD].isLive);
  48. break;
  49. case SeekDirection.TAILING:
  50. setSeekDirection(SeekDirection.TAILING);
  51. setIsLive(SeekDirectionOptionsObj[SeekDirection.TAILING].isLive);
  52. break;
  53. default:
  54. }
  55. }, []);
  56. const contextValue = useMemo(
  57. () => ({
  58. seekDirection,
  59. searchParams,
  60. changeSeekDirection,
  61. isLive,
  62. }),
  63. [seekDirection, searchParams, changeSeekDirection]
  64. );
  65. return (
  66. <TopicMessagesContext.Provider value={contextValue}>
  67. <FiltersContainer />
  68. <MessagesTable />
  69. </TopicMessagesContext.Provider>
  70. );
  71. };
  72. export default Messages;