Skip to content

Commit

Permalink
SOV-3003: Update mobile lending
Browse files Browse the repository at this point in the history
  • Loading branch information
pietro-maximoff committed Oct 24, 2023
1 parent b9c0afa commit fd0317d
Show file tree
Hide file tree
Showing 7 changed files with 113 additions and 31 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import React, { FC, useMemo } from 'react';

import { t } from 'i18next';

import { HelperButton } from '@sovryn/ui';

import { LendFrameBalance } from '../../5_pages/LendPage/components/LendFrame/components/LendFrameBalance/LendFrameBalance';
import { useGetAssetBalanceOf } from '../../5_pages/LendPage/components/LendFrame/components/LendFrameBalance/hooks/useGetAssetBalanceOf';
import { LendFrameInterestEarned } from '../../5_pages/LendPage/components/LendFrame/components/LendFrameInterestEarned/LendFrameInterestEarned';
import { NextSupplyInterestRate } from '../../5_pages/LendPage/components/NextSupplyInterestRate/NextSupplyInterestRate';
import { useAccount } from '../../../hooks/useAccount';
import { translations } from '../../../locales/i18n';
import { LendingPool } from '../../../utils/LendingPool';

type FixedInterestPoolRowSubTitleProps = {
pool: LendingPool;
};

export const FixedInterestPoolRowSubTitle: FC<
FixedInterestPoolRowSubTitleProps
> = ({ pool }) => {
const asset = useMemo(() => pool.getAsset(), [pool]);
const { account } = useAccount();
const { assetBalance } = useGetAssetBalanceOf(asset);

if (!account || Number(assetBalance) === 0) {
return null;
}

return (
<div className="text-gray-30 text-xs font-medium bg-gray-70 rounded-b rounded-t-none px-4 pb-2 -mt-2">
<div className="flex justify-between items-center w-full mb-2">
<span className="flex items-center gap-1">
{t(translations.lendPage.table.lendApr)}{' '}
<HelperButton content={t(translations.lendPage.table.lendAprInfo)} />
</span>
<NextSupplyInterestRate
asset={pool.getAsset()}
className="text-xs pr-0"
/>
</div>

<div className="flex justify-between items-center w-full mb-2">
<span>{t(translations.lendPage.table.balance)}</span>
<LendFrameBalance pool={pool} />
</div>

<div className="flex justify-between items-center w-full">
<span className="flex items-center gap-1">
{t(translations.lendPage.table.interestEarned)}{' '}
<HelperButton
content={t(translations.lendPage.table.interestEarnedInfo)}
/>
</span>
<LendFrameInterestEarned pool={pool} />
</div>
</div>
);
};
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { Paragraph, Table } from '@sovryn/ui';
import { translations } from '../../../../../locales/i18n';
import { LendingPoolDictionary } from '../../../../../utils/LendingPoolDictionary';
import { COLUMNS_CONFIG } from './LendFrame.constants';
import { generateRowTitle } from './LendFrame.utils';
import { generateRowSubTitle, generateRowTitle } from './LendFrame.utils';
import { LendFrameDetails } from './components/LendFrameDetails/LendFrameDetails';

export const LendFrame: FC = () => {
Expand All @@ -21,7 +21,7 @@ export const LendFrame: FC = () => {
</Paragraph>
</div>

<div className="bg-gray-80 py-4 px-4 rounded">
<div className="lg:bg-gray-80 lg:p-4 rounded">
<Table
columns={COLUMNS_CONFIG}
rows={lendPools}
Expand All @@ -33,6 +33,7 @@ export const LendFrame: FC = () => {
expandedContent={pool => <LendFrameDetails pool={pool} />}
expandedClassNames="border border-gray-70 border-t-0"
preventExpandOnClickClass="prevent-row-click"
rowSubTitle={generateRowSubTitle}
/>
</div>
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
import React from 'react';

import { FixedInterestPoolRowSubTitle } from '../../../../2_molecules/FixedInterestPoolRowSubTitle/FixedInterestPoolRowSubTitle';
import { FixedInterestPoolRowTitle } from '../../../../2_molecules/FixedInterestPoolRowTitle/FixedInterestPoolRowTitle';
import { LendingPool } from '../../../../../utils/LendingPool';

export const generateRowTitle = (pool: LendingPool) => (
<FixedInterestPoolRowTitle pool={pool} isBorrow={false} />
);

export const generateRowSubTitle = (pool: LendingPool) => (
<FixedInterestPoolRowSubTitle pool={pool} />
);
Original file line number Diff line number Diff line change
@@ -1,21 +1,30 @@
import React, { FC } from 'react';

import classNames from 'classnames';

import { SupportedTokens } from '@sovryn/contracts';

import { AmountRenderer } from '../../../../2_molecules/AmountRenderer/AmountRenderer';
import { useGetNextSupplyInterestRate } from '../../hooks/useGetNextSupplyInterestRate';

type NextSupplyInterestRateProps = {
asset: SupportedTokens;
className?: string;
};

export const NextSupplyInterestRate: FC<NextSupplyInterestRateProps> = ({
asset,
className,
}) => {
const { interestRate } = useGetNextSupplyInterestRate(asset);

return (
<div className="lg:text-base text-sm pr-1 lg:font-semibold font-medium prevent-row-click">
<div
className={classNames(
className,
'lg:text-base text-sm pr-1 lg:font-semibold font-medium prevent-row-click',
)}
>
<AmountRenderer
value={interestRate}
suffix={`%`}
Expand Down
1 change: 1 addition & 0 deletions packages/ui/src/2_molecules/Table/Table.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ export type TableProps<RowType extends RowObject> = {
preventExpandOnClickClass?: string;
mobileRenderer?: (row: RowType) => ReactNode;
hideHeader?: boolean;
rowSubTitle?: (row: RowType) => ReactNode;
};

export enum OrderDirection {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export const TableMobile = <RowType extends RowObject>({
className,
expandedContent,
mobileRenderer,
rowSubTitle,
}: TableProps<RowType>) => (
<div className={classNames(styles.wrapper, className)}>
{rows &&
Expand All @@ -33,6 +34,7 @@ export const TableMobile = <RowType extends RowObject>({
dataAttribute={dataAttribute}
expandedContent={expandedContent}
renderer={mobileRenderer}
subTitle={rowSubTitle?.(row)}
/>
))}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ type TableMobileRowProps<RowType extends RowObject> = {
title: ReactNode;
expandedContent?: (row: RowType) => ReactNode;
renderer?: (row: RowType) => ReactNode;
subTitle?: ReactNode;
};

export const TableMobileRow = <RowType extends RowObject>({
Expand All @@ -24,6 +25,7 @@ export const TableMobileRow = <RowType extends RowObject>({
title,
expandedContent,
renderer,
subTitle,
}: TableMobileRowProps<RowType>) => {
const [open, setOpen] = useState(false);

Expand All @@ -32,33 +34,36 @@ export const TableMobileRow = <RowType extends RowObject>({
}, [onRowClick, row]);

return (
<Accordion
open={open}
onClick={setOpen}
label={title}
labelClassName={styles.accordion}
dataAttribute={dataAttribute}
style={AccordionStyle.secondary}
>
<div onClick={onClick} className={styles.row}>
{!renderer &&
columns.map(column => (
<SimpleTableRow
key={column.id.toString()}
label={column.title}
labelClassName={column.labelClassName}
value={
column.cellRenderer
? column.cellRenderer(row, column.id)
: row[column.id]
}
valueClassName={column.valueClassName}
className={column.className}
/>
))}
{expandedContent && <div>{expandedContent(row)}</div>}
{renderer && renderer(row)}
</div>
</Accordion>
<>
<Accordion
open={open}
onClick={setOpen}
label={title}
labelClassName={styles.accordion}
dataAttribute={dataAttribute}
style={AccordionStyle.secondary}
>
<div onClick={onClick} className={styles.row}>
{!renderer &&
columns.map(column => (
<SimpleTableRow
key={column.id.toString()}
label={column.title}
labelClassName={column.labelClassName}
value={
column.cellRenderer
? column.cellRenderer(row, column.id)
: row[column.id]
}
valueClassName={column.valueClassName}
className={column.className}
/>
))}
{expandedContent && <div>{expandedContent(row)}</div>}
{renderer && renderer(row)}
</div>
</Accordion>
{!open && subTitle}
</>
);
};

0 comments on commit fd0317d

Please sign in to comment.