foldbank-mock/web/app/components/Calendar.tsx
Ameya Shenoy 6a9ab237a5
feat: major mods
- added graph on dashboard
- added recent txns

Signed-off-by: Ameya Shenoy <shenoy.ameya@gmail.com>
2023-03-10 19:37:22 +05:30

89 lines
2.5 KiB
TypeScript

"use client"
import React from 'react'
import dayjs, { Dayjs } from 'dayjs';
import styles from './calendar.module.css'
import { CalendarPicker } from '@mui/x-date-pickers/CalendarPicker';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { createTheme, ThemeProvider } from '@mui/material/styles';
import { styled } from '@mui/material/styles';
import { PickersDay, PickersDayProps } from '@mui/x-date-pickers/PickersDay';
interface CustomPickerDayProps extends PickersDayProps<Dayjs> {
dayIsBetween: boolean;
isFirstDay: boolean;
isLastDay: boolean;
}
const CustomPickersDay = styled(PickersDay, {
shouldForwardProp: (prop) =>
prop !== 'dayIsBetween' && prop !== 'isFirstDay' && prop !== 'isLastDay',
})<CustomPickerDayProps>(({ theme, dayIsBetween, isFirstDay, isLastDay }) => ({
...(dayIsBetween && {
borderRadius: 0,
backgroundColor: theme.palette.primary.main,
color: theme.palette.common.white,
'&:hover, &:focus': {
backgroundColor: theme.palette.primary.dark,
},
}),
...(isFirstDay && {
borderTopLeftRadius: '50%',
borderBottomLeftRadius: '50%',
}),
...(isLastDay && {
borderTopRightRadius: '50%',
borderBottomRightRadius: '50%',
}),
})) as React.ComponentType<CustomPickerDayProps>;
export default function RecurringCol() {
const [value, setValue] = React.useState<Dayjs | null>(dayjs('2021-01-23'));
const theme = createTheme({
components: {
// Name of the component
MuiButtonBase: {
defaultProps: {
// The props to change the default for.
disableRipple: true, // No more ripple, on the whole application 💣!
},
},
},
});
const renderWeekPickerDay = (
date: Dayjs,
selectedDates: Array<Dayjs | null>,
pickersDayProps: PickersDayProps<Dayjs>,
) => {
if (!value) {
return <PickersDay {...pickersDayProps} />;
}
return (
<CustomPickersDay
{...pickersDayProps}
/>
);
};
return (
<div className={styles.calendarDiv}>
<LocalizationProvider dateAdapter={AdapterDayjs}>
<ThemeProvider theme={theme}>
<CalendarPicker
date={value}
onChange={(newDate) => setValue(newDate)}
showDaysOutsideCurrentMonth={true}
renderDay={renderWeekPickerDay}
/>
</ThemeProvider>
</LocalizationProvider>
</div>
)
}