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:
@ -6,4 +6,5 @@ export type MessageChannel = {
|
|||||||
isContactAutoCreationEnabled?: boolean;
|
isContactAutoCreationEnabled?: boolean;
|
||||||
isSyncEnabled: boolean;
|
isSyncEnabled: boolean;
|
||||||
visibility: InboxSettingsVisibilityValue;
|
visibility: InboxSettingsVisibilityValue;
|
||||||
|
syncStatus: string;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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',
|
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -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"
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user