v0.2.84
This commit is contained in:
1 parent
6329ac33d1
commit
90e3c399ea
22 files changed
+729
-46
No files matched your search
+43
-3
@@ -45,6 +45,9 @@ const notesPagination = document.querySelector("#notes-pagination");
|
||||
const workspacePasswordForm = document.querySelector("#workspace-password-form");
|
||||
const workspacePasswordInput = document.querySelector("#workspace-set-password");
|
||||
const workspacePasswordError = document.querySelector("#workspace-password-error");
|
||||
const workspaceSettingsForm = document.querySelector("#workspace-settings-form");
|
||||
const archiveDeletedNotesToggle = document.querySelector("#archive-deleted-notes");
|
||||
const workspaceSettingsStatus = document.querySelector("#workspace-settings-status");
|
||||
let notesPage = 1;
|
||||
let notesSearchTimer;
|
||||
const notesViewKey = `rustpad:workspace:${slug}:notes-view`;
|
||||
@@ -55,6 +58,11 @@ function updateWorkspacePasswordControl() {
|
||||
workspacePasswordForm.hidden = Boolean(info?.protected || !info?.can_set_password);
|
||||
}
|
||||
|
||||
function updateWorkspaceSettingsControl() {
|
||||
workspaceSettingsForm.hidden = !info?.can_manage_settings;
|
||||
archiveDeletedNotesToggle.checked = Boolean(info?.archive_deleted_notes);
|
||||
}
|
||||
|
||||
function stopWorkspaceWatch() {
|
||||
clearInterval(workspaceWatchPingTimer);
|
||||
clearTimeout(workspaceWatchReconnectTimer);
|
||||
@@ -293,6 +301,7 @@ async function openWorkspace() {
|
||||
renderNotes();
|
||||
renderNotesPagination(data.pagination);
|
||||
updateWorkspacePasswordControl();
|
||||
updateWorkspaceSettingsControl();
|
||||
workspaceLockedForPassword = false;
|
||||
workspaceContent.hidden = false;
|
||||
if (dialog.open) dialog.close();
|
||||
@@ -313,6 +322,7 @@ async function init() {
|
||||
document.querySelector("#workspace-title").textContent = info.title;
|
||||
document.querySelector("#workspace-url").textContent = location.pathname;
|
||||
updateWorkspacePasswordControl();
|
||||
updateWorkspaceSettingsControl();
|
||||
if (info.protected && info.access_level === "none") lockWorkspaceForPassword("Enter the workspace password to continue.");
|
||||
else await openWorkspace();
|
||||
} catch (e) {
|
||||
@@ -364,6 +374,29 @@ workspacePasswordForm.addEventListener("submit", async event => {
|
||||
submit.disabled = false;
|
||||
}
|
||||
});
|
||||
workspaceSettingsForm.addEventListener("submit", async event => {
|
||||
event.preventDefault();
|
||||
workspaceSettingsStatus.textContent = "";
|
||||
const submit = workspaceSettingsForm.querySelector('button[type="submit"]');
|
||||
submit.disabled = true;
|
||||
try {
|
||||
const updated = await api(`/api/workspaces/${encodeURIComponent(slug)}/settings`, {
|
||||
method: "POST",
|
||||
body: JSON.stringify({ archive_deleted_notes: archiveDeletedNotesToggle.checked }),
|
||||
});
|
||||
info = { ...info, ...updated };
|
||||
updateWorkspaceSettingsControl();
|
||||
workspaceSettingsStatus.textContent = info.archive_deleted_notes
|
||||
? "Deleted notes will be archived in the database."
|
||||
: "Deleted notes will be permanently removed.";
|
||||
toast.success("Workspace deletion policy saved.", { title: "Workspace settings" });
|
||||
} catch (error) {
|
||||
workspaceSettingsStatus.textContent = error.message;
|
||||
toast.danger(error.message, { title: "Could not save workspace settings" });
|
||||
} finally {
|
||||
submit.disabled = false;
|
||||
}
|
||||
});
|
||||
document.querySelector("#new-note-button").addEventListener("click", () => document.querySelector("#note-dialog").showModal());
|
||||
document.querySelector("#cancel-note").addEventListener("click", () => document.querySelector("#note-dialog").close());
|
||||
document.querySelector("#note-form").addEventListener("submit", async e => {
|
||||
@@ -387,13 +420,20 @@ notesList.addEventListener("click", async event => {
|
||||
const button = event.target.closest("[data-delete-note]");
|
||||
if (!button) return;
|
||||
const title = button.dataset.noteTitle;
|
||||
if (!await askConfirm(`Delete note “${title}”? This cannot be undone.`, { title: "Delete note", confirmText: "Delete", danger: true })) return;
|
||||
const archive = Boolean(info?.archive_deleted_notes);
|
||||
const message = archive
|
||||
? `Delete note “${title}”? It will be archived and hidden from this workspace, but kept in the database.`
|
||||
: `Delete note “${title}”? This cannot be undone.`;
|
||||
if (!await askConfirm(message, { title: "Delete note", confirmText: archive ? "Archive" : "Delete", danger: true })) return;
|
||||
button.disabled = true;
|
||||
try {
|
||||
await api(`/api/workspaces/${encodeURIComponent(slug)}/notes/${encodeURIComponent(button.dataset.deleteNote)}`, {
|
||||
const result = await api(`/api/workspaces/${encodeURIComponent(slug)}/notes/${encodeURIComponent(button.dataset.deleteNote)}`, {
|
||||
method: "DELETE", body: JSON.stringify({ access_token: accessToken || null })
|
||||
});
|
||||
toast.success(`The note "${title}" was deleted.`, { title: "Note deleted" });
|
||||
toast.success(
|
||||
result.archived ? `The note "${title}" was archived.` : `The note "${title}" was deleted.`,
|
||||
{ title: result.archived ? "Note archived" : "Note deleted" },
|
||||
);
|
||||
await openWorkspace();
|
||||
} catch (error) { toast.danger(error.message, { title: "Could not delete note" }); button.disabled = false; }
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user