feat(Sales & Purchases ): add branch & warehouse.

This commit is contained in:
elforjani13
2022-02-20 13:54:31 +02:00
parent 3ed2393cf1
commit b46c3f4843
35 changed files with 1184 additions and 28 deletions

View File

@@ -0,0 +1,118 @@
import React from 'react';
import intl from 'react-intl-universal';
import {
Alignment,
Navbar,
NavbarGroup,
NavbarDivider,
Button,
Classes,
} from '@blueprintjs/core';
import styled from 'styled-components';
import {
useSetPrimaryBranchToForm,
useSetPrimaryWarehouseToForm,
} from './utils';
import { useFeatureCan } from 'hooks/state';
import { Icon, BranchSelect, FeatureCan, WarehouseSelect } from 'components';
import { useBillFormContext } from './BillFormProvider';
import { Features } from 'common';
/**
* Bill form topbar .
* @returns {JSX.Element}
*/
export default function BillFormTopBar() {
// Features guard.
const { featureCan } = useFeatureCan();
// Sets the primary warehouse to form.
useSetPrimaryWarehouseToForm();
// Sets the primary branch to form.
useSetPrimaryBranchToForm();
// Can't display the navigation bar if warehouses or branches feature is not enabled.
if (!featureCan(Features.Warehouses) || !featureCan(Features.Branches)) {
return null;
}
return (
<Navbar className={'navbar--dashboard-topbar'}>
<NavbarGroup align={Alignment.LEFT}>
<FeatureCan feature={Features.Branches}>
<BillFormSelectBranch />
</FeatureCan>
{featureCan(Features.Warehouses) && featureCan(Features.Branches) && (
<NavbarDivider />
)}
<FeatureCan feature={Features.Warehouses}>
<BillFormSelectWarehouse />
</FeatureCan>
</NavbarGroup>
</Navbar>
);
}
function BillFormSelectBranch() {
// Bill form context.
const { branches, isBranchesLoading } = useBillFormContext();
return isBranchesLoading ? (
<DetailsBarSkeletonBase className={Classes.SKELETON} />
) : (
<BranchSelect
name={'branch_id'}
branches={branches}
input={BillBranchSelectButton}
popoverProps={{ minimal: true }}
/>
);
}
function BillFormSelectWarehouse() {
// Bill form context.
const { warehouses, isWarehouesLoading } = useBillFormContext();
return isWarehouesLoading ? (
<DetailsBarSkeletonBase className={Classes.SKELETON} />
) : (
<WarehouseSelect
name={'warehouse_id'}
warehouses={warehouses}
input={BillWarehouseSelectButton}
popoverProps={{ minimal: true }}
/>
);
}
function BillWarehouseSelectButton({ label }) {
return (
<Button
text={intl.get('invoice.warehouse_button.label', { label })}
minimal={true}
small={true}
icon={<Icon icon={'warehouse-16'} iconSize={16} />}
/>
);
}
function BillBranchSelectButton({ label }) {
return (
<Button
text={intl.get('invoice.branch_button.label', { label })}
minimal={true}
small={true}
icon={<Icon icon={'branch-16'} iconSize={16} />}
/>
);
}
const DetailsBarSkeletonBase = styled.div`
letter-spacing: 10px;
margin-right: 10px;
margin-left: 10px;
font-size: 8px;
width: 140px;
height: 10px;
`;