vega-frontend-monorepo/apps/token/src/routes/governance/proposals/proposals-container.tsx
Edd b269ad16cf
chore: workaround for #641 - ignoreErrors on governance page (#642)
* chore: workaround for #641 - ignoreErrors on governance page

* chore: #641 comment on errorPolicy - this is to get around some backend issues

Co-authored-by: madalinaraicu <madalina@vegaprotocol.io>
2022-06-27 13:56:13 +01:00

68 lines
1.7 KiB
TypeScript

import { gql, useQuery } from '@apollo/client';
import { Callout, Intent, Splash } from '@vegaprotocol/ui-toolkit';
import compact from 'lodash/compact';
import flow from 'lodash/flow';
import orderBy from 'lodash/orderBy';
import React from 'react';
import { useTranslation } from 'react-i18next';
import { SplashLoader } from '../../../components/splash-loader';
import { ProposalsList } from '../components/proposals-list';
import { PROPOSALS_FRAGMENT } from '../proposal-fragment';
import type { Proposals } from './__generated__/Proposals';
export const PROPOSALS_QUERY = gql`
${PROPOSALS_FRAGMENT}
query Proposals {
proposals {
...ProposalFields
}
}
`;
export const ProposalsContainer = () => {
const { t } = useTranslation();
const { data, loading, error } = useQuery<Proposals, never>(PROPOSALS_QUERY, {
pollInterval: 5000,
errorPolicy: 'ignore', // this is to get around some backend issues and should be removed in future
});
const proposals = React.useMemo(() => {
if (!data?.proposals?.length) {
return [];
}
return flow([
compact,
(arr) =>
orderBy(
arr,
[
(p) => new Date(p.terms.enactmentDatetime).getTime(),
(p) => new Date(p.terms.closingDatetime).getTime(),
(p) => p.id,
],
['desc', 'desc', 'desc']
),
])(data.proposals);
}, [data]);
if (error) {
return (
<Callout intent={Intent.Danger} title={t('Something went wrong')}>
<pre>{error.message}</pre>
</Callout>
);
}
if (loading) {
return (
<Splash>
<SplashLoader />
</Splash>
);
}
return <ProposalsList proposals={proposals} />;
};