From ee6875b95c9af8fb3e09969af7315cc7dbc50827 Mon Sep 17 00:00:00 2001 From: Tymek Date: Sun, 15 Feb 2026 01:31:30 +0100 Subject: [PATCH] Move enums to `types.ts` and change icons selection to use `getRoomIconSrc` --- .../create-room/CreateRoomKindSelector.tsx | 6 +----- .../create-room/CreateRoomVoiceSelector.tsx | 5 +---- src/app/components/create-room/index.ts | 1 + src/app/components/create-room/types.ts | 10 ++++++++++ src/app/components/create-room/utils.ts | 2 +- src/app/features/create-room/CreateRoom.tsx | 19 ++++++++++--------- .../features/create-room/CreateRoomModal.tsx | 3 +-- src/app/features/lobby/SpaceItem.tsx | 2 +- src/app/state/createRoomModal.ts | 2 +- src/app/state/hooks/createRoomModal.ts | 2 +- 10 files changed, 28 insertions(+), 24 deletions(-) create mode 100644 src/app/components/create-room/types.ts diff --git a/src/app/components/create-room/CreateRoomKindSelector.tsx b/src/app/components/create-room/CreateRoomKindSelector.tsx index 096954fb..ebc55e7f 100644 --- a/src/app/components/create-room/CreateRoomKindSelector.tsx +++ b/src/app/components/create-room/CreateRoomKindSelector.tsx @@ -2,12 +2,8 @@ import React from 'react'; import { Box, Text, Icon, Icons, config, IconSrc } from 'folds'; import { SequenceCard } from '../sequence-card'; import { SettingTile } from '../setting-tile'; +import { CreateRoomKind } from './types'; -export enum CreateRoomKind { - Private = 'private', - Restricted = 'restricted', - Public = 'public', -} type CreateRoomKindSelectorProps = { value?: CreateRoomKind; onSelect: (value: CreateRoomKind) => void; diff --git a/src/app/components/create-room/CreateRoomVoiceSelector.tsx b/src/app/components/create-room/CreateRoomVoiceSelector.tsx index 9ed2a0f8..f3862db2 100644 --- a/src/app/components/create-room/CreateRoomVoiceSelector.tsx +++ b/src/app/components/create-room/CreateRoomVoiceSelector.tsx @@ -2,11 +2,8 @@ import React from 'react'; import { Box, Text, Icon, Icons, config, IconSrc } from 'folds'; import { SequenceCard } from '../sequence-card'; import { SettingTile } from '../setting-tile'; +import { CreateRoomVoice } from './types'; -export enum CreateRoomVoice { - TextRoom = 'text', - VoiceRoom = 'voice', -} type CreateRoomVoiceSelectorProps = { value?: CreateRoomVoice; onSelect: (value: CreateRoomVoice) => void; diff --git a/src/app/components/create-room/index.ts b/src/app/components/create-room/index.ts index ffd9cb3d..a9c603b2 100644 --- a/src/app/components/create-room/index.ts +++ b/src/app/components/create-room/index.ts @@ -3,3 +3,4 @@ export * from './CreateRoomAliasInput'; export * from './RoomVersionSelector'; export * from './utils'; export * from './AdditionalCreatorInput'; +export * from './types'; diff --git a/src/app/components/create-room/types.ts b/src/app/components/create-room/types.ts new file mode 100644 index 00000000..e35af47a --- /dev/null +++ b/src/app/components/create-room/types.ts @@ -0,0 +1,10 @@ +export enum CreateRoomVoice { + TextRoom = 'text', + VoiceRoom = 'voice', +} + +export enum CreateRoomKind { + Private = 'private', + Restricted = 'restricted', + Public = 'public', +} diff --git a/src/app/components/create-room/utils.ts b/src/app/components/create-room/utils.ts index f10adf21..3d702f2a 100644 --- a/src/app/components/create-room/utils.ts +++ b/src/app/components/create-room/utils.ts @@ -7,11 +7,11 @@ import { Room, } from 'matrix-js-sdk'; import { RoomJoinRulesEventContent } from 'matrix-js-sdk/lib/types'; -import { CreateRoomKind } from './CreateRoomKindSelector'; import { RoomType, StateEvent } from '../../../types/matrix/room'; import { getViaServers } from '../../plugins/via-servers'; import { getMxIdServer } from '../../utils/matrix'; import { IPowerLevels } from '../../hooks/usePowerLevels'; +import { CreateRoomKind } from './types'; export const createRoomCreationContent = ( type: RoomType | undefined, diff --git a/src/app/features/create-room/CreateRoom.tsx b/src/app/features/create-room/CreateRoom.tsx index d607640e..9cc8bee8 100644 --- a/src/app/features/create-room/CreateRoom.tsx +++ b/src/app/features/create-room/CreateRoom.tsx @@ -1,5 +1,5 @@ import React, { FormEventHandler, useCallback, useEffect, useState } from 'react'; -import { MatrixError, Room } from 'matrix-js-sdk'; +import { MatrixError, Room, JoinRule } from 'matrix-js-sdk'; import { Box, Button, @@ -37,20 +37,21 @@ import { CreateRoomKindSelector, RoomVersionSelector, useAdditionalCreators, + CreateRoomVoice, } from '../../components/create-room'; import { RoomType, StateEvent } from '../../../types/matrix/room'; import { IPowerLevels } from '../../hooks/usePowerLevels'; -import { - CreateRoomVoice, - CreateRoomVoiceSelector, -} from '../../components/create-room/CreateRoomVoiceSelector'; +import { CreateRoomVoiceSelector } from '../../components/create-room/CreateRoomVoiceSelector'; +import { getRoomIconSrc } from '../../utils/room'; const getCreateRoomKindToIcon = (kind: CreateRoomKind, voice?: CreateRoomVoice) => { const isVoiceRoom = voice === CreateRoomVoice.VoiceRoom; - // TODO: Add VoiceLock and VoiceGlobe icons - if (kind === CreateRoomKind.Private) return isVoiceRoom ? Icons.Lock : Icons.HashLock; - if (kind === CreateRoomKind.Restricted) return isVoiceRoom ? Icons.VolumeHigh : Icons.Hash; - return isVoiceRoom ? Icons.VolumeHigh : Icons.HashGlobe; + + let joinRule: JoinRule = JoinRule.Public; + if (kind === CreateRoomKind.Restricted) joinRule = JoinRule.Restricted; + if (kind === CreateRoomKind.Private) joinRule = JoinRule.Knock; + + return getRoomIconSrc(Icons, isVoiceRoom ? RoomType.Call : undefined, joinRule); }; const getCreateRoomVoiceToIcon = (kind: CreateRoomVoice) => { diff --git a/src/app/features/create-room/CreateRoomModal.tsx b/src/app/features/create-room/CreateRoomModal.tsx index 8b74eafb..5fa9b6ca 100644 --- a/src/app/features/create-room/CreateRoomModal.tsx +++ b/src/app/features/create-room/CreateRoomModal.tsx @@ -23,14 +23,13 @@ import { } from '../../state/hooks/createRoomModal'; import { CreateRoomModalState } from '../../state/createRoomModal'; import { stopPropagation } from '../../utils/keyboard'; -import { CreateRoomVoice } from '../../components/create-room/CreateRoomVoiceSelector'; +import { CreateRoomVoice } from '../../components/create-room/types'; type CreateRoomModalProps = { state: CreateRoomModalState; }; function CreateRoomModal({ state }: CreateRoomModalProps) { const { spaceId, voice } = state; - console.log({ voice }); const closeDialog = useCloseCreateRoomModal(); const allJoinedRooms = useAllJoinedRoomsSet(); diff --git a/src/app/features/lobby/SpaceItem.tsx b/src/app/features/lobby/SpaceItem.tsx index fbc906b0..3dfbbdea 100644 --- a/src/app/features/lobby/SpaceItem.tsx +++ b/src/app/features/lobby/SpaceItem.tsx @@ -36,7 +36,7 @@ import { useMediaAuthentication } from '../../hooks/useMediaAuthentication'; import { useOpenCreateRoomModal } from '../../state/hooks/createRoomModal'; import { useOpenCreateSpaceModal } from '../../state/hooks/createSpaceModal'; import { AddExistingModal } from '../add-existing'; -import { CreateRoomVoice } from '../../components/create-room/CreateRoomVoiceSelector'; +import { CreateRoomVoice } from '../../components/create-room/types'; function SpaceProfileLoading() { return ( diff --git a/src/app/state/createRoomModal.ts b/src/app/state/createRoomModal.ts index 69a79f27..3d1a6803 100644 --- a/src/app/state/createRoomModal.ts +++ b/src/app/state/createRoomModal.ts @@ -1,5 +1,5 @@ import { atom } from 'jotai'; -import { CreateRoomVoice } from '../components/create-room/CreateRoomVoiceSelector'; +import { CreateRoomVoice } from '../components/create-room/types'; export type CreateRoomModalState = { spaceId?: string; diff --git a/src/app/state/hooks/createRoomModal.ts b/src/app/state/hooks/createRoomModal.ts index 7e6151ff..dfb15017 100644 --- a/src/app/state/hooks/createRoomModal.ts +++ b/src/app/state/hooks/createRoomModal.ts @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { useAtomValue, useSetAtom } from 'jotai'; import { createRoomModalAtom, CreateRoomModalState } from '../createRoomModal'; -import { CreateRoomVoice } from '../../components/create-room/CreateRoomVoiceSelector'; +import { CreateRoomVoice } from '../../components/create-room/types'; export const useCreateRoomModalState = (): CreateRoomModalState | undefined => { const data = useAtomValue(createRoomModalAtom);