mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-12 19:00:31 +00:00
144 lines
3.5 KiB
JavaScript
144 lines
3.5 KiB
JavaScript
import React, { useMemo } from 'react';
|
|
import { Menu, MenuItem, MenuDivider, Intent } from '@blueprintjs/core';
|
|
import clsx from 'classnames';
|
|
|
|
import intl from 'react-intl-universal';
|
|
|
|
import { Can, Icon, Money, If, AvaterCell } from 'components';
|
|
import { CustomerAction, AbilitySubject } from '../../../common/abilityOption';
|
|
|
|
import { safeCallback } from 'utils';
|
|
|
|
/**
|
|
* Actions menu.
|
|
*/
|
|
export function ActionsMenu({
|
|
row: { original },
|
|
payload: {
|
|
onEdit,
|
|
onDelete,
|
|
onDuplicate,
|
|
onInactivate,
|
|
onActivate,
|
|
onViewDetails,
|
|
},
|
|
}) {
|
|
return (
|
|
<Menu>
|
|
<MenuItem
|
|
icon={<Icon icon="reader-18" />}
|
|
text={intl.get('view_details')}
|
|
onClick={safeCallback(onViewDetails, original)}
|
|
/>
|
|
<Can I={CustomerAction.Edit} a={AbilitySubject.Customer}>
|
|
<MenuDivider />
|
|
|
|
<MenuItem
|
|
icon={<Icon icon="pen-18" />}
|
|
text={intl.get('edit_customer')}
|
|
onClick={safeCallback(onEdit, original)}
|
|
/>
|
|
</Can>
|
|
<Can I={CustomerAction.Create} a={AbilitySubject.Customer}>
|
|
<MenuItem
|
|
icon={<Icon icon="duplicate-16" />}
|
|
text={intl.get('duplicate')}
|
|
onClick={safeCallback(onDuplicate, original)}
|
|
/>
|
|
</Can>
|
|
<Can I={CustomerAction.Edit} a={AbilitySubject.Customer}>
|
|
<If condition={original.active}>
|
|
<MenuItem
|
|
text={intl.get('inactivate_customer')}
|
|
icon={<Icon icon="pause-16" iconSize={16} />}
|
|
onClick={safeCallback(onInactivate, original)}
|
|
/>
|
|
</If>
|
|
<If condition={!original.active}>
|
|
<MenuItem
|
|
text={intl.get('activate_customer')}
|
|
icon={<Icon icon="play-16" iconSize={16} />}
|
|
onClick={safeCallback(onActivate, original)}
|
|
/>
|
|
</If>
|
|
</Can>
|
|
<Can I={CustomerAction.Delete} a={AbilitySubject.Customer}>
|
|
<MenuDivider />
|
|
<MenuItem
|
|
icon={<Icon icon="trash-16" iconSize={16} />}
|
|
text={intl.get('delete_customer')}
|
|
intent={Intent.DANGER}
|
|
onClick={safeCallback(onDelete, original)}
|
|
/>
|
|
</Can>
|
|
</Menu>
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Phone number accessor.
|
|
*/
|
|
export function PhoneNumberAccessor(row) {
|
|
return <div className={'work_phone'}>{row.work_phone}</div>;
|
|
}
|
|
|
|
/**
|
|
* Balance accessor.
|
|
*/
|
|
export function BalanceAccessor(row) {
|
|
return <Money amount={row.closing_balance} currency={row.currency_code} />;
|
|
}
|
|
|
|
/**
|
|
* Retrieve customers table columns.
|
|
*/
|
|
export function useCustomersTableColumns() {
|
|
return useMemo(
|
|
() => [
|
|
{
|
|
id: 'avatar',
|
|
Header: '',
|
|
Cell: AvaterCell,
|
|
className: 'avatar',
|
|
width: 45,
|
|
disableResizing: true,
|
|
disableSortBy: true,
|
|
clickable: true,
|
|
},
|
|
{
|
|
id: 'display_name',
|
|
Header: intl.get('display_name'),
|
|
accessor: 'display_name',
|
|
className: 'display_name',
|
|
width: 150,
|
|
clickable: true,
|
|
},
|
|
{
|
|
id: 'company_name',
|
|
Header: intl.get('company_name'),
|
|
accessor: 'company_name',
|
|
className: 'company_name',
|
|
width: 150,
|
|
clickable: true,
|
|
},
|
|
{
|
|
id: 'work_phone',
|
|
Header: intl.get('work_phone'),
|
|
accessor: PhoneNumberAccessor,
|
|
className: 'phone_number',
|
|
width: 100,
|
|
clickable: true,
|
|
},
|
|
{
|
|
id: 'balance',
|
|
Header: intl.get('receivable_balance'),
|
|
accessor: BalanceAccessor,
|
|
align: 'right',
|
|
width: 100,
|
|
clickable: true,
|
|
},
|
|
],
|
|
[],
|
|
);
|
|
}
|