Andrew commited on
Commit
5523d0b
·
1 Parent(s): f3975dd

feat(utils): add utility to reset active personas to defaults

Browse files
Files changed (1) hide show
  1. src/lib/utils/personaDefaults.ts +38 -0
src/lib/utils/personaDefaults.ts ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import type { Persona } from "$lib/types/Persona";
2
+
3
+ export function resolveDefaultPersonaIds(personas: Persona[]): string[] {
4
+ const defaults = personas
5
+ .filter((persona) => persona.isDefault && !persona.archived)
6
+ .map((persona) => persona.id);
7
+
8
+ if (defaults.length > 0) {
9
+ return defaults;
10
+ }
11
+
12
+ return personas.filter((persona) => !persona.archived).map((persona) => persona.id);
13
+ }
14
+
15
+ function haveSameMembers(a: string[], b: string[]): boolean {
16
+ if (a.length !== b.length) return false;
17
+
18
+ const setB = new Set(b);
19
+ return a.every((value) => setB.has(value));
20
+ }
21
+
22
+ export async function resetActivePersonasToDefaults(
23
+ settings: { instantSet: (settings: { activePersonas: string[] }) => Promise<void> },
24
+ personas: Persona[],
25
+ currentActive: string[]
26
+ ): Promise<void> {
27
+ const targetIds = resolveDefaultPersonaIds(personas);
28
+
29
+ if (targetIds.length === 0) {
30
+ return;
31
+ }
32
+
33
+ if (haveSameMembers(currentActive, targetIds)) {
34
+ return;
35
+ }
36
+
37
+ await settings.instantSet({ activePersonas: targetIds });
38
+ }