Prevent duplicate server display during profile transitions
This commit is contained in:
@@ -167,6 +167,7 @@ interface ServerPickerProps {
|
||||
prompt: boolean;
|
||||
leaving: boolean;
|
||||
revealVersion: number;
|
||||
anchorServerId?: string;
|
||||
onSelect: (id: string) => unknown;
|
||||
}
|
||||
|
||||
@@ -179,6 +180,7 @@ export function ServerPicker({
|
||||
prompt,
|
||||
leaving,
|
||||
revealVersion,
|
||||
anchorServerId = '',
|
||||
onSelect,
|
||||
}: ServerPickerProps) {
|
||||
const favoritesKey = `${FAVORITES_KEY}:${profileId}`;
|
||||
@@ -207,7 +209,7 @@ export function ServerPicker({
|
||||
if (view === 'recent') return recent.flatMap((id) => found.find((server) => server.id === id) || []);
|
||||
return found;
|
||||
}, [servers, query, view, favorites, recent]);
|
||||
const results = filtered.filter(({ id }) => id !== selectedServerId);
|
||||
const results = filtered.filter(({ id }) => id !== selectedServerId && id !== anchorServerId);
|
||||
const pageCount = Math.max(1, Math.ceil(results.length / SERVER_RESULT_WINDOW));
|
||||
const visible = results.slice(page * SERVER_RESULT_WINDOW, (page + 1) * SERVER_RESULT_WINDOW);
|
||||
const grouped = servers.length >= 10;
|
||||
@@ -282,7 +284,7 @@ export function ServerPicker({
|
||||
<ServerCheckButton checking={checking} onClick={checkVisible} />
|
||||
</div>
|
||||
<div className="client-server-grid">
|
||||
<ServerRow
|
||||
{servers[0].id !== anchorServerId && <ServerRow
|
||||
server={servers[0]}
|
||||
selected={servers[0].id === selectedServerId}
|
||||
favorite={false}
|
||||
@@ -290,7 +292,7 @@ export function ServerPicker({
|
||||
disabled={disabled}
|
||||
index={0}
|
||||
onSelect={onSelect}
|
||||
/>
|
||||
/>}
|
||||
</div>
|
||||
</section>;
|
||||
}
|
||||
@@ -310,8 +312,8 @@ export function ServerPicker({
|
||||
));
|
||||
|
||||
const simpleServers = [
|
||||
...(selected ? [selected] : []),
|
||||
...servers.filter(({ id }) => id !== selectedServerId),
|
||||
...(selected && selected.id !== anchorServerId ? [selected] : []),
|
||||
...servers.filter(({ id }) => id !== selectedServerId && id !== anchorServerId),
|
||||
].slice(0, SIMPLE_SERVER_LIMIT);
|
||||
|
||||
return <section className={`client-servers is-scalable${servers.length <= SIMPLE_SERVER_LIMIT ? ' is-short' : ''}`} aria-label="Выберите сервер">
|
||||
@@ -403,7 +405,7 @@ export function ServerPicker({
|
||||
fallback={autoActive ? undefined : 'Первый стабильный сервер'}
|
||||
/>
|
||||
</button>
|
||||
{selected && <ServerRow
|
||||
{selected && selected.id !== anchorServerId && <ServerRow
|
||||
server={selected}
|
||||
selected
|
||||
favorite={favorites.includes(selected.id)}
|
||||
|
||||
Reference in New Issue
Block a user