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 gql from 'graphql-tag';
import { useRecoilValue } from 'recoil'; import { useRecoilValue } from 'recoil';
import { fetchAllThreadMessagesOperationSignatureFactory } from '@/activities/emails/graphql/operation-signatures/factories/fetchAllThreadMessagesOperationSignatureFactory';
import { viewableEmailThreadIdState } from '@/activities/emails/states/viewableEmailThreadIdState'; import { viewableEmailThreadIdState } from '@/activities/emails/states/viewableEmailThreadIdState';
import { EmailThreadMessage as EmailThreadMessageType } from '@/activities/emails/types/EmailThreadMessage'; import { EmailThreadMessage as EmailThreadMessageType } from '@/activities/emails/types/EmailThreadMessage';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords'; import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
export const useRightDrawerEmailThread = () => { export const useRightDrawerEmailThread = () => {
@ -23,21 +23,22 @@ export const useRightDrawerEmailThread = () => {
`, `,
}); });
const FETCH_ALL_MESSAGES_OPERATION_SIGNATURE =
fetchAllThreadMessagesOperationSignatureFactory({
messageThreadId: viewableEmailThreadId,
});
const { const {
records: messages, records: messages,
loading, loading,
fetchMoreRecords, fetchMoreRecords,
} = useFindManyRecords<EmailThreadMessageType>({ } = useFindManyRecords<EmailThreadMessageType>({
limit: 10, limit: FETCH_ALL_MESSAGES_OPERATION_SIGNATURE.variables.limit,
filter: { filter: FETCH_ALL_MESSAGES_OPERATION_SIGNATURE.variables.filter,
messageThreadId: { objectNameSingular:
eq: viewableEmailThreadId || '', FETCH_ALL_MESSAGES_OPERATION_SIGNATURE.objectNameSingular,
}, orderBy: FETCH_ALL_MESSAGES_OPERATION_SIGNATURE.variables.orderBy,
}, recordGqlFields: FETCH_ALL_MESSAGES_OPERATION_SIGNATURE.fields,
objectNameSingular: CoreObjectNameSingular.Message,
orderBy: {
receivedAt: 'AscNullsLast',
},
skip: !viewableEmailThreadId, 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 { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown'; import { useDropdown } from '@/ui/layout/dropdown/hooks/useDropdown';
import { MenuItem } from '@/ui/navigation/menu-item/components/MenuItem'; import { MenuItem } from '@/ui/navigation/menu-item/components/MenuItem';
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
type SettingsAccountsRowDropdownMenuProps = { type SettingsAccountsRowDropdownMenuProps = {
account: ConnectedAccount; account: ConnectedAccount;
@ -38,6 +39,8 @@ export const SettingsAccountsRowDropdownMenu = ({
const { triggerGoogleApisOAuth } = useTriggerGoogleApisOAuth(); const { triggerGoogleApisOAuth } = useTriggerGoogleApisOAuth();
const isCalendarEnabled = useIsFeatureEnabled('IS_CALENDAR_ENABLED');
return ( return (
<Dropdown <Dropdown
dropdownId={dropdownId} dropdownId={dropdownId}
@ -60,16 +63,18 @@ export const SettingsAccountsRowDropdownMenu = ({
closeDropdown(); closeDropdown();
}} }}
/> />
<MenuItem {isCalendarEnabled && (
LeftIcon={IconCalendarEvent} <MenuItem
text="Calendar settings" LeftIcon={IconCalendarEvent}
onClick={() => { text="Calendar settings"
navigate( onClick={() => {
`/settings/accounts/calendars/${account.calendarChannels[0].id}`, navigate(
); `/settings/accounts/calendars/${account.calendarChannels[0].id}`,
closeDropdown(); );
}} closeDropdown();
/> }}
/>
)}
{account.authFailedAt && ( {account.authFailedAt && (
<MenuItem <MenuItem
LeftIcon={IconRefresh} LeftIcon={IconRefresh}

View File

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