Skip to content
This repository was archived by the owner on Dec 26, 2022. It is now read-only.

Commit e71929c

Browse files
authored
Merge pull request #3 from Yadro/features-v1.0.1
Features v1.0.1
2 parents a924516 + 3b9adf8 commit e71929c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1766
-3086
lines changed

.env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
SENTRY_DSN='https://XXXX.ingest.sentry.io/00000000'

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,5 @@ npm-debug.log.*
4848
*.css.d.ts
4949
*.sass.d.ts
5050
*.scss.d.ts
51+
52+
.env

assets/icon.ico

-351 KB
Binary file not shown.

assets/icon.png

100755100644
-20.5 KB
Loading

package.json

Lines changed: 7 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,11 @@
99
"build:renderer": "cross-env NODE_ENV=production webpack --config ./.erb/configs/webpack.config.renderer.prod.babel.js",
1010
"rebuild": "electron-rebuild --parallel --types prod,dev,optional --module-dir src",
1111
"lint": "cross-env NODE_ENV=development eslint . --cache --ext .js,.jsx,.ts,.tsx",
12-
"package": "ECHO 'Backup profile before install' && electron-builder build --publish never",
12+
"package": "npm run build && electron-builder build --publish never",
1313
"postinstall": "node -r @babel/register .erb/scripts/CheckNativeDep.js && electron-builder install-app-deps && yarn cross-env NODE_ENV=development webpack --config ./.erb/configs/webpack.config.renderer.dev.dll.babel.js && opencollective-postinstall && yarn-deduplicate yarn.lock",
1414
"start": "node -r @babel/register ./.erb/scripts/CheckPortInUse.js && cross-env yarn start:renderer",
1515
"start:main": "cross-env NODE_ENV=development electron -r ./.erb/scripts/BabelRegister ./src/main.dev.ts",
16-
"start:renderer": "cross-env NODE_ENV=development webpack serve --config ./.erb/configs/webpack.config.renderer.dev.babel.js",
17-
"test": "jest"
16+
"start:renderer": "cross-env NODE_ENV=development webpack serve --config ./.erb/configs/webpack.config.renderer.dev.babel.js"
1817
},
1918
"lint-staged": {
2019
"*.{js,jsx,ts,tsx}": [
@@ -112,27 +111,6 @@
112111
"hot",
113112
"reload"
114113
],
115-
"jest": {
116-
"testURL": "http://localhost/",
117-
"moduleNameMapper": {
118-
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/.erb/mocks/fileMock.js",
119-
"\\.(css|less|sass|scss)$": "identity-obj-proxy"
120-
},
121-
"moduleFileExtensions": [
122-
"js",
123-
"jsx",
124-
"ts",
125-
"tsx",
126-
"json"
127-
],
128-
"moduleDirectories": [
129-
"node_modules",
130-
"src/node_modules"
131-
],
132-
"setupFiles": [
133-
"./.erb/scripts/CheckBuildsExist.js"
134-
]
135-
},
136114
"devDependencies": {
137115
"@babel/core": "^7.12.9",
138116
"@babel/plugin-proposal-class-properties": "^7.12.1",
@@ -159,22 +137,15 @@
159137
"@babel/register": "^7.12.1",
160138
"@pmmmwh/react-refresh-webpack-plugin": "^0.4.3",
161139
"@teamsupercell/typings-for-css-modules-loader": "^2.4.0",
162-
"@testing-library/jest-dom": "^5.11.6",
163-
"@testing-library/react": "^11.2.2",
164-
"@types/enzyme": "^3.10.5",
165-
"@types/enzyme-adapter-react-16": "^1.0.6",
166140
"@types/history": "4.7.6",
167-
"@types/jest": "^26.0.15",
168141
"@types/node": "14.14.10",
169142
"@types/react": "^16.9.44",
170143
"@types/react-dom": "^16.9.9",
171144
"@types/react-router-dom": "^5.1.6",
172-
"@types/react-test-renderer": "^16.9.3",
173145
"@types/webpack-env": "^1.15.2",
174146
"@typescript-eslint/eslint-plugin": "^4.8.1",
175147
"@typescript-eslint/parser": "^4.8.1",
176148
"babel-eslint": "^10.1.0",
177-
"babel-jest": "^26.1.0",
178149
"babel-loader": "^8.2.2",
179150
"babel-plugin-dev-expression": "^0.2.2",
180151
"babel-plugin-transform-react-remove-prop-types": "^0.4.24",
@@ -184,16 +155,13 @@
184155
"core-js": "^3.6.5",
185156
"cross-env": "^7.0.2",
186157
"css-loader": "^5.0.1",
187-
"css-minimizer-webpack-plugin": "^1.1.5",
158+
"css-minimizer-webpack-plugin": "^2.0.0",
188159
"detect-port": "^1.3.0",
189160
"electron": "^12.0.2",
190-
"electron-builder": "^22.3.6",
161+
"electron-builder": "^22.11.1",
191162
"electron-devtools-installer": "git+https://github.com/MarshallOfSound/electron-devtools-installer.git",
192163
"electron-notarize": "^1.0.0",
193164
"electron-rebuild": "^2.3.2",
194-
"enzyme": "^3.11.0",
195-
"enzyme-adapter-react-16": "^1.15.3",
196-
"enzyme-to-json": "^3.5.0",
197165
"eslint": "^7.5.0",
198166
"eslint-config-airbnb": "^18.2.0",
199167
"eslint-config-airbnb-typescript": "^12.0.0",
@@ -202,23 +170,19 @@
202170
"eslint-import-resolver-webpack": "^0.13.0",
203171
"eslint-plugin-compat": "^3.8.0",
204172
"eslint-plugin-import": "^2.22.0",
205-
"eslint-plugin-jest": "^24.1.3",
206173
"eslint-plugin-jsx-a11y": "6.4.1",
207174
"eslint-plugin-prettier": "^3.1.4",
208175
"eslint-plugin-promise": "^4.2.1",
209176
"eslint-plugin-react": "^7.20.6",
210177
"eslint-plugin-react-hooks": "^4.0.8",
211178
"file-loader": "^6.0.0",
212179
"husky": "^4.2.5",
213-
"identity-obj-proxy": "^3.0.0",
214-
"jest": "^26.1.0",
215180
"lint-staged": "^10.2.11",
216181
"mini-css-extract-plugin": "^1.3.1",
217182
"node-sass": "^5.0.0",
218183
"opencollective-postinstall": "^2.0.3",
219184
"prettier": "^2.0.5",
220185
"react-refresh": "^0.9.0",
221-
"react-test-renderer": "^17.0.1",
222186
"rimraf": "^3.0.0",
223187
"sass-loader": "^10.1.0",
224188
"style-loader": "^2.0.0",
@@ -235,17 +199,20 @@
235199
"dependencies": {
236200
"@ant-design/colors": "6.0.0",
237201
"@ant-design/icons": "4.6.2",
202+
"@sentry/electron": "2.5.0",
238203
"antd": "4.15.0",
239204
"caniuse-lite": "1.0.30001214",
240205
"clsx": "^1.1.1",
241206
"date-fns": "2.20.1",
207+
"dotenv": "10.0.0",
242208
"electron-debug": "^3.1.0",
243209
"electron-log": "^4.2.4",
244210
"electron-updater": "^4.3.4",
245211
"electron-windows-badge": "1.1.0",
246212
"history": "^5.0.0",
247213
"less": "4.1.1",
248214
"less-loader": "8.0.0",
215+
"material-icons": "0.7.4",
249216
"mobx": "6.1.8",
250217
"mobx-react": "7.1.0",
251218
"moment": "2.29.1",

src/App.global.less

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
@font-face {
2+
font-family: "Material Icons";
3+
src: url("~material-icons/iconfont/material-icons.woff2") format("woff2"),
4+
url("~material-icons/iconfont/material-icons.woff2") format("woff");
5+
}
6+
7+
@import '~material-icons/css/material-icons.min.css';
8+
19
#root {
210
display: flex;
311
flex: 1;

src/base/TreeModelStoreHelper.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,17 @@ export default abstract class TreeModelStoreHelper {
2020
}
2121

2222
static getFlatItemsRecursive<T extends ITreeItem<any>>(
23+
tree: T[],
24+
condition: (task: T) => boolean
25+
): T[] {
26+
const result: T[] = [];
27+
28+
this.getFlatItemsRecursiveBase(tree, condition, result);
29+
30+
return result;
31+
}
32+
33+
static getFlatItemsRecursiveBase<T extends ITreeItem<any>>(
2334
tasks: T[],
2435
condition: (task: T) => boolean,
2536
result: T[]
@@ -29,7 +40,7 @@ export default abstract class TreeModelStoreHelper {
2940
result.push(task);
3041
}
3142
if (Array.isArray(task.children)) {
32-
this.getFlatItemsRecursive(task.children, condition, result);
43+
this.getFlatItemsRecursiveBase(task.children, condition, result);
3344
}
3445
}
3546
return result;
Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
const fs = require('fs');
22
const path = require('path');
33

4+
import FsHelper from '../../helpers/FsHelper';
5+
46
const APP_FOLDER = 'YadroTimeTracker';
57
const PROFILE_FOLDER = 'profile1';
68

@@ -16,7 +18,7 @@ export default abstract class AbstractFileRepository<T = any> {
1618
return path.join(
1719
AbstractFileRepository.appDataFolder,
1820
APP_FOLDER,
19-
PROFILE_FOLDER
21+
PROFILE_FOLDER,
2022
);
2123
}
2224

@@ -27,22 +29,14 @@ export default abstract class AbstractFileRepository<T = any> {
2729
public restore(defaultValue: T): T {
2830
if (fs.existsSync(this.filePath)) {
2931
const data = fs.readFileSync(this.filePath);
32+
// TODO handle parse error. Backup file with issues and return defaultValue
3033
return JSON.parse(data);
3134
}
3235
return defaultValue;
3336
}
3437

3538
public save(data: T) {
36-
[
37-
path.join(AbstractFileRepository.appDataFolder, APP_FOLDER),
38-
AbstractFileRepository.profileFolder,
39-
].forEach((p) => AbstractFileRepository.createFolderIfNotExists(p));
40-
fs.writeFileSync(this.filePath, JSON.stringify(data), 'utf-8');
41-
}
42-
43-
private static createFolderIfNotExists(path: string) {
44-
if (!fs.existsSync(path)) {
45-
fs.mkdirSync(path);
46-
}
39+
FsHelper.mkdirIfNotExists(AbstractFileRepository.profileFolder);
40+
return FsHelper.writeFile(this.filePath, data);
4741
}
4842
}

src/components/PlayStopButton/PlayStopButton.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import clsx from 'clsx';
55
import { createUseStyles } from 'react-jss';
66

77
import CircleButton from '../CircleButton/CircleButton';
8-
import rootStore from '../../services/RootStore';
8+
import rootStore from '../../modules/RootStore';
99
import TaskModel from '../../models/TaskModel';
1010

1111
const { tasksStore } = rootStore;
File renamed without changes.

0 commit comments

Comments
 (0)