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;
isSyncEnabled: boolean;
visibility: InboxSettingsVisibilityValue;
syncStatus: string;
};

View File

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

View File

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