Spaces:
Paused
Paused
✨ add conversations deletion to settings modal (#239)
Browse files* ✨ add conversations deletion to settings modal #233
* remove inert attribute from app only if last modal closed
* make the button an underlined text instead
* prepare for no-js
* ui
---------
Co-authored-by: Victor Mustar <[email protected]>
src/lib/components/Modal.svelte
CHANGED
|
@@ -33,7 +33,10 @@
|
|
| 33 |
|
| 34 |
onDestroy(() => {
|
| 35 |
if (!browser) return;
|
| 36 |
-
|
|
|
|
|
|
|
|
|
|
| 37 |
});
|
| 38 |
</script>
|
| 39 |
|
|
|
|
| 33 |
|
| 34 |
onDestroy(() => {
|
| 35 |
if (!browser) return;
|
| 36 |
+
// remove inert attribute if this is the last modal
|
| 37 |
+
if (document.querySelectorAll('[role="dialog"]:not(#app *)').length === 1) {
|
| 38 |
+
document.getElementById("app")?.removeAttribute("inert");
|
| 39 |
+
}
|
| 40 |
});
|
| 41 |
</script>
|
| 42 |
|
src/lib/components/SettingsModal.svelte
CHANGED
|
@@ -11,57 +11,97 @@
|
|
| 11 |
export let settings: Pick<Settings, "shareConversationsWithModelAuthors">;
|
| 12 |
|
| 13 |
let shareConversationsWithModelAuthors = settings.shareConversationsWithModelAuthors;
|
|
|
|
| 14 |
|
| 15 |
const dispatch = createEventDispatcher<{ close: void }>();
|
| 16 |
</script>
|
| 17 |
|
| 18 |
<Modal on:close>
|
| 19 |
-
<
|
| 20 |
-
class="flex w-full flex-col gap-5 p-6"
|
| 21 |
-
use:enhance={() => {
|
| 22 |
-
dispatch("close");
|
| 23 |
-
}}
|
| 24 |
-
method="post"
|
| 25 |
-
action="{base}/settings"
|
| 26 |
-
>
|
| 27 |
<div class="flex items-start justify-between text-xl font-semibold text-gray-800">
|
| 28 |
<h2>Settings</h2>
|
| 29 |
<button type="button" class="group" on:click={() => dispatch("close")}>
|
| 30 |
<CarbonClose class="text-gray-900 group-hover:text-gray-500" />
|
| 31 |
</button>
|
| 32 |
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
</Modal>
|
|
|
|
| 11 |
export let settings: Pick<Settings, "shareConversationsWithModelAuthors">;
|
| 12 |
|
| 13 |
let shareConversationsWithModelAuthors = settings.shareConversationsWithModelAuthors;
|
| 14 |
+
let isConfirmingDeletion = false;
|
| 15 |
|
| 16 |
const dispatch = createEventDispatcher<{ close: void }>();
|
| 17 |
</script>
|
| 18 |
|
| 19 |
<Modal on:close>
|
| 20 |
+
<div class="flex w-full flex-col gap-5 p-6">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 21 |
<div class="flex items-start justify-between text-xl font-semibold text-gray-800">
|
| 22 |
<h2>Settings</h2>
|
| 23 |
<button type="button" class="group" on:click={() => dispatch("close")}>
|
| 24 |
<CarbonClose class="text-gray-900 group-hover:text-gray-500" />
|
| 25 |
</button>
|
| 26 |
</div>
|
| 27 |
+
<form
|
| 28 |
+
class="flex flex-col gap-5"
|
| 29 |
+
use:enhance={() => {
|
| 30 |
+
dispatch("close");
|
| 31 |
+
}}
|
| 32 |
+
method="post"
|
| 33 |
+
action="{base}/settings"
|
| 34 |
+
>
|
| 35 |
+
<label class="flex cursor-pointer select-none items-center gap-2 text-gray-500">
|
| 36 |
+
{#each Object.entries(settings).filter(([k]) => k !== "shareConversationsWithModelAuthors") as [key, val]}
|
| 37 |
+
<input type="hidden" name={key} value={val} />
|
| 38 |
+
{/each}
|
| 39 |
+
<Switch
|
| 40 |
+
name="shareConversationsWithModelAuthors"
|
| 41 |
+
bind:checked={shareConversationsWithModelAuthors}
|
| 42 |
+
/>
|
| 43 |
+
Share conversations with model authors
|
| 44 |
+
</label>
|
| 45 |
|
| 46 |
+
<p class="text-gray-800">
|
| 47 |
+
Sharing your data will help improve the training data and make open models better over time.
|
| 48 |
+
</p>
|
| 49 |
+
<p class="text-gray-800">
|
| 50 |
+
You can change this setting at any time, it applies to all your conversations.
|
| 51 |
+
</p>
|
| 52 |
+
<p class="text-gray-800">
|
| 53 |
+
Read more about this model's authors,
|
| 54 |
+
<a
|
| 55 |
+
href="https://open-assistant.io/"
|
| 56 |
+
target="_blank"
|
| 57 |
+
rel="noreferrer"
|
| 58 |
+
class="underline decoration-gray-300 hover:decoration-gray-700">Open Assistant</a
|
| 59 |
+
>.
|
| 60 |
+
</p>
|
| 61 |
+
<form
|
| 62 |
+
method="post"
|
| 63 |
+
action="{base}/conversations?/delete"
|
| 64 |
+
on:submit|preventDefault={() => (isConfirmingDeletion = true)}
|
| 65 |
+
>
|
| 66 |
+
<button type="submit" class="underline decoration-gray-300 hover:decoration-gray-700">
|
| 67 |
+
Delete all conversations
|
| 68 |
+
</button>
|
| 69 |
+
</form>
|
| 70 |
+
<button
|
| 71 |
+
type="submit"
|
| 72 |
+
class="mt-2 rounded-full bg-black px-5 py-2 text-lg font-semibold text-gray-100 ring-gray-400 ring-offset-1 transition-all focus-visible:outline-none focus-visible:ring hover:ring"
|
| 73 |
+
>
|
| 74 |
+
Apply
|
| 75 |
+
</button>
|
| 76 |
+
</form>
|
| 77 |
|
| 78 |
+
{#if isConfirmingDeletion}
|
| 79 |
+
<Modal on:close={() => (isConfirmingDeletion = false)}>
|
| 80 |
+
<form
|
| 81 |
+
use:enhance={() => {
|
| 82 |
+
dispatch("close");
|
| 83 |
+
}}
|
| 84 |
+
method="post"
|
| 85 |
+
action="{base}/conversations?/delete"
|
| 86 |
+
class="flex w-full flex-col gap-5 p-6"
|
| 87 |
+
>
|
| 88 |
+
<div class="flex items-start justify-between text-xl font-semibold text-gray-800">
|
| 89 |
+
<h2>Are you sure?</h2>
|
| 90 |
+
<button type="button" class="group" on:click={() => (isConfirmingDeletion = false)}>
|
| 91 |
+
<CarbonClose class="text-gray-900 group-hover:text-gray-500" />
|
| 92 |
+
</button>
|
| 93 |
+
</div>
|
| 94 |
+
<p class="text-gray-800">
|
| 95 |
+
This action will delete all your conversations. This cannot be undone.
|
| 96 |
+
</p>
|
| 97 |
+
<button
|
| 98 |
+
type="submit"
|
| 99 |
+
class="mt-2 rounded-full bg-red-700 px-5 py-2 text-lg font-semibold text-gray-100 ring-gray-400 ring-offset-1 transition-all focus-visible:outline-none focus-visible:ring hover:ring"
|
| 100 |
+
>
|
| 101 |
+
Confirm deletion
|
| 102 |
+
</button>
|
| 103 |
+
</form>
|
| 104 |
+
</Modal>
|
| 105 |
+
{/if}
|
| 106 |
+
</div>
|
| 107 |
</Modal>
|
src/routes/conversations/+page.server.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { base } from "$app/paths";
|
| 2 |
+
import { authCondition } from "$lib/server/auth";
|
| 3 |
+
import { collections } from "$lib/server/database";
|
| 4 |
+
import { redirect } from "@sveltejs/kit";
|
| 5 |
+
|
| 6 |
+
export const actions = {
|
| 7 |
+
delete: async function ({ locals }) {
|
| 8 |
+
// double check we have a user to delete conversations for
|
| 9 |
+
if (locals.user?._id || locals.sessionId) {
|
| 10 |
+
await collections.conversations.deleteMany({
|
| 11 |
+
...authCondition(locals),
|
| 12 |
+
});
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
throw redirect(303, `${base}/`);
|
| 16 |
+
},
|
| 17 |
+
};
|