thunderhub/pages/channels.tsx
Anthony Potdevin aa60d618f9
Feat/nextjs (#25)
* feat: initial nextjs commit

* chore: general card styles changes

* chore: add storybook

* chore: small changes and fixes

* fix: trading filter encoding

* fix: add link to node

* chore: set to correct version
2020-04-12 18:27:01 +02:00

108 lines
2.9 KiB
TypeScript

import React, { useState, useEffect } from 'react';
import { Channels } from '../src/views/channels/channels/Channels';
import { PendingChannels } from '../src/views/channels/pendingChannels/PendingChannels';
import { ClosedChannels } from '../src/views/channels/closedChannels/ClosedChannels';
import {
CardWithTitle,
SubTitle,
CardTitle,
SingleLine,
ColorButton,
} from '../src/components/generic/Styled';
import { useQuery } from '@apollo/react-hooks';
import { useAccount } from '../src/context/AccountContext';
import { GET_CHANNEL_AMOUNT_INFO } from '../src/graphql/query';
import { useSettings } from '../src/context/SettingsContext';
import { textColorMap } from '../src/styles/Themes';
const ChannelView = () => {
const [view, setView] = useState<number>(1);
const [amounts, setAmounts] = useState({
active: 0,
pending: 0,
closed: 0,
});
const { theme } = useSettings();
const { host, viewOnly, cert, sessionAdmin } = useAccount();
const auth = {
host,
macaroon: viewOnly !== '' ? viewOnly : sessionAdmin,
cert,
};
const { data } = useQuery(GET_CHANNEL_AMOUNT_INFO, {
variables: { auth },
});
useEffect(() => {
if (data && data.getNodeInfo) {
const {
active_channels_count,
closed_channels_count,
pending_channels_count,
} = data.getNodeInfo;
setAmounts({
active: active_channels_count,
pending: pending_channels_count,
closed: closed_channels_count,
});
}
}, [data]);
const showActive = amounts.pending > 0 || amounts.closed > 0;
const showPending = amounts.active > 0 || amounts.closed > 0;
const showClosed = amounts.pending > 0 || amounts.active > 0;
const getView = () => {
switch (view) {
case 2:
return <PendingChannels />;
case 3:
return <ClosedChannels />;
default:
return <Channels />;
}
};
const getTitle = () => {
switch (view) {
case 2:
return 'Pending Channels';
case 3:
return 'Closed Channels';
default:
return 'Open Channels';
}
};
return (
<CardWithTitle>
<CardTitle>
<SubTitle>{getTitle()}</SubTitle>
<SingleLine>
{showActive && amounts.active > 0 && (
<ColorButton color={textColorMap[theme]} onClick={() => setView(1)}>
{`Open (${amounts.active})`}
</ColorButton>
)}
{showPending && amounts.pending > 0 && (
<ColorButton color={textColorMap[theme]} onClick={() => setView(2)}>
{`Pending (${amounts.pending})`}
</ColorButton>
)}
{showClosed && amounts.closed > 0 && (
<ColorButton color={textColorMap[theme]} onClick={() => setView(3)}>
{`Closed (${amounts.closed})`}
</ColorButton>
)}
</SingleLine>
</CardTitle>
{getView()}
</CardWithTitle>
);
};
export default ChannelView;