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:
@ -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,
|
||||||
|
},
|
||||||
|
});
|
||||||
@ -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,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -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}
|
||||||
|
|||||||
@ -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');
|
||||||
|
|||||||
Reference in New Issue
Block a user