fix: render dialog without relying on query so it doesnt appear well after the page has loaded (#1105)
This commit is contained in:
parent
f597048c43
commit
47c087ad88
@ -129,7 +129,6 @@ const MarketPage = ({ id }: { id?: string }) => {
|
|||||||
store.setMarketId(marketId);
|
store.setMarketId(marketId);
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
title={t('Select a market to get started')}
|
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
@ -8,7 +8,6 @@ import {
|
|||||||
RotatingArrow,
|
RotatingArrow,
|
||||||
} from '@vegaprotocol/ui-toolkit';
|
} from '@vegaprotocol/ui-toolkit';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import isNil from 'lodash/isNil';
|
|
||||||
import { useMemo, useState } from 'react';
|
import { useMemo, useState } from 'react';
|
||||||
import { MARKET_LIST_QUERY } from '../markets-data-provider';
|
import { MARKET_LIST_QUERY } from '../markets-data-provider';
|
||||||
import type { Column } from './select-market-columns';
|
import type { Column } from './select-market-columns';
|
||||||
@ -117,18 +116,10 @@ export const SelectMarketPopover = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const headerTriggerButtonClassName =
|
const headerTriggerButtonClassName =
|
||||||
'flex items-center gap-8 shrink-0 p-8 font-medium text-h5 hover:bg-black/10 dark:hover:bg-white/20';
|
'flex items-center gap-8 shrink-0 p-8 font-medium text-h5 hover:bg-black/10 dark:hover:bg-white/20';
|
||||||
|
|
||||||
const { keypair } = useVegaWallet();
|
const { keypair } = useVegaWallet();
|
||||||
const [open, setOpen] = useState(false);
|
const [open, setOpen] = useState(false);
|
||||||
const yTimestamp = useMemo(() => {
|
const { data } = useMarkets();
|
||||||
const yesterday = Math.round(new Date().getTime() / 1000) - 24 * 3600;
|
|
||||||
return new Date(yesterday * 1000).toISOString();
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const variables = useMemo(() => ({ partyId: keypair?.pub }), [keypair?.pub]);
|
const variables = useMemo(() => ({ partyId: keypair?.pub }), [keypair?.pub]);
|
||||||
const { data } = useQuery<MarketList>(MARKET_LIST_QUERY, {
|
|
||||||
variables: { interval: Interval.INTERVAL_I1H, since: yTimestamp },
|
|
||||||
});
|
|
||||||
const { data: marketDataPositions } = useQuery<Positions>(POSITION_QUERY, {
|
const { data: marketDataPositions } = useQuery<Positions>(POSITION_QUERY, {
|
||||||
variables,
|
variables,
|
||||||
skip: !keypair?.pub,
|
skip: !keypair?.pub,
|
||||||
@ -217,37 +208,64 @@ export const SelectMarketDialog = ({
|
|||||||
dialogOpen,
|
dialogOpen,
|
||||||
setDialogOpen,
|
setDialogOpen,
|
||||||
onSelect,
|
onSelect,
|
||||||
title = t('Select a market'),
|
|
||||||
}: {
|
}: {
|
||||||
dialogOpen: boolean;
|
dialogOpen: boolean;
|
||||||
setDialogOpen: (open: boolean) => void;
|
setDialogOpen: (open: boolean) => void;
|
||||||
title?: string;
|
title?: string;
|
||||||
detailed?: boolean;
|
|
||||||
onSelect: (id: string) => void;
|
onSelect: (id: string) => void;
|
||||||
}) => {
|
}) => {
|
||||||
const yTimestamp = useMemo(() => {
|
|
||||||
const yesterday = Math.round(new Date().getTime() / 1000) - 24 * 3600;
|
|
||||||
return new Date(yesterday * 1000).toISOString();
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const onSelectMarket = (id: string) => {
|
const onSelectMarket = (id: string) => {
|
||||||
onSelect(id);
|
onSelect(id);
|
||||||
setDialogOpen(false);
|
setDialogOpen(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
const { data } = useQuery<MarketList>(MARKET_LIST_QUERY, {
|
|
||||||
variables: { interval: Interval.INTERVAL_I1H, since: yTimestamp },
|
|
||||||
});
|
|
||||||
return (
|
return (
|
||||||
<Dialog
|
<Dialog
|
||||||
title={title}
|
title={t('Select a market to get started')}
|
||||||
intent={Intent.Primary}
|
intent={Intent.Primary}
|
||||||
open={!isNil(data) && dialogOpen}
|
open={dialogOpen}
|
||||||
onChange={() => setDialogOpen(false)}
|
onChange={() => setDialogOpen(false)}
|
||||||
titleClassNames="font-bold font-sans text-3xl tracking-tight mb-0 pl-8"
|
titleClassNames="font-bold font-sans text-3xl tracking-tight mb-0 pl-8"
|
||||||
size="small"
|
size="small"
|
||||||
>
|
>
|
||||||
<SelectMarketLandingTable data={data} onSelect={onSelectMarket} />
|
<LandingDialogContainer onSelect={onSelectMarket} />
|
||||||
</Dialog>
|
</Dialog>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
interface LandingDialogContainerProps {
|
||||||
|
onSelect: (id: string) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
const LandingDialogContainer = ({ onSelect }: LandingDialogContainerProps) => {
|
||||||
|
const { data, loading, error } = useMarkets();
|
||||||
|
if (error) {
|
||||||
|
return (
|
||||||
|
<div className="flex justify-center items-center">
|
||||||
|
<p className="my-32">{t('Failed to load markets')}</p>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (loading) {
|
||||||
|
return (
|
||||||
|
<div className="flex justify-center items-center">
|
||||||
|
<p className="my-32">{t('Loading...')}</p>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return <SelectMarketLandingTable data={data} onSelect={onSelect} />;
|
||||||
|
};
|
||||||
|
|
||||||
|
const useMarkets = () => {
|
||||||
|
const since = useMemo(() => {
|
||||||
|
const yesterday = Math.round(new Date().getTime() / 1000) - 24 * 3600;
|
||||||
|
return new Date(yesterday * 1000).toISOString();
|
||||||
|
}, []);
|
||||||
|
const { data, loading, error } = useQuery<MarketList>(MARKET_LIST_QUERY, {
|
||||||
|
variables: { interval: Interval.INTERVAL_I1H, since },
|
||||||
|
});
|
||||||
|
|
||||||
|
return { data, loading, error };
|
||||||
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user