mirror of
https://github.com/soconnor0919/beenvoice.git
synced 2026-02-05 00:06:36 -05:00
refactor: Remove env.example, optimize invoice calendar item selection with derived state, and enhance invoice form's default hourly rate initialization and save button loading state.
This commit is contained in:
@@ -52,9 +52,18 @@ export function InvoiceCalendarView({
|
||||
const [viewDate, setViewDate] = React.useState<Date>(new Date()); // Controls the view (month/week)
|
||||
const [view, setView] = React.useState<"month" | "week">("month");
|
||||
const [dialogOpen, setDialogOpen] = React.useState(false);
|
||||
const [selectedDateItems, setSelectedDateItems] = React.useState<{ item: InvoiceItem; index: number }[]>([]);
|
||||
// Derived state for selected date items - solves cursor jumping
|
||||
const selectedDateItems = React.useMemo(() => {
|
||||
if (!date) return [];
|
||||
return items
|
||||
.map((item, index) => ({ item, index }))
|
||||
.filter((wrapper) => {
|
||||
const itemDate = new Date(wrapper.item.date);
|
||||
return isSameDay(itemDate, date);
|
||||
});
|
||||
}, [items, date]);
|
||||
|
||||
// Function to get items for the selected date
|
||||
// Helper to get items for any date (for calendar view)
|
||||
const getItemsForDate = React.useCallback((targetDate: Date) => {
|
||||
return items
|
||||
.map((item, index) => ({ item, index }))
|
||||
@@ -69,18 +78,9 @@ export function InvoiceCalendarView({
|
||||
setDate(newDate);
|
||||
// Optionally update viewDate to match selection if desired, but user wants them decoupled during nav
|
||||
// setViewDate(newDate);
|
||||
const dateItems = getItemsForDate(newDate);
|
||||
setSelectedDateItems(dateItems);
|
||||
setDialogOpen(true);
|
||||
};
|
||||
|
||||
// refresh selected items when main items change
|
||||
React.useEffect(() => {
|
||||
if (date && dialogOpen) {
|
||||
setSelectedDateItems(getItemsForDate(date));
|
||||
}
|
||||
}, [items, date, dialogOpen, getItemsForDate]);
|
||||
|
||||
const handleAddNewItem = () => {
|
||||
if (date) {
|
||||
onAddItem(date);
|
||||
|
||||
Reference in New Issue
Block a user