From 928d4d3f00575a6f5b659d4d655552fa659447b2 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Sat, 11 Jun 2022 00:36:18 +0200 Subject: [PATCH 01/10] feat: add projects list. --- src/config/sidebarMenu.js | 21 +++ .../Dashboard/Sidebar/interfaces.ts | 1 + src/containers/Projects/components/index.tsx | 60 +++++++++ .../containers/ProjectsActionsBar.tsx | 126 ++++++++++++++++++ .../Projects/containers/ProjectsDataTable.tsx | 65 +++++++++ .../Projects/containers/ProjectsList.tsx | 56 ++++++++ .../containers/ProjectsListProvider.tsx | 28 ++++ .../Projects/containers/ProjectsViewTabs.tsx | 49 +++++++ .../Projects/containers/withProjects.tsx | 19 +++ .../containers/withProjectsActions.tsx | 14 ++ src/containers/Projects/index.ts | 0 11 files changed, 439 insertions(+) create mode 100644 src/containers/Projects/components/index.tsx create mode 100644 src/containers/Projects/containers/ProjectsActionsBar.tsx create mode 100644 src/containers/Projects/containers/ProjectsDataTable.tsx create mode 100644 src/containers/Projects/containers/ProjectsList.tsx create mode 100644 src/containers/Projects/containers/ProjectsListProvider.tsx create mode 100644 src/containers/Projects/containers/ProjectsViewTabs.tsx create mode 100644 src/containers/Projects/containers/withProjects.tsx create mode 100644 src/containers/Projects/containers/withProjectsActions.tsx create mode 100644 src/containers/Projects/index.ts diff --git a/src/config/sidebarMenu.js b/src/config/sidebarMenu.js index b11315670..9f4155005 100644 --- a/src/config/sidebarMenu.js +++ b/src/config/sidebarMenu.js @@ -538,6 +538,27 @@ export const SidebarMenu = [ }, ], }, + // --------------------- + // # Projects Management + // --------------------- + { + text: 'Projects', + type: ISidebarMenuItemType.Overlay, + overlayId: ISidebarMenuOverlayIds.Projects, + children: [ + { + text: 'Projects Management', + type: ISidebarMenuItemType.Group, + children: [ + { + text: 'Projects', + href: '/projects', + type: ISidebarMenuItemType.Link, + }, + ], + }, + ], + }, // --------------- // # Reports // --------------- diff --git a/src/containers/Dashboard/Sidebar/interfaces.ts b/src/containers/Dashboard/Sidebar/interfaces.ts index b3f7eaa3a..76e6a75b1 100644 --- a/src/containers/Dashboard/Sidebar/interfaces.ts +++ b/src/containers/Dashboard/Sidebar/interfaces.ts @@ -69,6 +69,7 @@ export enum ISidebarMenuOverlayIds { Contacts = 'Contacts', Cashflow = 'Cashflow', Expenses = 'Expenses', + Projects = 'Projects', } export enum ISidebarSubscriptionAbility { diff --git a/src/containers/Projects/components/index.tsx b/src/containers/Projects/components/index.tsx new file mode 100644 index 000000000..14e71d607 --- /dev/null +++ b/src/containers/Projects/components/index.tsx @@ -0,0 +1,60 @@ +import React from 'react'; +import intl from 'react-intl-universal'; + +import { Menu, MenuDivider, MenuItem, Intent } from '@blueprintjs/core'; + +import { Icon } from 'components'; +import { safeCallback } from 'utils'; + +/** + * Table actions cell. + */ +export const ActionsMenu = ({ + row: { original }, + payload: { onEdit, onDelete, onViewDetails, onNewTask }, +}) => ( + + } + text={intl.get('view_details')} + onClick={safeCallback(onViewDetails, original)} + /> + + } + text={'Edit Project'} + onClick={safeCallback(onEdit, original)} + /> + } + text={'New Task'} + onClick={safeCallback(onNewTask, original)} + /> + + } + intent={Intent.DANGER} + onClick={safeCallback(onDelete, original)} + /> + +); + +/** + * Retrieve projects list columns columns. + */ +export const useProjectsListColumns = () => { + return React.useMemo( + () => [ + { + id: 'name', + Header: 'Project Name', + accessor: 'name', + width: 100, + className: 'name', + clickable: true, + }, + ], + [], + ); +}; diff --git a/src/containers/Projects/containers/ProjectsActionsBar.tsx b/src/containers/Projects/containers/ProjectsActionsBar.tsx new file mode 100644 index 000000000..536e67c0c --- /dev/null +++ b/src/containers/Projects/containers/ProjectsActionsBar.tsx @@ -0,0 +1,126 @@ +import React from 'react'; +import { + Button, + NavbarGroup, + Classes, + NavbarDivider, + Alignment, +} from '@blueprintjs/core'; + +import { + Icon, + AdvancedFilterPopover, + DashboardActionViewsList, + DashboardFilterButton, + DashboardRowsHeightButton, + FormattedMessage as T, +} from 'components'; + +import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar'; + +import withProjects from './withProjects'; +import withProjectsActions from './withProjectsActions'; + +import withSettings from '../../Settings/withSettings'; +import withSettingsActions from '../../Settings/withSettingsActions'; +import withDialogActions from 'containers/Dialog/withDialogActions'; + +import { compose } from 'utils'; + +/** + * Projects actions bar. + * @returns + */ +function ProjectsActionsBar({ + // #withDialogActions + openDialog, + + // #withProjects + projectsFilterRoles, + + // #withProjectsActions + setProjectsTableState, + + // #withSettingsActions + addSetting, +}) { + // Handle tab change. + const handleTabChange = (view) => { + setProjectsTableState({ + viewSlug: view ? view.slug : null, + }); + }; + + // Handle click a refresh projects list. + const handleRefreshBtnClick = () => {}; + + // Handle table row size change. + const handleTableRowSizeChange = (size) => { + addSetting('projects', 'tableSize', size); + }; + + // Handle new project button click. + const handleNewProjectBtnClick = () => { + openDialog('project-form'); + }; + + return ( + + + } + views={[]} + onChange={handleTabChange} + /> + + + + + + ); +} + +export default compose(withDialogActions)(ProjectFormFloatingActions); diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormProvider.tsx b/src/containers/Dialogs/ProjectDialog/containers/ProjectFormProvider.tsx new file mode 100644 index 000000000..fc9561836 --- /dev/null +++ b/src/containers/Dialogs/ProjectDialog/containers/ProjectFormProvider.tsx @@ -0,0 +1,33 @@ +// @ts-nocheck +import React from 'react'; + +import { DialogContent } from 'components'; + +const ProjectFormContext = React.createContext(); + +/** + * Project form provider. + * @returns + */ + +function ProjectFormProvider({ + // #ownProps + dialogName, + projectId, + ...props +}) { + // State provider. + const provider = {}; + + return ( + + + + ); +} + +const useProjectFormContext = () => React.useContext(ProjectFormContext); + +export { ProjectFormProvider, useProjectFormContext }; diff --git a/src/containers/Dialogs/ProjectDialog/index.tsx b/src/containers/Dialogs/ProjectDialog/index.tsx new file mode 100644 index 000000000..c306c7402 --- /dev/null +++ b/src/containers/Dialogs/ProjectDialog/index.tsx @@ -0,0 +1,51 @@ +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 ProjectDialogContent = React.lazy( + () => import('./containers/ProjectDialogContent'), +); + +/** + * Project dialog. + * @returns + */ +function ProjectDialog({ dialogName, payload: { projectId = null }, isOpen }) { + return ( + + + + + + ); +} + +export default compose(withDialogRedux())(ProjectDialog); + +// const ProjectDialogRoot = styled(Dialog)` +// .bp3-dialog-body { +// .bp3-form-group { +// margin-bottom: 15px; +// margin-top: 15px; + +// label.bp3-label { +// margin-bottom: 3px; +// font-size: 13px; +// } +// } + +// .bp3-dialog-footer { +// padding-top: 10px; +// } +// } +// `; diff --git a/src/routes/dashboard.js b/src/routes/dashboard.js index 9283b492f..de351dfc6 100644 --- a/src/routes/dashboard.js +++ b/src/routes/dashboard.js @@ -969,6 +969,13 @@ export const getDashboardRoutes = () => [ ), pageTitle: intl.get('sidebar.transactions_locaking'), }, + { + path: '/projects', + component: lazy(() => + import('../containers/Projects/containers/ProjectsList'), + ), + pageTitle: 'Projects', + }, // Homepage { path: `/`, diff --git a/src/store/Project/projects.actions.ts b/src/store/Project/projects.actions.ts new file mode 100644 index 000000000..f39531d81 --- /dev/null +++ b/src/store/Project/projects.actions.ts @@ -0,0 +1,14 @@ +import t from 'store/types'; + +export const setProjectsTableState = (queries) => { + return { + type: t.PROJECTS_TABLE_STATE_SET, + payload: { queries }, + }; +}; + +export const resetProjectsTableState = () => { + return { + type: t.PROJECTS_TABLE_STATE_RESET, + }; +}; diff --git a/src/store/Project/projects.reducer.ts b/src/store/Project/projects.reducer.ts new file mode 100644 index 000000000..cd219035b --- /dev/null +++ b/src/store/Project/projects.reducer.ts @@ -0,0 +1,33 @@ +import { createReducer } from '@reduxjs/toolkit'; +import { persistReducer, purgeStoredState } from 'redux-persist'; +import storage from 'redux-persist/lib/storage'; +import { createTableStateReducers } from 'store/tableState.reducer'; +import t from 'store/types'; + +export const defaultTableQuery = { + pageSize: 20, + pageIndex: 0, + filterRoles: [], + viewSlug: null, +}; + +const initialState = { + tableState: defaultTableQuery, +}; + +const STORAGE_KEY = 'bigcapital:projects'; + +const CONFIG = { + key: STORAGE_KEY, + whitelist: [], + storage, +}; +const reducerInstance = createReducer(initialState, { + ...createTableStateReducers('PROJECTS', defaultTableQuery), + + [t.RESET]: () => { + purgeStoredState(CONFIG); + }, +}); + +export default persistReducer(CONFIG, reducerInstance); diff --git a/src/store/Project/projects.selectors.ts b/src/store/Project/projects.selectors.ts new file mode 100644 index 000000000..10ab19fab --- /dev/null +++ b/src/store/Project/projects.selectors.ts @@ -0,0 +1,24 @@ +import { isEqual } from 'lodash'; +import { createDeepEqualSelector } from 'utils'; +import { paginationLocationQuery } from 'store/selectors'; +import { defaultTableQuery } from './projects.reducer'; + +const projectsTableState = (state) => state.projects.tableState; + +// Retrieve projects table query. +export const getProjectsTableStateFactory = () => + createDeepEqualSelector( + paginationLocationQuery, + projectsTableState, + (locationQuery, tableState) => { + return { + ...locationQuery, + ...tableState, + }; + }, + ); + +export const isProjectsTableStateChangedFactory = () => + createDeepEqualSelector(projectsTableState, (tableState) => { + return !isEqual(tableState, defaultTableQuery); + }); diff --git a/src/store/Project/projects.type.ts b/src/store/Project/projects.type.ts new file mode 100644 index 000000000..8026b0cf6 --- /dev/null +++ b/src/store/Project/projects.type.ts @@ -0,0 +1,4 @@ +export default { + PROJECTS_TABLE_STATE_SET: 'PROJECTS/TABLE_STATE_SET', + PROJECTS_TABLE_STATE_RESET: 'PROJECTS/TABLE_STATE_RESET', +}; diff --git a/src/store/reducers.js b/src/store/reducers.js index 0223270ad..b89241911 100644 --- a/src/store/reducers.js +++ b/src/store/reducers.js @@ -35,6 +35,7 @@ import plans from './plans/plans.reducer'; import creditNotes from './CreditNote/creditNote.reducer'; import vendorCredit from './VendorCredit/VendorCredit.reducer'; import warehouseTransfers from './WarehouseTransfer/warehouseTransfer.reducer'; +import projects from './Project/projects.reducer'; const appReducer = combineReducers({ authentication, @@ -70,6 +71,7 @@ const appReducer = combineReducers({ creditNotes, vendorCredit, warehouseTransfers, + projects, }); // Reset the state of a redux store diff --git a/src/store/types.js b/src/store/types.js index 079344984..602953034 100644 --- a/src/store/types.js +++ b/src/store/types.js @@ -31,6 +31,7 @@ import inventoryAdjustments from './inventoryAdjustments/inventoryAdjustment.typ import creditNote from './CreditNote/creditNote.type'; import vendorCredit from './VendorCredit/vendorCredit.type'; import WarehouseTransfer from './WarehouseTransfer/warehouseTransfer.type'; +import projects from './Project/projects.type' import plans from './plans/plans.types'; export default { @@ -68,4 +69,5 @@ export default { ...creditNote, ...vendorCredit, ...WarehouseTransfer, + ...projects }; diff --git a/src/style/pages/Projects/ProjectFormDialog.scss b/src/style/pages/Projects/ProjectFormDialog.scss new file mode 100644 index 000000000..31801f7ee --- /dev/null +++ b/src/style/pages/Projects/ProjectFormDialog.scss @@ -0,0 +1,20 @@ +.dialog--project-form { + width: 650px; + + .bp3-dialog-body { + .bp3-form-group { + margin-bottom: 15px; + margin-top: 15px; + + label.bp3-label { + margin-bottom: 3px; + font-size: 13px; + } + } + + + } + .bp3-dialog-footer { + padding-top: 10px; + } +} From cb0a315ca62f9f59e4a9405bc6c8bc7f3ec07c84 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Sat, 11 Jun 2022 00:45:31 +0200 Subject: [PATCH 03/10] feat: add task form dialog. --- .../containers/TaskDialogContent.tsx | 19 +++++ .../TaskDialog/containers/TaskForm.schema.tsx | 12 ++++ .../TaskDialog/containers/TaskForm.tsx | 66 +++++++++++++++++ .../TaskDialog/containers/TaskFormContent.tsx | 18 +++++ .../TaskDialog/containers/TaskFormFields.tsx | 70 +++++++++++++++++++ .../containers/TaskFormFloatingActions.tsx | 49 +++++++++++++ .../containers/TaskFormProvider.tsx | 29 ++++++++ src/containers/Dialogs/TaskDialog/index.tsx | 33 +++++++++ 8 files changed, 296 insertions(+) create mode 100644 src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx create mode 100644 src/containers/Dialogs/TaskDialog/containers/TaskForm.schema.tsx create mode 100644 src/containers/Dialogs/TaskDialog/containers/TaskForm.tsx create mode 100644 src/containers/Dialogs/TaskDialog/containers/TaskFormContent.tsx create mode 100644 src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx create mode 100644 src/containers/Dialogs/TaskDialog/containers/TaskFormFloatingActions.tsx create mode 100644 src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx create mode 100644 src/containers/Dialogs/TaskDialog/index.tsx diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx new file mode 100644 index 000000000..04e0a86bc --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx @@ -0,0 +1,19 @@ +import React from 'react'; + +import { TaskFormProvider } from './TaskFormProvider'; +import TaskForm from './TaskForm'; +/** + * Task dialog content. + * @returns + */ +export default function TaskDialogContent({ + // #ownProps + dialogName, + task, +}) { + return ( + + + + ); +} diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskForm.schema.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskForm.schema.tsx new file mode 100644 index 000000000..f1c3ecd3b --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/containers/TaskForm.schema.tsx @@ -0,0 +1,12 @@ +import * as Yup from 'yup'; +import intl from 'react-intl-universal'; +import { DATATYPES_LENGTH } from 'common/dataTypes'; + +const Schema = Yup.object().shape({ + taks_name: Yup.string(), + task_house: Yup.string(), + change: Yup.string(), + amount: Yup.number(), +}); + +export const CreateTaskFormSchema = Schema; diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskForm.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskForm.tsx new file mode 100644 index 000000000..0fc7381e1 --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/containers/TaskForm.tsx @@ -0,0 +1,66 @@ +//@ts-nocheck +import React from 'react'; + +import { Formik } from 'formik'; + +import { CreateTaskFormSchema } from './TaskForm.schema'; +import { useTaskFormContext } from './TaskFormProvider'; +import TaskFormContent from './TaskFormContent'; + +import { AppToaster } from 'components'; +import withDialogActions from 'containers/Dialog/withDialogActions'; + +import { compose } from 'utils'; + +const defaultInitialValues = { + taks_name: '', + task_house: '00:00', + change: 'Hourly Rate', + change_amount: '100000000', + amount: '', +}; + +/** + * Task form. + * @returns + */ +function TaskForm({ + // #withDialogActions + closeDialog, +}) { + // task form dialog context. + const { dialogName } = useTaskFormContext(); + + // Initial form values + const initialValues = { + ...defaultInitialValues, + }; + + // Handles the form submit. + const handleFormSubmit = (values, { setSubmitting, setErrors }) => { + const form = {}; + + // Handle request response success. + const onSuccess = (response) => {}; + + // Handle request response errors. + const onError = ({ + response: { + data: { errors }, + }, + }) => { + setSubmitting(false); + }; + }; + + return ( + + ); +} + +export default compose(withDialogActions)(TaskForm); diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormContent.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskFormContent.tsx new file mode 100644 index 000000000..49c8dd088 --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/containers/TaskFormContent.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { Form } from 'formik'; + +import TaskFormFields from './TaskFormFields'; +import TaskFormFloatingActions from './TaskFormFloatingActions'; + +/** + * Task form content. + * @returns + */ +export default function TaskFormContent() { + return ( +
+ + + + ); +} diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx new file mode 100644 index 000000000..0dc877c10 --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx @@ -0,0 +1,70 @@ +import React from 'react'; +import styled from 'styled-components'; + +import { Classes, ControlGroup } from '@blueprintjs/core'; +import { + FFormGroup, + FInputGroup, + Col, + Row, + FormattedMessage as T, +} from 'components'; + +/** + * Task form fields. + * @returns + */ +function TaskFormFields() { + return ( +
+ {/*------------ Task Name -----------*/} + + + + {/*------------ Estimated Hours -----------*/} + + + + + + + {/*------------ Charge -----------*/} + + + + + + + + + + {/*------------ Estimated Amount -----------*/} + + + Estimated Amount: + $100000 + + +
+ ); +} + +export default TaskFormFields; + +const EstimatedAmountBase = styled.div` + display: flex; + justify-content: flex-end; + font-size: 12px; + /* opacity: 0.7; */ +`; + +const EstimatedAmountContent = styled.span` + background-color: #fffdf5; + padding: 0.1rem 0; +`; + +const EstimateAmount = styled.span` + font-size: 13px; + font-weight: 700; + margin-left: 10px; +`; diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormFloatingActions.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskFormFloatingActions.tsx new file mode 100644 index 000000000..45344bdc3 --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/containers/TaskFormFloatingActions.tsx @@ -0,0 +1,49 @@ +// @ts-nocheck +import React from 'react'; +import { useFormikContext } from 'formik'; +import { Intent, Button, Classes } from '@blueprintjs/core'; +import { FormattedMessage as T } from 'components'; +import { useTaskFormContext } from './TaskFormProvider'; + +import withDialogActions from 'containers/Dialog/withDialogActions'; +import { compose } from 'utils'; + +/** + * Task form floating actions. + * @returns + */ +function TaskFormFloatingActions({ + // #withDialogActions + closeDialog, +}) { + // Formik context. + const { isSubmitting } = useFormikContext(); + + // Task form dialog context. + const { dialogName } = useTaskFormContext(); + + // Handle close button click. + const handleCancelBtnClick = () => { + closeDialog(dialogName); + }; + + return ( +
+
+ + +
+
+ ); +} + +export default compose(withDialogActions)(TaskFormFloatingActions); diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx new file mode 100644 index 000000000..bdd933cfb --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx @@ -0,0 +1,29 @@ +//@ts-nocheck +import React from 'react'; + +import { DialogContent } from 'components'; + +const TaskFormContext = React.createContext(); + +/** + * Task form provider. + * @returns + */ +function TaskFormProvider({ + // #ownProps + dialogName, + taskId, + ...props +}) { + // State provider. + const provider = {}; + return ( + + + + ); +} + +const useTaskFormContext = () => React.useContext(TaskFormContext); + +export { TaskFormProvider, useTaskFormContext }; diff --git a/src/containers/Dialogs/TaskDialog/index.tsx b/src/containers/Dialogs/TaskDialog/index.tsx new file mode 100644 index 000000000..7cef6e748 --- /dev/null +++ b/src/containers/Dialogs/TaskDialog/index.tsx @@ -0,0 +1,33 @@ +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 TaskDialogContent = React.lazy(() => + import('./containers/TaskDialogContent'), +); + +/** + * Task dialog. + * @returns + */ +function TaskDialog({ dialogName, payload: { taskId = null }, isOpen }) { + return ( + + + + + + ); +} +export default compose(withDialogRedux())(TaskDialog); + +const TaskDialogRoot = styled(Dialog)``; From bee7896279762863b2cf1d4a32cab11fea0caa94 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Sat, 11 Jun 2022 13:29:33 +0200 Subject: [PATCH 04/10] fix: project form. --- src/components/Forms/BlueprintFormik.js | 2 ++ .../ProjectDialog/containers/ProjectForm.tsx | 9 +++--- .../containers/ProjectFormFields.tsx | 32 +++++++++++-------- .../containers/ProjectFormProvider.tsx | 15 ++++++--- .../Dialogs/ProjectDialog/index.tsx | 2 +- .../Dialogs/TaskDialog/components/index.ts | 0 .../TaskDialog/containers/TaskFormFields.tsx | 11 ++++--- src/containers/Dialogs/TaskDialog/index.tsx | 7 ++-- src/containers/Projects/components/index.tsx | 6 ++-- src/lang/en/index.json | 17 +++++++++- src/routes/dashboard.js | 2 +- 11 files changed, 69 insertions(+), 34 deletions(-) create mode 100644 src/containers/Dialogs/TaskDialog/components/index.ts diff --git a/src/components/Forms/BlueprintFormik.js b/src/components/Forms/BlueprintFormik.js index a82afbf3c..497049ad4 100644 --- a/src/components/Forms/BlueprintFormik.js +++ b/src/components/Forms/BlueprintFormik.js @@ -9,6 +9,7 @@ import { TextArea, } from '@blueprintjs-formik/core'; import { Select, MultiSelect } from '@blueprintjs-formik/select'; +import { DateInput } from '@blueprintjs-formik/datetime'; export { FormGroup as FFormGroup, @@ -21,4 +22,5 @@ export { MultiSelect as FMultiSelect, EditableText as FEditableText, TextArea as FTextArea, + DateInput as FDateInput, }; diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.tsx b/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.tsx index cd7359898..4c2cd0ad0 100644 --- a/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.tsx +++ b/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.tsx @@ -15,11 +15,12 @@ import { useProjectFormContext } from './ProjectFormProvider'; import { compose } from 'utils'; const defaultInitialValues = { - contact:'', - project_name:'', - project_deadline: moment(new Date()).format('YYYY-MM-DD'), + contact: '', + project_name: '', + project_deadline: '', + // project_deadline: moment(new Date()).format('YYYY-MM-DD'), project_state: false, - project_cost:'' + project_cost: '', }; /** diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFields.tsx b/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFields.tsx index d01b1962c..79beb9ddd 100644 --- a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFields.tsx +++ b/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFields.tsx @@ -1,3 +1,4 @@ +// @ts-nocheck import React from 'react'; import intl from 'react-intl-universal'; @@ -10,11 +11,11 @@ import { FFormGroup, FInputGroup, FCheckbox, + FDateInput, FMoneyInputGroup, InputPrependText, FormattedMessage as T, CustomerSelectField, - FCustomerSelectField, } from 'components'; import { inputIntent, @@ -22,24 +23,27 @@ import { tansformDateValue, handleDateChange, } from 'utils'; +import { useProjectFormContext } from './ProjectFormProvider'; /** * Project form fields. * @returns */ function ProjectFormFields() { + const { customers } = useProjectFormContext(); + return (
{/*------------ Contact -----------*/} {({ form, field: { value }, meta: { error, touched } }) => ( { @@ -51,22 +55,21 @@ function ProjectFormFields() { )} - {/*------------ Project Name -----------*/} - + {/*------------ DeadLine -----------*/} - { - // })} - // value={tansformDateValue(value)} + {/*------------ Cost Estimate -----------*/} - + + ); diff --git a/src/containers/Dialogs/ProjectDialog/index.tsx b/src/containers/Dialogs/ProjectDialog/index.tsx index c306c7402..6c5b95595 100644 --- a/src/containers/Dialogs/ProjectDialog/index.tsx +++ b/src/containers/Dialogs/ProjectDialog/index.tsx @@ -16,7 +16,7 @@ function ProjectDialog({ dialogName, payload: { projectId = null }, isOpen }) { return ( } isOpen={isOpen} autoFocus={true} canEscapeKeyClose={true} diff --git a/src/containers/Dialogs/TaskDialog/components/index.ts b/src/containers/Dialogs/TaskDialog/components/index.ts new file mode 100644 index 000000000..e69de29bb diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx index 0dc877c10..4969b86b9 100644 --- a/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx +++ b/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx @@ -18,19 +18,22 @@ function TaskFormFields() { return (
{/*------------ Task Name -----------*/} - + } name={'task_name'}> {/*------------ Estimated Hours -----------*/} - + } + name={'task_house'} + > {/*------------ Charge -----------*/} - + } name={'Charge'}> @@ -41,7 +44,7 @@ function TaskFormFields() { {/*------------ Estimated Amount -----------*/} - Estimated Amount: + $100000 diff --git a/src/containers/Dialogs/TaskDialog/index.tsx b/src/containers/Dialogs/TaskDialog/index.tsx index 7cef6e748..cd21e0229 100644 --- a/src/containers/Dialogs/TaskDialog/index.tsx +++ b/src/containers/Dialogs/TaskDialog/index.tsx @@ -1,11 +1,12 @@ import React from 'react'; import styled from 'styled-components'; +import intl from 'react-intl-universal'; import { Dialog, DialogSuspense, FormattedMessage as T } from 'components'; import withDialogRedux from 'components/DialogReduxConnect'; import { compose } from 'utils'; -const TaskDialogContent = React.lazy(() => - import('./containers/TaskDialogContent'), +const TaskDialogContent = React.lazy( + () => import('./containers/TaskDialogContent'), ); /** @@ -16,7 +17,7 @@ function TaskDialog({ dialogName, payload: { taskId = null }, isOpen }) { return ( } - text={'Edit Project'} + text={intl.get('projects.action.edit_project')} onClick={safeCallback(onEdit, original)} /> } - text={'New Task'} + text={intl.get('projects.action.new_task')} onClick={safeCallback(onNewTask, original)} /> } intent={Intent.DANGER} onClick={safeCallback(onDelete, original)} diff --git a/src/lang/en/index.json b/src/lang/en/index.json index 6f35aaa18..d6b4e9faf 100644 --- a/src/lang/en/index.json +++ b/src/lang/en/index.json @@ -2044,5 +2044,20 @@ "expense.entries.remove_row": "Remove line", "warehouse_transfer.entries.remove_row": "Remove line", "item.details.inactive": "Inactive", - "bill.validation.due_date": "{path} field must be later than {min}" + "bill.validation.due_date": "{path} field must be later than {min}", + "sidebar.projects": "Projects", + "projects.action.edit_project": "Edit Project", + "projects.action.new_task": "New Task", + "projects.action.delete_project": "Delete Project", + "projects.label.new_project": "New Project", + "projects.label.contact": "Contact", + "projects.label.project_name": "Project Name", + "projects.label.deadline": "Deadline", + "projects.label.calculator_expenses": "Calculator from tasks & estimated expenses", + "projects.label.cost_estimate": "Cost Estimate", + "task.label.new_task": "New Task", + "task.label.task_name": "Task Name", + "task.label.estimated_hours": "Task Name", + "task.label.charge": "Charge", + "task.label.estimated_amount": "Estimated Amount" } \ No newline at end of file diff --git a/src/routes/dashboard.js b/src/routes/dashboard.js index de351dfc6..a14713bc0 100644 --- a/src/routes/dashboard.js +++ b/src/routes/dashboard.js @@ -974,7 +974,7 @@ export const getDashboardRoutes = () => [ component: lazy(() => import('../containers/Projects/containers/ProjectsList'), ), - pageTitle: 'Projects', + pageTitle: intl.get('sidebar.projects'), }, // Homepage { From 327916da4b6bab308d8ac7850ab921f3b5213f24 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Sat, 11 Jun 2022 13:58:04 +0200 Subject: [PATCH 05/10] fix: add FDateInput --- .../Dialogs/ProjectDialog/containers/ProjectFormFields.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFields.tsx b/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFields.tsx index 79beb9ddd..9ab610bf1 100644 --- a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFields.tsx +++ b/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFields.tsx @@ -69,7 +69,9 @@ function ProjectFormFields() { className={classNames(CLASSES.FILL, 'form-group--date')} > date.toLocaleString()} popoverProps={{ position: Position.BOTTOM, minimal: true, From a44f548ff9c87ac6baf14f6e359f10ff40ec00b6 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Sat, 11 Jun 2022 15:30:11 +0200 Subject: [PATCH 06/10] feat: projects actions bar. --- src/common/tables.js | 3 +- .../ProjectDialog/containers/ProjectForm.tsx | 3 +- .../containers/ProjectFormFloatingActions.tsx | 2 +- .../containers/ProjectFormProvider.tsx | 1 + .../containers/TaskFormProvider.tsx | 5 ++- .../containers/ProjectsActionsBar.tsx | 8 ++++- .../Projects/containers/ProjectsDataTable.tsx | 34 ++++++++++++++++++- src/containers/Settings/withSettings.js | 1 + src/lang/en/index.json | 1 + src/store/settings/settings.reducer.js | 3 ++ 10 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/common/tables.js b/src/common/tables.js index 59c50dff7..0d26d3ace 100644 --- a/src/common/tables.js +++ b/src/common/tables.js @@ -16,7 +16,8 @@ export const TABLES = { CASHFLOW_Transactions: 'cashflow_transactions', CREDIT_NOTES: 'credit_notes', VENDOR_CREDITS: 'vendor_credits', - WAREHOUSE_TRANSFERS:'warehouse_transfers' + WAREHOUSE_TRANSFERS:'warehouse_transfers', + PROJECTS:'projects' }; export const TABLE_SIZE = { diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.tsx b/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.tsx index 4c2cd0ad0..15603a219 100644 --- a/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.tsx +++ b/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.tsx @@ -17,8 +17,7 @@ import { compose } from 'utils'; const defaultInitialValues = { contact: '', project_name: '', - project_deadline: '', - // project_deadline: moment(new Date()).format('YYYY-MM-DD'), + project_deadline: moment(new Date()).format('YYYY-MM-DD'), project_state: false, project_cost: '', }; diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFloatingActions.tsx b/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFloatingActions.tsx index 1f118c72f..57b798d35 100644 --- a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFloatingActions.tsx +++ b/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFloatingActions.tsx @@ -38,7 +38,7 @@ function ProjectFormFloatingActions({ style={{ minWidth: '75px' }} type="submit" > - Create +
diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormProvider.tsx b/src/containers/Dialogs/ProjectDialog/containers/ProjectFormProvider.tsx index 6bd504415..9f9379e05 100644 --- a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormProvider.tsx +++ b/src/containers/Dialogs/ProjectDialog/containers/ProjectFormProvider.tsx @@ -26,6 +26,7 @@ function ProjectFormProvider({ // State provider. const provider = { customers, + dialogName, }; return ( diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx index bdd933cfb..1f3384dd0 100644 --- a/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx +++ b/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx @@ -16,7 +16,10 @@ function TaskFormProvider({ ...props }) { // State provider. - const provider = {}; + const provider = { + dialogName, + }; + return ( diff --git a/src/containers/Projects/containers/ProjectsActionsBar.tsx b/src/containers/Projects/containers/ProjectsActionsBar.tsx index 536e67c0c..d227a0aba 100644 --- a/src/containers/Projects/containers/ProjectsActionsBar.tsx +++ b/src/containers/Projects/containers/ProjectsActionsBar.tsx @@ -41,6 +41,9 @@ function ProjectsActionsBar({ // #withProjectsActions setProjectsTableState, + // #withSettings + projectsTableSize, + // #withSettingsActions addSetting, }) { @@ -100,7 +103,7 @@ function ProjectsActionsBar({ /> @@ -123,4 +126,7 @@ export default compose( withProjects(({ projectsTableState }) => ({ projectsFilterRoles: projectsTableState?.filterRoles, })), + withSettings(({ projectSettings }) => ({ + projectsTableSize: projectSettings?.tableSize, + })), )(ProjectsActionsBar); diff --git a/src/containers/Projects/containers/ProjectsDataTable.tsx b/src/containers/Projects/containers/ProjectsDataTable.tsx index d2f954a14..45a9b1960 100644 --- a/src/containers/Projects/containers/ProjectsDataTable.tsx +++ b/src/containers/Projects/containers/ProjectsDataTable.tsx @@ -1,14 +1,18 @@ import React from 'react'; import { DataTable } from 'components'; +import { TABLES } from 'common/tables'; import TableSkeletonRows from 'components/Datatable/TableSkeletonRows'; import TableSkeletonHeader from 'components/Datatable/TableHeaderSkeleton'; import { useProjectsListContext } from './ProjectsListProvider'; +import { useMemorizedColumnsWidths } from 'hooks'; import { useProjectsListColumns, ActionsMenu } from '../components'; import withDialogActions from 'containers/Dialog/withDialogActions'; +import withProjectsActions from './withProjectsActions'; +import withSettings from '../../Settings/withSettings'; import { compose } from 'utils'; @@ -19,6 +23,18 @@ const projects = [ description: 'Project 1 description', status: 'Active', }, + { + id: 2, + name: 'Project 2', + description: 'Project 2 description', + status: 'Active', + }, + { + id: 3, + name: 'Project 3', + description: 'Project 3 description', + status: 'Active', + }, ]; /** @@ -28,6 +44,9 @@ const projects = [ function ProjectsDataTable({ // #withDial openDialog, + + // #withSettings + projectsTableSize, }) { // Retrieve projects table columns. const columns = useProjectsListColumns(); @@ -40,6 +59,10 @@ function ProjectsDataTable({ openDialog('task-form'); }; + // Local storage memorizing columns widths. + const [initialColumnsWidths, , handleColumnResizing] = + useMemorizedColumnsWidths(TABLES.PROJECTS); + return ( ({ + projectsTableSize: projectSettings?.tableSize, + })), +)(ProjectsDataTable); diff --git a/src/containers/Settings/withSettings.js b/src/containers/Settings/withSettings.js index 08e7fd6dc..e1c1aa7db 100644 --- a/src/containers/Settings/withSettings.js +++ b/src/containers/Settings/withSettings.js @@ -22,6 +22,7 @@ export default (mapState) => { creditNoteSettings: state.settings.data.creditNote, vendorsCreditNoteSetting: state.settings.data.vendorCredit, warehouseTransferSettings: state.settings.data.warehouseTransfers, + projectSettings:state.settings.data.projects }; return mapState ? mapState(mapped, state, props) : mapped; }; diff --git a/src/lang/en/index.json b/src/lang/en/index.json index d6b4e9faf..2a1315ea7 100644 --- a/src/lang/en/index.json +++ b/src/lang/en/index.json @@ -2055,6 +2055,7 @@ "projects.label.deadline": "Deadline", "projects.label.calculator_expenses": "Calculator from tasks & estimated expenses", "projects.label.cost_estimate": "Cost Estimate", + "projects.label.create": "Create", "task.label.new_task": "New Task", "task.label.task_name": "Task Name", "task.label.estimated_hours": "Task Name", diff --git a/src/store/settings/settings.reducer.js b/src/store/settings/settings.reducer.js index ee140bf98..fb28d894f 100644 --- a/src/store/settings/settings.reducer.js +++ b/src/store/settings/settings.reducer.js @@ -61,6 +61,9 @@ const initialState = { warehouseTransfer: { tableSize: 'medium', }, + projects: { + tableSize: 'medium', + }, }, }; From 4eac2239b1ad7ac8b656643d9ef1349958424415 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Sun, 12 Jun 2022 09:43:19 +0200 Subject: [PATCH 07/10] feat: add projects view tabs. --- .../Projects/containers/ProjectsDataTable.tsx | 8 ++++++++ .../Projects/containers/ProjectsList.tsx | 4 ++-- .../Projects/containers/ProjectsListProvider.tsx | 16 +++++++++++----- .../Projects/containers/ProjectsViewTabs.tsx | 11 ++++++++--- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/containers/Projects/containers/ProjectsDataTable.tsx b/src/containers/Projects/containers/ProjectsDataTable.tsx index 45a9b1960..4b42a947b 100644 --- a/src/containers/Projects/containers/ProjectsDataTable.tsx +++ b/src/containers/Projects/containers/ProjectsDataTable.tsx @@ -54,6 +54,13 @@ function ProjectsDataTable({ // Handle cell click. const handleCellClick = (cell, event) => {}; + // Handle edit project. + const handleEditProject = (project) => { + openDialog('project-form', { + projectId: project.id, + }); + }; + // Handle new task button click. const handleNewTaskButtonClick = () => { openDialog('task-form'); @@ -82,6 +89,7 @@ function ProjectsDataTable({ onColumnResizing={handleColumnResizing} size={projectsTableSize} payload={{ + onEdit: handleEditProject, onNewTask: handleNewTaskButtonClick, }} /> diff --git a/src/containers/Projects/containers/ProjectsList.tsx b/src/containers/Projects/containers/ProjectsList.tsx index 9de165c9d..4f1716c8a 100644 --- a/src/containers/Projects/containers/ProjectsList.tsx +++ b/src/containers/Projects/containers/ProjectsList.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { DashboardPageContent, DashboardContentTable } from 'components'; import ProjectsActionsBar from './ProjectsActionsBar'; -// import ProjectsViewTabs from './ProjectsViewTabs'; +import ProjectsViewTabs from './ProjectsViewTabs'; import ProjectsDataTable from './ProjectsDataTable'; import withProjects from './withProjects'; @@ -38,7 +38,7 @@ function ProjectsList({ > - {/* */} + diff --git a/src/containers/Projects/containers/ProjectsListProvider.tsx b/src/containers/Projects/containers/ProjectsListProvider.tsx index 6ec170f45..4b2cc5412 100644 --- a/src/containers/Projects/containers/ProjectsListProvider.tsx +++ b/src/containers/Projects/containers/ProjectsListProvider.tsx @@ -1,21 +1,27 @@ +//@ts-nocheck import React from 'react'; +import { useResourceViews, useResourceMeta } from 'hooks/query'; import DashboardInsider from '../../../components/Dashboard/DashboardInsider'; - -const ProjectsListContext = React.createContext({}); +const ProjectsListContext = React.createContext(); /** * Projects list data provider. * @returns */ function ProjectsListProvider({ query, tableStateChanged, ...props }) { - // provider payload. + // Fetch accounts resource views and fields. + const { data: projectsViews, isLoading: isViewsLoading } = + useResourceViews('projects'); - const provider = {}; + // provider payload. + const provider = { + projectsViews, + }; return ( diff --git a/src/containers/Projects/containers/ProjectsViewTabs.tsx b/src/containers/Projects/containers/ProjectsViewTabs.tsx index f13cf4606..1a9f137bc 100644 --- a/src/containers/Projects/containers/ProjectsViewTabs.tsx +++ b/src/containers/Projects/containers/ProjectsViewTabs.tsx @@ -1,3 +1,4 @@ +//@ts-nocheck import React from 'react'; import { Alignment, Navbar, NavbarGroup } from '@blueprintjs/core'; @@ -5,6 +6,7 @@ import { DashboardViewsTabs } from 'components'; import withProjects from './withProjects'; import withProjectsActions from './withProjectsActions'; +import { useProjectsListContext } from './ProjectsListProvider'; import { compose, transfromViewsToTabs } from 'utils'; @@ -19,8 +21,11 @@ function ProjectsViewTabs({ // #withProjectsActions setProjectsTableState, }) { + // Projects list context. + const { projectsViews } = useProjectsListContext(); + // Projects views. - const tabs = transfromViewsToTabs([]); + const tabs = transfromViewsToTabs(projectsViews); // Handle tab change. const handleTabsChange = (viewSlug) => { @@ -32,7 +37,7 @@ function ProjectsViewTabs({ @@ -46,4 +51,4 @@ export default compose( projectsCurrentView: projectsTableState?.viewSlug, })), withProjectsActions, -)(); +)(ProjectsViewTabs); From 813637872542a0bef1859e1058b56d23672744bb Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Sun, 12 Jun 2022 11:56:06 +0200 Subject: [PATCH 08/10] fix: project & task dialog. --- src/common/tables.js | 4 +-- .../containers/ProjectDialogContent.tsx | 4 +-- .../containers/ProjectForm.schema.tsx | 18 +++++++--- .../ProjectDialog/containers/ProjectForm.tsx | 13 +++---- .../containers/ProjectFormFields.tsx | 16 ++++----- .../containers/ProjectFormProvider.tsx | 2 -- .../Dialogs/ProjectDialog/index.tsx | 35 +++++++++---------- .../containers/TaskDialogContent.tsx | 3 +- .../TaskDialog/containers/TaskForm.schema.tsx | 10 +++--- .../TaskDialog/containers/TaskForm.tsx | 11 +++--- .../TaskDialog/containers/TaskFormContent.tsx | 1 - .../TaskDialog/containers/TaskFormFields.tsx | 9 +++-- .../containers/TaskFormFloatingActions.tsx | 1 - .../containers/TaskFormProvider.tsx | 1 - src/containers/Dialogs/TaskDialog/index.tsx | 2 +- src/lang/en/index.json | 11 +++++- .../pages/Projects/ProjectFormDialog.scss | 20 ----------- 17 files changed, 72 insertions(+), 89 deletions(-) delete mode 100644 src/style/pages/Projects/ProjectFormDialog.scss diff --git a/src/common/tables.js b/src/common/tables.js index 0d26d3ace..419b0e9bb 100644 --- a/src/common/tables.js +++ b/src/common/tables.js @@ -16,8 +16,8 @@ export const TABLES = { CASHFLOW_Transactions: 'cashflow_transactions', CREDIT_NOTES: 'credit_notes', VENDOR_CREDITS: 'vendor_credits', - WAREHOUSE_TRANSFERS:'warehouse_transfers', - PROJECTS:'projects' + WAREHOUSE_TRANSFERS: 'warehouse_transfers', + PROJECTS: 'projects', }; export const TABLE_SIZE = { diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectDialogContent.tsx b/src/containers/Dialogs/ProjectDialog/containers/ProjectDialogContent.tsx index e4aa08c56..97397608d 100644 --- a/src/containers/Dialogs/ProjectDialog/containers/ProjectDialogContent.tsx +++ b/src/containers/Dialogs/ProjectDialog/containers/ProjectDialogContent.tsx @@ -1,13 +1,11 @@ import React from 'react'; -import 'style/pages/Projects/ProjectFormDialog.scss'; - import { ProjectFormProvider } from './ProjectFormProvider'; import ProjectForm from './ProjectForm'; /** * Project dialog content. - * @returns + * @returns {ReactNode} */ export default function ProjectDialogContent({ // #ownProps diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.schema.tsx b/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.schema.tsx index 6738904f0..530fec56b 100644 --- a/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.schema.tsx +++ b/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.schema.tsx @@ -3,11 +3,19 @@ import intl from 'react-intl-universal'; import { DATATYPES_LENGTH } from 'common/dataTypes'; const Schema = Yup.object().shape({ - contact: Yup.string(), - project_name: Yup.string(), - project_deadline: Yup.date(), - project_state: Yup.boolean(), - project_cost: Yup.number(), + contact: Yup.string().label(intl.get('project.schema.label.contact')), + projectName: Yup.string() + .label(intl.get('project.schema.label.project_name')) + .required(), + projectDeadline: Yup.date() + .label(intl.get('project.schema.label.deadline')) + .required(), + projectState: Yup.boolean().label( + intl.get('project.schema.label.project_state'), + ), + projectCost: Yup.number().label( + intl.get('project.schema.label.project_cost'), + ), }); export const CreateProjectFormSchema = Schema; diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.tsx b/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.tsx index 15603a219..115e8a0ff 100644 --- a/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.tsx +++ b/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.tsx @@ -2,24 +2,21 @@ import React from 'react'; import moment from 'moment'; import intl from 'react-intl-universal'; - import { Formik } from 'formik'; - import { AppToaster } from 'components'; -import withDialogActions from 'containers/Dialog/withDialogActions'; - import ProjectFormContent from './ProjectFormContent'; import { CreateProjectFormSchema } from './ProjectForm.schema'; import { useProjectFormContext } from './ProjectFormProvider'; +import withDialogActions from 'containers/Dialog/withDialogActions'; import { compose } from 'utils'; const defaultInitialValues = { contact: '', - project_name: '', - project_deadline: moment(new Date()).format('YYYY-MM-DD'), - project_state: false, - project_cost: '', + projectName: '', + projectDeadline: moment(new Date()).format('YYYY-MM-DD'), + projectState: true, + projectCost: '', }; /** diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFields.tsx b/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFields.tsx index 9ab610bf1..7047ae048 100644 --- a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFields.tsx +++ b/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFields.tsx @@ -4,7 +4,6 @@ import intl from 'react-intl-universal'; import { Classes, Position, FormGroup, ControlGroup } from '@blueprintjs/core'; import { FastField } from 'formik'; -import { DateInput } from '@blueprintjs/datetime'; import { CLASSES } from 'common/classes'; import classNames from 'classnames'; import { @@ -58,19 +57,19 @@ function ProjectFormFields() { {/*------------ Project Name -----------*/} - + {/*------------ DeadLine -----------*/} date.toLocaleString()} popoverProps={{ position: Position.BOTTOM, @@ -80,20 +79,21 @@ function ProjectFormFields() { {/*------------ CheckBox -----------*/} - + {/*------------ Cost Estimate -----------*/} } isOpen={isOpen} autoFocus={true} canEscapeKeyClose={true} - className={'dialog--project-form'} style={{ width: '400px' }} > - + ); } export default compose(withDialogRedux())(ProjectDialog); -// const ProjectDialogRoot = styled(Dialog)` -// .bp3-dialog-body { -// .bp3-form-group { -// margin-bottom: 15px; -// margin-top: 15px; +const ProjectDialogRoot = styled(Dialog)` + .bp3-dialog-body { + .bp3-form-group { + margin-bottom: 15px; + margin-top: 15px; -// label.bp3-label { -// margin-bottom: 3px; -// font-size: 13px; -// } -// } + label.bp3-label { + margin-bottom: 3px; + font-size: 13px; + } + } -// .bp3-dialog-footer { -// padding-top: 10px; -// } -// } -// `; + .bp3-dialog-footer { + padding-top: 10px; + } + } +`; diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx index 04e0a86bc..79b721e02 100644 --- a/src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx +++ b/src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx @@ -1,10 +1,9 @@ import React from 'react'; - import { TaskFormProvider } from './TaskFormProvider'; import TaskForm from './TaskForm'; + /** * Task dialog content. - * @returns */ export default function TaskDialogContent({ // #ownProps diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskForm.schema.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskForm.schema.tsx index f1c3ecd3b..85b5954ab 100644 --- a/src/containers/Dialogs/TaskDialog/containers/TaskForm.schema.tsx +++ b/src/containers/Dialogs/TaskDialog/containers/TaskForm.schema.tsx @@ -3,10 +3,12 @@ import intl from 'react-intl-universal'; import { DATATYPES_LENGTH } from 'common/dataTypes'; const Schema = Yup.object().shape({ - taks_name: Yup.string(), - task_house: Yup.string(), - change: Yup.string(), - amount: Yup.number(), + taksName: Yup.string() + .label(intl.get('task.schema.label.task_name')) + .required(), + taskHouse: Yup.string().label(intl.get('task.schema.label.task_house')), + change: Yup.string().label(intl.get('task.schema.label.charge')).required(), + amount: Yup.number().label(intl.get('task.schema.label.amount')), }); export const CreateTaskFormSchema = Schema; diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskForm.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskForm.tsx index 0fc7381e1..2cc6fbd59 100644 --- a/src/containers/Dialogs/TaskDialog/containers/TaskForm.tsx +++ b/src/containers/Dialogs/TaskDialog/containers/TaskForm.tsx @@ -1,22 +1,19 @@ //@ts-nocheck import React from 'react'; - import { Formik } from 'formik'; - import { CreateTaskFormSchema } from './TaskForm.schema'; import { useTaskFormContext } from './TaskFormProvider'; -import TaskFormContent from './TaskFormContent'; - import { AppToaster } from 'components'; +import TaskFormContent from './TaskFormContent'; import withDialogActions from 'containers/Dialog/withDialogActions'; import { compose } from 'utils'; const defaultInitialValues = { - taks_name: '', - task_house: '00:00', + taksName: '', + taskHouse: '00:00', change: 'Hourly Rate', - change_amount: '100000000', + changeAmount: '100000000', amount: '', }; diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormContent.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskFormContent.tsx index 49c8dd088..1d1f371f5 100644 --- a/src/containers/Dialogs/TaskDialog/containers/TaskFormContent.tsx +++ b/src/containers/Dialogs/TaskDialog/containers/TaskFormContent.tsx @@ -1,6 +1,5 @@ import React from 'react'; import { Form } from 'formik'; - import TaskFormFields from './TaskFormFields'; import TaskFormFloatingActions from './TaskFormFloatingActions'; diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx index 4969b86b9..5a053ac6a 100644 --- a/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx +++ b/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx @@ -1,6 +1,5 @@ import React from 'react'; import styled from 'styled-components'; - import { Classes, ControlGroup } from '@blueprintjs/core'; import { FFormGroup, @@ -19,16 +18,16 @@ function TaskFormFields() {
{/*------------ Task Name -----------*/} } name={'task_name'}> - + {/*------------ Estimated Hours -----------*/} } - name={'task_house'} + name={'taskHouse'} > - + {/*------------ Charge -----------*/} @@ -36,7 +35,7 @@ function TaskFormFields() { } name={'Charge'}> - + diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormFloatingActions.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskFormFloatingActions.tsx index 45344bdc3..c9c30a6a9 100644 --- a/src/containers/Dialogs/TaskDialog/containers/TaskFormFloatingActions.tsx +++ b/src/containers/Dialogs/TaskDialog/containers/TaskFormFloatingActions.tsx @@ -4,7 +4,6 @@ import { useFormikContext } from 'formik'; import { Intent, Button, Classes } from '@blueprintjs/core'; import { FormattedMessage as T } from 'components'; import { useTaskFormContext } from './TaskFormProvider'; - import withDialogActions from 'containers/Dialog/withDialogActions'; import { compose } from 'utils'; diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx b/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx index 1f3384dd0..ea9bf5be3 100644 --- a/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx +++ b/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx @@ -1,6 +1,5 @@ //@ts-nocheck import React from 'react'; - import { DialogContent } from 'components'; const TaskFormContext = React.createContext(); diff --git a/src/containers/Dialogs/TaskDialog/index.tsx b/src/containers/Dialogs/TaskDialog/index.tsx index cd21e0229..61dbbcbfd 100644 --- a/src/containers/Dialogs/TaskDialog/index.tsx +++ b/src/containers/Dialogs/TaskDialog/index.tsx @@ -11,7 +11,7 @@ const TaskDialogContent = React.lazy( /** * Task dialog. - * @returns + * @returns {ReactNode} */ function TaskDialog({ dialogName, payload: { taskId = null }, isOpen }) { return ( diff --git a/src/lang/en/index.json b/src/lang/en/index.json index 2a1315ea7..f13743593 100644 --- a/src/lang/en/index.json +++ b/src/lang/en/index.json @@ -2060,5 +2060,14 @@ "task.label.task_name": "Task Name", "task.label.estimated_hours": "Task Name", "task.label.charge": "Charge", - "task.label.estimated_amount": "Estimated Amount" + "task.label.estimated_amount": "Estimated Amount", + "project.schema.label.contact": "Contact", + "project.schema.label.project_name": "Project name", + "project.schema.label.deadline": "Deadline", + "project.schema.label.project_state": "Project state", + "project.schema.label.project_cost": "Project cost", + "task.schema.label.task_name": "Task name", + "task.schema.label.task_house": "Task house", + "task.schema.label.charge": "Charge", + "task.schema.label.amount": "Amount", } \ No newline at end of file diff --git a/src/style/pages/Projects/ProjectFormDialog.scss b/src/style/pages/Projects/ProjectFormDialog.scss deleted file mode 100644 index 31801f7ee..000000000 --- a/src/style/pages/Projects/ProjectFormDialog.scss +++ /dev/null @@ -1,20 +0,0 @@ -.dialog--project-form { - width: 650px; - - .bp3-dialog-body { - .bp3-form-group { - margin-bottom: 15px; - margin-top: 15px; - - label.bp3-label { - margin-bottom: 3px; - font-size: 13px; - } - } - - - } - .bp3-dialog-footer { - padding-top: 10px; - } -} From 23bb9c4cc33800cce37b16da77e6d155dc843769 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Sun, 12 Jun 2022 12:43:03 +0200 Subject: [PATCH 09/10] fix: rename project & task form dialog. --- src/components/DialogsContainer.js | 8 ++++---- .../containers/ProjectForm.schema.tsx | 0 .../containers/ProjectForm.tsx | 0 .../containers/ProjectFormContent.tsx | 0 .../containers/ProjectFormDialogContent.tsx} | 4 ++-- .../containers/ProjectFormFields.tsx | 0 .../containers/ProjectFormFloatingActions.tsx | 0 .../containers/ProjectFormProvider.tsx | 0 .../containers/ProjectFormDialog}/index.tsx | 14 +++++++------- .../{ => ProjectsLanding}/ProjectsActionsBar.tsx | 6 ++---- .../{ => ProjectsLanding}/ProjectsDataTable.tsx | 8 ++------ .../{ => ProjectsLanding}/ProjectsList.tsx | 2 +- .../ProjectsListProvider.tsx | 2 +- .../{ => ProjectsLanding}/ProjectsViewTabs.tsx | 2 +- .../ProjectsLanding}/components/index.tsx | 0 .../{ => ProjectsLanding}/withProjects.tsx | 2 +- .../withProjectsActions.tsx | 3 +-- .../containers/TaskForm.schema.tsx | 0 .../TaskFormDialog}/containers/TaskForm.tsx | 0 .../containers/TaskFormContent.tsx | 0 .../containers/TaskFormDialogContent.tsx} | 4 ++-- .../containers/TaskFormFields.tsx | 0 .../containers/TaskFormFloatingActions.tsx | 0 .../containers/TaskFormProvider.tsx | 0 .../containers/TaskFormDialog}/index.tsx | 16 ++++++++-------- src/lang/en/index.json | 2 +- src/routes/dashboard.js | 2 +- 27 files changed, 34 insertions(+), 41 deletions(-) rename src/containers/{Dialogs/ProjectDialog => Projects/containers/ProjectFormDialog}/containers/ProjectForm.schema.tsx (100%) rename src/containers/{Dialogs/ProjectDialog => Projects/containers/ProjectFormDialog}/containers/ProjectForm.tsx (100%) rename src/containers/{Dialogs/ProjectDialog => Projects/containers/ProjectFormDialog}/containers/ProjectFormContent.tsx (100%) rename src/containers/{Dialogs/ProjectDialog/containers/ProjectDialogContent.tsx => Projects/containers/ProjectFormDialog/containers/ProjectFormDialogContent.tsx} (80%) rename src/containers/{Dialogs/ProjectDialog => Projects/containers/ProjectFormDialog}/containers/ProjectFormFields.tsx (100%) rename src/containers/{Dialogs/ProjectDialog => Projects/containers/ProjectFormDialog}/containers/ProjectFormFloatingActions.tsx (100%) rename src/containers/{Dialogs/ProjectDialog => Projects/containers/ProjectFormDialog}/containers/ProjectFormProvider.tsx (100%) rename src/containers/{Dialogs/ProjectDialog => Projects/containers/ProjectFormDialog}/index.tsx (73%) rename src/containers/Projects/containers/{ => ProjectsLanding}/ProjectsActionsBar.tsx (95%) rename src/containers/Projects/containers/{ => ProjectsLanding}/ProjectsDataTable.tsx (95%) rename src/containers/Projects/containers/{ => ProjectsLanding}/ProjectsList.tsx (98%) rename src/containers/Projects/containers/{ => ProjectsLanding}/ProjectsListProvider.tsx (90%) rename src/containers/Projects/containers/{ => ProjectsLanding}/ProjectsViewTabs.tsx (98%) rename src/containers/Projects/{ => containers/ProjectsLanding}/components/index.tsx (100%) rename src/containers/Projects/containers/{ => ProjectsLanding}/withProjects.tsx (91%) rename src/containers/Projects/containers/{ => ProjectsLanding}/withProjectsActions.tsx (79%) rename src/containers/{Dialogs/TaskDialog => Projects/containers/TaskFormDialog}/containers/TaskForm.schema.tsx (100%) rename src/containers/{Dialogs/TaskDialog => Projects/containers/TaskFormDialog}/containers/TaskForm.tsx (100%) rename src/containers/{Dialogs/TaskDialog => Projects/containers/TaskFormDialog}/containers/TaskFormContent.tsx (100%) rename src/containers/{Dialogs/TaskDialog/containers/TaskDialogContent.tsx => Projects/containers/TaskFormDialog/containers/TaskFormDialogContent.tsx} (79%) rename src/containers/{Dialogs/TaskDialog => Projects/containers/TaskFormDialog}/containers/TaskFormFields.tsx (100%) rename src/containers/{Dialogs/TaskDialog => Projects/containers/TaskFormDialog}/containers/TaskFormFloatingActions.tsx (100%) rename src/containers/{Dialogs/TaskDialog => Projects/containers/TaskFormDialog}/containers/TaskFormProvider.tsx (100%) rename src/containers/{Dialogs/TaskDialog => Projects/containers/TaskFormDialog}/index.tsx (59%) diff --git a/src/components/DialogsContainer.js b/src/components/DialogsContainer.js index 4cad1a95a..8d1a0c56c 100644 --- a/src/components/DialogsContainer.js +++ b/src/components/DialogsContainer.js @@ -40,8 +40,8 @@ import BranchActivateDialog from '../containers/Dialogs/BranchActivateDialog'; import WarehouseActivateDialog from '../containers/Dialogs/WarehouseActivateDialog'; import CustomerOpeningBalanceDialog from '../containers/Dialogs/CustomerOpeningBalanceDialog'; import VendorOpeningBalanceDialog from '../containers/Dialogs/VendorOpeningBalanceDialog'; -import ProjectDialog from '../containers/Dialogs/ProjectDialog'; -import TaskDialog from '../containers/Dialogs/TaskDialog'; +import ProjectFormDialog from '../containers/Projects/containers/ProjectFormDialog'; +import TaskFormDialog from '../containers/Projects/containers/TaskFormDialog'; /** * Dialogs container. @@ -92,8 +92,8 @@ export default function DialogsContainer() { - - + +
); } diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.schema.tsx b/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectForm.schema.tsx similarity index 100% rename from src/containers/Dialogs/ProjectDialog/containers/ProjectForm.schema.tsx rename to src/containers/Projects/containers/ProjectFormDialog/containers/ProjectForm.schema.tsx diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectForm.tsx b/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectForm.tsx similarity index 100% rename from src/containers/Dialogs/ProjectDialog/containers/ProjectForm.tsx rename to src/containers/Projects/containers/ProjectFormDialog/containers/ProjectForm.tsx diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormContent.tsx b/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormContent.tsx similarity index 100% rename from src/containers/Dialogs/ProjectDialog/containers/ProjectFormContent.tsx rename to src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormContent.tsx diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectDialogContent.tsx b/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormDialogContent.tsx similarity index 80% rename from src/containers/Dialogs/ProjectDialog/containers/ProjectDialogContent.tsx rename to src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormDialogContent.tsx index 97397608d..63921866e 100644 --- a/src/containers/Dialogs/ProjectDialog/containers/ProjectDialogContent.tsx +++ b/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormDialogContent.tsx @@ -4,10 +4,10 @@ import { ProjectFormProvider } from './ProjectFormProvider'; import ProjectForm from './ProjectForm'; /** - * Project dialog content. + * Project form dialog content. * @returns {ReactNode} */ -export default function ProjectDialogContent({ +export default function ProjectFormDialogContent({ // #ownProps dialogName, project, diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFields.tsx b/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormFields.tsx similarity index 100% rename from src/containers/Dialogs/ProjectDialog/containers/ProjectFormFields.tsx rename to src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormFields.tsx diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormFloatingActions.tsx b/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormFloatingActions.tsx similarity index 100% rename from src/containers/Dialogs/ProjectDialog/containers/ProjectFormFloatingActions.tsx rename to src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormFloatingActions.tsx diff --git a/src/containers/Dialogs/ProjectDialog/containers/ProjectFormProvider.tsx b/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormProvider.tsx similarity index 100% rename from src/containers/Dialogs/ProjectDialog/containers/ProjectFormProvider.tsx rename to src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormProvider.tsx diff --git a/src/containers/Dialogs/ProjectDialog/index.tsx b/src/containers/Projects/containers/ProjectFormDialog/index.tsx similarity index 73% rename from src/containers/Dialogs/ProjectDialog/index.tsx rename to src/containers/Projects/containers/ProjectFormDialog/index.tsx index 0d777c323..371af527c 100644 --- a/src/containers/Dialogs/ProjectDialog/index.tsx +++ b/src/containers/Projects/containers/ProjectFormDialog/index.tsx @@ -5,16 +5,16 @@ import withDialogRedux from 'components/DialogReduxConnect'; import { compose } from 'utils'; const ProjectDialogContent = React.lazy( - () => import('./containers/ProjectDialogContent'), + () => import('./containers/ProjectFormDialogContent'), ); /** - * Project dialog. + * Project form dialog. * @returns */ -function ProjectDialog({ dialogName, payload: { projectId = null }, isOpen }) { +function ProjectFormDialog({ dialogName, payload: { projectId = null }, isOpen }) { return ( - } isOpen={isOpen} @@ -25,13 +25,13 @@ function ProjectDialog({ dialogName, payload: { projectId = null }, isOpen }) { - + ); } -export default compose(withDialogRedux())(ProjectDialog); +export default compose(withDialogRedux())(ProjectFormDialog); -const ProjectDialogRoot = styled(Dialog)` +const ProjectFormDialogRoot = styled(Dialog)` .bp3-dialog-body { .bp3-form-group { margin-bottom: 15px; diff --git a/src/containers/Projects/containers/ProjectsActionsBar.tsx b/src/containers/Projects/containers/ProjectsLanding/ProjectsActionsBar.tsx similarity index 95% rename from src/containers/Projects/containers/ProjectsActionsBar.tsx rename to src/containers/Projects/containers/ProjectsLanding/ProjectsActionsBar.tsx index d227a0aba..c1a9d2c12 100644 --- a/src/containers/Projects/containers/ProjectsActionsBar.tsx +++ b/src/containers/Projects/containers/ProjectsLanding/ProjectsActionsBar.tsx @@ -6,7 +6,6 @@ import { NavbarDivider, Alignment, } from '@blueprintjs/core'; - import { Icon, AdvancedFilterPopover, @@ -20,9 +19,8 @@ import DashboardActionsBar from 'components/Dashboard/DashboardActionsBar'; import withProjects from './withProjects'; import withProjectsActions from './withProjectsActions'; - -import withSettings from '../../Settings/withSettings'; -import withSettingsActions from '../../Settings/withSettingsActions'; +import withSettings from '../../../Settings/withSettings'; +import withSettingsActions from '../../../Settings/withSettingsActions'; import withDialogActions from 'containers/Dialog/withDialogActions'; import { compose } from 'utils'; diff --git a/src/containers/Projects/containers/ProjectsDataTable.tsx b/src/containers/Projects/containers/ProjectsLanding/ProjectsDataTable.tsx similarity index 95% rename from src/containers/Projects/containers/ProjectsDataTable.tsx rename to src/containers/Projects/containers/ProjectsLanding/ProjectsDataTable.tsx index 4b42a947b..ea14c783e 100644 --- a/src/containers/Projects/containers/ProjectsDataTable.tsx +++ b/src/containers/Projects/containers/ProjectsLanding/ProjectsDataTable.tsx @@ -1,18 +1,14 @@ import React from 'react'; - import { DataTable } from 'components'; import { TABLES } from 'common/tables'; - import TableSkeletonRows from 'components/Datatable/TableSkeletonRows'; import TableSkeletonHeader from 'components/Datatable/TableHeaderSkeleton'; - import { useProjectsListContext } from './ProjectsListProvider'; import { useMemorizedColumnsWidths } from 'hooks'; -import { useProjectsListColumns, ActionsMenu } from '../components'; - +import { useProjectsListColumns, ActionsMenu } from './components'; import withDialogActions from 'containers/Dialog/withDialogActions'; import withProjectsActions from './withProjectsActions'; -import withSettings from '../../Settings/withSettings'; +import withSettings from '../../../Settings/withSettings'; import { compose } from 'utils'; diff --git a/src/containers/Projects/containers/ProjectsList.tsx b/src/containers/Projects/containers/ProjectsLanding/ProjectsList.tsx similarity index 98% rename from src/containers/Projects/containers/ProjectsList.tsx rename to src/containers/Projects/containers/ProjectsLanding/ProjectsList.tsx index 4f1716c8a..77ad204b0 100644 --- a/src/containers/Projects/containers/ProjectsList.tsx +++ b/src/containers/Projects/containers/ProjectsLanding/ProjectsList.tsx @@ -13,7 +13,7 @@ import { compose, transformTableStateToQuery } from 'utils'; /** * Projects list. - * @returns {React.TSX} + * @returns */ function ProjectsList({ // #withProjects diff --git a/src/containers/Projects/containers/ProjectsListProvider.tsx b/src/containers/Projects/containers/ProjectsLanding/ProjectsListProvider.tsx similarity index 90% rename from src/containers/Projects/containers/ProjectsListProvider.tsx rename to src/containers/Projects/containers/ProjectsLanding/ProjectsListProvider.tsx index 4b2cc5412..a87f2d1f4 100644 --- a/src/containers/Projects/containers/ProjectsListProvider.tsx +++ b/src/containers/Projects/containers/ProjectsLanding/ProjectsListProvider.tsx @@ -1,7 +1,7 @@ //@ts-nocheck import React from 'react'; import { useResourceViews, useResourceMeta } from 'hooks/query'; -import DashboardInsider from '../../../components/Dashboard/DashboardInsider'; +import DashboardInsider from '../../../../components/Dashboard/DashboardInsider'; const ProjectsListContext = React.createContext(); diff --git a/src/containers/Projects/containers/ProjectsViewTabs.tsx b/src/containers/Projects/containers/ProjectsLanding/ProjectsViewTabs.tsx similarity index 98% rename from src/containers/Projects/containers/ProjectsViewTabs.tsx rename to src/containers/Projects/containers/ProjectsLanding/ProjectsViewTabs.tsx index 1a9f137bc..30b6e70dd 100644 --- a/src/containers/Projects/containers/ProjectsViewTabs.tsx +++ b/src/containers/Projects/containers/ProjectsLanding/ProjectsViewTabs.tsx @@ -12,7 +12,7 @@ import { compose, transfromViewsToTabs } from 'utils'; /** * Projects views tabs. - * @returns {React.TSX} + * @returns */ function ProjectsViewTabs({ // #withProjects diff --git a/src/containers/Projects/components/index.tsx b/src/containers/Projects/containers/ProjectsLanding/components/index.tsx similarity index 100% rename from src/containers/Projects/components/index.tsx rename to src/containers/Projects/containers/ProjectsLanding/components/index.tsx diff --git a/src/containers/Projects/containers/withProjects.tsx b/src/containers/Projects/containers/ProjectsLanding/withProjects.tsx similarity index 91% rename from src/containers/Projects/containers/withProjects.tsx rename to src/containers/Projects/containers/ProjectsLanding/withProjects.tsx index cf230357a..35b73c42f 100644 --- a/src/containers/Projects/containers/withProjects.tsx +++ b/src/containers/Projects/containers/ProjectsLanding/withProjects.tsx @@ -2,7 +2,7 @@ import { connect } from 'react-redux'; import { getProjectsTableStateFactory, isProjectsTableStateChangedFactory, -} from '../../../store/Project/projects.selectors'; +} from '../../../../store/Project/projects.selectors'; export default (mapState) => { const getProjectsTableState = getProjectsTableStateFactory(); diff --git a/src/containers/Projects/containers/withProjectsActions.tsx b/src/containers/Projects/containers/ProjectsLanding/withProjectsActions.tsx similarity index 79% rename from src/containers/Projects/containers/withProjectsActions.tsx rename to src/containers/Projects/containers/ProjectsLanding/withProjectsActions.tsx index de0a47f46..d74590f07 100644 --- a/src/containers/Projects/containers/withProjectsActions.tsx +++ b/src/containers/Projects/containers/ProjectsLanding/withProjectsActions.tsx @@ -1,10 +1,9 @@ import { connect } from 'react-redux'; -// import type { Dispatch } from 'redux'; import { setProjectsTableState, resetProjectsTableState, -} from '../../../store/Project/projects.actions'; +} from '../../../../store/Project/projects.actions'; const mapDispatchToProps = (dispatch) => ({ setProjectsTableState: (state) => dispatch(setProjectsTableState(state)), diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskForm.schema.tsx b/src/containers/Projects/containers/TaskFormDialog/containers/TaskForm.schema.tsx similarity index 100% rename from src/containers/Dialogs/TaskDialog/containers/TaskForm.schema.tsx rename to src/containers/Projects/containers/TaskFormDialog/containers/TaskForm.schema.tsx diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskForm.tsx b/src/containers/Projects/containers/TaskFormDialog/containers/TaskForm.tsx similarity index 100% rename from src/containers/Dialogs/TaskDialog/containers/TaskForm.tsx rename to src/containers/Projects/containers/TaskFormDialog/containers/TaskForm.tsx diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormContent.tsx b/src/containers/Projects/containers/TaskFormDialog/containers/TaskFormContent.tsx similarity index 100% rename from src/containers/Dialogs/TaskDialog/containers/TaskFormContent.tsx rename to src/containers/Projects/containers/TaskFormDialog/containers/TaskFormContent.tsx diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx b/src/containers/Projects/containers/TaskFormDialog/containers/TaskFormDialogContent.tsx similarity index 79% rename from src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx rename to src/containers/Projects/containers/TaskFormDialog/containers/TaskFormDialogContent.tsx index 79b721e02..441356e65 100644 --- a/src/containers/Dialogs/TaskDialog/containers/TaskDialogContent.tsx +++ b/src/containers/Projects/containers/TaskFormDialog/containers/TaskFormDialogContent.tsx @@ -3,9 +3,9 @@ import { TaskFormProvider } from './TaskFormProvider'; import TaskForm from './TaskForm'; /** - * Task dialog content. + * Task form dialog content. */ -export default function TaskDialogContent({ +export default function TaskFormDialogContent({ // #ownProps dialogName, task, diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx b/src/containers/Projects/containers/TaskFormDialog/containers/TaskFormFields.tsx similarity index 100% rename from src/containers/Dialogs/TaskDialog/containers/TaskFormFields.tsx rename to src/containers/Projects/containers/TaskFormDialog/containers/TaskFormFields.tsx diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormFloatingActions.tsx b/src/containers/Projects/containers/TaskFormDialog/containers/TaskFormFloatingActions.tsx similarity index 100% rename from src/containers/Dialogs/TaskDialog/containers/TaskFormFloatingActions.tsx rename to src/containers/Projects/containers/TaskFormDialog/containers/TaskFormFloatingActions.tsx diff --git a/src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx b/src/containers/Projects/containers/TaskFormDialog/containers/TaskFormProvider.tsx similarity index 100% rename from src/containers/Dialogs/TaskDialog/containers/TaskFormProvider.tsx rename to src/containers/Projects/containers/TaskFormDialog/containers/TaskFormProvider.tsx diff --git a/src/containers/Dialogs/TaskDialog/index.tsx b/src/containers/Projects/containers/TaskFormDialog/index.tsx similarity index 59% rename from src/containers/Dialogs/TaskDialog/index.tsx rename to src/containers/Projects/containers/TaskFormDialog/index.tsx index 61dbbcbfd..c22bae264 100644 --- a/src/containers/Dialogs/TaskDialog/index.tsx +++ b/src/containers/Projects/containers/TaskFormDialog/index.tsx @@ -5,15 +5,15 @@ import { Dialog, DialogSuspense, FormattedMessage as T } from 'components'; import withDialogRedux from 'components/DialogReduxConnect'; import { compose } from 'utils'; -const TaskDialogContent = React.lazy( - () => import('./containers/TaskDialogContent'), +const TaskFormDialogContent = React.lazy( + () => import('./containers/TaskFormDialogContent'), ); /** - * Task dialog. - * @returns {ReactNode} + * Task form dialog. + * @returns */ -function TaskDialog({ dialogName, payload: { taskId = null }, isOpen }) { +function TaskFormDialog({ dialogName, payload: { taskId = null }, isOpen }) { return ( - + ); } -export default compose(withDialogRedux())(TaskDialog); +export default compose(withDialogRedux())(TaskFormDialog); -const TaskDialogRoot = styled(Dialog)``; +const TaskFormDialogRoot = styled(Dialog)``; diff --git a/src/lang/en/index.json b/src/lang/en/index.json index f13743593..fea33284a 100644 --- a/src/lang/en/index.json +++ b/src/lang/en/index.json @@ -2069,5 +2069,5 @@ "task.schema.label.task_name": "Task name", "task.schema.label.task_house": "Task house", "task.schema.label.charge": "Charge", - "task.schema.label.amount": "Amount", + "task.schema.label.amount": "Amount" } \ No newline at end of file diff --git a/src/routes/dashboard.js b/src/routes/dashboard.js index a14713bc0..f5b5c2c12 100644 --- a/src/routes/dashboard.js +++ b/src/routes/dashboard.js @@ -972,7 +972,7 @@ export const getDashboardRoutes = () => [ { path: '/projects', component: lazy(() => - import('../containers/Projects/containers/ProjectsList'), + import('../containers/Projects/containers/ProjectsLanding/ProjectsList'), ), pageTitle: intl.get('sidebar.projects'), }, From bdadc5d795b0fc5ef424ac8b0542d18b7275d1f4 Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Sun, 12 Jun 2022 12:55:37 +0200 Subject: [PATCH 10/10] fix: remove the inner container. --- .../ProjectFormDialog/{containers => }/ProjectForm.schema.tsx | 0 .../ProjectFormDialog/{containers => }/ProjectForm.tsx | 0 .../ProjectFormDialog/{containers => }/ProjectFormContent.tsx | 0 .../{containers => }/ProjectFormDialogContent.tsx | 0 .../ProjectFormDialog/{containers => }/ProjectFormFields.tsx | 0 .../{containers => }/ProjectFormFloatingActions.tsx | 0 .../ProjectFormDialog/{containers => }/ProjectFormProvider.tsx | 0 src/containers/Projects/containers/ProjectFormDialog/index.tsx | 2 +- .../TaskFormDialog/{containers => }/TaskForm.schema.tsx | 0 .../containers/TaskFormDialog/{containers => }/TaskForm.tsx | 0 .../TaskFormDialog/{containers => }/TaskFormContent.tsx | 0 .../TaskFormDialog/{containers => }/TaskFormDialogContent.tsx | 0 .../TaskFormDialog/{containers => }/TaskFormFields.tsx | 0 .../TaskFormDialog/{containers => }/TaskFormFloatingActions.tsx | 0 .../TaskFormDialog/{containers => }/TaskFormProvider.tsx | 0 src/containers/Projects/containers/TaskFormDialog/index.tsx | 2 +- 16 files changed, 2 insertions(+), 2 deletions(-) rename src/containers/Projects/containers/ProjectFormDialog/{containers => }/ProjectForm.schema.tsx (100%) rename src/containers/Projects/containers/ProjectFormDialog/{containers => }/ProjectForm.tsx (100%) rename src/containers/Projects/containers/ProjectFormDialog/{containers => }/ProjectFormContent.tsx (100%) rename src/containers/Projects/containers/ProjectFormDialog/{containers => }/ProjectFormDialogContent.tsx (100%) rename src/containers/Projects/containers/ProjectFormDialog/{containers => }/ProjectFormFields.tsx (100%) rename src/containers/Projects/containers/ProjectFormDialog/{containers => }/ProjectFormFloatingActions.tsx (100%) rename src/containers/Projects/containers/ProjectFormDialog/{containers => }/ProjectFormProvider.tsx (100%) rename src/containers/Projects/containers/TaskFormDialog/{containers => }/TaskForm.schema.tsx (100%) rename src/containers/Projects/containers/TaskFormDialog/{containers => }/TaskForm.tsx (100%) rename src/containers/Projects/containers/TaskFormDialog/{containers => }/TaskFormContent.tsx (100%) rename src/containers/Projects/containers/TaskFormDialog/{containers => }/TaskFormDialogContent.tsx (100%) rename src/containers/Projects/containers/TaskFormDialog/{containers => }/TaskFormFields.tsx (100%) rename src/containers/Projects/containers/TaskFormDialog/{containers => }/TaskFormFloatingActions.tsx (100%) rename src/containers/Projects/containers/TaskFormDialog/{containers => }/TaskFormProvider.tsx (100%) diff --git a/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectForm.schema.tsx b/src/containers/Projects/containers/ProjectFormDialog/ProjectForm.schema.tsx similarity index 100% rename from src/containers/Projects/containers/ProjectFormDialog/containers/ProjectForm.schema.tsx rename to src/containers/Projects/containers/ProjectFormDialog/ProjectForm.schema.tsx diff --git a/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectForm.tsx b/src/containers/Projects/containers/ProjectFormDialog/ProjectForm.tsx similarity index 100% rename from src/containers/Projects/containers/ProjectFormDialog/containers/ProjectForm.tsx rename to src/containers/Projects/containers/ProjectFormDialog/ProjectForm.tsx diff --git a/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormContent.tsx b/src/containers/Projects/containers/ProjectFormDialog/ProjectFormContent.tsx similarity index 100% rename from src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormContent.tsx rename to src/containers/Projects/containers/ProjectFormDialog/ProjectFormContent.tsx diff --git a/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormDialogContent.tsx b/src/containers/Projects/containers/ProjectFormDialog/ProjectFormDialogContent.tsx similarity index 100% rename from src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormDialogContent.tsx rename to src/containers/Projects/containers/ProjectFormDialog/ProjectFormDialogContent.tsx diff --git a/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormFields.tsx b/src/containers/Projects/containers/ProjectFormDialog/ProjectFormFields.tsx similarity index 100% rename from src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormFields.tsx rename to src/containers/Projects/containers/ProjectFormDialog/ProjectFormFields.tsx diff --git a/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormFloatingActions.tsx b/src/containers/Projects/containers/ProjectFormDialog/ProjectFormFloatingActions.tsx similarity index 100% rename from src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormFloatingActions.tsx rename to src/containers/Projects/containers/ProjectFormDialog/ProjectFormFloatingActions.tsx diff --git a/src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormProvider.tsx b/src/containers/Projects/containers/ProjectFormDialog/ProjectFormProvider.tsx similarity index 100% rename from src/containers/Projects/containers/ProjectFormDialog/containers/ProjectFormProvider.tsx rename to src/containers/Projects/containers/ProjectFormDialog/ProjectFormProvider.tsx diff --git a/src/containers/Projects/containers/ProjectFormDialog/index.tsx b/src/containers/Projects/containers/ProjectFormDialog/index.tsx index 371af527c..c9d035d86 100644 --- a/src/containers/Projects/containers/ProjectFormDialog/index.tsx +++ b/src/containers/Projects/containers/ProjectFormDialog/index.tsx @@ -5,7 +5,7 @@ import withDialogRedux from 'components/DialogReduxConnect'; import { compose } from 'utils'; const ProjectDialogContent = React.lazy( - () => import('./containers/ProjectFormDialogContent'), + () => import('./ProjectFormDialogContent'), ); /** diff --git a/src/containers/Projects/containers/TaskFormDialog/containers/TaskForm.schema.tsx b/src/containers/Projects/containers/TaskFormDialog/TaskForm.schema.tsx similarity index 100% rename from src/containers/Projects/containers/TaskFormDialog/containers/TaskForm.schema.tsx rename to src/containers/Projects/containers/TaskFormDialog/TaskForm.schema.tsx diff --git a/src/containers/Projects/containers/TaskFormDialog/containers/TaskForm.tsx b/src/containers/Projects/containers/TaskFormDialog/TaskForm.tsx similarity index 100% rename from src/containers/Projects/containers/TaskFormDialog/containers/TaskForm.tsx rename to src/containers/Projects/containers/TaskFormDialog/TaskForm.tsx diff --git a/src/containers/Projects/containers/TaskFormDialog/containers/TaskFormContent.tsx b/src/containers/Projects/containers/TaskFormDialog/TaskFormContent.tsx similarity index 100% rename from src/containers/Projects/containers/TaskFormDialog/containers/TaskFormContent.tsx rename to src/containers/Projects/containers/TaskFormDialog/TaskFormContent.tsx diff --git a/src/containers/Projects/containers/TaskFormDialog/containers/TaskFormDialogContent.tsx b/src/containers/Projects/containers/TaskFormDialog/TaskFormDialogContent.tsx similarity index 100% rename from src/containers/Projects/containers/TaskFormDialog/containers/TaskFormDialogContent.tsx rename to src/containers/Projects/containers/TaskFormDialog/TaskFormDialogContent.tsx diff --git a/src/containers/Projects/containers/TaskFormDialog/containers/TaskFormFields.tsx b/src/containers/Projects/containers/TaskFormDialog/TaskFormFields.tsx similarity index 100% rename from src/containers/Projects/containers/TaskFormDialog/containers/TaskFormFields.tsx rename to src/containers/Projects/containers/TaskFormDialog/TaskFormFields.tsx diff --git a/src/containers/Projects/containers/TaskFormDialog/containers/TaskFormFloatingActions.tsx b/src/containers/Projects/containers/TaskFormDialog/TaskFormFloatingActions.tsx similarity index 100% rename from src/containers/Projects/containers/TaskFormDialog/containers/TaskFormFloatingActions.tsx rename to src/containers/Projects/containers/TaskFormDialog/TaskFormFloatingActions.tsx diff --git a/src/containers/Projects/containers/TaskFormDialog/containers/TaskFormProvider.tsx b/src/containers/Projects/containers/TaskFormDialog/TaskFormProvider.tsx similarity index 100% rename from src/containers/Projects/containers/TaskFormDialog/containers/TaskFormProvider.tsx rename to src/containers/Projects/containers/TaskFormDialog/TaskFormProvider.tsx diff --git a/src/containers/Projects/containers/TaskFormDialog/index.tsx b/src/containers/Projects/containers/TaskFormDialog/index.tsx index c22bae264..d57287c46 100644 --- a/src/containers/Projects/containers/TaskFormDialog/index.tsx +++ b/src/containers/Projects/containers/TaskFormDialog/index.tsx @@ -6,7 +6,7 @@ import withDialogRedux from 'components/DialogReduxConnect'; import { compose } from 'utils'; const TaskFormDialogContent = React.lazy( - () => import('./containers/TaskFormDialogContent'), + () => import('./TaskFormDialogContent'), ); /**