fix: auto-select myself as new stream's member
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import { useState, useEffect, useRef, useCallback } from "react";
|
import { useState, useCallback } from "react";
|
||||||
import { useNetworks } from "@/hooks/use-networks";
|
import { useNetworks } from "@/hooks/use-networks";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn, removeDuplicates } from "@/lib/utils";
|
||||||
|
import { useAuthStore } from "@/stores/auth-store";
|
||||||
import { generateRandomName } from "@/lib/random-name";
|
import { generateRandomName } from "@/lib/random-name";
|
||||||
import { Input } from "@/components/ui/input";
|
import { Input } from "@/components/ui/input";
|
||||||
import { Label } from "@/components/ui/label";
|
import { Label } from "@/components/ui/label";
|
||||||
@@ -20,12 +21,14 @@ export function ConfigureStreamStep({
|
|||||||
}: ConfigureStreamStepProps) {
|
}: ConfigureStreamStepProps) {
|
||||||
const { data: networks } = useNetworks();
|
const { data: networks } = useNetworks();
|
||||||
const network = networks?.find((n) => n.id === networkId);
|
const network = networks?.find((n) => n.id === networkId);
|
||||||
const members = network?.humans ?? [];
|
|
||||||
|
|
||||||
const [name, setName] = useState(() => generateRandomName());
|
const [name, setName] = useState(() => generateRandomName());
|
||||||
const [everyone, setEveryone] = useState(true);
|
const [everyone, setEveryone] = useState(true);
|
||||||
|
const userEmail = useAuthStore((s) => s.user?.email);
|
||||||
const [selectedEmails, setSelectedEmails] = useState<Set<string>>(new Set());
|
const [selectedEmails, setSelectedEmails] = useState<Set<string>>(new Set());
|
||||||
|
|
||||||
|
const members = (network?.humans ?? []).filter((h) => h.email !== userEmail);
|
||||||
|
|
||||||
const toggleMember = useCallback((email: string) => {
|
const toggleMember = useCallback((email: string) => {
|
||||||
setSelectedEmails((prev) => {
|
setSelectedEmails((prev) => {
|
||||||
const next = new Set(prev);
|
const next = new Set(prev);
|
||||||
@@ -37,8 +40,9 @@ export function ConfigureStreamStep({
|
|||||||
|
|
||||||
const buildVisibleTo = useCallback((): string[] => {
|
const buildVisibleTo = useCallback((): string[] => {
|
||||||
if (everyone && networkId) return [`network:${networkId}`];
|
if (everyone && networkId) return [`network:${networkId}`];
|
||||||
return Array.from(selectedEmails).map((e) => `human:${e}`);
|
|
||||||
}, [everyone, networkId, selectedEmails]);
|
return Array.from(removeDuplicates([...selectedEmails, userEmail])).map((e) => `human:${e}`);
|
||||||
|
}, [everyone, networkId, selectedEmails, userEmail]);
|
||||||
|
|
||||||
const handleSubmit = useCallback(() => {
|
const handleSubmit = useCallback(() => {
|
||||||
if (!name.trim() || !networkId) return;
|
if (!name.trim() || !networkId) return;
|
||||||
@@ -61,7 +65,7 @@ export function ConfigureStreamStep({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[onCancel, handleSubmit, members, name, toggleMember],
|
[onCancel, handleSubmit],
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -9,3 +9,7 @@ export function getInitials(email: string): string {
|
|||||||
const prefix = email.split("@")[0] ?? "";
|
const prefix = email.split("@")[0] ?? "";
|
||||||
return prefix.slice(0, 2).toUpperCase();
|
return prefix.slice(0, 2).toUpperCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function removeDuplicates<T>(array: T[]): T[] {
|
||||||
|
return [...new Set(array)];
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user