File size: 1,000 Bytes
5523d0b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import type { Persona } from "$lib/types/Persona";

export function resolveDefaultPersonaIds(personas: Persona[]): string[] {
	const defaults = personas
		.filter((persona) => persona.isDefault && !persona.archived)
		.map((persona) => persona.id);

	if (defaults.length > 0) {
		return defaults;
	}

	return personas.filter((persona) => !persona.archived).map((persona) => persona.id);
}

function haveSameMembers(a: string[], b: string[]): boolean {
	if (a.length !== b.length) return false;

	const setB = new Set(b);
	return a.every((value) => setB.has(value));
}

export async function resetActivePersonasToDefaults(
	settings: { instantSet: (settings: { activePersonas: string[] }) => Promise<void> },
	personas: Persona[],
	currentActive: string[]
): Promise<void> {
	const targetIds = resolveDefaultPersonaIds(personas);

	if (targetIds.length === 0) {
		return;
	}

	if (haveSameMembers(currentActive, targetIds)) {
		return;
	}

	await settings.instantSet({ activePersonas: targetIds });
}