mirror of
https://github.com/billsonnn/nitro-react.git
synced 2024-11-22 22:30:52 +01:00
* Room settings filter * Change names * Delete wrong commit Co-authored-by: dank074 <torresefrain10@gmail.com>
This commit is contained in:
parent
9693bcae0b
commit
44f3981ec5
@ -1,5 +1,5 @@
|
|||||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||||
import { NavigatorSearchComposer, RoomMuteComposer, RoomSettingsComposer, SecurityLevel, ToggleStaffPickMessageComposer, UpdateHomeRoomMessageComposer } from '@nitrots/nitro-renderer';
|
import { GetCustomRoomFilterMessageComposer, NavigatorSearchComposer, RoomMuteComposer, RoomSettingsComposer, SecurityLevel, ToggleStaffPickMessageComposer, UpdateHomeRoomMessageComposer } from '@nitrots/nitro-renderer';
|
||||||
import { FC, useEffect, useState } from 'react';
|
import { FC, useEffect, useState } from 'react';
|
||||||
import { CreateLinkEvent, DispatchUiEvent, GetGroupInformation, GetSessionDataManager, LocalizeText, ReportType, SendMessageComposer } from '../../../api';
|
import { CreateLinkEvent, DispatchUiEvent, GetGroupInformation, GetSessionDataManager, LocalizeText, ReportType, SendMessageComposer } from '../../../api';
|
||||||
import { Button, classNames, Column, Flex, LayoutBadgeImageView, LayoutRoomThumbnailView, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text, UserProfileIconView } from '../../../common';
|
import { Button, classNames, Column, Flex, LayoutBadgeImageView, LayoutRoomThumbnailView, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text, UserProfileIconView } from '../../../common';
|
||||||
@ -71,6 +71,9 @@ export const NavigatorRoomInfoView: FC<NavigatorRoomInfoViewProps> = props =>
|
|||||||
setIsRoomMuted(value => !value);
|
setIsRoomMuted(value => !value);
|
||||||
SendMessageComposer(new RoomMuteComposer());
|
SendMessageComposer(new RoomMuteComposer());
|
||||||
return;
|
return;
|
||||||
|
case 'room_filter':
|
||||||
|
SendMessageComposer(new GetCustomRoomFilterMessageComposer(navigatorData.enteredGuestRoom.roomId));
|
||||||
|
return;
|
||||||
case 'open_floorplan_editor':
|
case 'open_floorplan_editor':
|
||||||
CreateLinkEvent('floor-editor/toggle');
|
CreateLinkEvent('floor-editor/toggle');
|
||||||
return;
|
return;
|
||||||
@ -161,6 +164,9 @@ export const NavigatorRoomInfoView: FC<NavigatorRoomInfoViewProps> = props =>
|
|||||||
<Button onClick={ () => processAction('toggle_mute') }>
|
<Button onClick={ () => processAction('toggle_mute') }>
|
||||||
{ LocalizeText(isRoomMuted ? 'navigator.muteall_on' : 'navigator.muteall_off') }
|
{ LocalizeText(isRoomMuted ? 'navigator.muteall_on' : 'navigator.muteall_off') }
|
||||||
</Button>
|
</Button>
|
||||||
|
<Button onClick={ () => processAction('room_filter') }>
|
||||||
|
{ LocalizeText('navigator.roomsettings.roomfilter') }
|
||||||
|
</Button>
|
||||||
<Button onClick={ () => processAction('open_floorplan_editor') }>
|
<Button onClick={ () => processAction('open_floorplan_editor') }>
|
||||||
{ LocalizeText('open.floor.plan.editor') }
|
{ LocalizeText('open.floor.plan.editor') }
|
||||||
</Button>
|
</Button>
|
||||||
|
@ -10,6 +10,7 @@ import { UserChooserWidgetView } from './choosers/UserChooserWidgetView';
|
|||||||
import { DoorbellWidgetView } from './doorbell/DoorbellWidgetView';
|
import { DoorbellWidgetView } from './doorbell/DoorbellWidgetView';
|
||||||
import { FriendRequestWidgetView } from './friend-request/FriendRequestWidgetView';
|
import { FriendRequestWidgetView } from './friend-request/FriendRequestWidgetView';
|
||||||
import { FurnitureWidgetsView } from './furniture/FurnitureWidgetsView';
|
import { FurnitureWidgetsView } from './furniture/FurnitureWidgetsView';
|
||||||
|
import { RoomFilterWordsWidgetView } from './room-filter-words/RoomFilterWordsWidgetView';
|
||||||
import { RoomThumbnailWidgetView } from './room-thumbnail/RoomThumbnailWidgetView';
|
import { RoomThumbnailWidgetView } from './room-thumbnail/RoomThumbnailWidgetView';
|
||||||
import { RoomToolsWidgetView } from './room-tools/RoomToolsWidgetView';
|
import { RoomToolsWidgetView } from './room-tools/RoomToolsWidgetView';
|
||||||
import { WordQuizWidgetView } from './word-quiz/WordQuizWidgetView';
|
import { WordQuizWidgetView } from './word-quiz/WordQuizWidgetView';
|
||||||
@ -158,6 +159,7 @@ export const RoomWidgetsView: FC<{}> = props =>
|
|||||||
<DoorbellWidgetView />
|
<DoorbellWidgetView />
|
||||||
<FurnitureWidgetsView />
|
<FurnitureWidgetsView />
|
||||||
<RoomToolsWidgetView />
|
<RoomToolsWidgetView />
|
||||||
|
<RoomFilterWordsWidgetView />
|
||||||
<RoomThumbnailWidgetView />
|
<RoomThumbnailWidgetView />
|
||||||
<FurniChooserWidgetView />
|
<FurniChooserWidgetView />
|
||||||
<UserChooserWidgetView />
|
<UserChooserWidgetView />
|
||||||
|
@ -0,0 +1,74 @@
|
|||||||
|
import { UpdateRoomFilterMessageComposer } from '@nitrots/nitro-renderer';
|
||||||
|
import { FC, useState } from 'react';
|
||||||
|
import { LocalizeText, SendMessageComposer } from '../../../../api';
|
||||||
|
import { Button, classNames, Column, Flex, Grid, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../../common';
|
||||||
|
import { useFilterWordsWidget, useNavigator } from '../../../../hooks';
|
||||||
|
|
||||||
|
export const RoomFilterWordsWidgetView: FC<{}> = props =>
|
||||||
|
{
|
||||||
|
const [ word, setWord ] = useState<string>('bobba');
|
||||||
|
const [ selectedWord, setSelectedWord ] = useState<string>('');
|
||||||
|
const [ isSelectingWord, setIsSelectingWord ] = useState<boolean>(false);
|
||||||
|
const { wordsFilter = [], isVisible = null, setWordsFilter, onClose = null } = useFilterWordsWidget();
|
||||||
|
const { navigatorData = null } = useNavigator();
|
||||||
|
|
||||||
|
const processAction = (isAddingWord: boolean) =>
|
||||||
|
{
|
||||||
|
if ((isSelectingWord) ? (!selectedWord) : (!word)) return;
|
||||||
|
|
||||||
|
SendMessageComposer(new UpdateRoomFilterMessageComposer(navigatorData.enteredGuestRoom.roomId, isAddingWord, (isSelectingWord ? selectedWord : word)));
|
||||||
|
setSelectedWord('');
|
||||||
|
setWord('bobba');
|
||||||
|
setIsSelectingWord(false);
|
||||||
|
|
||||||
|
if (isAddingWord && wordsFilter.includes((isSelectingWord ? selectedWord : word))) return;
|
||||||
|
|
||||||
|
setWordsFilter(prevValue =>
|
||||||
|
{
|
||||||
|
const newWords = [ ...prevValue ];
|
||||||
|
|
||||||
|
isAddingWord ? newWords.push((isSelectingWord ? selectedWord : word)) : newWords.splice(newWords.indexOf((isSelectingWord ? selectedWord : word)), 1);
|
||||||
|
|
||||||
|
return newWords;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const onTyping = (word: string) =>
|
||||||
|
{
|
||||||
|
setWord(word);
|
||||||
|
setIsSelectingWord(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
const onSelectedWord = (word: string) =>
|
||||||
|
{
|
||||||
|
setSelectedWord(word);
|
||||||
|
setIsSelectingWord(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isVisible) return null;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<NitroCardView className="nitro-guide-tool no-resize" theme="primary-slim">
|
||||||
|
<NitroCardHeaderView headerText={ LocalizeText('navigator.roomsettings.roomfilter') } onCloseClick={ () => onClose() } />
|
||||||
|
<NitroCardContentView className="text-black">
|
||||||
|
<Grid className="d-flex align-items-center justify-content-end gap-2">
|
||||||
|
<input type="text" className="form-control form-control-sm" maxLength={ 255 } value={ word } onChange={ event => onTyping(event.target.value) } />
|
||||||
|
<Button onClick={ () => processAction(true) }>{ LocalizeText('navigator.roomsettings.roomfilter.addword') }</Button>
|
||||||
|
</Grid>
|
||||||
|
<Column overflow="auto" gap={ 0 } className="form-control form-control-sm" style={ { height: '100px' } }>
|
||||||
|
{ wordsFilter && (wordsFilter.length > 0) && wordsFilter.map((word, index) =>
|
||||||
|
{
|
||||||
|
return (
|
||||||
|
<Flex key={ index } alignItems="center" className={ classNames('rounded p-1', (selectedWord === word) && 'bg-muted') } pointer onClick={ event => onSelectedWord(word) }>
|
||||||
|
<Text truncate>{ word }</Text>
|
||||||
|
</Flex>
|
||||||
|
)
|
||||||
|
}) }
|
||||||
|
</Column>
|
||||||
|
<Grid className="d-flex align-items-center justify-content-end gap-2">
|
||||||
|
<Button variant="danger" onClick={ () => processAction(false) } disabled={ wordsFilter.length === 0 || !isSelectingWord }>{ LocalizeText('navigator.roomsettings.roomfilter.removeword') }</Button>
|
||||||
|
</Grid>
|
||||||
|
</NitroCardContentView>
|
||||||
|
</NitroCardView>
|
||||||
|
);
|
||||||
|
};
|
@ -3,6 +3,7 @@ export * from './useAvatarInfoWidget';
|
|||||||
export * from './useChatInputWidget';
|
export * from './useChatInputWidget';
|
||||||
export * from './useChatWidget';
|
export * from './useChatWidget';
|
||||||
export * from './useDoorbellWidget';
|
export * from './useDoorbellWidget';
|
||||||
|
export * from './useFilterWordsWidget';
|
||||||
export * from './useFriendRequestWidget';
|
export * from './useFriendRequestWidget';
|
||||||
export * from './useFurniChooserWidget';
|
export * from './useFurniChooserWidget';
|
||||||
export * from './usePollWidget';
|
export * from './usePollWidget';
|
||||||
|
23
src/hooks/rooms/widgets/useFilterWordsWidget.ts
Normal file
23
src/hooks/rooms/widgets/useFilterWordsWidget.ts
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { RoomFilterSettingsMessageEvent } from '@nitrots/nitro-renderer';
|
||||||
|
import { useState } from 'react';
|
||||||
|
import { useMessageEvent } from '../../events';
|
||||||
|
|
||||||
|
const useFilterWordsWidgetState = () =>
|
||||||
|
{
|
||||||
|
const [ wordsFilter, setWordsFilter ] = useState<string[]>(null);
|
||||||
|
const [ isVisible, setIsVisible ] = useState<boolean>(false);
|
||||||
|
|
||||||
|
const onClose = () => setIsVisible(false);
|
||||||
|
|
||||||
|
useMessageEvent<RoomFilterSettingsMessageEvent>(RoomFilterSettingsMessageEvent, event =>
|
||||||
|
{
|
||||||
|
const parser = event.getParser();
|
||||||
|
|
||||||
|
setIsVisible(true);
|
||||||
|
setWordsFilter(parser.words);
|
||||||
|
});
|
||||||
|
|
||||||
|
return { wordsFilter, isVisible, setWordsFilter, onClose };
|
||||||
|
}
|
||||||
|
|
||||||
|
export const useFilterWordsWidget = useFilterWordsWidgetState;
|
Loading…
Reference in New Issue
Block a user