Skip to content

Commit b624b5b

Browse files
Merge branch 'develop' into chore/CORE-1415-changeset
2 parents e3fb635 + 2050d1d commit b624b5b

File tree

13 files changed

+42
-79
lines changed

13 files changed

+42
-79
lines changed

apps/meteor/client/lib/queryKeys.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ export const omnichannelQueryKeys = {
5050
livechat: {
5151
appearance: () => [...omnichannelQueryKeys.all, 'livechat', 'appearance'] as const,
5252
customFields: () => [...omnichannelQueryKeys.all, 'livechat', 'custom-fields'] as const,
53+
customFieldsMetadata: (scope: 'visitor' | 'room') => [...omnichannelQueryKeys.all, 'livechat', 'custom-fields', scope] as const,
5354
},
5455
visitorInfo: (uid: string) => [...omnichannelQueryKeys.all, 'visitor-info', uid] as const,
5556
analytics: {

apps/meteor/client/views/omnichannel/contactInfo/hooks/useCustomFieldsQuery.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.

apps/meteor/client/views/omnichannel/contactInfo/hooks/useValidCustomFields.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
import type { ILivechatCustomField } from '@rocket.chat/core-typings';
12
import { usePermission } from '@rocket.chat/ui-contexts';
23
import { useMemo } from 'react';
34

4-
import { useCustomFieldsQuery } from './useCustomFieldsQuery';
5+
import { useCustomFieldsQuery } from '../../hooks/useCustomFieldsQuery';
56

6-
const checkIsVisibleAndScopeVisitor = (key: string, customFields: Record<string, string | unknown>[]) => {
7+
const checkIsVisibleAndScopeVisitor = (key: string, customFields: ILivechatCustomField[]) => {
78
const field = customFields?.find(({ _id }) => _id === key);
89
return field?.visibility === 'visible' && field?.scope === 'visitor';
910
};

apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import { Trans, useTranslation } from 'react-i18next';
1212
import CustomFieldsList from './CustomFieldsList';
1313
import FilterByText from './FilterByText';
1414
import RemoveChatButton from './RemoveChatButton';
15-
import { useAllCustomFields } from './hooks/useAllCustomFields';
1615
import { useCurrentChats } from './hooks/useCurrentChats';
1716
import GenericNoResults from '../../../components/GenericNoResults';
1817
import {
@@ -29,6 +28,7 @@ import { useSort } from '../../../components/GenericTable/hooks/useSort';
2928
import { Page, PageHeader, PageContent } from '../../../components/Page';
3029
import { links } from '../../../lib/links';
3130
import RoomActivityIcon from '../components/RoomActivityIcon';
31+
import { useCustomFieldsQuery } from '../hooks/useCustomFieldsQuery';
3232
import { useIsOverMacLimit } from '../hooks/useIsOverMacLimit';
3333
import { useOmnichannelPriorities } from '../hooks/useOmnichannelPriorities';
3434
import { PriorityIcon } from '../priorities/PriorityIcon';
@@ -138,7 +138,7 @@ const CurrentChatsPage = ({ id, onRowClick }: { id?: string; onRowClick: (_id: s
138138
const canRemoveClosedChats = usePermission('remove-closed-livechat-room');
139139
const { enabled: isPriorityEnabled } = useOmnichannelPriorities();
140140

141-
const { data: allCustomFields } = useAllCustomFields();
141+
const { data: allCustomFields } = useCustomFieldsQuery();
142142

143143
const { current, itemsPerPage, setItemsPerPage, setCurrent, ...paginationProps } = usePagination();
144144

apps/meteor/client/views/omnichannel/currentChats/hooks/useAllCustomFields.tsx

Lines changed: 0 additions & 13 deletions
This file was deleted.

apps/meteor/client/views/omnichannel/customFields/CustomFieldsTable.tsx

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { IconButton, Pagination } from '@rocket.chat/fuselage';
22
import { useDebouncedValue, useEffectEvent } from '@rocket.chat/fuselage-hooks';
3-
import { useTranslation, useEndpoint, useRouter } from '@rocket.chat/ui-contexts';
4-
import { useQuery, hashKey } from '@tanstack/react-query';
3+
import { useTranslation, useRouter } from '@rocket.chat/ui-contexts';
4+
import { hashKey } from '@tanstack/react-query';
55
import { useMemo, useState } from 'react';
66

77
import { useRemoveCustomField } from './useRemoveCustomField';
@@ -19,6 +19,7 @@ import {
1919
import { usePagination } from '../../../components/GenericTable/hooks/usePagination';
2020
import { useSort } from '../../../components/GenericTable/hooks/useSort';
2121
import { links } from '../../../lib/links';
22+
import { useCustomFieldsQuery } from '../hooks/useCustomFieldsQuery';
2223

2324
const CustomFieldsTable = () => {
2425
const t = useTranslation();
@@ -46,11 +47,7 @@ const CustomFieldsTable = () => {
4647
500,
4748
);
4849

49-
const getCustomFields = useEndpoint('GET', '/v1/livechat/custom-fields');
50-
const { data, isSuccess, isLoading } = useQuery({
51-
queryKey: ['livechat-customFields', query],
52-
queryFn: async () => getCustomFields(query),
53-
});
50+
const { data, isSuccess, isLoading } = useCustomFieldsQuery();
5451

5552
const [defaultQuery] = useState(hashKey([query]));
5653
const queryHasChanged = defaultQuery !== hashKey([query]);

apps/meteor/client/views/omnichannel/customFields/EditCustomFields.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import { FormProvider, useForm, Controller } from 'react-hook-form';
2828

2929
import { CustomFieldsAdditionalForm } from '../additionalForms';
3030
import { useRemoveCustomField } from './useRemoveCustomField';
31+
import { omnichannelQueryKeys } from '../../../lib/queryKeys';
3132

3233
export type EditCustomFieldsFormData = {
3334
field: string;
@@ -86,7 +87,7 @@ const EditCustomFields = ({ customFieldData, onClose }: { customFieldData?: Seri
8687

8788
dispatchToastMessage({ type: 'success', message: t('Saved') });
8889
queryClient.invalidateQueries({
89-
queryKey: ['livechat-customFields'],
90+
queryKey: omnichannelQueryKeys.livechat.customFields(),
9091
});
9192
onClose();
9293
} catch (error) {

apps/meteor/client/views/omnichannel/customFields/useRemoveCustomField.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import { useSetModal, useToastMessageDispatch, useEndpoint } from '@rocket.chat/
44
import { useQueryClient } from '@tanstack/react-query';
55
import { useTranslation } from 'react-i18next';
66

7+
import { omnichannelQueryKeys } from '../../../lib/queryKeys';
8+
79
export const useRemoveCustomField = () => {
810
const { t } = useTranslation();
911
const setModal = useSetModal();
@@ -17,7 +19,7 @@ export const useRemoveCustomField = () => {
1719
await removeCustomField({ customFieldId: id });
1820
dispatchToastMessage({ type: 'success', message: t('Custom_Field_Removed') });
1921
queryClient.invalidateQueries({
20-
queryKey: ['livechat-customFields'],
22+
queryKey: omnichannelQueryKeys.livechat.customFields(),
2123
});
2224
} catch (error) {
2325
dispatchToastMessage({ type: 'error', message: error });

apps/meteor/client/views/omnichannel/directory/chats/ChatInfo/ChatInfo.tsx

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,7 @@ import { Box, Margins, Tag, Button, ButtonGroup } from '@rocket.chat/fuselage';
33
import { useEffectEvent } from '@rocket.chat/fuselage-hooks';
44
import { ContextualbarScrollableContent, ContextualbarFooter } from '@rocket.chat/ui-client';
55
import type { IRouterPaths } from '@rocket.chat/ui-contexts';
6-
import {
7-
useToastMessageDispatch,
8-
useRoute,
9-
useUserSubscription,
10-
useTranslation,
11-
usePermission,
12-
useEndpoint,
13-
useUserId,
14-
} from '@rocket.chat/ui-contexts';
15-
import { useQuery } from '@tanstack/react-query';
6+
import { useToastMessageDispatch, useRoute, useUserSubscription, useTranslation, usePermission, useUserId } from '@rocket.chat/ui-contexts';
167
import moment from 'moment';
178
import { useMemo } from 'react';
189

@@ -22,8 +13,8 @@ import { InfoPanelField, InfoPanelLabel, InfoPanelText } from '../../../../../co
2213
import MarkdownText from '../../../../../components/MarkdownText';
2314
import { useFormatDateAndTime } from '../../../../../hooks/useFormatDateAndTime';
2415
import { useFormatDuration } from '../../../../../hooks/useFormatDuration';
25-
import { omnichannelQueryKeys } from '../../../../../lib/queryKeys';
2616
import CustomField from '../../../components/CustomField';
17+
import { useValidCustomFields } from '../../../contactInfo/hooks/useValidCustomFields';
2718
import { AgentField, SlaField, ContactField, SourceField } from '../../components';
2819
import PriorityField from '../../components/PriorityField';
2920
import { useOmnichannelRoomInfo } from '../../hooks/useOmnichannelRoomInfo';
@@ -40,14 +31,6 @@ function ChatInfo({ id, route }: ChatInfoProps) {
4031
const dispatchToastMessage = useToastMessageDispatch();
4132

4233
const formatDateAndTime = useFormatDateAndTime();
43-
const getLivechatCustomFields = useEndpoint('GET', '/v1/livechat/custom-fields');
44-
const { data: customFields = [] } = useQuery({
45-
queryKey: omnichannelQueryKeys.livechat.customFields(),
46-
queryFn: async () => {
47-
const { customFields } = await getLivechatCustomFields();
48-
return customFields;
49-
},
50-
});
5134
const formatDuration = useFormatDuration();
5235

5336
const { data: room } = useOmnichannelRoomInfo(id); // FIXME: `room` is serialized, but we need to deserialize it
@@ -72,7 +55,6 @@ function ChatInfo({ id, route }: ChatInfoProps) {
7255
} = room ?? {};
7356

7457
const routePath = useRoute(route || 'omnichannel-directory');
75-
const canViewCustomFields = usePermission('view-livechat-room-customfields');
7658
const subscription = useUserSubscription(id);
7759
const hasGlobalEditRoomPermission = usePermission('save-others-livechat-room-info');
7860
const hasLocalEditRoomPermission = servedBy?._id === useUserId();
@@ -81,10 +63,7 @@ function ChatInfo({ id, route }: ChatInfoProps) {
8163

8264
const queueTime = useMemo(() => formatQueuedAt(room), [room]);
8365

84-
const checkIsVisibleAndScopeRoom = (key: string) => {
85-
const field = customFields.find(({ _id }) => _id === key);
86-
return field?.visibility === 'visible' && field?.scope === 'room';
87-
};
66+
const customFieldEntries = useValidCustomFields(livechatData);
8867

8968
const onEditClick = useEffectEvent(() => {
9069
const hasEditAccess = !!subscription || hasLocalEditRoomPermission || hasGlobalEditRoomPermission;
@@ -107,10 +86,6 @@ function ChatInfo({ id, route }: ChatInfoProps) {
10786
);
10887
});
10988

110-
const customFieldEntries: [string, any][] = Object.entries(livechatData || {}).filter(
111-
([key]) => checkIsVisibleAndScopeRoom(key) && livechatData[key],
112-
);
113-
11489
return (
11590
<>
11691
<ContextualbarScrollableContent p={24}>
@@ -186,7 +161,8 @@ function ChatInfo({ id, route }: ChatInfoProps) {
186161
<InfoPanelText>{moment(responseBy.lastMessageTs).fromNow(true)}</InfoPanelText>
187162
</InfoPanelField>
188163
)}
189-
{canViewCustomFields && customFieldEntries.map(([key, value]) => <CustomField key={key} id={key} value={value} />)}
164+
{customFieldEntries?.length > 0 &&
165+
customFieldEntries.map(([key, value]) => <CustomField key={key} id={key} value={value as string} />)}
190166
{slaId && <SlaField id={slaId} />}
191167
{priorityId && <PriorityField id={priorityId} />}
192168
</Margins>

apps/meteor/client/views/omnichannel/directory/chats/ChatsFiltersContextualBar.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ import {
88
ContextualbarFooter,
99
ContextualbarDialog,
1010
} from '@rocket.chat/ui-client';
11-
import { useEndpoint, usePermission } from '@rocket.chat/ui-contexts';
12-
import { useQuery } from '@tanstack/react-query';
11+
import { usePermission } from '@rocket.chat/ui-contexts';
1312
import { format } from 'date-fns';
1413
import { useId } from 'react';
1514
import { Controller, useForm } from 'react-hook-form';
@@ -20,6 +19,7 @@ import { CurrentChatTags } from '../../additionalForms';
2019
import AutoCompleteUnits from '../../additionalForms/AutoCompleteUnits';
2120
import AutoCompleteDepartmentMultiple from '../../components/AutoCompleteDepartmentMultiple';
2221
import AutoCompleteMultipleAgent from '../../components/AutoCompleteMultipleAgent';
22+
import { useCustomFieldsQuery } from '../../hooks/useCustomFieldsQuery';
2323
import type { ChatsFiltersQuery } from '../contexts/ChatsContext';
2424
import { useChatsContext } from '../contexts/ChatsContext';
2525

@@ -33,8 +33,7 @@ const ChatsFiltersContextualBar = ({ onClose }: ChatsFiltersContextualBarProps)
3333
const canViewCustomFields = usePermission('view-livechat-room-customfields');
3434
const { data: isEnterprise = false } = useHasLicenseModule('livechat-enterprise');
3535

36-
const allCustomFields = useEndpoint('GET', '/v1/livechat/custom-fields');
37-
const { data } = useQuery({ queryKey: ['livechat/custom-fields'], queryFn: async () => allCustomFields() });
36+
const { data } = useCustomFieldsQuery();
3837
const contactCustomFields = data?.customFields.filter((customField) => customField.scope !== 'visitor');
3938

4039
const { filtersQuery, setFiltersQuery, resetFiltersQuery, hasAppliedFilters } = useChatsContext();

0 commit comments

Comments
 (0)