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={() => {
|
||||
loadOlderEvents();
|
||||
previousEventRefetch();
|
||||
// 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