kopia lustrzana https://github.com/bugout-dev/moonstream
moved state in to DataProvider
rodzic
7084d33b68
commit
3f260b10c0
|
@ -6,6 +6,7 @@ import {
|
||||||
UserProvider,
|
UserProvider,
|
||||||
ModalProvider,
|
ModalProvider,
|
||||||
UIProvider,
|
UIProvider,
|
||||||
|
DataProvider,
|
||||||
} from "./core/providers";
|
} from "./core/providers";
|
||||||
import { StripeProvider } from "./core/providers/StripeProvider";
|
import { StripeProvider } from "./core/providers/StripeProvider";
|
||||||
|
|
||||||
|
@ -15,9 +16,11 @@ const AppContext = (props) => {
|
||||||
<ModalProvider>
|
<ModalProvider>
|
||||||
<StripeProvider>
|
<StripeProvider>
|
||||||
<ChakraProvider theme={theme}>
|
<ChakraProvider theme={theme}>
|
||||||
|
<DataProvider>
|
||||||
<UIProvider>
|
<UIProvider>
|
||||||
<AnalyticsProvider>{props.children}</AnalyticsProvider>
|
<AnalyticsProvider>{props.children}</AnalyticsProvider>
|
||||||
</UIProvider>
|
</UIProvider>
|
||||||
|
</DataProvider>
|
||||||
</ChakraProvider>
|
</ChakraProvider>
|
||||||
</StripeProvider>
|
</StripeProvider>
|
||||||
</ModalProvider>
|
</ModalProvider>
|
||||||
|
|
|
@ -1,10 +1,4 @@
|
||||||
import React, {
|
import React, { useEffect, useContext, useState, useCallback } from "react";
|
||||||
useRef,
|
|
||||||
useEffect,
|
|
||||||
useContext,
|
|
||||||
useState,
|
|
||||||
useCallback,
|
|
||||||
} from "react";
|
|
||||||
import {
|
import {
|
||||||
Flex,
|
Flex,
|
||||||
Spinner,
|
Spinner,
|
||||||
|
@ -41,6 +35,7 @@ import useStream from "../core/hooks/useStream";
|
||||||
import { ImCancelCircle } from "react-icons/im";
|
import { ImCancelCircle } from "react-icons/im";
|
||||||
import { previousEvent } from "../core/services/stream.service";
|
import { previousEvent } from "../core/services/stream.service";
|
||||||
import { PAGE_SIZE } from "../core/constants";
|
import { PAGE_SIZE } from "../core/constants";
|
||||||
|
import DataContext from "../core/providers/DataProvider/context";
|
||||||
|
|
||||||
const FILTER_TYPES = {
|
const FILTER_TYPES = {
|
||||||
ADDRESS: 0,
|
ADDRESS: 0,
|
||||||
|
@ -62,6 +57,8 @@ const CONDITION = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const EntriesNavigation = () => {
|
const EntriesNavigation = () => {
|
||||||
|
const { cursor, setCursor, streamCache, setStreamCache } =
|
||||||
|
useContext(DataContext);
|
||||||
const ui = useContext(UIContext);
|
const ui = useContext(UIContext);
|
||||||
const { isOpen, onOpen, onClose } = useDisclosure();
|
const { isOpen, onOpen, onClose } = useDisclosure();
|
||||||
const { subscriptionsCache } = useSubscriptions();
|
const { subscriptionsCache } = useSubscriptions();
|
||||||
|
@ -75,13 +72,10 @@ const EntriesNavigation = () => {
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
const [filterState, setFilterState] = useState([]);
|
const [filterState, setFilterState] = useState([]);
|
||||||
const loadMoreButtonRef = useRef(null);
|
|
||||||
const [streamCache, setStreamCache] = useState([]);
|
|
||||||
const [cursor, setCursor] = useState(0);
|
|
||||||
const {
|
const {
|
||||||
eventsIsLoading,
|
eventsIsLoading,
|
||||||
eventsRefetch,
|
eventsRefetch,
|
||||||
eventsIsFetching,
|
|
||||||
latestEventsRefetch,
|
latestEventsRefetch,
|
||||||
nextEventRefetch,
|
nextEventRefetch,
|
||||||
previousEventRefetch,
|
previousEventRefetch,
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
import { useState, useEffect } from "react";
|
import { useState } from "react";
|
||||||
|
|
||||||
import { StreamService } from "../services";
|
import { StreamService } from "../services";
|
||||||
import { useQuery, useQueryClient } from "react-query";
|
import { useQuery } from "react-query";
|
||||||
import { queryCacheProps } from "./hookCommon";
|
import { queryCacheProps } from "./hookCommon";
|
||||||
import { defaultStreamBoundary } from "../services/servertime.service.js";
|
import { defaultStreamBoundary } from "../services/servertime.service.js";
|
||||||
import { PAGE_SIZE } from "../constants";
|
import { PAGE_SIZE } from "../constants";
|
||||||
import { useCounter } from "@chakra-ui/counter";
|
|
||||||
const useStream = (q, streamCache, setStreamCache, cursor, setCursor) => {
|
const useStream = (q, streamCache, setStreamCache, cursor, setCursor) => {
|
||||||
const [streamQuery, setStreamQuery] = useState(q || "");
|
const [streamQuery, setStreamQuery] = useState(q || "");
|
||||||
const [events, setEvents] = useState([]);
|
const [events, setEvents] = useState([]);
|
||||||
|
@ -33,15 +31,6 @@ const useStream = (q, streamCache, setStreamCache, cursor, setCursor) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
let newBoundary = { ...streamBoundary };
|
let newBoundary = { ...streamBoundary };
|
||||||
// We do not check if there is no overlap between the streamBoundary and the pageBoundary - we assume
|
|
||||||
// that there *is* an overlap and even if there isn't the stream should gracefully respect the
|
|
||||||
// pageBoundary because that was the most recent request the user made.
|
|
||||||
// TODO(zomglings): If there is no overlap in boundaries, replace streamBoundary with pageBoundary.
|
|
||||||
// No overlap logic:
|
|
||||||
// if (<no overlap>) {
|
|
||||||
// setStreamBoundary(pageBoundary)
|
|
||||||
// return pageBoundary
|
|
||||||
// }
|
|
||||||
if (!ignoreStart) {
|
if (!ignoreStart) {
|
||||||
if (
|
if (
|
||||||
!newBoundary.start_time ||
|
!newBoundary.start_time ||
|
||||||
|
@ -75,10 +64,6 @@ const useStream = (q, streamCache, setStreamCache, cursor, setCursor) => {
|
||||||
return newBoundary;
|
return newBoundary;
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
setEvents(streamCache ? streamCache.slice(cursor, cursor + PAGE_SIZE) : []);
|
|
||||||
}, [streamCache, cursor, PAGE_SIZE]);
|
|
||||||
|
|
||||||
const getEvents = async (customStreamBoundary) => {
|
const getEvents = async (customStreamBoundary) => {
|
||||||
let requestStreamBoundary = customStreamBoundary;
|
let requestStreamBoundary = customStreamBoundary;
|
||||||
if (!requestStreamBoundary) {
|
if (!requestStreamBoundary) {
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
import { createContext } from "react";
|
||||||
|
|
||||||
|
const DataContext = createContext();
|
||||||
|
|
||||||
|
export default DataContext;
|
|
@ -0,0 +1,16 @@
|
||||||
|
import React, { useState } from "react";
|
||||||
|
import DataContext from "./context";
|
||||||
|
|
||||||
|
const DataProvider = ({ children }) => {
|
||||||
|
const [streamCache, setStreamCache] = useState([]);
|
||||||
|
const [cursor, setCursor] = useState(0);
|
||||||
|
return (
|
||||||
|
<DataContext.Provider
|
||||||
|
value={{ streamCache, setStreamCache, cursor, setCursor }}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</DataContext.Provider>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default DataProvider;
|
|
@ -1,5 +0,0 @@
|
||||||
import { createContext } from "react";
|
|
||||||
|
|
||||||
const JournalsContext = createContext();
|
|
||||||
|
|
||||||
export default JournalsContext;
|
|
|
@ -1,48 +0,0 @@
|
||||||
// import React, { useContext, useState, useEffect } from "react";
|
|
||||||
// // import http from "axios";
|
|
||||||
// import { useToast } from "../../hooks";
|
|
||||||
// import JournalsContext from "./context";
|
|
||||||
// import UserContext from "../UserProvider/context";
|
|
||||||
// import { useQuery } from "react-query";
|
|
||||||
// import { JournalService } from "../../services";
|
|
||||||
|
|
||||||
// const JournalsProvider = ({ children }) => {
|
|
||||||
// const user = useContext(UserContext);
|
|
||||||
// const toast = useToast();
|
|
||||||
|
|
||||||
// const journalsCache = useQuery("journals-list", JournalService.getAll, {
|
|
||||||
// enabled: !!user,
|
|
||||||
// refetchOnWindowFocus: false,
|
|
||||||
// refetchOnMount: false,
|
|
||||||
// refetchOnReconnect: false,
|
|
||||||
// staleTime: 72000,
|
|
||||||
// notifyOnStatusChange: false,
|
|
||||||
// // refetchInterval: 1000,
|
|
||||||
// onError: (error) => {
|
|
||||||
// toast(error, "error");
|
|
||||||
// },
|
|
||||||
// });
|
|
||||||
|
|
||||||
// const getPublicJournals = async (query) => {
|
|
||||||
// const data = await JournalService.getPublicJournals();
|
|
||||||
|
|
||||||
// const newPublicJournals = data.data.journals;
|
|
||||||
|
|
||||||
// return [...newPublicJournals];
|
|
||||||
// };
|
|
||||||
|
|
||||||
// const publicJournalsCache = useQuery(["journals-public"], getPublicJournals, {
|
|
||||||
// enabled: false,
|
|
||||||
// onError: (error) => {
|
|
||||||
// toast(error, "error");
|
|
||||||
// },
|
|
||||||
// });
|
|
||||||
|
|
||||||
// return (
|
|
||||||
// <JournalsContext.Provider value={{permissions: currentUserPermissions, publicJournalsCache, journalsCache }}>
|
|
||||||
// {children}
|
|
||||||
// </JournalsContext.Provider>
|
|
||||||
// );
|
|
||||||
// };
|
|
||||||
|
|
||||||
// export default JournalsProvider;
|
|
|
@ -1,6 +1,7 @@
|
||||||
export { default as AnalyticsProvider } from "./AnalyticsProvider";
|
export { default as AnalyticsProvider } from "./AnalyticsProvider";
|
||||||
export { default as JournalsProvider } from "./JournalsProvider";
|
export { default as JournalsProvider } from "./DataProvider";
|
||||||
export { default as ModalProvider } from "./ModalProvider";
|
export { default as ModalProvider } from "./ModalProvider";
|
||||||
export { default as StripeProvider } from "./StripeProvider";
|
export { default as StripeProvider } from "./StripeProvider";
|
||||||
export { default as UserProvider } from "./UserProvider";
|
export { default as UserProvider } from "./UserProvider";
|
||||||
export { default as UIProvider } from "./UIProvider";
|
export { default as UIProvider } from "./UIProvider";
|
||||||
|
export { default as DataProvider } from "./DataProvider";
|
||||||
|
|
Ładowanie…
Reference in New Issue