From 6134ad5598f862d4a04cda426643cde8c67df8d5 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Thu, 30 Jun 2022 21:59:12 +0200 Subject: [PATCH] feat: add estimated expense. --- src/common/modalChargeOptions.tsx | 18 ++- src/components/DialogsContainer.js | 4 + .../Projects/components/ChargeSelect.tsx | 50 ++++++++ .../Projects/components/ExpenseSelect.tsx | 67 +++++++++++ src/containers/Projects/components/index.ts | 2 + .../EstimatedExpense.schema.tsx | 19 +++ .../EstimatedExpenseForm.tsx | 56 +++++++++ .../EstimatedExpenseFormChargeFields.tsx | 54 +++++++++ .../EstimatedExpenseFormConent.tsx | 17 +++ .../EstimatedExpenseFormDialogContent.tsx | 22 ++++ .../EstimatedExpenseFormFields.tsx | 111 ++++++++++++++++++ .../EstimatedExpenseFormFloatingActions.tsx | 48 ++++++++ .../EstimatedExpenseFormProvider.tsx | 31 +++++ .../EstimatedExpenseFormDialog/index.tsx | 55 +++++++++ 14 files changed, 550 insertions(+), 4 deletions(-) create mode 100644 src/containers/Projects/components/ChargeSelect.tsx create mode 100644 src/containers/Projects/components/ExpenseSelect.tsx create mode 100644 src/containers/Projects/components/index.ts create mode 100644 src/containers/Projects/containers/EstimatedExpenseFormDialog/EstimatedExpense.schema.tsx create mode 100644 src/containers/Projects/containers/EstimatedExpenseFormDialog/EstimatedExpenseForm.tsx create mode 100644 src/containers/Projects/containers/EstimatedExpenseFormDialog/EstimatedExpenseFormChargeFields.tsx create mode 100644 src/containers/Projects/containers/EstimatedExpenseFormDialog/EstimatedExpenseFormConent.tsx create mode 100644 src/containers/Projects/containers/EstimatedExpenseFormDialog/EstimatedExpenseFormDialogContent.tsx create mode 100644 src/containers/Projects/containers/EstimatedExpenseFormDialog/EstimatedExpenseFormFields.tsx create mode 100644 src/containers/Projects/containers/EstimatedExpenseFormDialog/EstimatedExpenseFormFloatingActions.tsx create mode 100644 src/containers/Projects/containers/EstimatedExpenseFormDialog/EstimatedExpenseFormProvider.tsx create mode 100644 src/containers/Projects/containers/EstimatedExpenseFormDialog/index.tsx diff --git a/src/common/modalChargeOptions.tsx b/src/common/modalChargeOptions.tsx index 623feefec..05b737877 100644 --- a/src/common/modalChargeOptions.tsx +++ b/src/common/modalChargeOptions.tsx @@ -1,7 +1,17 @@ import intl from 'react-intl-universal'; -export const modalChargeOptions = [ - { name: 'Hourly rate', value: 'Hourly rate' }, - { name: 'Fixed price', value: 'Fixed price' }, - { name: 'Non-chargeable', value: 'Non-chargeable' }, +export const taskChargeOptions = [ + { name: intl.get('task.dialog.hourly_rate'), value: 'Hourly rate' }, + { name: intl.get('task.dialog.fixed_price'), value: 'Fixed price' }, + { name: intl.get('task.dialog.non_chargeable'), value: 'Non-chargeable' }, +]; + +export const expenseChargeOption = [ + { + name: intl.get('expenses.dialog.markup'), + value: '% markup', + }, + { name: intl.get('expenses.dialog.pass_cost_on'), value: 'Pass cost on' }, + { name: intl.get('expemses.dialog.custom_price'), value: 'Custom Pirce' }, + { name: intl.get('expenses.dialog.non_chargeable'), value: 'Non-chargeable' }, ]; diff --git a/src/components/DialogsContainer.js b/src/components/DialogsContainer.js index 014cbb847..d7c037f32 100644 --- a/src/components/DialogsContainer.js +++ b/src/components/DialogsContainer.js @@ -43,6 +43,8 @@ import VendorOpeningBalanceDialog from '../containers/Dialogs/VendorOpeningBalan import ProjectFormDialog from '../containers/Projects/containers/ProjectFormDialog'; import TaskFormDialog from '../containers/Projects/containers/TaskFormDialog'; import TimeEntryFormDialog from '../containers/Projects/containers/TimeEntryFormDialog'; +import ExpenseFormDialog from '../containers/Projects/containers/ExpenseFormDialog'; +import EstimatedExpenseFormDialog from '../containers/Projects/containers/EstimatedExpenseFormDialog'; /** * Dialogs container. @@ -96,6 +98,8 @@ export default function DialogsContainer() { + + ); } diff --git a/src/containers/Projects/components/ChargeSelect.tsx b/src/containers/Projects/components/ChargeSelect.tsx new file mode 100644 index 000000000..2a11908c0 --- /dev/null +++ b/src/containers/Projects/components/ChargeSelect.tsx @@ -0,0 +1,50 @@ +import React from 'react'; +import { MenuItem, Button } from '@blueprintjs/core'; +import { FSelect } from 'components'; + +/** + * + * @param {*} + * @param {*} param1 + * @returns + */ +const chargeItemRenderer = (item, { handleClick, modifiers, query }) => { + return ( + + ); +}; + +const chargeItemSelectProps = { + itemRenderer: chargeItemRenderer, + valueAccessor: 'value', + labelAccessor: 'name', +}; + +/** + * + * @param param0 + * @returns + */ +export function ChargeSelect({ items, ...rest }) { + return ( + + ); +} +/** + * + * @param param0 + * @returns + */ +function ChargeSelectButton({ label }) { + return + + + + ); +} + +export default compose(withDialogActions)(EstimatedExpenseFormFloatingActions); diff --git a/src/containers/Projects/containers/EstimatedExpenseFormDialog/EstimatedExpenseFormProvider.tsx b/src/containers/Projects/containers/EstimatedExpenseFormDialog/EstimatedExpenseFormProvider.tsx new file mode 100644 index 000000000..28b115d74 --- /dev/null +++ b/src/containers/Projects/containers/EstimatedExpenseFormDialog/EstimatedExpenseFormProvider.tsx @@ -0,0 +1,31 @@ +//@ts-nocheck +import React from 'react'; +import { DialogContent } from 'components'; + +const EstimatedExpenseFormContext = React.createContext(); + +/** + * Estimated expense form provider. + * @returns + */ +function EstimatedExpenseFormProvider({ + //#OwnProps + dialogName, + estimatedExpenseId, + ...props +}) { + // state provider. + const provider = { + dialogName, + }; + return ( + + + + ); +} + +const useEstimatedExpenseFormContext = () => + React.useContext(EstimatedExpenseFormContext); + +export { EstimatedExpenseFormProvider, useEstimatedExpenseFormContext }; diff --git a/src/containers/Projects/containers/EstimatedExpenseFormDialog/index.tsx b/src/containers/Projects/containers/EstimatedExpenseFormDialog/index.tsx new file mode 100644 index 000000000..388c7a27f --- /dev/null +++ b/src/containers/Projects/containers/EstimatedExpenseFormDialog/index.tsx @@ -0,0 +1,55 @@ +import React from 'react'; +import styled from 'styled-components'; +import { Dialog, DialogSuspense, FormattedMessage as T } from 'components'; +import withDialogRedux from 'components/DialogReduxConnect'; +import { compose } from 'utils'; + +const EstimatedExpenseFormDialogContent = React.lazy( + () => import('./EstimatedExpenseFormDialogContent'), +); + +/** + * Estimate expense form dialog. + * @returns + */ +function EstimatedExpenseFormDialog({ + dialogName, + payload: { projectId = null }, + isOpen, +}) { + return ( + } + isOpen={isOpen} + autoFocus={true} + canEscapeKeyClose={true} + style={{ width: '400px' }} + > + + + + + ); +} + +export default compose(withDialogRedux())(EstimatedExpenseFormDialog); + +const EstimateExpenseFormDialogRoot = styled(Dialog)` + .bp3-dialog-body { + .bp3-form-group { + margin-bottom: 15px; + + label.bp3-label { + margin-bottom: 3px; + font-size: 13px; + } + } + } + .bp3-dialog-footer { + padding-top: 10px; + } +`;