From 1062b65b5b03693268a0c26a5e5603856a179b11 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Thu, 22 Aug 2024 01:03:03 +0200 Subject: [PATCH] feat: wip bank account transactions date filter --- .../AccountTransactionsDateFilter.tsx | 94 +++++++++++++++++++ .../AccountTransactionsUncategorizeFilter.tsx | 92 +++++------------- 2 files changed, 117 insertions(+), 69 deletions(-) create mode 100644 packages/webapp/src/containers/CashFlow/AccountTransactions/AccountTransactionsDateFilter.tsx diff --git a/packages/webapp/src/containers/CashFlow/AccountTransactions/AccountTransactionsDateFilter.tsx b/packages/webapp/src/containers/CashFlow/AccountTransactions/AccountTransactionsDateFilter.tsx new file mode 100644 index 000000000..6ce0e66dd --- /dev/null +++ b/packages/webapp/src/containers/CashFlow/AccountTransactions/AccountTransactionsDateFilter.tsx @@ -0,0 +1,94 @@ +// @ts-nocheck +import { Button, FormGroup, Intent, Position } from '@blueprintjs/core'; +import * as Yup from 'yup'; +import { Form, Formik, FormikConfig } from 'formik'; +import { FDateInput, FFormGroup, Group, Icon, Stack } from '@/components'; + +const defaultValues = { + fromDate: '', + toDate: '', +}; + +const validationSchema = Yup.object().shape({ + fromDate: Yup.date() + .nullable() + .required('From Date is required') + .max(Yup.ref('toDate'), 'From Date cannot be after To Date'), + toDate: Yup.date() + .nullable() + .required('To Date is required') + .min(Yup.ref('fromDate'), 'To Date cannot be before From Date'), +}); + +interface AccountTransactionsDateFilterFormValues { + fromDate: string; + toDate: string; +} + +interface UncategorizedTransactionsDateFilterProps { + initialValues?: AccountTransactionsDateFilterFormValues; + onSubmit?: FormikConfig['onSubmit']; +} + +export function AccountTransactionsDateFilterForm({ + initialValues = {}, + onSubmit, +}: UncategorizedTransactionsDateFilterProps) { + const handleSubmit = () => { + return onSubmit && onSubmit(...arguments); + }; + + const formInitialValues = { + ...defaultValues, + ...initialValues, + }; + + return ( + +
+ + + + date.toLocaleDateString()} + parseDate={(str) => new Date(str)} + inputProps={{ + fill: true, + leftElement: , + }} + style={{ marginBottom: 0 }} + /> + + + + date.toLocaleDateString()} + parseDate={(str) => new Date(str)} + inputProps={{ + fill: true, + leftElement: , + }} + style={{ marginBottom: 0 }} + /> + + + + + + + + +
+
+ ); +} diff --git a/packages/webapp/src/containers/CashFlow/AccountTransactions/AccountTransactionsUncategorizeFilter.tsx b/packages/webapp/src/containers/CashFlow/AccountTransactions/AccountTransactionsUncategorizeFilter.tsx index f2db7f6b6..3de1c7689 100644 --- a/packages/webapp/src/containers/CashFlow/AccountTransactions/AccountTransactionsUncategorizeFilter.tsx +++ b/packages/webapp/src/containers/CashFlow/AccountTransactions/AccountTransactionsUncategorizeFilter.tsx @@ -1,13 +1,13 @@ // @ts-nocheck import { useMemo } from 'react'; import * as R from 'ramda'; -import * as Yup from 'yup'; -import { Form, Formik } from 'formik'; import { useAppQueryString } from '@/hooks'; -import { FDateInput, FFormGroup, Group, Icon, Stack } from '@/components'; +import { Group, Icon } from '@/components'; import { useAccountTransactionsContext } from './AccountTransactionsProvider'; import { TagsControl } from '@/components/TagsControl'; -import { Button, FormGroup, Intent, Position } from '@blueprintjs/core'; +import { Button, Classes, Position } from '@blueprintjs/core'; +import { AccountTransactionsDateFilterForm } from './AccountTransactionsDateFilter'; +import { Popover2 } from '@blueprintjs/popover2'; export function AccountTransactionsUncategorizeFilter() { const { bankAccountMetaSummary } = useAccountTransactionsContext(); @@ -58,11 +58,20 @@ export function AccountTransactionsUncategorizeFilter() { return ( - + + + } + position={Position.RIGHT} + popoverClassName={Classes.POPOVER_CONTENT_SIZING} + > + + + { + const initialValues = {}; const handleSubmit = () => {}; return ( - -
- - - - date.toLocaleDateString()} - parseDate={(str) => new Date(str)} - inputProps={{ - fill: true, - leftElement: , - }} - style={{ marginBottom: 0 }} - /> - - - - date.toLocaleDateString()} - parseDate={(str) => new Date(str)} - inputProps={{ - fill: true, - leftElement: , - }} - style={{ marginBottom: 0 }} - /> - - - - - - - - -
-
+ /> ); -} +};