mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-21 07:10:33 +00:00
feat: switch betweel full and partial transactions locking.
This commit is contained in:
@@ -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)`
|
||||||
|
|||||||
@@ -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>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user