Add feature flag gate on calendar settings dropdown and fix queries (#5221)

- Add feature flag gate on calendar settings dropdown
- Fix find many messages
- Fix connected accounts settings
This commit is contained in:
bosiraphael
2024-04-30 14:12:48 +02:00
committed by GitHub
parent 95d80af0c6
commit 907f0a1ea6
4 changed files with 63 additions and 21 deletions

View File

@ -0,0 +1,28 @@
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { RecordGqlOperationSignatureFactory } from '@/object-record/graphql/types/RecordGqlOperationSignatureFactory';
export const fetchAllThreadMessagesOperationSignatureFactory: RecordGqlOperationSignatureFactory =
({ messageThreadId }: { messageThreadId: string }) => ({
objectNameSingular: CoreObjectNameSingular.Message,
variables: {
filter: {
messageThreadId: {
eq: messageThreadId || '',
},
},
orderBy: {
receivedAt: 'AscNullsLast',
},
limit: 10,
},
fields: {
id: true,
__typename: true,
createdAt: true,
headerMessageId: true,
subject: true,
text: true,
receivedAt: true,
messageParticipants: true,
},
});

View File

@ -3,9 +3,9 @@ import { useApolloClient } from '@apollo/client';
import gql from 'graphql-tag';
import { useRecoilValue } from 'recoil';
import { fetchAllThreadMessagesOperationSignatureFactory } from '@/activities/emails/graphql/operation-signatures/factories/fetchAllThreadMessagesOperationSignatureFactory';
import { viewableEmailThreadIdState } from '@/activities/emails/states/viewableEmailThreadIdState';
import { EmailThreadMessage as EmailThreadMessageType } from '@/activities/emails/types/EmailThreadMessage';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
export const useRightDrawerEmailThread = () => {
@ -23,21 +23,22 @@ export const useRightDrawerEmailThread = () => {
`,
});
const FETCH_ALL_MESSAGES_OPERATION_SIGNATURE =
fetchAllThreadMessagesOperationSignatureFactory({
messageThreadId: viewableEmailThreadId,
});
const {
records: messages,
loading,
fetchMoreRecords,
} = useFindManyRecords<EmailThreadMessageType>({
limit: 10,
filter: {
messageThreadId: {
eq: viewableEmailThreadId || '',
},
},
objectNameSingular: CoreObjectNameSingular.Message,
orderBy: {
receivedAt: 'AscNullsLast',
},
limit: FETCH_ALL_MESSAGES_OPERATION_SIGNATURE.variables.limit,
filter: FETCH_ALL_MESSAGES_OPERATION_SIGNATURE.variables.filter,
objectNameSingular:
FETCH_ALL_MESSAGES_OPERATION_SIGNATURE.objectNameSingular,
orderBy: FETCH_ALL_MESSAGES_OPERATION_SIGNATURE.variables.orderBy,
recordGqlFields: FETCH_ALL_MESSAGES_OPERATION_SIGNATURE.fields,
skip: !viewableEmailThreadId,
});

View File

@ -17,6 +17,7 @@ import { DropdownMenu } from '@/ui/layout/dropdown/components/DropdownMenu';
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown';
import { MenuItem } from '@/ui/navigation/menu-item/components/MenuItem';
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
type SettingsAccountsRowDropdownMenuProps = {
account: ConnectedAccount;
@ -38,6 +39,8 @@ export const SettingsAccountsRowDropdownMenu = ({
const { triggerGoogleApisOAuth } = useTriggerGoogleApisOAuth();
const isCalendarEnabled = useIsFeatureEnabled('IS_CALENDAR_ENABLED');
return (
<Dropdown
dropdownId={dropdownId}
@ -60,16 +63,18 @@ export const SettingsAccountsRowDropdownMenu = ({
closeDropdown();
}}
/>
<MenuItem
LeftIcon={IconCalendarEvent}
text="Calendar settings"
onClick={() => {
navigate(
`/settings/accounts/calendars/${account.calendarChannels[0].id}`,
);
closeDropdown();
}}
/>
{isCalendarEnabled && (
<MenuItem
LeftIcon={IconCalendarEvent}
text="Calendar settings"
onClick={() => {
navigate(
`/settings/accounts/calendars/${account.calendarChannels[0].id}`,
);
closeDropdown();
}}
/>
)}
{account.authFailedAt && (
<MenuItem
LeftIcon={IconRefresh}

View File

@ -3,6 +3,9 @@ import { IconSettings } from 'twenty-ui';
import { ConnectedAccount } from '@/accounts/types/ConnectedAccount';
import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { generateDepthOneRecordGqlFields } from '@/object-record/graphql/utils/generateDepthOneRecordGqlFields';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
import { SettingsAccountLoader } from '@/settings/accounts/components/SettingsAccountLoader';
import { SettingsAccountsConnectedAccountsListCard } from '@/settings/accounts/components/SettingsAccountsConnectedAccountsListCard';
@ -18,6 +21,10 @@ import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
export const SettingsAccounts = () => {
const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState);
const { objectMetadataItem } = useObjectMetadataItem({
objectNameSingular: CoreObjectNameSingular.ConnectedAccount,
});
const { records: accounts, loading } = useFindManyRecords<ConnectedAccount>({
objectNameSingular: 'connectedAccount',
filter: {
@ -25,6 +32,7 @@ export const SettingsAccounts = () => {
eq: currentWorkspaceMember?.id,
},
},
recordGqlFields: generateDepthOneRecordGqlFields({ objectMetadataItem }),
});
const isBlocklistEnabled = useIsFeatureEnabled('IS_BLOCKLIST_ENABLED');