nsarrazin HF staff commited on
Commit
4e58dda
1 Parent(s): 2d45a3c

Add checkbox for displaying emojis in sidebar (#520)

Browse files

* Add settings for displaying emojis in sidebar

* updated wording

src/lib/components/SettingsModal.svelte CHANGED
@@ -75,6 +75,14 @@
75
  </ul>
76
  </div>
77
  {/if}
 
 
 
 
 
 
 
 
78
  <form
79
  method="post"
80
  action="{base}/conversations?/delete"
 
75
  </ul>
76
  </div>
77
  {/if}
78
+ <label class="flex cursor-pointer select-none items-center gap-2 text-sm text-gray-500">
79
+ <input
80
+ type="checkbox"
81
+ name="hideEmojiOnSidebar"
82
+ bind:checked={settings.hideEmojiOnSidebar}
83
+ />
84
+ Show emoticons in conversation topics
85
+ </label>
86
  <form
87
  method="post"
88
  action="{base}/conversations?/delete"
src/lib/types/Settings.ts CHANGED
@@ -14,6 +14,7 @@ export interface Settings extends Timestamps {
14
  shareConversationsWithModelAuthors: boolean;
15
  ethicsModalAcceptedAt: Date | null;
16
  activeModel: string;
 
17
 
18
  // model name and system prompts
19
  customPrompts?: Record<string, string>;
 
14
  shareConversationsWithModelAuthors: boolean;
15
  ethicsModalAcceptedAt: Date | null;
16
  activeModel: string;
17
+ hideEmojiOnSidebar?: boolean;
18
 
19
  // model name and system prompts
20
  customPrompts?: Record<string, string>;
src/routes/+layout.server.ts CHANGED
@@ -71,7 +71,7 @@ export const load: LayoutServerLoad = async ({ locals, depends, url }) => {
71
  })
72
  .map((conv) => ({
73
  id: conv._id.toString(),
74
- title: conv.title,
75
  model: conv.model ?? defaultModel,
76
  }))
77
  .toArray(),
@@ -81,6 +81,7 @@ export const load: LayoutServerLoad = async ({ locals, depends, url }) => {
81
  DEFAULT_SETTINGS.shareConversationsWithModelAuthors,
82
  ethicsModalAcceptedAt: settings?.ethicsModalAcceptedAt ?? null,
83
  activeModel: settings?.activeModel ?? DEFAULT_SETTINGS.activeModel,
 
84
  searchEnabled: !!(SERPAPI_KEY || SERPER_API_KEY),
85
  customPrompts: settings?.customPrompts ?? {},
86
  },
 
71
  })
72
  .map((conv) => ({
73
  id: conv._id.toString(),
74
+ title: settings?.hideEmojiOnSidebar ? conv.title.replace(/\p{Emoji}/gu, "") : conv.title,
75
  model: conv.model ?? defaultModel,
76
  }))
77
  .toArray(),
 
81
  DEFAULT_SETTINGS.shareConversationsWithModelAuthors,
82
  ethicsModalAcceptedAt: settings?.ethicsModalAcceptedAt ?? null,
83
  activeModel: settings?.activeModel ?? DEFAULT_SETTINGS.activeModel,
84
+ hideEmojiOnSidebar: settings?.hideEmojiOnSidebar ?? false,
85
  searchEnabled: !!(SERPAPI_KEY || SERPER_API_KEY),
86
  customPrompts: settings?.customPrompts ?? {},
87
  },
src/routes/settings/+page.server.ts CHANGED
@@ -6,22 +6,26 @@ import { models, validateModel } from "$lib/server/models";
6
  import { authCondition } from "$lib/server/auth";
7
  import { DEFAULT_SETTINGS } from "$lib/types/Settings";
8
 
 
 
 
 
 
 
9
  export const actions = {
10
  default: async function ({ request, locals }) {
11
  const formData = await request.formData();
12
 
13
  const { ethicsModalAccepted, ...settings } = z
14
  .object({
15
- shareConversationsWithModelAuthors: z
16
- .union([z.literal("true"), z.literal("on"), z.literal("false"), z.null()])
17
- .transform((value) => {
18
- return value === "true" || value === "on";
19
- }),
20
  ethicsModalAccepted: z.boolean({ coerce: true }).optional(),
21
  activeModel: validateModel(models),
22
  customPrompts: z.record(z.string()).default({}),
23
  })
24
  .parse({
 
25
  shareConversationsWithModelAuthors: formData.get("shareConversationsWithModelAuthors"),
26
  ethicsModalAccepted: formData.get("ethicsModalAccepted"),
27
  activeModel: formData.get("activeModel") ?? DEFAULT_SETTINGS.activeModel,
 
6
  import { authCondition } from "$lib/server/auth";
7
  import { DEFAULT_SETTINGS } from "$lib/types/Settings";
8
 
9
+ const booleanFormObject = z
10
+ .union([z.literal("true"), z.literal("on"), z.literal("false"), z.null()])
11
+ .transform((value) => {
12
+ return value === "true" || value === "on";
13
+ });
14
+
15
  export const actions = {
16
  default: async function ({ request, locals }) {
17
  const formData = await request.formData();
18
 
19
  const { ethicsModalAccepted, ...settings } = z
20
  .object({
21
+ shareConversationsWithModelAuthors: booleanFormObject,
22
+ hideEmojiOnSidebar: booleanFormObject,
 
 
 
23
  ethicsModalAccepted: z.boolean({ coerce: true }).optional(),
24
  activeModel: validateModel(models),
25
  customPrompts: z.record(z.string()).default({}),
26
  })
27
  .parse({
28
+ hideEmojiOnSidebar: formData.get("hideEmojiOnSidebar"),
29
  shareConversationsWithModelAuthors: formData.get("shareConversationsWithModelAuthors"),
30
  ethicsModalAccepted: formData.get("ethicsModalAccepted"),
31
  activeModel: formData.get("activeModel") ?? DEFAULT_SETTINGS.activeModel,