@actual-app/web 23.10.0 → 23.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/build/asset-manifest.json +15 -15
  2. package/build/index.html +1 -1
  3. package/build/kcab/{kcab.worker.b835d2cdcf8004c363da.js → kcab.worker.8a181a0b032adc34600e.js} +54 -54
  4. package/build/kcab/{kcab.worker.b835d2cdcf8004c363da.js.map → kcab.worker.8a181a0b032adc34600e.js.map} +1 -1
  5. package/build/static/js/312.9f087b98.chunk.js +2 -0
  6. package/build/static/js/312.9f087b98.chunk.js.map +1 -0
  7. package/build/static/js/{713.1731d555.chunk.js → 444.301f7ece.chunk.js} +2 -2
  8. package/build/static/js/444.301f7ece.chunk.js.map +1 -0
  9. package/build/static/js/848.aa73d5a0.chunk.js +19 -0
  10. package/build/static/js/848.aa73d5a0.chunk.js.map +1 -0
  11. package/build/static/js/main.fd0bdfe2.js +188 -0
  12. package/build/static/js/main.fd0bdfe2.js.map +1 -0
  13. package/build/static/js/narrow-components.9ae206be.chunk.js +2 -0
  14. package/build/static/js/narrow-components.9ae206be.chunk.js.map +1 -0
  15. package/build/static/js/reports.778a42ee.chunk.js +2 -0
  16. package/build/static/js/reports.778a42ee.chunk.js.map +1 -0
  17. package/build/static/js/wide-components.481c39ec.chunk.js +2 -0
  18. package/build/static/js/wide-components.481c39ec.chunk.js.map +1 -0
  19. package/package.json +3 -2
  20. package/build/static/js/389.c8f94185.chunk.js +0 -2
  21. package/build/static/js/389.c8f94185.chunk.js.map +0 -1
  22. package/build/static/js/678.bf349f5d.chunk.js +0 -2
  23. package/build/static/js/678.bf349f5d.chunk.js.map +0 -1
  24. package/build/static/js/713.1731d555.chunk.js.map +0 -1
  25. package/build/static/js/main.7e6eedd0.js +0 -188
  26. package/build/static/js/main.7e6eedd0.js.map +0 -1
  27. package/build/static/js/narrow-components.11cf3591.chunk.js +0 -2
  28. package/build/static/js/narrow-components.11cf3591.chunk.js.map +0 -1
  29. package/build/static/js/reports.39b7254a.chunk.js +0 -2
  30. package/build/static/js/reports.39b7254a.chunk.js.map +0 -1
  31. package/build/static/js/wide-components.fd8595f4.chunk.js +0 -2
  32. package/build/static/js/wide-components.fd8595f4.chunk.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/js/wide-components.481c39ec.chunk.js","mappings":"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","sources":["components/budget/BalanceWithCarryover.tsx","components/budget/rollover/CoverTooltip.tsx","components/budget/rollover/BalanceTooltip.tsx","components/budget/rollover/TransferTooltip.tsx","components/budget/util.ts","components/budget/MonthPicker.js","components/budget/BudgetPageHeader.js","components/budget/MonthsContext.tsx","components/budget/RenderMonths.tsx","icons/v2/CustomNotesPaper.tsx","util/markdown.ts","components/NotesButton.tsx","components/budget/SidebarCategory.js","components/budget/ExpenseCategory.js","components/budget/SidebarGroup.tsx","components/budget/ExpenseGroup.js","components/budget/IncomeCategory.js","components/budget/IncomeGroup.tsx","components/budget/IncomeHeader.tsx","components/budget/BudgetCategories.js","components/budget/BudgetSummaries.js","components/budget/BudgetTotals.js","components/budget/BudgetTable.js","components/budget/DynamicBudgetTable.js","icons/v2/ArrowButtonDown1.tsx","icons/v2/ArrowButtonUp1.tsx","components/common/HoverTarget.tsx","components/budget/report/ReportContext.tsx","components/budget/report/BudgetSummary.tsx","components/budget/report/components.tsx","components/budget/rollover/HoldTooltip.tsx","components/budget/rollover/RolloverContext.tsx","components/budget/rollover/BudgetSummary.tsx","components/budget/rollover/rollover-components.tsx","components/budget/index.js","components/schedules/index.tsx","components/gocardless/GoCardlessLink.js","icons/v0/LeftArrow2.tsx","icons/v1/ArrowDown.tsx","icons/v1/ArrowUp.tsx","icons/v2/Hyperlink2.tsx","components/transactions/TransactionsTable.js","components/transactions/TransactionList.js","icons/v2/ArrowsExpand3.tsx","icons/v2/ArrowsShrink3.tsx","icons/v2/DownloadThickBottom.tsx","icons/v2/Pencil1.tsx","components/common/MenuButton.tsx","components/transactions/SelectedTransactions.js","icons/v2/ArrowButtonRight1.tsx","components/accounts/Balance.js","components/accounts/Reconcile.js","components/accounts/Header.js","components/accounts/Account.js","../../loot-core/src/shared/categories.ts"],"sourcesContent":["import React, { type ComponentProps } from 'react';\n\nimport ArrowThinRight from '../../icons/v1/ArrowThinRight';\nimport { type CSSProperties } from '../../style';\nimport View from '../common/View';\nimport CellValue from '../spreadsheet/CellValue';\nimport useSheetValue from '../spreadsheet/useSheetValue';\n\nimport { makeAmountStyle } from './util';\n\ntype BalanceWithCarryoverProps = {\n carryover: ComponentProps<typeof CellValue>['binding'];\n balance: ComponentProps<typeof CellValue>['binding'];\n disabled?: boolean;\n style?: CSSProperties;\n balanceStyle?: CSSProperties;\n carryoverStyle?: CSSProperties;\n};\nexport default function BalanceWithCarryover({\n carryover,\n balance,\n disabled,\n style,\n balanceStyle,\n carryoverStyle,\n}: BalanceWithCarryoverProps) {\n let carryoverValue = useSheetValue(carryover);\n let balanceValue = useSheetValue(balance);\n\n return (\n <View style={style}>\n <CellValue\n binding={balance}\n type=\"financial\"\n getStyle={makeAmountStyle}\n style={{\n textAlign: 'right',\n ...(!disabled && {\n cursor: 'pointer',\n ':hover': { textDecoration: 'underline' },\n }),\n ...balanceStyle,\n }}\n />\n {carryoverValue && (\n <View\n style={{\n alignSelf: 'center',\n marginLeft: 2,\n position: 'absolute',\n right: -8,\n top: 0,\n bottom: 0,\n justifyContent: 'center',\n ...carryoverStyle,\n }}\n >\n <ArrowThinRight\n width={7}\n height={7}\n style={makeAmountStyle(balanceValue)}\n />\n </View>\n )}\n </View>\n );\n}\n","import React, { type ComponentProps, useState } from 'react';\n\nimport useCategories from '../../../hooks/useCategories';\nimport CategoryAutocomplete from '../../autocomplete/CategoryAutocomplete';\nimport Button from '../../common/Button';\nimport InitialFocus from '../../common/InitialFocus';\nimport View from '../../common/View';\nimport { Tooltip } from '../../tooltips';\nimport { addToBeBudgetedGroup } from '../util';\n\ntype CoverTooltipProps = {\n tooltipProps?: ComponentProps<typeof Tooltip>;\n onSubmit: (category: unknown) => void;\n onClose: () => void;\n};\nexport default function CoverTooltip({\n tooltipProps,\n onSubmit,\n onClose,\n}: CoverTooltipProps) {\n let { grouped: categoryGroups } = useCategories();\n categoryGroups = addToBeBudgetedGroup(\n categoryGroups.filter(g => !g.is_income),\n );\n let [category, setCategory] = useState(null);\n\n function submit() {\n if (category) {\n onSubmit(category);\n onClose();\n }\n }\n\n return (\n <Tooltip\n position=\"bottom-right\"\n width={200}\n style={{ padding: 10 }}\n {...tooltipProps}\n onClose={onClose}\n >\n <View style={{ marginBottom: 5 }}>Cover from category:</View>\n\n <InitialFocus>\n {node => (\n <CategoryAutocomplete\n categoryGroups={categoryGroups}\n value={null}\n openOnFocus={true}\n onUpdate={id => {}}\n onSelect={id => setCategory(id)}\n inputProps={{\n inputRef: node,\n onKeyDown: e => {\n if (e.key === 'Enter') {\n submit();\n }\n },\n }}\n />\n )}\n </InitialFocus>\n\n <View\n style={{\n alignItems: 'flex-end',\n marginTop: 10,\n }}\n >\n <Button\n type=\"primary\"\n style={{\n fontSize: 12,\n paddingTop: 3,\n }}\n onClick={submit}\n >\n Transfer\n </Button>\n </View>\n </Tooltip>\n );\n}\n","import React, { useState } from 'react';\n\nimport { rolloverBudget } from 'loot-core/src/client/queries';\n\nimport Menu from '../../common/Menu';\nimport useSheetValue from '../../spreadsheet/useSheetValue';\nimport { Tooltip } from '../../tooltips';\n\nimport CoverTooltip from './CoverTooltip';\nimport TransferTooltip from './TransferTooltip';\n\ntype BalanceTooltipProps = {\n categoryId: string;\n tooltip: { close: () => void };\n monthIndex: number;\n onBudgetAction: (idx: number, action: string, arg?: unknown) => void;\n onClose?: () => void;\n};\nexport default function BalanceTooltip({\n categoryId,\n tooltip,\n monthIndex,\n onBudgetAction,\n onClose,\n ...tooltipProps\n}: BalanceTooltipProps) {\n let carryover = useSheetValue(rolloverBudget.catCarryover(categoryId));\n let balance = useSheetValue(rolloverBudget.catBalance(categoryId));\n let [menu, setMenu] = useState('menu');\n\n let _onClose = () => {\n tooltip.close();\n onClose?.();\n };\n\n return (\n <>\n {menu === 'menu' && (\n <Tooltip\n position=\"bottom-right\"\n width={200}\n style={{ padding: 0 }}\n onClose={_onClose}\n {...tooltipProps}\n >\n <Menu\n onMenuSelect={type => {\n if (type === 'carryover') {\n onBudgetAction(monthIndex, 'carryover', {\n category: categoryId,\n flag: !carryover,\n });\n _onClose();\n } else {\n setMenu(type);\n }\n }}\n items={[\n {\n name: 'transfer',\n text: 'Transfer to another category',\n },\n {\n name: 'carryover',\n text: carryover\n ? 'Remove overspending rollover'\n : 'Rollover overspending',\n },\n balance < 0 && {\n name: 'cover',\n text: 'Cover overspending',\n },\n ].filter(x => x)}\n />\n </Tooltip>\n )}\n\n {menu === 'transfer' && (\n <TransferTooltip\n initialAmountName={rolloverBudget.catBalance(categoryId)}\n showToBeBudgeted={true}\n onClose={_onClose}\n onSubmit={(amount, toCategory) => {\n onBudgetAction(monthIndex, 'transfer-category', {\n amount,\n from: categoryId,\n to: toCategory,\n });\n }}\n />\n )}\n\n {menu === 'cover' && (\n <CoverTooltip\n onClose={_onClose}\n onSubmit={fromCategory => {\n onBudgetAction(monthIndex, 'cover', {\n to: categoryId,\n from: fromCategory,\n });\n }}\n />\n )}\n </>\n );\n}\n","import React, {\n useState,\n useContext,\n useEffect,\n type ComponentProps,\n} from 'react';\n\nimport { useSpreadsheet } from 'loot-core/src/client/SpreadsheetProvider';\nimport evalArithmetic from 'loot-core/src/shared/arithmetic';\nimport { integerToCurrency, amountToInteger } from 'loot-core/src/shared/util';\n\nimport useCategories from '../../../hooks/useCategories';\nimport CategoryAutocomplete from '../../autocomplete/CategoryAutocomplete';\nimport Button from '../../common/Button';\nimport InitialFocus from '../../common/InitialFocus';\nimport Input from '../../common/Input';\nimport View from '../../common/View';\nimport NamespaceContext from '../../spreadsheet/NamespaceContext';\nimport { Tooltip } from '../../tooltips';\nimport { addToBeBudgetedGroup } from '../util';\n\ntype TransferTooltipProps = {\n initialAmount?: number;\n initialAmountName?: string;\n showToBeBudgeted?: boolean;\n tooltipProps?: ComponentProps<typeof Tooltip>;\n onSubmit: (amount: number, category: unknown) => void;\n onClose: () => void;\n};\nexport default function TransferTooltip({\n initialAmount,\n initialAmountName,\n showToBeBudgeted,\n tooltipProps,\n onSubmit,\n onClose,\n}: TransferTooltipProps) {\n let spreadsheet = useSpreadsheet();\n let sheetName = useContext(NamespaceContext);\n let { grouped: categoryGroups } = useCategories();\n\n categoryGroups = categoryGroups.filter(g => !g.is_income);\n if (showToBeBudgeted) {\n categoryGroups = addToBeBudgetedGroup(categoryGroups);\n }\n\n let [amount, setAmount] = useState(null);\n let [category, setCategory] = useState(null);\n\n useEffect(() => {\n (async () => {\n if (initialAmountName) {\n const node = await spreadsheet.get(sheetName, initialAmountName);\n setAmount(integerToCurrency(Math.max(node.value, 0)));\n } else {\n setAmount(integerToCurrency(Math.max(initialAmount, 0)));\n }\n })();\n }, []);\n\n function submit() {\n let parsedAmount = evalArithmetic(amount, null);\n if (parsedAmount && category) {\n onSubmit(amountToInteger(parsedAmount), category);\n onClose();\n }\n }\n\n if (amount === null) {\n // Don't render anything until we have the amount to show. This\n // ensures that the amount field is focused and fully selected\n // when it's initially rendered (instead of being updated\n // afterwards and losing selection)\n return null;\n }\n\n return (\n <Tooltip\n position=\"bottom-right\"\n width={200}\n style={{ padding: 10 }}\n {...tooltipProps}\n onClose={onClose}\n >\n <View style={{ marginBottom: 5 }}>Transfer this amount:</View>\n <View>\n <InitialFocus>\n <Input\n value={amount}\n onChange={e => setAmount(e.target['value'])}\n onEnter={submit}\n />\n </InitialFocus>\n </View>\n <View style={{ margin: '10px 0 5px 0' }}>To:</View>\n\n <CategoryAutocomplete\n categoryGroups={categoryGroups}\n value={null}\n openOnFocus={true}\n onUpdate={id => {}}\n onSelect={id => setCategory(id)}\n inputProps={{ onEnter: submit, placeholder: '(none)' }}\n />\n\n <View\n style={{\n alignItems: 'flex-end',\n marginTop: 10,\n }}\n >\n <Button\n type=\"primary\"\n style={{\n fontSize: 12,\n paddingTop: 3,\n paddingBottom: 3,\n }}\n onClick={submit}\n >\n Transfer\n </Button>\n </View>\n </Tooltip>\n );\n}\n","import { type CategoryGroupEntity } from 'loot-core/src/types/models';\n\nimport { styles, theme } from '../../style';\nimport { type DropPosition } from '../sort';\n\nexport function addToBeBudgetedGroup(groups: CategoryGroupEntity[]) {\n return [\n {\n id: 'to-be-budgeted',\n name: 'To Be Budgeted',\n categories: [\n {\n id: 'to-be-budgeted',\n name: 'To Be Budgeted',\n cat_group: 'to-be-budgeted',\n group: {\n id: 'to-be-budgeted',\n name: 'To Be Budgeted',\n },\n },\n ],\n },\n ...groups,\n ];\n}\n\nexport function separateGroups(categoryGroups: CategoryGroupEntity[]) {\n return [\n categoryGroups.filter(g => !g.is_income),\n categoryGroups.find(g => g.is_income),\n ];\n}\n\nexport function makeAmountGrey(value: number | string) {\n return value === 0 || value === '0' || value === '' || value == null\n ? { color: theme.altMenuItemText }\n : null;\n}\n\nexport function makeAmountStyle(value: number) {\n const greyed = makeAmountGrey(value);\n if (greyed) {\n return greyed;\n }\n\n if (value < 0) {\n return { color: theme.errorText };\n }\n}\n\nexport function makeAmountFullStyle(value: number) {\n return {\n color:\n value < 0\n ? theme.errorText\n : value === 0\n ? theme.altMenuItemText\n : theme.noticeText,\n };\n}\n\nexport function findSortDown(\n arr: CategoryGroupEntity[],\n pos: DropPosition,\n targetId: string,\n) {\n if (pos === 'top') {\n return { targetId };\n } else {\n let idx = arr.findIndex(item => item.id === targetId);\n\n if (idx === -1) {\n throw new Error('findSort: item not found: ' + targetId);\n }\n\n let newIdx = idx + 1;\n if (newIdx < arr.length - 1) {\n return { targetId: arr[newIdx].id };\n } else {\n // Move to the end\n return { targetId: null };\n }\n }\n}\n\nexport function findSortUp(\n arr: CategoryGroupEntity[],\n pos: DropPosition,\n targetId: string,\n) {\n if (pos === 'bottom') {\n return { targetId };\n } else {\n let idx = arr.findIndex(item => item.id === targetId);\n\n if (idx === -1) {\n throw new Error('findSort: item not found: ' + targetId);\n }\n\n let newIdx = idx - 1;\n if (newIdx >= 0) {\n return { targetId: arr[newIdx].id };\n } else {\n // Move to the beginning\n return { targetId: null };\n }\n }\n}\n\nexport function getScrollbarWidth() {\n return Math.max(styles.scrollbarWidth - 2, 0);\n}\n","import { useState } from 'react';\n\nimport * as monthUtils from 'loot-core/src/shared/months';\n\nimport useResizeObserver from '../../hooks/useResizeObserver';\nimport { styles, theme } from '../../style';\nimport View from '../common/View';\n\nexport const MonthPicker = ({\n startMonth,\n numDisplayed,\n monthBounds,\n style,\n onSelect,\n}) => {\n const [hoverId, setHoverId] = useState(null);\n const [targetMonthCount, setTargetMonthCount] = useState(12);\n\n const currentMonth = monthUtils.currentMonth();\n const firstSelectedMonth = startMonth;\n\n const lastSelectedMonth = monthUtils.addMonths(\n firstSelectedMonth,\n numDisplayed - 1,\n );\n\n const range = monthUtils.rangeInclusive(\n monthUtils.subMonths(\n firstSelectedMonth,\n targetMonthCount / 2 - numDisplayed / 2,\n ),\n monthUtils.addMonths(\n lastSelectedMonth,\n targetMonthCount / 2 - numDisplayed / 2,\n ),\n );\n\n const firstSelectedIndex =\n Math.floor(range.length / 2) - Math.floor(numDisplayed / 2);\n const lastSelectedIndex = firstSelectedIndex + numDisplayed - 1;\n\n const [size, setSize] = useState('small');\n const containerRef = useResizeObserver(rect => {\n setSize(rect.width <= 400 ? 'small' : 'big');\n setTargetMonthCount(\n Math.min(Math.max(Math.floor(rect.width / 50), 12), 24),\n );\n });\n\n let yearHeadersShown = [];\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n ...style,\n }}\n >\n <View\n innerRef={containerRef}\n style={{\n flexDirection: 'row',\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {range.map((month, idx) => {\n const monthName = monthUtils.format(month, 'MMM');\n const selected =\n idx >= firstSelectedIndex && idx <= lastSelectedIndex;\n\n const lastHoverId = hoverId + numDisplayed - 1;\n const hovered =\n hoverId === null ? false : idx >= hoverId && idx <= lastHoverId;\n\n const current = currentMonth === month;\n const year = monthUtils.getYear(month);\n\n let showYearHeader = false;\n\n if (!yearHeadersShown.includes(year)) {\n yearHeadersShown.push(year);\n showYearHeader = true;\n }\n\n const isMonthBudgeted =\n month >= monthBounds.start && month <= monthBounds.end;\n\n return (\n <View\n key={month}\n style={{\n padding: '3px 3px',\n width: size === 'big' ? '35px' : '20px',\n textAlign: 'center',\n userSelect: 'none',\n cursor: 'default',\n borderRadius: 2,\n border: 'none',\n ...(!isMonthBudgeted && {\n textDecoration: 'line-through',\n color: theme.pageTextSubdued,\n }),\n ...styles.smallText,\n ...(selected && {\n backgroundColor: theme.tableBorderHover,\n color: theme.buttonPrimaryText,\n }),\n ...((hovered || selected) && {\n borderRadius: 0,\n cursor: 'pointer',\n }),\n ...(hovered &&\n !selected && {\n backgroundColor: 'rgba(100, 100, 100, .15)',\n }),\n ...(hovered &&\n selected && {\n backgroundColor: theme.tableBorderHover,\n }),\n ...((idx === firstSelectedIndex ||\n (idx === hoverId && !selected)) && {\n borderTopLeftRadius: 2,\n borderBottomLeftRadius: 2,\n }),\n ...((idx === lastSelectedIndex ||\n (idx === lastHoverId && !selected)) && {\n borderTopRightRadius: 2,\n borderBottomRightRadius: 2,\n }),\n ...(current && { fontWeight: 'bold' }),\n }}\n onClick={() => onSelect(month)}\n onMouseEnter={() => setHoverId(idx)}\n onMouseLeave={() => setHoverId(null)}\n >\n {size === 'small' ? monthName[0] : monthName}\n {showYearHeader && (\n <View\n style={{\n position: 'absolute',\n top: -14,\n left: 0,\n fontSize: 10,\n fontWeight: 'bold',\n color: isMonthBudgeted\n ? theme.pageText\n : theme.pageTextSubdued,\n }}\n >\n {year}\n </View>\n )}\n </View>\n );\n })}\n </View>\n </View>\n );\n};\n","import React, { memo } from 'react';\n\nimport * as monthUtils from 'loot-core/src/shared/months';\n\nimport View from '../common/View';\n\nimport { MonthPicker } from './MonthPicker';\nimport { getScrollbarWidth } from './util';\n\nconst BudgetPageHeader = memo(\n ({ startMonth, onMonthSelect, numMonths, monthBounds, style }) => {\n function getValidMonth(month) {\n let start = monthBounds.start;\n let end = monthUtils.subMonths(monthBounds.end, numMonths - 1);\n\n if (month < start) {\n return start;\n } else if (month > end) {\n return end;\n }\n return month;\n }\n\n return (\n <View style={{ marginLeft: 200 + 5, flexShrink: 0 }}>\n <View style={{ marginRight: 5 + getScrollbarWidth() }}>\n <MonthPicker\n startMonth={startMonth}\n numDisplayed={numMonths}\n monthBounds={monthBounds}\n style={{ paddingTop: 5 }}\n onSelect={month => onMonthSelect(getValidMonth(month))}\n />\n </View>\n </View>\n );\n },\n);\n\nexport default BudgetPageHeader;\n","import React, { createContext, type ReactNode } from 'react';\n\nimport * as monthUtils from 'loot-core/src/shared/months';\n\ntype BoundsProps = {\n start: string;\n end: string;\n};\n\nexport function getValidMonthBounds(\n bounds: BoundsProps,\n startMonth: undefined | string,\n endMonth: string,\n) {\n return {\n start: startMonth < bounds.start ? bounds.start : startMonth,\n end: endMonth > bounds.end ? bounds.end : endMonth,\n };\n}\n\ntype MonthsContextProps = {\n months: string[];\n type: string;\n};\n\nexport let MonthsContext = createContext<MonthsContextProps>(null);\n\ntype MonthsProviderProps = {\n startMonth: string | undefined;\n numMonths: number;\n monthBounds: BoundsProps;\n type: string;\n children: ReactNode;\n};\n\nexport function MonthsProvider({\n startMonth,\n numMonths,\n monthBounds,\n type,\n children,\n}: MonthsProviderProps) {\n let endMonth = monthUtils.addMonths(startMonth, numMonths - 1);\n let bounds = getValidMonthBounds(monthBounds, startMonth, endMonth);\n let months = monthUtils.rangeInclusive(bounds.start, bounds.end);\n\n return (\n <MonthsContext.Provider value={{ months, type }}>\n {children}\n </MonthsContext.Provider>\n );\n}\n","import React, {\n useContext,\n type CSSProperties,\n type ComponentType,\n} from 'react';\n\nimport * as monthUtils from 'loot-core/src/shared/months';\n\nimport { theme } from '../../style';\nimport View from '../common/View';\nimport NamespaceContext from '../spreadsheet/NamespaceContext';\n\nimport { MonthsContext } from './MonthsContext';\n\ntype RenderMonthsProps = {\n component?: ComponentType<{ monthIndex: number; editing: boolean }>;\n editingIndex?: undefined;\n args?: object;\n style?: CSSProperties;\n};\n\nfunction RenderMonths({\n component: Component,\n editingIndex,\n args,\n style,\n}: RenderMonthsProps) {\n let { months } = useContext(MonthsContext);\n\n return months.map((month, index) => {\n let editing = editingIndex === index;\n\n return (\n <NamespaceContext.Provider\n key={index}\n value={monthUtils.sheetForMonth(month)}\n >\n <View\n style={{\n flex: 1,\n borderLeft: '1px solid ' + theme.tableBorder,\n ...style,\n }}\n >\n <Component monthIndex={index} editing={editing} {...args} />\n </View>\n </NamespaceContext.Provider>\n );\n }) as unknown as JSX.Element;\n}\n\nexport default RenderMonths;\n","import * as React from 'react';\nimport type { SVGProps } from 'react';\nconst SvgCustomNotesPaper = (props: SVGProps<SVGSVGElement>) => (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 19 24\"\n style={{\n color: 'inherit',\n ...props.style,\n }}\n >\n <path\n fill=\"currentColor\"\n d=\"M17 24H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h9a1 1 0 0 1 .707.293l7 7A1 1 0 0 1 19 8v14a2 2 0 0 1-2 2ZM2 21.5a.5.5 0 0 0 .5.5h14a.5.5 0 0 0 .5-.5V9a.5.5 0 0 0-.5-.5h-4a2 2 0 0 1-2-2v-4A.5.5 0 0 0 10 2H2.5a.5.5 0 0 0-.5.5v19Z\"\n />\n </svg>\n);\nexport default SvgCustomNotesPaper;\n","import { newlineToBreak } from 'mdast-util-newline-to-break';\n\nexport function sequentialNewlinesPlugin() {\n // Adapted from https://codesandbox.io/s/create-react-app-forked-h3rmcy?file=/src/sequentialNewlinePlugin.js:0-774\n const data = this.data();\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n function add(field: string, value: any) {\n const list = data[field] ? data[field] : (data[field] = []);\n\n list.push(value);\n }\n\n add('fromMarkdownExtensions', {\n enter: {\n lineEndingBlank: function enterLineEndingBlank(token: unknown) {\n this.enter(\n {\n type: 'break',\n value: '',\n data: {},\n children: [],\n },\n token,\n );\n },\n },\n exit: {\n lineEndingBlank: function exitLineEndingBlank(token: unknown) {\n this.exit(token);\n },\n },\n });\n}\n\nexport function remarkBreaks() {\n return newlineToBreak;\n}\n","import React, { createRef, useState, useEffect } from 'react';\nimport ReactMarkdown from 'react-markdown';\n\nimport { css } from 'glamor';\nimport remarkGfm from 'remark-gfm';\n\nimport q from 'loot-core/src/client/query-helpers';\nimport { useLiveQuery } from 'loot-core/src/client/query-hooks';\nimport { send } from 'loot-core/src/platform/client/fetch';\n\nimport CustomNotesPaper from '../icons/v2/CustomNotesPaper';\nimport { type CSSProperties, theme } from '../style';\nimport { remarkBreaks, sequentialNewlinesPlugin } from '../util/markdown';\n\nimport Button from './common/Button';\nimport Text from './common/Text';\nimport View from './common/View';\nimport { Tooltip, useTooltip } from './tooltips';\n\nconst remarkPlugins = [sequentialNewlinesPlugin, remarkGfm, remarkBreaks];\n\nconst markdownStyles = css({\n display: 'block',\n maxWidth: 350,\n padding: 8,\n overflowWrap: 'break-word',\n '& p': {\n margin: 0,\n ':not(:first-child)': {\n marginTop: '0.25rem',\n },\n },\n '& ul, & ol': {\n listStylePosition: 'inside',\n margin: 0,\n paddingLeft: 0,\n },\n '&>* ul, &>* ol': {\n marginLeft: '1.5rem',\n },\n '& li>p': {\n display: 'contents',\n },\n '& blockquote': {\n paddingLeft: '0.75rem',\n borderLeft: '3px solid ' + theme.markdownDark,\n margin: 0,\n },\n '& hr': {\n borderTop: 'none',\n borderLeft: 'none',\n borderRight: 'none',\n borderBottom: '1px solid ' + theme.markdownNormal,\n },\n '& code': {\n backgroundColor: theme.markdownLight,\n padding: '0.1rem 0.5rem',\n borderRadius: '0.25rem',\n },\n '& pre': {\n padding: '0.5rem',\n backgroundColor: theme.markdownLight,\n borderRadius: '0.5rem',\n margin: 0,\n ':not(:first-child)': {\n marginTop: '0.25rem',\n },\n '& code': {\n background: 'inherit',\n padding: 0,\n borderRadius: 0,\n },\n },\n '& table, & th, & td': {\n border: '1px solid ' + theme.markdownNormal,\n },\n '& table': {\n borderCollapse: 'collapse',\n wordBreak: 'break-word',\n },\n '& td': {\n padding: '0.25rem 0.75rem',\n },\n});\n\ntype NotesTooltipProps = {\n editable?: boolean;\n defaultNotes?: string;\n position?: string;\n onClose?: (notes: string) => void;\n};\nfunction NotesTooltip({\n editable,\n defaultNotes,\n position = 'bottom-left',\n onClose,\n}: NotesTooltipProps) {\n let [notes, setNotes] = useState<string>(defaultNotes);\n let inputRef = createRef<HTMLTextAreaElement>();\n\n useEffect(() => {\n if (editable) {\n inputRef.current.focus();\n }\n }, [inputRef, editable]);\n\n return (\n <Tooltip position={position} onClose={() => onClose(notes)}>\n {editable ? (\n <textarea\n ref={inputRef}\n className={`${css({\n border: '1px solid ' + theme.buttonNormalBorder,\n padding: 7,\n minWidth: 350,\n minHeight: 120,\n outline: 'none',\n })}`}\n value={notes || ''}\n onChange={e => setNotes(e.target.value)}\n placeholder=\"Notes (markdown supported)\"\n />\n ) : (\n <Text {...markdownStyles}>\n <ReactMarkdown\n remarkPlugins={remarkPlugins}\n linkTarget=\"_blank\"\n children={notes}\n />\n </Text>\n )}\n </Tooltip>\n );\n}\n\ntype NotesButtonProps = {\n id: string;\n width?: number;\n height?: number;\n defaultColor?: string;\n tooltipPosition?: string;\n style?: CSSProperties;\n};\nexport default function NotesButton({\n id,\n width = 12,\n height = 12,\n defaultColor = theme.pageBackgroundModalActive,\n tooltipPosition,\n style,\n}: NotesButtonProps) {\n let [hover, setHover] = useState(false);\n let tooltip = useTooltip();\n let data = useLiveQuery(() => q('notes').filter({ id }).select('*'), [id]);\n let note = data && data.length > 0 ? data[0].note : null;\n let hasNotes = note && note !== '';\n\n function onClose(notes) {\n send('notes-save', { id, note: notes });\n tooltip.close();\n }\n\n const [delayHandler, setDelayHandler] = useState(null);\n\n const handleMouseEnter = () => {\n setDelayHandler(\n setTimeout(() => {\n setHover(true);\n }, 300),\n );\n };\n\n const handleMouseLeave = () => {\n clearTimeout(delayHandler);\n setHover(false);\n };\n\n // This account for both the tooltip hover, and editing tooltip\n const tooltipOpen = tooltip.isOpen || (hasNotes && hover);\n\n return (\n <View\n style={{ flexShrink: 0 }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <Button\n type=\"bare\"\n className={!hasNotes && !tooltipOpen ? 'hover-visible' : ''}\n style={{\n color: defaultColor,\n ...style,\n ...(hasNotes && { display: 'flex !important' }),\n ...(tooltipOpen && { color: theme.buttonNormalText }),\n }}\n {...tooltip.getOpenEvents()}\n >\n <CustomNotesPaper style={{ width, height }} />\n </Button>\n {tooltipOpen && (\n <NotesTooltip\n editable={tooltip.isOpen}\n defaultNotes={note}\n position={tooltipPosition}\n onClose={onClose}\n />\n )}\n </View>\n );\n}\n","import React, { useState } from 'react';\n\nimport CheveronDown from '../../icons/v1/CheveronDown';\nimport { theme } from '../../style';\nimport Button from '../common/Button';\nimport Menu from '../common/Menu';\nimport View from '../common/View';\nimport NotesButton from '../NotesButton';\nimport { InputCell } from '../table';\nimport { Tooltip } from '../tooltips';\n\nfunction SidebarCategory({\n innerRef,\n category,\n dragPreview,\n dragging,\n editing,\n style,\n borderColor = theme.tableBorder,\n isLast,\n onDragChange,\n onEditMonth,\n onEditName,\n onSave,\n onDelete,\n onHideNewCategory,\n}) {\n const temporary = category.id === 'new';\n const [menuOpen, setMenuOpen] = useState(false);\n\n const displayed = (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n userSelect: 'none',\n WebkitUserSelect: 'none',\n opacity: category.hidden ? 0.33 : undefined,\n }}\n >\n <div\n data-testid=\"category-name\"\n style={{\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n minWidth: 0,\n }}\n >\n {category.name}\n </div>\n <View style={{ flexShrink: 0, marginLeft: 5 }}>\n <Button\n type=\"bare\"\n onClick={e => {\n e.stopPropagation();\n setMenuOpen(true);\n }}\n style={{ color: 'currentColor', padding: 3 }}\n >\n <CheveronDown\n width={14}\n height={14}\n style={{ color: 'currentColor' }}\n />\n </Button>\n {menuOpen && (\n <Tooltip\n position=\"bottom-left\"\n width={200}\n style={{ padding: 0 }}\n onClose={() => setMenuOpen(false)}\n >\n <Menu\n onMenuSelect={type => {\n if (type === 'rename') {\n onEditName(category.id);\n } else if (type === 'delete') {\n onDelete(category.id);\n } else if (type === 'toggle-visibility') {\n onSave({ ...category, hidden: !category.hidden });\n }\n setMenuOpen(false);\n }}\n items={[\n {\n name: 'toggle-visibility',\n text: category.hidden ? 'Show' : 'Hide',\n },\n { name: 'rename', text: 'Rename' },\n { name: 'delete', text: 'Delete' },\n ]}\n />\n </Tooltip>\n )}\n </View>\n <View style={{ flex: 1 }} />\n <NotesButton\n id={category.id}\n style={dragging && { color: 'currentColor' }}\n />\n </View>\n );\n\n return (\n <View\n innerRef={innerRef}\n style={{\n width: 200,\n '& button': { display: 'none' },\n ...(!dragging &&\n !dragPreview && {\n '&:hover button': { display: 'flex', color: theme.tableTextHover },\n }),\n ...(dragging && { color: theme.formInputTextPlaceholderSelected }),\n // The zIndex here forces the the view on top of a row below\n // it that may be \"collapsed\" and show a border on top\n ...(dragPreview && {\n backgroundColor: 'white',\n zIndex: 10000,\n borderRadius: 6,\n overflow: 'hidden',\n }),\n ...style,\n }}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n onEditName(null);\n e.stopPropagation();\n }\n }}\n >\n <InputCell\n value={category.name}\n formatter={value => displayed}\n width=\"flex\"\n exposed={editing || temporary}\n onUpdate={value => {\n if (temporary) {\n if (value === '') {\n onHideNewCategory();\n } else if (value !== '') {\n onSave({ ...category, name: value });\n }\n } else {\n if (value !== category.name) {\n onSave({ ...category, name: value });\n }\n }\n }}\n onBlur={() => onEditName(null)}\n style={{ paddingLeft: 13, ...(isLast && { borderBottomWidth: 0 }) }}\n inputProps={{\n placeholder: temporary ? 'New Category Name' : '',\n }}\n />\n </View>\n );\n}\n\nexport default SidebarCategory;\n","import React from 'react';\n\nimport { theme } from '../../style';\nimport View from '../common/View';\nimport { useDraggable, useDroppable, DropHighlight } from '../sort';\nimport { Row } from '../table';\n\nimport RenderMonths from './RenderMonths';\nimport SidebarCategory from './SidebarCategory';\n\nfunction ExpenseCategory({\n cat,\n budgetArray,\n editingCell,\n dragState,\n MonthComponent,\n onEditName,\n onEditMonth,\n onSave,\n onDelete,\n onBudgetAction,\n onShowActivity,\n onDragChange,\n onReorder,\n}) {\n let dragging = dragState && dragState.item === cat;\n\n if (dragState && dragState.item.id === cat.cat_group) {\n dragging = true;\n }\n\n let { dragRef } = useDraggable({\n type: 'category',\n onDragChange,\n item: cat,\n canDrag: editingCell === null,\n });\n\n let { dropRef, dropPos } = useDroppable({\n types: 'category',\n id: cat.id,\n onDrop: onReorder,\n });\n\n return (\n <Row\n innerRef={dropRef}\n collapsed={true}\n style={{\n backgroundColor: theme.tableBackground,\n opacity: cat.hidden ? 0.5 : undefined,\n }}\n >\n <DropHighlight pos={dropPos} offset={{ top: 1 }} />\n\n <View style={{ flex: 1, flexDirection: 'row' }}>\n <SidebarCategory\n innerRef={dragRef}\n category={cat}\n dragPreview={dragging && dragState.preview}\n dragging={dragging && !dragState.preview}\n editing={\n editingCell &&\n editingCell.cell === 'name' &&\n editingCell.id === cat.id\n }\n onEditName={onEditName}\n onSave={onSave}\n onDelete={onDelete}\n onDragChange={onDragChange}\n />\n\n <RenderMonths\n component={MonthComponent}\n editingIndex={\n editingCell && editingCell.id === cat.id && editingCell.cell\n }\n args={{\n category: cat,\n onEdit: onEditMonth,\n onBudgetAction,\n onShowActivity,\n }}\n />\n </View>\n </Row>\n );\n}\n\nexport default ExpenseCategory;\n","import React, { type CSSProperties, useState } from 'react';\n\nimport ExpandArrow from '../../icons/v0/ExpandArrow';\nimport CheveronDown from '../../icons/v1/CheveronDown';\nimport { theme } from '../../style';\nimport Button from '../common/Button';\nimport Menu from '../common/Menu';\nimport Text from '../common/Text';\nimport View from '../common/View';\nimport NotesButton from '../NotesButton';\nimport { InputCell } from '../table';\nimport { Tooltip } from '../tooltips';\n\ntype SidebarGroupProps = {\n group: {\n id: string;\n hidden: number;\n categories: object[];\n is_income: number;\n name: string;\n sort_order: number;\n tombstone: number;\n };\n editing?: boolean;\n collapsed: boolean;\n dragPreview?: () => void;\n innerRef?: () => void;\n borderColor?: string;\n style?: CSSProperties;\n onEdit?: (id: string) => void;\n onSave?: (group: object) => Promise<void>;\n onDelete?: (id: string) => Promise<void>;\n onShowNewCategory?: (groupId: string) => void;\n onHideNewGroup?: () => void;\n onToggleCollapse?: (id: string) => void;\n};\n\nfunction SidebarGroup({\n group,\n editing,\n collapsed,\n dragPreview,\n innerRef,\n style,\n borderColor = theme.tableBorder,\n onEdit,\n onSave,\n onDelete,\n onShowNewCategory,\n onHideNewGroup,\n onToggleCollapse,\n}: SidebarGroupProps) {\n const temporary = group.id === 'new';\n const [menuOpen, setMenuOpen] = useState(false);\n\n const displayed = (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n userSelect: 'none',\n WebkitUserSelect: 'none',\n }}\n onClick={e => {\n onToggleCollapse(group.id);\n }}\n >\n {!dragPreview && (\n <ExpandArrow\n width={8}\n height={8}\n style={{\n marginRight: 5,\n marginLeft: 5,\n flexShrink: 0,\n transition: 'transform .1s',\n transform: collapsed ? 'rotate(-90deg)' : '',\n }}\n />\n )}\n <div\n style={{\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n minWidth: 0,\n }}\n >\n {dragPreview && <Text style={{ fontWeight: 500 }}>Group: </Text>}\n {group.name}\n </div>\n {!dragPreview && (\n <>\n <View style={{ marginLeft: 5, flexShrink: 0 }}>\n <Button\n type=\"bare\"\n onClick={e => {\n e.stopPropagation();\n setMenuOpen(true);\n }}\n style={{ padding: 3 }}\n >\n <CheveronDown width={14} height={14} />\n </Button>\n {menuOpen && (\n <Tooltip\n position=\"bottom-left\"\n width={200}\n style={{ padding: 0 }}\n onClose={() => setMenuOpen(false)}\n >\n <Menu\n onMenuSelect={type => {\n if (type === 'rename') {\n onEdit(group.id);\n } else if (type === 'add-category') {\n onShowNewCategory(group.id);\n } else if (type === 'delete') {\n onDelete(group.id);\n } else if (type === 'toggle-visibility') {\n onSave({ ...group, hidden: !group.hidden });\n }\n setMenuOpen(false);\n }}\n items={[\n { name: 'add-category', text: 'Add category' },\n {\n name: 'toggle-visibility',\n text: group.hidden ? 'Show' : 'Hide',\n },\n { name: 'rename', text: 'Rename' },\n onDelete && { name: 'delete', text: 'Delete' },\n ]}\n />\n </Tooltip>\n )}\n </View>\n <View style={{ flex: 1 }} />\n <NotesButton id={group.id} />\n </>\n )}\n </View>\n );\n\n return (\n <View\n innerRef={innerRef}\n style={{\n ...style,\n width: 200,\n backgroundColor: theme.altTableBackground,\n '& button': { display: 'none' },\n '&:hover button': { display: 'flex', color: theme.tableTextHover },\n ...(dragPreview && {\n paddingLeft: 10,\n zIndex: 10000,\n borderRadius: 6,\n overflow: 'hidden',\n }),\n }}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n onEdit(null);\n e.stopPropagation();\n }\n }}\n >\n <InputCell\n value={group.name}\n formatter={value => displayed}\n width=\"flex\"\n exposed={editing}\n onUpdate={value => {\n if (temporary) {\n if (value === '') {\n onHideNewGroup();\n } else if (value !== '') {\n onSave({ id: group.id, name: value });\n }\n } else {\n onSave({ id: group.id, name: value });\n }\n }}\n onBlur={() => onEdit(null)}\n style={{ fontWeight: 600 }}\n inputProps={{\n value: undefined,\n style: { marginLeft: 20 },\n placeholder: temporary ? 'New Group Name' : '',\n }}\n />\n </View>\n );\n}\n\nexport default SidebarGroup;\n","import React from 'react';\n\nimport { theme } from '../../style';\nimport View from '../common/View';\nimport { useDraggable, useDroppable, DropHighlight } from '../sort';\nimport { Row, ROW_HEIGHT } from '../table';\n\nimport RenderMonths from './RenderMonths';\nimport SidebarGroup from './SidebarGroup';\n\nfunction ExpenseGroup({\n group,\n collapsed,\n editingCell,\n dragState,\n itemPos,\n MonthComponent,\n onEditName,\n onSave,\n onDelete,\n onDragChange,\n onReorderGroup,\n onReorderCategory,\n onToggleCollapse,\n onShowNewCategory,\n}) {\n let dragging = dragState && dragState.item === group;\n\n let { dragRef } = useDraggable({\n type: 'group',\n onDragChange,\n item: group,\n canDrag: editingCell === null,\n });\n\n let { dropRef, dropPos } = useDroppable({\n types: 'group',\n id: group.id,\n onDrop: onReorderGroup,\n });\n\n let { dropRef: catDropRef, dropPos: catDropPos } = useDroppable({\n types: 'category',\n id: group.id,\n onDrop: onReorderCategory,\n onLongHover: () => {\n if (collapsed) {\n onToggleCollapse(group.id);\n }\n },\n });\n\n return (\n <Row\n collapsed={true}\n style={{\n fontWeight: 600,\n opacity: group.hidden ? 0.33 : undefined,\n backgroundColor: theme.altTableBackground,\n }}\n >\n {dragState && !dragState.preview && dragState.type === 'group' && (\n <View\n innerRef={dropRef}\n style={{\n position: 'absolute',\n left: 0,\n right: 0,\n height: collapsed\n ? ROW_HEIGHT - 1\n : (1 + group.categories.length) * (ROW_HEIGHT - 1) + 1,\n zIndex: 10000,\n }}\n >\n <DropHighlight pos={dropPos} offset={{ top: 1 }} />\n </View>\n )}\n\n <DropHighlight pos={catDropPos} offset={{ top: 1 }} />\n\n <View\n innerRef={catDropRef}\n style={{\n flex: 1,\n flexDirection: 'row',\n opacity: dragging && !dragState.preview ? 0.3 : 1,\n }}\n >\n <SidebarGroup\n innerRef={dragRef}\n group={group}\n editing={\n editingCell &&\n editingCell.cell === 'name' &&\n editingCell.id === group.id\n }\n dragPreview={dragging && dragState.preview}\n collapsed={collapsed}\n onToggleCollapse={onToggleCollapse}\n onEdit={onEditName}\n onSave={onSave}\n onDelete={onDelete}\n onShowNewCategory={onShowNewCategory}\n />\n <RenderMonths component={MonthComponent} args={{ group }} />\n </View>\n </Row>\n );\n}\n\nexport default ExpenseGroup;\n","import React from 'react';\n\nimport { useDraggable, useDroppable, DropHighlight } from '../sort';\nimport { Row } from '../table';\n\nimport RenderMonths from './RenderMonths';\nimport SidebarCategory from './SidebarCategory';\n\nfunction IncomeCategory({\n cat,\n isLast,\n editingCell,\n MonthComponent,\n onEditName,\n onEditMonth,\n onSave,\n onDelete,\n onDragChange,\n onBudgetAction,\n onReorder,\n onShowActivity,\n}) {\n let { dragRef } = useDraggable({\n type: 'income-category',\n onDragChange,\n item: cat,\n canDrag: editingCell === null,\n });\n\n let { dropRef, dropPos } = useDroppable({\n types: 'income-category',\n id: cat.id,\n onDrop: onReorder,\n });\n\n return (\n <Row innerRef={dropRef} collapsed={true}>\n <DropHighlight pos={dropPos} offset={{ top: 1 }} />\n\n <SidebarCategory\n innerRef={dragRef}\n category={cat}\n isLast={isLast}\n editing={\n editingCell &&\n editingCell.cell === 'name' &&\n editingCell.id === cat.id\n }\n onEditName={onEditName}\n onSave={onSave}\n onDelete={onDelete}\n />\n <RenderMonths\n component={MonthComponent}\n editingIndex={\n editingCell && editingCell.id === cat.id && editingCell.cell\n }\n args={{\n category: cat,\n onEdit: onEditMonth,\n isLast,\n onShowActivity,\n onBudgetAction,\n }}\n />\n </Row>\n );\n}\n\nexport default IncomeCategory;\n","import React from 'react';\n\nimport { theme } from '../../style';\nimport { Row } from '../table';\n\nimport RenderMonths from './RenderMonths';\nimport SidebarGroup from './SidebarGroup';\n\ntype IncomeGroupProps = {\n group: {\n id: string;\n hidden: number;\n categories: object[];\n is_income: number;\n name: string;\n sort_order: number;\n tombstone: number;\n };\n editingCell: { id: string; cell: string } | null;\n collapsed: boolean;\n MonthComponent: () => JSX.Element;\n onEditName: (id: string) => void;\n onSave: (group: object) => Promise<void>;\n onToggleCollapse: (id: string) => void;\n onShowNewCategory: (groupId: string) => void;\n};\n\nfunction IncomeGroup({\n group,\n editingCell,\n collapsed,\n MonthComponent,\n onEditName,\n onSave,\n onToggleCollapse,\n onShowNewCategory,\n}: IncomeGroupProps) {\n return (\n <Row\n collapsed={true}\n style={{ fontWeight: 600, backgroundColor: theme.altTableBackground }}\n >\n <SidebarGroup\n group={group}\n collapsed={collapsed}\n editing={\n editingCell &&\n editingCell.cell === 'name' &&\n editingCell.id === group.id\n }\n onEdit={onEditName}\n onSave={onSave}\n onToggleCollapse={onToggleCollapse}\n onShowNewCategory={onShowNewCategory}\n />\n <RenderMonths component={MonthComponent} args={{ group }} />\n </Row>\n );\n}\n\nexport default IncomeGroup;\n","import React from 'react';\n\nimport Button from '../common/Button';\nimport View from '../common/View';\n\nimport RenderMonths from './RenderMonths';\n\ntype IncomeHeaderProps = {\n MonthComponent?: () => JSX.Element;\n onShowNewGroup: () => void;\n};\n\nfunction IncomeHeader({ MonthComponent, onShowNewGroup }: IncomeHeaderProps) {\n return (\n <View style={{ flexDirection: 'row', flex: 1 }}>\n <View\n style={{\n width: 200,\n alignItems: 'flex-start',\n justifyContent: 'flex-start',\n }}\n >\n <Button onClick={onShowNewGroup} style={{ fontSize: 12, margin: 10 }}>\n Add Group\n </Button>\n </View>\n <RenderMonths\n component={MonthComponent}\n style={{ border: 0, justifyContent: 'flex-end' }}\n />\n </View>\n );\n}\n\nexport default IncomeHeader;\n","import React, { memo, useState, useMemo } from 'react';\n\nimport { theme, styles } from '../../style';\nimport View from '../common/View';\nimport { DropHighlightPosContext } from '../sort';\nimport { Row } from '../table';\n\nimport ExpenseCategory from './ExpenseCategory';\nimport ExpenseGroup from './ExpenseGroup';\nimport IncomeCategory from './IncomeCategory';\nimport IncomeGroup from './IncomeGroup';\nimport IncomeHeader from './IncomeHeader';\nimport SidebarCategory from './SidebarCategory';\nimport SidebarGroup from './SidebarGroup';\nimport { separateGroups } from './util';\n\nconst BudgetCategories = memo(\n ({\n categoryGroups,\n newCategoryForGroup,\n showHiddenCategories,\n isAddingGroup,\n editingCell,\n collapsed,\n setCollapsed,\n dataComponents,\n onBudgetAction,\n onShowActivity,\n onEditName,\n onEditMonth,\n onSaveCategory,\n onSaveGroup,\n onDeleteCategory,\n onDeleteGroup,\n onReorderCategory,\n onReorderGroup,\n onShowNewCategory,\n onHideNewCategory,\n onShowNewGroup,\n onHideNewGroup,\n }) => {\n let items = useMemo(() => {\n let [expenseGroups, incomeGroup] = separateGroups(categoryGroups);\n\n let items = Array.prototype.concat.apply(\n [],\n expenseGroups.map(group => {\n if (group.hidden && !showHiddenCategories) {\n return [];\n }\n\n const groupCategories = group.categories.filter(\n cat => showHiddenCategories || !cat.hidden,\n );\n\n let items = [{ type: 'expense-group', value: { ...group } }];\n\n if (newCategoryForGroup === group.id) {\n items.push({ type: 'new-category' });\n }\n\n return [\n ...items,\n ...(collapsed.includes(group.id) ? [] : groupCategories).map(\n cat => ({\n type: 'expense-category',\n value: cat,\n }),\n ),\n ];\n }),\n );\n\n if (isAddingGroup) {\n items.push({ type: 'new-group' });\n }\n\n if (incomeGroup) {\n items = items.concat(\n [\n { type: 'income-separator' },\n { type: 'income-group', value: incomeGroup },\n newCategoryForGroup === incomeGroup.id && { type: 'new-category' },\n ...(collapsed.includes(incomeGroup.id)\n ? []\n : incomeGroup.categories.filter(\n cat => showHiddenCategories || !cat.hidden,\n )\n ).map(cat => ({\n type: 'income-category',\n value: cat,\n })),\n ].filter(x => x),\n );\n }\n\n return items;\n }, [\n categoryGroups,\n collapsed,\n newCategoryForGroup,\n isAddingGroup,\n showHiddenCategories,\n ]);\n\n let [dragState, setDragState] = useState(null);\n let [savedCollapsed, setSavedCollapsed] = useState(null);\n\n // TODO: If we turn this into a reducer, we could probably memoize\n // each item in the list for better perf\n function onDragChange(newDragState) {\n let { state } = newDragState;\n\n if (state === 'start-preview') {\n setDragState({\n type: newDragState.type,\n item: newDragState.item,\n preview: true,\n });\n } else if (state === 'start') {\n if (dragState) {\n setDragState({\n ...dragState,\n preview: false,\n });\n setSavedCollapsed(collapsed);\n }\n } else if (state === 'hover') {\n setDragState({\n ...dragState,\n hoveredId: newDragState.id,\n hoveredPos: newDragState.pos,\n });\n } else if (state === 'end') {\n setDragState(null);\n setCollapsed(savedCollapsed || []);\n }\n }\n\n function onToggleCollapse(id) {\n if (collapsed.includes(id)) {\n setCollapsed(collapsed.filter(id_ => id_ !== id));\n } else {\n setCollapsed([...collapsed, id]);\n }\n }\n\n return (\n <View\n style={{\n marginBottom: 10,\n backgroundColor: theme.tableBackground,\n overflow: 'hidden',\n boxShadow: styles.cardShadow,\n borderRadius: '0 0 4px 4px',\n flex: 1,\n }}\n >\n {items.map((item, idx) => {\n let content;\n switch (item.type) {\n case 'new-group':\n content = (\n <Row style={{ backgroundColor: theme.altTableBackground }}>\n <SidebarGroup\n group={{ id: 'new', name: '' }}\n editing={true}\n onSave={onSaveGroup}\n onHideNewGroup={onHideNewGroup}\n onEdit={onEditName}\n />\n </Row>\n );\n break;\n case 'new-category':\n content = (\n <Row>\n <SidebarCategory\n category={{\n name: '',\n cat_group: newCategoryForGroup,\n is_income:\n newCategoryForGroup ===\n categoryGroups.find(g => g.is_income).id,\n id: 'new',\n }}\n editing={true}\n onSave={onSaveCategory}\n onHideNewCategory={onHideNewCategory}\n onEditName={onEditName}\n />\n </Row>\n );\n break;\n\n case 'expense-group':\n content = (\n <ExpenseGroup\n group={item.value}\n editingCell={editingCell}\n collapsed={collapsed.includes(item.value.id)}\n MonthComponent={dataComponents.ExpenseGroupComponent}\n dragState={dragState}\n onEditName={onEditName}\n onSave={onSaveGroup}\n onDelete={onDeleteGroup}\n onDragChange={onDragChange}\n onReorderGroup={onReorderGroup}\n onReorderCategory={onReorderCategory}\n onToggleCollapse={onToggleCollapse}\n onShowNewCategory={onShowNewCategory}\n />\n );\n break;\n case 'expense-category':\n content = (\n <ExpenseCategory\n cat={item.value}\n editingCell={editingCell}\n MonthComponent={dataComponents.ExpenseCategoryComponent}\n dragState={dragState}\n onEditName={onEditName}\n onEditMonth={onEditMonth}\n onSave={onSaveCategory}\n onDelete={onDeleteCategory}\n onDragChange={onDragChange}\n onReorder={onReorderCategory}\n onBudgetAction={onBudgetAction}\n onShowActivity={onShowActivity}\n />\n );\n break;\n case 'income-separator':\n content = (\n <View\n style={{\n height: styles.incomeHeaderHeight,\n backgroundColor: theme.tableBackground,\n }}\n >\n <IncomeHeader\n MonthComponent={dataComponents.IncomeHeaderComponent}\n onShowNewGroup={onShowNewGroup}\n />\n </View>\n );\n break;\n case 'income-group':\n content = (\n <IncomeGroup\n group={item.value}\n editingCell={editingCell}\n MonthComponent={dataComponents.IncomeGroupComponent}\n collapsed={collapsed.includes(item.value.id)}\n onEditName={onEditName}\n onSave={onSaveGroup}\n onToggleCollapse={onToggleCollapse}\n onShowNewCategory={onShowNewCategory}\n />\n );\n break;\n case 'income-category':\n content = (\n <IncomeCategory\n cat={item.value}\n editingCell={editingCell}\n isLast={idx === items.length - 1}\n MonthComponent={dataComponents.IncomeCategoryComponent}\n onEditName={onEditName}\n onEditMonth={onEditMonth}\n onSave={onSaveCategory}\n onDelete={onDeleteCategory}\n onDragChange={onDragChange}\n onReorder={onReorderCategory}\n onBudgetAction={onBudgetAction}\n onShowActivity={onShowActivity}\n />\n );\n break;\n default:\n throw new Error('Unknown item type: ' + item.type);\n }\n\n let pos =\n idx === 0 ? 'first' : idx === items.length - 1 ? 'last' : null;\n\n return (\n <DropHighlightPosContext.Provider\n key={\n item.value\n ? item.value.id\n : item.type === 'income-separator'\n ? 'separator'\n : idx\n }\n value={pos}\n >\n <View\n style={\n !dragState && {\n ':hover': { backgroundColor: '#fcfcfc' },\n }\n }\n >\n {content}\n </View>\n </DropHighlightPosContext.Provider>\n );\n })}\n </View>\n );\n },\n);\n\nexport default BudgetCategories;\n","import React, {\n useContext,\n useState,\n useRef,\n useCallback,\n useLayoutEffect,\n} from 'react';\nimport { useSpring, animated } from 'react-spring';\n\nimport { css } from 'glamor';\n\nimport * as monthUtils from 'loot-core/src/shared/months';\n\nimport useResizeObserver from '../../hooks/useResizeObserver';\nimport View from '../common/View';\n\nimport { MonthsContext } from './MonthsContext';\n\nexport default function BudgetSummaries({ SummaryComponent }) {\n let { months } = useContext(MonthsContext);\n\n let [widthState, setWidthState] = useState(0);\n let [styles, spring] = useSpring(() => ({\n x: 0,\n config: { mass: 3, tension: 600, friction: 80 },\n }));\n\n let containerRef = useResizeObserver(\n useCallback(rect => {\n setWidthState(rect.width);\n }, []),\n );\n\n let prevMonth0 = useRef(months[0]);\n\n let allMonths = [...months];\n allMonths.unshift(monthUtils.subMonths(months[0], 1));\n allMonths.push(monthUtils.addMonths(months[months.length - 1], 1));\n let monthWidth = widthState / months.length;\n\n useLayoutEffect(() => {\n let prevMonth = prevMonth0.current;\n let reversed = prevMonth > months[0];\n let offsetX = monthWidth;\n let from = reversed ? -offsetX * 2 : 0;\n if (prevMonth !== allMonths[0] && prevMonth !== allMonths[2]) {\n from = -offsetX;\n }\n let to = -offsetX;\n spring.start({ from: { x: from }, x: to });\n }, [months[0]]);\n\n useLayoutEffect(() => {\n prevMonth0.current = months[0];\n }, [months[0]]);\n\n useLayoutEffect(() => {\n spring.start({ from: { x: -monthWidth }, to: { x: -monthWidth } });\n }, [monthWidth]);\n\n return (\n <div\n className={`${css([\n { flex: 1, overflow: 'hidden' },\n months.length === 1 && {\n marginLeft: -4,\n marginRight: -4,\n },\n ])}`}\n ref={containerRef}\n >\n <animated.div\n className=\"view\"\n style={{\n flexDirection: 'row',\n width: widthState,\n willChange: 'transform',\n transform: styles.x.to(x => `translateX(${x}px)`),\n }}\n >\n {allMonths.map(month => {\n return (\n <View\n key={month}\n style={{\n flex: `0 0 ${monthWidth}px`,\n paddingLeft: 4,\n paddingRight: 4,\n }}\n >\n <SummaryComponent month={month} />\n </View>\n );\n })}\n </animated.div>\n </div>\n );\n}\n","import React, { memo, useState } from 'react';\n\nimport DotsHorizontalTriple from '../../icons/v1/DotsHorizontalTriple';\nimport { theme, styles } from '../../style';\nimport Button from '../common/Button';\nimport Menu from '../common/Menu';\nimport View from '../common/View';\nimport { Tooltip } from '../tooltips';\n\nimport RenderMonths from './RenderMonths';\nimport { getScrollbarWidth } from './util';\n\nconst BudgetTotals = memo(function BudgetTotals({\n MonthComponent,\n toggleHiddenCategories,\n expandAllCategories,\n collapseAllCategories,\n}) {\n const [menuOpen, setMenuOpen] = useState(false);\n return (\n <View\n data-testid=\"budget-totals\"\n style={{\n backgroundColor: theme.tableBackground,\n flexDirection: 'row',\n flexShrink: 0,\n boxShadow: styles.cardShadow,\n marginLeft: 5,\n marginRight: 5 + getScrollbarWidth(),\n borderRadius: '4px 4px 0 0',\n borderBottom: '1px solid ' + theme.tableBorder,\n }}\n >\n <View\n style={{\n width: 200,\n color: theme.pageTextLight,\n justifyContent: 'center',\n paddingLeft: 15,\n paddingRight: 5,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n userSelect: 'none',\n WebkitUserSelect: 'none',\n }}\n >\n <View style={{ flexGrow: '1' }}>Category</View>\n <Button\n type=\"bare\"\n onClick={() => {\n setMenuOpen(true);\n }}\n style={{ color: 'currentColor', padding: 3 }}\n >\n <DotsHorizontalTriple\n width={15}\n height={15}\n style={{ color: theme.pageTextLight }}\n />\n {menuOpen && (\n <Tooltip\n position=\"bottom-right\"\n width={200}\n style={{ padding: 0 }}\n onClose={() => {\n setMenuOpen(false);\n }}\n >\n <Menu\n onMenuSelect={type => {\n if (type === 'toggle-visibility') {\n toggleHiddenCategories();\n } else if (type === 'expandAllCategories') {\n expandAllCategories();\n } else if (type === 'collapseAllCategories') {\n collapseAllCategories();\n }\n setMenuOpen(false);\n }}\n items={[\n {\n name: 'toggle-visibility',\n text: 'Toggle hidden categories',\n },\n {\n name: 'expandAllCategories',\n text: 'Expand all',\n },\n {\n name: 'collapseAllCategories',\n text: 'Collapse all',\n },\n ]}\n />\n </Tooltip>\n )}\n </Button>\n </View>\n <RenderMonths component={MonthComponent} />\n </View>\n );\n});\n\nexport default BudgetTotals;\n","import React, { createRef, Component } from 'react';\n\nimport * as monthUtils from 'loot-core/src/shared/months';\n\nimport { theme, styles } from '../../style';\nimport View from '../common/View';\nimport { IntersectionBoundary } from '../tooltips';\n\nimport BudgetCategories from './BudgetCategories';\nimport BudgetSummaries from './BudgetSummaries';\nimport BudgetTotals from './BudgetTotals';\nimport { MonthsProvider } from './MonthsContext';\nimport { findSortDown, findSortUp, getScrollbarWidth } from './util';\n\nclass BudgetTable extends Component {\n constructor(props) {\n super(props);\n this.budgetCategoriesRef = createRef();\n\n this.state = {\n editing: null,\n draggingState: null,\n showHiddenCategories: props.prefs['budget.showHiddenCategories'] ?? false,\n };\n }\n\n onEditMonth = (id, monthIndex) => {\n this.setState({ editing: id ? { id, cell: monthIndex } : null });\n };\n\n onEditName = id => {\n this.setState({ editing: id ? { id, cell: 'name' } : null });\n };\n\n onReorderCategory = (id, dropPos, targetId) => {\n let { categoryGroups } = this.props;\n\n let isGroup = !!categoryGroups.find(g => g.id === targetId);\n\n if (isGroup) {\n let { targetId: groupId } = findSortUp(categoryGroups, dropPos, targetId);\n let group = categoryGroups.find(g => g.id === groupId);\n\n if (group) {\n let { categories } = group;\n this.props.onReorderCategory({\n id,\n groupId: group.id,\n targetId:\n categories.length === 0 || dropPos === 'top'\n ? null\n : categories[0].id,\n });\n }\n } else {\n let targetGroup;\n\n for (let group of categoryGroups) {\n if (group.categories.find(cat => cat.id === targetId)) {\n targetGroup = group;\n break;\n }\n }\n\n this.props.onReorderCategory({\n id,\n groupId: targetGroup.id,\n ...findSortDown(targetGroup.categories, dropPos, targetId),\n });\n }\n };\n\n onReorderGroup = (id, dropPos, targetId) => {\n let { categoryGroups } = this.props;\n\n this.props.onReorderGroup({\n id,\n ...findSortDown(categoryGroups, dropPos, targetId),\n });\n };\n\n moveVertically = dir => {\n let { editing } = this.state;\n let { type, categoryGroups, collapsed } = this.props;\n\n const flattened = categoryGroups.reduce((all, group) => {\n if (collapsed.includes(group.id)) {\n return all.concat({ id: group.id, isGroup: true });\n }\n return all.concat([{ id: group.id, isGroup: true }, ...group.categories]);\n }, []);\n\n if (editing) {\n const idx = flattened.findIndex(item => item.id === editing.id);\n let nextIdx = idx + dir;\n\n while (nextIdx >= 0 && nextIdx < flattened.length) {\n const next = flattened[nextIdx];\n\n if (next.isGroup) {\n nextIdx += dir;\n continue;\n } else if (type === 'report' || !next.is_income) {\n this.onEditMonth(next.id, editing.cell);\n return;\n } else {\n break;\n }\n }\n }\n };\n\n onKeyDown = e => {\n if (!this.state.editing) {\n return null;\n }\n\n if (e.key === 'Enter' || e.key === 'Tab') {\n e.preventDefault();\n this.moveVertically(e.shiftKey ? -1 : 1);\n }\n };\n\n onShowActivity = (catName, catId, monthIndex) => {\n this.props.onShowActivity(catName, catId, this.resolveMonth(monthIndex));\n };\n\n onBudgetAction = (monthIndex, type, args) => {\n this.props.onBudgetAction(this.resolveMonth(monthIndex), type, args);\n };\n\n resolveMonth = monthIndex => {\n return monthUtils.addMonths(this.props.startMonth, monthIndex);\n };\n\n clearEditing() {\n this.setState({ editing: null });\n }\n\n toggleHiddenCategories = () => {\n this.setState(prevState => ({\n showHiddenCategories: !prevState.showHiddenCategories,\n }));\n this.props.savePrefs({\n 'budget.showHiddenCategories': !this.state.showHiddenCategories,\n });\n };\n\n expandAllCategories = () => {\n this.props.setCollapsed([]);\n };\n\n collapseAllCategories = () => {\n let { setCollapsed, categoryGroups } = this.props;\n setCollapsed(categoryGroups.map(g => g.id));\n };\n\n render() {\n let {\n type,\n categoryGroups,\n prewarmStartMonth,\n startMonth,\n numMonths,\n monthBounds,\n collapsed,\n setCollapsed,\n newCategoryForGroup,\n dataComponents,\n isAddingGroup,\n onSaveCategory,\n onSaveGroup,\n onDeleteCategory,\n onDeleteGroup,\n onShowNewCategory,\n onHideNewCategory,\n onShowNewGroup,\n onHideNewGroup,\n } = this.props;\n let { editing, draggingState, showHiddenCategories } = this.state;\n\n return (\n <View\n data-testid=\"budget-table\"\n style={{\n flex: 1,\n ...(styles.lightScrollbar && {\n '& ::-webkit-scrollbar': {\n backgroundColor: 'transparent',\n },\n '& ::-webkit-scrollbar-thumb:vertical': {\n backgroundColor: theme.tableHeaderBackground,\n },\n }),\n }}\n >\n <View\n style={{\n flexDirection: 'row',\n overflow: 'hidden',\n flexShrink: 0,\n // This is necessary to align with the table because the\n // table has this padding to allow the shadow to show\n paddingLeft: 5,\n paddingRight: 5 + getScrollbarWidth(),\n }}\n >\n <View style={{ width: 200 }} />\n <MonthsProvider\n startMonth={prewarmStartMonth}\n numMonths={numMonths}\n monthBounds={monthBounds}\n type={type}\n >\n <BudgetSummaries\n SummaryComponent={dataComponents.SummaryComponent}\n />\n </MonthsProvider>\n </View>\n\n <MonthsProvider\n startMonth={startMonth}\n numMonths={numMonths}\n monthBounds={monthBounds}\n type={type}\n >\n <BudgetTotals\n MonthComponent={dataComponents.BudgetTotalsComponent}\n toggleHiddenCategories={this.toggleHiddenCategories}\n expandAllCategories={this.expandAllCategories}\n collapseAllCategories={this.collapseAllCategories}\n />\n <IntersectionBoundary.Provider value={this.budgetCategoriesRef}>\n <View\n style={{\n overflowY: 'scroll',\n overflowAnchor: 'none',\n flex: 1,\n paddingLeft: 5,\n paddingRight: 5,\n }}\n innerRef={this.budgetCategoriesRef}\n >\n <View\n style={{\n opacity: draggingState ? 0.5 : 1,\n flexShrink: 0,\n }}\n onKeyDown={this.onKeyDown}\n innerRef={el => (this.budgetDataNode = el)}\n >\n <BudgetCategories\n showHiddenCategories={showHiddenCategories}\n categoryGroups={categoryGroups}\n newCategoryForGroup={newCategoryForGroup}\n isAddingGroup={isAddingGroup}\n editingCell={editing}\n collapsed={collapsed}\n setCollapsed={setCollapsed}\n dataComponents={dataComponents}\n onEditMonth={this.onEditMonth}\n onEditName={this.onEditName}\n onSaveCategory={onSaveCategory}\n onSaveGroup={onSaveGroup}\n onDeleteCategory={onDeleteCategory}\n onDeleteGroup={onDeleteGroup}\n onReorderCategory={this.onReorderCategory}\n onReorderGroup={this.onReorderGroup}\n onShowNewCategory={onShowNewCategory}\n onHideNewCategory={onHideNewCategory}\n onShowNewGroup={onShowNewGroup}\n onHideNewGroup={onHideNewGroup}\n onBudgetAction={this.onBudgetAction}\n onShowActivity={this.onShowActivity}\n />\n </View>\n </View>\n </IntersectionBoundary.Provider>\n </MonthsProvider>\n </View>\n );\n }\n}\n\nexport default BudgetTable;\n","import React, { forwardRef, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport { useActions } from '../../hooks/useActions';\nimport View from '../common/View';\n\nimport { useBudgetMonthCount } from './BudgetMonthCountContext';\nimport BudgetPageHeader from './BudgetPageHeader';\nimport BudgetTable from './BudgetTable';\n\nfunction getNumPossibleMonths(width) {\n let estimatedTableWidth = width - 200;\n\n if (estimatedTableWidth < 500) {\n return 1;\n } else if (estimatedTableWidth < 750) {\n return 2;\n } else if (estimatedTableWidth < 1000) {\n return 3;\n } else if (estimatedTableWidth < 1250) {\n return 4;\n } else if (estimatedTableWidth < 1500) {\n return 5;\n }\n\n return 6;\n}\n\nconst DynamicBudgetTableInner = forwardRef(\n (\n {\n width,\n height,\n categoryGroups,\n prewarmStartMonth,\n startMonth,\n maxMonths = 3,\n monthBounds,\n onMonthSelect: onMonthSelect_,\n onPreload,\n ...props\n },\n ref,\n ) => {\n let prefs = useSelector(state => state.prefs.local);\n let { setDisplayMax } = useBudgetMonthCount();\n let actions = useActions();\n\n let numPossible = getNumPossibleMonths(width);\n let numMonths = Math.min(numPossible, maxMonths);\n let maxWidth = 200 + 500 * numMonths;\n\n useEffect(() => {\n setDisplayMax(numPossible);\n }, [numPossible]);\n\n function onMonthSelect(month) {\n onMonthSelect_(month, numMonths);\n }\n\n return (\n <View\n style={{\n width,\n height,\n alignItems: 'center',\n opacity: width <= 0 || height <= 0 ? 0 : 1,\n }}\n >\n <View style={{ width: '100%', maxWidth }}>\n <BudgetPageHeader\n startMonth={prewarmStartMonth}\n numMonths={numMonths}\n monthBounds={monthBounds}\n onMonthSelect={onMonthSelect}\n />\n <BudgetTable\n ref={ref}\n categoryGroups={categoryGroups}\n prewarmStartMonth={prewarmStartMonth}\n startMonth={startMonth}\n numMonths={numMonths}\n monthBounds={monthBounds}\n prefs={prefs}\n {...actions}\n {...props}\n />\n </View>\n </View>\n );\n },\n);\n\nexport default forwardRef((props, ref) => {\n return (\n <AutoSizer>\n {({ width, height }) => (\n <DynamicBudgetTableInner\n ref={ref}\n width={width}\n height={height}\n {...props}\n />\n )}\n </AutoSizer>\n );\n});\n","import * as React from 'react';\nimport type { SVGProps } from 'react';\nconst SvgArrowButtonDown1 = (props: SVGProps<SVGSVGElement>) => (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n style={{\n color: 'inherit',\n ...props.style,\n }}\n >\n <path\n d=\"M12 13.584a2.643 2.643 0 0 1-1.875-.775L.584 3.268a1.768 1.768 0 0 1 2.5-2.5l8.739 8.739a.25.25 0 0 0 .354 0L20.916.768a1.768 1.768 0 0 1 2.5 2.5l-9.541 9.541a2.643 2.643 0 0 1-1.875.775Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M12 23.75a2.643 2.643 0 0 1-1.875-.775L.584 13.434a1.768 1.768 0 0 1 2.5-2.5l8.739 8.739a.25.25 0 0 0 .354 0l8.739-8.739a1.768 1.768 0 0 1 2.5 2.5l-9.541 9.541A2.643 2.643 0 0 1 12 23.75Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nexport default SvgArrowButtonDown1;\n","import * as React from 'react';\nimport type { SVGProps } from 'react';\nconst SvgArrowButtonUp1 = (props: SVGProps<SVGSVGElement>) => (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n style={{\n color: 'inherit',\n ...props.style,\n }}\n >\n <path\n d=\"M12 10.416a2.643 2.643 0 0 1 1.875.775l9.541 9.541a1.768 1.768 0 0 1-2.5 2.5l-8.739-8.739a.25.25 0 0 0-.354 0l-8.739 8.739a1.768 1.768 0 0 1-2.5-2.5l9.541-9.541A2.643 2.643 0 0 1 12 10.416Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M12 .25a2.643 2.643 0 0 1 1.875.775l9.541 9.541a1.768 1.768 0 0 1-2.5 2.5l-8.739-8.739a.25.25 0 0 0-.354 0l-8.739 8.739a1.768 1.768 0 0 1-2.5-2.5l9.541-9.541A2.643 2.643 0 0 1 12 .25Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nexport default SvgArrowButtonUp1;\n","import { useCallback, useEffect, useState, type ReactNode } from 'react';\n\nimport { type CSSProperties } from '../../style';\n\nimport View from './View';\n\ntype HoverTargetProps = {\n style?: CSSProperties;\n contentStyle?: CSSProperties;\n children: ReactNode;\n renderContent: () => ReactNode;\n disabled?: boolean;\n};\n\nexport default function HoverTarget({\n style,\n contentStyle,\n children,\n renderContent,\n disabled,\n}: HoverTargetProps) {\n let [hovered, setHovered] = useState(false);\n\n const onMouseEnter = useCallback(() => {\n if (!disabled) {\n setHovered(true);\n }\n }, [disabled]);\n\n const onMouseLeave = useCallback(() => {\n if (!disabled) {\n setHovered(false);\n }\n }, [disabled]);\n\n useEffect(() => {\n if (disabled && hovered) {\n setHovered(false);\n }\n }, [disabled, hovered]);\n\n return (\n <View style={style}>\n <View\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n style={contentStyle}\n >\n {children}\n </View>\n {hovered && renderContent()}\n </View>\n );\n}\n","import React, { type ReactNode, createContext, useContext } from 'react';\n\nimport * as monthUtils from 'loot-core/src/shared/months';\n\nlet Context = createContext(null);\n\ntype ReportProviderProps = {\n summaryCollapsed: boolean;\n onBudgetAction: (idx: number, action: string, arg: unknown) => void;\n onToggleSummaryCollapse: () => void;\n children: ReactNode;\n};\nexport function ReportProvider({\n summaryCollapsed,\n onBudgetAction,\n onToggleSummaryCollapse,\n children,\n}: ReportProviderProps) {\n let currentMonth = monthUtils.currentMonth();\n\n return (\n <Context.Provider\n value={{\n currentMonth,\n summaryCollapsed,\n onBudgetAction,\n onToggleSummaryCollapse,\n }}\n children={children}\n />\n );\n}\n\nexport function useReport() {\n return useContext(Context);\n}\n","import React, {\n type ComponentProps,\n type ComponentType,\n type ReactNode,\n useState,\n type SVGProps,\n} from 'react';\n\nimport { css } from 'glamor';\n\nimport { reportBudget } from 'loot-core/src/client/queries';\nimport * as monthUtils from 'loot-core/src/shared/months';\n\nimport useFeatureFlag from '../../../hooks/useFeatureFlag';\nimport DotsHorizontalTriple from '../../../icons/v1/DotsHorizontalTriple';\nimport ArrowButtonDown1 from '../../../icons/v2/ArrowButtonDown1';\nimport ArrowButtonUp1 from '../../../icons/v2/ArrowButtonUp1';\nimport { theme, type CSSProperties, styles } from '../../../style';\nimport AlignedText from '../../common/AlignedText';\nimport Button from '../../common/Button';\nimport HoverTarget from '../../common/HoverTarget';\nimport Menu from '../../common/Menu';\nimport Stack from '../../common/Stack';\nimport Text from '../../common/Text';\nimport View from '../../common/View';\nimport NotesButton from '../../NotesButton';\nimport PrivacyFilter from '../../PrivacyFilter';\nimport CellValue from '../../spreadsheet/CellValue';\nimport NamespaceContext from '../../spreadsheet/NamespaceContext';\nimport useFormat from '../../spreadsheet/useFormat';\nimport useSheetValue from '../../spreadsheet/useSheetValue';\nimport { Tooltip } from '../../tooltips';\nimport { makeAmountFullStyle } from '../util';\n\nimport { useReport } from './ReportContext';\n\ntype PieProgressProps = {\n style?: SVGProps<SVGSVGElement>['style'];\n progress: number;\n color: string;\n backgroundColor: string;\n};\nfunction PieProgress({\n style,\n progress,\n color,\n backgroundColor,\n}: PieProgressProps) {\n let radius = 4;\n let circum = 2 * Math.PI * radius;\n let dash = progress * circum;\n let gap = circum;\n\n return (\n <svg viewBox=\"0 0 20 20\" style={style}>\n <circle r=\"10\" cx=\"10\" cy=\"10\" fill={backgroundColor} />\n <circle\n r={radius}\n cx=\"10\"\n cy=\"10\"\n fill=\"none\"\n stroke={color}\n strokeWidth={radius * 2}\n strokeDasharray={`${dash} ${gap}`}\n transform=\"rotate(-90) translate(-20)\"\n />{' '}\n </svg>\n );\n}\n\nfunction fraction(num, denom) {\n if (denom === 0) {\n if (num > 0) {\n return 1;\n }\n return 0;\n }\n\n return num / denom;\n}\n\ntype IncomeProgressProps = {\n current: ComponentProps<typeof CellValue>['binding'];\n target: ComponentProps<typeof CellValue>['binding'];\n};\nfunction IncomeProgress({ current, target }: IncomeProgressProps) {\n let totalIncome = useSheetValue(current) || 0;\n let totalBudgeted = useSheetValue(target) || 0;\n\n let over = false;\n\n if (totalIncome < 0) {\n over = true;\n totalIncome = -totalIncome;\n }\n\n let frac = fraction(totalIncome, totalBudgeted);\n\n return (\n <PieProgress\n progress={frac}\n color={over ? theme.errorText : theme.noticeTextLight}\n backgroundColor={over ? theme.errorBackground : theme.pageBackground}\n style={{ width: 20, height: 20 }}\n />\n );\n}\n\ntype ExpenseProgressProps = {\n current: ComponentProps<typeof CellValue>['binding'];\n target: ComponentProps<typeof CellValue>['binding'];\n};\nfunction ExpenseProgress({ current, target }: ExpenseProgressProps) {\n let totalSpent = useSheetValue(current) || 0;\n let totalBudgeted = useSheetValue(target) || 0;\n\n // Reverse total spent, and also set a bottom boundary of 0 (in case\n // income goes into an expense category and it's \"positive\", don't\n // show that in the graph)\n totalSpent = Math.max(-totalSpent, 0);\n\n let frac;\n let over = false;\n\n if (totalSpent > totalBudgeted) {\n frac = (totalSpent - totalBudgeted) / totalBudgeted;\n over = true;\n } else {\n frac = fraction(totalSpent, totalBudgeted);\n }\n\n return (\n <PieProgress\n progress={frac}\n color={over ? theme.errorText : theme.noticeTextLight}\n backgroundColor={over ? theme.errorBackground : theme.pageBackground}\n style={{ width: 20, height: 20 }}\n />\n );\n}\n\ntype BudgetTotalProps = {\n title: ReactNode;\n current: ComponentProps<typeof CellValue>['binding'];\n target: ComponentProps<typeof CellValue>['binding'];\n ProgressComponent: ComponentType<{ current; target }>;\n style?: CSSProperties;\n};\nfunction BudgetTotal({\n title,\n current,\n target,\n ProgressComponent,\n style,\n}: BudgetTotalProps) {\n return (\n <View\n style={{\n lineHeight: 1.5,\n flexDirection: 'row',\n alignItems: 'center',\n fontSize: 14,\n ...style,\n }}\n >\n <ProgressComponent current={current} target={target} />\n\n <View style={{ marginLeft: 10 }}>\n <View>\n <Text style={{ color: theme.pageTextLight }}>{title}</Text>\n </View>\n\n <Text>\n <CellValue binding={current} type=\"financial\" />\n <Text style={{ color: theme.pageTextSubdued, fontStyle: 'italic' }}>\n {' of '}\n <CellValue\n binding={target}\n type=\"financial\"\n style={styles.notFixed}\n />\n </Text>\n </Text>\n </View>\n </View>\n );\n}\n\ntype IncomeTotalProps = {\n style?: CSSProperties;\n};\nfunction IncomeTotal({ style }: IncomeTotalProps) {\n return (\n <BudgetTotal\n title=\"Income\"\n current={reportBudget.totalIncome}\n target={reportBudget.totalBudgetedIncome}\n ProgressComponent={IncomeProgress}\n style={style}\n />\n );\n}\n\ntype ExpenseTotalProps = {\n style?: CSSProperties;\n};\nfunction ExpenseTotal({ style }: ExpenseTotalProps) {\n return (\n <BudgetTotal\n title=\"Expenses\"\n current={reportBudget.totalSpent}\n target={reportBudget.totalBudgetedExpense}\n ProgressComponent={ExpenseProgress}\n style={style}\n />\n );\n}\n\ntype SavedProps = {\n projected: boolean;\n style?: CSSProperties;\n};\nfunction Saved({ projected, style }: SavedProps) {\n let budgetedSaved = useSheetValue(reportBudget.totalBudgetedSaved) || 0;\n let totalSaved = useSheetValue(reportBudget.totalSaved) || 0;\n let format = useFormat();\n let saved = projected ? budgetedSaved : totalSaved;\n let isNegative = saved < 0;\n\n return (\n <View style={{ alignItems: 'center', fontSize: 14, ...style }}>\n {projected ? (\n <Text style={{ color: theme.pageTextLight }}>Projected Savings:</Text>\n ) : (\n <View style={{ color: theme.pageTextLight }}>\n {isNegative ? 'Overspent:' : 'Saved:'}\n </View>\n )}\n\n <HoverTarget\n renderContent={() => {\n if (!projected) {\n let diff = totalSaved - budgetedSaved;\n return (\n <Tooltip\n position=\"bottom-center\"\n style={{ padding: 10, fontSize: 14 }}\n >\n <AlignedText\n left=\"Projected Savings:\"\n right={\n <Text\n style={{\n ...makeAmountFullStyle(budgetedSaved),\n ...styles.tnum,\n }}\n >\n {format(budgetedSaved, 'financial-with-sign')}\n </Text>\n }\n />\n <AlignedText\n left=\"Difference:\"\n right={\n <Text\n style={{ ...makeAmountFullStyle(diff), ...styles.tnum }}\n >\n {format(diff, 'financial-with-sign')}\n </Text>\n }\n />\n </Tooltip>\n );\n }\n return null;\n }}\n >\n <View\n className={`${css([\n {\n fontSize: 25,\n color: projected\n ? theme.alt2WarningText\n : isNegative\n ? theme.errorTextDark\n : theme.altUpcomingText,\n },\n ])}`}\n >\n <PrivacyFilter blurIntensity={7}>\n {format(saved, 'financial')}\n </PrivacyFilter>\n </View>\n </HoverTarget>\n </View>\n );\n}\n\ntype BudgetSummaryProps = {\n month?: string;\n};\nexport function BudgetSummary({ month }: BudgetSummaryProps) {\n let {\n currentMonth,\n summaryCollapsed: collapsed,\n onBudgetAction,\n onToggleSummaryCollapse,\n } = useReport();\n\n const isGoalTemplatesEnabled = useFeatureFlag('goalTemplatesEnabled');\n\n let [menuOpen, setMenuOpen] = useState(false);\n function onMenuOpen() {\n setMenuOpen(true);\n }\n\n function onMenuClose() {\n setMenuOpen(false);\n }\n\n let ExpandOrCollapseIcon = collapsed ? ArrowButtonDown1 : ArrowButtonUp1;\n\n return (\n <View\n style={{\n backgroundColor: theme.tableBackground,\n boxShadow: styles.cardShadow,\n borderRadius: 6,\n marginLeft: 0,\n marginRight: 0,\n marginTop: 5,\n flex: 1,\n cursor: 'default',\n marginBottom: 5,\n overflow: 'hidden',\n '& .hover-visible': {\n opacity: 0,\n transition: 'opacity .25s',\n },\n '&:hover .hover-visible': {\n opacity: 1,\n },\n }}\n >\n <NamespaceContext.Provider value={monthUtils.sheetForMonth(month)}>\n <View\n style={{\n padding: '0 13px',\n ...(collapsed ? { margin: '10px 0' } : { marginTop: 16 }),\n }}\n >\n <View\n style={{\n position: 'absolute',\n left: 10,\n top: 0,\n }}\n >\n <Button\n type=\"bare\"\n className=\"hover-visible\"\n onClick={onToggleSummaryCollapse}\n >\n <ExpandOrCollapseIcon\n width={13}\n height={13}\n // The margin is to make it the exact same size as the dots button\n style={{ color: theme.pageTextSubdued, margin: 1 }}\n />\n </Button>\n </View>\n\n <div\n className={`${css([\n {\n textAlign: 'center',\n marginTop: 3,\n fontSize: 18,\n fontWeight: 500,\n textDecorationSkip: 'ink',\n },\n ])}`}\n >\n {monthUtils.format(month, 'MMMM')}\n </div>\n\n <View\n style={{\n position: 'absolute',\n right: 10,\n top: 0,\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <View>\n <NotesButton\n id={`budget-${month}`}\n width={15}\n height={15}\n tooltipPosition=\"bottom-right\"\n defaultColor={theme.pageTextSubdued} // notes page color\n />\n </View>\n <View style={{ userSelect: 'none' }}>\n <Button type=\"bare\" onClick={onMenuOpen}>\n <DotsHorizontalTriple\n width={15}\n height={15}\n style={{ color: theme.pageTextLight }}\n />\n </Button>\n {menuOpen && (\n <Tooltip\n position=\"bottom-right\"\n width={200}\n style={{ padding: 0 }}\n onClose={onMenuClose}\n >\n <Menu\n onMenuSelect={type => {\n onMenuClose();\n onBudgetAction(month, type);\n }}\n items={[\n { name: 'copy-last', text: 'Copy last month’s budget' },\n { name: 'set-zero', text: 'Set budgets to zero' },\n {\n name: 'set-3-avg',\n text: 'Set budgets to 3 month average',\n },\n isGoalTemplatesEnabled && {\n name: 'check-templates',\n text: 'Check templates',\n },\n isGoalTemplatesEnabled && {\n name: 'apply-goal-template',\n text: 'Apply budget template',\n },\n isGoalTemplatesEnabled && {\n name: 'overwrite-goal-template',\n text: 'Overwrite with budget template',\n },\n ]}\n />\n </Tooltip>\n )}\n </View>\n </View>\n </View>\n\n {!collapsed && (\n <Stack\n spacing={2}\n style={{\n alignSelf: 'center',\n backgroundColor: theme.tableRowHeaderBackground,\n borderRadius: 4,\n padding: '10px 15px',\n marginTop: 13,\n }}\n >\n <IncomeTotal />\n <ExpenseTotal />\n </Stack>\n )}\n\n {collapsed ? (\n <View\n style={{\n alignItems: 'center',\n padding: '10px 20px',\n justifyContent: 'space-between',\n backgroundColor: theme.tableRowHeaderBackground,\n borderTop: '1px solid ' + theme.tableBorder,\n }}\n >\n <Saved projected={month >= currentMonth} />\n </View>\n ) : (\n <Saved\n projected={month >= currentMonth}\n style={{ marginTop: 13, marginBottom: 20 }}\n />\n )}\n </NamespaceContext.Provider>\n </View>\n );\n}\n","import React, { memo, useState } from 'react';\n\nimport { reportBudget } from 'loot-core/src/client/queries';\nimport evalArithmetic from 'loot-core/src/shared/arithmetic';\nimport { integerToCurrency, amountToInteger } from 'loot-core/src/shared/util';\n\nimport useFeatureFlag from '../../../hooks/useFeatureFlag';\nimport CheveronDown from '../../../icons/v1/CheveronDown';\nimport { styles, theme, type CSSProperties } from '../../../style';\nimport Button from '../../common/Button';\nimport Menu from '../../common/Menu';\nimport Text from '../../common/Text';\nimport View from '../../common/View';\nimport CellValue from '../../spreadsheet/CellValue';\nimport useFormat from '../../spreadsheet/useFormat';\nimport useSheetValue from '../../spreadsheet/useSheetValue';\nimport { Field, SheetCell } from '../../table';\nimport { Tooltip, useTooltip } from '../../tooltips';\nimport BalanceWithCarryover from '../BalanceWithCarryover';\nimport { makeAmountGrey } from '../util';\n\nexport { BudgetSummary } from './BudgetSummary';\n\nlet headerLabelStyle: CSSProperties = {\n flex: 1,\n padding: '0 5px',\n textAlign: 'right',\n};\nexport const BudgetTotalsMonth = memo(function BudgetTotalsMonth() {\n const format = useFormat();\n return (\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n marginRight: styles.monthRightPadding,\n paddingTop: 10,\n paddingBottom: 10,\n }}\n >\n <View style={headerLabelStyle}>\n <Text style={{ color: theme.pageTextLight }}>Budgeted</Text>\n <CellValue\n binding={reportBudget.totalBudgetedExpense}\n type=\"financial\"\n style={{ color: theme.pageTextLight, fontWeight: 600 }}\n formatter={value => {\n return format(parseFloat(value || '0'), 'financial');\n }}\n />\n </View>\n <View style={headerLabelStyle}>\n <Text style={{ color: theme.pageTextLight }}>Spent</Text>\n <CellValue\n binding={reportBudget.totalSpent}\n type=\"financial\"\n style={{ color: theme.pageTextLight, fontWeight: 600 }}\n />\n </View>\n <View style={headerLabelStyle}>\n <Text style={{ color: theme.pageTextLight }}>Balance</Text>\n <CellValue\n binding={reportBudget.totalLeftover}\n type=\"financial\"\n style={{ color: theme.pageTextLight, fontWeight: 600 }}\n />\n </View>\n </View>\n );\n});\n\nexport function IncomeHeaderMonth() {\n return (\n <View\n style={{\n flexDirection: 'row',\n marginRight: styles.monthRightPadding,\n paddingBottom: 5,\n }}\n >\n <View style={headerLabelStyle}>\n <Text style={{ color: theme.pageTextLight }}>Budgeted</Text>\n </View>\n <View style={headerLabelStyle}>\n <Text style={{ color: theme.pageTextLight }}>Received</Text>\n </View>\n </View>\n );\n}\n\ntype GroupMonthProps = {\n group: { id: string; is_income: boolean };\n};\nexport const GroupMonth = memo(function GroupMonth({ group }: GroupMonthProps) {\n let { id } = group;\n\n return (\n <View style={{ flex: 1, flexDirection: 'row' }}>\n <SheetCell\n name=\"budgeted\"\n width=\"flex\"\n textAlign=\"right\"\n style={{ fontWeight: 600, ...styles.tnum }}\n valueProps={{\n binding: reportBudget.groupBudgeted(id),\n type: 'financial',\n }}\n />\n <SheetCell\n name=\"spent\"\n width=\"flex\"\n textAlign=\"right\"\n style={{ fontWeight: 600, ...styles.tnum }}\n valueProps={{\n binding: reportBudget.groupSumAmount(id),\n type: 'financial',\n }}\n />\n {!group.is_income && (\n <SheetCell\n name=\"balance\"\n width=\"flex\"\n textAlign=\"right\"\n style={{\n fontWeight: 600,\n paddingRight: styles.monthRightPadding,\n ...styles.tnum,\n }}\n valueProps={{\n binding: reportBudget.groupBalance(id),\n type: 'financial',\n privacyFilter: {\n style: {\n paddingRight: styles.monthRightPadding,\n },\n },\n }}\n />\n )}\n </View>\n );\n});\n\ntype BalanceTooltipProps = {\n categoryId: string;\n tooltip: { close: () => void };\n monthIndex: number;\n onBudgetAction: (idx: number, action: string, arg: unknown) => void;\n};\nfunction BalanceTooltip({\n categoryId,\n tooltip,\n monthIndex,\n onBudgetAction,\n}: BalanceTooltipProps) {\n let carryover = useSheetValue(reportBudget.catCarryover(categoryId));\n\n return (\n <Tooltip\n position=\"bottom-right\"\n width={200}\n style={{ padding: 0 }}\n onClose={tooltip.close}\n >\n <Menu\n onMenuSelect={type => {\n onBudgetAction(monthIndex, 'carryover', {\n category: categoryId,\n flag: !carryover,\n });\n tooltip.close();\n }}\n items={[\n {\n name: 'carryover',\n text: carryover\n ? 'Remove overspending rollover'\n : 'Rollover overspending',\n },\n ]}\n />\n </Tooltip>\n );\n}\n\ntype CategoryMonthProps = {\n monthIndex: number;\n category: { id: string; name: string; is_income: boolean };\n editing: boolean;\n onEdit: (id: string | null, idx?: number) => void;\n onBudgetAction: (idx: number, action: string, arg: unknown) => void;\n onShowActivity: (name: string, id: string, idx: number) => void;\n};\nexport const CategoryMonth = memo(function CategoryMonth({\n monthIndex,\n category,\n editing,\n onEdit,\n onBudgetAction,\n onShowActivity,\n}: CategoryMonthProps) {\n let balanceTooltip = useTooltip();\n const [menuOpen, setMenuOpen] = useState(false);\n const [hover, setHover] = useState(false);\n const isGoalTemplatesEnabled = useFeatureFlag('goalTemplatesEnabled');\n\n return (\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n '& .hover-visible': {\n opacity: 0,\n transition: 'opacity .25s',\n },\n '&:hover .hover-visible': {\n opacity: 1,\n },\n }}\n >\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n }}\n onMouseOverCapture={() => setHover(true)}\n onMouseLeave={() => {\n setHover(false);\n }}\n >\n {!editing && (hover || menuOpen) && (\n <View\n style={{\n flexShrink: 0,\n marginRight: 0,\n marginLeft: 3,\n justifyContent: 'center',\n }}\n >\n <Button\n type=\"bare\"\n onClick={e => {\n e.stopPropagation();\n setMenuOpen(true);\n }}\n style={{\n padding: 3,\n }}\n >\n <CheveronDown\n width={14}\n height={14}\n className=\"hover-visible\"\n style={menuOpen && { opacity: 1 }}\n />\n </Button>\n {menuOpen && (\n <Tooltip\n position=\"bottom-left\"\n width={200}\n style={{ padding: 0 }}\n onClose={() => setMenuOpen(false)}\n >\n <Menu\n onMenuSelect={type => {\n onBudgetAction(monthIndex, type, { category: category.id });\n setMenuOpen(false);\n }}\n items={[\n {\n name: 'copy-single-last',\n text: 'Copy last month’s budget',\n },\n {\n name: 'set-single-3-avg',\n text: 'Set to 3 month average',\n },\n {\n name: 'set-single-6-avg',\n text: 'Set to 6 month average',\n },\n {\n name: 'set-single-12-avg',\n text: 'Set to yearly average',\n },\n isGoalTemplatesEnabled && {\n name: 'apply-single-category-template',\n text: 'Apply budget template',\n },\n ]}\n />\n </Tooltip>\n )}\n </View>\n )}\n <SheetCell\n name=\"budget\"\n exposed={editing}\n focused={editing}\n width=\"flex\"\n onExpose={() => onEdit(category.id, monthIndex)}\n style={{ ...(editing && { zIndex: 100 }), ...styles.tnum }}\n textAlign=\"right\"\n valueStyle={{\n cursor: 'default',\n margin: 1,\n padding: '0 4px',\n borderRadius: 4,\n ':hover': {\n boxShadow: 'inset 0 0 0 1px ' + theme.mobileAccountShadow,\n backgroundColor: theme.tableBackground,\n },\n }}\n valueProps={{\n binding: reportBudget.catBudgeted(category.id),\n type: 'financial',\n getValueStyle: makeAmountGrey,\n formatExpr: expr => {\n return integerToCurrency(expr);\n },\n unformatExpr: expr => {\n return amountToInteger(evalArithmetic(expr, 0));\n },\n }}\n inputProps={{\n onBlur: () => {\n onEdit(null);\n },\n style: {\n backgroundColor: 'white',\n },\n }}\n onSave={amount => {\n onBudgetAction(monthIndex, 'budget-amount', {\n category: category.id,\n amount,\n });\n }}\n />\n </View>\n <Field name=\"spent\" width=\"flex\" style={{ textAlign: 'right' }}>\n <span\n data-testid=\"category-month-spent\"\n onClick={() => onShowActivity(category.name, category.id, monthIndex)}\n >\n <CellValue\n binding={reportBudget.catSumAmount(category.id)}\n type=\"financial\"\n getStyle={makeAmountGrey}\n style={{\n cursor: 'pointer',\n ':hover': {\n textDecoration: 'underline',\n },\n }}\n />\n </span>\n </Field>\n\n {!category.is_income && (\n <Field\n name=\"balance\"\n truncate={false}\n width=\"flex\"\n style={{ paddingRight: styles.monthRightPadding, textAlign: 'right' }}\n >\n <span {...(category.is_income ? {} : balanceTooltip.getOpenEvents())}>\n <BalanceWithCarryover\n disabled={category.is_income}\n carryover={reportBudget.catCarryover(category.id)}\n balance={reportBudget.catBalance(category.id)}\n />\n </span>\n {balanceTooltip.isOpen && (\n <BalanceTooltip\n categoryId={category.id}\n tooltip={balanceTooltip}\n monthIndex={monthIndex}\n onBudgetAction={onBudgetAction}\n />\n )}\n </Field>\n )}\n </View>\n );\n});\n\nexport const ExpenseGroupMonth = GroupMonth;\nexport const ExpenseCategoryMonth = CategoryMonth;\n\nexport const IncomeGroupMonth = GroupMonth;\nexport const IncomeCategoryMonth = CategoryMonth;\n","import React, {\n useState,\n useContext,\n useEffect,\n type ChangeEvent,\n} from 'react';\n\nimport { useSpreadsheet } from 'loot-core/src/client/SpreadsheetProvider';\nimport evalArithmetic from 'loot-core/src/shared/arithmetic';\nimport { integerToCurrency, amountToInteger } from 'loot-core/src/shared/util';\n\nimport Button from '../../common/Button';\nimport InitialFocus from '../../common/InitialFocus';\nimport Input from '../../common/Input';\nimport View from '../../common/View';\nimport NamespaceContext from '../../spreadsheet/NamespaceContext';\nimport { Tooltip } from '../../tooltips';\n\ntype HoldTooltipProps = {\n onSubmit: (amount: number) => void;\n onClose: () => void;\n};\nexport default function HoldTooltip({ onSubmit, onClose }: HoldTooltipProps) {\n const spreadsheet = useSpreadsheet();\n const sheetName = useContext(NamespaceContext);\n\n const [amount, setAmount] = useState(null);\n\n useEffect(() => {\n (async () => {\n const node = await spreadsheet.get(sheetName, 'to-budget');\n setAmount(integerToCurrency(Math.max(node.value, 0)));\n })();\n }, []);\n\n function submit() {\n const parsedAmount = evalArithmetic(amount, null);\n if (parsedAmount) {\n onSubmit(amountToInteger(parsedAmount));\n }\n onClose();\n }\n\n if (amount === null) {\n // See `TransferTooltip` for more info about this\n return null;\n }\n\n return (\n <Tooltip\n position=\"bottom-right\"\n width={200}\n style={{ padding: 10 }}\n onClose={onClose}\n >\n <View style={{ marginBottom: 5 }}>Hold this amount:</View>\n <View>\n <InitialFocus>\n <Input\n value={amount}\n onChange={(e: ChangeEvent<HTMLInputElement>) =>\n setAmount(e.target.value)\n }\n onEnter={submit}\n />\n </InitialFocus>\n </View>\n <View\n style={{\n alignItems: 'flex-end',\n marginTop: 10,\n }}\n >\n <Button\n type=\"primary\"\n style={{\n fontSize: 12,\n paddingTop: 3,\n paddingBottom: 3,\n }}\n onClick={submit}\n >\n Hold\n </Button>\n </View>\n </Tooltip>\n );\n}\n","import React, { type ReactNode, createContext, useContext } from 'react';\n\nimport * as monthUtils from 'loot-core/src/shared/months';\n\nlet Context = createContext(null);\n\ntype RolloverContextProps = {\n categoryGroups: unknown[];\n summaryCollapsed: boolean;\n onBudgetAction: (idx: number, action: string, arg?: unknown) => void;\n onToggleSummaryCollapse: () => void;\n children: ReactNode;\n};\nexport function RolloverContext({\n categoryGroups,\n summaryCollapsed,\n onBudgetAction,\n onToggleSummaryCollapse,\n children,\n}: RolloverContextProps) {\n let currentMonth = monthUtils.currentMonth();\n\n return (\n <Context.Provider\n value={{\n currentMonth,\n categoryGroups,\n summaryCollapsed,\n onBudgetAction,\n onToggleSummaryCollapse,\n }}\n children={children}\n />\n );\n}\n\nexport function useRollover() {\n return useContext(Context);\n}\n","import React, { useState } from 'react';\n\nimport { css } from 'glamor';\n\nimport { rolloverBudget } from 'loot-core/src/client/queries';\nimport * as monthUtils from 'loot-core/src/shared/months';\n\nimport DotsHorizontalTriple from '../../../icons/v1/DotsHorizontalTriple';\nimport ArrowButtonDown1 from '../../../icons/v2/ArrowButtonDown1';\nimport ArrowButtonUp1 from '../../../icons/v2/ArrowButtonUp1';\nimport { theme, styles } from '../../../style';\nimport AlignedText from '../../common/AlignedText';\nimport Block from '../../common/Block';\nimport Button from '../../common/Button';\nimport HoverTarget from '../../common/HoverTarget';\nimport Menu from '../../common/Menu';\nimport View from '../../common/View';\nimport NotesButton from '../../NotesButton';\nimport PrivacyFilter from '../../PrivacyFilter';\nimport CellValue from '../../spreadsheet/CellValue';\nimport NamespaceContext from '../../spreadsheet/NamespaceContext';\nimport useFormat from '../../spreadsheet/useFormat';\nimport useSheetName from '../../spreadsheet/useSheetName';\nimport useSheetValue from '../../spreadsheet/useSheetValue';\nimport { Tooltip } from '../../tooltips';\n\nimport HoldTooltip from './HoldTooltip';\nimport { useRollover } from './RolloverContext';\nimport TransferTooltip from './TransferTooltip';\n\ntype TotalsListProps = {\n prevMonthName: string;\n collapsed?: boolean;\n};\nfunction TotalsList({ prevMonthName, collapsed }: TotalsListProps) {\n const format = useFormat();\n return (\n <View\n style={{\n flexDirection: 'row',\n lineHeight: 1.5,\n justifyContent: 'center',\n ...(!collapsed && {\n padding: '5px 0',\n marginTop: 17,\n backgroundColor: theme.tableRowHeaderBackground,\n borderTopWidth: 1,\n borderBottomWidth: 1,\n borderColor: theme.tableBorder,\n }),\n ...(collapsed && {\n padding: 7,\n }),\n ...styles.smallText,\n }}\n >\n <View\n style={{\n textAlign: 'right',\n marginRight: 10,\n minWidth: 50,\n }}\n >\n <HoverTarget\n style={{ flexShrink: 0 }}\n renderContent={() => (\n <Tooltip\n width={200}\n style={{ lineHeight: 1.5, padding: '6px 10px' }}\n >\n <AlignedText\n left=\"Income:\"\n right={\n <CellValue\n binding={rolloverBudget.totalIncome}\n type=\"financial\"\n privacyFilter={false}\n />\n }\n />\n <AlignedText\n left=\"From Last Month:\"\n right={\n <CellValue\n binding={rolloverBudget.fromLastMonth}\n type=\"financial\"\n privacyFilter={false}\n />\n }\n />\n </Tooltip>\n )}\n >\n <CellValue\n binding={rolloverBudget.incomeAvailable}\n type=\"financial\"\n style={{ fontWeight: 600 }}\n />\n </HoverTarget>\n\n <CellValue\n binding={rolloverBudget.lastMonthOverspent}\n type=\"financial\"\n formatter={value => {\n let v = format(value, 'financial');\n return value > 0 ? '+' + v : value === 0 ? '-' + v : v;\n }}\n style={{ fontWeight: 600, ...styles.tnum }}\n />\n\n <CellValue\n binding={rolloverBudget.totalBudgeted}\n type=\"financial\"\n formatter={value => {\n let v = format(value, 'financial');\n return value > 0 ? '+' + v : value === 0 ? '-' + v : v;\n }}\n style={{ fontWeight: 600, ...styles.tnum }}\n />\n\n <CellValue\n binding={rolloverBudget.forNextMonth}\n type=\"financial\"\n formatter={value => {\n let n = parseInt(value) || 0;\n let v = format(Math.abs(n), 'financial');\n return n >= 0 ? '-' + v : '+' + v;\n }}\n style={{ fontWeight: 600, ...styles.tnum }}\n />\n </View>\n\n <View>\n <Block>Available Funds</Block>\n <Block>Overspent in {prevMonthName}</Block>\n <Block>Budgeted</Block>\n <Block>For Next Month</Block>\n </View>\n </View>\n );\n}\n\ntype ToBudgetProps = {\n month: string | number;\n prevMonthName?: string;\n collapsed?: boolean;\n onBudgetAction: (idx: string | number, action: string, arg?: unknown) => void;\n};\nfunction ToBudget({\n month,\n prevMonthName,\n collapsed,\n onBudgetAction,\n}: ToBudgetProps) {\n let [menuOpen, setMenuOpen] = useState(null);\n let sheetName = useSheetName(rolloverBudget.toBudget);\n let sheetValue = useSheetValue({\n name: rolloverBudget.toBudget,\n value: 0,\n });\n let format = useFormat();\n let availableValue = parseInt(sheetValue);\n let num = isNaN(availableValue) ? 0 : availableValue;\n let isNegative = num < 0;\n\n return (\n <View style={{ alignItems: 'center' }}>\n <Block>{isNegative ? 'Overbudgeted:' : 'To Budget:'}</Block>\n <View>\n <HoverTarget\n disabled={!collapsed || menuOpen}\n renderContent={() => (\n <Tooltip position=\"bottom-center\">\n <TotalsList collapsed={true} prevMonthName={prevMonthName} />\n </Tooltip>\n )}\n >\n <PrivacyFilter blurIntensity={7}>\n <Block\n onClick={() => setMenuOpen('actions')}\n data-cellname={sheetName}\n className={`${css([\n styles.veryLargeText,\n {\n fontWeight: 400,\n userSelect: 'none',\n cursor: 'pointer',\n color: isNegative ? theme.errorText : theme.pageTextPositive,\n marginBottom: -1,\n borderBottom: '1px solid transparent',\n ':hover': {\n borderColor: isNegative\n ? theme.errorBorder\n : theme.pageTextPositive,\n },\n },\n ])}`}\n >\n {format(num, 'financial')}\n </Block>\n </PrivacyFilter>\n </HoverTarget>\n {menuOpen === 'actions' && (\n <Tooltip\n position=\"bottom-center\"\n width={200}\n style={{ padding: 0 }}\n onClose={() => setMenuOpen(null)}\n >\n <Menu\n onMenuSelect={type => {\n if (type === 'reset-buffer') {\n onBudgetAction(month, 'reset-hold');\n setMenuOpen(null);\n } else {\n setMenuOpen(type);\n }\n }}\n items={[\n {\n name: 'transfer',\n text: 'Move to a category',\n },\n {\n name: 'buffer',\n text: 'Hold for next month',\n },\n {\n name: 'reset-buffer',\n text: 'Reset next month’s buffer',\n },\n ]}\n />\n </Tooltip>\n )}\n {menuOpen === 'buffer' && (\n <HoldTooltip\n onClose={() => setMenuOpen(null)}\n onSubmit={amount => {\n onBudgetAction(month, 'hold', { amount });\n }}\n />\n )}\n {menuOpen === 'transfer' && (\n <TransferTooltip\n initialAmount={availableValue}\n onClose={() => setMenuOpen(null)}\n onSubmit={(amount, category) => {\n onBudgetAction(month, 'transfer-available', {\n amount,\n category,\n });\n }}\n />\n )}\n </View>\n </View>\n );\n}\n\ntype BudgetSummaryProps = {\n month: string;\n isGoalTemplatesEnabled: boolean;\n};\nexport function BudgetSummary({\n month,\n isGoalTemplatesEnabled,\n}: BudgetSummaryProps) {\n let {\n currentMonth,\n summaryCollapsed: collapsed,\n onBudgetAction,\n onToggleSummaryCollapse,\n } = useRollover();\n\n let [menuOpen, setMenuOpen] = useState(false);\n function onMenuOpen(e) {\n setMenuOpen(true);\n }\n\n function onMenuClose() {\n setMenuOpen(false);\n }\n\n let prevMonthName = monthUtils.format(monthUtils.prevMonth(month), 'MMM');\n\n let ExpandOrCollapseIcon = collapsed ? ArrowButtonDown1 : ArrowButtonUp1;\n\n return (\n <View\n data-testid=\"budget-summary\"\n style={{\n backgroundColor: theme.tableBackground,\n boxShadow: styles.cardShadow,\n borderRadius: 6,\n marginLeft: 0,\n marginRight: 0,\n marginTop: 5,\n flex: 1,\n cursor: 'default',\n marginBottom: 5,\n overflow: 'hidden',\n '& .hover-visible': {\n opacity: 0,\n transition: 'opacity .25s',\n },\n '&:hover .hover-visible': {\n opacity: 1,\n },\n }}\n >\n <NamespaceContext.Provider value={monthUtils.sheetForMonth(month)}>\n <View\n style={{\n padding: '0 13px',\n ...(collapsed ? { margin: '10px 0' } : { marginTop: 16 }),\n }}\n >\n <View\n style={{\n position: 'absolute',\n left: 10,\n top: 0,\n }}\n >\n <Button\n type=\"bare\"\n className=\"hover-visible\"\n onClick={onToggleSummaryCollapse}\n >\n <ExpandOrCollapseIcon\n width={13}\n height={13}\n // The margin is to make it the exact same size as the dots button\n style={{ color: theme.altTableText, margin: 1 }}\n />\n </Button>\n </View>\n\n <div\n className={`${css([\n {\n textAlign: 'center',\n marginTop: 3,\n fontSize: 18,\n fontWeight: 500,\n textDecorationSkip: 'ink',\n },\n currentMonth === month && { fontWeight: 'bold' },\n ])}`}\n >\n {monthUtils.format(month, 'MMMM')}\n </div>\n\n <View\n style={{\n position: 'absolute',\n right: 10,\n top: 0,\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <View>\n <NotesButton\n id={`budget-${month}`}\n width={15}\n height={15}\n tooltipPosition=\"bottom-right\"\n defaultColor={theme.altTableText}\n />\n </View>\n <View style={{ userSelect: 'none', marginLeft: 2 }}>\n <Button type=\"bare\" onClick={onMenuOpen}>\n <DotsHorizontalTriple\n width={15}\n height={15}\n style={{ color: theme.alt2PillText }}\n />\n </Button>\n {menuOpen && (\n <Tooltip\n position=\"bottom-right\"\n width={200}\n style={{ padding: 0 }}\n onClose={onMenuClose}\n >\n <Menu\n onMenuSelect={type => {\n onMenuClose();\n onBudgetAction(month, type);\n }}\n items={[\n { name: 'copy-last', text: 'Copy last month’s budget' },\n { name: 'set-zero', text: 'Set budgets to zero' },\n {\n name: 'set-3-avg',\n text: 'Set budgets to 3 month average',\n },\n isGoalTemplatesEnabled && {\n name: 'check-templates',\n text: 'Check templates',\n },\n isGoalTemplatesEnabled && {\n name: 'apply-goal-template',\n text: 'Apply budget template',\n },\n isGoalTemplatesEnabled && {\n name: 'overwrite-goal-template',\n text: 'Overwrite with budget template',\n },\n isGoalTemplatesEnabled && {\n name: 'cleanup-goal-template',\n text: 'End of month cleanup',\n },\n ]}\n />\n </Tooltip>\n )}\n </View>\n </View>\n </View>\n\n {collapsed ? (\n <View\n style={{\n alignItems: 'center',\n padding: '10px 20px',\n justifyContent: 'space-between',\n backgroundColor: theme.tableHeaderBackground,\n borderTop: '1px solid ' + theme.tableBorder,\n }}\n >\n <ToBudget\n collapsed={collapsed}\n prevMonthName={prevMonthName}\n month={month}\n onBudgetAction={onBudgetAction}\n />\n </View>\n ) : (\n <>\n <TotalsList prevMonthName={prevMonthName} />\n <View style={{ margin: '23px 0' }}>\n <ToBudget month={month} onBudgetAction={onBudgetAction} />\n </View>\n </>\n )}\n </NamespaceContext.Provider>\n </View>\n );\n}\n","import React, { memo, useState } from 'react';\n\nimport { rolloverBudget } from 'loot-core/src/client/queries';\nimport evalArithmetic from 'loot-core/src/shared/arithmetic';\nimport { integerToCurrency, amountToInteger } from 'loot-core/src/shared/util';\n\nimport useFeatureFlag from '../../../hooks/useFeatureFlag';\nimport CheveronDown from '../../../icons/v1/CheveronDown';\nimport { styles, theme, type CSSProperties } from '../../../style';\nimport Button from '../../common/Button';\nimport Menu from '../../common/Menu';\nimport Text from '../../common/Text';\nimport View from '../../common/View';\nimport CellValue from '../../spreadsheet/CellValue';\nimport useFormat from '../../spreadsheet/useFormat';\nimport { Row, Field, SheetCell } from '../../table';\nimport { Tooltip, useTooltip } from '../../tooltips';\nimport BalanceWithCarryover from '../BalanceWithCarryover';\nimport { makeAmountGrey } from '../util';\n\nimport BalanceTooltip from './BalanceTooltip';\n\nexport { BudgetSummary } from './BudgetSummary';\n\nlet headerLabelStyle: CSSProperties = {\n flex: 1,\n padding: '0 5px',\n textAlign: 'right',\n};\n\nexport const BudgetTotalsMonth = memo(function BudgetTotalsMonth() {\n const format = useFormat();\n return (\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n marginRight: styles.monthRightPadding,\n paddingTop: 10,\n paddingBottom: 10,\n }}\n >\n <View style={headerLabelStyle}>\n <Text style={{ color: theme.alt2TableText }}>Budgeted</Text>\n <CellValue\n binding={rolloverBudget.totalBudgeted}\n type=\"financial\"\n style={{ color: theme.alt2TableText, fontWeight: 600 }}\n formatter={value => {\n return format(-parseFloat(value || '0'), 'financial');\n }}\n />\n </View>\n <View style={headerLabelStyle}>\n <Text style={{ color: theme.alt2TableText }}>Spent</Text>\n <CellValue\n binding={rolloverBudget.totalSpent}\n type=\"financial\"\n style={{ color: theme.alt2TableText, fontWeight: 600 }}\n />\n </View>\n <View style={headerLabelStyle}>\n <Text style={{ color: theme.alt2TableText }}>Balance</Text>\n <CellValue\n binding={rolloverBudget.totalBalance}\n type=\"financial\"\n style={{ color: theme.alt2TableText, fontWeight: 600 }}\n />\n </View>\n </View>\n );\n});\n\nexport function IncomeHeaderMonth() {\n return (\n <Row\n style={{\n color: theme.alt2TableText,\n alignItems: 'center',\n paddingRight: 10,\n }}\n >\n <View style={{ flex: 1, textAlign: 'right' }}>Received</View>\n </Row>\n );\n}\n\ntype ExpenseGroupMonthProps = {\n group: { id: string };\n};\nexport const ExpenseGroupMonth = memo(function ExpenseGroupMonth({\n group,\n}: ExpenseGroupMonthProps) {\n let { id } = group;\n\n return (\n <View style={{ flex: 1, flexDirection: 'row' }}>\n <SheetCell\n name=\"budgeted\"\n width=\"flex\"\n textAlign=\"right\"\n style={{ fontWeight: 600, ...styles.tnum }}\n valueProps={{\n binding: rolloverBudget.groupBudgeted(id),\n type: 'financial',\n }}\n />\n <SheetCell\n name=\"spent\"\n width=\"flex\"\n textAlign=\"right\"\n style={{ fontWeight: 600, ...styles.tnum }}\n valueProps={{\n binding: rolloverBudget.groupSumAmount(id),\n type: 'financial',\n }}\n />\n <SheetCell\n name=\"balance\"\n width=\"flex\"\n textAlign=\"right\"\n style={{\n fontWeight: 600,\n paddingRight: styles.monthRightPadding,\n ...styles.tnum,\n }}\n valueProps={{\n binding: rolloverBudget.groupBalance(id),\n type: 'financial',\n privacyFilter: {\n style: {\n paddingRight: styles.monthRightPadding,\n },\n },\n }}\n />\n </View>\n );\n});\n\ntype ExpenseCategoryMonthProps = {\n monthIndex: number;\n category: { id: string; name: string; is_income: boolean };\n editing: boolean;\n onEdit: (id: string | null, idx?: number) => void;\n onBudgetAction: (idx: number, action: string, arg?: unknown) => void;\n onShowActivity: (name: string, id: string, idx: number) => void;\n};\nexport const ExpenseCategoryMonth = memo(function ExpenseCategoryMonth({\n monthIndex,\n category,\n editing,\n onEdit,\n onBudgetAction,\n onShowActivity,\n}: ExpenseCategoryMonthProps) {\n let balanceTooltip = useTooltip();\n const [menuOpen, setMenuOpen] = useState(false);\n const [hover, setHover] = useState(false);\n const isGoalTemplatesEnabled = useFeatureFlag('goalTemplatesEnabled');\n\n return (\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n '& .hover-visible': {\n opacity: 0,\n transition: 'opacity .25s',\n },\n '&:hover .hover-visible': {\n opacity: 1,\n },\n }}\n >\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n }}\n onMouseOverCapture={() => setHover(true)}\n onMouseLeave={() => {\n setHover(false);\n }}\n >\n {!editing && (hover || menuOpen) ? (\n <View\n style={{\n flexShrink: 1,\n paddingLeft: 3,\n justifyContent: 'center',\n borderTopWidth: 1,\n borderColor: theme.tableBorder,\n }}\n >\n <Button\n type=\"bare\"\n onClick={e => {\n e.stopPropagation();\n setMenuOpen(true);\n }}\n style={{\n padding: 3,\n }}\n >\n <CheveronDown\n width={14}\n height={14}\n className=\"hover-visible\"\n style={menuOpen && { opacity: 1 }}\n />\n </Button>\n {menuOpen && (\n <Tooltip\n position=\"bottom-left\"\n width={200}\n style={{ padding: 0 }}\n onClose={() => setMenuOpen(false)}\n >\n <Menu\n onMenuSelect={type => {\n onBudgetAction(monthIndex, type, { category: category.id });\n setMenuOpen(false);\n }}\n items={[\n {\n name: 'copy-single-last',\n text: 'Copy last month’s budget',\n },\n {\n name: 'set-single-3-avg',\n text: 'Set to 3 month average',\n },\n {\n name: 'set-single-6-avg',\n text: 'Set to 6 month average',\n },\n {\n name: 'set-single-12-avg',\n text: 'Set to yearly average',\n },\n isGoalTemplatesEnabled && {\n name: 'apply-single-category-template',\n text: 'Apply budget template',\n },\n ]}\n />\n </Tooltip>\n )}\n </View>\n ) : null}\n <SheetCell\n name=\"budget\"\n exposed={editing}\n focused={editing}\n width=\"flex\"\n onExpose={() => onEdit(category.id, monthIndex)}\n style={{ ...(editing && { zIndex: 100 }), ...styles.tnum }}\n textAlign=\"right\"\n valueStyle={{\n cursor: 'default',\n margin: 1,\n padding: '0 4px',\n borderRadius: 4,\n ':hover': {\n boxShadow: 'inset 0 0 0 1px ' + theme.mobileAccountShadow,\n backgroundColor: 'white',\n },\n }}\n valueProps={{\n binding: rolloverBudget.catBudgeted(category.id),\n type: 'financial',\n getValueStyle: makeAmountGrey,\n formatExpr: expr => {\n return integerToCurrency(expr);\n },\n unformatExpr: expr => {\n return amountToInteger(evalArithmetic(expr, 0));\n },\n }}\n inputProps={{\n onBlur: () => {\n onEdit(null);\n },\n style: {\n backgroundColor: 'white',\n },\n }}\n onSave={amount => {\n onBudgetAction(monthIndex, 'budget-amount', {\n category: category.id,\n amount,\n });\n }}\n />\n </View>\n <Field name=\"spent\" width=\"flex\" style={{ textAlign: 'right' }}>\n <span\n data-testid=\"category-month-spent\"\n onClick={() => onShowActivity(category.name, category.id, monthIndex)}\n >\n <CellValue\n binding={rolloverBudget.catSumAmount(category.id)}\n type=\"financial\"\n getStyle={makeAmountGrey}\n style={{\n cursor: 'pointer',\n ':hover': { textDecoration: 'underline' },\n }}\n />\n </span>\n </Field>\n <Field\n name=\"balance\"\n truncate={false}\n width=\"flex\"\n style={{ paddingRight: styles.monthRightPadding, textAlign: 'right' }}\n >\n <span {...balanceTooltip.getOpenEvents()}>\n <BalanceWithCarryover\n carryover={rolloverBudget.catCarryover(category.id)}\n balance={rolloverBudget.catBalance(category.id)}\n />\n </span>\n {balanceTooltip.isOpen && (\n <BalanceTooltip\n categoryId={category.id}\n tooltip={balanceTooltip}\n monthIndex={monthIndex}\n onBudgetAction={onBudgetAction}\n />\n )}\n </Field>\n </View>\n );\n});\n\nexport function IncomeGroupMonth() {\n return (\n <View style={{ flex: 1 }}>\n <SheetCell\n name=\"received\"\n width=\"flex\"\n textAlign=\"right\"\n style={{\n fontWeight: 600,\n paddingRight: styles.monthRightPadding,\n ...styles.tnum,\n }}\n valueProps={{\n binding: rolloverBudget.groupIncomeReceived,\n type: 'financial',\n privacyFilter: {\n style: {\n paddingRight: styles.monthRightPadding,\n },\n },\n }}\n />\n </View>\n );\n}\n\ntype IncomeCategoryMonthProps = {\n category: { id: string; name: string };\n isLast: boolean;\n monthIndex: number;\n onShowActivity: (name: string, id: string, idx: number) => void;\n};\nexport function IncomeCategoryMonth({\n category,\n isLast,\n monthIndex,\n onShowActivity,\n}: IncomeCategoryMonthProps) {\n return (\n <View style={{ flex: 1 }}>\n <Field\n name=\"received\"\n width=\"flex\"\n style={{\n paddingRight: styles.monthRightPadding,\n textAlign: 'right',\n ...(isLast && { borderBottomWidth: 0 }),\n }}\n >\n <span\n onClick={() => onShowActivity(category.name, category.id, monthIndex)}\n >\n <CellValue\n binding={rolloverBudget.catSumAmount(category.id)}\n type=\"financial\"\n style={{\n cursor: 'pointer',\n ':hover': { textDecoration: 'underline' },\n }}\n />\n </span>\n </Field>\n </View>\n );\n}\n","import React, {\n memo,\n useContext,\n useMemo,\n useState,\n useEffect,\n useRef,\n} from 'react';\nimport { useSelector } from 'react-redux';\nimport { useLocation, useMatch } from 'react-router-dom';\n\nimport { useSpreadsheet } from 'loot-core/src/client/SpreadsheetProvider';\nimport { send, listen } from 'loot-core/src/platform/client/fetch';\nimport {\n addCategory,\n updateCategory,\n moveCategory,\n moveCategoryGroup,\n deleteCategory,\n addGroup,\n updateGroup,\n deleteGroup,\n} from 'loot-core/src/shared/categories';\nimport * as monthUtils from 'loot-core/src/shared/months';\n\nimport { useActions } from '../../hooks/useActions';\nimport useCategories from '../../hooks/useCategories';\nimport useFeatureFlag from '../../hooks/useFeatureFlag';\nimport useNavigate from '../../hooks/useNavigate';\nimport { styles } from '../../style';\nimport View from '../common/View';\nimport { TitlebarContext } from '../Titlebar';\n\nimport DynamicBudgetTable from './DynamicBudgetTable';\nimport { getValidMonthBounds } from './MonthsContext';\nimport * as report from './report/components';\nimport { ReportProvider } from './report/ReportContext';\nimport * as rollover from './rollover/rollover-components';\nimport { RolloverContext } from './rollover/RolloverContext';\n\nfunction Budget(props) {\n const currentMonth = monthUtils.currentMonth();\n const tableRef = useRef(null);\n\n const [initialized, setInitialized] = useState(false);\n const [prewarmStartMonth, setPrewarmStartMonth] = useState(\n props.startMonth || currentMonth,\n );\n\n const [newCategoryForGroup, setNewCategoryForGroup] = useState(null);\n const [isAddingGroup, setIsAddingGroup] = useState(false);\n const [collapsed, setCollapsed] = useState(props.collapsedPrefs || []);\n const [bounds, setBounds] = useState({\n start: currentMonth,\n end: currentMonth,\n });\n const [categoryGroups, setCategoryGroups] = useState(null);\n const [summaryCollapsed, setSummaryCollapsed] = useState(\n props.summaryCollapsed,\n );\n\n async function loadCategories() {\n let result = await props.getCategories();\n setCategoryGroups(result.grouped);\n }\n\n useEffect(() => {\n let { titlebar, budgetType } = props;\n\n async function run() {\n loadCategories();\n\n let { start, end } = await send('get-budget-bounds');\n setBounds({ start, end });\n\n prewarmAllMonths({ start, end }, budgetType);\n }\n\n run();\n\n let unlistens = [\n listen('sync-event', ({ type, tables }) => {\n if (\n type === 'success' &&\n (tables.includes('categories') ||\n tables.includes('category_mapping') ||\n tables.includes('category_groups'))\n ) {\n loadCategories();\n }\n }),\n\n listen('undo-event', ({ tables }) => {\n if (tableRef.current) {\n // g dammit\n // We need to clear the editing cell, otherwise when\n // the user navigates away from the page they will\n // accidentally clear the undo stack if they have pressed\n // undo, since the cell will save itself on blur (worst case:\n // undo takes you to another screen and then you can't redo\n // any of the budget changes)\n tableRef.current.clearEditing();\n }\n\n if (tables.includes('categories')) {\n loadCategories();\n }\n }),\n\n titlebar.subscribe(onTitlebarEvent),\n ];\n\n return () => {\n unlistens.forEach(unlisten => unlisten());\n };\n }, []);\n\n useEffect(() => {\n props.savePrefs({ 'budget.collapsed': collapsed });\n }, [collapsed]);\n\n useEffect(() => {\n send('get-budget-bounds').then(({ start, end }) => {\n if (bounds.start !== start || bounds.end !== end) {\n setBounds({ start, end });\n }\n });\n }, [props.accountId]);\n\n const prewarmMonth = async (month, type = null) => {\n type = type || props.budgetType;\n\n let method =\n type === 'report' ? 'report-budget-month' : 'rollover-budget-month';\n\n let values = await send(method, { month });\n\n for (let value of values) {\n props.spreadsheet.prewarmCache(value.name, value);\n }\n };\n\n async function prewarmAllMonths(bounds, type = null) {\n let numMonths = 3;\n\n const startMonth = props.startMonth || currentMonth;\n\n bounds = getValidMonthBounds(\n bounds,\n monthUtils.subMonths(startMonth, 1),\n monthUtils.addMonths(startMonth, numMonths + 1),\n );\n let months = monthUtils.rangeInclusive(bounds.start, bounds.end);\n\n await Promise.all(months.map(month => prewarmMonth(month, type)));\n\n setInitialized(true);\n }\n\n const onMonthSelect = async (month, numDisplayed) => {\n setPrewarmStartMonth(month);\n\n const warmingMonth = month;\n\n const startMonth = props.startMonth || currentMonth;\n\n // We could be smarter about this, but this is a good start. We\n // optimize for the case where users press the left/right button\n // to move between months. This loads the month data all at once\n // and \"prewarms\" the spreadsheet cache. This uses a simple\n // heuristic that will fail if the user clicks an arbitrary month,\n // but it will just load in some unnecessary data.\n if (month < startMonth) {\n // pre-warm prev month\n await prewarmMonth(monthUtils.subMonths(month, 1));\n } else if (month > startMonth) {\n // pre-warm next month\n await prewarmMonth(monthUtils.addMonths(month, numDisplayed));\n }\n\n if (warmingMonth === month) {\n props.savePrefs({ 'budget.startMonth': month });\n }\n };\n\n const onShowNewCategory = groupId => {\n setNewCategoryForGroup(groupId);\n setCollapsed(state => state.filter(c => c !== groupId));\n };\n\n const onHideNewCategory = () => {\n setNewCategoryForGroup(null);\n };\n\n const onShowNewGroup = () => {\n setIsAddingGroup(true);\n };\n\n const onHideNewGroup = () => {\n setIsAddingGroup(false);\n };\n\n const onSaveCategory = async category => {\n if (category.id === 'new') {\n let id = await props.createCategory(\n category.name,\n category.cat_group,\n category.is_income,\n );\n\n setNewCategoryForGroup(null);\n setCategoryGroups(state =>\n addCategory(state, {\n ...category,\n is_income: category.is_income ? 1 : 0,\n id,\n }),\n );\n } else {\n props.updateCategory(category);\n setCategoryGroups(state => updateCategory(state, category));\n }\n };\n\n const onDeleteCategory = async id => {\n const mustTransfer = await send('must-category-transfer', { id });\n\n if (mustTransfer) {\n props.pushModal('confirm-category-delete', {\n category: id,\n onDelete: transferCategory => {\n if (id !== transferCategory) {\n props.deleteCategory(id, transferCategory);\n\n setCategoryGroups(state => deleteCategory(state, id));\n }\n },\n });\n } else {\n props.deleteCategory(id);\n\n setCategoryGroups(state => deleteCategory(state, id));\n }\n };\n\n const onSaveGroup = async group => {\n if (group.id === 'new') {\n let id = await props.createGroup(group.name);\n setIsAddingGroup(false);\n setCategoryGroups(state =>\n addGroup(state, {\n ...group,\n is_income: 0,\n categories: group.categories || [],\n id,\n }),\n );\n } else {\n props.updateGroup(group);\n setCategoryGroups(state => updateGroup(state, group));\n }\n };\n\n const onDeleteGroup = async id => {\n let group = categoryGroups.find(g => g.id === id);\n\n let mustTransfer = false;\n for (let category of group.categories) {\n if (await send('must-category-transfer', { id: category.id })) {\n mustTransfer = true;\n break;\n }\n }\n\n if (mustTransfer) {\n props.pushModal('confirm-category-delete', {\n group: id,\n onDelete: transferCategory => {\n props.deleteGroup(id, transferCategory);\n\n setCategoryGroups(state => deleteGroup(state, id));\n },\n });\n } else {\n props.deleteGroup(id);\n\n setCategoryGroups(state => deleteGroup(state, id));\n }\n };\n\n const onBudgetAction = (month, type, args) => {\n props.applyBudgetAction(month, type, args);\n };\n\n const onShowActivity = (categoryName, categoryId, month) => {\n props.navigate('/accounts', {\n state: {\n goBack: true,\n filterName: `${categoryName} (${monthUtils.format(\n month,\n 'MMMM yyyy',\n )})`,\n filter: {\n category: categoryId,\n date: { $transform: '$month', $eq: month },\n },\n },\n });\n };\n\n const onReorderCategory = async sortInfo => {\n props.moveCategory(sortInfo.id, sortInfo.groupId, sortInfo.targetId);\n setCategoryGroups(state =>\n moveCategory(state, sortInfo.id, sortInfo.groupId, sortInfo.targetId),\n );\n };\n\n const onReorderGroup = async sortInfo => {\n props.moveCategoryGroup(sortInfo.id, sortInfo.targetId);\n setCategoryGroups(state =>\n moveCategoryGroup(state, sortInfo.id, sortInfo.targetId),\n );\n };\n\n const onToggleCollapse = () => {\n let collapsed = !summaryCollapsed;\n setSummaryCollapsed(collapsed);\n props.savePrefs({ 'budget.summaryCollapsed': collapsed });\n };\n\n const onTitlebarEvent = async msg => {\n switch (msg) {\n case 'budget/switch-type': {\n let type = props.budgetType;\n let newType = type === 'rollover' ? 'report' : 'rollover';\n\n props.spreadsheet.disableObservers();\n await send('budget-set-type', { type: newType });\n await prewarmAllMonths(bounds, newType);\n props.spreadsheet.enableObservers();\n props.loadPrefs();\n break;\n }\n default:\n }\n };\n\n let {\n maxMonths,\n budgetType: type,\n reportComponents,\n rolloverComponents,\n } = props;\n\n maxMonths = maxMonths || 1;\n\n if (!initialized || !categoryGroups) {\n return null;\n }\n\n const startMonth = props.startMonth || currentMonth;\n\n let table;\n if (type === 'report') {\n table = (\n <ReportProvider\n summaryCollapsed={summaryCollapsed}\n onBudgetAction={onBudgetAction}\n onToggleSummaryCollapse={onToggleCollapse}\n >\n <DynamicBudgetTable\n ref={tableRef}\n type={type}\n categoryGroups={categoryGroups}\n prewarmStartMonth={prewarmStartMonth}\n startMonth={startMonth}\n monthBounds={bounds}\n maxMonths={maxMonths}\n collapsed={collapsed}\n setCollapsed={setCollapsed}\n newCategoryForGroup={newCategoryForGroup}\n isAddingGroup={isAddingGroup}\n dataComponents={reportComponents}\n onMonthSelect={onMonthSelect}\n onShowNewCategory={onShowNewCategory}\n onHideNewCategory={onHideNewCategory}\n onShowNewGroup={onShowNewGroup}\n onHideNewGroup={onHideNewGroup}\n onDeleteCategory={onDeleteCategory}\n onDeleteGroup={onDeleteGroup}\n onSaveCategory={onSaveCategory}\n onSaveGroup={onSaveGroup}\n onBudgetAction={onBudgetAction}\n onShowActivity={onShowActivity}\n onReorderCategory={onReorderCategory}\n onReorderGroup={onReorderGroup}\n />\n </ReportProvider>\n );\n } else {\n table = (\n <RolloverContext\n categoryGroups={categoryGroups}\n summaryCollapsed={summaryCollapsed}\n onBudgetAction={onBudgetAction}\n onToggleSummaryCollapse={onToggleCollapse}\n >\n <DynamicBudgetTable\n ref={tableRef}\n type={type}\n categoryGroups={categoryGroups}\n prewarmStartMonth={prewarmStartMonth}\n startMonth={startMonth}\n monthBounds={bounds}\n maxMonths={maxMonths}\n collapsed={collapsed}\n setCollapsed={setCollapsed}\n newCategoryForGroup={newCategoryForGroup}\n isAddingGroup={isAddingGroup}\n dataComponents={rolloverComponents}\n onMonthSelect={onMonthSelect}\n onShowNewCategory={onShowNewCategory}\n onHideNewCategory={onHideNewCategory}\n onShowNewGroup={onShowNewGroup}\n onHideNewGroup={onHideNewGroup}\n onDeleteCategory={onDeleteCategory}\n onDeleteGroup={onDeleteGroup}\n onSaveCategory={onSaveCategory}\n onSaveGroup={onSaveGroup}\n onBudgetAction={onBudgetAction}\n onShowActivity={onShowActivity}\n onReorderCategory={onReorderCategory}\n onReorderGroup={onReorderGroup}\n />\n </RolloverContext>\n );\n }\n\n return <View style={{ flex: 1 }}>{table}</View>;\n}\n\nconst RolloverBudgetSummary = memo(props => {\n const isGoalTemplatesEnabled = useFeatureFlag('goalTemplatesEnabled');\n return (\n <rollover.BudgetSummary\n {...props}\n isGoalTemplatesEnabled={isGoalTemplatesEnabled}\n />\n );\n});\n\nexport default function BudgetWrapper(props) {\n let startMonth = useSelector(state => state.prefs.local['budget.startMonth']);\n let collapsedPrefs = useSelector(\n state => state.prefs.local['budget.collapsed'],\n );\n let summaryCollapsed = useSelector(\n state => state.prefs.local['budget.summaryCollapsed'],\n );\n let budgetType = useSelector(\n state => state.prefs.local.budgetType || 'rollover',\n );\n let maxMonths = useSelector(state => state.prefs.global.maxMonths);\n let { grouped: categoryGroups } = useCategories();\n\n let actions = useActions();\n let spreadsheet = useSpreadsheet();\n let titlebar = useContext(TitlebarContext);\n let location = useLocation();\n let match = useMatch(location.pathname);\n let navigate = useNavigate();\n\n let reportComponents = useMemo(\n () => ({\n SummaryComponent: report.BudgetSummary,\n ExpenseCategoryComponent: report.ExpenseCategoryMonth,\n ExpenseGroupComponent: report.ExpenseGroupMonth,\n IncomeCategoryComponent: report.IncomeCategoryMonth,\n IncomeGroupComponent: report.IncomeGroupMonth,\n BudgetTotalsComponent: report.BudgetTotalsMonth,\n IncomeHeaderComponent: report.IncomeHeaderMonth,\n }),\n [report],\n );\n\n let rolloverComponents = useMemo(\n () => ({\n SummaryComponent: RolloverBudgetSummary,\n ExpenseCategoryComponent: rollover.ExpenseCategoryMonth,\n ExpenseGroupComponent: rollover.ExpenseGroupMonth,\n IncomeCategoryComponent: rollover.IncomeCategoryMonth,\n IncomeGroupComponent: rollover.IncomeGroupMonth,\n BudgetTotalsComponent: rollover.BudgetTotalsMonth,\n IncomeHeaderComponent: rollover.IncomeHeaderMonth,\n }),\n [rollover],\n );\n\n // In a previous iteration, the wrapper needs `overflow: hidden` for\n // some reason. Without it at certain dimensions the width/height\n // that autosizer gives us is slightly wrong, causing scrollbars to\n // appear. We might not need it anymore?\n return (\n <View\n style={{\n ...styles.page,\n paddingLeft: 8,\n paddingRight: 8,\n overflow: 'hidden',\n }}\n >\n <Budget\n startMonth={startMonth}\n collapsedPrefs={collapsedPrefs}\n summaryCollapsed={summaryCollapsed}\n budgetType={budgetType}\n maxMonths={maxMonths}\n categoryGroups={categoryGroups}\n {...actions}\n reportComponents={reportComponents}\n rolloverComponents={rolloverComponents}\n spreadsheet={spreadsheet}\n titlebar={titlebar}\n navigate={navigate}\n match={match}\n />\n </View>\n );\n}\n","import React, { useState } from 'react';\n\nimport { useSchedules } from 'loot-core/src/client/data-hooks/schedules';\nimport { send } from 'loot-core/src/platform/client/fetch';\nimport { type ScheduleEntity } from 'loot-core/src/types/models';\n\nimport { useActions } from '../../hooks/useActions';\nimport { theme } from '../../style';\nimport Button from '../common/Button';\nimport Search from '../common/Search';\nimport View from '../common/View';\nimport { Page } from '../Page';\n\nimport { SchedulesTable, type ScheduleItemAction } from './SchedulesTable';\n\nexport default function Schedules() {\n const { pushModal } = useActions();\n const [filter, setFilter] = useState('');\n\n const scheduleData = useSchedules();\n\n if (scheduleData == null) {\n return null;\n }\n\n const { schedules, statuses } = scheduleData;\n\n function onEdit(id: ScheduleEntity['id']) {\n pushModal('schedule-edit', { id });\n }\n\n function onAdd() {\n pushModal('schedule-edit');\n }\n\n function onDiscover() {\n pushModal('schedules-discover');\n }\n\n async function onAction(name: ScheduleItemAction, id: ScheduleEntity['id']) {\n switch (name) {\n case 'post-transaction':\n await send('schedule/post-transaction', { id });\n break;\n case 'skip':\n await send('schedule/skip-next-date', { id });\n break;\n case 'complete':\n await send('schedule/update', {\n schedule: { id, completed: true },\n });\n break;\n case 'restart':\n await send('schedule/update', {\n schedule: { id, completed: false },\n resetNextDate: true,\n });\n break;\n case 'delete':\n await send('schedule/delete', { id });\n break;\n default:\n }\n }\n\n return (\n <Page title=\"Schedules\">\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n padding: '0 0 15px',\n }}\n >\n <View\n style={{\n flex: 1,\n flexDirection: 'row',\n justifyContent: 'flex-end',\n }}\n >\n <Search\n placeholder=\"Filter schedules…\"\n value={filter}\n onChange={setFilter}\n />\n </View>\n </View>\n\n <SchedulesTable\n schedules={schedules}\n filter={filter}\n statuses={statuses}\n allowCompleted={true}\n onSelect={onEdit}\n onAction={onAction}\n style={{ backgroundColor: theme.tableBackground }}\n />\n\n <View\n style={{\n flexDirection: 'row',\n justifyContent: 'space-between',\n margin: '20px 0',\n flexShrink: 0,\n }}\n >\n <Button onClick={onDiscover}>Find schedules</Button>\n <Button type=\"primary\" onClick={onAdd}>\n Add new schedule\n </Button>\n </View>\n </Page>\n );\n}\n","import React from 'react';\n\nimport Modal from '../common/Modal';\nimport Paragraph from '../common/Paragraph';\nimport View from '../common/View';\n\nexport default function GoCardlessLink() {\n window.close();\n\n return (\n <Modal isCurrent={true} showClose={false} title=\"Account sync\">\n {() => (\n <View style={{ maxWidth: 500 }}>\n <Paragraph>Please wait...</Paragraph>\n <Paragraph>\n The window should close automatically. If nothing happened you can\n close this window or tab.\n </Paragraph>\n </View>\n )}\n </Modal>\n );\n}\n","import * as React from 'react';\nimport type { SVGProps } from 'react';\nconst SvgLeftArrow2 = (props: SVGProps<SVGSVGElement>) => (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 91 51\"\n style={{\n color: 'inherit',\n ...props.style,\n }}\n >\n <path\n fill=\"currentColor\"\n d=\"M30.256 48.614a3.14 3.14 0 0 0-.989-2.153L10.803 29.063h76.915a3.2 3.2 0 0 0 .315 0c1.584-.084 2.95-1.64 2.867-3.266-.082-1.625-1.598-3.028-3.182-2.943H10.803L29.267 5.49c1.284-1.099 1.456-3.057.385-4.373a2.972 2.972 0 0 0-4.48-.187L.971 23.695a3.163 3.163 0 0 0 0 4.56l24.2 22.766a2.98 2.98 0 0 0 2.205.84c1.669-.08 2.958-1.534 2.88-3.247Z\"\n />\n </svg>\n);\nexport default SvgLeftArrow2;\n","import * as React from 'react';\nimport type { SVGProps } from 'react';\nconst SvgArrowDown = (props: SVGProps<SVGSVGElement>) => (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n style={{\n color: 'inherit',\n ...props.style,\n }}\n >\n <path\n d=\"m9 16.172-6.071-6.071-1.414 1.414L10 20l.707-.707 7.778-7.778-1.414-1.414L11 16.172V0H9z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nexport default SvgArrowDown;\n","import * as React from 'react';\nimport type { SVGProps } from 'react';\nconst SvgArrowUp = (props: SVGProps<SVGSVGElement>) => (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 20 20\"\n style={{\n color: 'inherit',\n ...props.style,\n }}\n >\n <path\n d=\"M9 3.828 2.929 9.899 1.515 8.485 10 0l.707.707 7.778 7.778-1.414 1.414L11 3.828V20H9V3.828z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nexport default SvgArrowUp;\n","import * as React from 'react';\nimport type { SVGProps } from 'react';\nconst SvgHyperlink2 = (props: SVGProps<SVGSVGElement>) => (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n style={{\n color: 'inherit',\n ...props.style,\n }}\n >\n <path\n d=\"M12.406 14.905a1 1 0 0 0-.543 1.307 1 1 0 0 1-.217 1.09l-2.828 2.829a2 2 0 0 1-2.828 0L3.868 18.01a2 2 0 0 1 0-2.829L6.7 12.353a1.013 1.013 0 0 1 1.091-.217 1 1 0 0 0 .763-1.849 3.034 3.034 0 0 0-3.268.652l-2.832 2.828a4.006 4.006 0 0 0 0 5.657l2.122 2.121a4 4 0 0 0 5.656 0l2.829-2.828a3.008 3.008 0 0 0 .651-3.27 1 1 0 0 0-1.306-.542Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M7.757 16.241a1.011 1.011 0 0 0 1.414 0l7.779-7.778a1 1 0 0 0-1.414-1.414l-7.779 7.778a1 1 0 0 0 0 1.414Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"m21.546 4.574-2.121-2.121a4.006 4.006 0 0 0-5.657 0l-2.829 2.828a3.006 3.006 0 0 0-.651 3.269 1 1 0 1 0 1.849-.764 1 1 0 0 1 .217-1.086l2.828-2.828a2 2 0 0 1 2.829 0l2.121 2.121a2 2 0 0 1 0 2.829L17.3 11.645a1.015 1.015 0 0 1-1.091.217 1 1 0 0 0-.765 1.849 3.026 3.026 0 0 0 3.27-.651l2.828-2.828a4.007 4.007 0 0 0 .004-5.658Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nexport default SvgHyperlink2;\n","import React, {\n createContext,\n createElement,\n createRef,\n forwardRef,\n memo,\n useState,\n useRef,\n useMemo,\n useCallback,\n useLayoutEffect,\n useEffect,\n useContext,\n useReducer,\n} from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport {\n format as formatDate,\n parseISO,\n isValid as isDateValid,\n} from 'date-fns';\n\nimport { useCachedSchedules } from 'loot-core/src/client/data-hooks/schedules';\nimport {\n getAccountsById,\n getPayeesById,\n getCategoriesById,\n} from 'loot-core/src/client/reducers/queries';\nimport evalArithmetic from 'loot-core/src/shared/arithmetic';\nimport { currentDay } from 'loot-core/src/shared/months';\nimport { getScheduledAmount } from 'loot-core/src/shared/schedules';\nimport {\n splitTransaction,\n updateTransaction,\n deleteTransaction,\n addSplitTransaction,\n} from 'loot-core/src/shared/transactions';\nimport {\n integerToCurrency,\n amountToInteger,\n titleFirst,\n} from 'loot-core/src/shared/util';\n\nimport { useMergedRefs } from '../../hooks/useMergedRefs';\nimport usePrevious from '../../hooks/usePrevious';\nimport { useSelectedDispatch, useSelectedItems } from '../../hooks/useSelected';\nimport LeftArrow2 from '../../icons/v0/LeftArrow2';\nimport RightArrow2 from '../../icons/v0/RightArrow2';\nimport ArrowDown from '../../icons/v1/ArrowDown';\nimport ArrowUp from '../../icons/v1/ArrowUp';\nimport CheveronDown from '../../icons/v1/CheveronDown';\nimport ArrowsSynchronize from '../../icons/v2/ArrowsSynchronize';\nimport CalendarIcon from '../../icons/v2/Calendar';\nimport Hyperlink2 from '../../icons/v2/Hyperlink2';\nimport { styles, theme } from '../../style';\nimport AccountAutocomplete from '../autocomplete/AccountAutocomplete';\nimport CategoryAutocomplete from '../autocomplete/CategoryAutocomplete';\nimport PayeeAutocomplete from '../autocomplete/PayeeAutocomplete';\nimport Button from '../common/Button';\nimport Text from '../common/Text';\nimport View from '../common/View';\nimport { getStatusProps } from '../schedules/StatusBadge';\nimport DateSelect from '../select/DateSelect';\nimport {\n Cell,\n Field,\n Row,\n InputCell,\n SelectCell,\n DeleteCell,\n CustomCell,\n CellButton,\n useTableNavigator,\n Table,\n UnexposedCellContent,\n} from '../table';\nimport { Tooltip } from '../tooltips';\n\nfunction getDisplayValue(obj, name) {\n return obj ? obj[name] : '';\n}\n\nfunction serializeTransaction(transaction, showZeroInDeposit) {\n let { amount, date } = transaction;\n\n if (isPreviewId(transaction.id)) {\n amount = (transaction._inverse ? -1 : 1) * getScheduledAmount(amount);\n }\n\n let debit = amount < 0 ? -amount : null;\n let credit = amount > 0 ? amount : null;\n\n if (amount === 0) {\n if (showZeroInDeposit) {\n credit = 0;\n } else {\n debit = 0;\n }\n }\n\n // Validate the date format\n if (!isDateValid(parseISO(date))) {\n // Be a little forgiving if the date isn't valid. This at least\n // stops the UI from crashing, but this is a serious problem with\n // the data. This allows the user to go through and see empty\n // dates and manually fix them.\n date = null;\n }\n\n return {\n ...transaction,\n date,\n debit: debit != null ? integerToCurrency(debit) : '',\n credit: credit != null ? integerToCurrency(credit) : '',\n };\n}\n\nfunction deserializeTransaction(transaction, originalTransaction) {\n let { debit, credit, date, ...realTransaction } = transaction;\n\n let amount;\n if (debit !== '') {\n let parsed = evalArithmetic(debit, null);\n amount = parsed != null ? -parsed : null;\n } else {\n amount = evalArithmetic(credit, null);\n }\n\n amount =\n amount != null ? amountToInteger(amount) : originalTransaction.amount;\n\n if (date == null) {\n date = originalTransaction.date || currentDay();\n }\n\n return { ...realTransaction, date, amount };\n}\n\nfunction isLastChild(transactions, index) {\n let trans = transactions[index];\n return (\n trans &&\n trans.is_child &&\n (transactions[index + 1] == null ||\n transactions[index + 1].parent_id !== trans.parent_id)\n );\n}\n\nlet SplitsExpandedContext = createContext(null);\n\nexport function useSplitsExpanded() {\n let data = useContext(SplitsExpandedContext);\n\n return useMemo(\n () => ({\n ...data,\n expanded: id =>\n data.state.mode === 'collapse'\n ? !data.state.ids.has(id)\n : data.state.ids.has(id),\n }),\n [data],\n );\n}\n\nexport function SplitsExpandedProvider({ children, initialMode = 'expand' }) {\n let cachedState = useSelector(state => state.app.lastSplitState);\n let reduxDispatch = useDispatch();\n\n let [state, dispatch] = useReducer((state, action) => {\n switch (action.type) {\n case 'toggle-split': {\n let ids = new Set([...state.ids]);\n let { id } = action;\n if (ids.has(id)) {\n ids.delete(id);\n } else {\n ids.add(id);\n }\n return { ...state, ids };\n }\n case 'open-split': {\n let ids = new Set([...state.ids]);\n let { id } = action;\n if (state.mode === 'collapse') {\n ids.delete(id);\n } else {\n ids.add(id);\n }\n return { ...state, ids };\n }\n case 'set-mode': {\n return {\n ...state,\n mode: action.mode,\n ids: new Set(),\n transitionId: null,\n };\n }\n case 'switch-mode':\n if (state.transitionId != null) {\n // You can only transition once at a time\n return state;\n }\n\n return {\n ...state,\n mode: state.mode === 'expand' ? 'collapse' : 'expand',\n transitionId: action.id,\n ids: new Set(),\n };\n case 'finish-switch-mode':\n return { ...state, transitionId: null };\n default:\n throw new Error('Unknown action type: ' + action.type);\n }\n }, cachedState.current || { ids: new Set(), mode: initialMode });\n\n useEffect(() => {\n if (state.transitionId != null) {\n // This timeout allows animations to finish\n setTimeout(() => {\n dispatch({ type: 'finish-switch-mode' });\n }, 250);\n }\n }, [state.transitionId]);\n\n useEffect(() => {\n // In a finished state, cache the state\n if (state.transitionId == null) {\n reduxDispatch({ type: 'SET_LAST_SPLIT_STATE', splitState: state });\n }\n }, [state]);\n\n let value = useMemo(() => ({ state, dispatch }), [state, dispatch]);\n\n return (\n <SplitsExpandedContext.Provider value={value}>\n {children}\n </SplitsExpandedContext.Provider>\n );\n}\n\nfunction selectAscDesc(field, ascDesc, clicked, defaultAscDesc = 'asc') {\n return field === clicked\n ? ascDesc === 'asc'\n ? 'desc'\n : 'asc'\n : defaultAscDesc;\n}\n\nconst TransactionHeader = memo(\n ({\n hasSelected,\n showAccount,\n showCategory,\n showBalance,\n showCleared,\n scrollWidth,\n onSort,\n ascDesc,\n field,\n }) => {\n let dispatchSelected = useSelectedDispatch();\n\n return (\n <Row\n style={{\n fontWeight: 300,\n zIndex: 200,\n color: theme.tableHeaderText,\n backgroundColor: theme.tableBackground,\n }}\n >\n <SelectCell\n exposed={true}\n focused={false}\n selected={hasSelected}\n width={20}\n onSelect={e => dispatchSelected({ type: 'select-all', event: e })}\n />\n <HeaderCell\n value=\"Date\"\n width={110}\n alignItems=\"flex\"\n marginLeft={-5}\n id=\"date\"\n icon={field === 'date' ? ascDesc : 'clickable'}\n onClick={() =>\n onSort('date', selectAscDesc(field, ascDesc, 'date', 'desc'))\n }\n />\n {showAccount && (\n <HeaderCell\n value=\"Account\"\n width=\"flex\"\n alignItems=\"flex\"\n marginLeft={-5}\n id=\"account\"\n icon={field === 'account' ? ascDesc : 'clickable'}\n onClick={() =>\n onSort('account', selectAscDesc(field, ascDesc, 'account', 'asc'))\n }\n />\n )}\n <HeaderCell\n value=\"Payee\"\n width=\"flex\"\n alignItems=\"flex\"\n marginLeft={-5}\n id=\"payee\"\n icon={field === 'payee' ? ascDesc : 'clickable'}\n onClick={() =>\n onSort('payee', selectAscDesc(field, ascDesc, 'payee', 'asc'))\n }\n />\n <HeaderCell\n value=\"Notes\"\n width=\"flex\"\n alignItems=\"flex\"\n marginLeft={-5}\n id=\"notes\"\n icon={field === 'notes' ? ascDesc : 'clickable'}\n onClick={() =>\n onSort('notes', selectAscDesc(field, ascDesc, 'notes', 'asc'))\n }\n />\n {showCategory && (\n <HeaderCell\n value=\"Category\"\n width=\"flex\"\n alignItems=\"flex\"\n marginLeft={-5}\n id=\"category\"\n icon={field === 'category' ? ascDesc : 'clickable'}\n onClick={() =>\n onSort(\n 'category',\n selectAscDesc(field, ascDesc, 'category', 'asc'),\n )\n }\n />\n )}\n <HeaderCell\n value=\"Payment\"\n width={90}\n alignItems=\"flex-end\"\n marginRight={-5}\n id=\"payment\"\n icon={field === 'payment' ? ascDesc : 'clickable'}\n onClick={() =>\n onSort('payment', selectAscDesc(field, ascDesc, 'payment', 'asc'))\n }\n />\n <HeaderCell\n value=\"Deposit\"\n width={85}\n alignItems=\"flex-end\"\n marginRight={-5}\n id=\"deposit\"\n icon={field === 'deposit' ? ascDesc : 'clickable'}\n onClick={() =>\n onSort('deposit', selectAscDesc(field, ascDesc, 'deposit', 'desc'))\n }\n />\n {showBalance && <Cell value=\"Balance\" width={88} textAlign=\"right\" />}\n {showCleared && <Field width={23} truncate={false} />}\n <Cell value=\"\" width={5 + scrollWidth ?? 0} />\n </Row>\n );\n },\n);\n\nfunction getPayeePretty(transaction, payee, transferAcct) {\n let { payee: payeeId } = transaction;\n\n if (transferAcct) {\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n }}\n >\n <div\n style={{\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {transferAcct.name}\n </div>\n </View>\n );\n } else if (payee) {\n return payee.name;\n } else if (payeeId && payeeId.startsWith('new:')) {\n return payeeId.slice('new:'.length);\n }\n\n return '';\n}\n\nfunction StatusCell({\n id,\n focused,\n selected,\n status,\n isChild,\n onEdit,\n onUpdate,\n}) {\n let isClearedField = status === 'cleared' || status == null;\n let statusProps = getStatusProps(status);\n\n let statusColor =\n status === 'cleared'\n ? theme.noticeTextLight\n : status === 'missed'\n ? theme.errorText\n : status === 'due'\n ? theme.alt3WarningText\n : selected\n ? theme.pageTextLinkLight\n : theme.pageTextSubdued;\n\n function onSelect() {\n if (isClearedField) {\n onUpdate('cleared', !(status === 'cleared'));\n }\n }\n\n return (\n <Cell\n name=\"cleared\"\n width={23}\n focused={focused}\n style={{ padding: 1 }}\n plain\n >\n <CellButton\n style={{\n padding: 3,\n backgroundColor: 'transparent',\n border: '1px solid transparent',\n borderRadius: 50,\n ':focus': {\n border: '1px solid ' + theme.formInputBorderSelected,\n boxShadow: '0 1px 2px ' + theme.formInputBorderSelected,\n },\n cursor: isClearedField ? 'pointer' : 'default',\n ...(isChild && { visibility: 'hidden' }),\n }}\n onEdit={() => onEdit(id, 'cleared')}\n onSelect={onSelect}\n >\n {createElement(statusProps.Icon, {\n style: {\n width: 13,\n height: 13,\n color: statusColor,\n marginTop: status === 'due' ? -1 : 0,\n },\n })}\n </CellButton>\n </Cell>\n );\n}\n\nfunction HeaderCell({\n value,\n id,\n width,\n alignItems,\n marginLeft,\n marginRight,\n icon,\n onClick,\n}) {\n return (\n <CustomCell\n width={width}\n name={id}\n alignItems={alignItems}\n unexposedContent={\n <Button\n type=\"bare\"\n onClick={onClick}\n style={{\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n color: theme.tableHeaderText,\n fontWeight: 300,\n marginLeft: marginLeft,\n marginRight: marginRight,\n }}\n >\n <UnexposedCellContent value={value} />\n {icon === 'asc' && (\n <ArrowDown width={10} height={10} style={{ marginLeft: 5 }} />\n )}\n {icon === 'desc' && (\n <ArrowUp width={10} height={10} style={{ marginLeft: 5 }} />\n )}\n </Button>\n }\n />\n );\n}\n\nfunction PayeeCell({\n id,\n payeeId,\n accountId,\n focused,\n inherited,\n payees,\n accounts,\n valueStyle,\n transaction,\n payee,\n transferAcct,\n isPreview,\n onEdit,\n onUpdate,\n onCreatePayee,\n onManagePayees,\n onNavigateToTransferAccount,\n onNavigateToSchedule,\n}) {\n let isCreatingPayee = useRef(false);\n\n // Filter out the account we're currently in as it is not a valid transfer\n accounts = accounts.filter(account => account.id !== accountId);\n payees = payees.filter(payee => payee.transfer_acct !== accountId);\n\n return (\n <CustomCell\n width=\"flex\"\n name=\"payee\"\n textAlign=\"flex\"\n value={payeeId}\n valueStyle={{\n ...valueStyle,\n ...(inherited && { color: theme.tableTextInactive }),\n }}\n exposed={focused}\n onExpose={name => !isPreview && onEdit(id, name)}\n onUpdate={async value => {\n onUpdate('payee', value);\n\n if (value && value.startsWith('new:') && !isCreatingPayee.current) {\n isCreatingPayee.current = true;\n let id = await onCreatePayee(value.slice('new:'.length));\n onUpdate('payee', id);\n isCreatingPayee.current = false;\n }\n }}\n unexposedContent={\n <>\n <PayeeIcons\n transaction={transaction}\n transferAccount={transferAcct}\n onNavigateToTransferAccount={onNavigateToTransferAccount}\n onNavigateToSchedule={onNavigateToSchedule}\n />\n <UnexposedCellContent\n value={payeeId}\n formatter={() => getPayeePretty(transaction, payee, transferAcct)}\n />\n </>\n }\n >\n {({\n onBlur,\n onKeyDown,\n onUpdate,\n onSave,\n shouldSaveFromKey,\n inputStyle,\n }) => {\n return (\n <PayeeAutocomplete\n payees={payees}\n accounts={accounts}\n value={payeeId}\n shouldSaveFromKey={shouldSaveFromKey}\n inputProps={{\n onBlur,\n onKeyDown,\n style: inputStyle,\n }}\n showManagePayees={true}\n tableBehavior={true}\n focused={true}\n onUpdate={onUpdate}\n onSelect={onSave}\n onManagePayees={() => onManagePayees(payeeId)}\n isCreatable\n menuPortalTarget={undefined}\n />\n );\n }}\n </CustomCell>\n );\n}\n\nfunction PayeeIcons({\n transaction,\n transferAccount,\n onNavigateToTransferAccount,\n onNavigateToSchedule,\n children,\n}) {\n let scheduleId = transaction.schedule;\n let scheduleData = useCachedSchedules();\n let schedule = scheduleData\n ? scheduleData.schedules.find(s => s.id === scheduleId)\n : null;\n\n if (schedule == null && transferAccount == null) {\n // Neither a valid scheduled transaction nor a transfer.\n return children;\n }\n\n let buttonStyle = {\n marginLeft: -5,\n marginRight: 2,\n width: 23,\n height: 23,\n color: 'inherit',\n };\n\n let scheduleIconStyle = { width: 13, height: 13 };\n\n let transferIconStyle = { width: 10, height: 10 };\n\n let recurring = schedule && schedule._date && !!schedule._date.frequency;\n\n return (\n <>\n {schedule && (\n <Button\n type=\"bare\"\n style={buttonStyle}\n onClick={e => {\n e.stopPropagation();\n onNavigateToSchedule(scheduleId);\n }}\n >\n {recurring ? (\n <ArrowsSynchronize style={scheduleIconStyle} />\n ) : (\n <CalendarIcon style={scheduleIconStyle} />\n )}\n </Button>\n )}\n {transferAccount && (\n <Button\n type=\"bare\"\n style={buttonStyle}\n onClick={e => {\n e.stopPropagation();\n if (!isTemporaryId(transaction.id)) {\n onNavigateToTransferAccount(transferAccount.id);\n }\n }}\n >\n {(transaction._inverse ? -1 : 1) * transaction.amount > 0 ? (\n <LeftArrow2 style={transferIconStyle} />\n ) : (\n <RightArrow2 style={transferIconStyle} />\n )}\n </Button>\n )}\n </>\n );\n}\n\nconst Transaction = memo(function Transaction(props) {\n let {\n transaction: originalTransaction,\n editing,\n showAccount,\n showBalance,\n showCleared,\n showZeroInDeposit,\n style,\n selected,\n highlighted,\n added,\n matched,\n expanded,\n inheritedFields,\n focusedField,\n categoryGroups,\n payees,\n accounts,\n balance,\n dateFormat = 'MM/dd/yyyy',\n hideFraction,\n onSave,\n onEdit,\n onDelete,\n onSplit,\n onManagePayees,\n onCreatePayee,\n onToggleSplit,\n onNavigateToTransferAccount,\n onNavigateToSchedule,\n } = props;\n\n let dispatchSelected = useSelectedDispatch();\n\n let [prevShowZero, setPrevShowZero] = useState(showZeroInDeposit);\n let [prevTransaction, setPrevTransaction] = useState(originalTransaction);\n let [transaction, setTransaction] = useState(() =>\n serializeTransaction(originalTransaction, showZeroInDeposit),\n );\n let isPreview = isPreviewId(transaction.id);\n\n if (\n originalTransaction !== prevTransaction ||\n showZeroInDeposit !== prevShowZero\n ) {\n setTransaction(\n serializeTransaction(originalTransaction, showZeroInDeposit),\n );\n setPrevTransaction(originalTransaction);\n setPrevShowZero(showZeroInDeposit);\n }\n\n function onUpdate(name, value) {\n if (transaction[name] !== value) {\n let newTransaction = { ...transaction, [name]: value };\n\n // Don't change the note to an empty string if it's null (since they are both rendered the same)\n if (name === 'note' && value === '' && transaction.note == null) {\n return;\n }\n\n if (\n name === 'account' &&\n value &&\n getAccountsById(accounts)[value].offbudget\n ) {\n newTransaction.category = null;\n }\n\n // If entering an amount in either of the credit/debit fields, we\n // need to clear out the other one so it's always properly\n // translated into the desired amount (see\n // `deserializeTransaction`)\n if (name === 'credit') {\n newTransaction['debit'] = '';\n } else if (name === 'debit') {\n newTransaction['credit'] = '';\n }\n\n // Don't save a temporary value (a new payee) which will be\n // filled in with a real id later\n if (name === 'payee' && value && value.startsWith('new:')) {\n setTransaction(newTransaction);\n } else {\n let deserialized = deserializeTransaction(\n newTransaction,\n originalTransaction,\n );\n // Run the transaction through the formatting so that we know\n // it's always showing the formatted result\n setTransaction(serializeTransaction(deserialized, showZeroInDeposit));\n onSave(deserialized);\n }\n }\n }\n\n let {\n id,\n amount,\n debit,\n credit,\n payee: payeeId,\n imported_payee: importedPayee,\n notes,\n date,\n account: accountId,\n category: categoryId,\n cleared,\n is_parent: isParent,\n _unmatched = false,\n _inverse = false,\n } = transaction;\n\n // Join in some data\n let payee = payees && payeeId && getPayeesById(payees)[payeeId];\n let account = accounts && accountId && getAccountsById(accounts)[accountId];\n let transferAcct;\n\n if (_inverse) {\n transferAcct =\n accounts && accountId && getAccountsById(accounts)[accountId];\n } else {\n transferAcct =\n payee &&\n payee.transfer_acct &&\n getAccountsById(accounts)[payee.transfer_acct];\n }\n\n let isChild = transaction.is_child;\n let isBudgetTransfer = transferAcct && transferAcct.offbudget === 0;\n let isOffBudget = account && account.offbudget === 1;\n\n let valueStyle = added ? { fontWeight: 600 } : null;\n let backgroundFocus = focusedField === 'select';\n let amountStyle = hideFraction ? { letterSpacing: -0.5 } : null;\n\n let runningBalance = !isTemporaryId(id)\n ? balance\n : balance + (_inverse ? -1 : 1) * amount;\n\n return (\n <Row\n style={{\n backgroundColor: selected\n ? theme.tableRowBackgroundHighlight\n : backgroundFocus\n ? theme.tableRowBackgroundHover\n : theme.tableBackground,\n ':hover': !(backgroundFocus || selected) && {\n backgroundColor: theme.tableRowBackgroundHover,\n },\n '& .hover-visible': {\n opacity: 0,\n },\n ':hover .hover-visible': {\n opacity: 1,\n },\n ...(highlighted || selected\n ? { color: theme.tableRowBackgroundHighlightText }\n : { color: theme.tableText }),\n ...style,\n ...(isPreview && {\n color: theme.tableTextInactive,\n backgroundColor: !selected ? '#fcfcfc' : undefined,\n fontStyle: 'italic',\n }),\n ...(_unmatched && { opacity: 0.5 }),\n }}\n >\n {isChild && (\n <Field\n /* Checkmark blank placeholder for Child transaction */\n width={110}\n style={{\n width: 110,\n backgroundColor: theme.tableRowBackgroundHover,\n border: 0, // known z-order issue, bottom border for parent transaction hidden\n }}\n />\n )}\n\n {isChild && showAccount && (\n <Field\n /* Account blank placeholder for Child transaction */\n style={{\n flex: 1,\n backgroundColor: theme.tableRowBackgroundHover,\n border: 0,\n }}\n />\n )}\n\n {/* Checkmark - for Child transaction\n between normal Date and Payee or Account and Payee if needed */}\n {isTemporaryId(transaction.id) ? (\n isChild ? (\n <DeleteCell\n onDelete={() => onDelete && onDelete(transaction.id)}\n exposed={editing}\n style={{ ...(isChild && { borderLeftWidth: 1 }), lineHeight: 0 }}\n />\n ) : (\n <Cell width={20} />\n )\n ) : (\n <SelectCell\n /* Checkmark field for non-child transaction */\n exposed\n buttonProps={{\n className: selected || editing ? null : 'hover-visible',\n }}\n focused={focusedField === 'select'}\n onSelect={e => {\n dispatchSelected({ type: 'select', id: transaction.id, event: e });\n }}\n onEdit={() => onEdit(id, 'select')}\n selected={selected}\n style={{ ...(isChild && { borderLeftWidth: 1 }) }}\n value={\n matched && (\n <Hyperlink2 style={{ width: 13, height: 13, color: 'inherit' }} />\n )\n }\n />\n )}\n {!isChild && (\n <CustomCell\n /* Date field for non-child transaction */\n name=\"date\"\n width={110}\n textAlign=\"flex\"\n exposed={focusedField === 'date'}\n value={date}\n valueStyle={valueStyle}\n formatter={date =>\n date ? formatDate(parseISO(date), dateFormat) : ''\n }\n onExpose={name => !isPreview && onEdit(id, name)}\n onUpdate={value => {\n onUpdate('date', value);\n }}\n >\n {({\n onBlur,\n onKeyDown,\n onUpdate,\n onSave,\n shouldSaveFromKey,\n inputStyle,\n }) => (\n <DateSelect\n value={date || ''}\n dateFormat={dateFormat}\n inputProps={{ onBlur, onKeyDown, style: inputStyle }}\n shouldSaveFromKey={shouldSaveFromKey}\n tableBehavior={true}\n onUpdate={onUpdate}\n onSelect={onSave}\n />\n )}\n </CustomCell>\n )}\n\n {!isChild && showAccount && (\n <CustomCell\n /* Account field for non-child transaction */\n name=\"account\"\n width=\"flex\"\n textAlign=\"flex\"\n value={accountId}\n formatter={acctId => {\n let acct = acctId && getAccountsById(accounts)[acctId];\n if (acct) {\n return acct.name;\n }\n return '';\n }}\n valueStyle={valueStyle}\n exposed={focusedField === 'account'}\n onExpose={name => !isPreview && onEdit(id, name)}\n onUpdate={async value => {\n // Only ever allow non-null values\n if (value) {\n onUpdate('account', value);\n }\n }}\n >\n {({\n onBlur,\n onKeyDown,\n onUpdate,\n onSave,\n shouldSaveFromKey,\n inputStyle,\n }) => (\n <AccountAutocomplete\n includeClosedAccounts={false}\n value={accountId}\n accounts={accounts}\n shouldSaveFromKey={shouldSaveFromKey}\n tableBehavior={true}\n focused={true}\n inputProps={{ onBlur, onKeyDown, style: inputStyle }}\n onUpdate={onUpdate}\n onSelect={onSave}\n menuPortalTarget={undefined}\n />\n )}\n </CustomCell>\n )}\n {(() => (\n <PayeeCell\n /* Payee field for all transactions */\n id={id}\n payeeId={payeeId}\n accountId={accountId}\n focused={focusedField === 'payee'}\n inherited={inheritedFields && inheritedFields.has('payee')}\n payees={payees}\n accounts={accounts}\n valueStyle={valueStyle}\n transaction={transaction}\n payee={payee}\n transferAcct={transferAcct}\n importedPayee={importedPayee}\n isPreview={isPreview}\n onEdit={onEdit}\n onUpdate={onUpdate}\n onCreatePayee={onCreatePayee}\n onManagePayees={onManagePayees}\n onNavigateToTransferAccount={onNavigateToTransferAccount}\n onNavigateToSchedule={onNavigateToSchedule}\n />\n ))()}\n\n {isPreview ? (\n /* Notes field for all transactions */\n <Cell name=\"notes\" width=\"flex\" />\n ) : (\n <InputCell\n width=\"flex\"\n name=\"notes\"\n textAlign=\"flex\"\n exposed={focusedField === 'notes'}\n focused={focusedField === 'notes'}\n value={notes || ''}\n valueStyle={valueStyle}\n onExpose={name => !isPreview && onEdit(id, name)}\n inputProps={{\n value: notes || '',\n onUpdate: onUpdate.bind(null, 'notes'),\n }}\n />\n )}\n\n {isPreview ? (\n // Category field for preview transactions\n <Cell width=\"flex\" style={{ alignItems: 'flex-start' }} exposed={true}>\n {() => (\n <View\n style={{\n color:\n notes === 'missed'\n ? theme.errorText\n : notes === 'due'\n ? theme.alt5WarningText\n : selected\n ? theme.formLabelText\n : theme.altTableText,\n backgroundColor:\n notes === 'missed'\n ? theme.errorBackground\n : notes === 'due'\n ? theme.altWarningBackground\n : selected\n ? theme.formLabelBackground\n : theme.alt2TableBackground,\n margin: '0 5px',\n padding: '3px 7px',\n borderRadius: 4,\n }}\n >\n {titleFirst(notes)}\n </View>\n )}\n </Cell>\n ) : isParent ? (\n <Cell\n /* Category field (Split button) for parent transactions */\n name=\"category\"\n width=\"flex\"\n focused={focusedField === 'category'}\n style={{ padding: 0 }}\n plain\n >\n <CellButton\n bare\n style={{\n alignSelf: 'flex-start',\n borderRadius: 4,\n border: '1px solid transparent', // so it doesn't shift on hover\n ':hover': {\n border: '1px solid ' + theme.buttonNormalBorder,\n },\n }}\n disabled={isTemporaryId(transaction.id)}\n onEdit={() => onEdit(id, 'category')}\n onSelect={() => onToggleSplit(id)}\n >\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'stretch',\n borderRadius: 4,\n flex: 1,\n padding: 4,\n }}\n >\n {isParent && (\n <CheveronDown\n style={{\n color: 'inherit',\n width: 14,\n height: 14,\n transition: 'transform .08s',\n transform: expanded ? 'rotateZ(0)' : 'rotateZ(-90deg)',\n }}\n />\n )}\n <Text style={{ fontStyle: 'italic', userSelect: 'none' }}>\n Split\n </Text>\n </View>\n </CellButton>\n </Cell>\n ) : isBudgetTransfer || isOffBudget || isPreview ? (\n <InputCell\n /* Category field for transfer and off-budget transactions\n (NOT preview, it is covered first) */\n name=\"category\"\n width=\"flex\"\n exposed={focusedField === 'category'}\n focused={focusedField === 'category'}\n onExpose={name => !isPreview && onEdit(id, name)}\n value={\n isParent\n ? 'Split'\n : isOffBudget\n ? 'Off Budget'\n : isBudgetTransfer\n ? 'Transfer'\n : ''\n }\n valueStyle={valueStyle}\n style={{\n fontStyle: 'italic',\n color: '#c0c0c0',\n fontWeight: 300,\n }}\n inputProps={{\n readOnly: true,\n style: { fontStyle: 'italic' },\n }}\n />\n ) : (\n <CustomCell\n /* Category field for normal and child transactions */\n name=\"category\"\n width=\"flex\"\n textAlign=\"flex\"\n value={categoryId}\n formatter={value =>\n value\n ? getDisplayValue(\n getCategoriesById(categoryGroups)[value],\n 'name',\n )\n : transaction.id\n ? 'Categorize'\n : ''\n }\n exposed={focusedField === 'category'}\n onExpose={name => onEdit(id, name)}\n valueStyle={\n !categoryId\n ? {\n // uncategorized transaction\n fontStyle: 'italic',\n fontWeight: 300,\n color: theme.formInputTextHighlight,\n }\n : valueStyle\n }\n onUpdate={async value => {\n if (value === 'split') {\n onSplit(transaction.id);\n } else {\n onUpdate('category', value);\n }\n }}\n >\n {({\n onBlur,\n onKeyDown,\n onUpdate,\n onSave,\n shouldSaveFromKey,\n inputStyle,\n }) => (\n <CategoryAutocomplete\n categoryGroups={categoryGroups}\n value={categoryId}\n focused={true}\n tableBehavior={true}\n showSplitOption={!isChild && !isParent}\n shouldSaveFromKey={shouldSaveFromKey}\n inputProps={{ onBlur, onKeyDown, style: inputStyle }}\n onUpdate={onUpdate}\n onSelect={onSave}\n menuPortalTarget={undefined}\n />\n )}\n </CustomCell>\n )}\n\n <InputCell\n /* Debit field for all transactions */\n type=\"input\"\n width={90}\n name=\"debit\"\n exposed={focusedField === 'debit'}\n focused={focusedField === 'debit'}\n value={debit === '' && credit === '' ? '0.00' : debit}\n valueStyle={valueStyle}\n textAlign=\"right\"\n title={debit}\n onExpose={name => !isPreview && onEdit(id, name)}\n style={{\n ...(isParent && { fontStyle: 'italic' }),\n ...styles.tnum,\n ...amountStyle,\n }}\n inputProps={{\n value: debit === '' && credit === '' ? '0.00' : debit,\n onUpdate: onUpdate.bind(null, 'debit'),\n }}\n privacyFilter={{\n activationFilters: [!isTemporaryId(transaction.id)],\n }}\n />\n\n <InputCell\n /* Credit field for all transactions */\n type=\"input\"\n width={85}\n name=\"credit\"\n exposed={focusedField === 'credit'}\n focused={focusedField === 'credit'}\n value={credit}\n valueStyle={valueStyle}\n textAlign=\"right\"\n title={credit}\n onExpose={name => !isPreview && onEdit(id, name)}\n style={{\n ...(isParent && { fontStyle: 'italic' }),\n ...styles.tnum,\n ...amountStyle,\n }}\n inputProps={{\n value: credit,\n onUpdate: onUpdate.bind(null, 'credit'),\n }}\n privacyFilter={{\n activationFilters: [!isTemporaryId(transaction.id)],\n }}\n />\n\n {showBalance && (\n <Cell\n /* Balance field for all transactions */\n name=\"balance\"\n value={\n runningBalance == null || isChild\n ? ''\n : integerToCurrency(runningBalance)\n }\n valueStyle={{\n color: runningBalance < 0 ? theme.errorText : theme.noticeTextLight,\n }}\n style={{ ...styles.tnum, ...amountStyle }}\n width={88}\n textAlign=\"right\"\n privacyFilter\n />\n )}\n\n {showCleared && (\n <StatusCell\n /* Icon field for all transactions */\n id={id}\n focused={focusedField === 'cleared'}\n selected={selected}\n isPreview={isPreview}\n status={isPreview ? notes : cleared ? 'cleared' : null}\n isChild={isChild}\n onEdit={onEdit}\n onUpdate={onUpdate}\n />\n )}\n\n <Cell width={5} />\n </Row>\n );\n});\n\nfunction TransactionError({ error, isDeposit, onAddSplit, style }) {\n switch (error.type) {\n case 'SplitTransactionError':\n if (error.version === 1) {\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n padding: '0 5px',\n ...style,\n }}\n data-testid=\"transaction-error\"\n >\n <Text>\n Amount left:{' '}\n <Text style={{ fontWeight: 500 }}>\n {integerToCurrency(\n isDeposit ? error.difference : -error.difference,\n )}\n </Text>\n </Text>\n <View style={{ flex: 1 }} />\n <Button\n type=\"primary\"\n style={{ marginLeft: 15, padding: '4px 10px' }}\n onClick={onAddSplit}\n >\n Add Split\n </Button>\n </View>\n );\n }\n break;\n default:\n return null;\n }\n}\n\nfunction makeTemporaryTransactions(\n currentAccountId,\n currentCategoryId,\n lastDate,\n) {\n return [\n {\n id: 'temp',\n date: lastDate || currentDay(),\n account: currentAccountId || null,\n category: currentCategoryId || null,\n cleared: false,\n amount: null,\n },\n ];\n}\n\nfunction isTemporaryId(id) {\n return id.indexOf('temp') !== -1;\n}\n\nexport function isPreviewId(id) {\n return id.indexOf('preview/') !== -1;\n}\n\nfunction NewTransaction({\n transactions,\n accounts,\n categoryGroups,\n payees,\n editingTransaction,\n focusedField,\n showAccount,\n showCategory,\n showBalance,\n showCleared,\n dateFormat,\n hideFraction,\n onClose,\n onSplit,\n onEdit,\n onDelete,\n onSave,\n onAdd,\n onAddSplit,\n onManagePayees,\n onCreatePayee,\n onNavigateToTransferAccount,\n onNavigateToSchedule,\n balance,\n}) {\n const error = transactions[0].error;\n const isDeposit = transactions[0].amount > 0;\n\n return (\n <View\n style={{\n borderBottom: '1px solid ' + theme.tableBorderHover,\n paddingBottom: 6,\n backgroundColor: theme.tableBackground,\n }}\n data-testid=\"new-transaction\"\n onKeyDown={e => {\n if (e.key === 'Escape') {\n onClose();\n }\n }}\n >\n {transactions.map(transaction => (\n <Transaction\n isNew\n key={transaction.id}\n editing={editingTransaction === transaction.id}\n transaction={transaction}\n showAccount={showAccount}\n showCategory={showCategory}\n showBalance={showBalance}\n showCleared={showCleared}\n focusedField={editingTransaction === transaction.id && focusedField}\n showZeroInDeposit={isDeposit}\n accounts={accounts}\n categoryGroups={categoryGroups}\n payees={payees}\n dateFormat={dateFormat}\n hideFraction={hideFraction}\n expanded={true}\n onEdit={onEdit}\n onSave={onSave}\n onSplit={onSplit}\n onDelete={onDelete}\n onAdd={onAdd}\n onManagePayees={onManagePayees}\n onCreatePayee={onCreatePayee}\n style={{ marginTop: -1 }}\n onNavigateToTransferAccount={onNavigateToTransferAccount}\n onNavigateToSchedule={onNavigateToSchedule}\n balance={balance}\n />\n ))}\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'flex-end',\n marginTop: 6,\n marginRight: 20,\n }}\n >\n <Button\n style={{ marginRight: 10, padding: '4px 10px' }}\n onClick={() => onClose()}\n data-testid=\"cancel-button\"\n >\n Cancel\n </Button>\n {error ? (\n <TransactionError\n error={error}\n isDeposit={isDeposit}\n onAddSplit={() => onAddSplit(transactions[0].id)}\n />\n ) : (\n <Button\n type=\"primary\"\n style={{ padding: '4px 10px' }}\n onClick={onAdd}\n data-testid=\"add-button\"\n >\n Add\n </Button>\n )}\n </View>\n </View>\n );\n}\n\nfunction TransactionTableInner({\n tableNavigator,\n tableRef,\n dateFormat = 'MM/dd/yyyy',\n newNavigator,\n renderEmpty,\n onScroll,\n ...props\n}) {\n const containerRef = createRef();\n const isAddingPrev = usePrevious(props.isAdding);\n let [scrollWidth, setScrollWidth] = useState(0);\n\n function saveScrollWidth(parent, child) {\n let width = parent > 0 && child > 0 && parent - child;\n\n setScrollWidth(!width ? 0 : width);\n }\n\n let onNavigateToTransferAccount = useCallback(\n accountId => {\n props.onCloseAddTransaction();\n props.onNavigateToTransferAccount(accountId);\n },\n [props.onCloseAddTransaction, props.onNavigateToTransferAccount],\n );\n\n let onNavigateToSchedule = useCallback(\n scheduleId => {\n props.onCloseAddTransaction();\n props.onNavigateToSchedule(scheduleId);\n },\n [props.onCloseAddTransaction, props.onNavigateToSchedule],\n );\n\n useEffect(() => {\n if (!isAddingPrev && props.isAdding) {\n newNavigator.onEdit('temp', 'date');\n }\n }, [isAddingPrev, props.isAdding, newNavigator]);\n\n const renderRow = ({ item, index, position, editing }) => {\n const {\n transactions,\n selectedItems,\n accounts,\n categoryGroups,\n payees,\n showCleared,\n showAccount,\n showCategory,\n showBalances,\n balances,\n hideFraction,\n isNew,\n isMatched,\n isExpanded,\n } = props;\n\n let trans = item;\n let selected = selectedItems.has(trans.id);\n\n let parent = props.transactionMap.get(trans.parent_id);\n let isChildDeposit = parent && parent.amount > 0;\n let expanded = isExpanded && isExpanded((parent || trans).id);\n\n // For backwards compatibility, read the error of the transaction\n // since in previous versions we stored it there. In the future we\n // can simplify this to just the parent\n let error = expanded\n ? (parent && parent.error) || trans.error\n : trans.error;\n\n return (\n <>\n {(!expanded || isLastChild(transactions, index)) &&\n error &&\n error.type === 'SplitTransactionError' && (\n <Tooltip\n position=\"bottom-right\"\n width={250}\n forceTop={position}\n forceLayout={true}\n style={{ transform: 'translate(-5px, 2px)' }}\n >\n <TransactionError\n error={error}\n isDeposit={isChildDeposit}\n onAddSplit={() => props.onAddSplit(trans.id)}\n />\n </Tooltip>\n )}\n <Transaction\n editing={editing}\n transaction={trans}\n showAccount={showAccount}\n showCategory={showCategory}\n showBalance={showBalances}\n showCleared={showCleared}\n selected={selected}\n highlighted={false}\n added={isNew?.(trans.id)}\n expanded={isExpanded?.(trans.id)}\n matched={isMatched?.(trans.id)}\n showZeroInDeposit={isChildDeposit}\n balance={balances?.[trans.id]?.balance}\n focusedField={editing && tableNavigator.focusedField}\n accounts={accounts}\n categoryGroups={categoryGroups}\n payees={payees}\n inheritedFields={\n parent?.payee === trans.payee ? new Set(['payee']) : new Set()\n }\n dateFormat={dateFormat}\n hideFraction={hideFraction}\n onEdit={tableNavigator.onEdit}\n onSave={props.onSave}\n onDelete={props.onDelete}\n onSplit={props.onSplit}\n onManagePayees={props.onManagePayees}\n onCreatePayee={props.onCreatePayee}\n onToggleSplit={props.onToggleSplit}\n onNavigateToTransferAccount={onNavigateToTransferAccount}\n onNavigateToSchedule={onNavigateToSchedule}\n />\n </>\n );\n };\n\n return (\n <View\n innerRef={containerRef}\n style={{\n flex: 1,\n cursor: 'default',\n ...props.style,\n }}\n >\n <View>\n <TransactionHeader\n hasSelected={props.selectedItems.size > 0}\n showAccount={props.showAccount}\n showCategory={props.showCategory}\n showBalance={props.showBalances}\n showCleared={props.showCleared}\n scrollWidth={scrollWidth}\n onSort={props.onSort}\n ascDesc={props.ascDesc}\n field={props.sortField}\n />\n\n {props.isAdding && (\n <View\n {...newNavigator.getNavigatorProps({\n onKeyDown: e => props.onCheckNewEnter(e),\n })}\n >\n <NewTransaction\n transactions={props.newTransactions}\n editingTransaction={newNavigator.editingId}\n focusedField={newNavigator.focusedField}\n accounts={props.accounts}\n categoryGroups={props.categoryGroups}\n payees={props.payees || []}\n showAccount={props.showAccount}\n showCategory={props.showCategory}\n showBalance={props.showBalances}\n showCleared={props.showCleared}\n dateFormat={dateFormat}\n hideFraction={props.hideFraction}\n onClose={props.onCloseAddTransaction}\n onAdd={props.onAddTemporary}\n onAddSplit={props.onAddSplit}\n onSplit={props.onSplit}\n onEdit={newNavigator.onEdit}\n onSave={props.onSave}\n onDelete={props.onDelete}\n onManagePayees={props.onManagePayees}\n onCreatePayee={props.onCreatePayee}\n onNavigateToTransferAccount={onNavigateToTransferAccount}\n onNavigateToSchedule={onNavigateToSchedule}\n balance={\n props.transactions?.length > 0\n ? props.balances?.[props.transactions[0]?.id]?.balance\n : 0\n }\n />\n </View>\n )}\n </View>\n {/*// * On Windows, makes the scrollbar always appear\n // the full height of the container ??? */}\n\n <View\n style={{ flex: 1, overflow: 'hidden' }}\n data-testid=\"transaction-table\"\n >\n <Table\n navigator={tableNavigator}\n ref={tableRef}\n items={props.transactions}\n renderItem={renderRow}\n renderEmpty={renderEmpty}\n loadMore={props.loadMoreTransactions}\n isSelected={id => props.selectedItems.has(id)}\n onKeyDown={e => props.onCheckEnter(e)}\n onScroll={onScroll}\n saveScrollWidth={saveScrollWidth}\n />\n\n {props.isAdding && (\n <div\n key=\"shadow\"\n style={{\n position: 'absolute',\n top: -20,\n left: 0,\n right: 0,\n height: 20,\n backgroundColor: theme.errorText,\n boxShadow: '0 0 6px rgba(0, 0, 0, .20)',\n }}\n />\n )}\n </View>\n </View>\n );\n}\n\nexport let TransactionTable = forwardRef((props, ref) => {\n let [newTransactions, setNewTransactions] = useState(null);\n let [prevIsAdding, setPrevIsAdding] = useState(false);\n let splitsExpanded = useSplitsExpanded();\n let prevSplitsExpanded = useRef(null);\n\n let tableRef = useRef(null);\n let mergedRef = useMergedRefs(tableRef, ref);\n\n let transactions = useMemo(() => {\n let result;\n if (splitsExpanded.state.transitionId != null) {\n let index = props.transactions.findIndex(\n t => t.id === splitsExpanded.state.transitionId,\n );\n result = props.transactions.filter((t, idx) => {\n if (t.parent_id) {\n if (idx >= index) {\n return splitsExpanded.expanded(t.parent_id);\n } else if (prevSplitsExpanded.current) {\n return prevSplitsExpanded.current.expanded(t.parent_id);\n }\n }\n return true;\n });\n } else {\n if (\n prevSplitsExpanded.current &&\n prevSplitsExpanded.current.state.transitionId != null\n ) {\n tableRef.current.anchor();\n tableRef.current.setRowAnimation(false);\n }\n prevSplitsExpanded.current = splitsExpanded;\n\n result = props.transactions.filter(t => {\n if (t.parent_id) {\n return splitsExpanded.expanded(t.parent_id);\n }\n return true;\n });\n }\n\n prevSplitsExpanded.current = splitsExpanded;\n return result;\n }, [props.transactions, splitsExpanded]);\n const transactionMap = useMemo(() => {\n return new Map(transactions.map(trans => [trans.id, trans]));\n }, [transactions]);\n\n useEffect(() => {\n // If it's anchored that means we've also disabled animations. To\n // reduce the chance for side effect collision, only do this if\n // we've actually anchored it\n if (tableRef.current.isAnchored()) {\n tableRef.current.unanchor();\n tableRef.current.setRowAnimation(true);\n }\n }, [prevSplitsExpanded.current]);\n\n let newNavigator = useTableNavigator(newTransactions, getFields);\n let tableNavigator = useTableNavigator(transactions, getFields);\n let shouldAdd = useRef(false);\n let latestState = useRef({ newTransactions, newNavigator, tableNavigator });\n let savePending = useRef(false);\n let afterSaveFunc = useRef(false);\n let [_, forceRerender] = useState({});\n let selectedItems = useSelectedItems();\n\n useLayoutEffect(() => {\n latestState.current = {\n newTransactions,\n newNavigator,\n tableNavigator,\n transactions: props.transactions,\n };\n });\n\n // Derive new transactions from the `isAdding` prop\n if (prevIsAdding !== props.isAdding) {\n if (!prevIsAdding && props.isAdding) {\n setNewTransactions(\n makeTemporaryTransactions(\n props.currentAccountId,\n props.currentCategoryId,\n ),\n );\n }\n setPrevIsAdding(props.isAdding);\n }\n\n useEffect(() => {\n if (shouldAdd.current) {\n if (newTransactions[0].account == null) {\n props.addNotification({\n type: 'error',\n message: 'Account is a required field',\n });\n newNavigator.onEdit('temp', 'account');\n } else {\n let transactions = latestState.current.newTransactions;\n let lastDate = transactions.length > 0 ? transactions[0].date : null;\n setNewTransactions(\n makeTemporaryTransactions(\n props.currentAccountId,\n props.currentCategoryId,\n lastDate,\n ),\n );\n newNavigator.onEdit('temp', 'date');\n props.onAdd(transactions);\n }\n shouldAdd.current = false;\n }\n });\n\n useEffect(() => {\n if (savePending.current && afterSaveFunc.current) {\n afterSaveFunc.current(props);\n afterSaveFunc.current = null;\n }\n\n savePending.current = false;\n }, [newTransactions, props.transactions]);\n\n function getFields(item) {\n let fields = [\n 'select',\n 'date',\n 'account',\n 'payee',\n 'notes',\n 'category',\n 'debit',\n 'credit',\n 'cleared',\n ];\n\n fields = item.is_child\n ? ['select', 'payee', 'notes', 'category', 'debit', 'credit']\n : fields.filter(\n f =>\n (props.showAccount || f !== 'account') &&\n (props.showCategory || f !== 'category'),\n );\n\n if (isPreviewId(item.id)) {\n fields = ['select', 'cleared'];\n }\n if (isTemporaryId(item.id)) {\n // You can't focus the select/delete button of temporary\n // transactions\n fields = fields.slice(1);\n }\n\n return fields;\n }\n\n function afterSave(func) {\n if (savePending.current) {\n afterSaveFunc.current = func;\n } else {\n func(props);\n }\n }\n\n function onCheckNewEnter(e) {\n if (e.key === 'Enter') {\n if (e.metaKey) {\n e.stopPropagation();\n onAddTemporary();\n } else if (!e.shiftKey) {\n function getLastTransaction(state) {\n let { newTransactions } = state.current;\n return newTransactions[newTransactions.length - 1];\n }\n\n // Right now, the table navigator does some funky stuff with\n // focus, so we want to stop it from handling this event. We\n // still want enter to move up/down normally, so we only stop\n // it if we are on the last transaction (where we are about to\n // do some logic). I don't like this.\n if (newNavigator.editingId === getLastTransaction(latestState).id) {\n e.stopPropagation();\n }\n\n afterSave(() => {\n let lastTransaction = getLastTransaction(latestState);\n let isSplit = lastTransaction.parent_id || lastTransaction.is_parent;\n\n if (\n latestState.current.newTransactions[0].error &&\n newNavigator.editingId === lastTransaction.id\n ) {\n // add split\n onAddSplit(lastTransaction.id);\n } else if (\n newNavigator.editingId === lastTransaction.id &&\n (!isSplit || !lastTransaction.error)\n ) {\n onAddTemporary();\n }\n });\n }\n }\n }\n\n function onCheckEnter(e) {\n if (e.key === 'Enter' && !e.shiftKey) {\n let { editingId: id, focusedField } = tableNavigator;\n\n afterSave(() => {\n let transactions = latestState.current.transactions;\n let idx = transactions.findIndex(t => t.id === id);\n let parent = transactionMap.get(transactions[idx]?.parent_id);\n\n if (\n isLastChild(transactions, idx) &&\n parent &&\n parent.error &&\n focusedField !== 'select'\n ) {\n e.stopPropagation();\n onAddSplit(id);\n }\n });\n }\n }\n\n let onAddTemporary = useCallback(() => {\n shouldAdd.current = true;\n // A little hacky - this forces a rerender which will cause the\n // effect we want to run. We have to wait for all updates to be\n // committed (the input could still be saving a value).\n forceRerender({});\n }, [props.onAdd, newNavigator.onEdit]);\n\n let onSave = useCallback(\n async transaction => {\n savePending.current = true;\n\n if (isTemporaryId(transaction.id)) {\n if (props.onApplyRules) {\n transaction = await props.onApplyRules(transaction);\n }\n\n let newTrans = latestState.current.newTransactions;\n setNewTransactions(updateTransaction(newTrans, transaction).data);\n } else {\n props.onSave(transaction);\n }\n },\n [props.onSave],\n );\n\n let onDelete = useCallback(id => {\n let temporary = isTemporaryId(id);\n\n if (temporary) {\n let newTrans = latestState.current.newTransactions;\n\n if (id === newTrans[0].id) {\n // You can never delete the parent new transaction\n return;\n }\n\n setNewTransactions(deleteTransaction(newTrans, id).data);\n }\n }, []);\n\n let onSplit = useMemo(() => {\n return id => {\n if (isTemporaryId(id)) {\n let { newNavigator } = latestState.current;\n let newTrans = latestState.current.newTransactions;\n let { data, diff } = splitTransaction(newTrans, id);\n setNewTransactions(data);\n\n // Jump next to \"debit\" field if it is empty\n // Otherwise jump to the same field as before, but downwards\n // to the added split transaction\n if (newTrans[0].amount === null) {\n newNavigator.onEdit(newTrans[0].id, 'debit');\n } else {\n newNavigator.onEdit(\n diff.added[0].id,\n latestState.current.newNavigator.focusedField,\n );\n }\n } else {\n let trans = latestState.current.transactions.find(t => t.id === id);\n let newId = props.onSplit(id);\n\n splitsExpanded.dispatch({ type: 'open-split', id: trans.id });\n\n let { tableNavigator } = latestState.current;\n if (trans.amount === null) {\n tableNavigator.onEdit(trans.id, 'debit');\n } else {\n tableNavigator.onEdit(newId, tableNavigator.focusedField);\n }\n }\n };\n }, [props.onSplit, splitsExpanded.dispatch]);\n\n let onAddSplit = useCallback(\n id => {\n if (isTemporaryId(id)) {\n let newTrans = latestState.current.newTransactions;\n let { data, diff } = addSplitTransaction(newTrans, id);\n setNewTransactions(data);\n newNavigator.onEdit(\n diff.added[0].id,\n latestState.current.newNavigator.focusedField,\n );\n } else {\n let newId = props.onAddSplit(id);\n tableNavigator.onEdit(\n newId,\n latestState.current.tableNavigator.focusedField,\n );\n }\n },\n [props.onAddSplit],\n );\n\n function onCloseAddTransaction() {\n setNewTransactions(\n makeTemporaryTransactions(\n props.currentAccountId,\n props.currentCategoryId,\n ),\n );\n props.onCloseAddTransaction();\n }\n\n let onToggleSplit = useCallback(\n id => splitsExpanded.dispatch({ type: 'toggle-split', id }),\n [splitsExpanded.dispatch],\n );\n\n return (\n <TransactionTableInner\n tableRef={mergedRef}\n {...props}\n transactions={transactions}\n transactionMap={transactionMap}\n selectedItems={selectedItems}\n isExpanded={splitsExpanded.expanded}\n onSave={onSave}\n onDelete={onDelete}\n onSplit={onSplit}\n onCheckNewEnter={onCheckNewEnter}\n onCheckEnter={onCheckEnter}\n onAddTemporary={onAddTemporary}\n onAddSplit={onAddSplit}\n onCloseAddTransaction={onCloseAddTransaction}\n onToggleSplit={onToggleSplit}\n newTransactions={newTransactions}\n tableNavigator={tableNavigator}\n newNavigator={newNavigator}\n />\n );\n});\n","import React, { useRef, useCallback, useLayoutEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\n\nimport { send } from 'loot-core/src/platform/client/fetch';\nimport {\n splitTransaction,\n updateTransaction,\n addSplitTransaction,\n realizeTempTransactions,\n applyTransactionDiff,\n} from 'loot-core/src/shared/transactions';\nimport { getChangedValues, applyChanges } from 'loot-core/src/shared/util';\n\nimport { theme } from '../../style';\n\nimport { TransactionTable } from './TransactionsTable';\n\n// When data changes, there are two ways to update the UI:\n//\n// * Optimistic updates: we apply the needed updates to local data\n// and rerender immediately, and send off the changes to the\n// server. Currently, it assumes the server request is successful.\n// If it fails the user will see a generic error which isn't\n// great, but since the server is local a failure is very\n// unlikely. Still, we should notify errors better.\n//\n// * A full refetch and rerender: this is needed when applying\n// updates locally is too complex. Usually this happens when\n// changing a field that data is sorted on: we're not going\n// to resort the data in memory, we want to rely on the database\n// for that. So we need to do a full refresh.\n//\n// When writing updates, it's up to you to decide which one to do.\n// Optimistic updates feel snappy, but they might show data\n// differently than a full refresh. It's up to you to decide which\n// one to use when doing updates.\n\nasync function saveDiff(diff) {\n let remoteUpdates = await send('transactions-batch-update', {\n ...diff,\n learnCategories: true,\n });\n if (remoteUpdates.length > 0) {\n return { updates: remoteUpdates };\n }\n return {};\n}\n\nasync function saveDiffAndApply(diff, changes, onChange) {\n let remoteDiff = await saveDiff(diff);\n onChange(\n applyTransactionDiff(changes.newTransaction, remoteDiff),\n applyChanges(remoteDiff, changes.data),\n );\n}\n\nexport default function TransactionList({\n tableRef,\n transactions,\n allTransactions,\n loadMoreTransactions,\n account,\n accounts,\n category,\n categoryGroups,\n payees,\n balances,\n showBalances,\n showCleared,\n showAccount,\n headerContent,\n isAdding,\n isNew,\n isMatched,\n isFiltered,\n dateFormat,\n hideFraction,\n addNotification,\n pushModal,\n renderEmpty,\n onSort,\n sortField,\n ascDesc,\n onChange,\n onRefetch,\n onCloseAddTransaction,\n onCreatePayee,\n}) {\n let transactionsLatest = useRef();\n let navigate = useNavigate();\n\n useLayoutEffect(() => {\n transactionsLatest.current = transactions;\n }, [transactions]);\n\n let onAdd = useCallback(async newTransactions => {\n newTransactions = realizeTempTransactions(newTransactions);\n\n await saveDiff({ added: newTransactions });\n onRefetch();\n }, []);\n\n let onSave = useCallback(async transaction => {\n let changes = updateTransaction(transactionsLatest.current, transaction);\n\n if (changes.diff.updated.length > 0) {\n let dateChanged = !!changes.diff.updated[0].date;\n if (dateChanged) {\n // Make sure it stays at the top of the list of transactions\n // for that date\n changes.diff.updated[0].sort_order = Date.now();\n await saveDiff(changes.diff);\n onRefetch();\n } else {\n onChange(changes.newTransaction, changes.data);\n saveDiffAndApply(changes.diff, changes, onChange);\n }\n }\n }, []);\n\n let onAddSplit = useCallback(id => {\n const changes = addSplitTransaction(transactionsLatest.current, id);\n onChange(changes.newTransaction, changes.data);\n saveDiffAndApply(changes.diff, changes, onChange);\n return changes.diff.added[0].id;\n }, []);\n\n let onSplit = useCallback(id => {\n const changes = splitTransaction(transactionsLatest.current, id);\n onChange(changes.newTransaction, changes.data);\n saveDiffAndApply(changes.diff, changes, onChange);\n return changes.diff.added[0].id;\n }, []);\n\n let onApplyRules = useCallback(async transaction => {\n let afterRules = await send('rules-run', { transaction });\n let diff = getChangedValues(transaction, afterRules);\n\n let newTransaction = { ...transaction };\n if (diff) {\n Object.keys(diff).forEach(field => {\n if (\n newTransaction[field] == null ||\n newTransaction[field] === '' ||\n newTransaction[field] === 0 ||\n newTransaction[field] === false\n ) {\n newTransaction[field] = diff[field];\n }\n });\n }\n return newTransaction;\n }, []);\n\n let onManagePayees = useCallback(id => {\n navigate('/payees', { selectedPayee: id });\n });\n\n let onNavigateToTransferAccount = useCallback(accountId => {\n navigate(`/accounts/${accountId}`);\n });\n\n let onNavigateToSchedule = useCallback(scheduleId => {\n pushModal('schedule-edit', { id: scheduleId });\n });\n\n return (\n <TransactionTable\n ref={tableRef}\n transactions={allTransactions}\n loadMoreTransactions={loadMoreTransactions}\n accounts={accounts}\n categoryGroups={categoryGroups}\n payees={payees}\n showBalances={showBalances}\n balances={balances}\n showCleared={showCleared}\n showAccount={showAccount}\n showCategory={true}\n currentAccountId={account && account.id}\n currentCategoryId={category && category.id}\n isAdding={isAdding}\n isNew={isNew}\n isMatched={isMatched}\n isFiltered={isFiltered}\n dateFormat={dateFormat}\n hideFraction={hideFraction}\n addNotification={addNotification}\n headerContent={headerContent}\n renderEmpty={renderEmpty}\n onSave={onSave}\n onApplyRules={onApplyRules}\n onSplit={onSplit}\n onCloseAddTransaction={onCloseAddTransaction}\n onAdd={onAdd}\n onAddSplit={onAddSplit}\n onManagePayees={onManagePayees}\n onCreatePayee={onCreatePayee}\n style={{ backgroundColor: theme.tableBackground }}\n onNavigateToTransferAccount={onNavigateToTransferAccount}\n onNavigateToSchedule={onNavigateToSchedule}\n onSort={onSort}\n sortField={sortField}\n ascDesc={ascDesc}\n />\n );\n}\n","import * as React from 'react';\nimport type { SVGProps } from 'react';\nconst SvgArrowsExpand3 = (props: SVGProps<SVGSVGElement>) => (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n style={{\n color: 'inherit',\n ...props.style,\n }}\n >\n <path\n fill=\"currentColor\"\n d=\"M19.611 2.571h-3.754a1.286 1.286 0 1 1 0-2.571h6.857A1.286 1.286 0 0 1 24 1.286v6.857a1.286 1.286 0 0 1-2.571 0V4.39L15.48 10.34a1.286 1.286 0 0 1-1.817-1.817l5.948-5.95ZM1.286 14.571a1.286 1.286 0 0 1 1.285 1.286v3.754l5.949-5.946a1.286 1.286 0 0 1 1.817 1.817L4.39 21.429h3.753a1.285 1.285 0 1 1 0 2.571H1.286A1.286 1.286 0 0 1 0 22.714v-6.857a1.286 1.286 0 0 1 1.286-1.286Z\"\n />\n </svg>\n);\nexport default SvgArrowsExpand3;\n","import * as React from 'react';\nimport type { SVGProps } from 'react';\nconst SvgArrowsShrink3 = (props: SVGProps<SVGSVGElement>) => (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n style={{\n color: 'inherit',\n ...props.style,\n }}\n >\n <path\n fill=\"currentColor\"\n d=\"M14.143 1.714A1.286 1.286 0 0 1 15.429 3v3.753L21.806.377a1.286 1.286 0 0 1 1.817 1.817l-6.376 6.377H21a1.286 1.286 0 1 1 0 2.572h-6.857a1.286 1.286 0 0 1-1.286-1.286V3a1.286 1.286 0 0 1 1.286-1.286ZM9.857 22.286A1.285 1.285 0 0 1 8.571 21v-3.753l-6.377 6.376a1.286 1.286 0 0 1-1.817-1.817l6.376-6.377H3a1.286 1.286 0 0 1 0-2.572h6.857a1.286 1.286 0 0 1 1.286 1.286V21a1.286 1.286 0 0 1-1.286 1.286Z\"\n />\n </svg>\n);\nexport default SvgArrowsShrink3;\n","import * as React from 'react';\nimport type { SVGProps } from 'react';\nconst SvgDownloadThickBottom = (props: SVGProps<SVGSVGElement>) => (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n style={{\n color: 'inherit',\n ...props.style,\n }}\n >\n <path\n d=\"M8.616 1.741A1.455 1.455 0 0 1 10.07.287h3.392a1.455 1.455 0 0 1 1.453 1.454v8.228a.25.25 0 0 0 .25.25h2.9a1.138 1.138 0 0 1 .827 2l-6.1 6.1a1.489 1.489 0 0 1-2.056 0l-6.1-6.1a1.137 1.137 0 0 1 .827-2h2.9a.249.249 0 0 0 .25-.25Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M0 19.677a4.039 4.039 0 0 0 4.035 4.035h15.93A4.039 4.039 0 0 0 24 19.677V17.8a1.225 1.225 0 0 0-2.449 0v1.874a1.588 1.588 0 0 1-1.586 1.586H4.035a1.588 1.588 0 0 1-1.586-1.586V17.8A1.225 1.225 0 0 0 0 17.8Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nexport default SvgDownloadThickBottom;\n","import * as React from 'react';\nimport type { SVGProps } from 'react';\nconst SvgPencil1 = (props: SVGProps<SVGSVGElement>) => (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n style={{\n color: 'inherit',\n ...props.style,\n }}\n >\n <path\n d=\"M15.067 3.986a.5.5 0 0 0-.354-.148.5.5 0 0 0-.354.147L3.437 14.91a.5.5 0 0 0 0 .707l4.948 4.948a.5.5 0 0 0 .707 0L20.009 9.648a.5.5 0 0 0 0-.706ZM2.43 16.8a.5.5 0 0 0-.489-.127.5.5 0 0 0-.351.364L.084 23.314a.5.5 0 0 0 .133.47.507.507 0 0 0 .47.132l6.272-1.5a.5.5 0 0 0 .237-.84ZM23.2 2.924 21.077.8a2.5 2.5 0 0 0-3.532 0l-1.418 1.417a.5.5 0 0 0 0 .707l4.95 4.949a.5.5 0 0 0 .707 0L23.2 6.454a2.5 2.5 0 0 0 0-3.53Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nexport default SvgPencil1;\n","import React from 'react';\n\nimport DotsHorizontalTriple from '../../icons/v1/DotsHorizontalTriple';\n\nimport Button from './Button';\n\nexport default function MenuButton({ onClick }) {\n return (\n <Button type=\"bare\" onClick={onClick} aria-label=\"Menu\">\n <DotsHorizontalTriple\n width={15}\n height={15}\n style={{ transform: 'rotateZ(90deg)' }}\n />\n </Button>\n );\n}\n","import React, { useMemo } from 'react';\n\nimport { useSelectedItems } from '../../hooks/useSelected';\nimport Menu from '../common/Menu';\nimport { SelectedItemsButton } from '../table';\n\nimport { isPreviewId } from './TransactionsTable';\n\nexport function SelectedTransactionsButton({\n getTransaction,\n onShow,\n onDuplicate,\n onDelete,\n onEdit,\n onUnlink,\n onCreateRule,\n onScheduleAction,\n pushModal,\n}) {\n let selectedItems = useSelectedItems();\n\n let types = useMemo(() => {\n let items = [...selectedItems];\n return {\n preview: !!items.find(id => isPreviewId(id)),\n trans: !!items.find(id => !isPreviewId(id)),\n };\n }, [selectedItems]);\n\n let ambiguousDuplication = useMemo(() => {\n let transactions = [...selectedItems].map(id => getTransaction(id));\n\n return transactions.some(t => t && t.is_child);\n }, [selectedItems]);\n\n let linked = useMemo(() => {\n return (\n !types.preview &&\n [...selectedItems].every(id => {\n let t = getTransaction(id);\n return t && t.schedule;\n })\n );\n }, [types.preview, selectedItems, getTransaction]);\n\n return (\n <SelectedItemsButton\n name=\"transactions\"\n keyHandlers={\n types.trans && {\n f: () => onShow([...selectedItems]),\n d: () => onDelete([...selectedItems]),\n a: () => onEdit('account', [...selectedItems]),\n p: () => onEdit('payee', [...selectedItems]),\n n: () => onEdit('notes', [...selectedItems]),\n c: () => onEdit('category', [...selectedItems]),\n l: () => onEdit('cleared', [...selectedItems]),\n }\n }\n items={[\n ...(!types.trans\n ? [\n { name: 'view-schedule', text: 'View schedule' },\n { name: 'post-transaction', text: 'Post transaction' },\n { name: 'skip', text: 'Skip scheduled date' },\n ]\n : [\n { name: 'show', text: 'Show', key: 'F' },\n {\n name: 'duplicate',\n text: 'Duplicate',\n disabled: ambiguousDuplication,\n },\n { name: 'delete', text: 'Delete', key: 'D' },\n ...(linked\n ? [\n {\n name: 'view-schedule',\n text: 'View schedule',\n disabled: selectedItems.size > 1,\n },\n { name: 'unlink-schedule', text: 'Unlink schedule' },\n ]\n : [\n {\n name: 'link-schedule',\n text: 'Link schedule',\n },\n {\n name: 'create-rule',\n text: 'Create rule',\n },\n ]),\n Menu.line,\n { type: Menu.label, name: 'Edit field' },\n { name: 'date', text: 'Date' },\n { name: 'account', text: 'Account', key: 'A' },\n { name: 'payee', text: 'Payee', key: 'P' },\n { name: 'notes', text: 'Notes', key: 'N' },\n { name: 'category', text: 'Category', key: 'C' },\n { name: 'amount', text: 'Amount' },\n { name: 'cleared', text: 'Cleared', key: 'L' },\n ]),\n ]}\n onSelect={name => {\n switch (name) {\n case 'show':\n onShow([...selectedItems]);\n break;\n case 'duplicate':\n onDuplicate([...selectedItems]);\n break;\n case 'delete':\n onDelete([...selectedItems]);\n break;\n case 'post-transaction':\n case 'skip':\n onScheduleAction(name, selectedItems);\n break;\n case 'view-schedule':\n let firstId = [...selectedItems][0];\n let scheduleId;\n if (isPreviewId(firstId)) {\n let parts = firstId.split('/');\n scheduleId = parts[1];\n } else {\n let trans = getTransaction(firstId);\n scheduleId = trans && trans.schedule;\n }\n\n if (scheduleId) {\n pushModal('schedule-edit', { id: scheduleId });\n }\n break;\n case 'link-schedule':\n pushModal('schedule-link', {\n transactionIds: [...selectedItems],\n });\n break;\n case 'unlink-schedule':\n onUnlink([...selectedItems]);\n break;\n case 'create-rule':\n onCreateRule([...selectedItems]);\n break;\n default:\n onEdit(name, [...selectedItems]);\n }\n }}\n />\n );\n}\n","import * as React from 'react';\nimport type { SVGProps } from 'react';\nconst SvgArrowButtonRight1 = (props: SVGProps<SVGSVGElement>) => (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n style={{\n color: 'inherit',\n ...props.style,\n }}\n >\n <path\n d=\"M13.584 12a2.643 2.643 0 0 1-.775 1.875l-9.541 9.541a1.768 1.768 0 0 1-2.5-2.5l8.739-8.739a.25.25 0 0 0 0-.354L.768 3.084a1.768 1.768 0 0 1 2.5-2.5l9.541 9.541A2.643 2.643 0 0 1 13.584 12Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M23.75 12a2.643 2.643 0 0 1-.775 1.875l-9.541 9.541a1.768 1.768 0 0 1-2.5-2.5l8.739-8.739a.25.25 0 0 0 0-.354l-8.739-8.739a1.768 1.768 0 0 1 2.5-2.5l9.541 9.541A2.643 2.643 0 0 1 23.75 12Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\nexport default SvgArrowButtonRight1;\n","import React from 'react';\n\nimport { useCachedSchedules } from 'loot-core/src/client/data-hooks/schedules';\nimport q from 'loot-core/src/client/query-helpers';\nimport { getScheduledAmount } from 'loot-core/src/shared/schedules';\n\nimport { useSelectedItems } from '../../hooks/useSelected';\nimport ArrowButtonRight1 from '../../icons/v2/ArrowButtonRight1';\nimport { theme } from '../../style';\nimport Button from '../common/Button';\nimport Text from '../common/Text';\nimport View from '../common/View';\nimport PrivacyFilter from '../PrivacyFilter';\nimport CellValue from '../spreadsheet/CellValue';\nimport useFormat from '../spreadsheet/useFormat';\nimport useSheetValue from '../spreadsheet/useSheetValue';\nimport { isPreviewId } from '../transactions/TransactionsTable';\n\nfunction DetailedBalance({ name, balance, isExactBalance = true }) {\n const format = useFormat();\n return (\n <Text\n style={{\n marginLeft: 15,\n borderRadius: 4,\n padding: '4px 6px',\n color: theme.alt2PillText,\n backgroundColor: theme.pillBackground,\n }}\n >\n {name}{' '}\n <PrivacyFilter>\n <Text style={{ fontWeight: 600 }}>\n {!isExactBalance && '~ '}\n {format(balance, 'financial')}\n </Text>\n </PrivacyFilter>\n </Text>\n );\n}\n\nfunction SelectedBalance({ selectedItems, account }) {\n let name = `selected-balance-${[...selectedItems].join('-')}`;\n\n let rows = useSheetValue({\n name,\n query: q('transactions')\n .filter({\n id: { $oneof: [...selectedItems] },\n parent_id: { $oneof: [...selectedItems] },\n })\n .select('id'),\n });\n let ids = new Set((rows || []).map(r => r.id));\n\n let finalIds = [...selectedItems].filter(id => !ids.has(id));\n let balance = useSheetValue({\n name: name + '-sum',\n query: q('transactions')\n .filter({ id: { $oneof: finalIds } })\n .options({ splits: 'all' })\n .calculate({ $sum: '$amount' }),\n });\n\n let scheduleBalance = null;\n let scheduleData = useCachedSchedules();\n let schedules = scheduleData ? scheduleData.schedules : [];\n let previewIds = [...selectedItems]\n .filter(id => isPreviewId(id))\n .map(id => id.slice(8));\n let isExactBalance = true;\n\n for (let s of schedules) {\n if (previewIds.includes(s.id)) {\n // If a schedule is `between X and Y` then we calculate the average\n if (s._amountOp === 'isbetween') {\n isExactBalance = false;\n }\n\n if (!account || account.id === s._account) {\n scheduleBalance += getScheduledAmount(s._amount);\n } else {\n scheduleBalance -= getScheduledAmount(s._amount);\n }\n }\n }\n\n if (balance == null) {\n if (scheduleBalance == null) {\n return null;\n } else {\n balance = scheduleBalance;\n }\n } else if (scheduleBalance != null) {\n balance += scheduleBalance;\n }\n\n return (\n <DetailedBalance\n name=\"Selected balance:\"\n balance={balance}\n isExactBalance={isExactBalance}\n />\n );\n}\n\nfunction MoreBalances({ balanceQuery }) {\n let cleared = useSheetValue({\n name: balanceQuery.name + '-cleared',\n query: balanceQuery.query.filter({ cleared: true }),\n });\n let uncleared = useSheetValue({\n name: balanceQuery.name + '-uncleared',\n query: balanceQuery.query.filter({ cleared: false }),\n });\n\n return (\n <View style={{ flexDirection: 'row' }}>\n <DetailedBalance name=\"Cleared total:\" balance={cleared} />\n <DetailedBalance name=\"Uncleared total:\" balance={uncleared} />\n </View>\n );\n}\n\nexport function Balances({\n balanceQuery,\n showExtraBalances,\n onToggleExtraBalances,\n account,\n}) {\n let selectedItems = useSelectedItems();\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n marginTop: -5,\n marginLeft: -5,\n }}\n >\n <Button\n data-testid=\"account-balance\"\n type=\"bare\"\n onClick={onToggleExtraBalances}\n style={{\n '& svg': {\n opacity: selectedItems.size > 0 || showExtraBalances ? 1 : 0,\n },\n '&:hover svg': { opacity: 1 },\n }}\n >\n <CellValue\n binding={{ ...balanceQuery, value: 0 }}\n type=\"financial\"\n style={{ fontSize: 22, fontWeight: 400 }}\n getStyle={value => ({\n color:\n value < 0\n ? theme.errorText\n : value > 0\n ? theme.noticeTextLight\n : theme.pageTextSubdued,\n })}\n privacyFilter={{\n blurIntensity: 5,\n }}\n />\n\n <ArrowButtonRight1\n style={{\n width: 10,\n height: 10,\n marginLeft: 10,\n color: theme.alt2PillText,\n transform: showExtraBalances ? 'rotateZ(180deg)' : 'rotateZ(0)',\n }}\n />\n </Button>\n {showExtraBalances && <MoreBalances balanceQuery={balanceQuery} />}\n\n {selectedItems.size > 0 && (\n <SelectedBalance selectedItems={selectedItems} account={account} />\n )}\n </View>\n );\n}\n","import React from 'react';\n\nimport * as queries from 'loot-core/src/client/queries';\nimport { currencyToInteger } from 'loot-core/src/shared/util';\n\nimport CheckCircle1 from '../../icons/v2/CheckCircle1';\nimport { styles, theme } from '../../style';\nimport Button from '../common/Button';\nimport InitialFocus from '../common/InitialFocus';\nimport Input from '../common/Input';\nimport Text from '../common/Text';\nimport View from '../common/View';\nimport useFormat from '../spreadsheet/useFormat';\nimport useSheetValue from '../spreadsheet/useSheetValue';\nimport { Tooltip } from '../tooltips';\n\nexport function ReconcilingMessage({\n balanceQuery,\n targetBalance,\n onDone,\n onCreateTransaction,\n}) {\n let cleared = useSheetValue({\n name: balanceQuery.name + '-cleared',\n value: 0,\n query: balanceQuery.query.filter({ cleared: true }),\n });\n let format = useFormat();\n let targetDiff = targetBalance - cleared;\n\n return (\n <View\n style={{\n flexDirection: 'row',\n alignSelf: 'center',\n backgroundColor: theme.tableBackground,\n ...styles.shadow,\n borderRadius: 4,\n marginTop: 5,\n marginBottom: 15,\n padding: 10,\n }}\n >\n <View style={{ flexDirection: 'row', alignItems: 'center' }}>\n {targetDiff === 0 ? (\n <View\n style={{\n color: theme.noticeTextLight,\n flex: 1,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <CheckCircle1\n style={{\n width: 13,\n height: 13,\n color: 'inherit',\n marginRight: 3,\n }}\n />\n All reconciled!\n </View>\n ) : (\n <View style={{ color: theme.tableText }}>\n <Text style={{ fontStyle: 'italic', textAlign: 'center' }}>\n Your cleared balance{' '}\n <strong>{format(cleared, 'financial')}</strong> needs{' '}\n <strong>\n {(targetDiff > 0 ? '+' : '') + format(targetDiff, 'financial')}\n </strong>{' '}\n to match\n <br /> your bank’s balance of{' '}\n <Text style={{ fontWeight: 700 }}>\n {format(targetBalance, 'financial')}\n </Text>\n </Text>\n </View>\n )}\n <View style={{ marginLeft: 15 }}>\n <Button type=\"primary\" onClick={onDone}>\n Done Reconciling\n </Button>\n </View>\n {targetDiff !== 0 && (\n <View style={{ marginLeft: 15 }}>\n <Button onClick={() => onCreateTransaction(targetDiff)}>\n Create Reconciliation Transaction\n </Button>\n </View>\n )}\n </View>\n </View>\n );\n}\n\nexport function ReconcileTooltip({ account, onReconcile, onClose }) {\n let balanceQuery = queries.accountBalance(account);\n let clearedBalance = useSheetValue({\n name: balanceQuery.name + '-cleared',\n value: null,\n query: balanceQuery.query.filter({ cleared: true }),\n });\n let format = useFormat();\n\n function onSubmit(e) {\n e.preventDefault();\n let input = e.target.elements[0];\n let amount = currencyToInteger(input.value);\n if (amount != null) {\n onReconcile(amount == null ? clearedBalance : amount);\n onClose();\n } else {\n input.select();\n }\n }\n\n return (\n <Tooltip position=\"bottom-right\" width={275} onClose={onClose}>\n <View style={{ padding: '5px 8px' }}>\n <Text>\n Enter the current balance of your bank account that you want to\n reconcile with:\n </Text>\n <form onSubmit={onSubmit}>\n {clearedBalance != null && (\n <InitialFocus>\n <Input\n defaultValue={format(clearedBalance, 'financial')}\n style={{ margin: '7px 0' }}\n />\n </InitialFocus>\n )}\n <Button type=\"primary\">Reconcile</Button>\n </form>\n </View>\n </Tooltip>\n );\n}\n","import React, { useState, useRef } from 'react';\n\nimport useSyncServerStatus from '../../hooks/useSyncServerStatus';\nimport AnimatedLoading from '../../icons/AnimatedLoading';\nimport Add from '../../icons/v1/Add';\nimport ArrowsExpand3 from '../../icons/v2/ArrowsExpand3';\nimport ArrowsShrink3 from '../../icons/v2/ArrowsShrink3';\nimport DownloadThickBottom from '../../icons/v2/DownloadThickBottom';\nimport Pencil1 from '../../icons/v2/Pencil1';\nimport { theme, styles } from '../../style';\nimport AnimatedRefresh from '../AnimatedRefresh';\nimport Button from '../common/Button';\nimport InitialFocus from '../common/InitialFocus';\nimport Input from '../common/Input';\nimport Menu from '../common/Menu';\nimport MenuButton from '../common/MenuButton';\nimport MenuTooltip from '../common/MenuTooltip';\nimport Search from '../common/Search';\nimport Stack from '../common/Stack';\nimport View from '../common/View';\nimport { FilterButton } from '../filters/FiltersMenu';\nimport { FiltersStack } from '../filters/SavedFilters';\nimport { KeyHandlers } from '../KeyHandlers';\nimport NotesButton from '../NotesButton';\nimport { SelectedTransactionsButton } from '../transactions/SelectedTransactions';\nimport { useSplitsExpanded } from '../transactions/TransactionsTable';\n\nimport { Balances } from './Balance';\nimport { ReconcilingMessage, ReconcileTooltip } from './Reconcile';\n\nexport function AccountHeader({\n tableRef,\n editingName,\n isNameEditable,\n workingHard,\n accountName,\n account,\n filterId,\n filtersList,\n accountsSyncing,\n accounts,\n transactions,\n showBalances,\n showExtraBalances,\n showCleared,\n showEmptyMessage,\n balanceQuery,\n reconcileAmount,\n canCalculateBalance,\n isSorted,\n search,\n filters,\n conditionsOp,\n savePrefs,\n pushModal,\n onSearch,\n onAddTransaction,\n onShowTransactions,\n onDoneReconciling,\n onCreateReconciliationTransaction,\n onToggleExtraBalances,\n onSaveName,\n onExposeName,\n onSync,\n onImport,\n onMenuSelect,\n onReconcile,\n onBatchDelete,\n onBatchDuplicate,\n onBatchEdit,\n onBatchUnlink,\n onCreateRule,\n onApplyFilter,\n onUpdateFilter,\n onClearFilters,\n onReloadSavedFilter,\n onCondOpChange,\n onDeleteFilter,\n onScheduleAction,\n}) {\n let [menuOpen, setMenuOpen] = useState(false);\n let searchInput = useRef(null);\n let splitsExpanded = useSplitsExpanded();\n\n let canSync = account && account.account_id;\n if (!account) {\n // All accounts - check for any syncable account\n canSync = !!accounts.find(account => !!account.account_id);\n }\n\n function onToggleSplits() {\n if (tableRef.current) {\n splitsExpanded.dispatch({\n type: 'switch-mode',\n id: tableRef.current.getScrolledItem(),\n });\n\n savePrefs({\n 'expand-splits': !(splitsExpanded.state.mode === 'expand'),\n });\n }\n }\n\n return (\n <>\n <KeyHandlers\n keys={{\n 'ctrl+f, cmd+f': () => {\n if (searchInput.current) {\n searchInput.current.focus();\n }\n },\n }}\n />\n\n <View style={{ ...styles.pageContent, paddingBottom: 10, flexShrink: 0 }}>\n <View style={{ marginTop: 2, alignItems: 'flex-start' }}>\n <View>\n {editingName ? (\n <InitialFocus>\n <Input\n defaultValue={accountName}\n onEnter={e => onSaveName(e.target.value)}\n onBlur={() => onExposeName(false)}\n style={{\n fontSize: 25,\n fontWeight: 500,\n marginTop: -5,\n marginBottom: -2,\n marginLeft: -5,\n }}\n />\n </InitialFocus>\n ) : isNameEditable ? (\n <View\n style={{\n flexDirection: 'row',\n alignItems: 'center',\n gap: 3,\n '& .hover-visible': {\n opacity: 0,\n transition: 'opacity .25s',\n },\n '&:hover .hover-visible': {\n opacity: 1,\n },\n }}\n >\n <View\n style={{\n fontSize: 25,\n fontWeight: 500,\n marginRight: 5,\n marginBottom: 5,\n }}\n data-testid=\"account-name\"\n >\n {account && account.closed\n ? 'Closed: ' + accountName\n : accountName}\n </View>\n\n {account && <NotesButton id={`account-${account.id}`} />}\n <Button\n type=\"bare\"\n className=\"hover-visible\"\n onClick={() => onExposeName(true)}\n >\n <Pencil1\n style={{\n width: 11,\n height: 11,\n color: theme.altButtonBareText,\n }}\n />\n </Button>\n </View>\n ) : (\n <View\n style={{ fontSize: 25, fontWeight: 500, marginBottom: 5 }}\n data-testid=\"account-name\"\n >\n {account && account.closed\n ? 'Closed: ' + accountName\n : accountName}\n </View>\n )}\n </View>\n </View>\n\n <Balances\n balanceQuery={balanceQuery}\n showExtraBalances={showExtraBalances}\n onToggleExtraBalances={onToggleExtraBalances}\n account={account}\n />\n\n <Stack\n spacing={2}\n direction=\"row\"\n align=\"center\"\n style={{ marginTop: 12 }}\n >\n {((account && !account.closed) || canSync) && (\n <Button type=\"bare\" onClick={canSync ? onSync : onImport}>\n {canSync ? (\n <>\n <AnimatedRefresh\n width={13}\n height={13}\n animating={\n (account && accountsSyncing === account.name) ||\n accountsSyncing === '__all'\n }\n style={{ marginRight: 4 }}\n />{' '}\n Sync\n </>\n ) : (\n <>\n <DownloadThickBottom\n width={13}\n height={13}\n style={{ marginRight: 4 }}\n />{' '}\n Import\n </>\n )}\n </Button>\n )}\n {!showEmptyMessage && (\n <Button type=\"bare\" onClick={onAddTransaction}>\n <Add width={10} height={10} style={{ marginRight: 3 }} /> Add New\n </Button>\n )}\n <View style={{ flexShrink: 0 }}>\n <FilterButton onApply={onApplyFilter} />\n </View>\n <View style={{ flex: 1 }} />\n <Search\n placeholder=\"Search\"\n value={search}\n onChange={onSearch}\n inputRef={searchInput}\n />\n {workingHard ? (\n <View>\n <AnimatedLoading style={{ width: 16, height: 16 }} />\n </View>\n ) : (\n <SelectedTransactionsButton\n getTransaction={id => transactions.find(t => t.id === id)}\n onShow={onShowTransactions}\n onDuplicate={onBatchDuplicate}\n onDelete={onBatchDelete}\n onEdit={onBatchEdit}\n onUnlink={onBatchUnlink}\n onCreateRule={onCreateRule}\n onScheduleAction={onScheduleAction}\n pushModal={pushModal}\n />\n )}\n <Button\n type=\"bare\"\n disabled={search !== '' || filters.length > 0}\n style={{ padding: 6, marginLeft: 10 }}\n onClick={onToggleSplits}\n title={\n splitsExpanded.state.mode === 'collapse'\n ? 'Collapse split transactions'\n : 'Expand split transactions'\n }\n >\n {splitsExpanded.state.mode === 'collapse' ? (\n <ArrowsShrink3 style={{ width: 14, height: 14 }} />\n ) : (\n <ArrowsExpand3 style={{ width: 14, height: 14 }} />\n )}\n </Button>\n {account ? (\n <View>\n <MenuButton onClick={() => setMenuOpen(true)} />\n\n {menuOpen && (\n <AccountMenu\n account={account}\n canSync={canSync}\n canShowBalances={canCalculateBalance()}\n isSorted={isSorted}\n showBalances={showBalances}\n showCleared={showCleared}\n onMenuSelect={item => {\n setMenuOpen(false);\n onMenuSelect(item);\n }}\n onReconcile={onReconcile}\n onClose={() => setMenuOpen(false)}\n />\n )}\n </View>\n ) : (\n <View>\n <MenuButton onClick={() => setMenuOpen(true)} />\n\n {menuOpen && (\n <CategoryMenu\n onMenuSelect={item => {\n setMenuOpen(false);\n onMenuSelect(item);\n }}\n onClose={() => setMenuOpen(false)}\n isSorted={isSorted}\n />\n )}\n </View>\n )}\n </Stack>\n\n {filters && filters.length > 0 && (\n <FiltersStack\n filters={filters}\n conditionsOp={conditionsOp}\n onUpdateFilter={onUpdateFilter}\n onDeleteFilter={onDeleteFilter}\n onClearFilters={onClearFilters}\n onReloadSavedFilter={onReloadSavedFilter}\n filterId={filterId}\n filtersList={filtersList}\n onCondOpChange={onCondOpChange}\n />\n )}\n </View>\n {reconcileAmount != null && (\n <ReconcilingMessage\n targetBalance={reconcileAmount}\n balanceQuery={balanceQuery}\n onDone={onDoneReconciling}\n onCreateTransaction={onCreateReconciliationTransaction}\n />\n )}\n </>\n );\n}\n\nfunction AccountMenu({\n account,\n canSync,\n showBalances,\n canShowBalances,\n showCleared,\n onClose,\n isSorted,\n onReconcile,\n onMenuSelect,\n}) {\n let [tooltip, setTooltip] = useState('default');\n const syncServerStatus = useSyncServerStatus();\n\n return tooltip === 'reconcile' ? (\n <ReconcileTooltip\n account={account}\n onClose={onClose}\n onReconcile={onReconcile}\n />\n ) : (\n <MenuTooltip width={200} onClose={onClose}>\n <Menu\n onMenuSelect={item => {\n if (item === 'reconcile') {\n setTooltip('reconcile');\n } else {\n onMenuSelect(item);\n }\n }}\n items={[\n isSorted && {\n name: 'remove-sorting',\n text: 'Remove all sorting',\n },\n canShowBalances && {\n name: 'toggle-balance',\n text: (showBalances ? 'Hide' : 'Show') + ' running balance',\n },\n {\n name: 'toggle-cleared',\n text: (showCleared ? 'Hide' : 'Show') + ' “cleared” checkboxes',\n },\n { name: 'export', text: 'Export' },\n { name: 'reconcile', text: 'Reconcile' },\n account &&\n !account.closed &&\n (canSync\n ? {\n name: 'unlink',\n text: 'Unlink account',\n }\n : syncServerStatus === 'online' && {\n name: 'link',\n text: 'Link account',\n }),\n account.closed\n ? { name: 'reopen', text: 'Reopen account' }\n : { name: 'close', text: 'Close account' },\n ].filter(x => x)}\n />\n </MenuTooltip>\n );\n}\n\nfunction CategoryMenu({ onClose, onMenuSelect, isSorted }) {\n return (\n <MenuTooltip width={200} onClose={onClose}>\n <Menu\n onMenuSelect={item => {\n onMenuSelect(item);\n }}\n items={[\n isSorted && {\n name: 'remove-sorting',\n text: 'Remove all sorting',\n },\n { name: 'export', text: 'Export' },\n ]}\n />\n </MenuTooltip>\n );\n}\n","import React, { PureComponent, createRef, useMemo } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Navigate, useParams, useLocation, useMatch } from 'react-router-dom';\n\nimport { debounce } from 'debounce';\nimport { bindActionCreators } from 'redux';\n\nimport * as actions from 'loot-core/src/client/actions';\nimport { useFilters } from 'loot-core/src/client/data-hooks/filters';\nimport {\n SchedulesProvider,\n useCachedSchedules,\n} from 'loot-core/src/client/data-hooks/schedules';\nimport * as queries from 'loot-core/src/client/queries';\nimport q, { runQuery, pagedQuery } from 'loot-core/src/client/query-helpers';\nimport { send, listen } from 'loot-core/src/platform/client/fetch';\nimport { currentDay } from 'loot-core/src/shared/months';\nimport { getScheduledAmount } from 'loot-core/src/shared/schedules';\nimport {\n deleteTransaction,\n updateTransaction,\n realizeTempTransactions,\n ungroupTransaction,\n ungroupTransactions,\n} from 'loot-core/src/shared/transactions';\nimport { applyChanges, groupById } from 'loot-core/src/shared/util';\n\nimport { authorizeBank } from '../../gocardless';\nimport useCategories from '../../hooks/useCategories';\nimport { SelectedProviderWithItems } from '../../hooks/useSelected';\nimport { styles, theme } from '../../style';\nimport Button from '../common/Button';\nimport Text from '../common/Text';\nimport View from '../common/View';\nimport TransactionList from '../transactions/TransactionList';\nimport {\n SplitsExpandedProvider,\n useSplitsExpanded,\n} from '../transactions/TransactionsTable';\n\nimport { AccountHeader } from './Header';\n\nfunction EmptyMessage({ onAdd }) {\n return (\n <View\n style={{\n color: theme.tableText,\n backgroundColor: theme.tableBackground,\n flex: 1,\n alignItems: 'center',\n borderTopWidth: 1,\n borderColor: theme.tableBorder,\n }}\n >\n <View\n style={{\n width: 550,\n marginTop: 75,\n fontSize: 15,\n alignItems: 'center',\n }}\n >\n <Text style={{ textAlign: 'center', lineHeight: '1.4em' }}>\n For Actual to be useful, you need to <strong>add an account</strong>.\n You can link an account to automatically download transactions, or\n manage it locally yourself.\n </Text>\n\n <Button type=\"primary\" style={{ marginTop: 20 }} onClick={onAdd}>\n Add account\n </Button>\n\n <View\n style={{ marginTop: 20, fontSize: 13, color: theme.alttableText }}\n >\n In the future, you can add accounts from the sidebar.\n </View>\n </View>\n </View>\n );\n}\n\nfunction AllTransactions({\n account = {},\n transactions,\n balances,\n showBalances,\n filtered,\n children,\n}) {\n const { id: accountId } = account;\n let scheduleData = useCachedSchedules();\n\n transactions ??= [];\n\n let schedules = useMemo(\n () =>\n scheduleData\n ? scheduleData.schedules.filter(\n s =>\n !s.completed &&\n ['due', 'upcoming', 'missed'].includes(\n scheduleData.statuses.get(s.id),\n ),\n )\n : [],\n [scheduleData],\n );\n\n let prependTransactions = useMemo(() => {\n return schedules.map(schedule => ({\n id: `preview/${schedule.id}`,\n payee: schedule._payee,\n account: schedule._account,\n amount: schedule._amount,\n date: schedule.next_date,\n notes: scheduleData.statuses.get(schedule.id),\n schedule: schedule.id,\n _inverse: accountId ? accountId !== schedule._account : false,\n }));\n }, [schedules, accountId]);\n\n let runningBalance = useMemo(() => {\n if (!showBalances) {\n return 0;\n }\n\n return balances && transactions?.length > 0\n ? balances[transactions[0].id]?.balance ?? 0\n : 0;\n }, [showBalances, balances, transactions]);\n\n let prependBalances = useMemo(() => {\n if (!showBalances) {\n return null;\n }\n\n // Reverse so we can calculate from earliest upcoming schedule.\n let scheduledBalances = [...prependTransactions]\n .reverse()\n .map(scheduledTransaction => {\n let amount =\n (scheduledTransaction._inverse ? -1 : 1) *\n getScheduledAmount(scheduledTransaction.amount);\n return {\n balance: (runningBalance += amount),\n id: scheduledTransaction.id,\n };\n });\n return groupById(scheduledBalances);\n }, [showBalances, prependTransactions, runningBalance]);\n\n let allTransactions = useMemo(() => {\n // Don't prepend scheduled transactions if we are filtering\n if (!filtered && prependTransactions.length > 0) {\n return prependTransactions.concat(transactions);\n }\n return transactions;\n }, [filtered, prependTransactions, transactions]);\n\n let allBalances = useMemo(() => {\n // Don't prepend scheduled transactions if we are filtering\n if (!filtered && prependBalances && balances) {\n return { ...prependBalances, ...balances };\n }\n return balances;\n }, [filtered, prependBalances, balances]);\n\n if (scheduleData == null) {\n return children(transactions, balances);\n }\n return children(allTransactions, allBalances);\n}\n\nfunction getField(field) {\n switch (field) {\n case 'account':\n return 'account.name';\n case 'payee':\n return 'payee.name';\n case 'category':\n return 'category.name';\n case 'payment':\n return 'amount';\n case 'deposit':\n return 'amount';\n default:\n return field;\n }\n}\n\nclass AccountInternal extends PureComponent {\n constructor(props) {\n super(props);\n this.paged = null;\n this.table = createRef();\n this.animated = true;\n\n this.state = {\n search: '',\n filters: [],\n loading: true,\n workingHard: false,\n reconcileAmount: null,\n transactions: [],\n transactionsCount: 0,\n showBalances: props.showBalances,\n balances: null,\n showCleared: props.showCleared,\n editingName: false,\n isAdding: false,\n latestDate: null,\n filterId: [],\n conditionsOp: 'and',\n sort: [],\n };\n }\n\n async componentDidMount() {\n let maybeRefetch = tables => {\n if (\n tables.includes('transactions') ||\n tables.includes('category_mapping') ||\n tables.includes('payee_mapping')\n ) {\n return this.refetchTransactions();\n }\n };\n\n let onUndo = async ({ tables, messages, undoTag }) => {\n await maybeRefetch(tables);\n\n // If all the messages are dealing with transactions, find the\n // first message referencing a non-deleted row so that we can\n // highlight the row\n //\n let focusId;\n if (\n messages.every(msg => msg.dataset === 'transactions') &&\n !messages.find(msg => msg.column === 'tombstone')\n ) {\n let focusableMsgs = messages.filter(\n msg =>\n msg.dataset === 'transactions' && !(msg.column === 'tombstone'),\n );\n\n focusId = focusableMsgs.length === 1 ? focusableMsgs[0].row : null;\n\n // Highlight the transactions\n // this.table && this.table.highlight(focusableMsgs.map(msg => msg.row));\n }\n\n if (this.table.current) {\n this.table.current.edit(null);\n\n // Focus a transaction if applicable. There is a chance if the\n // user navigated away that focusId is a transaction that has\n // been \"paged off\" and we won't focus it. That's ok, we just\n // do our best.\n if (focusId) {\n this.table.current.scrollTo(focusId);\n }\n }\n\n this.props.setLastUndoState(null);\n };\n\n let unlistens = [listen('undo-event', onUndo)];\n\n this.unlisten = () => {\n unlistens.forEach(unlisten => unlisten());\n };\n\n // Important that any async work happens last so that the\n // listeners are set up synchronously\n await this.props.initiallyLoadPayees();\n await this.fetchTransactions();\n\n // If there is a pending undo, apply it immediately (this happens\n // when an undo changes the location to this page)\n if (this.props.lastUndoState && this.props.lastUndoState.current) {\n onUndo(this.props.lastUndoState.current);\n }\n }\n\n componentDidUpdate(prevProps) {\n // If the active account changes - close the transaction entry mode\n if (this.state.isAdding && this.props.accountId !== prevProps.accountId) {\n this.setState({ isAdding: false });\n }\n\n // If the user was on a different screen and is now coming back to\n // the transactions, automatically refresh the transaction to make\n // sure we have updated state\n if (prevProps.modalShowing && !this.props.modalShowing) {\n // This is clearly a hack. Need a better way to track which\n // things are listening to transactions and refetch\n // automatically (use ActualQL?)\n setTimeout(() => {\n this.refetchTransactions();\n }, 100);\n }\n\n //Resest sort/filter/search on account change\n if (this.props.accountId !== prevProps.accountId) {\n this.setState({ sort: [], search: '', filters: [] });\n }\n }\n\n componentWillUnmount() {\n if (this.unlisten) {\n this.unlisten();\n }\n if (this.paged) {\n this.paged.unsubscribe();\n }\n }\n\n fetchAllIds = async () => {\n let { data } = await runQuery(this.paged.getQuery().select('id'));\n // Remember, this is the `grouped` split type so we need to deal\n // with the `subtransactions` property\n return data.reduce((arr, t) => {\n arr.push(t.id);\n t.subtransactions.forEach(sub => arr.push(sub.id));\n return arr;\n }, []);\n };\n\n refetchTransactions = async () => {\n this.paged?.run();\n };\n\n fetchTransactions = () => {\n let query = this.makeRootQuery();\n this.rootQuery = this.currentQuery = query;\n this.updateQuery(query);\n\n if (this.props.accountId) {\n this.props.markAccountRead(this.props.accountId);\n }\n };\n\n makeRootQuery = () => {\n let locationState = this.props.location.state;\n let accountId = this.props.accountId;\n\n if (locationState && locationState.filter) {\n return q('transactions')\n .options({ splits: 'grouped' })\n .filter({\n 'account.offbudget': false,\n ...locationState.filter,\n });\n }\n\n return queries.makeTransactionsQuery(accountId);\n };\n\n updateQuery(query, isFiltered) {\n if (this.paged) {\n this.paged.unsubscribe();\n }\n\n this.paged = pagedQuery(\n query.select('*'),\n async (data, prevData) => {\n const firstLoad = prevData == null;\n\n if (firstLoad) {\n this.table.current?.setRowAnimation(false);\n\n if (isFiltered) {\n this.props.splitsExpandedDispatch({\n type: 'set-mode',\n mode: 'collapse',\n });\n } else {\n this.props.splitsExpandedDispatch({\n type: 'set-mode',\n mode: this.props.expandSplits ? 'expand' : 'collapse',\n });\n }\n }\n\n this.setState(\n {\n transactions: data,\n transactionCount: this.paged.getTotalCount(),\n transactionsFiltered: isFiltered,\n loading: false,\n workingHard: false,\n balances: this.state.showBalances\n ? await this.calculateBalances()\n : null,\n },\n () => {\n if (firstLoad) {\n this.table.current?.scrollToTop();\n }\n\n setTimeout(() => {\n this.table.current?.setRowAnimation(true);\n }, 0);\n },\n );\n },\n {\n pageCount: 150,\n onlySync: true,\n mapper: ungroupTransactions,\n },\n );\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (this.props.accountId !== nextProps.accountId) {\n this.setState(\n {\n editingName: false,\n loading: true,\n search: '',\n showBalances: nextProps.showBalances,\n balances: null,\n showCleared: nextProps.showCleared,\n reconcileAmount: null,\n },\n () => {\n this.fetchTransactions();\n },\n );\n }\n }\n\n onSearch = value => {\n this.paged.unsubscribe();\n this.setState({ search: value }, this.onSearchDone);\n };\n\n onSearchDone = debounce(() => {\n if (this.state.search === '') {\n this.updateQuery(this.currentQuery, this.state.filters.length > 0);\n } else {\n this.updateQuery(\n queries.makeTransactionSearchQuery(\n this.currentQuery,\n this.state.search,\n this.props.dateFormat,\n ),\n true,\n );\n }\n }, 150);\n\n onSync = async () => {\n const accountId = this.props.accountId;\n const account = this.props.accounts.find(acct => acct.id === accountId);\n\n await this.props.syncAndDownload(account ? account.id : null);\n };\n\n onImport = async () => {\n const accountId = this.props.accountId;\n const account = this.props.accounts.find(acct => acct.id === accountId);\n\n if (account) {\n const res = await window.Actual.openFileDialog({\n filters: [\n {\n name: 'Financial Files',\n extensions: ['qif', 'ofx', 'qfx', 'csv', 'tsv'],\n },\n ],\n });\n\n if (res) {\n this.props.pushModal('import-transactions', {\n accountId,\n filename: res[0],\n onImported: didChange => {\n if (didChange) {\n this.fetchTransactions();\n }\n },\n });\n }\n }\n };\n\n onExport = async accountName => {\n let exportedTransactions = await send('transactions-export-query', {\n query: this.currentQuery.serialize(),\n });\n let normalizedName =\n accountName && accountName.replace(/[()]/g, '').replace(/\\s+/g, '-');\n let filename = `${normalizedName || 'transactions'}.csv`;\n\n window.Actual.saveFile(\n exportedTransactions,\n filename,\n 'Export Transactions',\n );\n };\n\n onTransactionsChange = (newTransaction, data) => {\n // Apply changes to pagedQuery data\n this.paged.optimisticUpdate(\n data => {\n if (newTransaction._deleted) {\n return data.filter(t => t.id !== newTransaction.id);\n } else {\n return data.map(t => {\n return t.id === newTransaction.id ? newTransaction : t;\n });\n }\n },\n mappedData => {\n return data;\n },\n );\n\n this.props.updateNewTransactions(newTransaction.id);\n };\n\n canCalculateBalance = () => {\n let accountId = this.props.accountId;\n let account = this.props.accounts.find(account => account.id === accountId);\n return (\n account &&\n this.state.search === '' &&\n this.state.filters.length === 0 &&\n (this.state.sort.length === 0 ||\n (this.state.sort.field === 'date' &&\n this.state.sort.ascDesc === 'desc'))\n );\n };\n\n async calculateBalances() {\n if (!this.canCalculateBalance()) {\n return null;\n }\n\n let { data } = await runQuery(\n this.paged\n .getQuery()\n .options({ splits: 'none' })\n .select([{ balance: { $sumOver: '$amount' } }]),\n );\n\n return groupById(data);\n }\n\n onAddTransaction = () => {\n this.setState({ isAdding: true });\n };\n\n onExposeName = flag => {\n this.setState({ editingName: flag });\n };\n\n onSaveName = name => {\n if (name.trim().length) {\n const accountId = this.props.accountId;\n const account = this.props.accounts.find(\n account => account.id === accountId,\n );\n this.props.updateAccount({ ...account, name });\n this.setState({ editingName: false });\n }\n };\n\n onToggleExtraBalances = () => {\n let { accountId, showExtraBalances } = this.props;\n let key = 'show-extra-balances-' + accountId || 'all-accounts';\n\n this.props.savePrefs({ [key]: !showExtraBalances });\n };\n\n onMenuSelect = async item => {\n const accountId = this.props.accountId;\n const account = this.props.accounts.find(\n account => account.id === accountId,\n );\n\n switch (item) {\n case 'link':\n authorizeBank(this.props.pushModal, { upgradingAccountId: accountId });\n break;\n case 'unlink':\n this.props.unlinkAccount(accountId);\n break;\n case 'close':\n this.props.openAccountCloseModal(accountId);\n break;\n case 'reopen':\n this.props.reopenAccount(accountId);\n break;\n case 'export':\n const accountName = this.getAccountTitle(account, accountId);\n this.onExport(accountName);\n break;\n case 'toggle-balance':\n if (this.state.showBalances) {\n this.props.savePrefs({ ['show-balances-' + accountId]: false });\n this.setState({ showBalances: false, balances: null });\n } else {\n this.props.savePrefs({ ['show-balances-' + accountId]: true });\n this.setState(\n {\n transactions: [],\n transactionCount: 0,\n filters: [],\n search: '',\n sort: [],\n showBalances: true,\n },\n () => {\n this.fetchTransactions();\n },\n );\n }\n break;\n case 'remove-sorting': {\n this.setState({ sort: [] }, () => {\n let filters = this.state.filters;\n if (filters.length > 0) {\n this.applyFilters([...filters]);\n } else {\n this.fetchTransactions();\n }\n if (this.state.search !== '') {\n this.onSearch(this.state.search);\n }\n });\n break;\n }\n case 'toggle-cleared':\n if (this.state.showCleared) {\n this.props.savePrefs({ ['hide-cleared-' + accountId]: true });\n this.setState({ showCleared: false });\n } else {\n this.props.savePrefs({ ['hide-cleared-' + accountId]: false });\n this.setState({ showCleared: true });\n }\n break;\n default:\n }\n };\n\n getAccountTitle(account, id) {\n let { filterName } = this.props.location.state || {};\n\n if (filterName) {\n return filterName;\n }\n\n if (!account) {\n if (id === 'budgeted') {\n return 'Budgeted Accounts';\n } else if (id === 'offbudget') {\n return 'Off Budget Accounts';\n } else if (id === 'uncategorized') {\n return 'Uncategorized';\n } else if (!id) {\n return 'All Accounts';\n }\n return null;\n }\n\n return account.name;\n }\n\n getBalanceQuery(account, id) {\n return {\n name: `balance-query-${id}`,\n query: this.makeRootQuery().calculate({ $sum: '$amount' }),\n };\n }\n\n isNew = id => {\n return this.props.newTransactions.includes(id);\n };\n\n isMatched = id => {\n return this.props.matchedTransactions.includes(id);\n };\n\n onCreatePayee = name => {\n let trimmed = name.trim();\n if (trimmed !== '') {\n return this.props.createPayee(name);\n }\n return null;\n };\n\n onReconcile = balance => {\n this.setState({ reconcileAmount: balance });\n };\n\n onDoneReconciling = () => {\n this.setState({ reconcileAmount: null });\n };\n\n onCreateReconciliationTransaction = async diff => {\n // Create a new reconciliation transaction\n const reconciliationTransactions = realizeTempTransactions([\n {\n id: 'temp',\n account: this.props.accountId,\n cleared: true,\n amount: diff,\n date: currentDay(),\n notes: 'Reconciliation balance adjustment',\n },\n ]);\n\n // Optimistic UI: update the transaction list before sending the data to the database\n this.setState({\n transactions: [...this.state.transactions, ...reconciliationTransactions],\n });\n\n // sync the reconciliation transaction\n await send('transactions-batch-update', {\n added: reconciliationTransactions,\n });\n await this.refetchTransactions();\n };\n\n onShowTransactions = async ids => {\n this.onApplyFilter({\n customName: 'Selected transactions',\n filter: { id: { $oneof: ids } },\n });\n };\n\n onBatchEdit = async (name, ids) => {\n let onChange = async (name, value) => {\n this.setState({ workingHard: true });\n\n let { data } = await runQuery(\n q('transactions')\n .filter({ id: { $oneof: ids } })\n .select('*')\n .options({ splits: 'grouped' }),\n );\n let transactions = ungroupTransactions(data);\n\n let changes = { deleted: [], updated: [] };\n\n // Cleared is a special case right now\n if (name === 'cleared') {\n // Clear them if any are uncleared, otherwise unclear them\n value = !!transactions.find(t => !t.cleared);\n }\n\n const idSet = new Set(ids);\n\n transactions.forEach(trans => {\n if (!idSet.has(trans.id)) {\n // Skip transactions which aren't actually selected, since the query\n // above also retrieves the siblings & parent of any selected splits.\n return;\n }\n\n let { diff } = updateTransaction(transactions, {\n ...trans,\n [name]: value,\n });\n\n // TODO: We need to keep an updated list of transactions so\n // the logic in `updateTransaction`, particularly about\n // updating split transactions, works. This isn't ideal and we\n // should figure something else out\n transactions = applyChanges(diff, transactions);\n\n changes.deleted = changes.deleted\n ? changes.deleted.concat(diff.deleted)\n : diff.deleted;\n changes.updated = changes.updated\n ? changes.updated.concat(diff.updated)\n : diff.updated;\n changes.added = changes.added\n ? changes.added.concat(diff.added)\n : diff.added;\n });\n\n await send('transactions-batch-update', changes);\n await this.refetchTransactions();\n\n if (this.table.current) {\n this.table.current.edit(transactions[0].id, 'select', false);\n }\n };\n\n if (name === 'cleared') {\n // Cleared just toggles it on/off and it depends on the data\n // loaded. Need to clean this up in the future.\n onChange('cleared', null);\n } else {\n this.props.pushModal('edit-field', { name, onSubmit: onChange });\n }\n };\n\n onBatchDuplicate = async ids => {\n this.setState({ workingHard: true });\n\n let { data } = await runQuery(\n q('transactions')\n .filter({ id: { $oneof: ids } })\n .select('*')\n .options({ splits: 'grouped' }),\n );\n\n let changes = {\n added: data\n .reduce((newTransactions, trans) => {\n return newTransactions.concat(\n realizeTempTransactions(ungroupTransaction(trans)),\n );\n }, [])\n .map(({ sort_order, ...trans }) => ({ ...trans })),\n };\n\n await send('transactions-batch-update', changes);\n\n await this.refetchTransactions();\n };\n\n onBatchDelete = async ids => {\n this.setState({ workingHard: true });\n\n let { data } = await runQuery(\n q('transactions')\n .filter({ id: { $oneof: ids } })\n .select('*')\n .options({ splits: 'grouped' }),\n );\n let transactions = ungroupTransactions(data);\n\n let idSet = new Set(ids);\n let changes = { deleted: [], updated: [] };\n\n transactions.forEach(trans => {\n let parentId = trans.parent_id;\n\n // First, check if we're actually deleting this transaction by\n // checking `idSet`. Then, we don't need to do anything if it's\n // a child transaction and the parent is already being deleted\n if (!idSet.has(trans.id) || (parentId && idSet.has(parentId))) {\n return;\n }\n\n let { diff } = deleteTransaction(transactions, trans.id);\n\n // TODO: We need to keep an updated list of transactions so\n // the logic in `updateTransaction`, particularly about\n // updating split transactions, works. This isn't ideal and we\n // should figure something else out\n transactions = applyChanges(diff, transactions);\n\n changes.deleted = diff.deleted\n ? changes.deleted.concat(diff.deleted)\n : diff.deleted;\n changes.updated = diff.updated\n ? changes.updated.concat(diff.updated)\n : diff.updated;\n });\n\n await send('transactions-batch-update', changes);\n await this.refetchTransactions();\n };\n\n onBatchUnlink = async ids => {\n await send('transactions-batch-update', {\n updated: ids.map(id => ({ id, schedule: null })),\n });\n\n await this.refetchTransactions();\n };\n\n onCreateRule = async ids => {\n let { data } = await runQuery(\n q('transactions')\n .filter({ id: { $oneof: ids } })\n .select('*')\n .options({ splits: 'grouped' }),\n );\n let transactions = ungroupTransactions(data);\n let payeeCondition = transactions[0].imported_payee\n ? {\n field: 'imported_payee',\n op: 'is',\n value: transactions[0].imported_payee,\n type: 'string',\n }\n : {\n field: 'payee',\n op: 'is',\n value: transactions[0].payee,\n type: 'id',\n };\n\n let rule = {\n stage: null,\n conditionsOp: 'and',\n conditions: [payeeCondition],\n actions: [\n {\n op: 'set',\n field: 'category',\n value: transactions[0].category,\n type: 'id',\n },\n ],\n };\n\n this.props.pushModal('edit-rule', { rule });\n };\n\n onCondOpChange = (value, filters) => {\n this.setState({ conditionsOp: value });\n this.setState({ filterId: { ...this.state.filterId, status: 'changed' } });\n this.applyFilters([...filters]);\n if (this.state.search !== '') {\n this.onSearch(this.state.search);\n }\n };\n\n onReloadSavedFilter = (savedFilter, item) => {\n if (item === 'reload') {\n let [getFilter] = this.props.filtersList.filter(\n f => f.id === this.state.filterId.id,\n );\n this.setState({ conditionsOp: getFilter.conditionsOp });\n this.applyFilters([...getFilter.conditions]);\n } else {\n if (savedFilter.status) {\n this.setState({ conditionsOp: savedFilter.conditionsOp });\n this.applyFilters([...savedFilter.conditions]);\n }\n }\n this.setState({ filterId: { ...this.state.filterId, ...savedFilter } });\n };\n\n onClearFilters = () => {\n this.setState({ conditionsOp: 'and' });\n this.setState({ filterId: [] });\n this.applyFilters([]);\n if (this.state.search !== '') {\n this.onSearch(this.state.search);\n }\n };\n\n onUpdateFilter = (oldFilter, updatedFilter) => {\n this.applyFilters(\n this.state.filters.map(f => (f === oldFilter ? updatedFilter : f)),\n );\n this.setState({\n filterId: {\n ...this.state.filterId,\n status: this.state.filterId && 'changed',\n },\n });\n if (this.state.search !== '') {\n this.onSearch(this.state.search);\n }\n };\n\n onDeleteFilter = filter => {\n this.applyFilters(this.state.filters.filter(f => f !== filter));\n if (this.state.filters.length === 1) {\n this.setState({ filterId: [] });\n this.setState({ conditionsOp: 'and' });\n } else {\n this.setState({\n filterId: {\n ...this.state.filterId,\n status: this.state.filterId && 'changed',\n },\n });\n }\n if (this.state.search !== '') {\n this.onSearch(this.state.search);\n }\n };\n\n onApplyFilter = async cond => {\n let filters = this.state.filters;\n if (cond.customName) {\n filters = filters.filter(f => f.customName !== cond.customName);\n }\n if (cond.conditions) {\n this.setState({ filterId: { ...cond, status: 'saved' } });\n this.setState({ conditionsOp: cond.conditionsOp });\n this.applyFilters([...cond.conditions]);\n } else {\n this.setState({\n filterId: {\n ...this.state.filterId,\n status: this.state.filterId && 'changed',\n },\n });\n this.applyFilters([...filters, cond]);\n }\n if (this.state.search !== '') {\n this.onSearch(this.state.search);\n }\n };\n\n onScheduleAction = async (name, ids) => {\n switch (name) {\n case 'post-transaction':\n for (let id of ids) {\n let parts = id.split('/');\n await send('schedule/post-transaction', { id: parts[1] });\n }\n this.refetchTransactions();\n break;\n case 'skip':\n for (let id of ids) {\n let parts = id.split('/');\n await send('schedule/skip-next-date', { id: parts[1] });\n }\n break;\n default:\n }\n };\n\n applyFilters = async conditions => {\n if (conditions.length > 0) {\n let customFilters = conditions\n .filter(cond => !!cond.customName)\n .map(f => f.filter);\n let { filters } = await send('make-filters-from-conditions', {\n conditions: conditions.filter(cond => !cond.customName),\n });\n const conditionsOpKey = this.state.conditionsOp === 'or' ? '$or' : '$and';\n this.currentQuery = this.rootQuery.filter({\n [conditionsOpKey]: [...filters, ...customFilters],\n });\n\n this.setState({ filters: conditions }, () => {\n this.updateQuery(this.currentQuery, true);\n });\n } else {\n this.setState(\n {\n transactions: [],\n transactionCount: 0,\n filters: conditions,\n },\n () => {\n this.fetchTransactions();\n },\n );\n }\n\n if (this.state.sort.length !== 0) {\n this.applySort();\n }\n };\n\n applySort = (field, ascDesc, prevField, prevAscDesc) => {\n let filters = this.state.filters;\n let sortField = getField(!field ? this.state.sort.field : field);\n let sortAscDesc = !ascDesc ? this.state.sort.ascDesc : ascDesc;\n let sortPrevField = getField(\n !prevField ? this.state.sort.prevField : prevField,\n );\n let sortPrevAscDesc = !prevField\n ? this.state.sort.prevAscDesc\n : prevAscDesc;\n\n if (!field) {\n //no sort was made (called by applyFilters)\n this.currentQuery = this.currentQuery.orderBy({\n [sortField]: sortAscDesc,\n });\n } else {\n //sort called directly\n if (filters.length > 0) {\n //if filters already exist then apply them\n this.applyFilters([...filters]);\n this.currentQuery = this.currentQuery.orderBy({\n [sortField]: sortAscDesc,\n });\n } else {\n //no filters exist make new rootquery\n this.currentQuery = this.rootQuery.orderBy({\n [sortField]: sortAscDesc,\n });\n }\n }\n if (sortPrevField) {\n //apply previos sort if it exists\n this.currentQuery = this.currentQuery.orderBy({\n [sortPrevField]: sortPrevAscDesc,\n });\n }\n\n this.updateQuery(this.currentQuery, this.state.filters.length > 0);\n };\n\n onSort = (headerClicked, ascDesc) => {\n let prevField;\n let prevAscDesc;\n //if staying on same column but switching asc/desc\n //then keep prev the same\n if (headerClicked === this.state.sort.field) {\n prevField = this.state.sort.prevField;\n prevAscDesc = this.state.sort.prevAscDesc;\n this.setState({\n sort: {\n ...this.state.sort,\n ascDesc: ascDesc,\n },\n });\n } else {\n //if switching to new column then capture state\n //of current sort column as prev\n prevField = this.state.sort.field;\n prevAscDesc = this.state.sort.ascDesc;\n this.setState({\n sort: {\n field: headerClicked,\n ascDesc: ascDesc,\n prevField: this.state.sort.field,\n prevAscDesc: this.state.sort.ascDesc,\n },\n });\n }\n\n this.applySort(headerClicked, ascDesc, prevField, prevAscDesc);\n if (this.state.search !== '') {\n this.onSearch(this.state.search);\n }\n };\n\n render() {\n let {\n accounts,\n categoryGroups,\n payees,\n dateFormat,\n hideFraction,\n addNotification,\n accountsSyncing,\n pushModal,\n replaceModal,\n showExtraBalances,\n accountId,\n categoryId,\n } = this.props;\n let {\n transactions,\n loading,\n workingHard,\n filterId,\n reconcileAmount,\n transactionsFiltered,\n editingName,\n showBalances,\n balances,\n showCleared,\n } = this.state;\n\n let account = accounts.find(account => account.id === accountId);\n const accountName = this.getAccountTitle(account, accountId);\n\n if (!accountName && !loading) {\n // This is probably an account that was deleted, so redirect to\n // all accounts\n return <Navigate to=\"/accounts\" replace />;\n }\n\n let category = categoryGroups\n .flatMap(g => g.categories)\n .find(category => category.id === categoryId);\n\n let showEmptyMessage = !loading && !accountId && accounts.length === 0;\n\n let isNameEditable =\n accountId &&\n accountId !== 'budgeted' &&\n accountId !== 'offbudget' &&\n accountId !== 'uncategorized';\n\n let balanceQuery = this.getBalanceQuery(account, accountId);\n\n return (\n <AllTransactions\n account={account}\n transactions={transactions}\n balances={balances}\n showBalances={showBalances}\n filtered={transactionsFiltered}\n >\n {(allTransactions, allBalances) => (\n <SelectedProviderWithItems\n name=\"transactions\"\n items={allTransactions}\n fetchAllIds={this.fetchAllIds}\n registerDispatch={dispatch => (this.dispatchSelected = dispatch)}\n >\n <View style={styles.page}>\n <AccountHeader\n tableRef={this.table}\n editingName={editingName}\n isNameEditable={isNameEditable}\n workingHard={workingHard}\n account={account}\n filterId={filterId}\n filtersList={this.props.filtersList}\n location={this.props.location}\n accountName={accountName}\n accountsSyncing={accountsSyncing}\n accounts={accounts}\n transactions={transactions}\n showBalances={showBalances}\n showExtraBalances={showExtraBalances}\n showCleared={showCleared}\n showEmptyMessage={showEmptyMessage}\n balanceQuery={balanceQuery}\n canCalculateBalance={this.canCalculateBalance}\n isSorted={this.state.sort.length !== 0}\n reconcileAmount={reconcileAmount}\n search={this.state.search}\n filters={this.state.filters}\n conditionsOp={this.state.conditionsOp}\n savePrefs={this.props.savePrefs}\n pushModal={this.props.pushModal}\n onSearch={this.onSearch}\n onShowTransactions={this.onShowTransactions}\n onMenuSelect={this.onMenuSelect}\n onAddTransaction={this.onAddTransaction}\n onToggleExtraBalances={this.onToggleExtraBalances}\n onSaveName={this.onSaveName}\n onExposeName={this.onExposeName}\n onReconcile={this.onReconcile}\n onDoneReconciling={this.onDoneReconciling}\n onCreateReconciliationTransaction={\n this.onCreateReconciliationTransaction\n }\n onSync={this.onSync}\n onImport={this.onImport}\n onBatchDelete={this.onBatchDelete}\n onBatchDuplicate={this.onBatchDuplicate}\n onBatchEdit={this.onBatchEdit}\n onBatchUnlink={this.onBatchUnlink}\n onCreateRule={this.onCreateRule}\n onUpdateFilter={this.onUpdateFilter}\n onClearFilters={this.onClearFilters}\n onReloadSavedFilter={this.onReloadSavedFilter}\n onCondOpChange={this.onCondOpChange}\n onDeleteFilter={this.onDeleteFilter}\n onApplyFilter={this.onApplyFilter}\n onScheduleAction={this.onScheduleAction}\n />\n\n <View style={{ flex: 1 }}>\n <TransactionList\n tableRef={this.table}\n account={account}\n transactions={transactions}\n allTransactions={allTransactions}\n animated={this.animated}\n loadMoreTransactions={() =>\n this.paged && this.paged.fetchNext()\n }\n accounts={accounts}\n category={category}\n categoryGroups={categoryGroups}\n payees={payees}\n balances={allBalances}\n showBalances={!!allBalances}\n showCleared={showCleared}\n showAccount={\n !accountId ||\n accountId === 'offbudget' ||\n accountId === 'budgeted' ||\n accountId === 'uncategorized'\n }\n isAdding={this.state.isAdding}\n isNew={this.isNew}\n isMatched={this.isMatched}\n isFiltered={\n this.state.search !== '' || this.state.filters.length > 0\n }\n dateFormat={dateFormat}\n hideFraction={hideFraction}\n addNotification={addNotification}\n renderEmpty={() =>\n showEmptyMessage ? (\n <EmptyMessage onAdd={() => replaceModal('add-account')} />\n ) : !loading ? (\n <View\n style={{\n color: theme.tableText,\n marginTop: 20,\n textAlign: 'center',\n fontStyle: 'italic',\n }}\n >\n No transactions\n </View>\n ) : null\n }\n pushModal={pushModal}\n onSort={this.onSort}\n sortField={this.state.sort.field}\n ascDesc={this.state.sort.ascDesc}\n onChange={this.onTransactionsChange}\n onRefetch={this.refetchTransactions}\n onRefetchUpToRow={row =>\n this.paged.refetchUpToRow(row, {\n field: 'date',\n order: 'desc',\n })\n }\n onCloseAddTransaction={() =>\n this.setState({ isAdding: false })\n }\n onCreatePayee={this.onCreatePayee}\n />\n </View>\n </View>\n </SelectedProviderWithItems>\n )}\n </AllTransactions>\n );\n }\n}\n\nfunction AccountHack(props) {\n let { dispatch: splitsExpandedDispatch } = useSplitsExpanded();\n let match = useMatch(props.location.pathname);\n\n return (\n <AccountInternal\n {...props}\n match={match}\n splitsExpandedDispatch={splitsExpandedDispatch}\n />\n );\n}\n\nexport default function Account() {\n let params = useParams();\n let location = useLocation();\n\n let { grouped: categoryGroups } = useCategories();\n let state = useSelector(state => ({\n newTransactions: state.queries.newTransactions,\n matchedTransactions: state.queries.matchedTransactions,\n accounts: state.queries.accounts,\n failedAccounts: state.account.failedAccounts,\n dateFormat: state.prefs.local.dateFormat || 'MM/dd/yyyy',\n hideFraction: state.prefs.local.hideFraction || false,\n expandSplits: state.prefs.local['expand-splits'],\n showBalances: params.id && state.prefs.local['show-balances-' + params.id],\n showCleared: params.id && !state.prefs.local['hide-cleared-' + params.id],\n showExtraBalances:\n state.prefs.local['show-extra-balances-' + params.id || 'all-accounts'],\n payees: state.queries.payees,\n modalShowing: state.modals.modalStack.length > 0,\n accountsSyncing: state.account.accountsSyncing,\n lastUndoState: state.app.lastUndoState,\n }));\n\n let dispatch = useDispatch();\n let filtersList = useFilters();\n let actionCreators = useMemo(\n () => bindActionCreators(actions, dispatch),\n [dispatch],\n );\n\n let transform = useMemo(() => {\n let filterByAccount = queries.getAccountFilter(params.id, '_account');\n let filterByPayee = queries.getAccountFilter(\n params.id,\n '_payee.transfer_acct',\n );\n\n // Never show schedules on these pages\n if (\n (location.state && location.state.filter) ||\n params.id === 'uncategorized'\n ) {\n filterByAccount = { id: null };\n filterByPayee = { id: null };\n }\n\n return q => {\n q = q.filter({\n $and: [{ '_account.closed': false }],\n $or: [filterByAccount, filterByPayee],\n });\n return q.orderBy({ next_date: 'desc' });\n };\n }, [params.id]);\n\n return (\n <SchedulesProvider transform={transform}>\n <SplitsExpandedProvider\n initialMode={state.expandSplits ? 'collapse' : 'expand'}\n >\n <AccountHack\n {...state}\n categoryGroups={categoryGroups}\n {...actionCreators}\n modalShowing={state.modalShowing}\n accountId={params.id}\n categoryId={location?.state?.filter?.category}\n location={location}\n filtersList={filtersList}\n />\n </SplitsExpandedProvider>\n </SchedulesProvider>\n );\n}\n","export function addCategory(categoryGroups, cat) {\n return categoryGroups.map(group => {\n if (group.id === cat.cat_group) {\n group.categories = [cat, ...group.categories];\n }\n return { ...group };\n });\n}\n\nexport function updateCategory(categoryGroups, category) {\n return categoryGroups.map(group => {\n if (group.id === category.cat_group) {\n group.categories = group.categories.map(c => {\n if (c.id === category.id) {\n return { ...c, ...category };\n }\n return c;\n });\n }\n return group;\n });\n}\n\nexport function moveCategory(categoryGroups, id, groupId, targetId) {\n if (id === targetId) {\n return categoryGroups;\n }\n\n let moveCat = categoryGroups.reduce((value, group) => {\n return value || group.categories.find(cat => cat.id === id);\n }, null);\n\n // Update the group id on the category\n moveCat = { ...moveCat, cat_group: groupId };\n\n return categoryGroups.map(group => {\n if (group.id === groupId) {\n group.categories = group.categories.reduce((cats, cat) => {\n if (cat.id === targetId) {\n cats.push(moveCat);\n cats.push(cat);\n } else if (cat.id !== id) {\n cats.push(cat);\n }\n return cats;\n }, []);\n\n if (!targetId) {\n group.categories.push(moveCat);\n }\n } else {\n group.categories = group.categories.filter(cat => cat.id !== id);\n }\n\n return { ...group };\n });\n}\n\nexport function moveCategoryGroup(categoryGroups, id, targetId) {\n if (id === targetId) {\n return categoryGroups;\n }\n\n let moveGroup = categoryGroups.find(g => g.id === id);\n\n categoryGroups = categoryGroups.reduce((groups, group) => {\n if (group.id === targetId) {\n groups.push(moveGroup);\n groups.push(group);\n } else if (group.id !== id) {\n groups.push(group);\n }\n return groups;\n }, []);\n\n if (!targetId) {\n categoryGroups.push(moveGroup);\n }\n\n return categoryGroups;\n}\n\nexport function deleteCategory(categoryGroups, id) {\n return categoryGroups.map(group => {\n group.categories = group.categories.filter(c => c.id !== id);\n return group;\n });\n}\n\nexport function addGroup(categoryGroups, group) {\n return [...categoryGroups, group];\n}\n\nexport function updateGroup(categoryGroups, group) {\n return categoryGroups.map(g => {\n if (g.id === group.id) {\n return { ...g, ...group };\n }\n return g;\n });\n}\n\nexport function deleteGroup(categoryGroups, id) {\n return categoryGroups.filter(g => g.id !== id);\n}\n"],"names":["BalanceWithCarryover","carryover","balance","disabled","style","balanceStyle","carryoverStyle","carryoverValue","useSheetValue","balanceValue","View","CellValue","binding","type","getStyle","makeAmountStyle","textAlign","cursor","textDecoration","alignSelf","marginLeft","position","right","top","bottom","justifyContent","ArrowThinRight","width","height","CoverTooltip","tooltipProps","onSubmit","onClose","grouped","categoryGroups","useCategories","addToBeBudgetedGroup","filter","g","is_income","category","setCategory","useState","submit","Tooltip","padding","marginBottom","InitialFocus","node","CategoryAutocomplete","value","openOnFocus","onUpdate","id","onSelect","inputProps","inputRef","onKeyDown","e","key","alignItems","marginTop","Button","fontSize","paddingTop","onClick","BalanceTooltip","categoryId","tooltip","monthIndex","onBudgetAction","rolloverBudget","catCarryover","catBalance","menu","setMenu","_onClose","close","Menu","onMenuSelect","flag","items","name","text","x","TransferTooltip","initialAmountName","showToBeBudgeted","amount","toCategory","from","to","fromCategory","initialAmount","spreadsheet","useSpreadsheet","sheetName","useContext","NamespaceContext","setAmount","useEffect","get","integerToCurrency","Math","max","parsedAmount","evalArithmetic","amountToInteger","Input","onChange","target","onEnter","margin","placeholder","paddingBottom","groups","categories","cat_group","group","separateGroups","find","makeAmountGrey","color","theme","altMenuItemText","greyed","errorText","makeAmountFullStyle","noticeText","findSortDown","arr","pos","targetId","idx","findIndex","item","Error","newIdx","length","findSortUp","getScrollbarWidth","styles","scrollbarWidth","MonthPicker","startMonth","numDisplayed","monthBounds","hoverId","setHoverId","targetMonthCount","setTargetMonthCount","currentMonth","monthUtils","firstSelectedMonth","lastSelectedMonth","range","firstSelectedIndex","floor","lastSelectedIndex","size","setSize","containerRef","useResizeObserver","rect","min","yearHeadersShown","flexDirection","innerRef","flex","map","month","monthName","selected","lastHoverId","hovered","current","year","showYearHeader","includes","push","isMonthBudgeted","start","end","userSelect","borderRadius","border","pageTextSubdued","smallText","backgroundColor","tableBorderHover","buttonPrimaryText","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","fontWeight","onMouseEnter","onMouseLeave","left","pageText","BudgetPageHeader","memo","onMonthSelect","numMonths","getValidMonth","flexShrink","marginRight","getValidMonthBounds","bounds","endMonth","MonthsContext","createContext","MonthsProvider","children","months","Provider","RenderMonths","component","Component","editingIndex","args","index","editing","borderLeft","tableBorder","SvgCustomNotesPaper","svg","props","xmlns","viewBox","path","fill","d","sequentialNewlinesPlugin","data","add","field","list","enter","lineEndingBlank","enterLineEndingBlank","token","exit","exitLineEndingBlank","remarkBreaks","newlineToBreak","remarkPlugins","remarkGfm","markdownStyles","css","display","maxWidth","overflowWrap","listStylePosition","paddingLeft","markdownDark","borderTop","borderRight","borderBottom","markdownNormal","markdownLight","background","borderCollapse","wordBreak","NotesTooltip","editable","defaultNotes","notes","setNotes","createRef","focus","textarea","ref","className","buttonNormalBorder","minWidth","minHeight","outline","Text","ReactMarkdown","linkTarget","NotesButton","defaultColor","pageBackgroundModalActive","tooltipPosition","hover","setHover","useTooltip","useLiveQuery","q","select","note","hasNotes","send","delayHandler","setDelayHandler","handleMouseEnter","setTimeout","handleMouseLeave","clearTimeout","tooltipOpen","isOpen","buttonNormalText","getOpenEvents","CustomNotesPaper","SidebarCategory","dragPreview","dragging","borderColor","isLast","onDragChange","onEditMonth","onEditName","onSave","onDelete","onHideNewCategory","temporary","menuOpen","setMenuOpen","displayed","WebkitUserSelect","opacity","hidden","undefined","div","data-testid","textOverflow","whiteSpace","overflow","stopPropagation","CheveronDown","tableTextHover","formInputTextPlaceholderSelected","zIndex","InputCell","formatter","exposed","onBlur","borderBottomWidth","ExpenseCategory","cat","budgetArray","editingCell","dragState","MonthComponent","onShowActivity","onReorder","dragRef","useDraggable","canDrag","dropRef","dropPos","useDroppable","types","onDrop","Row","collapsed","tableBackground","DropHighlight","offset","preview","cell","onEdit","SidebarGroup","onShowNewCategory","onHideNewGroup","onToggleCollapse","ExpandArrow","transition","transform","altTableBackground","ExpenseGroup","itemPos","onReorderGroup","onReorderCategory","catDropRef","catDropPos","onLongHover","ROW_HEIGHT","IncomeCategory","IncomeGroup","IncomeHeader","onShowNewGroup","BudgetCategories","newCategoryForGroup","showHiddenCategories","isAddingGroup","setCollapsed","dataComponents","onSaveCategory","onSaveGroup","onDeleteCategory","onDeleteGroup","useMemo","expenseGroups","incomeGroup","Array","prototype","concat","apply","groupCategories","setDragState","savedCollapsed","setSavedCollapsed","newDragState","state","hoveredId","hoveredPos","id_","boxShadow","cardShadow","content","ExpenseGroupComponent","ExpenseCategoryComponent","incomeHeaderHeight","IncomeHeaderComponent","IncomeGroupComponent","IncomeCategoryComponent","DropHighlightPosContext","BudgetSummaries","SummaryComponent","widthState","setWidthState","spring","useSpring","config","mass","tension","friction","useCallback","prevMonth0","useRef","allMonths","unshift","monthWidth","useLayoutEffect","prevMonth","reversed","offsetX","animated","willChange","paddingRight","BudgetTotals","toggleHiddenCategories","expandAllCategories","collapseAllCategories","pageTextLight","flexGrow","DotsHorizontalTriple","BudgetTable","constructor","budgetCategoriesRef","draggingState","prefs","setState","isGroup","groupId","targetGroup","moveVertically","dir","flattened","reduce","all","nextIdx","next","preventDefault","shiftKey","catName","catId","resolveMonth","clearEditing","prevState","savePrefs","render","prewarmStartMonth","lightScrollbar","tableHeaderBackground","BudgetTotalsComponent","IntersectionBoundary","overflowY","overflowAnchor","el","budgetDataNode","getNumPossibleMonths","estimatedTableWidth","DynamicBudgetTableInner","forwardRef","maxMonths","onMonthSelect_","onPreload","useSelector","local","setDisplayMax","useBudgetMonthCount","actions","useActions","numPossible","AutoSizer","SvgArrowButtonDown1","SvgArrowButtonUp1","HoverTarget","contentStyle","renderContent","setHovered","Context","ReportProvider","summaryCollapsed","onToggleSummaryCollapse","useReport","PieProgress","progress","radius","circum","PI","dash","gap","circle","r","cx","cy","stroke","strokeWidth","strokeDasharray","fraction","num","denom","IncomeProgress","totalIncome","totalBudgeted","over","frac","noticeTextLight","errorBackground","pageBackground","ExpenseProgress","totalSpent","BudgetTotal","title","ProgressComponent","lineHeight","fontStyle","notFixed","IncomeTotal","reportBudget","totalBudgetedIncome","ExpenseTotal","totalBudgetedExpense","Saved","projected","budgetedSaved","totalBudgetedSaved","totalSaved","format","useFormat","saved","isNegative","diff","AlignedText","tnum","alt2WarningText","errorTextDark","altUpcomingText","PrivacyFilter","blurIntensity","BudgetSummary","isGoalTemplatesEnabled","useFeatureFlag","onMenuOpen","onMenuClose","ExpandOrCollapseIcon","ArrowButtonDown1","ArrowButtonUp1","textDecorationSkip","Stack","spacing","tableRowHeaderBackground","headerLabelStyle","BudgetTotalsMonth","monthRightPadding","parseFloat","totalLeftover","IncomeHeaderMonth","GroupMonth","SheetCell","valueProps","groupBudgeted","groupSumAmount","groupBalance","privacyFilter","CategoryMonth","balanceTooltip","onMouseOverCapture","focused","onExpose","valueStyle","mobileAccountShadow","catBudgeted","getValueStyle","formatExpr","expr","unformatExpr","Field","span","catSumAmount","truncate","ExpenseGroupMonth","ExpenseCategoryMonth","IncomeGroupMonth","IncomeCategoryMonth","HoldTooltip","RolloverContext","useRollover","TotalsList","prevMonthName","borderTopWidth","fromLastMonth","incomeAvailable","lastMonthOverspent","v","forNextMonth","n","parseInt","abs","Block","ToBudget","useSheetName","toBudget","sheetValue","availableValue","isNaN","data-cellname","veryLargeText","pageTextPositive","errorBorder","altTableText","alt2PillText","alt2TableText","totalBalance","groupIncomeReceived","Budget","tableRef","initialized","setInitialized","setPrewarmStartMonth","setNewCategoryForGroup","setIsAddingGroup","collapsedPrefs","setBounds","setCategoryGroups","setSummaryCollapsed","loadCategories","result","getCategories","titlebar","budgetType","run","prewarmAllMonths","unlistens","listen","tables","subscribe","onTitlebarEvent","forEach","unlisten","then","accountId","prewarmMonth","method","values","prewarmCache","Promise","warmingMonth","c","createCategory","addCategory","updateCategory","mustTransfer","pushModal","transferCategory","deleteCategory","createGroup","addGroup","updateGroup","deleteGroup","applyBudgetAction","categoryName","navigate","goBack","filterName","date","$transform","$eq","sortInfo","moveCategory","moveCategoryGroup","msg","newType","disableObservers","enableObservers","loadPrefs","reportComponents","rolloverComponents","table","DynamicBudgetTable","RolloverBudgetSummary","rollover","BudgetWrapper","global","TitlebarContext","location","useLocation","match","useMatch","pathname","useNavigate","report","page","Schedules","setFilter","scheduleData","useSchedules","schedules","statuses","onAdd","onDiscover","onAction","schedule","completed","resetNextDate","Page","Search","SchedulesTable","allowCompleted","GoCardlessLink","window","Modal","isCurrent","showClose","Paragraph","SvgLeftArrow2","SvgArrowDown","SvgArrowUp","SvgHyperlink2","getDisplayValue","obj","serializeTransaction","transaction","showZeroInDeposit","isPreviewId","_inverse","getScheduledAmount","debit","credit","isDateValid","parseISO","deserializeTransaction","originalTransaction","realTransaction","parsed","currentDay","isLastChild","transactions","trans","is_child","parent_id","SplitsExpandedContext","useSplitsExpanded","expanded","mode","ids","has","SplitsExpandedProvider","initialMode","cachedState","app","lastSplitState","reduxDispatch","useDispatch","dispatch","useReducer","action","Set","delete","transitionId","splitState","selectAscDesc","ascDesc","clicked","defaultAscDesc","TransactionHeader","hasSelected","showAccount","showCategory","showBalance","showCleared","scrollWidth","onSort","dispatchSelected","useSelectedDispatch","tableHeaderText","SelectCell","event","HeaderCell","icon","Cell","getPayeePretty","payee","transferAcct","payeeId","startsWith","slice","StatusCell","status","isChild","isClearedField","statusProps","getStatusProps","statusColor","alt3WarningText","pageTextLinkLight","plain","CellButton","formInputBorderSelected","visibility","createElement","Icon","CustomCell","unexposedContent","UnexposedCellContent","ArrowDown","ArrowUp","PayeeCell","inherited","payees","accounts","isPreview","onCreatePayee","onManagePayees","onNavigateToTransferAccount","onNavigateToSchedule","isCreatingPayee","account","transfer_acct","tableTextInactive","PayeeIcons","transferAccount","shouldSaveFromKey","inputStyle","PayeeAutocomplete","showManagePayees","tableBehavior","isCreatable","menuPortalTarget","scheduleId","useCachedSchedules","s","buttonStyle","scheduleIconStyle","transferIconStyle","recurring","_date","frequency","ArrowsSynchronize","CalendarIcon","isTemporaryId","LeftArrow2","RightArrow2","Transaction","highlighted","added","matched","inheritedFields","focusedField","dateFormat","hideFraction","onSplit","onToggleSplit","prevShowZero","setPrevShowZero","prevTransaction","setPrevTransaction","setTransaction","newTransaction","getAccountsById","offbudget","deserialized","imported_payee","importedPayee","cleared","is_parent","isParent","_unmatched","getPayeesById","isBudgetTransfer","isOffBudget","backgroundFocus","amountStyle","letterSpacing","runningBalance","tableRowBackgroundHighlight","tableRowBackgroundHover","tableRowBackgroundHighlightText","tableText","DeleteCell","borderLeftWidth","buttonProps","Hyperlink2","formatDate","DateSelect","acctId","acct","AccountAutocomplete","includeClosedAccounts","bind","alt5WarningText","formLabelText","altWarningBackground","formLabelBackground","alt2TableBackground","titleFirst","bare","readOnly","getCategoriesById","formInputTextHighlight","showSplitOption","activationFilters","TransactionError","error","isDeposit","onAddSplit","version","difference","makeTemporaryTransactions","currentAccountId","currentCategoryId","lastDate","indexOf","NewTransaction","editingTransaction","isNew","TransactionTableInner","tableNavigator","newNavigator","renderEmpty","onScroll","isAddingPrev","usePrevious","isAdding","setScrollWidth","saveScrollWidth","parent","child","onCloseAddTransaction","renderRow","selectedItems","showBalances","balances","isMatched","isExpanded","transactionMap","isChildDeposit","forceTop","forceLayout","sortField","getNavigatorProps","onCheckNewEnter","newTransactions","editingId","onAddTemporary","Table","navigator","renderItem","loadMore","loadMoreTransactions","isSelected","onCheckEnter","TransactionTable","setNewTransactions","prevIsAdding","setPrevIsAdding","splitsExpanded","prevSplitsExpanded","mergedRef","useMergedRefs","t","anchor","setRowAnimation","Map","isAnchored","unanchor","useTableNavigator","getFields","shouldAdd","latestState","savePending","afterSaveFunc","_","forceRerender","useSelectedItems","addNotification","message","fields","f","afterSave","func","metaKey","getLastTransaction","lastTransaction","isSplit","onApplyRules","newTrans","updateTransaction","deleteTransaction","splitTransaction","newId","addSplitTransaction","saveDiff","remoteUpdates","learnCategories","updates","saveDiffAndApply","changes","remoteDiff","applyTransactionDiff","applyChanges","TransactionList","allTransactions","headerContent","isFiltered","onRefetch","transactionsLatest","realizeTempTransactions","updated","dateChanged","sort_order","Date","now","afterRules","getChangedValues","Object","keys","selectedPayee","SvgArrowsExpand3","SvgArrowsShrink3","SvgDownloadThickBottom","SvgPencil1","MenuButton","aria-label","SelectedTransactionsButton","getTransaction","onShow","onDuplicate","onUnlink","onCreateRule","onScheduleAction","ambiguousDuplication","some","linked","every","SelectedItemsButton","keyHandlers","a","p","l","line","label","firstId","parts","split","transactionIds","SvgArrowButtonRight1","DetailedBalance","isExactBalance","pillBackground","SelectedBalance","join","rows","query","$oneof","finalIds","options","splits","calculate","$sum","scheduleBalance","previewIds","_amountOp","_account","_amount","MoreBalances","balanceQuery","uncleared","Balances","showExtraBalances","onToggleExtraBalances","ArrowButtonRight1","ReconcilingMessage","targetBalance","onDone","onCreateTransaction","targetDiff","shadow","CheckCircle1","strong","br","ReconcileTooltip","onReconcile","queries","clearedBalance","input","elements","currencyToInteger","form","defaultValue","AccountHeader","editingName","isNameEditable","workingHard","accountName","filterId","filtersList","accountsSyncing","showEmptyMessage","reconcileAmount","canCalculateBalance","isSorted","search","filters","conditionsOp","onSearch","onAddTransaction","onShowTransactions","onDoneReconciling","onCreateReconciliationTransaction","onSaveName","onExposeName","onSync","onImport","onBatchDelete","onBatchDuplicate","onBatchEdit","onBatchUnlink","onApplyFilter","onUpdateFilter","onClearFilters","onReloadSavedFilter","onCondOpChange","onDeleteFilter","searchInput","canSync","account_id","onToggleSplits","getScrolledItem","KeyHandlers","pageContent","closed","Pencil1","altButtonBareText","direction","align","AnimatedRefresh","animating","DownloadThickBottom","Add","FilterButton","onApply","AnimatedLoading","ArrowsShrink3","ArrowsExpand3","AccountMenu","canShowBalances","CategoryMenu","FiltersStack","setTooltip","syncServerStatus","useSyncServerStatus","MenuTooltip","EmptyMessage","alttableText","AllTransactions","filtered","prependTransactions","_payee","next_date","prependBalances","scheduledBalances","reverse","scheduledTransaction","groupById","allBalances","getField","AccountInternal","PureComponent","paged","loading","transactionsCount","latestDate","sort","componentDidMount","maybeRefetch","refetchTransactions","onUndo","messages","undoTag","focusId","dataset","column","focusableMsgs","row","edit","scrollTo","setLastUndoState","initiallyLoadPayees","fetchTransactions","lastUndoState","componentDidUpdate","prevProps","modalShowing","componentWillUnmount","unsubscribe","fetchAllIds","runQuery","getQuery","subtransactions","sub","makeRootQuery","rootQuery","currentQuery","updateQuery","markAccountRead","locationState","pagedQuery","prevData","firstLoad","splitsExpandedDispatch","expandSplits","transactionCount","getTotalCount","transactionsFiltered","calculateBalances","scrollToTop","pageCount","onlySync","mapper","ungroupTransactions","UNSAFE_componentWillReceiveProps","nextProps","onSearchDone","debounce","syncAndDownload","res","Actual","openFileDialog","extensions","filename","onImported","didChange","onExport","exportedTransactions","serialize","normalizedName","replace","saveFile","onTransactionsChange","optimisticUpdate","_deleted","mappedData","updateNewTransactions","$sumOver","trim","updateAccount","authorizeBank","upgradingAccountId","unlinkAccount","openAccountCloseModal","reopenAccount","getAccountTitle","applyFilters","getBalanceQuery","matchedTransactions","trimmed","createPayee","reconciliationTransactions","customName","deleted","idSet","ungroupTransaction","parentId","payeeCondition","op","rule","stage","conditions","savedFilter","getFilter","oldFilter","updatedFilter","cond","customFilters","conditionsOpKey","applySort","prevField","prevAscDesc","sortAscDesc","sortPrevField","sortPrevAscDesc","orderBy","headerClicked","replaceModal","Navigate","flatMap","SelectedProviderWithItems","registerDispatch","fetchNext","onRefetchUpToRow","refetchUpToRow","order","AccountHack","Account","params","useParams","failedAccounts","modals","modalStack","useFilters","actionCreators","bindActionCreators","filterByAccount","filterByPayee","$and","$or","SchedulesProvider","moveCat","cats","moveGroup"],"sourceRoot":""}