-
Matiss Janis Aboltins authoredMatiss Janis Aboltins authored
MonthsContext.tsx 1.18 KiB
// @ts-strict-ignore
import React, { createContext, type ReactNode } from 'react';
import * as monthUtils from 'loot-core/src/shared/months';
export type BoundsProps = {
start: string;
end: string;
};
export function getValidMonthBounds(
bounds: BoundsProps,
startMonth: undefined | string,
endMonth: string,
) {
return {
start: startMonth < bounds.start ? bounds.start : startMonth,
end: endMonth > bounds.end ? bounds.end : endMonth,
};
}
type MonthsContextProps = {
months: string[];
type: string;
};
export const MonthsContext = createContext<MonthsContextProps>(null);
type MonthsProviderProps = {
startMonth: string | undefined;
numMonths: number;
monthBounds: BoundsProps;
type: string;
children: ReactNode;
};
export function MonthsProvider({
startMonth,
numMonths,
monthBounds,
type,
children,
}: MonthsProviderProps) {
const endMonth = monthUtils.addMonths(startMonth, numMonths - 1);
const bounds = getValidMonthBounds(monthBounds, startMonth, endMonth);
const months = monthUtils.rangeInclusive(bounds.start, bounds.end);
return (
<MonthsContext.Provider value={{ months, type }}>
{children}
</MonthsContext.Provider>
);
}