Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions pandora-client-web/src/common/useSpaceList.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { noop } from 'lodash-es';
import { EMPTY, type SpaceListInfo } from 'pandora-common';
import { useState, useCallback } from 'react';
import { useDirectoryConnector, useDirectoryChangeListener } from '../components/gameContext/directoryConnectorContextProvider.tsx';

export function useSpacesList(): SpaceListInfo[] | undefined {
const [data, setData] = useState<SpaceListInfo[]>();
const directoryConnector = useDirectoryConnector();

const fetchData = useCallback(async () => {
const result = await directoryConnector.awaitResponse('listSpaces', EMPTY);
if (result && result.spaces) {
setData(result.spaces);
}
}, [directoryConnector]);

useDirectoryChangeListener('spaceList', () => {
fetchData().catch(noop);
});

return data;
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import { DirectMessages } from '../directMessages/directMessages.tsx';
import { useDirectoryConnector } from '../gameContext/directoryConnectorContextProvider.tsx';
import { AccountContactChangeHandleResult, useAccountContacts, useFriendStatus } from './accountContactContext.ts';
import './accountContacts.scss';
import { useSpacesList } from '../../common/useSpaceList.ts';

export function AccountContacts() {
const navigate = useNavigatePandora();
Expand Down Expand Up @@ -272,6 +273,7 @@ function FriendRow({
const confirm = useConfirmDialog();
const navigate = useNavigatePandora();
const location = useLocation();
const spaceInfoMap = new Map((useSpacesList() ?? []).map((s) => [s.id, { ...s }]));

const [unfriend, processing] = useAsyncEvent(async () => {
if (await confirm('Confirm removal', `Are you sure you want to remove ${displayName} from your contacts list?`)) {
Expand Down Expand Up @@ -313,7 +315,7 @@ function FriendRow({
</span>
</Row>
</td>
<td>{ characters?.map((c) => c.name).join(', ') }</td>
<td>{ characters?.map((c) => `${c.name} (${c.space ? spaceInfoMap.get(c.space)?.name ?? 'Unknown' : 'Private Space'})`).join(', ') }</td>
<td>{ new Date(time).toLocaleDateString() }</td>
<td>
<DivContainer direction='row' gap='small'>
Expand Down
25 changes: 3 additions & 22 deletions pandora-client-web/src/ui/screens/spacesSearch/spacesSearch.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import classNames from 'classnames';
import { noop } from 'lodash-es';
import {
AssertNotNullable,
EMPTY,
SpaceListExtendedInfo,
SpaceListInfo,
type SpacePublicSetting,
} from 'pandora-common';
import { ReactElement, useCallback, useEffect, useMemo, useReducer, useState } from 'react';
import { ReactElement, useEffect, useMemo, useReducer, useState } from 'react';
import { Navigate } from 'react-router';
import closedDoorLocked from '../../../assets/icons/closed-door-locked.svg';
import closedDoor from '../../../assets/icons/closed-door.svg';
Expand All @@ -16,7 +14,7 @@ import publicDoor from '../../../assets/icons/public-door.svg';
import { Button } from '../../../components/common/button/button.tsx';
import { Column, Row } from '../../../components/common/container/container.tsx';
import { ModalDialog } from '../../../components/dialog/dialog.tsx';
import { useDirectoryChangeListener, useDirectoryConnector } from '../../../components/gameContext/directoryConnectorContextProvider.tsx';
import { useDirectoryConnector } from '../../../components/gameContext/directoryConnectorContextProvider.tsx';
import { useSpaceInfo } from '../../../components/gameContext/gameStateContextProvider.tsx';
import { ContextHelpButton } from '../../../components/help/contextHelpButton.tsx';
import { useObservable } from '../../../observable.ts';
Expand All @@ -26,6 +24,7 @@ import { useIsNarrowScreen } from '../../../styles/mediaQueries.ts';
import { SpaceDetails } from './spaceDetails.tsx';
import './spacesSearch.scss';
import { useSpaceExtendedInfo } from './useSpaceExtendedInfo.tsx';
import { useSpacesList } from '../../../common/useSpaceList.ts';

const TIPS: readonly string[] = [
`You can move your character inside a room by dragging the character name below her.`,
Expand Down Expand Up @@ -315,21 +314,3 @@ function SpaceDetailsDialog({ baseInfo, hide }: {
</ModalDialog>
);
}

function useSpacesList(): SpaceListInfo[] | undefined {
const [data, setData] = useState<SpaceListInfo[]>();
const directoryConnector = useDirectoryConnector();

const fetchData = useCallback(async () => {
const result = await directoryConnector.awaitResponse('listSpaces', EMPTY);
if (result && result.spaces) {
setData(result.spaces);
}
}, [directoryConnector]);

useDirectoryChangeListener('spaceList', () => {
fetchData().catch(noop);
});

return data;
}