import React, { memo, useCallback, useMemo } from 'react';
import {
Image,
ImageStyle,
Pressable,
StyleSheet,
useColorScheme,
View,
} from 'react-native';
import { useCalendarContext } from '../../calendar-context';
import { YEAR_PAGE_SIZE } from '../../utils';
import { ClassNames, Styles } from '../../types';
import { UI } from '../../ui';
import { isEqual } from 'lodash';
import { COLORS } from '../../theme';
const arrow_left = require('../../assets/images/arrow_left.png');
type PrevButtonProps = {
style?: Styles[UI.button_prev];
imageStyle?: Styles[UI.button_prev_image];
className?: ClassNames[UI.button_prev];
imageClassName?: ClassNames[UI.button_prev_image];
};
const PrevButton = ({
style,
imageStyle,
className,
imageClassName,
}: PrevButtonProps) => {
const {
currentYear,
calendarView,
onChangeMonth,
onChangeYear,
components = {},
isRTL,
} = useCalendarContext();
const colorScheme = useColorScheme();
const theme = colorScheme ?? 'light';
const defaultStyles = useMemo(() => createDefaultStyles(isRTL), [isRTL]);
const onPress = useCallback(() => {
switch (calendarView) {
case 'day':
return onChangeMonth(-1);
case 'month':
return onChangeYear(currentYear - 1);
case 'year':
return onChangeYear(currentYear - YEAR_PAGE_SIZE);
default:
return {};
}
}, [calendarView, currentYear, onChangeMonth, onChangeYear]);
const iconStyle: ImageStyle = useMemo(
() => ({
...defaultStyles.icon,
tintColor: COLORS[theme].foreground,
...(imageStyle as ImageStyle),
}),
[imageStyle, theme, defaultStyles.icon]
);
return (
{components.IconPrev || (
)}
);
};
const customComparator = (
prev: Readonly,
next: Readonly
) => {
const areEqual =
prev.className === next.className &&
isEqual(prev.style, next.style) &&
isEqual(prev.imageStyle, next.imageStyle) &&
isEqual(prev.imageClassName, next.imageClassName);
return areEqual;
};
export default memo(PrevButton, customComparator);
const createDefaultStyles = (isRTL: boolean) =>
StyleSheet.create({
iconContainer: {
padding: 4,
},
prev: {
marginRight: isRTL ? 0 : 3,
marginLeft: isRTL ? 3 : 0,
},
icon: {
width: 14,
height: 14,
transform: [{ rotate: isRTL ? '180deg' : '0deg' }],
},
});