Notes/src/public/app/widgets/shared_switch.js

77 lines
2.4 KiB
JavaScript
Raw Normal View History

2021-12-20 17:30:47 +01:00
import SwitchWidget from "./switch.js";
import branchService from "../services/branches.js";
import server from "../services/server.js";
import utils from "../services/utils.js";
import syncService from "../services/sync.js";
2022-11-25 15:29:57 +01:00
import dialogService from "../services/dialog.js";
2024-09-08 22:11:52 +03:00
import { t } from "../services/i18n.js";
2021-12-20 17:30:47 +01:00
export default class SharedSwitchWidget extends SwitchWidget {
isEnabled() {
2022-12-04 13:16:05 +01:00
return super.isEnabled()
&& !['root', '_share', '_hidden'].includes(this.noteId)
&& !this.noteId.startsWith('_options');
}
2021-12-20 17:30:47 +01:00
doRender() {
super.doRender();
2024-09-08 22:11:52 +03:00
this.$switchOnName.text(t("shared_switch.shared"));
this.$switchOnButton.attr("title", t("shared_switch.toggle-on-title"));
2021-12-20 17:30:47 +01:00
2024-09-08 22:11:52 +03:00
this.$switchOffName.text(t("shared_switch.shared"));
this.$switchOffButton.attr("title", t("shared_switch.toggle-off-title"));
2021-12-20 17:30:47 +01:00
this.$helpButton.attr("data-help-page", "sharing.html").show();
2023-07-14 21:59:43 +02:00
this.$helpButton.on('click', e => utils.openHelp($(e.target)));
2021-12-20 17:30:47 +01:00
}
async switchOn() {
2023-04-15 00:06:13 +02:00
await branchService.cloneNoteToParentNote(this.noteId, '_share');
syncService.syncNow(true);
2021-12-20 17:30:47 +01:00
}
async switchOff() {
2022-12-21 16:11:00 +01:00
const shareBranch = this.note.getParentBranches().find(b => b.parentNoteId === '_share');
2021-12-20 17:30:47 +01:00
if (!shareBranch) {
return;
}
if (this.note.getParentBranches().length === 1) {
2024-09-08 22:11:52 +03:00
if (!await dialogService.confirm(t("shared_switch.shared-branch"))) {
2021-12-20 17:30:47 +01:00
return;
}
}
2021-12-21 16:12:59 +01:00
await server.remove(`branches/${shareBranch.branchId}?taskId=no-progress-reporting`);
syncService.syncNow(true);
2021-12-20 17:30:47 +01:00
}
async refreshWithNote(note) {
2022-12-21 16:11:00 +01:00
const isShared = note.hasAncestor('_share');
const canBeUnshared = isShared && note.getParentBranches().find(b => b.parentNoteId === '_share');
2021-12-20 17:30:47 +01:00
const switchDisabled = isShared && !canBeUnshared;
this.$switchOn.toggle(!isShared);
this.$switchOff.toggle(!!isShared);
if (switchDisabled) {
2024-09-08 22:11:52 +03:00
this.$widget.attr("title", t("shared_switch.inherited"));
2021-12-20 17:30:47 +01:00
this.$switchOff.addClass("switch-disabled");
}
else {
this.$widget.removeAttr("title");
this.$switchOff.removeClass("switch-disabled");
}
}
entitiesReloadedEvent({loadResults}) {
if (loadResults.getBranchRows().find(b => b.noteId === this.noteId)) {
2021-12-20 17:30:47 +01:00
this.refresh();
}
}
}