@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
@@ -1 +0,0 @@
1
- {"version":3,"file":"static/js/wide-components.fd8595f4.chunk.js","mappings":"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","sources":["components/budget/MonthPicker.js","components/budget/util.js","components/budget/BudgetPageHeader.js","components/budget/MonthsContext.js","components/budget/RenderMonths.js","icons/v2/CustomNotesPaper.js","util/markdown.ts","components/NotesButton.tsx","components/budget/SidebarCategory.js","components/budget/ExpenseCategory.js","components/budget/SidebarGroup.js","components/budget/ExpenseGroup.js","components/budget/IncomeCategory.js","components/budget/IncomeGroup.js","components/budget/IncomeHeader.tsx","components/budget/BudgetCategories.js","components/budget/BudgetSummaries.js","components/budget/BudgetTotals.js","components/budget/BudgetTable.js","components/budget/CategoryGroupsContext.js","components/budget/DynamicBudgetTable.js","../../loot-core/src/shared/arithmetic.ts","components/budget/BalanceWithCarryover.tsx","icons/v2/ArrowButtonDown1.js","icons/v2/ArrowButtonUp1.js","components/common/HoverTarget.tsx","components/budget/report/ReportContext.tsx","components/budget/report/BudgetSummary.tsx","components/budget/report/components.tsx","components/budget/rollover/TransferTooltip.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","hooks/usePrevious.ts","icons/v0/LeftArrow2.js","icons/v1/ArrowDown.js","icons/v1/ArrowUp.js","icons/v2/Hyperlink2.js","components/transactions/TransactionsTable.js","components/transactions/TransactionList.js","icons/v2/ArrowsExpand3.js","icons/v2/ArrowsShrink3.js","icons/v2/DownloadThickBottom.js","icons/v2/Pencil1.js","components/common/MenuButton.tsx","components/transactions/SelectedTransactions.js","icons/v2/ArrowButtonRight1.js","components/accounts/Balance.js","components/accounts/Reconcile.js","components/accounts/Header.js","components/accounts/Account.js","../../loot-core/src/shared/categories.ts"],"sourcesContent":["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 { styles, theme } from '../../style';\n\nexport function addToBeBudgetedGroup(groups) {\n return [\n {\n id: 'to-be-budgeted',\n name: 'To Be Budgeted',\n categories: [{ id: 'to-be-budgeted', name: 'To Be Budgeted' }],\n },\n ...groups,\n ];\n}\n\nexport function separateGroups(categoryGroups) {\n return [\n categoryGroups.filter(g => !g.is_income),\n categoryGroups.find(g => g.is_income),\n ];\n}\n\nexport function makeAmountGrey(value) {\n return value === 0 || value === '0' || value === ''\n ? { color: theme.altMenuItemText }\n : null;\n}\n\nexport function makeAmountStyle(value) {\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) {\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(arr, pos, targetId) {\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(arr, pos, targetId) {\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 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 } from 'react';\n\nimport * as monthUtils from 'loot-core/src/shared/months';\n\nexport function getValidMonthBounds(bounds, startMonth, endMonth) {\n return {\n start: startMonth < bounds.start ? bounds.start : startMonth,\n end: endMonth > bounds.end ? bounds.end : endMonth,\n };\n}\n\nexport let MonthsContext = createContext();\n\nexport function MonthsProvider({\n startMonth,\n numMonths,\n monthBounds,\n type,\n children,\n}) {\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, { useContext } 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\nfunction RenderMonths({ component: Component, editingIndex, args, style }) {\n let { months, type } = 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, type)}\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 });\n}\n\nexport default RenderMonths;\n","import * as React from 'react';\nconst SvgCustomNotesPaper = props => (\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 === 'toggleVisibility') {\n onSave({ ...category, hidden: !category.hidden });\n }\n setMenuOpen(false);\n }}\n items={[\n {\n name: 'toggleVisibility',\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 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: 'transparent',\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, { 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\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}) {\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 === 'toggleVisibility') {\n onSave({ ...group, hidden: !group.hidden });\n }\n setMenuOpen(false);\n }}\n items={[\n { name: 'add-category', text: 'Add category' },\n {\n name: 'toggleVisibility',\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 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\nfunction IncomeGroup({\n group,\n editingCell,\n collapsed,\n MonthComponent,\n onEditName,\n onSave,\n onToggleCollapse,\n onShowNewCategory,\n}) {\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, { type ReactNode } from 'react';\n\nimport Button from '../common/Button';\nimport View from '../common/View';\n\nimport RenderMonths from './RenderMonths';\n\ntype IncomeHeaderProps = {\n MonthComponent?: ReactNode;\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 editingIndex={undefined}\n args={undefined}\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: 'white',\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: 'white',\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: 'white',\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.altpageTextSubdued }}\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 === 'toggleVisibility') {\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: 'toggleVisibility',\n text: 'Toggle hidden',\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 { 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: 'white',\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 { createContext } from 'react';\n\nexport let CategoryGroupsContext = createContext([]);\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';\nimport { CategoryGroupsContext } from './CategoryGroupsContext';\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 <CategoryGroupsContext.Provider value={categoryGroups}>\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 </CategoryGroupsContext.Provider>\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 { getNumberFormat } from './util';\n\nfunction fail(state, msg) {\n throw new Error(\n msg + ': ' + JSON.stringify(state.str.slice(state.index, 10)),\n );\n}\n\nfunction char(state) {\n return state.str[state.index];\n}\n\nfunction next(state) {\n if (state.index >= state.str.length) {\n return null;\n }\n\n let ch = char(state);\n state.index++;\n return ch;\n}\n\nfunction nextOperator(state, op) {\n if (char(state) === op) {\n next(state);\n return true;\n }\n\n return false;\n}\n\nfunction parsePrimary(state) {\n // We only support numbers\n let isNegative = char(state) === '-';\n if (isNegative) {\n next(state);\n }\n\n if (/\\p{Sc}/u.test(char(state))) {\n next(state);\n }\n\n // TODO: The regex should probably respect the number format better,\n // and we should do more strict parsing\n let numberStr = '';\n while (char(state) && char(state).match(/[0-9,.]/)) {\n let thousandsSep = getNumberFormat().separator === ',' ? '.' : ',';\n\n // Don't include the thousands separator\n if (char(state) === thousandsSep) {\n next(state);\n } else {\n numberStr += next(state);\n }\n }\n\n if (numberStr === '') {\n fail(state, 'Unexpected character');\n }\n\n let number = parseFloat(numberStr.replace(getNumberFormat().separator, '.'));\n return isNegative ? -number : number;\n}\n\nfunction parseParens(state) {\n if (char(state) === '(') {\n next(state);\n let expr = parseOperator(state);\n\n if (char(state) !== ')') {\n fail(state, 'Unbalanced parentheses');\n }\n\n next(state);\n return expr;\n }\n\n return parsePrimary(state);\n}\n\nfunction makeOperatorParser(...ops) {\n return ops.reduce((prevParser, op) => {\n return state => {\n let node = prevParser(state);\n while (nextOperator(state, op)) {\n node = { op, left: node, right: prevParser(state) };\n }\n return node;\n };\n }, parseParens);\n}\n\n// These operators go from high to low order of precedence\nlet parseOperator = makeOperatorParser('^', '/', '*', '-', '+');\n\nfunction parse(expression) {\n let state = { str: expression.replace(/\\s/g, ''), index: 0 };\n return parseOperator(state);\n}\n\nfunction evaluate(ast) {\n if (typeof ast === 'number') {\n return ast;\n }\n\n let { left, right, op } = ast;\n\n switch (op) {\n case '+':\n return evaluate(left) + evaluate(right);\n case '-':\n return evaluate(left) - evaluate(right);\n case '*':\n return evaluate(left) * evaluate(right);\n case '/':\n return evaluate(left) / evaluate(right);\n case '^':\n return Math.pow(evaluate(left), evaluate(right));\n default:\n throw new Error('Unknown operator: ' + op);\n }\n}\n\nexport default function evalArithmetic(expression, defaultValue = null) {\n // An empty expression always evals to the default\n if (expression === '') {\n return defaultValue;\n }\n\n let result;\n try {\n result = evaluate(parse(expression));\n } catch (e) {\n // If it errors, return the default value\n return defaultValue;\n }\n\n // Never return NaN\n return isNaN(result) ? defaultValue : result;\n}\n","import React, { type ComponentProps } from 'react';\n\nimport ArrowThinRight from '../../icons/v1/ArrowThinRight';\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};\nexport default function BalanceWithCarryover({\n carryover,\n balance,\n disabled,\n}: BalanceWithCarryoverProps) {\n let carryoverValue = useSheetValue(carryover);\n let balanceValue = useSheetValue(balance);\n\n return (\n <>\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 }}\n />\n {carryoverValue === true && (\n <View\n style={{\n alignSelf: 'center',\n marginLeft: 2,\n position: 'absolute',\n right: -4,\n top: 0,\n bottom: 0,\n justifyContent: 'center',\n }}\n >\n <ArrowThinRight\n width={7}\n height={7}\n style={makeAmountStyle(balanceValue)}\n />\n </View>\n )}\n </>\n );\n}\n","import * as React from 'react';\nconst SvgArrowButtonDown1 = props => (\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';\nconst SvgArrowButtonUp1 = props => (\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.noticeText}\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.noticeText}\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.alt2ErrorText\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.altpageTextSubdued }}\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 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 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 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 { CategoryGroupsContext } from '../CategoryGroupsContext';\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 categoryGroups = useContext(CategoryGroupsContext);\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 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.errorText\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, { type ComponentProps, memo, useContext, 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 CategoryAutocomplete from '../../autocomplete/CategoryAutocomplete';\nimport Button from '../../common/Button';\nimport InitialFocus from '../../common/InitialFocus';\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 { Row, Field, SheetCell } from '../../table';\nimport { Tooltip, useTooltip } from '../../tooltips';\nimport BalanceWithCarryover from '../BalanceWithCarryover';\nimport { CategoryGroupsContext } from '../CategoryGroupsContext';\nimport { makeAmountGrey, addToBeBudgetedGroup } from '../util';\n\nimport TransferTooltip from './TransferTooltip';\n\nexport { BudgetSummary } from './BudgetSummary';\n\ntype CoverTooltipProps = {\n tooltipProps?: ComponentProps<typeof Tooltip>;\n onSubmit: (category: unknown) => void;\n onClose: () => void;\n};\nfunction CoverTooltip({ tooltipProps, onSubmit, onClose }: CoverTooltipProps) {\n let categoryGroups = useContext(CategoryGroupsContext);\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\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(rolloverBudget.catCarryover(categoryId));\n let balance = useSheetValue(rolloverBudget.catBalance(categoryId));\n let [menu, setMenu] = useState('menu');\n\n return (\n <>\n {menu === 'menu' && (\n <Tooltip\n position=\"bottom-right\"\n width={200}\n style={{ padding: 0 }}\n onClose={tooltip.close}\n >\n <Menu\n onMenuSelect={type => {\n if (type === 'carryover') {\n onBudgetAction(monthIndex, 'carryover', {\n category: categoryId,\n flag: !carryover,\n });\n tooltip.close();\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={tooltip.close}\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={tooltip.close}\n onSubmit={fromCategory => {\n onBudgetAction(monthIndex, 'cover', {\n to: categoryId,\n from: fromCategory,\n });\n }}\n />\n )}\n </>\n );\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 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 ) : 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 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, useNavigate } 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 { 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 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 const cat = {\n ...category,\n hidden: category.hidden ? 1 : 0,\n };\n\n props.updateCategory(cat);\n setCategoryGroups(state => updateCategory(state, cat));\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 const grp = {\n ...group,\n hidden: group.hidden ? 1 : 0,\n };\n\n props.updateGroup(grp);\n setCategoryGroups(state => updateGroup(state, grp));\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 { useEffect, useRef } from 'react';\n\nexport default function usePrevious<T = unknown>(value: T): T | undefined {\n const ref = useRef<T | undefined>();\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref.current;\n}\n","import * as React from 'react';\nconst SvgLeftArrow2 = props => (\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';\nconst SvgArrowDown = props => (\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';\nconst SvgArrowUp = props => (\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';\nconst SvgHyperlink2 = props => (\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.noticeText\n : status === 'missed'\n ? theme.alt5ErrorText\n : status === 'due'\n ? theme.alt3WarningText\n : selected\n ? theme.altPageTextLink\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.alt5ErrorText\n : notes === 'due'\n ? theme.alt5WarningText\n : selected\n ? theme.formLabelText\n : theme.altTableText,\n backgroundColor:\n notes === 'missed'\n ? theme.altErrorBackground\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.noticeText,\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';\nconst SvgArrowsExpand3 = props => (\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';\nconst SvgArrowsShrink3 = props => (\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';\nconst SvgDownloadThickBottom = props => (\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';\nconst SvgPencil1 = props => (\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';\nconst SvgArrowButtonRight1 = props => (\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.noticeText\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.noticeText,\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":["MonthPicker","startMonth","numDisplayed","monthBounds","style","onSelect","hoverId","setHoverId","useState","targetMonthCount","setTargetMonthCount","currentMonth","monthUtils","firstSelectedMonth","lastSelectedMonth","range","firstSelectedIndex","Math","floor","length","lastSelectedIndex","size","setSize","containerRef","useResizeObserver","rect","width","min","max","yearHeadersShown","View","flexDirection","alignItems","justifyContent","innerRef","flex","map","month","idx","monthName","selected","lastHoverId","hovered","current","year","showYearHeader","includes","push","isMonthBudgeted","start","end","padding","textAlign","userSelect","cursor","borderRadius","border","textDecoration","color","theme","pageTextSubdued","styles","smallText","backgroundColor","tableBorderHover","buttonPrimaryText","borderTopLeftRadius","borderBottomLeftRadius","borderTopRightRadius","borderBottomRightRadius","fontWeight","onClick","onMouseEnter","onMouseLeave","position","top","left","fontSize","pageText","addToBeBudgetedGroup","groups","id","name","categories","separateGroups","categoryGroups","filter","g","is_income","find","makeAmountGrey","value","altMenuItemText","makeAmountStyle","greyed","errorText","makeAmountFullStyle","noticeText","findSortDown","arr","pos","targetId","findIndex","item","Error","newIdx","findSortUp","getScrollbarWidth","scrollbarWidth","BudgetPageHeader","memo","onMonthSelect","numMonths","getValidMonth","marginLeft","flexShrink","marginRight","paddingTop","getValidMonthBounds","bounds","endMonth","MonthsContext","createContext","MonthsProvider","type","children","months","Provider","RenderMonths","component","Component","editingIndex","args","useContext","index","editing","NamespaceContext","borderLeft","tableBorder","monthIndex","SvgCustomNotesPaper","props","svg","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","margin","marginTop","listStylePosition","paddingLeft","markdownDark","borderTop","borderRight","borderBottom","markdownNormal","markdownLight","background","borderCollapse","wordBreak","NotesTooltip","editable","defaultNotes","onClose","notes","setNotes","inputRef","createRef","useEffect","focus","Tooltip","textarea","ref","className","buttonNormalBorder","minWidth","minHeight","outline","onChange","e","target","placeholder","Text","ReactMarkdown","linkTarget","NotesButton","height","defaultColor","pageBackgroundModalActive","tooltipPosition","hover","setHover","tooltip","useTooltip","useLiveQuery","q","select","note","hasNotes","send","close","delayHandler","setDelayHandler","handleMouseEnter","setTimeout","handleMouseLeave","clearTimeout","tooltipOpen","isOpen","Button","buttonNormalText","getOpenEvents","CustomNotesPaper","SidebarCategory","category","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","Menu","onMenuSelect","items","text","tableTextHover","formInputTextPlaceholderSelected","zIndex","onKeyDown","key","InputCell","formatter","exposed","onUpdate","onBlur","borderBottomWidth","inputProps","ExpenseCategory","cat","budgetArray","editingCell","dragState","MonthComponent","onBudgetAction","onShowActivity","onReorder","cat_group","dragRef","useDraggable","canDrag","dropRef","dropPos","useDroppable","types","onDrop","Row","collapsed","DropHighlight","offset","preview","cell","onEdit","SidebarGroup","group","onShowNewCategory","onHideNewGroup","onToggleCollapse","ExpandArrow","transition","transform","altTableBackground","ExpenseGroup","itemPos","onReorderGroup","onReorderCategory","catDropRef","catDropPos","onLongHover","right","ROW_HEIGHT","IncomeCategory","IncomeGroup","IncomeHeader","onShowNewGroup","BudgetCategories","newCategoryForGroup","showHiddenCategories","isAddingGroup","setCollapsed","dataComponents","onSaveCategory","onSaveGroup","onDeleteCategory","onDeleteGroup","useMemo","expenseGroups","incomeGroup","Array","prototype","concat","apply","groupCategories","x","setDragState","savedCollapsed","setSavedCollapsed","newDragState","state","hoveredId","hoveredPos","id_","marginBottom","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","from","to","animated","willChange","paddingRight","BudgetTotals","toggleHiddenCategories","expandAllCategories","collapseAllCategories","pageTextLight","flexGrow","DotsHorizontalTriple","altpageTextSubdued","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","BudgetTotalsComponent","IntersectionBoundary","overflowY","overflowAnchor","el","budgetDataNode","CategoryGroupsContext","getNumPossibleMonths","estimatedTableWidth","DynamicBudgetTableInner","forwardRef","maxMonths","onMonthSelect_","onPreload","useSelector","local","setDisplayMax","useBudgetMonthCount","actions","useActions","numPossible","AutoSizer","fail","msg","JSON","stringify","str","slice","char","ch","nextOperator","op","parsePrimary","isNegative","test","numberStr","match","thousandsSep","getNumberFormat","separator","number","parseFloat","replace","parseParens","expr","parseOperator","makeOperatorParser","ops","prevParser","node","parse","expression","evaluate","ast","pow","evalArithmetic","defaultValue","result","isNaN","BalanceWithCarryover","carryover","balance","disabled","carryoverValue","useSheetValue","balanceValue","CellValue","binding","getStyle","alignSelf","bottom","ArrowThinRight","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","errorBackground","pageBackground","ExpenseProgress","totalSpent","BudgetTotal","title","ProgressComponent","lineHeight","fontStyle","notFixed","IncomeTotal","reportBudget","totalBudgetedIncome","ExpenseTotal","totalBudgetedExpense","Saved","projected","budgetedSaved","totalBudgetedSaved","totalSaved","format","useFormat","saved","diff","AlignedText","tnum","alt2WarningText","alt2ErrorText","altUpcomingText","PrivacyFilter","blurIntensity","BudgetSummary","isGoalTemplatesEnabled","useFeatureFlag","onMenuOpen","onMenuClose","ExpandOrCollapseIcon","ArrowButtonDown1","ArrowButtonUp1","tableBackground","textDecorationSkip","Stack","spacing","tableRowHeaderBackground","headerLabelStyle","BudgetTotalsMonth","monthRightPadding","paddingBottom","totalLeftover","IncomeHeaderMonth","GroupMonth","SheetCell","valueProps","groupBudgeted","groupSumAmount","groupBalance","privacyFilter","BalanceTooltip","categoryId","catCarryover","flag","CategoryMonth","balanceTooltip","onMouseOverCapture","focused","onExpose","valueStyle","mobileAccountShadow","catBudgeted","getValueStyle","formatExpr","integerToCurrency","unformatExpr","amountToInteger","amount","Field","span","catSumAmount","catBalance","ExpenseGroupMonth","ExpenseCategoryMonth","IncomeGroupMonth","IncomeCategoryMonth","TransferTooltip","initialAmount","initialAmountName","showToBeBudgeted","tooltipProps","onSubmit","spreadsheet","useSpreadsheet","sheetName","setAmount","setCategory","get","submit","parsedAmount","InitialFocus","Input","onEnter","CategoryAutocomplete","openOnFocus","HoldTooltip","RolloverContext","useRollover","TotalsList","prevMonthName","borderTopWidth","rolloverBudget","fromLastMonth","incomeAvailable","lastMonthOverspent","v","forNextMonth","n","parseInt","abs","Block","ToBudget","useSheetName","toBudget","sheetValue","availableValue","data-cellname","veryLargeText","pageTextPositive","altTableText","alt2PillText","tableHeaderBackground","CoverTooltip","menu","setMenu","toCategory","fromCategory","alt2TableText","totalBalance","groupIncomeReceived","Budget","tableRef","initialized","setInitialized","setPrewarmStartMonth","setNewCategoryForGroup","setIsAddingGroup","collapsedPrefs","setBounds","setCategoryGroups","setSummaryCollapsed","loadCategories","getCategories","grouped","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","grp","updateGroup","deleteGroup","applyBudgetAction","categoryName","navigate","goBack","filterName","date","$transform","$eq","sortInfo","moveCategory","moveCategoryGroup","newType","disableObservers","enableObservers","loadPrefs","reportComponents","rolloverComponents","table","DynamicBudgetTable","RolloverBudgetSummary","rollover","BudgetWrapper","global","useCategories","TitlebarContext","location","useLocation","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","usePrevious","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","truncate","getPayeePretty","payee","transferAcct","payeeId","startsWith","StatusCell","status","isChild","isClearedField","statusProps","getStatusProps","statusColor","alt5ErrorText","alt3WarningText","altPageTextLink","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","altErrorBackground","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","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","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","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","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":""}