feat: switch betweel full and partial transactions locking.

This commit is contained in:
a.bouhuolia
2021-12-13 15:22:33 +02:00
parent c4650f5d31
commit a6a10ef6b8
3 changed files with 136 additions and 36 deletions

View File

@@ -1,13 +1,15 @@
import React from 'react'; import React from 'react';
import { Link } from 'react-router-dom';
import clsx from 'classnames'; import clsx from 'classnames';
import { Intent } from '@blueprintjs/core'; import { Intent } from '@blueprintjs/core';
import styled from 'styled-components'; import styled from 'styled-components';
import * as R from 'ramda'; import * as R from 'ramda';
import { Alert } from 'components'; import { Alert, ButtonLink } from 'components';
import { TransactionsLockingProvider } from './TransactionsLockingProvider'; import { TransactionsLockingProvider } from './TransactionsLockingProvider';
import { TransactionLockingContent } from './components'; import {
TransactionLockingContent,
TransactionLockingItemLoading,
} from './components';
import { useTransactionsLockingContext } from './TransactionsLockingProvider'; import { useTransactionsLockingContext } from './TransactionsLockingProvider';
import withDialogActions from 'containers/Dialog/withDialogActions'; import withDialogActions from 'containers/Dialog/withDialogActions';
@@ -28,13 +30,83 @@ function TransactionsLockingList({ items, onlock, onUnlock, onUnlockPartial }) {
)); ));
} }
/** function TransactionsLockingFull({ onLock, onUnlock, onUnlockPartial }) {
* Transactions locking list. const {
*/ transactionsLocking: { all },
function TransactionsLockingListPage({ } = useTransactionsLockingContext();
return (
<TransactionLockingContent
name={all.formatted_module}
description={all.description}
isEnabled={all.is_enabled}
onLock={onLock}
onUnlockPartial={onUnlockPartial}
onEditLock={onUnlock}
/>
);
}
function TransactionLockingSkeletonList() {
return (
<>
<TransactionLockingItemLoading />
<TransactionLockingItemLoading />
<TransactionLockingItemLoading />
</>
);
}
function TransactionsLockingAlert() {
const { transactionLockingType, setTransactionLockingType } =
useTransactionsLockingContext();
// Handle all lock link click.
const handleAllLockClick = () => {
setTransactionLockingType('all');
};
const handleUndividualLockClick = () => {
setTransactionLockingType('partial');
};
return transactionLockingType !== 'all' ? (
<LockAllAlert
title={'Lock All Transactions At Once.'}
intent={Intent.PRIMARY}
>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
</p>
<ButtonLink onClick={handleAllLockClick}>
Lock All Transactions At Once
</ButtonLink>
</LockAllAlert>
) : (
<LockAllAlert title={'Lock Individual Modules'} intent={Intent.PRIMARY}>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
</p>
<ButtonLink onClick={handleUndividualLockClick}>
Lock Modules Individually
</ButtonLink>
</LockAllAlert>
);
}
function TransactionsLockingBodyJsx({
// #withDialogActions // #withDialogActions
openDialog, openDialog,
}) { }) {
const {
transactionsLocking: { modules },
isTransactionLockingLoading,
transactionLockingType,
} = useTransactionsLockingContext();
// Handle locking transactions. // Handle locking transactions.
const handleLockingTransactions = () => { const handleLockingTransactions = () => {
openDialog('locking-transactions', {}); openDialog('locking-transactions', {});
@@ -49,10 +121,30 @@ function TransactionsLockingListPage({
openDialog('unlocking-partial-transactions', {}); openDialog('unlocking-partial-transactions', {});
}; };
const { return !isTransactionLockingLoading ? (
transactionsLocking: { modules }, transactionLockingType === 'partial' ? (
} = useTransactionsLockingContext(); <TransactionsLockingList
items={modules}
onlock={handleLockingTransactions}
onUnlock={handleUnlockTransactions}
onUnlockPartial={handleUnlockingPartial}
/>
) : (
<TransactionsLockingFull />
)
) : (
<TransactionLockingSkeletonList />
);
}
const TransactionsLockingBody = R.compose(withDialogActions)(
TransactionsLockingBodyJsx,
);
/**
* Transactions locking list.
*/
export default function TransactionsLockingListPage() {
return ( return (
<TransactionsLockingProvider> <TransactionsLockingProvider>
<TransactionsLocking> <TransactionsLocking>
@@ -63,31 +155,14 @@ function TransactionsLockingListPage({
ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. tempor incididunt ut labore et dolore magna aliqua.
</TransLockingDesc> </TransLockingDesc>
<TransactionsLockingAlert />
<LockAllAlert
title={'Lock All Transactions At Once.'}
intent={Intent.PRIMARY}
>
<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua.
</p>
<Link to={'/'}>Lock All Transactions At Once </Link>
</LockAllAlert>
</TransactionsLockingParagraph> </TransactionsLockingParagraph>
<TransactionsLockingList <TransactionsLockingBody />
items={modules}
onlock={handleLockingTransactions}
onUnlock={handleUnlockTransactions}
onUnlockPartial={handleUnlockingPartial}
/>
</TransactionsLocking> </TransactionsLocking>
</TransactionsLockingProvider> </TransactionsLockingProvider>
); );
} }
export default R.compose(withDialogActions)(TransactionsLockingListPage);
const TransactionsLocking = styled.div` const TransactionsLocking = styled.div`
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -99,10 +174,6 @@ const TransactionsLockingParagraph = styled(Paragraph)`
margin-bottom: 25px; margin-bottom: 25px;
`; `;
const TransLockingTitle = styled.h2`
margin-bottom: 12px;
`;
const TransLockingDesc = styled.p``; const TransLockingDesc = styled.p``;
const LockAllAlert = styled(Alert)` const LockAllAlert = styled(Alert)`

View File

@@ -8,22 +8,28 @@ const TransactionsLockingContext = React.createContext();
* Transactions locking data provider. * Transactions locking data provider.
*/ */
function TransactionsLockingProvider({ ...props }) { function TransactionsLockingProvider({ ...props }) {
// Fetch // Fetch transaction locking modules list.
const { const {
data: transactionsLocking, data: transactionsLocking,
isFetching: isTransactionLockingFetching, isFetching: isTransactionLockingFetching,
isLoading: isTransactionLockingLoading, isLoading: isTransactionLockingLoading,
} = useTransactionsLocking(); } = useTransactionsLocking();
console.log(transactionsLocking, 'XX'); const [transactionLockingType, setTransactionLockingType] =
React.useState('partial');
// Provider // Provider
const provider = { const provider = {
transactionsLocking, transactionsLocking,
isTransactionLockingFetching,
isTransactionLockingLoading,
transactionLockingType,
setTransactionLockingType,
}; };
return ( return (
<DashboardInsider loading={isTransactionLockingLoading}> <DashboardInsider>
<TransactionsLockingContext.Provider value={provider} {...props} /> <TransactionsLockingContext.Provider value={provider} {...props} />
</DashboardInsider> </DashboardInsider>
); );

View File

@@ -7,11 +7,34 @@ import {
Menu, Menu,
Intent, Intent,
Divider, Divider,
Classes,
} from '@blueprintjs/core'; } from '@blueprintjs/core';
import { Hint, Icon, If, FormattedMessage as T } from 'components'; import { Hint, Icon, If, FormattedMessage as T } from 'components';
import { Popover2 } from '@blueprintjs/popover2'; import { Popover2 } from '@blueprintjs/popover2';
import { safeInvoke } from 'utils'; import { safeInvoke } from 'utils';
export const TransactionLockingItemLoading = ({}) => {
return (
<TransactionLockingWrapp>
<TransLockingInner>
<TransLockingIcon>
<Icon icon="lock" iconSize={24} />
</TransLockingIcon>
<TransLockingContent>
<TransLockingItemTitle className={Classes.SKELETON}>
XXXX
</TransLockingItemTitle>
<TransLockingItemDesc className={Classes.SKELETON}>
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</TransLockingItemDesc>
</TransLockingContent>
</TransLockingInner>
</TransactionLockingWrapp>
);
};
export const TransactionLockingContent = ({ export const TransactionLockingContent = ({
name, name,
description, description,