chore(client/ts): port options/advanced

This commit is contained in:
Elian Doran 2025-01-11 10:51:35 +02:00
parent fcb7d9754f
commit 5bfcf88acd
No known key found for this signature in database
4 changed files with 46 additions and 12 deletions

View File

@ -2,6 +2,7 @@ import OptionsWidget from "../options_widget.js";
import toastService from "../../../../services/toast.js"; import toastService from "../../../../services/toast.js";
import server from "../../../../services/server.js"; import server from "../../../../services/server.js";
import { t } from "../../../../services/i18n.js"; import { t } from "../../../../services/i18n.js";
import type { OptionMap } from "../../../../../../services/options_interface.js";
const TPL = ` const TPL = `
<div class="options-section"> <div class="options-section">
@ -33,7 +34,22 @@ const TPL = `
<ul class="existing-anonymized-databases"></ul> <ul class="existing-anonymized-databases"></ul>
</div>`; </div>`;
// TODO: Deduplicate with server
interface AnonymizeResponse {
success: boolean;
anonymizedFilePath: string;
}
interface AnonymizedDbResponse {
filePath: string;
}
export default class DatabaseAnonymizationOptions extends OptionsWidget { export default class DatabaseAnonymizationOptions extends OptionsWidget {
private $anonymizeFullButton!: JQuery<HTMLElement>;
private $anonymizeLightButton!: JQuery<HTMLElement>;
private $existingAnonymizedDatabases!: JQuery<HTMLElement>;
doRender() { doRender() {
this.$widget = $(TPL); this.$widget = $(TPL);
this.$anonymizeFullButton = this.$widget.find(".anonymize-full-button"); this.$anonymizeFullButton = this.$widget.find(".anonymize-full-button");
@ -41,7 +57,7 @@ export default class DatabaseAnonymizationOptions extends OptionsWidget {
this.$anonymizeFullButton.on("click", async () => { this.$anonymizeFullButton.on("click", async () => {
toastService.showMessage(t("database_anonymization.creating_fully_anonymized_database")); toastService.showMessage(t("database_anonymization.creating_fully_anonymized_database"));
const resp = await server.post("database/anonymize/full"); const resp = await server.post<AnonymizeResponse>("database/anonymize/full");
if (!resp.success) { if (!resp.success) {
toastService.showError(t("database_anonymization.error_creating_anonymized_database")); toastService.showError(t("database_anonymization.error_creating_anonymized_database"));
@ -55,7 +71,7 @@ export default class DatabaseAnonymizationOptions extends OptionsWidget {
this.$anonymizeLightButton.on("click", async () => { this.$anonymizeLightButton.on("click", async () => {
toastService.showMessage(t("database_anonymization.creating_lightly_anonymized_database")); toastService.showMessage(t("database_anonymization.creating_lightly_anonymized_database"));
const resp = await server.post("database/anonymize/light"); const resp = await server.post<AnonymizeResponse>("database/anonymize/light");
if (!resp.success) { if (!resp.success) {
toastService.showError(t("database_anonymization.error_creating_anonymized_database")); toastService.showError(t("database_anonymization.error_creating_anonymized_database"));
@ -69,8 +85,8 @@ export default class DatabaseAnonymizationOptions extends OptionsWidget {
this.$existingAnonymizedDatabases = this.$widget.find(".existing-anonymized-databases"); this.$existingAnonymizedDatabases = this.$widget.find(".existing-anonymized-databases");
} }
optionsLoaded(options) { optionsLoaded(options: OptionMap) {
server.get("database/anonymized-databases").then((anonymizedDatabases) => { server.get<AnonymizedDbResponse[]>("database/anonymized-databases").then((anonymizedDatabases) => {
this.$existingAnonymizedDatabases.empty(); this.$existingAnonymizedDatabases.empty();
if (!anonymizedDatabases.length) { if (!anonymizedDatabases.length) {

View File

@ -6,22 +6,33 @@ import { t } from "../../../../services/i18n.js";
const TPL = ` const TPL = `
<div class="options-section"> <div class="options-section">
<h4>${t("database_integrity_check.title")}</h4> <h4>${t("database_integrity_check.title")}</h4>
<p>${t("database_integrity_check.description")}</p> <p>${t("database_integrity_check.description")}</p>
<button class="check-integrity-button btn">${t("database_integrity_check.check_button")}</button> <button class="check-integrity-button btn">${t("database_integrity_check.check_button")}</button>
<button class="find-and-fix-consistency-issues-button btn">${t("consistency_checks.find_and_fix_button")}</button> <button class="find-and-fix-consistency-issues-button btn">${t("consistency_checks.find_and_fix_button")}</button>
</div> </div>
`; `;
// TODO: Deduplicate with server
interface Response {
results: {
integrity_check: string;
}[];
}
export default class DatabaseIntegrityCheckOptions extends OptionsWidget { export default class DatabaseIntegrityCheckOptions extends OptionsWidget {
private $checkIntegrityButton!: JQuery<HTMLElement>;
private $findAndFixConsistencyIssuesButton!: JQuery<HTMLElement>;
doRender() { doRender() {
this.$widget = $(TPL); this.$widget = $(TPL);
this.$checkIntegrityButton = this.$widget.find(".check-integrity-button"); this.$checkIntegrityButton = this.$widget.find(".check-integrity-button");
this.$checkIntegrityButton.on("click", async () => { this.$checkIntegrityButton.on("click", async () => {
toastService.showMessage(t("database_integrity_check.checking_integrity")); toastService.showMessage(t("database_integrity_check.checking_integrity"));
const { results } = await server.get("database/check-integrity"); const { results } = await server.get<Response>("database/check-integrity");
if (results.length === 1 && results[0].integrity_check === "ok") { if (results.length === 1 && results[0].integrity_check === "ok") {
toastService.showMessage(t("database_integrity_check.integrity_check_succeeded")); toastService.showMessage(t("database_integrity_check.integrity_check_succeeded"));

View File

@ -2,16 +2,21 @@ import OptionsWidget from "../options_widget.js";
import server from "../../../../services/server.js"; import server from "../../../../services/server.js";
import toastService from "../../../../services/toast.js"; import toastService from "../../../../services/toast.js";
import { t } from "../../../../services/i18n.js"; import { t } from "../../../../services/i18n.js";
import type { OptionMap } from "../../../../../../services/options_interface.js";
const TPL = ` const TPL = `
<div class="options-section"> <div class="options-section">
<h4>${t("sync.title")}</h4> <h4>${t("sync.title")}</h4>
<button class="force-full-sync-button btn">${t("sync.force_full_sync_button")}</button> <button class="force-full-sync-button btn">${t("sync.force_full_sync_button")}</button>
<button class="fill-entity-changes-button btn">${t("sync.fill_entity_changes_button")}</button> <button class="fill-entity-changes-button btn">${t("sync.fill_entity_changes_button")}</button>
</div>`; </div>`;
export default class AdvancedSyncOptions extends OptionsWidget { export default class AdvancedSyncOptions extends OptionsWidget {
private $forceFullSyncButton!: JQuery<HTMLElement>;
private $fillEntityChangesButton!: JQuery<HTMLElement>;
doRender() { doRender() {
this.$widget = $(TPL); this.$widget = $(TPL);
this.$forceFullSyncButton = this.$widget.find(".force-full-sync-button"); this.$forceFullSyncButton = this.$widget.find(".force-full-sync-button");
@ -31,5 +36,5 @@ export default class AdvancedSyncOptions extends OptionsWidget {
}); });
} }
async optionsLoaded(options) {} async optionsLoaded(options: OptionMap) {}
} }

View File

@ -6,13 +6,15 @@ import { t } from "../../../../services/i18n.js";
const TPL = ` const TPL = `
<div class="options-section"> <div class="options-section">
<h4>${t("vacuum_database.title")}</h4> <h4>${t("vacuum_database.title")}</h4>
<p>${t("vacuum_database.description")}</p> <p>${t("vacuum_database.description")}</p>
<button class="vacuum-database-button btn">${t("vacuum_database.button_text")}</button> <button class="vacuum-database-button btn">${t("vacuum_database.button_text")}</button>
</div>`; </div>`;
export default class VacuumDatabaseOptions extends OptionsWidget { export default class VacuumDatabaseOptions extends OptionsWidget {
private $vacuumDatabaseButton!: JQuery<HTMLElement>;
doRender() { doRender() {
this.$widget = $(TPL); this.$widget = $(TPL);
this.$vacuumDatabaseButton = this.$widget.find(".vacuum-database-button"); this.$vacuumDatabaseButton = this.$widget.find(".vacuum-database-button");