Chats: make chatsExpiration a conditional feature

This commit is contained in:
Alex Gleason 2022-11-02 13:58:02 -05:00
parent 239b2af553
commit 69d92b6f95
No known key found for this signature in database
GPG Key ID: 7211D1F99744FBB7
3 changed files with 54 additions and 42 deletions

View File

@ -7,7 +7,7 @@ import List, { ListItem } from 'soapbox/components/list';
import { Avatar, HStack, Icon, IconButton, Menu, MenuButton, MenuItem, MenuList, Stack, Text } from 'soapbox/components/ui'; import { Avatar, HStack, Icon, IconButton, Menu, MenuButton, MenuItem, MenuList, Stack, Text } from 'soapbox/components/ui';
import VerificationBadge from 'soapbox/components/verification_badge'; import VerificationBadge from 'soapbox/components/verification_badge';
import { useChatContext } from 'soapbox/contexts/chat-context'; import { useChatContext } from 'soapbox/contexts/chat-context';
import { useAppDispatch, useAppSelector } from 'soapbox/hooks'; import { useAppDispatch, useAppSelector, useFeatures } from 'soapbox/hooks';
import { MessageExpirationValues, useChatActions } from 'soapbox/queries/chats'; import { MessageExpirationValues, useChatActions } from 'soapbox/queries/chats';
import { secondsToDays } from 'soapbox/utils/numbers'; import { secondsToDays } from 'soapbox/utils/numbers';
@ -41,6 +41,7 @@ const messages = defineMessages({
const ChatPageMain = () => { const ChatPageMain = () => {
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const intl = useIntl(); const intl = useIntl();
const features = useFeatures();
const inputRef = useRef<HTMLTextAreaElement | null>(null); const inputRef = useRef<HTMLTextAreaElement | null>(null);
@ -138,32 +139,34 @@ const ChatPageMain = () => {
</Stack> </Stack>
</HStack> </HStack>
<List> {features.chatsExpiration && (
<ListItem <List>
label={intl.formatMessage(messages.autoDeleteLabel)} <ListItem
hint={intl.formatMessage(messages.autoDeleteHint)} label={intl.formatMessage(messages.autoDeleteLabel)}
/> hint={intl.formatMessage(messages.autoDeleteHint)}
<ListItem />
label={intl.formatMessage(messages.autoDelete7Days)} <ListItem
onSelect={() => handleUpdateChat(MessageExpirationValues.SEVEN)} label={intl.formatMessage(messages.autoDelete7Days)}
isSelected={chat.message_expiration === MessageExpirationValues.SEVEN} onSelect={() => handleUpdateChat(MessageExpirationValues.SEVEN)}
/> isSelected={chat.message_expiration === MessageExpirationValues.SEVEN}
<ListItem />
label={intl.formatMessage(messages.autoDelete14Days)} <ListItem
onSelect={() => handleUpdateChat(MessageExpirationValues.FOURTEEN)} label={intl.formatMessage(messages.autoDelete14Days)}
isSelected={chat.message_expiration === MessageExpirationValues.FOURTEEN} onSelect={() => handleUpdateChat(MessageExpirationValues.FOURTEEN)}
/> isSelected={chat.message_expiration === MessageExpirationValues.FOURTEEN}
<ListItem />
label={intl.formatMessage(messages.autoDelete30Days)} <ListItem
onSelect={() => handleUpdateChat(MessageExpirationValues.THIRTY)} label={intl.formatMessage(messages.autoDelete30Days)}
isSelected={chat.message_expiration === MessageExpirationValues.THIRTY} onSelect={() => handleUpdateChat(MessageExpirationValues.THIRTY)}
/> isSelected={chat.message_expiration === MessageExpirationValues.THIRTY}
<ListItem />
label={intl.formatMessage(messages.autoDelete90Days)} <ListItem
onSelect={() => handleUpdateChat(MessageExpirationValues.NINETY)} label={intl.formatMessage(messages.autoDelete90Days)}
isSelected={chat.message_expiration === MessageExpirationValues.NINETY} onSelect={() => handleUpdateChat(MessageExpirationValues.NINETY)}
/> isSelected={chat.message_expiration === MessageExpirationValues.NINETY}
</List> />
</List>
)}
<Stack space={2}> <Stack space={2}>
<MenuItem <MenuItem

View File

@ -6,7 +6,7 @@ import { openModal } from 'soapbox/actions/modals';
import List, { ListItem } from 'soapbox/components/list'; import List, { ListItem } from 'soapbox/components/list';
import { Avatar, HStack, Icon, Select, Stack, Text } from 'soapbox/components/ui'; import { Avatar, HStack, Icon, Select, Stack, Text } from 'soapbox/components/ui';
import { useChatContext } from 'soapbox/contexts/chat-context'; import { useChatContext } from 'soapbox/contexts/chat-context';
import { useAppDispatch, useAppSelector } from 'soapbox/hooks'; import { useAppDispatch, useAppSelector, useFeatures } from 'soapbox/hooks';
import { messageExpirationOptions, MessageExpirationValues, useChatActions } from 'soapbox/queries/chats'; import { messageExpirationOptions, MessageExpirationValues, useChatActions } from 'soapbox/queries/chats';
import { secondsToDays } from 'soapbox/utils/numbers'; import { secondsToDays } from 'soapbox/utils/numbers';
@ -33,6 +33,7 @@ const messages = defineMessages({
const ChatSettings = () => { const ChatSettings = () => {
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const intl = useIntl(); const intl = useIntl();
const features = useFeatures();
const { chat, setEditing, toggleChatPane } = useChatContext(); const { chat, setEditing, toggleChatPane } = useChatContext();
const { deleteChat, updateChat } = useChatActions(chat?.id as string); const { deleteChat, updateChat } = useChatActions(chat?.id as string);
@ -113,21 +114,23 @@ const ChatSettings = () => {
</Stack> </Stack>
</HStack> </HStack>
<List> {features.chatsExpiration && (
<ListItem label={intl.formatMessage(messages.autoDeleteLabel)}> <List>
<Select defaultValue={chat.message_expiration} onChange={(event) => handleUpdateChat(Number(event.target.value))}> <ListItem label={intl.formatMessage(messages.autoDeleteLabel)}>
{messageExpirationOptions.map((duration) => { <Select defaultValue={chat.message_expiration} onChange={(event) => handleUpdateChat(Number(event.target.value))}>
const inDays = secondsToDays(duration); {messageExpirationOptions.map((duration) => {
const inDays = secondsToDays(duration);
return ( return (
<option key={duration} value={duration}> <option key={duration} value={duration}>
{intl.formatMessage(messages.autoDeleteDays, { day: inDays })} {intl.formatMessage(messages.autoDeleteDays, { day: inDays })}
</option> </option>
); );
})} })}
</Select> </Select>
</ListItem> </ListItem>
</List> </List>
)}
<Stack space={5}> <Stack space={5}>
<button onClick={isBlocking ? handleUnblockUser : handleBlockUser} className='w-full flex items-center space-x-2 font-bold text-sm text-primary-600 dark:text-accent-blue'> <button onClick={isBlocking ? handleUnblockUser : handleBlockUser} className='w-full flex items-center space-x-2 font-bold text-sm text-primary-600 dark:text-accent-blue'>

View File

@ -204,6 +204,12 @@ const getInstanceFeatures = (instance: Instance) => {
*/ */
chats: v.software === TRUTHSOCIAL || (v.software === PLEROMA && gte(v.version, '2.1.0')), chats: v.software === TRUTHSOCIAL || (v.software === PLEROMA && gte(v.version, '2.1.0')),
/**
* Ability to set disappearing messages on chats.
* @see PATCH /api/v1/pleroma/chats/:id
*/
chatsExpiration: v.software === TRUTHSOCIAL,
/** /**
* Ability to search among chats. * Ability to search among chats.
* @see GET /api/v1/pleroma/chats * @see GET /api/v1/pleroma/chats