GH-4362 Add syncing status (#4950)

This PR adds a `syncing` status on frontend.

Issue
- #4362

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
This commit is contained in:
Deepak Kumar
2024-04-18 01:36:52 +05:30
committed by GitHub
parent a52f2e5bd9
commit 5c30509d21
4 changed files with 44 additions and 25 deletions

View File

@ -6,4 +6,5 @@ export type MessageChannel = {
isContactAutoCreationEnabled?: boolean; isContactAutoCreationEnabled?: boolean;
isSyncEnabled: boolean; isSyncEnabled: boolean;
visibility: InboxSettingsVisibilityValue; visibility: InboxSettingsVisibilityValue;
syncStatus: string;
}; };

View File

@ -55,11 +55,7 @@ export const SettingsAccountsMessageChannelsListCard = () => {
} & SettingsAccountsSynchronizationStatusProps)[] = messageChannels.map( } & SettingsAccountsSynchronizationStatusProps)[] = messageChannels.map(
(messageChannel) => ({ (messageChannel) => ({
...messageChannel, ...messageChannel,
syncStatus: messageChannel.connectedAccount?.authFailedAt syncStatus: messageChannel.syncStatus,
? 'failed'
: messageChannel.isSyncEnabled
? 'synced'
: 'notSynced',
}), }),
); );

View File

@ -1,27 +1,24 @@
import { useGetSyncStatusOptions } from '@/settings/accounts/hooks//useGetSyncStatusOptions';
import { Status } from '@/ui/display/status/components/Status'; import { Status } from '@/ui/display/status/components/Status';
export type SettingsAccountsSynchronizationStatusProps = { export type SettingsAccountsSynchronizationStatusProps = {
syncStatus: 'synced' | 'failed' | 'notSynced'; syncStatus: string;
}; };
export const SettingsAccountsSynchronizationStatus = ({ export const SettingsAccountsSynchronizationStatus = ({
syncStatus, syncStatus,
}: SettingsAccountsSynchronizationStatusProps) => ( }: SettingsAccountsSynchronizationStatusProps) => {
<Status const syncStatusOptions = useGetSyncStatusOptions();
color={
syncStatus === 'synced' const syncStatusOption = syncStatusOptions?.find(
? 'green' (option) => option.value === syncStatus,
: syncStatus === 'failed' );
? 'red'
: 'gray' return (
} <Status
text={ color={syncStatusOption?.color ?? 'gray'}
syncStatus === 'synced' text={syncStatusOption?.label ?? 'Not synced'}
? 'Synced' weight="medium"
: syncStatus === 'failed' />
? 'Sync failed' );
: 'Not synced' };
}
weight="medium"
/>
);

View File

@ -0,0 +1,25 @@
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
export const useGetSyncStatusOptions = () => {
const { objectMetadataItem } = useObjectMetadataItem({
objectNameSingular: CoreObjectNameSingular.MessageChannel,
});
if (isUndefinedOrNull(objectMetadataItem)) {
throw new Error('ObjectMetadataItem not found for MessageChannel');
}
const syncStatusMetadata = objectMetadataItem.fields.find(
(field) => field.name === 'syncStatus',
);
const syncStatusOptions = syncStatusMetadata?.options;
if (isUndefinedOrNull(syncStatusMetadata)) {
throw new Error('syncStatusMetaData not found for MessageChannel');
}
return syncStatusOptions;
};