Merge branch 'master' into windows
This commit is contained in:
commit
fecca411b0
216 changed files with 25803 additions and 19720 deletions
|
@ -1,121 +0,0 @@
|
|||
default_config: &default_config
|
||||
environment:
|
||||
SENTRY_ORG: shift-reset-llc
|
||||
SENTRY_PROJECT: actual
|
||||
YARN_CACHE_FOLDER: ~/.cache/yarn
|
||||
CSC_LINK: ~/windows-shift-reset-llc.p12
|
||||
|
||||
cached_files: &cached_files
|
||||
paths:
|
||||
- ~/.cache/yarn
|
||||
- node_modules
|
||||
- ./packages/desktop-electron/node_modules
|
||||
- ./packages/loot-core/node_modules
|
||||
- ./mobile/node_modules
|
||||
- ./import-ynab4/node_modules
|
||||
- ./api/node_modules
|
||||
- ./node-libofx/node_modules
|
||||
- ./loot-design/node_modules
|
||||
- ./desktop-client/node_modules
|
||||
key: v3-dependencies-{{ checksum "yarn.lock" }}
|
||||
|
||||
version_tag_only: &version_tag_only
|
||||
filters:
|
||||
branches:
|
||||
ignore: /.*/
|
||||
tags:
|
||||
only: /^\d+\.\d+\.\d+$/
|
||||
|
||||
version: 2.1
|
||||
|
||||
orbs:
|
||||
win: circleci/windows@2.2.0
|
||||
|
||||
jobs:
|
||||
test:
|
||||
<<: *default_config
|
||||
|
||||
docker:
|
||||
- image: circleci/node:16.15.0
|
||||
|
||||
working_directory: ~/repo
|
||||
|
||||
steps:
|
||||
- checkout
|
||||
|
||||
- restore_cache:
|
||||
keys:
|
||||
- v3-dependencies-{{ checksum "yarn.lock" }}
|
||||
|
||||
- run: yarn install --pure-lockfile
|
||||
|
||||
- save_cache:
|
||||
<<: *cached_files
|
||||
|
||||
- run: yarn test
|
||||
|
||||
build_windows:
|
||||
<<: *default_config
|
||||
|
||||
executor:
|
||||
name: win/default
|
||||
|
||||
working_directory: ~/repo
|
||||
|
||||
steps:
|
||||
- checkout
|
||||
|
||||
- run:
|
||||
command: npm install -g @sentry/cli --unsafe-perm
|
||||
shell: bash
|
||||
|
||||
- run:
|
||||
command: echo $WINDOWS_CERT | base64 --decode >> ${HOME}/windows-shift-reset-llc.p12
|
||||
shell: bash
|
||||
|
||||
- run:
|
||||
command: yarn install --pure-lockfile
|
||||
shell: bash
|
||||
|
||||
- run:
|
||||
command: ./bin/package --release --version ${CIRCLE_TAG}
|
||||
shell: bash
|
||||
|
||||
build_linux:
|
||||
<<: *default_config
|
||||
|
||||
docker:
|
||||
- image: circleci/node:16.15.0
|
||||
|
||||
working_directory: ~/repo
|
||||
|
||||
steps:
|
||||
- checkout
|
||||
|
||||
- restore_cache:
|
||||
keys:
|
||||
- v3-dependencies-{{ checksum "yarn.lock" }}
|
||||
|
||||
- run: yarn install --pure-lockfile
|
||||
|
||||
- run: sudo npm install -g @sentry/cli --unsafe-perm
|
||||
|
||||
- run: ./bin/package --release --version ${CIRCLE_TAG}
|
||||
|
||||
workflows:
|
||||
version: 2
|
||||
test:
|
||||
jobs:
|
||||
- test
|
||||
build_version:
|
||||
jobs:
|
||||
- test:
|
||||
<<: *version_tag_only
|
||||
- build_windows:
|
||||
<<: *version_tag_only
|
||||
requires:
|
||||
- test
|
||||
- build_linux:
|
||||
<<: *version_tag_only
|
||||
requires:
|
||||
- test
|
10
.eslintrc.js
Normal file
10
.eslintrc.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
module.exports = {
|
||||
plugins: ['prettier'],
|
||||
extends: ['react-app'],
|
||||
rules: {
|
||||
'prettier/prettier': 'error',
|
||||
'no-unused-vars': 'off',
|
||||
'no-loop-func': 'off',
|
||||
'no-restricted-globals': 'off'
|
||||
}
|
||||
};
|
76
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
Normal file
76
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
Normal file
|
@ -0,0 +1,76 @@
|
|||
name: Bug Report
|
||||
description: File a bug report also known as an issue or problem.
|
||||
title: '[Bug]: '
|
||||
labels: ['bug', 'needs triage']
|
||||
body:
|
||||
- type: markdown
|
||||
id: intro-md
|
||||
attributes:
|
||||
value: |
|
||||
Thanks for taking the time to fill out this bug report! Please ensure you provide as much information as asked to better assist in confirming and identifying a fix for the bug report.
|
||||
- type: dropdown
|
||||
id: existing-issue
|
||||
attributes:
|
||||
label: 'Verified issue does not already exist?'
|
||||
description: 'Please search to see if an issue already exists for the issue you encountered.'
|
||||
options:
|
||||
- 'I have searched and found no existing issue'
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: what-happened
|
||||
attributes:
|
||||
label: What happened?
|
||||
description: Also tell us, what did you expect to happen?
|
||||
placeholder: Tell us what you see!
|
||||
value: 'A bug happened!'
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: errors-received
|
||||
attributes:
|
||||
label: 'What error did you receive?'
|
||||
description: 'If you received an error or a message on the screen, please provide that here.'
|
||||
validations:
|
||||
required: false
|
||||
- type: markdown
|
||||
id: env-info
|
||||
attributes:
|
||||
value: '## Environment Details'
|
||||
- type: dropdown
|
||||
id: hosting
|
||||
attributes:
|
||||
label: Where are you hosting Actual?
|
||||
description: Where are you running your instance of Actual from?
|
||||
options:
|
||||
- Locally via Yarn
|
||||
- Docker
|
||||
- Fly.io
|
||||
- NAS
|
||||
- Other
|
||||
validations:
|
||||
required: false
|
||||
- type: dropdown
|
||||
id: browsers
|
||||
attributes:
|
||||
label: What browsers are you seeing the problem on?
|
||||
multiple: true
|
||||
options:
|
||||
- Firefox
|
||||
- Chrome
|
||||
- Safari
|
||||
- Microsoft Edge
|
||||
- Other
|
||||
- type: dropdown
|
||||
id: operating-system
|
||||
attributes:
|
||||
label: Operating System
|
||||
description: What version of our software are you running?
|
||||
options:
|
||||
- Windows 11
|
||||
- Windows 10
|
||||
- Linux
|
||||
- Mobile Device
|
||||
- Other
|
||||
validations:
|
||||
required: false
|
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
5
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: Feature Request?
|
||||
url: https://github.com/actualbudget/actual/discussions/new?category=ideas
|
||||
about: Website is hosted via GitHub Discussions under actualbudget/actual
|
14
.github/workflows/opened-issues-triage.yml
vendored
Normal file
14
.github/workflows/opened-issues-triage.yml
vendored
Normal file
|
@ -0,0 +1,14 @@
|
|||
name: Mark new issue for triage
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
needs-triage:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions-ecosystem/action-add-labels@v1
|
||||
with:
|
||||
labels: needs triage
|
18
.github/workflows/test.yml
vendored
Normal file
18
.github/workflows/test.yml
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
name: Test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
branches: '*'
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up environment
|
||||
uses: ./.github/actions/setup
|
||||
- name: Test
|
||||
run: yarn test
|
9
.gitignore
vendored
9
.gitignore
vendored
|
@ -20,3 +20,12 @@ bundle.mobile.js.map
|
|||
export-2020-01-10.csv
|
||||
|
||||
**/*.log
|
||||
|
||||
# Yarn
|
||||
.pnp.*
|
||||
.yarn/*
|
||||
!.yarn/patches
|
||||
!.yarn/plugins
|
||||
!.yarn/releases
|
||||
!.yarn/sdks
|
||||
!.yarn/versions
|
||||
|
|
4
.prettierrc.json
Normal file
4
.prettierrc.json
Normal file
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"singleQuote": true,
|
||||
"trailingComma": "none"
|
||||
}
|
28
.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
vendored
Normal file
28
.yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
vendored
Normal file
File diff suppressed because one or more lines are too long
785
.yarn/releases/yarn-3.2.0.cjs
vendored
Executable file
785
.yarn/releases/yarn-3.2.0.cjs
vendored
Executable file
File diff suppressed because one or more lines are too long
7
.yarnrc.yml
Normal file
7
.yarnrc.yml
Normal file
|
@ -0,0 +1,7 @@
|
|||
nodeLinker: node-modules
|
||||
|
||||
plugins:
|
||||
- path: .yarn/plugins/@yarnpkg/plugin-workspace-tools.cjs
|
||||
spec: "@yarnpkg/plugin-workspace-tools"
|
||||
|
||||
yarnPath: .yarn/releases/yarn-3.2.0.cjs
|
21
bin/package
21
bin/package
|
@ -80,27 +80,14 @@ if [[ $CI != true && "$OSTYPE" == "darwin"* ]]; then
|
|||
yarn lint
|
||||
fi
|
||||
|
||||
./node_modules/.bin/patch-package
|
||||
yarn patch-package
|
||||
|
||||
(
|
||||
cd packages/loot-design;
|
||||
../../node_modules/.bin/patch-package
|
||||
)
|
||||
yarn workspace mobile patch-package
|
||||
|
||||
(
|
||||
cd packages/mobile;
|
||||
../../node_modules/.bin/patch-package
|
||||
)
|
||||
yarn workspace loot-core build:node
|
||||
|
||||
(
|
||||
cd packages/loot-core;
|
||||
NODE_ENV=production yarn build:node
|
||||
)
|
||||
yarn workspace @actual-app/web build
|
||||
|
||||
(
|
||||
cd packages/desktop-client;
|
||||
yarn build
|
||||
)
|
||||
|
||||
rm -fr packages/desktop-electron/client-build
|
||||
cp -r packages/desktop-client/build packages/desktop-electron/client-build
|
||||
|
|
|
@ -56,19 +56,8 @@ if [ $CI != true ]; then
|
|||
yarn lint
|
||||
fi
|
||||
|
||||
(
|
||||
cd packages/loot-design;
|
||||
../../node_modules/.bin/patch-package
|
||||
)
|
||||
ACTUAL_RELEASE_TYPE=$RELEASE yarn workspace loot-core build:browser
|
||||
|
||||
(
|
||||
cd packages/loot-core;
|
||||
ACTUAL_RELEASE_TYPE=$RELEASE yarn build:browser
|
||||
)
|
||||
|
||||
(
|
||||
cd packages/desktop-client;
|
||||
REACT_APP_RELEASE_TYPE=$RELEASE yarn build:browser
|
||||
)
|
||||
REACT_APP_RELEASE_TYPE=$RELEASE yarn workspace @actual-app/web build:browser
|
||||
|
||||
echo "packages/desktop-client/build"
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
const { join, resolve } = require('path');
|
||||
const { createTransformer } = require('babel-jest');
|
||||
const packagePath = resolve('./');
|
||||
|
||||
const packageGlob = join(packagePath, 'packages/*');
|
||||
|
||||
module.exports = createTransformer({
|
||||
babelrcRoots: packageGlob,
|
||||
|
||||
// TODO: This is awful and a mess and we should fix it.
|
||||
//
|
||||
// Forcing this on allows certain packages in node_modules to be
|
||||
// exported as ESM, which jest usually errors on. node_modules are
|
||||
// usually not transformed, but you can allowlist one in the
|
||||
// `jest.config.js` for your project like this:
|
||||
//
|
||||
// transformIgnorePatterns: [
|
||||
// '/node_modules/(?!absurd-sql)'
|
||||
// ],
|
||||
//
|
||||
// Without this explicit plugin, even though Jest transforms the
|
||||
// module it won't recognize ESM
|
||||
plugins: ['@babel/plugin-transform-modules-commonjs']
|
||||
});
|
|
@ -1,9 +0,0 @@
|
|||
const { join, resolve } = require('path');
|
||||
const { createTransformer } = require('babel-jest');
|
||||
const packagePath = resolve('./');
|
||||
|
||||
const packageGlob = join(packagePath, 'packages/*');
|
||||
|
||||
module.exports = createTransformer({
|
||||
babelrcRoots: packageGlob
|
||||
});
|
|
@ -1,8 +0,0 @@
|
|||
module.exports = {
|
||||
projects: [
|
||||
'<rootDir>/packages/loot-core',
|
||||
'<rootDir>/packages/loot-core/jest.web.config.js',
|
||||
'<rootDir>/packages/loot-design',
|
||||
'<rootDir>/packages/loot-design/jest.rn.config.js'
|
||||
]
|
||||
};
|
67
package.json
67
package.json
|
@ -15,74 +15,39 @@
|
|||
"workspaces": {
|
||||
"packages": [
|
||||
"packages/*"
|
||||
],
|
||||
"nohoist": [
|
||||
"**/better-sqlite3",
|
||||
"**/better-sqlite3/**",
|
||||
"mobile/react-native",
|
||||
"mobile/react-native-*",
|
||||
"mobile/rn-fetch-blob",
|
||||
"mobile/**/event-target-shim",
|
||||
"mobile/@sentry/react-native",
|
||||
"mobile/nodejs-mobile-react-native",
|
||||
"**/mobile/nodejs-mobile-react-native/**",
|
||||
"**/@react-native-community/**",
|
||||
"**/@react-navigation/**",
|
||||
"mobile/react-navigation",
|
||||
"mobile/react-navigation-tabs",
|
||||
"mobile/rn-snoopy",
|
||||
"mobile/rn-snoopy/**",
|
||||
"mobile/detox",
|
||||
"mobile/detox/**",
|
||||
"mobile/jsc-android",
|
||||
"mobile/jsc-android/**",
|
||||
"**/react-native-web",
|
||||
"**/react-native-web/**",
|
||||
"**/@sentry/cli"
|
||||
]
|
||||
},
|
||||
"scripts": {
|
||||
"start": "npm-run-all --parallel start:desktop-*",
|
||||
"start:desktop-node": "cd packages/loot-core && yarn watch:node",
|
||||
"start:desktop-client": "cd packages/desktop-client && yarn watch",
|
||||
"start:desktop-electron": "cd packages/desktop-electron && yarn watch",
|
||||
"start:browser": "npm-run-all --parallel start:browser-*",
|
||||
"start:browser-backend": "cd packages/loot-core && yarn watch:browser",
|
||||
"start:browser-frontend": "cd packages/desktop-client && yarn start:browser",
|
||||
"test": "./node_modules/.bin/jest --maxWorkers=4",
|
||||
"test:debug": "node ./node_modules/.bin/jest --runInBand --useStderr",
|
||||
"test:debug-brk": "node --inspect-brk ./node_modules/.bin/jest --runInBand",
|
||||
"start": "npm-run-all --parallel 'start:desktop-*'",
|
||||
"start:desktop-node": "yarn workspace loot-core watch:node",
|
||||
"start:desktop-client": "yarn workspace @actual-app/web watch",
|
||||
"start:desktop-electron": "yarn workspace Actual watch",
|
||||
"start:browser": "npm-run-all --parallel 'start:browser-*'",
|
||||
"start:browser-backend": "yarn workspace loot-core watch:browser",
|
||||
"start:browser-frontend": "yarn workspace @actual-app/web start:browser",
|
||||
"test": "yarn workspaces foreach --parallel --verbose run test",
|
||||
"test:debug": "yarn workspaces foreach --verbose run test",
|
||||
"rebuild-electron": "./node_modules/.bin/electron-rebuild -f -m ./packages/loot-core",
|
||||
"rebuild-node": "cd packages/loot-core && npm rebuild",
|
||||
"lint": "cd packages/loot-core && yarn lint",
|
||||
"rebuild-node": "yarn workspace loot-core rebuild",
|
||||
"lint": "yarn workspaces foreach --verbose run lint",
|
||||
"postinstall": "rm -rf ./packages/loot-design/node_modules/react && rm -rf ./packages/mobile/node_modules/react && rm -rf ./node_modules/react-native && patch-package"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/plugin-transform-modules-commonjs": "^7.18.2",
|
||||
"cross-env": "^5.1.5",
|
||||
"husky": "^3.0.4",
|
||||
"npm-run-all": "^4.1.3",
|
||||
"patch-package": "^6.1.2",
|
||||
"prettier": "^1.18.1",
|
||||
"pretty-quick": "^1.11.1",
|
||||
"shelljs": "^0.8.2",
|
||||
"source-map-support": "^0.5.21"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": "react-app",
|
||||
"rules": {
|
||||
"no-unused-vars": "off",
|
||||
"no-loop-func": "off",
|
||||
"no-restricted-globals": "off"
|
||||
}
|
||||
},
|
||||
"prettier": {
|
||||
"singleQuote": true,
|
||||
"trailingComma": "none"
|
||||
},
|
||||
"resolutions": {
|
||||
"@babel/preset-env": "^7.15.1",
|
||||
"@babel/core": "^7.15.1",
|
||||
"@babel/runtime": "^7.15.1",
|
||||
"@babel/helper-plugin-utils": "^7.14.5"
|
||||
}
|
||||
"@babel/helper-plugin-utils": "^7.14.5",
|
||||
"react-error-overlay": "6.0.9"
|
||||
},
|
||||
"packageManager": "yarn@3.2.0"
|
||||
}
|
||||
|
|
|
@ -518,6 +518,10 @@ module.exports = function(webpackEnv) {
|
|||
// https://github.com/jmblog/how-to-optimize-momentjs-with-webpack
|
||||
// You can remove this if you don't use Moment.js:
|
||||
new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
|
||||
// Pikaday throws a warning if Moment.js is not installed however it doesn't
|
||||
// actually require it to be installed. As we don't use Moment.js ourselves
|
||||
// then we can just silence this warning.
|
||||
new webpack.IgnorePlugin(/moment$/, /pikaday$/),
|
||||
!(isEnvDevelopment || process.env.PERF_BUILD) &&
|
||||
new webpack.IgnorePlugin(/perf-deets\/frontend/),
|
||||
// Generate a service worker script that will precache, and keep up to date,
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
"@reactions/component": "^2.0.2",
|
||||
"@sentry/browser": "6.12.0",
|
||||
"@svgr/webpack": "2.4.1",
|
||||
"add": "^2.0.6",
|
||||
"babel-eslint": "9.0.0",
|
||||
"babel-loader": "8.0.4",
|
||||
"babel-preset-jwl-app": "6.1.12",
|
||||
|
@ -23,6 +22,7 @@
|
|||
"case-sensitive-paths-webpack-plugin": "2.1.2",
|
||||
"chalk": "2.4.1",
|
||||
"codemirror": "^5.37.0",
|
||||
"cross-env": "^7.0.3",
|
||||
"css-loader": "1.0.0",
|
||||
"date-fns": "2.0.0-alpha.27",
|
||||
"debounce": "^1.2.0",
|
||||
|
@ -34,6 +34,7 @@
|
|||
"eslint-plugin-flowtype": "2.50.1",
|
||||
"eslint-plugin-import": "2.14.0",
|
||||
"eslint-plugin-jsx-a11y": "6.1.2",
|
||||
"eslint-plugin-prettier": "^3.1.4",
|
||||
"eslint-plugin-react": "7.11.1",
|
||||
"file-loader": "2.0.0",
|
||||
"focus-visible": "^4.1.1",
|
||||
|
@ -41,10 +42,8 @@
|
|||
"fs-extra": "7.0.0",
|
||||
"glamor": "^2.20.40",
|
||||
"html-webpack-plugin": "4.0.0-alpha.2",
|
||||
"http-client": "^4.3.1",
|
||||
"identity-obj-proxy": "3.0.0",
|
||||
"load-js": "^3.0.3",
|
||||
"lodash.memoize": "^4.1.2",
|
||||
"mini-css-extract-plugin": "0.4.3",
|
||||
"mitt": "^1.1.2",
|
||||
"optimize-css-assets-webpack-plugin": "5.0.1",
|
||||
|
@ -55,7 +54,6 @@
|
|||
"postcss-preset-env": "6.3.1",
|
||||
"postcss-safe-parser": "4.0.1",
|
||||
"prop-types": "15.6.0",
|
||||
"raven-js": "^3.21.0",
|
||||
"react": "16.13.1",
|
||||
"react-addons-shallow-compare": "^15.6.0",
|
||||
"react-app-polyfill": "^0.1.3",
|
||||
|
@ -75,7 +73,6 @@
|
|||
"sass-loader": "7.1.0",
|
||||
"style-loader": "0.23.0",
|
||||
"terser-webpack-plugin": "1.1.0",
|
||||
"url-loader": "1.1.1",
|
||||
"victory": "^0.26.1",
|
||||
"webpack": "4.19.1",
|
||||
"webpack-dev-server": "3.11.0",
|
||||
|
@ -88,7 +85,8 @@
|
|||
"start:browser": "cross-env ./bin/watch-browser",
|
||||
"watch": "cross-env PORT=3001 node scripts/start.js",
|
||||
"build": "cross-env INLINE_RUNTIME_CHUNK=false node scripts/build.js",
|
||||
"build:browser": "cross-env./bin/build-browser"
|
||||
"build:browser": "cross-env ./bin/build-browser",
|
||||
"lint": "eslint src"
|
||||
},
|
||||
"browserslist": [
|
||||
"electron 3.0"
|
||||
|
|
|
@ -6,8 +6,8 @@ import {
|
|||
init as initConnection,
|
||||
send
|
||||
} from 'loot-core/src/platform/client/fetch';
|
||||
import installPolyfills from '../polyfills';
|
||||
import { styles, hasHiddenScrollbars } from 'loot-design/src/style';
|
||||
import installPolyfills from '../polyfills';
|
||||
import FatalError from './FatalError';
|
||||
import ManagementApp from './manager/ManagementApp';
|
||||
import FinancesApp from './FinancesApp';
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import React, { useState } from 'react';
|
||||
import React from 'react';
|
||||
import { View, Block } from 'loot-design/src/components/common';
|
||||
import { css } from 'glamor';
|
||||
import Background from './Background';
|
||||
import AnimatedLoading from 'loot-design/src/svg/v1/AnimatedLoading';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import Background from './Background';
|
||||
|
||||
function AppBackground({ initializing, loadingText }) {
|
||||
return (
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React, { useState } from 'react';
|
||||
import React from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { useTransition, animated } from 'react-spring';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
|
|
|
@ -9,14 +9,18 @@ function getFlex(flex) {
|
|||
}
|
||||
|
||||
function Box({ flex, children, direction, style }) {
|
||||
return <div
|
||||
return (
|
||||
<div
|
||||
style={{
|
||||
...style,
|
||||
flex: getFlex(flex),
|
||||
display: 'flex',
|
||||
flexDirection: direction || 'column'
|
||||
}}
|
||||
>{children}</div>;
|
||||
>
|
||||
{children}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default Box;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {
|
||||
send,
|
||||
init as initConnection
|
||||
|
@ -12,7 +11,7 @@ import {
|
|||
Input,
|
||||
InlineField
|
||||
} from 'loot-design/src/components/common';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
|
||||
require('codemirror/lib/codemirror.css');
|
||||
require('codemirror/theme/monokai.css');
|
||||
|
@ -206,7 +205,7 @@ class Debugger extends React.Component {
|
|||
height: 10,
|
||||
backgroundColor: '#303030',
|
||||
marginRight: 10,
|
||||
borderRadius: 10,
|
||||
borderRadius: 10
|
||||
}}
|
||||
/>
|
||||
<Button onClick={this.toggleRecord} style={{ marginRight: 10 }}>
|
||||
|
|
|
@ -99,7 +99,9 @@ class FatalError extends React.Component {
|
|||
.
|
||||
</P>
|
||||
<P>
|
||||
<Button onClick={() => window.Actual.relaunch()}>{buttonText}</Button>
|
||||
<Button onClick={() => window.Actual.relaunch()}>
|
||||
{buttonText}
|
||||
</Button>
|
||||
</P>
|
||||
<P isLast={true} style={{ fontSize: 11 }}>
|
||||
<Link
|
||||
|
|
|
@ -10,15 +10,15 @@ import { SpreadsheetProvider } from 'loot-core/src/client/SpreadsheetProvider';
|
|||
import checkForUpgradeNotifications from 'loot-core/src/client/upgrade-notifications';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { View } from 'loot-design/src/components/common';
|
||||
import BankSyncStatus from './BankSyncStatus';
|
||||
import { BudgetMonthCountProvider } from 'loot-design/src/components/budget/BudgetMonthCountContext';
|
||||
import * as undo from 'loot-core/src/platform/client/undo';
|
||||
import { PageTypeProvider } from './Page';
|
||||
import { getLocationState } from '../util/location-state';
|
||||
import { ActiveLocationProvider } from './ActiveLocation';
|
||||
import { makeLocationState } from '../util/location-state';
|
||||
import { PayeesProvider } from 'loot-core/src/client/data-hooks/payees';
|
||||
import { AccountsProvider } from 'loot-core/src/client/data-hooks/accounts';
|
||||
import { getLocationState } from '../util/location-state';
|
||||
import { makeLocationState } from '../util/location-state';
|
||||
import { PageTypeProvider } from './Page';
|
||||
import { ActiveLocationProvider } from './ActiveLocation';
|
||||
import BankSyncStatus from './BankSyncStatus';
|
||||
|
||||
import Titlebar, { TitlebarProvider } from './Titlebar';
|
||||
import FloatableSidebar, { SidebarProvider } from './FloatableSidebar';
|
||||
|
@ -277,7 +277,4 @@ function FinancesAppWithContext(props) {
|
|||
);
|
||||
}
|
||||
|
||||
export default connect(
|
||||
null,
|
||||
actions
|
||||
)(FinancesAppWithContext);
|
||||
export default connect(null, actions)(FinancesAppWithContext);
|
||||
|
|
|
@ -2,7 +2,6 @@ import React, { useState, useEffect } from 'react';
|
|||
import { connect } from 'react-redux';
|
||||
import { withRouter } from 'react-router';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
|
@ -11,7 +10,6 @@ import {
|
|||
Menu
|
||||
} from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import ExclamationSolid from 'loot-design/src/svg/v1/ExclamationSolid';
|
||||
|
||||
function LoggedInUser({
|
||||
history,
|
||||
|
|
|
@ -6,25 +6,24 @@ import { createLocation } from 'history';
|
|||
import Component from '@reactions/component';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import { send, listen, unlisten } from 'loot-core/src/platform/client/fetch';
|
||||
import { getModalRoute } from '../util';
|
||||
|
||||
import CreateAccount from './modals/CreateAccount';
|
||||
import CreateLocalAccount from 'loot-design/src/components/modals/CreateLocalAccount';
|
||||
import CloseAccount from 'loot-design/src/components/modals/CloseAccount';
|
||||
import SelectLinkedAccounts from 'loot-design/src/components/modals/SelectLinkedAccounts';
|
||||
import ConfigureLinkedAccounts from 'loot-design/src/components/modals/ConfigureLinkedAccounts';
|
||||
import LoadBackup from 'loot-design/src/components/modals/LoadBackup';
|
||||
import PlaidExternalMsg from 'loot-design/src/components/modals/PlaidExternalMsg';
|
||||
import ImportTransactions from 'loot-design/src/components/modals/ImportTransactions';
|
||||
import EditField from 'loot-design/src/components/modals/EditField';
|
||||
import CreateAccount from './modals/CreateAccount';
|
||||
import ManagePayeesWithData from './payees/ManagePayeesWithData';
|
||||
import ManageRules from './modals/ManageRules';
|
||||
import EditRule from './modals/EditRule';
|
||||
import MergeUnusedPayees from './modals/MergeUnusedPayees';
|
||||
import PlaidExternalMsg from 'loot-design/src/components/modals/PlaidExternalMsg';
|
||||
import ConfirmCategoryDelete from './modals/ConfirmCategoryDelete';
|
||||
import WelcomeScreen from './modals/WelcomeScreen';
|
||||
import ImportTransactions from 'loot-design/src/components/modals/ImportTransactions';
|
||||
import CreateEncryptionKey from './modals/CreateEncryptionKey';
|
||||
import FixEncryptionKey from './modals/FixEncryptionKey';
|
||||
import EditField from 'loot-design/src/components/modals/EditField';
|
||||
|
||||
function Modals({
|
||||
history,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React from 'react';
|
||||
import { useHistory } from 'react-router-dom';
|
||||
import { Modal, View, Text } from 'loot-design/src/components/common';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { styles } from 'loot-design/src/style';
|
||||
|
||||
let PageTypeContext = React.createContext({ type: 'page' });
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import React, { useState, useEffect, useRef } from 'react';
|
||||
import { bindActionCreators } from 'redux';
|
||||
import { connect } from 'react-redux';
|
||||
import { css } from 'glamor';
|
||||
import { Route, Switch, Redirect } from 'react-router-dom';
|
||||
|
@ -8,20 +7,14 @@ import {
|
|||
View,
|
||||
Text,
|
||||
Button,
|
||||
ButtonLink,
|
||||
ButtonWithLoading,
|
||||
AnchorLink,
|
||||
Link,
|
||||
Input
|
||||
AnchorLink
|
||||
} from 'loot-design/src/components/common';
|
||||
import { send, listen } from 'loot-core/src/platform/client/fetch';
|
||||
import { numberFormats } from 'loot-core/src/shared/util';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { Information, Warning, Error } from 'loot-design/src/components/alerts';
|
||||
import Checkmark from 'loot-design/src/svg/v1/Checkmark';
|
||||
import CheveronDown from 'loot-design/src/svg/v1/CheveronDown';
|
||||
import { Information } from 'loot-design/src/components/alerts';
|
||||
import ExpandArrow from 'loot-design/src/svg/ExpandArrow';
|
||||
import ExclamationSolid from 'loot-design/src/svg/v1/ExclamationSolid';
|
||||
import Platform from 'loot-core/src/client/platform';
|
||||
|
||||
import useServerVersion from '../hooks/useServerVersion';
|
||||
|
|
|
@ -2,15 +2,12 @@ import React, { useState, useEffect } from 'react';
|
|||
import { bindActionCreators } from 'redux';
|
||||
import { connect } from 'react-redux';
|
||||
import { withRouter } from 'react-router-dom';
|
||||
import { select } from 'glamor';
|
||||
import lively from '@jlongster/lively';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import {
|
||||
Button,
|
||||
Input,
|
||||
InitialFocus,
|
||||
View,
|
||||
Text
|
||||
} from 'loot-design/src/components/common';
|
||||
import { Sidebar } from 'loot-design/src/components/sidebar';
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React, { Component } from 'react';
|
||||
import React from 'react';
|
||||
import Cell from 'loot-design/src/components/spreadsheet/Cell';
|
||||
import { View } from 'loot-design/src/components/common';
|
||||
|
||||
|
|
|
@ -1,13 +1,3 @@
|
|||
import React, { useState } from 'react';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
Stack,
|
||||
Button,
|
||||
ButtonWithLoading
|
||||
} from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
|
||||
export function RepairSyncNotification() {}
|
||||
|
||||
// TODO: sync button shouldn't show error status if it's a local file
|
||||
|
|
|
@ -1,10 +1,4 @@
|
|||
import React, {
|
||||
useState,
|
||||
useEffect,
|
||||
useRef,
|
||||
useCallback,
|
||||
useContext
|
||||
} from 'react';
|
||||
import React, { useState, useEffect, useRef, useContext } from 'react';
|
||||
import { Switch, Route, withRouter } from 'react-router-dom';
|
||||
import { connect } from 'react-redux';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
|
@ -22,11 +16,11 @@ import {
|
|||
P
|
||||
} from 'loot-design/src/components/common';
|
||||
import SheetValue from 'loot-design/src/components/spreadsheet/SheetValue';
|
||||
import { MonthCountSelector } from './budget/MonthCountSelector';
|
||||
import ArrowButtonRight1 from 'loot-design/src/svg/v2/ArrowButtonRight1';
|
||||
import NavigationMenu from 'loot-design/src/svg/v2/NavigationMenu';
|
||||
import ArrowLeft from 'loot-design/src/svg/v1/ArrowLeft';
|
||||
import AlertTriangle from 'loot-design/src/svg/v2/AlertTriangle';
|
||||
import { MonthCountSelector } from './budget/MonthCountSelector';
|
||||
import AccountSyncCheck from './accounts/AccountSyncCheck';
|
||||
import LoggedInUser from './LoggedInUser';
|
||||
import AnimatedRefresh from './AnimatedRefresh';
|
||||
|
|
|
@ -4,20 +4,16 @@ import PropTypes from 'prop-types';
|
|||
import { bindActionCreators } from 'redux';
|
||||
import { connect } from 'react-redux';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import { View } from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import Intro from './tutorial/Intro';
|
||||
import BudgetSummary from './tutorial/BudgetSummary';
|
||||
import BudgetCategories from './tutorial/BudgetCategories';
|
||||
import BudgetInitial from './tutorial/BudgetInitial';
|
||||
import TransactionAdd from './tutorial/TransactionAdd';
|
||||
import TransactionEnter from './tutorial/TransactionEnter';
|
||||
import TransactionFinalize from './tutorial/TransactionFinalize';
|
||||
import BudgetNewIncome from './tutorial/BudgetNewIncome';
|
||||
import CategoryBalance from './tutorial/CategoryBalance';
|
||||
import Overspending from './tutorial/Overspending';
|
||||
import BudgetNextMonth from './tutorial/BudgetNextMonth';
|
||||
import DeleteTransactions from './tutorial/DeleteTransactions';
|
||||
import Final from './tutorial/Final';
|
||||
|
||||
function generatePath(innerRect, outerRect) {
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import React from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import PropTypes from 'prop-types';
|
||||
import lively from '@jlongster/lively';
|
||||
|
||||
class Tutorial extends React.Component {
|
||||
static childContextTypes = {
|
||||
|
|
|
@ -2,13 +2,7 @@ import React from 'react';
|
|||
import { bindActionCreators } from 'redux';
|
||||
import { connect } from 'react-redux';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
Block,
|
||||
Link,
|
||||
Button
|
||||
} from 'loot-design/src/components/common';
|
||||
import { View, Text, Link, Button } from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import Close from 'loot-design/src/svg/v1/Close';
|
||||
|
||||
|
|
|
@ -1,27 +1,8 @@
|
|||
import React, {
|
||||
useState,
|
||||
useLayoutEffect,
|
||||
useEffect,
|
||||
useRef,
|
||||
useMemo,
|
||||
useReducer,
|
||||
useCallback
|
||||
} from 'react';
|
||||
import React, { useState, useEffect, useRef, useMemo } from 'react';
|
||||
import { bindActionCreators } from 'redux';
|
||||
import { connect } from 'react-redux';
|
||||
import { useSelector, useDispatch } from 'react-redux';
|
||||
import {
|
||||
Redirect,
|
||||
withRouter,
|
||||
useParams,
|
||||
useHistory,
|
||||
useLocation
|
||||
} from 'react-router-dom';
|
||||
import { css } from 'glamor';
|
||||
import Modal from 'react-modal';
|
||||
import Component from '@reactions/component';
|
||||
import { Redirect, useParams, useHistory, useLocation } from 'react-router-dom';
|
||||
import { debounce } from 'debounce';
|
||||
import SpreadsheetContext from 'loot-design/src/components/spreadsheet/SpreadsheetContext';
|
||||
import { send, listen } from 'loot-core/src/platform/client/fetch';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import {
|
||||
|
@ -33,7 +14,6 @@ import {
|
|||
InitialFocus,
|
||||
Tooltip,
|
||||
Menu,
|
||||
Block,
|
||||
Stack
|
||||
} from 'loot-design/src/components/common';
|
||||
import {
|
||||
|
@ -41,55 +21,47 @@ import {
|
|||
applyChanges,
|
||||
groupById
|
||||
} from 'loot-core/src/shared/util';
|
||||
import * as monthUtils from 'loot-core/src/shared/months';
|
||||
import TutorialPoint from 'loot-design/src/components/TutorialPoint';
|
||||
import DotsHorizontalTriple from 'loot-design/src/svg/v1/DotsHorizontalTriple';
|
||||
import Pencil1 from 'loot-design/src/svg/v2/Pencil1';
|
||||
import SearchAlternate from 'loot-design/src/svg/v2/SearchAlternate';
|
||||
import DownloadThickBottom from 'loot-design/src/svg/v2/DownloadThickBottom';
|
||||
import AnimatedRefresh from '../AnimatedRefresh';
|
||||
import Add from 'loot-design/src/svg/v1/Add';
|
||||
import format from 'loot-design/src/components/spreadsheet/format';
|
||||
import useSheetValue from 'loot-design/src/components/spreadsheet/useSheetValue';
|
||||
import CellValue from 'loot-design/src/components/spreadsheet/CellValue';
|
||||
import ArrowButtonRight1 from 'loot-design/src/svg/v2/ArrowButtonRight1';
|
||||
import CheveronDown from 'loot-design/src/svg/v1/CheveronDown';
|
||||
import CheckCircle1 from 'loot-design/src/svg/v2/CheckCircle1';
|
||||
import Loading from 'loot-design/src/svg/v1/AnimatedLoading';
|
||||
import ArrowsExpand3 from 'loot-design/src/svg/v2/ArrowsExpand3';
|
||||
import ArrowsShrink3 from 'loot-design/src/svg/v2/ArrowsShrink3';
|
||||
import * as queries from 'loot-core/src/client/queries';
|
||||
import q, { runQuery, pagedQuery } from 'loot-core/src/client/query-helpers';
|
||||
import { queryContext } from 'loot-core/src/client/query-hooks';
|
||||
import { SelectedItemsButton } from 'loot-design/src/components/table';
|
||||
import { Query } from 'loot-core/src/shared/query';
|
||||
import * as aql from 'loot-core/src/client/query-helpers';
|
||||
import {
|
||||
deleteTransaction,
|
||||
updateTransaction,
|
||||
ungroupTransactions
|
||||
} from 'loot-core/src/shared/transactions';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import {
|
||||
SelectedProviderWithItems,
|
||||
useSelectedItems
|
||||
} from 'loot-design/src/components/useSelected';
|
||||
import { KeyHandlers } from 'loot-design/src/components/KeyHandlers';
|
||||
import {
|
||||
SchedulesProvider,
|
||||
useCachedSchedules
|
||||
} from 'loot-core/src/client/data-hooks/schedules';
|
||||
import { authorizeBank } from '../../plaid';
|
||||
import AnimatedRefresh from '../AnimatedRefresh';
|
||||
import { useActiveLocation } from '../ActiveLocation';
|
||||
import { FilterButton, AppliedFilters } from './Filters';
|
||||
import TransactionList from './TransactionList';
|
||||
import {
|
||||
SplitsExpandedProvider,
|
||||
useSplitsExpanded,
|
||||
isPreviewId
|
||||
} from './TransactionsTable';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import TransactionList from './TransactionList';
|
||||
import { authorizeBank } from '../../plaid';
|
||||
import {
|
||||
SelectedProviderWithItems,
|
||||
useSelectedItems
|
||||
} from 'loot-design/src/components/useSelected';
|
||||
import { keys } from 'loot-design/src/util/keys';
|
||||
import { KeyHandlers } from 'loot-design/src/components/KeyHandlers';
|
||||
import { FilterButton, AppliedFilters } from './Filters';
|
||||
import {
|
||||
SchedulesProvider,
|
||||
useCachedSchedules
|
||||
} from 'loot-core/src/client/data-hooks/schedules';
|
||||
import { getPayeesById } from 'loot-core/src/client/reducers/queries';
|
||||
import { useActiveLocation } from '../ActiveLocation';
|
||||
|
||||
function EmptyMessage({ onAdd }) {
|
||||
return (
|
||||
|
@ -642,7 +614,7 @@ const AccountHeader = React.memo(
|
|||
let searchInput = useRef(null);
|
||||
let splitsExpanded = useSplitsExpanded();
|
||||
|
||||
let canSync = syncEnabled && (account && account.account_id);
|
||||
let canSync = syncEnabled && account && account.account_id;
|
||||
if (!account) {
|
||||
// All accounts - check for any syncable account
|
||||
canSync = !!accounts.find(account => !!account.account_id);
|
||||
|
@ -1701,9 +1673,9 @@ class AccountInternal extends React.PureComponent {
|
|||
}
|
||||
showAccount={
|
||||
!accountId ||
|
||||
(accountId === 'offbudget' ||
|
||||
accountId === 'budgeted' ||
|
||||
accountId === 'uncategorized')
|
||||
accountId === 'offbudget' ||
|
||||
accountId === 'budgeted' ||
|
||||
accountId === 'uncategorized'
|
||||
}
|
||||
isAdding={this.state.isAdding}
|
||||
isNew={this.isNew}
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import React, { useState } from 'react';
|
||||
import { Route, withRouter } from 'react-router-dom';
|
||||
import { connect } from 'react-redux';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import { View, Text, Button, Tooltip } from 'loot-design/src/components/common';
|
||||
import { View, Button, Tooltip } from 'loot-design/src/components/common';
|
||||
import ExclamationOutline from 'loot-design/src/svg/v1/ExclamationOutline';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { reauthorizeBank } from '../../plaid';
|
||||
|
|
|
@ -15,7 +15,6 @@ import {
|
|||
Tooltip,
|
||||
Stack,
|
||||
Button,
|
||||
InitialFocus,
|
||||
Menu,
|
||||
CustomSelect
|
||||
} from 'loot-design/src/components/common';
|
||||
|
@ -31,9 +30,9 @@ import {
|
|||
} from 'loot-core/src/shared/rules';
|
||||
import DeleteIcon from 'loot-design/src/svg/Delete';
|
||||
import SettingsSliderAlternate from 'loot-design/src/svg/v2/SettingsSliderAlternate';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import GenericInput from '../util/GenericInput';
|
||||
import { Value } from '../modals/ManageRules';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
|
||||
let filterFields = [
|
||||
'date',
|
||||
|
@ -149,7 +148,11 @@ function ConfigureField({ field, op, value, dispatch, onApply }) {
|
|||
['amount-outflow', 'Amount (outflow)']
|
||||
]
|
||||
: field === 'date'
|
||||
? [['date', 'Date'], ['month', 'Month'], ['year', 'Year']]
|
||||
? [
|
||||
['date', 'Date'],
|
||||
['month', 'Month'],
|
||||
['year', 'Year']
|
||||
]
|
||||
: null
|
||||
}
|
||||
value={subfield}
|
||||
|
|
|
@ -2,7 +2,6 @@ import React, { useMemo, useCallback } from 'react';
|
|||
import { useSelector } from 'react-redux';
|
||||
import {
|
||||
format as formatDate,
|
||||
parse as parseDate,
|
||||
parseISO,
|
||||
isValid as isDateValid
|
||||
} from 'date-fns';
|
||||
|
@ -17,14 +16,9 @@ import {
|
|||
useSelectedItems,
|
||||
useSelectedDispatch
|
||||
} from 'loot-design/src/components/useSelected';
|
||||
import {
|
||||
integerToAmount,
|
||||
amountToInteger,
|
||||
integerToCurrency
|
||||
} from 'loot-core/src/shared/util';
|
||||
import { integerToCurrency } from 'loot-core/src/shared/util';
|
||||
import {
|
||||
getAccountsById,
|
||||
getPayeesById,
|
||||
getCategoriesById
|
||||
} from 'loot-core/src/client/reducers/queries';
|
||||
import ArrowsSynchronize from 'loot-design/src/svg/v2/ArrowsSynchronize';
|
||||
|
|
|
@ -1,13 +1,5 @@
|
|||
import React, {
|
||||
useRef,
|
||||
useEffect,
|
||||
useCallback,
|
||||
useLayoutEffect,
|
||||
useMemo
|
||||
} from 'react';
|
||||
import React, { useRef, useEffect, useCallback, useLayoutEffect } from 'react';
|
||||
import { useDispatch } from 'react-redux';
|
||||
import { TransactionTable } from './TransactionsTable';
|
||||
import lively from '@jlongster/lively';
|
||||
import {
|
||||
splitTransaction,
|
||||
updateTransaction,
|
||||
|
@ -16,8 +8,8 @@ import {
|
|||
applyTransactionDiff
|
||||
} from 'loot-core/src/shared/transactions';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import { pushModal } from 'loot-core/src/client/actions/modals';
|
||||
import { getChangedValues, applyChanges } from 'loot-core/src/shared/util';
|
||||
import { TransactionTable } from './TransactionsTable';
|
||||
const uuid = require('loot-core/src/platform/uuid');
|
||||
|
||||
// When data changes, there are two ways to update the UI:
|
||||
|
|
|
@ -5,25 +5,16 @@ import React, {
|
|||
useCallback,
|
||||
useLayoutEffect,
|
||||
useEffect,
|
||||
useImperativeHandle,
|
||||
useContext,
|
||||
useReducer
|
||||
} from 'react';
|
||||
import { useSelector, useDispatch } from 'react-redux';
|
||||
import {
|
||||
format as formatDate,
|
||||
parse as parseDate,
|
||||
parseISO,
|
||||
isValid as isDateValid
|
||||
} from 'date-fns';
|
||||
import q, { runQuery } from 'loot-core/src/client/query-helpers';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
Stack,
|
||||
Tooltip,
|
||||
Button
|
||||
} from 'loot-design/src/components/common';
|
||||
import { View, Text, Tooltip, Button } from 'loot-design/src/components/common';
|
||||
import CategoryAutocomplete from 'loot-design/src/components/CategorySelect';
|
||||
import PayeeAutocomplete from 'loot-design/src/components/PayeeAutocomplete';
|
||||
import AccountAutocomplete from 'loot-design/src/components/AccountAutocomplete';
|
||||
|
@ -31,15 +22,12 @@ import DateSelect from 'loot-design/src/components/DateSelect';
|
|||
import RightArrow2 from 'loot-design/src/svg/RightArrow2';
|
||||
import LeftArrow2 from 'loot-design/src/svg/LeftArrow2';
|
||||
import Hyperlink2 from 'loot-design/src/svg/v2/Hyperlink2';
|
||||
import DeleteIcon from 'loot-design/src/svg/Delete';
|
||||
import CheveronDown from 'loot-design/src/svg/v1/CheveronDown';
|
||||
import CalendarIcon from 'loot-design/src/svg/v2/Calendar';
|
||||
import ArrowsSynchronize from 'loot-design/src/svg/v2/ArrowsSynchronize';
|
||||
import {
|
||||
integerToCurrency,
|
||||
amountToInteger,
|
||||
applyChanges,
|
||||
debugMemoFailure,
|
||||
titleFirst
|
||||
} from 'loot-core/src/shared/util';
|
||||
import evalArithmetic from 'loot-core/src/shared/arithmetic';
|
||||
|
@ -48,13 +36,12 @@ import {
|
|||
getPayeesById,
|
||||
getCategoriesById
|
||||
} from 'loot-core/src/client/reducers/queries';
|
||||
import { currentDay, dayFromDate, addDays } from 'loot-core/src/shared/months';
|
||||
import { currentDay } from 'loot-core/src/shared/months';
|
||||
import {
|
||||
splitTransaction,
|
||||
updateTransaction,
|
||||
deleteTransaction,
|
||||
addSplitTransaction,
|
||||
ungroupTransaction
|
||||
addSplitTransaction
|
||||
} from 'loot-core/src/shared/transactions';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import {
|
||||
|
@ -67,18 +54,16 @@ import {
|
|||
CustomCell,
|
||||
CellButton,
|
||||
useTableNavigator,
|
||||
Table,
|
||||
ROW_HEIGHT
|
||||
Table
|
||||
} from 'loot-design/src/components/table';
|
||||
import {
|
||||
useSelectedDispatch,
|
||||
useSelectedItems
|
||||
} from 'loot-design/src/components/useSelected';
|
||||
import { keys } from 'loot-design/src/util/keys';
|
||||
import { useMergedRefs } from 'loot-design/src/components/useMergedRefs';
|
||||
import { getStatusProps } from '../schedules/StatusBadge';
|
||||
import { useCachedSchedules } from 'loot-core/src/client/data-hooks/schedules';
|
||||
import { getScheduledAmount } from 'loot-core/src/shared/schedules';
|
||||
import { getStatusProps } from '../schedules/StatusBadge';
|
||||
|
||||
let TABLE_BACKGROUND_COLOR = colors.n11;
|
||||
|
||||
|
|
|
@ -1,15 +1,23 @@
|
|||
import React from 'react';
|
||||
import { act } from 'react-dom/test-utils';
|
||||
import { render, fireEvent } from '@testing-library/react';
|
||||
import { debugDOM } from 'loot-core/src/mocks/util';
|
||||
import { format as formatDate, parse as parseDate } from 'date-fns';
|
||||
import { integerToCurrency } from 'loot-core/src/shared/util';
|
||||
import { initServer } from 'loot-core/src/platform/client/fetch';
|
||||
import {
|
||||
generateTransaction,
|
||||
generateAccount,
|
||||
generateCategoryGroups
|
||||
generateCategoryGroups,
|
||||
TestProvider
|
||||
} from 'loot-core/src/mocks';
|
||||
import {
|
||||
addSplitTransaction,
|
||||
realizeTempTransactions,
|
||||
splitTransaction,
|
||||
updateTransaction
|
||||
} from 'loot-core/src/shared';
|
||||
import { SelectedProviderWithItems } from 'loot-design/src/components';
|
||||
import { SplitsExpandedProvider, TransactionTable } from './TransactionsTable';
|
||||
const uuid = require('loot-core/src/platform/uuid');
|
||||
|
||||
const accounts = [generateAccount('Bank of America')];
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import React, { useState, useLayoutEffect } from 'react';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { View, Text } from 'loot-design/src/components/common';
|
||||
import React from 'react';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { View } from 'loot-design/src/components/common';
|
||||
import { useBudgetMonthCount } from 'loot-design/src/components/budget/BudgetMonthCountContext';
|
||||
import CalendarIcon from 'loot-design/src/svg/v2/Calendar';
|
||||
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
import React from 'react';
|
||||
|
||||
/* eslint-disable */
|
||||
|
||||
function BudgetSheetHeader({ row }) {
|
||||
return (
|
||||
<Row style={{ zIndex: 200, backgroundColor: colors.grey1, marginLeft: 20 }}>
|
||||
|
|
|
@ -1,14 +1,9 @@
|
|||
import React, { useEffect, useContext, useMemo } from 'react';
|
||||
import React, { useContext, useMemo } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { withRouter } from 'react-router-dom';
|
||||
import { bindActionCreators } from 'redux';
|
||||
import AutoSizer from 'react-virtualized-auto-sizer';
|
||||
import memoizeOne from 'memoize-one';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import { send, listen } from 'loot-core/src/platform/client/fetch';
|
||||
import * as monthUtils from 'loot-core/src/shared/months';
|
||||
import { getValidMonthBounds } from 'loot-design/src/components/budget/MonthsContext';
|
||||
import { TitlebarContext } from '../Titlebar';
|
||||
|
||||
import * as rollover from 'loot-design/src/components/budget/rollover/rollover-components';
|
||||
import { RolloverContext } from 'loot-design/src/components/budget/rollover/RolloverContext';
|
||||
|
@ -19,7 +14,7 @@ import { ReportProvider } from 'loot-design/src/components/budget/report/ReportC
|
|||
import DynamicBudgetTable from 'loot-design/src/components/budget/DynamicBudgetTable';
|
||||
import SpreadsheetContext from 'loot-design/src/components/spreadsheet/SpreadsheetContext';
|
||||
import { View } from 'loot-design/src/components/common';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { styles } from 'loot-design/src/style';
|
||||
import {
|
||||
addCategory,
|
||||
updateCategory,
|
||||
|
@ -30,6 +25,7 @@ import {
|
|||
updateGroup,
|
||||
deleteGroup
|
||||
} from 'loot-core/src/shared/categories.js';
|
||||
import { TitlebarContext } from '../Titlebar';
|
||||
|
||||
let _initialBudgetMonth = null;
|
||||
|
||||
|
|
|
@ -1,23 +1,16 @@
|
|||
import React, { useState, useEffect, useCallback } from 'react';
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { useDispatch } from 'react-redux';
|
||||
import { useHistory } from 'react-router-dom';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
Button,
|
||||
ButtonWithLoading
|
||||
} from 'loot-design/src/components/common';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { signOut, loggedIn } from 'loot-core/src/client/actions/user';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import {
|
||||
useBootstrapped,
|
||||
Title,
|
||||
Input,
|
||||
Link,
|
||||
ExternalLink
|
||||
} from './subscribe/common';
|
||||
import { Title, Input } from './subscribe/common';
|
||||
|
||||
export default function ConfigServer() {
|
||||
let dispatch = useDispatch();
|
||||
|
|
|
@ -2,13 +2,13 @@ import React from 'react';
|
|||
import { connect } from 'react-redux';
|
||||
import { createBrowserHistory } from 'history';
|
||||
import { Switch, Redirect, Router, Route } from 'react-router-dom';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import { View, Text } from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import ServerURL from './ServerURL';
|
||||
import LoggedInUser from '../LoggedInUser';
|
||||
import Notifications from '../Notifications';
|
||||
import useServerVersion from '../../hooks/useServerVersion';
|
||||
import ServerURL from './ServerURL';
|
||||
|
||||
import Modals from './Modals';
|
||||
import Login from './subscribe/Login';
|
||||
|
@ -16,7 +16,6 @@ import Bootstrap from './subscribe/Bootstrap';
|
|||
import Error from './subscribe/Error';
|
||||
import ChangePassword from './subscribe/ChangePassword';
|
||||
import ConfigServer from './ConfigServer';
|
||||
import useServerVersion from '../../hooks/useServerVersion';
|
||||
|
||||
function Version() {
|
||||
const version = useServerVersion();
|
||||
|
@ -230,17 +229,14 @@ class ManagementApp extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
export default connect(
|
||||
state => {
|
||||
let { modalStack } = state.modals;
|
||||
export default connect(state => {
|
||||
let { modalStack } = state.modals;
|
||||
|
||||
return {
|
||||
files: state.budgets.allFiles,
|
||||
userData: state.user.data,
|
||||
managerHasInitialized: state.app.managerHasInitialized,
|
||||
loadingText: state.app.loadingText,
|
||||
currentModals: modalStack.map(modal => modal.name)
|
||||
};
|
||||
},
|
||||
actions
|
||||
)(ManagementApp);
|
||||
return {
|
||||
files: state.budgets.allFiles,
|
||||
userData: state.user.data,
|
||||
managerHasInitialized: state.app.managerHasInitialized,
|
||||
loadingText: state.app.loadingText,
|
||||
currentModals: modalStack.map(modal => modal.name)
|
||||
};
|
||||
}, actions)(ManagementApp);
|
||||
|
|
|
@ -14,7 +14,6 @@ import ImportActual from 'loot-design/src/components/manager/ImportActual';
|
|||
import DeleteFile from 'loot-design/src/components/manager/DeleteFile';
|
||||
import CreateEncryptionKey from '../modals/CreateEncryptionKey';
|
||||
import FixEncryptionKey from '../modals/FixEncryptionKey';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
|
||||
function Modals({
|
||||
modalStack,
|
||||
|
|
|
@ -1,10 +1,5 @@
|
|||
import React, { useState, useEffect } from 'react';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
AnchorLink,
|
||||
Button
|
||||
} from 'loot-design/src/components/common';
|
||||
import { View, Text, AnchorLink } from 'loot-design/src/components/common';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
|
||||
export default function ServerURL() {
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
import React, { useState, useEffect, useCallback } from 'react';
|
||||
import React, { useState } from 'react';
|
||||
import { useDispatch } from 'react-redux';
|
||||
import { useHistory } from 'react-router-dom';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import { View, Text, Button } from 'loot-design/src/components/common';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { loggedIn } from 'loot-core/src/client/actions/user';
|
||||
import { createBudget } from 'loot-core/src/client/actions/budgets';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import { ConfirmPasswordForm } from './ConfirmPasswordForm';
|
||||
import { useBootstrapped, Title, Input, Link, ExternalLink } from './common';
|
||||
import { useBootstrapped, Title } from './common';
|
||||
|
||||
export default function Bootstrap() {
|
||||
let dispatch = useDispatch();
|
||||
|
|
|
@ -1,19 +1,11 @@
|
|||
import React, { useState, useCallback } from 'react';
|
||||
import React, { useState } from 'react';
|
||||
import { useDispatch } from 'react-redux';
|
||||
import { useHistory } from 'react-router-dom';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
Button,
|
||||
ButtonWithLoading
|
||||
} from 'loot-design/src/components/common';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { loggedIn } from 'loot-core/src/client/actions/user';
|
||||
import { createBudget } from 'loot-core/src/client/actions/budgets';
|
||||
import { View, Text, Button } from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import { ConfirmPasswordForm } from './ConfirmPasswordForm';
|
||||
import { useBootstrapped, Title, Input, Link, ExternalLink } from './common';
|
||||
import { Title } from './common';
|
||||
|
||||
export default function ChangePassword() {
|
||||
let dispatch = useDispatch();
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
import React, { useState } from 'react';
|
||||
import {
|
||||
View,
|
||||
Button,
|
||||
ButtonWithLoading
|
||||
} from 'loot-design/src/components/common';
|
||||
import { View, ButtonWithLoading } from 'loot-design/src/components/common';
|
||||
import { Input } from './common';
|
||||
|
||||
export function ConfirmPasswordForm({ buttons, onSetPassword, onError }) {
|
||||
|
@ -47,6 +43,7 @@ export function ConfirmPasswordForm({ buttons, onSetPassword, onError }) {
|
|||
type={showPassword ? 'text' : 'password'}
|
||||
value={password1}
|
||||
onChange={e => setPassword1(e.target.value)}
|
||||
onEnter={onSubmit}
|
||||
/>
|
||||
<Input
|
||||
placeholder="Confirm password"
|
||||
|
@ -54,6 +51,7 @@ export function ConfirmPasswordForm({ buttons, onSetPassword, onError }) {
|
|||
value={password2}
|
||||
onChange={e => setPassword2(e.target.value)}
|
||||
style={{ marginTop: 10 }}
|
||||
onEnter={onSubmit}
|
||||
/>
|
||||
|
||||
<View
|
||||
|
@ -69,10 +67,7 @@ export function ConfirmPasswordForm({ buttons, onSetPassword, onError }) {
|
|||
</label>
|
||||
<View style={{ flex: 1 }} />
|
||||
{buttons}
|
||||
<ButtonWithLoading
|
||||
primary
|
||||
loading={loading}
|
||||
>
|
||||
<ButtonWithLoading primary loading={loading}>
|
||||
OK
|
||||
</ButtonWithLoading>
|
||||
</View>
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
import React, { useState, useEffect } from 'react';
|
||||
import React from 'react';
|
||||
import { useHistory, useLocation } from 'react-router-dom';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
Button,
|
||||
ButtonWithLoading
|
||||
} from 'loot-design/src/components/common';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { View, Text, Button } from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
|
||||
function getErrorMessage(reason) {
|
||||
switch (reason) {
|
||||
|
|
|
@ -1,18 +1,17 @@
|
|||
import React, { useState, useCallback } from 'react';
|
||||
import React, { useState } from 'react';
|
||||
import { useDispatch } from 'react-redux';
|
||||
import { useHistory } from 'react-router-dom';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
Button,
|
||||
ButtonWithLoading
|
||||
} from 'loot-design/src/components/common';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { loggedIn } from 'loot-core/src/client/actions/user';
|
||||
import { createBudget } from 'loot-core/src/client/actions/budgets';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import { useBootstrapped, Title, Input, Link, ExternalLink } from './common';
|
||||
import { useBootstrapped, Title, Input } from './common';
|
||||
|
||||
export default function Login() {
|
||||
let dispatch = useDispatch();
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
import React, { useEffect, useState } from 'react';
|
||||
import { useHistory, useLocation } from 'react-router-dom';
|
||||
import {
|
||||
AnchorLink,
|
||||
Text,
|
||||
Button,
|
||||
ButtonLink,
|
||||
Input as BaseInput
|
||||
} from 'loot-design/src/components/common';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
|
|
|
@ -4,8 +4,7 @@ import {
|
|||
Text,
|
||||
Block,
|
||||
Modal,
|
||||
Button,
|
||||
Select
|
||||
Button
|
||||
} from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { NativeCategorySelect } from 'loot-design/src/components/CategorySelect';
|
||||
|
|
|
@ -2,15 +2,7 @@ import React from 'react';
|
|||
import { bindActionCreators } from 'redux';
|
||||
import { connect } from 'react-redux';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
Modal,
|
||||
Button,
|
||||
Strong,
|
||||
P
|
||||
} from 'loot-design/src/components/common';
|
||||
import { View, Text, Modal, Button } from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { authorizeBank } from '../../plaid';
|
||||
|
||||
|
|
|
@ -3,9 +3,7 @@ import { css } from 'glamor';
|
|||
import {
|
||||
View,
|
||||
Text,
|
||||
Stack,
|
||||
Modal,
|
||||
Button,
|
||||
ButtonWithLoading,
|
||||
ExternalLink,
|
||||
P,
|
||||
|
@ -14,7 +12,7 @@ import {
|
|||
InitialFocus
|
||||
} from 'loot-design/src/components/common';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { getCreateKeyError } from 'loot-core/src/shared/errors';
|
||||
|
||||
export default function CreateEncryptionKey({
|
||||
|
|
|
@ -1,28 +1,21 @@
|
|||
import React, { useState, useEffect, useRef, useCallback } from 'react';
|
||||
import { bindActionCreators } from 'redux';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import {
|
||||
initiallyLoadPayees,
|
||||
setUndoEnabled
|
||||
} from 'loot-core/src/client/actions/queries';
|
||||
import * as undo from 'loot-core/src/platform/client/undo';
|
||||
import q, { runQuery } from 'loot-core/src/client/query-helpers';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
Modal,
|
||||
Button,
|
||||
Select,
|
||||
Stack,
|
||||
Input,
|
||||
CustomSelect,
|
||||
Tooltip
|
||||
} from 'loot-design/src/components/common';
|
||||
import GenericInput from '../util/GenericInput';
|
||||
import { keys } from 'loot-design/src/util/keys';
|
||||
import { send, listen, unlisten } from 'loot-core/src/platform/client/fetch';
|
||||
import { getStatus } from 'loot-core/src/shared/schedules';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import SubtractIcon from 'loot-design/src/svg/Subtract';
|
||||
import AddIcon from 'loot-design/src/svg/Add';
|
||||
import InformationOutline from 'loot-design/src/svg/v1/InformationOutline';
|
||||
|
@ -39,9 +32,6 @@ import {
|
|||
import useSelected, {
|
||||
SelectedProvider
|
||||
} from 'loot-design/src/components/useSelected';
|
||||
import SimpleTransactionsTable from '../accounts/SimpleTransactionsTable';
|
||||
import { StatusBadge } from '../schedules/StatusBadge';
|
||||
import DisplayId from '../util/DisplayId';
|
||||
import { useSchedules } from 'loot-core/src/client/data-hooks/schedules';
|
||||
import {
|
||||
integerToCurrency,
|
||||
|
@ -49,6 +39,10 @@ import {
|
|||
amountToInteger
|
||||
} from 'loot-core/src/shared/util';
|
||||
import * as monthUtils from 'loot-core/src/shared/months';
|
||||
import SimpleTransactionsTable from '../accounts/SimpleTransactionsTable';
|
||||
import { StatusBadge } from '../schedules/StatusBadge';
|
||||
import DisplayId from '../util/DisplayId';
|
||||
import GenericInput from '../util/GenericInput';
|
||||
import { BetweenAmountInput } from '../util/AmountInput';
|
||||
|
||||
function updateValue(array, value, update) {
|
||||
|
|
|
@ -12,7 +12,7 @@ import {
|
|||
ExternalLink
|
||||
} from 'loot-design/src/components/common';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { getTestKeyError } from 'loot-core/src/shared/errors';
|
||||
|
||||
export default function FixEncryptionKey({
|
||||
|
|
|
@ -1,16 +1,8 @@
|
|||
import React, {
|
||||
useState,
|
||||
useEffect,
|
||||
useRef,
|
||||
useCallback,
|
||||
useMemo,
|
||||
useImperativeHandle
|
||||
} from 'react';
|
||||
import React, { useState, useEffect, useRef, useCallback } from 'react';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { css } from 'glamor';
|
||||
import { format as formatDate, parseISO } from 'date-fns';
|
||||
import * as undo from 'loot-core/src/platform/client/undo';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import { initiallyLoadPayees } from 'loot-core/src/client/actions/queries';
|
||||
import q from 'loot-core/src/client/query-helpers';
|
||||
import { liveQueryContext } from 'loot-core/src/client/query-hooks';
|
||||
|
@ -37,14 +29,12 @@ import useSelected, {
|
|||
SelectedProvider
|
||||
} from 'loot-design/src/components/useSelected';
|
||||
import { integerToCurrency } from 'loot-core/src/shared/util';
|
||||
import { send, listen, unlisten } from 'loot-core/src/platform/client/fetch';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import { pushModal } from 'loot-core/src/client/actions/modals';
|
||||
import { mapField, friendlyOp } from 'loot-core/src/shared/rules';
|
||||
import ArrowRight from 'loot-design/src/svg/RightArrow2';
|
||||
import InformationOutline from 'loot-design/src/svg/v1/InformationOutline';
|
||||
import ExpandArrow from 'loot-design/src/svg/ExpandArrow';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { dayFromDate, getMonthYearFormat } from 'loot-core/src/shared/months';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { getMonthYearFormat } from 'loot-core/src/shared/months';
|
||||
import {
|
||||
extractScheduleConds,
|
||||
getRecurringDescription
|
||||
|
|
|
@ -6,11 +6,10 @@ import {
|
|||
Modal,
|
||||
ModalButtons,
|
||||
Button,
|
||||
P,
|
||||
Stack
|
||||
P
|
||||
} from 'loot-design/src/components/common';
|
||||
import { Information } from 'loot-design/src/components/alerts';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import { replaceModal } from 'loot-core/src/client/actions/modals';
|
||||
|
||||
|
|
|
@ -3,9 +3,7 @@ import { connect } from 'react-redux';
|
|||
import * as actions from 'loot-core/src/client/actions';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
Modal,
|
||||
Button,
|
||||
P,
|
||||
ExternalLink
|
||||
} from 'loot-design/src/components/common';
|
||||
|
@ -70,7 +68,4 @@ function WelcomeScreen({ modalProps, actions }) {
|
|||
);
|
||||
}
|
||||
|
||||
export default connect(
|
||||
null,
|
||||
actions
|
||||
)(WelcomeScreen);
|
||||
export default connect(null, actions)(WelcomeScreen);
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
import React, { useState, useEffect, useRef } from 'react';
|
||||
import { bindActionCreators } from 'redux';
|
||||
import { connect } from 'react-redux';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import * as undo from 'loot-core/src/platform/client/undo';
|
||||
import uuid from 'loot-core/src/platform/uuid';
|
||||
import { send, listen, unlisten } from 'loot-core/src/platform/client/fetch';
|
||||
import { send, listen } from 'loot-core/src/platform/client/fetch';
|
||||
import { ManagePayees } from 'loot-design/src/components/payees';
|
||||
import { applyChanges } from 'loot-core/src/shared/util';
|
||||
|
||||
|
|
|
@ -11,14 +11,13 @@ import { styles } from 'loot-design/src/style';
|
|||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import * as monthUtils from 'loot-core/src/shared/months';
|
||||
import { integerToCurrency } from 'loot-core/src/shared/util';
|
||||
import { fromDateRepr } from './util';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import Header from './Header';
|
||||
import Change from './Change';
|
||||
import CashFlowGraph from './graphs/CashFlowGraph';
|
||||
import { cashFlowByDate } from './graphs/cash-flow-spreadsheet';
|
||||
import useReport from './useReport';
|
||||
import { useArgsMemo } from './util';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
|
||||
function CashFlow() {
|
||||
const [earliestMonth, setEarliestMonth] = useState(null);
|
||||
|
|
|
@ -2,7 +2,7 @@ import React from 'react';
|
|||
import { styles } from 'loot-design/src/style';
|
||||
import { integerToCurrency } from 'loot-core/src/shared/util';
|
||||
import { Block } from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style'
|
||||
import { colors } from 'loot-design/src/style';
|
||||
|
||||
function Change({ amount, style }) {
|
||||
return (
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
import React from 'react';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { styles } from 'loot-design/src/style';
|
||||
import {
|
||||
View,
|
||||
Select,
|
||||
Link,
|
||||
Button,
|
||||
ButtonLink
|
||||
} from 'loot-design/src/components/common';
|
||||
|
|
|
@ -110,7 +110,10 @@ function CashFlowCard() {
|
|||
const end = monthUtils.currentDay();
|
||||
const start = monthUtils.currentMonth() + '-01';
|
||||
|
||||
const data = useReport('cash_flow_simple', useArgsMemo(simpleCashFlow)(start, end));
|
||||
const data = useReport(
|
||||
'cash_flow_simple',
|
||||
useArgsMemo(simpleCashFlow)(start, end)
|
||||
);
|
||||
if (!data) {
|
||||
return null;
|
||||
}
|
||||
|
@ -218,9 +221,9 @@ function CashFlowCard() {
|
|||
function Overview({ accounts }) {
|
||||
return (
|
||||
<View
|
||||
style={[
|
||||
styles.page,
|
||||
{ paddingLeft: 40, paddingRight: 40, minWidth: 700 }
|
||||
style={[
|
||||
styles.page,
|
||||
{ paddingLeft: 40, paddingRight: 40, minWidth: 700 }
|
||||
]}
|
||||
>
|
||||
<View
|
||||
|
|
|
@ -8,10 +8,10 @@ import {
|
|||
VictoryGroup
|
||||
} from 'victory';
|
||||
import * as d from 'date-fns';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import Container from '../Container';
|
||||
import Tooltip from '../Tooltip';
|
||||
import theme from '../chart-theme';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
|
||||
function CashFlowGraph({ style, start, end, graphData, isConcise, compact }) {
|
||||
return (
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import React from 'react';
|
||||
import { mergeObjects, flattenArray } from 'loot-core/src/shared/util';
|
||||
import * as monthUtils from 'loot-core/src/shared/months';
|
||||
import * as d from 'date-fns';
|
||||
import { AlignedText } from 'loot-design/src/components/common';
|
||||
|
@ -9,7 +8,7 @@ import {
|
|||
integerToAmount,
|
||||
amountToInteger
|
||||
} from 'loot-core/src/shared/util';
|
||||
import { fromDateRepr, runAll, index } from '../util';
|
||||
import { index } from '../util';
|
||||
|
||||
export default function createSpreadsheet(start, end, accounts) {
|
||||
return async (spreadsheet, setData) => {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { useMemo } from 'react';
|
||||
import q, { runQuery } from 'loot-core/src/client/query-helpers';
|
||||
import { runQuery } from 'loot-core/src/client/query-helpers';
|
||||
|
||||
export function useArgsMemo(func) {
|
||||
return (...args) => {
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
import React, { useCallback, useState, useEffect } from 'react';
|
||||
import { useSelector } from 'react-redux';
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import { useLocation, useHistory } from 'react-router-dom';
|
||||
import q, { runQuery } from 'loot-core/src/client/query-helpers';
|
||||
import Platform from 'loot-core/src/client/platform';
|
||||
import { useSchedules } from 'loot-core/src/client/data-hooks/schedules';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
Stack,
|
||||
Button,
|
||||
ButtonWithLoading,
|
||||
|
@ -18,19 +15,18 @@ import {
|
|||
TableHeader,
|
||||
Row,
|
||||
Field,
|
||||
Cell,
|
||||
SelectCell
|
||||
} from 'loot-design/src/components/table';
|
||||
import { getRecurringDescription } from 'loot-core/src/shared/schedules';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import useSelected, {
|
||||
useSelectedDispatch,
|
||||
useSelectedItems,
|
||||
SelectedProvider
|
||||
} from 'loot-design/src/components/useSelected';
|
||||
import { Page } from '../Page';
|
||||
import { ScheduleAmountCell } from './SchedulesTable';
|
||||
import DisplayId from '../util/DisplayId';
|
||||
import { ScheduleAmountCell } from './SchedulesTable';
|
||||
|
||||
let ROW_HEIGHT = 43;
|
||||
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import React, { useEffect, useState, useReducer } from 'react';
|
||||
import React, { useEffect, useReducer } from 'react';
|
||||
import { useParams, useHistory } from 'react-router-dom';
|
||||
import { useDispatch, useSelector } from 'react-redux';
|
||||
import { pushModal } from 'loot-core/src/client/actions/modals';
|
||||
import { css } from 'glamor';
|
||||
import { send, sendCatch } from 'loot-core/src/platform/client/fetch';
|
||||
import q, { runQuery, liveQuery } from 'loot-core/src/client/query-helpers';
|
||||
import { extractScheduleConds } from 'loot-core/src/shared/schedules';
|
||||
|
@ -13,31 +12,21 @@ import {
|
|||
FormLabel,
|
||||
Checkbox
|
||||
} from 'loot-design/src/components/forms';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import PayeeAutocomplete from 'loot-design/src/components/PayeeAutocomplete';
|
||||
import AccountAutocomplete from 'loot-design/src/components/AccountAutocomplete';
|
||||
import {
|
||||
Stack,
|
||||
Input,
|
||||
InputWithContent,
|
||||
View,
|
||||
Text,
|
||||
Button,
|
||||
ModalButtons
|
||||
} from 'loot-design/src/components/common';
|
||||
import { Stack, View, Text, Button } from 'loot-design/src/components/common';
|
||||
import DateSelect from 'loot-design/src/components/DateSelect';
|
||||
import { SelectedItemsButton } from 'loot-design/src/components/table';
|
||||
import SimpleTransactionsTable from '../accounts/SimpleTransactionsTable';
|
||||
import { usePageType } from '../Page';
|
||||
import { Page } from '../Page';
|
||||
import useSelected, {
|
||||
SelectedProvider
|
||||
} from 'loot-design/src/components/useSelected';
|
||||
import RecurringSchedulePicker from 'loot-design/src/components/RecurringSchedulePicker';
|
||||
import SimpleTransactionsTable from '../accounts/SimpleTransactionsTable';
|
||||
import { usePageType } from '../Page';
|
||||
import { Page } from '../Page';
|
||||
import { OpSelect } from '../modals/EditRule';
|
||||
import { AmountInput, BetweenAmountInput } from '../util/AmountInput';
|
||||
import { SchedulesProviderRaw } from 'loot-core/src/client/data-hooks/schedules';
|
||||
|
||||
import RecurringSchedulePicker from 'loot-design/src/components/RecurringSchedulePicker';
|
||||
|
||||
function mergeFields(defaults, initial) {
|
||||
let res = { ...defaults };
|
||||
|
|
|
@ -3,7 +3,7 @@ import { useSelector } from 'react-redux';
|
|||
import { useLocation, useHistory } from 'react-router-dom';
|
||||
import { useSchedules } from 'loot-core/src/client/data-hooks/schedules';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import { View, Text } from 'loot-design/src/components/common';
|
||||
import { Text } from 'loot-design/src/components/common';
|
||||
import { Page } from '../Page';
|
||||
import { SchedulesTable } from './SchedulesTable';
|
||||
|
||||
|
|
|
@ -1,19 +1,10 @@
|
|||
import React from 'react';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { useLocation, useHistory } from 'react-router-dom';
|
||||
import { useSchedules } from 'loot-core/src/client/data-hooks/schedules';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
P,
|
||||
Button,
|
||||
Stack
|
||||
} from 'loot-design/src/components/common';
|
||||
import { Text, P, Button, Stack } from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { Page } from '../Page';
|
||||
import { SchedulesTable } from './SchedulesTable';
|
||||
import DisplayId from '../util/DisplayId';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
|
||||
export default function PostsOfflineNotification() {
|
||||
let location = useLocation();
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React, { useState, useMemo } from 'react';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { integerToCurrency } from 'loot-core/src/shared/util';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
|
@ -14,8 +14,7 @@ import {
|
|||
TableHeader,
|
||||
Row,
|
||||
Field,
|
||||
Cell,
|
||||
SelectCell
|
||||
Cell
|
||||
} from 'loot-design/src/components/table';
|
||||
import * as monthUtils from 'loot-core/src/shared/months';
|
||||
import { getScheduledAmount } from 'loot-core/src/shared/schedules';
|
||||
|
|
|
@ -1,16 +1,9 @@
|
|||
import React, { useMemo, useEffect, useState } from 'react';
|
||||
import React from 'react';
|
||||
import { useHistory } from 'react-router-dom';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
Button,
|
||||
Tooltip,
|
||||
Menu
|
||||
} from 'loot-design/src/components/common';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { View, Button } from 'loot-design/src/components/common';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import { Page } from '../Page';
|
||||
import { useSchedules } from 'loot-core/src/client/data-hooks/schedules';
|
||||
import { Page } from '../Page';
|
||||
import { SchedulesTable, ROW_HEIGHT } from './SchedulesTable';
|
||||
|
||||
export default function Schedules() {
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
import React, { useCallback, useState, useEffect } from 'react';
|
||||
import React, { useState } from 'react';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import {
|
||||
View,
|
||||
Text,
|
||||
P,
|
||||
ButtonWithLoading
|
||||
} from 'loot-design/src/components/common';
|
||||
import { View, P, ButtonWithLoading } from 'loot-design/src/components/common';
|
||||
import { Page } from '../Page';
|
||||
|
||||
function renderResults(results) {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React from 'react';
|
||||
import { Tooltip, Pointer, P } from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import Navigation from './Navigation';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { Title } from './common';
|
||||
|
||||
function BudgetInitial({ targetRect, navigationProps }) {
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import React, { useState } from 'react';
|
||||
import React from 'react';
|
||||
import { bindActionCreators } from 'redux';
|
||||
import { connect } from 'react-redux';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import { View, P, Button } from 'loot-design/src/components/common';
|
||||
import { P, Button } from 'loot-design/src/components/common';
|
||||
import { Title, Standalone, useMinimized } from './common';
|
||||
import Navigation from './Navigation';
|
||||
|
||||
|
@ -15,9 +15,9 @@ function BudgetInitial({ accounts, navigationProps }) {
|
|||
{!minimized && (
|
||||
<React.Fragment>
|
||||
<P>
|
||||
You should see all of your current accounts' balance available
|
||||
to budget. Click on the budgeted column for a category create a
|
||||
budget. Keep doing this until your "To Budget" amount is zero.
|
||||
You should see all of your current accounts' balance available to
|
||||
budget. Click on the budgeted column for a category create a budget.
|
||||
Keep doing this until your "To Budget" amount is zero.
|
||||
</P>
|
||||
<P>
|
||||
Don't worry too much about your initial budget. Just guess. You'll
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React from 'react';
|
||||
import { Tooltip, Pointer, P } from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import Navigation from './Navigation';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { Title } from './common';
|
||||
|
||||
function BudgetSummary({ targetRect, navigationProps }) {
|
||||
|
|
|
@ -2,15 +2,8 @@ import React from 'react';
|
|||
import { bindActionCreators } from 'redux';
|
||||
import { connect } from 'react-redux';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import {
|
||||
View,
|
||||
Tooltip,
|
||||
Pointer,
|
||||
P,
|
||||
Button
|
||||
} from 'loot-design/src/components/common';
|
||||
import { View, P, Button } from 'loot-design/src/components/common';
|
||||
import Navigation from './Navigation';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { Standalone, Title, useMinimized } from './common';
|
||||
|
||||
function BudgetNextMonth({ stepTwo, navigationProps }) {
|
||||
|
@ -61,7 +54,6 @@ function BudgetNextMonth({ stepTwo, navigationProps }) {
|
|||
);
|
||||
}
|
||||
|
||||
export default connect(
|
||||
null,
|
||||
dispatch => bindActionCreators(actions, dispatch)
|
||||
)(BudgetNextMonth);
|
||||
export default connect(null, dispatch => bindActionCreators(actions, dispatch))(
|
||||
BudgetNextMonth
|
||||
);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React from 'react';
|
||||
import { Tooltip, Pointer, P } from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import Navigation from './Navigation';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { Title } from './common';
|
||||
|
||||
function BudgetSummary({ fromYNAB, targetRect, navigationProps }) {
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
import React, { useState } from 'react';
|
||||
import { Tooltip, Pointer, P, Button } from 'loot-design/src/components/common';
|
||||
import React from 'react';
|
||||
import { P, Button } from 'loot-design/src/components/common';
|
||||
import Navigation from './Navigation';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { Standalone, Title, useMinimized } from './common';
|
||||
|
||||
function CategoryBalance({ targetRect, navigationProps }) {
|
||||
let [minimized, toggle] = useMinimized()
|
||||
let [minimized, toggle] = useMinimized();
|
||||
|
||||
return (
|
||||
<Standalone>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import React from 'react';
|
||||
import { P } from 'loot-design/src/components/common';
|
||||
import Navigation from './Navigation';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { Standalone, Title } from './common';
|
||||
|
||||
function DeleteTransactions({ targetRect, navigationProps }) {
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
import React from 'react';
|
||||
import { P, ModalButtons, Button } from 'loot-design/src/components/common';
|
||||
import Navigation from './Navigation';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { Standalone, Title, ExternalLink } from './common';
|
||||
|
||||
function Final({ targetRect, navigationProps }) {
|
||||
|
|
|
@ -2,12 +2,10 @@ import React from 'react';
|
|||
import {
|
||||
View,
|
||||
Text,
|
||||
Block,
|
||||
P,
|
||||
ModalButtons,
|
||||
Button
|
||||
} from 'loot-design/src/components/common';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { Standalone, Title, ExternalLink } from './common';
|
||||
|
||||
function Intro({ fromYNAB, nextTutorialStage, closeTutorial }) {
|
||||
|
|
|
@ -2,21 +2,12 @@ import React from 'react';
|
|||
import { bindActionCreators } from 'redux';
|
||||
import { connect } from 'react-redux';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import * as spreadsheet from 'loot-core/src/client/sheetql/spreadsheet';
|
||||
import SheetValue from 'loot-design/src/components/spreadsheet/SheetValue';
|
||||
import NamespaceContext from 'loot-design/src/components/spreadsheet/NamespaceContext';
|
||||
import {
|
||||
Tooltip,
|
||||
Pointer,
|
||||
P,
|
||||
View,
|
||||
Text,
|
||||
Button
|
||||
} from 'loot-design/src/components/common';
|
||||
import { P, View, Text, Button } from 'loot-design/src/components/common';
|
||||
import * as monthUtils from 'loot-core/src/shared/months';
|
||||
import { integerToCurrency } from 'loot-core/src/shared/util';
|
||||
import Navigation from './Navigation';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import { Standalone, Title, useMinimized } from './common';
|
||||
|
||||
function Overspending({ navigationProps, stepTwo }) {
|
||||
|
@ -96,7 +87,6 @@ function Overspending({ navigationProps, stepTwo }) {
|
|||
);
|
||||
}
|
||||
|
||||
export default connect(
|
||||
null,
|
||||
dispatch => bindActionCreators(actions, dispatch)
|
||||
)(Overspending);
|
||||
export default connect(null, dispatch => bindActionCreators(actions, dispatch))(
|
||||
Overspending
|
||||
);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React from 'react';
|
||||
import { Tooltip, Pointer, P } from 'loot-design/src/components/common';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import Navigation from './Navigation';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { Title } from './common';
|
||||
|
||||
function TransactionAdd({ targetRect, navigationProps }) {
|
||||
|
@ -33,8 +33,8 @@ function TransactionAdd({ targetRect, navigationProps }) {
|
|||
</P>
|
||||
|
||||
<P isLast={true}>
|
||||
Try <strong>clicking "Add New"</strong> to see how adding
|
||||
transactions affects your budget.
|
||||
Try <strong>clicking "Add New"</strong> to see how adding transactions
|
||||
affects your budget.
|
||||
</P>
|
||||
|
||||
<Navigation {...navigationProps} showBack={false} />
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
import React from 'react';
|
||||
import { View, Tooltip, Pointer, P } from 'loot-design/src/components/common';
|
||||
import Navigation from './Navigation';
|
||||
import { styles, colors } from 'loot-design/src/style';
|
||||
import { P } from 'loot-design/src/components/common';
|
||||
import * as monthUtils from 'loot-core/src/shared/months';
|
||||
import Navigation from './Navigation';
|
||||
import { Standalone, Title } from './common';
|
||||
|
||||
function TransactionEnter({ fromYNAB, navigationProps }) {
|
||||
|
|
|
@ -2,8 +2,7 @@ import React from 'react';
|
|||
import { P } from 'loot-design/src/components/common';
|
||||
import { css } from 'glamor';
|
||||
import Navigation from './Navigation';
|
||||
import * as monthUtils from 'loot-core/src/shared/months';
|
||||
import {Standalone} from './common';
|
||||
import { Standalone } from './common';
|
||||
|
||||
function TransactionFinalize({ navigationProps }) {
|
||||
return (
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import React, { useState } from 'react';
|
||||
import { View, AnchorLink } from 'loot-design/src/components/common';
|
||||
import AnimateIn from './AnimateIn';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
import AnimateIn from './AnimateIn';
|
||||
|
||||
export function Title({ children }) {
|
||||
return (
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
import React, { useMemo, useEffect, useState } from 'react';
|
||||
import React from 'react';
|
||||
import { CachedPayees } from 'loot-core/src/client/data-hooks/payees';
|
||||
import { CachedAccounts } from 'loot-core/src/client/data-hooks/accounts';
|
||||
import { getPayeesById } from 'loot-core/src/client/reducers/queries';
|
||||
import { groupById } from 'loot-core/src/shared/util';
|
||||
import { Text } from 'loot-design/src/components/common';
|
||||
import { colors, styles } from 'loot-design/src/style';
|
||||
import { colors } from 'loot-design/src/style';
|
||||
|
||||
export default function DisplayId({ type, id, noneColor = colors.n8 }) {
|
||||
let DataComponent;
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import React from 'react';
|
||||
import { useSelector } from 'react-redux';
|
||||
import { format as formatDate, parse as parseDate, parseISO } from 'date-fns';
|
||||
import { dayFromDate, getMonthYearFormat } from 'loot-core/src/shared/months';
|
||||
import { getMonthYearFormat } from 'loot-core/src/shared/months';
|
||||
import { View, Input } from 'loot-design/src/components/common';
|
||||
import PayeeAutocomplete from 'loot-design/src/components/PayeeAutocomplete';
|
||||
import AccountAutocomplete from 'loot-design/src/components/AccountAutocomplete';
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import React, { useState, useEffect } from 'react';
|
||||
import { useState, useEffect } from 'react';
|
||||
import { send } from 'loot-core/src/platform/client/fetch';
|
||||
|
||||
function useServerVersion() {
|
||||
|
|
|
@ -7,7 +7,6 @@ import '@reach/listbox/styles.css';
|
|||
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import App from './components/App';
|
||||
import {
|
||||
createStore,
|
||||
combineReducers,
|
||||
|
@ -21,8 +20,9 @@ import { send } from 'loot-core/src/platform/client/fetch';
|
|||
import q, { runQuery } from 'loot-core/src/client/query-helpers';
|
||||
import * as actions from 'loot-core/src/client/actions';
|
||||
import thunk from 'redux-thunk';
|
||||
import { handleGlobalEvents } from './global-events';
|
||||
import { initialState as initialAppState } from 'loot-core/src/client/reducers/app';
|
||||
import { handleGlobalEvents } from './global-events';
|
||||
import App from './components/App';
|
||||
|
||||
// See https://github.com/WICG/focus-visible. Only makes the blue
|
||||
// focus outline appear from keyboard events.
|
||||
|
|
|
@ -2,8 +2,8 @@ const d = require('date-fns');
|
|||
const normalizePathSep = require('slash');
|
||||
const uuid = require('uuid');
|
||||
const AdmZip = require('adm-zip');
|
||||
const actual = require('@actual-app/api/methods');
|
||||
const { amountToInteger } = require('@actual-app/api/utils');
|
||||
const actual = require('@actual-app/api');
|
||||
const amountToInteger = actual.utils.amountToInteger;
|
||||
|
||||
// Utils
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
const d = require('date-fns');
|
||||
const uuid = require('uuid');
|
||||
const actual = require('@actual-app/api/methods');
|
||||
const { amountToInteger } = require('@actual-app/api/utils');
|
||||
const actual = require('@actual-app/api');
|
||||
|
||||
function amountFromYnab(amount) {
|
||||
// ynabs multiplies amount by 1000 and actual by 100
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue