kopia lustrzana https://github.com/bugout-dev/moonstream
				
				
				
			Add initial version.
							rodzic
							
								
									b1604d6b10
								
							
						
					
					
						commit
						2014984705
					
				| 
						 | 
				
			
			@ -40,6 +40,8 @@ import { FaFilter } from "react-icons/fa";
 | 
			
		|||
import useStream from "../core/hooks/useStream";
 | 
			
		||||
import { ImCancelCircle } from "react-icons/im";
 | 
			
		||||
import { previousEvent } from "../core/services/stream.service";
 | 
			
		||||
import { useQueryClient } from "react-query";
 | 
			
		||||
import { PAGE_SIZE } from "../core/constants";
 | 
			
		||||
 | 
			
		||||
const FILTER_TYPES = {
 | 
			
		||||
  ADDRESS: 0,
 | 
			
		||||
| 
						 | 
				
			
			@ -75,7 +77,8 @@ const EntriesNavigation = () => {
 | 
			
		|||
    },
 | 
			
		||||
  ]);
 | 
			
		||||
  const [filterState, setFilterState] = useState([]);
 | 
			
		||||
 | 
			
		||||
  const queryClient = useQueryClient();
 | 
			
		||||
  console.log(queryClient);
 | 
			
		||||
  const loadMoreButtonRef = useRef(null);
 | 
			
		||||
 | 
			
		||||
  const {
 | 
			
		||||
| 
						 | 
				
			
			@ -83,6 +86,7 @@ const EntriesNavigation = () => {
 | 
			
		|||
    eventsIsLoading,
 | 
			
		||||
    eventsRefetch,
 | 
			
		||||
    eventsIsFetching,
 | 
			
		||||
    setEvents,
 | 
			
		||||
    latestEventsRefetch,
 | 
			
		||||
    nextEventRefetch,
 | 
			
		||||
    previousEventRefetch,
 | 
			
		||||
| 
						 | 
				
			
			@ -90,6 +94,8 @@ const EntriesNavigation = () => {
 | 
			
		|||
    setDefaultBoundary,
 | 
			
		||||
    loadOlderEvents,
 | 
			
		||||
    loadNewerEvents,
 | 
			
		||||
    cursor,
 | 
			
		||||
    setCursor,
 | 
			
		||||
  } = useStream(ui.searchTerm.q);
 | 
			
		||||
 | 
			
		||||
  useEffect(() => {
 | 
			
		||||
| 
						 | 
				
			
			@ -460,8 +466,64 @@ const EntriesNavigation = () => {
 | 
			
		|||
                <Center>
 | 
			
		||||
                  <Button
 | 
			
		||||
                    onClick={() => {
 | 
			
		||||
                      // need change current user view
 | 
			
		||||
                      // and change cursor to cursor + page_size
 | 
			
		||||
                      console.log(queryClient.getQueryData("stream-events"));
 | 
			
		||||
                      console.log(
 | 
			
		||||
                        "queryClient.getQueryData('stream-events').lenght > cursor + 2 * PAGE_SIZE",
 | 
			
		||||
                        queryClient.getQueryData("stream-events").length >
 | 
			
		||||
                          cursor + 2 * PAGE_SIZE
 | 
			
		||||
                      );
 | 
			
		||||
                      if (
 | 
			
		||||
                        queryClient.getQueryData("stream-events").length >
 | 
			
		||||
                        cursor + 2 * PAGE_SIZE
 | 
			
		||||
                      ) {
 | 
			
		||||
                        console.log("cursor", cursor);
 | 
			
		||||
                        console.log(
 | 
			
		||||
                          "cursor + PAGE_SIZE - 1",
 | 
			
		||||
                          cursor + PAGE_SIZE - 1
 | 
			
		||||
                        );
 | 
			
		||||
                        console.log(
 | 
			
		||||
                          " cursor + 2 * PAGE_SIZE",
 | 
			
		||||
                          cursor + 2 * PAGE_SIZE
 | 
			
		||||
                        );
 | 
			
		||||
                        setEvents(
 | 
			
		||||
                          queryClient
 | 
			
		||||
                            .getQueryData(["stream-events"])
 | 
			
		||||
                            .slice(
 | 
			
		||||
                              cursor + PAGE_SIZE - 1,
 | 
			
		||||
                              cursor + 2 * PAGE_SIZE
 | 
			
		||||
                            )
 | 
			
		||||
                        );
 | 
			
		||||
                        setCursor(cursor + PAGE_SIZE);
 | 
			
		||||
                        console.log(
 | 
			
		||||
                          "setEvents",
 | 
			
		||||
                          queryClient
 | 
			
		||||
                            .getQueryData(["stream-events"])
 | 
			
		||||
                            .slice(
 | 
			
		||||
                              cursor + PAGE_SIZE - 1,
 | 
			
		||||
                              cursor + 2 * PAGE_SIZE
 | 
			
		||||
                            )
 | 
			
		||||
                        );
 | 
			
		||||
                      } else if (
 | 
			
		||||
                        queryClient.getQueryData("stream-events").length ==
 | 
			
		||||
                        cursor + 2 * PAGE_SIZE
 | 
			
		||||
                      ) {
 | 
			
		||||
                        setEvents(
 | 
			
		||||
                          queryClient
 | 
			
		||||
                            .getQueryData("stream-events")
 | 
			
		||||
                            .slice(
 | 
			
		||||
                              cursor + PAGE_SIZE - 1,
 | 
			
		||||
                              cursor + 2 * PAGE_SIZE
 | 
			
		||||
                            )
 | 
			
		||||
                        );
 | 
			
		||||
                        setCursor(cursor + PAGE_SIZE);
 | 
			
		||||
                        loadOlderEvents();
 | 
			
		||||
                        previousEventRefetch();
 | 
			
		||||
                      } else {
 | 
			
		||||
                        loadOlderEvents();
 | 
			
		||||
                        previousEventRefetch();
 | 
			
		||||
                      }
 | 
			
		||||
                    }}
 | 
			
		||||
                    variant="outline"
 | 
			
		||||
                    colorScheme="suggested"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,5 +33,7 @@ export const USER_NAV_PATHES = [
 | 
			
		|||
  },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
export const PAGE_SIZE = 50;
 | 
			
		||||
 | 
			
		||||
export const AWS_ASSETS_PATH = `https://s3.amazonaws.com/static.simiotics.com/moonstream/assets`;
 | 
			
		||||
export const WHITE_LOGO_W_TEXT_URL = `https://s3.amazonaws.com/static.simiotics.com/moonstream/assets/moon-logo%2Btext-white.svg`;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,16 +1,19 @@
 | 
			
		|||
import { useState } from "react";
 | 
			
		||||
 | 
			
		||||
import { StreamService } from "../services";
 | 
			
		||||
import { useQuery } from "react-query";
 | 
			
		||||
import { useQuery, useQueryClient } from "react-query";
 | 
			
		||||
import { queryCacheProps } from "./hookCommon";
 | 
			
		||||
import { defaultStreamBoundary } from "../services/servertime.service.js";
 | 
			
		||||
 | 
			
		||||
import { PAGE_SIZE } from "../constants";
 | 
			
		||||
const useStream = (q) => {
 | 
			
		||||
  const [streamQuery, setStreamQuery] = useState(q || "");
 | 
			
		||||
  const [events, setEvents] = useState([]);
 | 
			
		||||
  const [streamBoundary, setStreamBoundary] = useState({});
 | 
			
		||||
  const [olderEvent, setOlderEvent] = useState(null);
 | 
			
		||||
  const [newerEvent, setNewerEvent] = useState(null);
 | 
			
		||||
  const [cursor, setCursor] = useState(null);
 | 
			
		||||
 | 
			
		||||
  const queryClient = useQueryClient();
 | 
			
		||||
 | 
			
		||||
  const isStreamBoundaryEmpty = () => {
 | 
			
		||||
    return !streamBoundary.start_time && !streamBoundary.end_time;
 | 
			
		||||
| 
						 | 
				
			
			@ -84,6 +87,10 @@ const useStream = (q) => {
 | 
			
		|||
    return response.data;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  //////////////////////////////////////////////////
 | 
			
		||||
  /// Just load event by current event boundary ///
 | 
			
		||||
  ////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
  const {
 | 
			
		||||
    isLoading: eventsIsLoading,
 | 
			
		||||
    refetch: eventsRefetch,
 | 
			
		||||
| 
						 | 
				
			
			@ -102,13 +109,21 @@ const useStream = (q) => {
 | 
			
		|||
      retry: 2,
 | 
			
		||||
      onSuccess: (newEvents) => {
 | 
			
		||||
        if (newEvents && newEvents.stream_boundary && newEvents.events) {
 | 
			
		||||
          setEvents([...newEvents.events]);
 | 
			
		||||
          setCursor(0);
 | 
			
		||||
 | 
			
		||||
          queryClient.setQueryData("stream-events", [...newEvents.events]);
 | 
			
		||||
          setEvents(newEvents.events.slice(0, PAGE_SIZE));
 | 
			
		||||
 | 
			
		||||
          updateStreamBoundaryWith(newEvents.stream_boundary, {});
 | 
			
		||||
        }
 | 
			
		||||
      },
 | 
			
		||||
    }
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  ///////////////////////////
 | 
			
		||||
  /// Load olders events ///
 | 
			
		||||
  /////////////////////////
 | 
			
		||||
 | 
			
		||||
  const { refetch: loadOlderEvents, isFetching: loadOlderEventsIsFetching } =
 | 
			
		||||
    useQuery(
 | 
			
		||||
      ["stream-events", streamQuery],
 | 
			
		||||
| 
						 | 
				
			
			@ -116,11 +131,11 @@ const useStream = (q) => {
 | 
			
		|||
        if (olderEvent) {
 | 
			
		||||
          const newStreamBoundary = {
 | 
			
		||||
            // 5 minutes before the previous event
 | 
			
		||||
            start_time: olderEvent.event_timestamp - 5 * 60,
 | 
			
		||||
            start_time: olderEvent.event_timestamp - 1 * 60,
 | 
			
		||||
            include_start: true,
 | 
			
		||||
            // TODO(zomglings): This is a workaround to what seems to be a filter bug on `created_at:<=...` filters
 | 
			
		||||
            // on Bugout journals. Please look into it.
 | 
			
		||||
            end_time: olderEvent.event_timestamp + 1,
 | 
			
		||||
            end_time: olderEvent.event_timestamp - 1,
 | 
			
		||||
            include_end: false,
 | 
			
		||||
          };
 | 
			
		||||
          return getEvents(newStreamBoundary);
 | 
			
		||||
| 
						 | 
				
			
			@ -132,7 +147,9 @@ const useStream = (q) => {
 | 
			
		|||
        retry: 2,
 | 
			
		||||
        onSuccess: (newEvents) => {
 | 
			
		||||
          if (newEvents && newEvents.stream_boundary && newEvents.events) {
 | 
			
		||||
            setEvents([...newEvents.events, ...events]);
 | 
			
		||||
            queryClient
 | 
			
		||||
              .getQueryData("stream-events")
 | 
			
		||||
              .push([...newEvents.events]);
 | 
			
		||||
            updateStreamBoundaryWith(newEvents.stream_boundary, {
 | 
			
		||||
              ignoreEnd: true,
 | 
			
		||||
            });
 | 
			
		||||
| 
						 | 
				
			
			@ -141,6 +158,10 @@ const useStream = (q) => {
 | 
			
		|||
      }
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
  ///////////////////////////
 | 
			
		||||
  /// Load newest events ///
 | 
			
		||||
  /////////////////////////
 | 
			
		||||
 | 
			
		||||
  const { refetch: loadNewerEvents, isFetching: loadNewerEventsIsFetching } =
 | 
			
		||||
    useQuery(
 | 
			
		||||
      ["stream-events", streamQuery],
 | 
			
		||||
| 
						 | 
				
			
			@ -149,7 +170,7 @@ const useStream = (q) => {
 | 
			
		|||
          const newStreamBoundary = {
 | 
			
		||||
            // TODO(zomglings): This is a workaround to what seems to be a filter bug on `created_at:>=...` filters
 | 
			
		||||
            // on Bugout journals. Please look into it.
 | 
			
		||||
            start_time: newerEvent.event_timestamp - 1,
 | 
			
		||||
            start_time: newerEvent.event_timestamp + 1,
 | 
			
		||||
            include_start: false,
 | 
			
		||||
            // 5 minutes after the next event
 | 
			
		||||
            end_time: newerEvent.event_timestamp + 5 * 60,
 | 
			
		||||
| 
						 | 
				
			
			@ -164,7 +185,13 @@ const useStream = (q) => {
 | 
			
		|||
        retry: 2,
 | 
			
		||||
        onSuccess: (newEvents) => {
 | 
			
		||||
          if (newEvents && newEvents.stream_boundary && newEvents.events) {
 | 
			
		||||
            setEvents([...events, ...newEvents.events]);
 | 
			
		||||
            //setEvents([...events, ...newEvents.events]);
 | 
			
		||||
            newEvents.events.push(
 | 
			
		||||
              queryClient
 | 
			
		||||
                .getQueryData("stream-events")
 | 
			
		||||
                .push([...newEvents.events])
 | 
			
		||||
            );
 | 
			
		||||
            queryClient.setQueryData("stream-events", newEvents.events);
 | 
			
		||||
            updateStreamBoundaryWith(newEvents.stream_boundary, {
 | 
			
		||||
              ignoreStart: true,
 | 
			
		||||
            });
 | 
			
		||||
| 
						 | 
				
			
			@ -178,6 +205,10 @@ const useStream = (q) => {
 | 
			
		|||
    return response.data;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  /////////////////////
 | 
			
		||||
  /// latest event ///
 | 
			
		||||
  ///////////////////
 | 
			
		||||
 | 
			
		||||
  const {
 | 
			
		||||
    data: latestEvents,
 | 
			
		||||
    isLoading: latestEventsIsLoading,
 | 
			
		||||
| 
						 | 
				
			
			@ -208,6 +239,10 @@ const useStream = (q) => {
 | 
			
		|||
    return response.data;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  ///////////////////////
 | 
			
		||||
  /// get next event ///
 | 
			
		||||
  /////////////////////
 | 
			
		||||
 | 
			
		||||
  const {
 | 
			
		||||
    data: nextEvent,
 | 
			
		||||
    isLoading: nextEventIsLoading,
 | 
			
		||||
| 
						 | 
				
			
			@ -238,6 +273,10 @@ const useStream = (q) => {
 | 
			
		|||
    return response.data;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  ///////////////////////////
 | 
			
		||||
  /// get previous event ///
 | 
			
		||||
  /////////////////////////
 | 
			
		||||
 | 
			
		||||
  const {
 | 
			
		||||
    data: previousEvent,
 | 
			
		||||
    isLoading: previousEventIsLoading,
 | 
			
		||||
| 
						 | 
				
			
			@ -268,6 +307,7 @@ const useStream = (q) => {
 | 
			
		|||
    eventsRefetch,
 | 
			
		||||
    eventsIsFetching,
 | 
			
		||||
    eventsRemove,
 | 
			
		||||
    setEvents,
 | 
			
		||||
    setStreamQuery,
 | 
			
		||||
    latestEvents,
 | 
			
		||||
    latestEventsIsLoading,
 | 
			
		||||
| 
						 | 
				
			
			@ -288,6 +328,8 @@ const useStream = (q) => {
 | 
			
		|||
    loadOlderEventsIsFetching,
 | 
			
		||||
    loadNewerEvents,
 | 
			
		||||
    loadNewerEventsIsFetching,
 | 
			
		||||
    cursor,
 | 
			
		||||
    setCursor,
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
export default useStream;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,6 +9,8 @@ export const getEvents = ({
 | 
			
		|||
  end_time,
 | 
			
		||||
  include_start,
 | 
			
		||||
  include_end,
 | 
			
		||||
  offset,
 | 
			
		||||
  limit,
 | 
			
		||||
}) => {
 | 
			
		||||
  let params = {};
 | 
			
		||||
  if (q) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Ładowanie…
	
		Reference in New Issue