@tasenor/common-plugins 1.12.0 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-audit.log +24 -0
- package/.turbo/turbo-build.log +1 -1
- package/.turbo/turbo-ci.log +2 -2
- package/.turbo/turbo-fix.log +3 -3
- package/.turbo/turbo-lint.log +1 -14
- package/.turbo/turbo-nightly.log +3 -3
- package/.turbo/turbo-nightly3.log +24 -24
- package/.turbo/turbo-show-version.log +6 -5
- package/data/PluginIndex.mjs +3 -0
- package/data/src/Expense Tree - Definitions.tsv +10 -1
- package/dist/AssetReport/backend/index.js +1 -1
- package/dist/CoinbaseImport/backend/CoinbaseHandler.d.ts +1 -0
- package/dist/CoinbaseImport/backend/CoinbaseHandler.js +35 -9
- package/dist/CoinbaseImport/backend/CoinbaseHandler.js.map +1 -1
- package/dist/CoinbaseImport/backend/index.js +1 -1
- package/dist/DocumentCleaner/ui/index.js +9 -0
- package/dist/DocumentCleaner/ui/index.js.map +1 -1
- package/dist/Finnish/backend/index.d.ts +5 -0
- package/dist/Finnish/backend/index.js +17 -0
- package/dist/Finnish/backend/index.js.map +1 -0
- package/dist/Finnish/common/FinnishHandler.d.ts +11 -0
- package/dist/Finnish/common/FinnishHandler.js +41 -0
- package/dist/Finnish/common/FinnishHandler.js.map +1 -0
- package/dist/Finnish/{ui → common}/finnish.json +19 -10
- package/dist/Finnish/ui/index.d.ts +2 -6
- package/dist/Finnish/ui/index.js +6 -36
- package/dist/Finnish/ui/index.js.map +1 -1
- package/dist/GitBackup/backend/index.d.ts +26 -2
- package/dist/GitBackup/backend/index.js +132 -17
- package/dist/GitBackup/backend/index.js.map +1 -1
- package/dist/GitBackup/common/types.d.ts +10 -0
- package/dist/GitBackup/common/types.js +2 -0
- package/dist/GitBackup/common/types.js.map +1 -0
- package/dist/GitBackup/ui/index.d.ts +13 -1
- package/dist/GitBackup/ui/index.js +112 -25
- package/dist/GitBackup/ui/index.js.map +1 -1
- package/dist/IncomeAndExpenses/backend/index.js +14 -0
- package/dist/IncomeAndExpenses/backend/index.js.map +1 -1
- package/dist/JournalReport/backend/index.js +10 -2
- package/dist/JournalReport/backend/index.js.map +1 -1
- package/dist/LedgerReport/backend/index.js +8 -2
- package/dist/LedgerReport/backend/index.js.map +1 -1
- package/dist/TagEditor/ui/index.js +2 -2
- package/dist/TagEditor/ui/index.js.map +1 -1
- package/dist/TickerData/backend/index.js +1 -2
- package/dist/TickerData/backend/index.js.map +1 -1
- package/dist/VAT/ui/index.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +10 -10
- package/src/CoinbaseImport/backend/CoinbaseHandler.ts +37 -9
- package/src/CoinbaseImport/backend/index.ts +1 -1
- package/src/CoinbaseImport/backend/rules.json +107 -0
- package/src/DocumentCleaner/ui/index.tsx +10 -0
- package/src/Finnish/backend/index.ts +21 -0
- package/src/Finnish/common/FinnishHandler.ts +50 -0
- package/src/Finnish/{ui → common}/finnish.json +15 -10
- package/src/Finnish/ui/index.tsx +5 -44
- package/src/GitBackup/ui/index.tsx +1 -1
- package/src/IncomeAndExpenses/backend/expense.json +23 -3
- package/src/IncomeAndExpenses/backend/index.ts +14 -0
- package/src/JournalReport/backend/index.ts +10 -2
- package/src/LedgerReport/backend/index.ts +8 -2
- package/src/TickerData/backend/cryptocurrencies.json +2 -1
- package/src/TickerData/backend/index.ts +1 -3
- package/src/VAT/ui/index.tsx +2 -2
- package/src/index.ts +2 -0
package/dist/Finnish/ui/index.js
CHANGED
|
@@ -1,46 +1,16 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
import { LanguagePlugin } from '@tasenor/common-ui';
|
|
5
|
-
class Finnish extends LanguagePlugin {
|
|
1
|
+
import { LanguageUiPlugin } from '@tasenor/common-ui';
|
|
2
|
+
import FinnishHandler from '../common/FinnishHandler';
|
|
3
|
+
class Finnish extends LanguageUiPlugin {
|
|
6
4
|
static code = 'Finnish';
|
|
7
5
|
static title = 'Finnish';
|
|
8
|
-
static version = '1.0.
|
|
6
|
+
static version = '1.0.66';
|
|
9
7
|
static icon = '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M12.36 6H7v6h7.24l.4 2H18V8h-5.24z" opacity=".3"/><path d="M14.4 6L14 4H5v17h2v-7h5.6l.4 2h7V6h-5.6zm3.6 8h-3.36l-.4-2H7V6h5.36l.4 2H18v6z"/></svg>';
|
|
10
8
|
static releaseDate = '2023-06-10';
|
|
11
|
-
static use = '
|
|
9
|
+
static use = 'both';
|
|
12
10
|
static type = 'language';
|
|
13
11
|
static description = 'Finnish translation of the application.';
|
|
14
12
|
constructor() {
|
|
15
|
-
super();
|
|
16
|
-
this.languages = {
|
|
17
|
-
fi: FI
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
getLanguages() {
|
|
21
|
-
return new Set(['fi']);
|
|
22
|
-
}
|
|
23
|
-
flag() {
|
|
24
|
-
return 'fi';
|
|
25
|
-
}
|
|
26
|
-
date2str(date) {
|
|
27
|
-
return dayjs(date).format('DD.MM.YYYY');
|
|
28
|
-
}
|
|
29
|
-
str2date(str, sample = null) {
|
|
30
|
-
sample = sample ? new Date(sample) : new Date();
|
|
31
|
-
let year, month, day;
|
|
32
|
-
if (!/^\d{1,2}(\.\d{1,2}(\.\d{1,4})?)?$/.test(str)) {
|
|
33
|
-
return undefined;
|
|
34
|
-
}
|
|
35
|
-
[day, month, year] = str.split('.');
|
|
36
|
-
day = parseInt(day);
|
|
37
|
-
month = parseInt(month) || (sample.getMonth() + 1);
|
|
38
|
-
year = parseInt(year) || sample.getFullYear();
|
|
39
|
-
if (year < 100) {
|
|
40
|
-
year += 2000;
|
|
41
|
-
}
|
|
42
|
-
const date = dayjs(sprintf('%04d-%02d-%02d', year, month, day));
|
|
43
|
-
return date.isValid() ? date.format('YYYY-MM-DD') : undefined;
|
|
13
|
+
super(new FinnishHandler());
|
|
44
14
|
}
|
|
45
15
|
}
|
|
46
16
|
export default Finnish;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Finnish/ui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Finnish/ui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,cAAc,MAAM,0BAA0B,CAAA;AAErD,MAAM,OAAQ,SAAQ,gBAAgB;IACpC,MAAM,CAAC,IAAI,GAAG,SAAS,CAAA;IACvB,MAAM,CAAC,KAAK,GAAG,SAAS,CAAA;IACxB,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAA;IACzB,MAAM,CAAC,IAAI,GAAG,2SAA2S,CAAA;IACzT,MAAM,CAAC,WAAW,GAAG,YAAY,CAAA;IACjC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAA;IACnB,MAAM,CAAC,IAAI,GAAG,UAAU,CAAA;IACxB,MAAM,CAAC,WAAW,GAAG,yCAAyC,CAAA;IAE9D;QACE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC,CAAA;IAC7B,CAAC;;AAGH,eAAe,OAAO,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { KnexDatabase, ToolPlugin } from '@tasenor/common-node';
|
|
2
|
-
import {
|
|
2
|
+
import { GitBackupCommit } from '../common/types';
|
|
3
3
|
declare class GitBackup extends ToolPlugin {
|
|
4
4
|
constructor();
|
|
5
5
|
/**
|
|
@@ -14,13 +14,37 @@ declare class GitBackup extends ToolPlugin {
|
|
|
14
14
|
* Create manual dump.
|
|
15
15
|
*/
|
|
16
16
|
POST(db: KnexDatabase, data: any): Promise<unknown>;
|
|
17
|
+
/**
|
|
18
|
+
* List of the latest backup commits.
|
|
19
|
+
*/
|
|
20
|
+
GET(db: KnexDatabase, data: any): Promise<unknown>;
|
|
21
|
+
/**
|
|
22
|
+
* Restore from the backup.
|
|
23
|
+
*/
|
|
24
|
+
PUT(db: KnexDatabase, data: any): Promise<unknown>;
|
|
25
|
+
/**
|
|
26
|
+
* A helper to check settings and set up repository for further use.
|
|
27
|
+
*/
|
|
28
|
+
private setupRepository;
|
|
29
|
+
/**
|
|
30
|
+
* Get a list of commits.
|
|
31
|
+
*/
|
|
32
|
+
collectCommits(db: KnexDatabase, limit: number): Promise<GitBackupCommit[]>;
|
|
17
33
|
/**
|
|
18
34
|
* Execute backup making for a database.
|
|
19
35
|
*/
|
|
20
36
|
makeBackup(db: KnexDatabase, message: string): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* Read in database from the give giot hash.
|
|
39
|
+
*/
|
|
40
|
+
restoreBackup(db: KnexDatabase, commit: string): Promise<boolean>;
|
|
21
41
|
/**
|
|
22
42
|
* Write the data from the database to the directory.
|
|
23
43
|
*/
|
|
24
|
-
dump
|
|
44
|
+
private dump;
|
|
45
|
+
/**
|
|
46
|
+
* Read the data to the database from the directory.
|
|
47
|
+
*/
|
|
48
|
+
private restore;
|
|
25
49
|
}
|
|
26
50
|
export default GitBackup;
|
|
@@ -1,13 +1,18 @@
|
|
|
1
|
-
import { GitRepo, systemPiped, TasenorExporter, ToolPlugin } from '@tasenor/common-node';
|
|
2
|
-
import { error, log, note } from '@tasenor/common';
|
|
1
|
+
import { BookkeeperImporter, GitRepo, systemPiped, TasenorExporter, ToolPlugin } from '@tasenor/common-node';
|
|
2
|
+
import { error, log, note, validGitRepoName } from '@tasenor/common';
|
|
3
3
|
import fs from 'fs';
|
|
4
4
|
import path from 'path';
|
|
5
|
+
// TODO: Master branch should be configurable.
|
|
6
|
+
// Branch.
|
|
7
|
+
const BRANCH = 'main';
|
|
8
|
+
// Mainly for temporary testing with file:/// repository.
|
|
9
|
+
const ALLOW_BAD_REPOSITORY = false;
|
|
5
10
|
class GitBackup extends ToolPlugin {
|
|
6
11
|
constructor() {
|
|
7
12
|
super();
|
|
8
13
|
this.code = 'GitBackup';
|
|
9
14
|
this.title = 'Backup for Git';
|
|
10
|
-
this.version = '1.0.
|
|
15
|
+
this.version = '1.0.4';
|
|
11
16
|
this.icon = '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path></svg>';
|
|
12
17
|
this.releaseDate = '2022-12-12';
|
|
13
18
|
this.use = 'both';
|
|
@@ -40,33 +45,133 @@ class GitBackup extends ToolPlugin {
|
|
|
40
45
|
return { success: false };
|
|
41
46
|
}
|
|
42
47
|
/**
|
|
43
|
-
*
|
|
48
|
+
* List of the latest backup commits.
|
|
44
49
|
*/
|
|
45
|
-
async
|
|
50
|
+
async GET(db, data) {
|
|
51
|
+
if (typeof data === 'object' && data !== null && data.type === 'commits') {
|
|
52
|
+
const commits = await this.collectCommits(db, data.count || 10);
|
|
53
|
+
return { success: true, data: { commits } };
|
|
54
|
+
}
|
|
55
|
+
return { success: false };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Restore from the backup.
|
|
59
|
+
*/
|
|
60
|
+
async PUT(db, data) {
|
|
61
|
+
if (typeof data === 'object' && data !== null && !!data.commit) {
|
|
62
|
+
const success = await this.restoreBackup(db, data.commit);
|
|
63
|
+
return { success };
|
|
64
|
+
}
|
|
65
|
+
return { success: false };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* A helper to check settings and set up repository for further use.
|
|
69
|
+
*/
|
|
70
|
+
async setupRepository(db) {
|
|
46
71
|
const workDir = this.getWorkSpace(db);
|
|
47
72
|
const repository = await this.getSetting(db, 'repository');
|
|
48
73
|
const subDirectory = await this.getSetting(db, 'subDirectory');
|
|
74
|
+
const sshPrivateKey = await this.getSetting(db, 'sshPrivateKey');
|
|
49
75
|
// Skip if not configured for use.
|
|
50
76
|
if (repository === undefined || subDirectory === undefined) {
|
|
51
|
-
|
|
77
|
+
error('Cannot make backup since no repository or subdirectory configured.');
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
// Check repo URL.
|
|
81
|
+
if (!ALLOW_BAD_REPOSITORY && !validGitRepoName(repository)) {
|
|
82
|
+
error(`Bad repository address ${JSON.stringify(repository)}.`);
|
|
83
|
+
return null;
|
|
52
84
|
}
|
|
85
|
+
// Set up SSH if needed.
|
|
86
|
+
const sshPath = path.join(workDir, 'ssh.key');
|
|
87
|
+
fs.writeFileSync(sshPath, '');
|
|
88
|
+
fs.chmodSync(sshPath, 0o600);
|
|
89
|
+
if (sshPrivateKey) {
|
|
90
|
+
fs.appendFileSync(sshPath, sshPrivateKey);
|
|
91
|
+
fs.appendFileSync(sshPath, '\n');
|
|
92
|
+
}
|
|
93
|
+
// Verify the resulting work directory.
|
|
53
94
|
const repoName = GitRepo.defaultName(repository);
|
|
54
95
|
if (!this.isValidWritePath(db, workDir, repoName, subDirectory)) {
|
|
55
|
-
error(`A sub directory '${subDirectory}' does not produce
|
|
96
|
+
error(`A sub directory '${subDirectory}' does not produce valid allowed work directory for backup in DB '${db.client.config.connection.database}'.`);
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const backupDir = path.join(workDir, repoName, subDirectory);
|
|
100
|
+
// Instantiate and configure Git.
|
|
101
|
+
const repo = await GitRepo.get(repository, workDir);
|
|
102
|
+
if (!repo) {
|
|
103
|
+
error(`Failed to establish git repository instance '${repository}' into ${workDir}.`);
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
repo.branch = BRANCH;
|
|
107
|
+
repo.configure({
|
|
108
|
+
name: 'Tasenor',
|
|
109
|
+
email: 'communications.tasenor@gmail.com',
|
|
110
|
+
sshPrivateKey: sshPrivateKey ? sshPath : null,
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
workDir, repository, subDirectory, sshPrivateKey, sshPath, backupDir, repo
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get a list of commits.
|
|
118
|
+
*/
|
|
119
|
+
async collectCommits(db, limit) {
|
|
120
|
+
const setup = await this.setupRepository(db);
|
|
121
|
+
if (!setup) {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
const { repo } = setup;
|
|
125
|
+
log(`Fetching commit list for DB '${db.client.config.connection.database}'.`);
|
|
126
|
+
await repo.update();
|
|
127
|
+
try {
|
|
128
|
+
const gitLog = await repo.git.log({ maxCount: limit });
|
|
129
|
+
return gitLog.all.map(e => ({
|
|
130
|
+
hash: e.hash,
|
|
131
|
+
date: e.date,
|
|
132
|
+
message: e.message,
|
|
133
|
+
author: `${e.author_name} ${e.author_email ? '<' + e.author_email + '>' : ''}`.trim()
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
error(`Failed to get log from git repository for DB '${db.client.config.connection.database}'.`);
|
|
138
|
+
return [];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Execute backup making for a database.
|
|
143
|
+
*/
|
|
144
|
+
async makeBackup(db, message) {
|
|
145
|
+
const setup = await this.setupRepository(db);
|
|
146
|
+
if (!setup) {
|
|
56
147
|
return false;
|
|
57
148
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
149
|
+
const { subDirectory, repo, backupDir } = setup;
|
|
150
|
+
log(`Making a backup into '${subDirectory}' of DB '${db.client.config.connection.database}'.`);
|
|
151
|
+
await repo.update();
|
|
152
|
+
await this.dump(db, backupDir);
|
|
153
|
+
return repo.put(message, subDirectory);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Read in database from the give giot hash.
|
|
157
|
+
*/
|
|
158
|
+
async restoreBackup(db, commit) {
|
|
159
|
+
const setup = await this.setupRepository(db);
|
|
160
|
+
if (!setup) {
|
|
68
161
|
return false;
|
|
69
162
|
}
|
|
163
|
+
const { repo, backupDir } = setup;
|
|
164
|
+
log(`Restoting a backup into '${backupDir}' for DB '${db.client.config.connection.database}' from hash '${commit}'.`);
|
|
165
|
+
await repo.update();
|
|
166
|
+
try {
|
|
167
|
+
await repo.git.checkout(commit);
|
|
168
|
+
}
|
|
169
|
+
catch (err) {
|
|
170
|
+
error(`Checking out the hash '${commit}' failed: ${err}`);
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
await this.restore(db, backupDir);
|
|
174
|
+
return true;
|
|
70
175
|
}
|
|
71
176
|
/**
|
|
72
177
|
* Write the data from the database to the directory.
|
|
@@ -79,6 +184,9 @@ class GitBackup extends ToolPlugin {
|
|
|
79
184
|
}
|
|
80
185
|
const exportDir = path.join(dir, 'export');
|
|
81
186
|
fs.mkdirSync(exportDir, { recursive: true });
|
|
187
|
+
// This dump.sql is not really needed, but it is kind of safety net for failures
|
|
188
|
+
// in export and import code. It helps to rebuild database manually, if all else
|
|
189
|
+
// fails.
|
|
82
190
|
// TODO: Check for pg_dump crash. What if that happens?
|
|
83
191
|
const { host, port, database, user, password } = db.client.config.connection;
|
|
84
192
|
const url = `postgresql://${user}:${password}@${host}:${port}/${database}`;
|
|
@@ -86,6 +194,13 @@ class GitBackup extends ToolPlugin {
|
|
|
86
194
|
const exporter = new TasenorExporter();
|
|
87
195
|
await exporter.dump(db, exportDir);
|
|
88
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Read the data to the database from the directory.
|
|
199
|
+
*/
|
|
200
|
+
async restore(db, dir) {
|
|
201
|
+
const importer = new BookkeeperImporter();
|
|
202
|
+
await importer.restoreUser(db, path.join(dir, 'export'));
|
|
203
|
+
}
|
|
89
204
|
}
|
|
90
205
|
export default GitBackup;
|
|
91
206
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/GitBackup/backend/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAgB,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/GitBackup/backend/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/GitBackup/common/types.ts"],"names":[],"mappings":""}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import { ToolPlugin } from '@tasenor/common-ui';
|
|
3
3
|
declare class GitBackup extends ToolPlugin {
|
|
4
4
|
busy: boolean;
|
|
5
|
+
commits: never[];
|
|
6
|
+
backups: number;
|
|
5
7
|
static code: string;
|
|
6
8
|
static title: string;
|
|
7
9
|
static version: string;
|
|
@@ -16,7 +18,7 @@ declare class GitBackup extends ToolPlugin {
|
|
|
16
18
|
disabled: boolean;
|
|
17
19
|
}[];
|
|
18
20
|
toolTitle(): string;
|
|
19
|
-
onMakeBackup(): Promise<void>;
|
|
21
|
+
onMakeBackup(message: string): Promise<void>;
|
|
20
22
|
toolTopPanel(): JSX.Element;
|
|
21
23
|
toolMainPanel(): JSX.Element;
|
|
22
24
|
getSettings(): {
|
|
@@ -27,6 +29,15 @@ declare class GitBackup extends ToolPlugin {
|
|
|
27
29
|
actions: {
|
|
28
30
|
onClick?: undefined;
|
|
29
31
|
};
|
|
32
|
+
multiline?: undefined;
|
|
33
|
+
label?: undefined;
|
|
34
|
+
} | {
|
|
35
|
+
type: string;
|
|
36
|
+
name: string;
|
|
37
|
+
multiline: boolean;
|
|
38
|
+
actions: {
|
|
39
|
+
onClick?: undefined;
|
|
40
|
+
};
|
|
30
41
|
label?: undefined;
|
|
31
42
|
} | {
|
|
32
43
|
type: string;
|
|
@@ -38,6 +49,7 @@ declare class GitBackup extends ToolPlugin {
|
|
|
38
49
|
};
|
|
39
50
|
};
|
|
40
51
|
name?: undefined;
|
|
52
|
+
multiline?: undefined;
|
|
41
53
|
})[];
|
|
42
54
|
};
|
|
43
55
|
}
|
|
@@ -1,12 +1,85 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { Note, IconButton, SubPanel, ToolPlugin } from '@tasenor/common-ui';
|
|
1
|
+
import React, { useState, useEffect, useRef } from 'react';
|
|
2
|
+
import { Note, IconButton, SubPanel, ToolPlugin, Dialog, Localize } from '@tasenor/common-ui';
|
|
3
3
|
import { makeObservable, observable, runInAction } from 'mobx';
|
|
4
|
-
import { Trans } from 'react-i18next';
|
|
4
|
+
import { Trans, useTranslation } from 'react-i18next';
|
|
5
|
+
import { Box, Table, TableBody, TableCell, TableContainer, TableRow, TextField, Typography } from '@mui/material';
|
|
6
|
+
import { useNavigate } from 'react-router-dom';
|
|
7
|
+
function MakeBackupIcon(props) {
|
|
8
|
+
const { disabled, onMakeBackup } = props;
|
|
9
|
+
const [askMessage, setAskMessage] = useState(false);
|
|
10
|
+
const [message, setMessage] = useState('');
|
|
11
|
+
const { t } = useTranslation();
|
|
12
|
+
const val = useRef(message); // For some reason the message is not up to date when enter pressed on dialog.
|
|
13
|
+
return React.createElement(React.Fragment, null,
|
|
14
|
+
React.createElement(Dialog, { wider: true, isVisible: askMessage, title: t('Comment for Git Commit'), onClose: () => setAskMessage(false), onConfirm: () => onMakeBackup(val.current.trim()) },
|
|
15
|
+
React.createElement(TextField, { fullWidth: true, autoFocus: true, value: val.current, onChange: (e) => { setMessage(e.target.value); val.current = e.target.value; } })),
|
|
16
|
+
React.createElement(IconButton, { id: "Make Backup", disabled: disabled, onClick: () => setAskMessage(true), title: "summarize-make-backup", icon: "save" }));
|
|
17
|
+
}
|
|
18
|
+
function BackupCommitList(props) {
|
|
19
|
+
const { store, backups } = props;
|
|
20
|
+
const [commits, setCommits] = useState([]);
|
|
21
|
+
const [fetched, setFetched] = useState(false);
|
|
22
|
+
const [restore, setRestore] = useState(null);
|
|
23
|
+
const { t } = useTranslation();
|
|
24
|
+
// TODO: Use from common-ui once more useful.
|
|
25
|
+
const navigate = useNavigate();
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (!store.db) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
store.request(`/db/${store.db}/tools/${GitBackup.code}`, 'GET', { type: 'commits', count: 20 }).then((res) => {
|
|
31
|
+
setFetched(true);
|
|
32
|
+
if (res.success) {
|
|
33
|
+
setCommits(res.data.commits);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}, [store.db, backups]);
|
|
37
|
+
const onRestore = (commit) => {
|
|
38
|
+
store.request(`/db/${store.db}/tools/${GitBackup.code}`, 'PUT', { commit: commit.hash }).then((res) => {
|
|
39
|
+
if (res && res.success) {
|
|
40
|
+
store.addMessage(t('Backup restored successfully.'));
|
|
41
|
+
runInAction(() => {
|
|
42
|
+
store.setDb(null).then(() => {
|
|
43
|
+
navigate(`/${store.db}`);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
store.addError(t('Restoring backup failed.'));
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
if (fetched && commits.length === 0) {
|
|
53
|
+
return React.createElement(Box, null,
|
|
54
|
+
React.createElement(Trans, null, "Not able to find any commits from the repository."));
|
|
55
|
+
}
|
|
56
|
+
return React.createElement(Box, null,
|
|
57
|
+
React.createElement(TableContainer, null,
|
|
58
|
+
React.createElement(Table, null,
|
|
59
|
+
React.createElement(TableBody, null, commits.map((commit, idx) => React.createElement(TableRow, { key: idx },
|
|
60
|
+
React.createElement(TableCell, null,
|
|
61
|
+
React.createElement(IconButton, { id: "Restore", icon: "update", title: "restore", onClick: () => setRestore(commit) })),
|
|
62
|
+
React.createElement(TableCell, null,
|
|
63
|
+
React.createElement(Typography, { color: "secondary" }, commit.hash),
|
|
64
|
+
React.createElement(Typography, { variant: "body1" }, commit.message),
|
|
65
|
+
React.createElement(Typography, { variant: "caption" }, commit.author)),
|
|
66
|
+
React.createElement(TableCell, null,
|
|
67
|
+
React.createElement(Localize, { date: commit.date, withTime: true }))))))),
|
|
68
|
+
React.createElement(Dialog, { isVisible: !!restore, title: t('Restore this backup?'), wider: true, onClose: () => setRestore(null), onConfirm: () => onRestore(restore) }, restore && React.createElement(Box, null,
|
|
69
|
+
React.createElement(Typography, { variant: "caption" },
|
|
70
|
+
React.createElement(Localize, { date: restore.date, withTime: true }),
|
|
71
|
+
" ",
|
|
72
|
+
restore.hash),
|
|
73
|
+
React.createElement(Typography, { variant: "body1" }, restore.message),
|
|
74
|
+
React.createElement(Typography, { variant: "caption" }, restore.author))));
|
|
75
|
+
}
|
|
5
76
|
class GitBackup extends ToolPlugin {
|
|
6
77
|
busy = false;
|
|
78
|
+
commits = [];
|
|
79
|
+
backups = 0;
|
|
7
80
|
static code = 'GitBackup';
|
|
8
81
|
static title = 'Backup for Git';
|
|
9
|
-
static version = '1.0.
|
|
82
|
+
static version = '1.0.4';
|
|
10
83
|
static icon = '<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path></svg>';
|
|
11
84
|
static releaseDate = '2022-12-12';
|
|
12
85
|
static use = 'both';
|
|
@@ -15,23 +88,36 @@ class GitBackup extends ToolPlugin {
|
|
|
15
88
|
constructor() {
|
|
16
89
|
super();
|
|
17
90
|
makeObservable(this, {
|
|
18
|
-
busy: observable
|
|
91
|
+
busy: observable,
|
|
92
|
+
commits: observable,
|
|
93
|
+
backups: observable,
|
|
19
94
|
});
|
|
20
95
|
this.languages = {
|
|
21
96
|
// TODO: This is too simple labeling. Need to add plugin code as well.
|
|
22
97
|
en: {
|
|
23
98
|
'label-repository': 'Repository URL',
|
|
24
99
|
'label-subDirectory': 'Subdirectory inside the repository',
|
|
25
|
-
'
|
|
100
|
+
'label-sshPrivateKey': 'SSH private key',
|
|
101
|
+
'icon-restore': 'Restore this backup',
|
|
102
|
+
'icon-summarize-make-backup': 'Make a backup',
|
|
26
103
|
},
|
|
27
104
|
fi: {
|
|
28
105
|
'label-repository': 'Git-säilön URL',
|
|
29
106
|
'label-subDirectory': 'Alihakemiston nimi säilön sisällä',
|
|
30
|
-
'
|
|
107
|
+
'label-sshPrivateKey': 'SSH yksityinen avain',
|
|
108
|
+
'icon-restore': 'Palauta tältä varmuuskopiolta',
|
|
109
|
+
'icon-summarize-make-backup': 'Tee varmuuskopio',
|
|
31
110
|
'Backup for Git': 'Git-pohjainen Varmuuskopiointi',
|
|
32
111
|
'Manual backup by GitBackup {version}': 'Ylimääräinen varmuuskopio GitBackup {version}',
|
|
33
112
|
'Backup created successfully.': 'Varmuuskopion luominen onnistui.',
|
|
34
|
-
'Creating backup failed.': 'Varmuuskopion luominen ei onnistunut.'
|
|
113
|
+
'Creating backup failed.': 'Varmuuskopion luominen ei onnistunut.',
|
|
114
|
+
'Not able to find any commits from the repository.': 'Varmuuskopio vaikuttaisi olevan tyhjä.',
|
|
115
|
+
'This tool takes every night automatically one backup.': 'Tämä työkalu tekee yhden varmuuskopion joka yö.',
|
|
116
|
+
'You can also make immediately backup from the icon above.': 'Lisäksi voit tehdä ylimääräisen varmuuskopion halutessasi ylläolevasta ikonista.',
|
|
117
|
+
'Existing backups are listed below and can be restored from the icon next to them.': 'Aiemmat varmuuskopiot ovat alla listattuna. Niistä voi palauttaa minkä tahansa klikkaamalla niiden vieressä olevaa ikonia.',
|
|
118
|
+
'Backup restored successfully.': 'Varmuuskopion palautus onnistui.',
|
|
119
|
+
'Restoring backup failed.': 'Varmuuskopion palauttaminen epäonnistui.',
|
|
120
|
+
'Comment for Git Commit': 'Kommentti varmuuskopiosta',
|
|
35
121
|
}
|
|
36
122
|
};
|
|
37
123
|
}
|
|
@@ -41,26 +127,28 @@ class GitBackup extends ToolPlugin {
|
|
|
41
127
|
toolTitle() {
|
|
42
128
|
return 'Backup for Git';
|
|
43
129
|
}
|
|
44
|
-
async onMakeBackup() {
|
|
130
|
+
async onMakeBackup(message) {
|
|
45
131
|
runInAction(() => (this.busy = true));
|
|
46
|
-
const { success } = await this.POST({ makeBackup: this.t('Manual backup by GitBackup {version}').replace('{version}', GitBackup.version) });
|
|
132
|
+
const { success } = await this.POST({ makeBackup: message || this.t('Manual backup by GitBackup {version}').replace('{version}', GitBackup.version) });
|
|
47
133
|
runInAction(() => {
|
|
48
134
|
this.busy = false;
|
|
135
|
+
runInAction(() => {
|
|
136
|
+
// Trigger refresh.
|
|
137
|
+
this.backups = this.backups + 1;
|
|
138
|
+
});
|
|
49
139
|
if (success) {
|
|
50
140
|
this.store.addMessage(this.t('Backup created successfully.'));
|
|
51
141
|
}
|
|
52
142
|
else {
|
|
53
|
-
this.store.addError(this.t('
|
|
143
|
+
this.store.addError(this.t('Restoring backup failed.'));
|
|
54
144
|
}
|
|
55
145
|
});
|
|
56
146
|
}
|
|
57
147
|
toolTopPanel() {
|
|
58
148
|
const repo = this.getSetting('repository');
|
|
59
|
-
return React.createElement(
|
|
60
|
-
React.createElement(IconButton, { id: "Make Backup", disabled: this.busy || !repo, onClick: () => this.onMakeBackup(), title: "summarize-make-backup", icon: "save" }));
|
|
149
|
+
return React.createElement(MakeBackupIcon, { disabled: !repo || this.busy, onMakeBackup: (msg) => this.onMakeBackup(msg) });
|
|
61
150
|
}
|
|
62
151
|
toolMainPanel() {
|
|
63
|
-
// TODO: We could use here some link utility that keeps selected dbs and ids intact but changes URL parts.
|
|
64
152
|
const repo = this.getSetting('repository');
|
|
65
153
|
if (!repo) {
|
|
66
154
|
return React.createElement(React.Fragment, null,
|
|
@@ -73,18 +161,11 @@ class GitBackup extends ToolPlugin {
|
|
|
73
161
|
React.createElement(React.Fragment, null, " "),
|
|
74
162
|
React.createElement(Trans, null, "You can also make immediately backup from the icon above."),
|
|
75
163
|
React.createElement(React.Fragment, null, " "),
|
|
76
|
-
React.createElement(Trans, null, "
|
|
77
|
-
React.createElement(React.Fragment, null, " "),
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
React.createElement(Trans, null, "Currently restore is not yet implemented."),
|
|
81
|
-
React.createElement(React.Fragment, null, " "),
|
|
82
|
-
React.createElement(Trans, null, "In order to restore from the backup, you must ensure to get the wanted version as the latest commit in the Git."),
|
|
83
|
-
React.createElement(React.Fragment, null, " "),
|
|
84
|
-
React.createElement(Trans, null, "Then you need to contact support to let them know that DB needs to be loaded from Git.")));
|
|
164
|
+
React.createElement(Trans, null, "Existing backups are listed below and can be restored from the icon next to them."),
|
|
165
|
+
React.createElement(React.Fragment, null, " ")),
|
|
166
|
+
React.createElement(Box, { sx: { m: 2 } },
|
|
167
|
+
React.createElement(BackupCommitList, { backups: this.backups, store: this.store })));
|
|
85
168
|
}
|
|
86
|
-
// TODO: Add button to create backup right now. Maybe with comments?
|
|
87
|
-
// TODO: Communicating with backend counterpart needs URL passing all requests to plugin.
|
|
88
169
|
getSettings() {
|
|
89
170
|
return {
|
|
90
171
|
type: 'flat',
|
|
@@ -99,6 +180,12 @@ class GitBackup extends ToolPlugin {
|
|
|
99
180
|
name: 'subDirectory',
|
|
100
181
|
actions: {}
|
|
101
182
|
},
|
|
183
|
+
{
|
|
184
|
+
type: 'text',
|
|
185
|
+
name: 'sshPrivateKey',
|
|
186
|
+
multiline: true,
|
|
187
|
+
actions: {}
|
|
188
|
+
},
|
|
102
189
|
{
|
|
103
190
|
type: 'button',
|
|
104
191
|
label: 'Save',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/GitBackup/ui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/GitBackup/ui/index.tsx"],"names":[],"mappings":"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"}
|