@amityco/ts-sdk-react-native
Version:
Amity Social Cloud Typescript SDK
82 lines (69 loc) • 2.3 kB
text/typescript
import { getActiveClient } from '~/client/api';
import { pullFromCache, upsertInCache } from '~/cache/api';
import { fireEvent } from '~/core/events';
import { getMessage } from '../internalApi/getMessage';
import { LinkedObject } from '~/utils/linkedObject';
/* begin_public_function
id: message.soft_delete
*/
/**
* ```js
* import { softDeleteMessage } from '@amityco/ts-sdk-react-native'
* const success = await softDeleteMessage('foobar')
* ```
*
* Delete a {@link Amity.Message}
*
* @param messageId the ID of the {@link Amity.Message} to delete
* @return A success boolean if the {@link Amity.Message} was deleted
*
* @category Message API
* @async
*/
export const softDeleteMessage = async (
messageId: Amity.Message['messageId'],
): Promise<Amity.Message> => {
const client = getActiveClient();
client.log('message/softDeleteMessage', messageId);
// API-FIX: This endpoint has not been implemented yet.
await client.http.delete<{ success: boolean }>(
`/api/v5/messages/${encodeURIComponent(messageId)}`,
);
const deleted = await getMessage(messageId);
fireEvent('local.message.deleted', { messages: [deleted.data] });
return LinkedObject.message(deleted.data);
};
/**
* ```js
* import { softDeleteMessage } from '@amityco/ts-sdk-react-native'
* const success = softDeleteMessage.optimistically('foobar')
* ```
*
* Deletes a {@link Amity.Message}
*
* @param messageId The {@link Amity.Message} ID to delete
* @return A success boolean if the {@link Amity.Message} was deleted
*
* @category Message API
*/
softDeleteMessage.optimistically = (
messageId: Amity.Message['messageId'],
): Amity.Cached<Amity.Message> | undefined => {
const client = getActiveClient();
client.log('message/softDeleteMessage.optimistically', messageId);
const message = pullFromCache<Amity.InternalMessage>(['message', 'get', messageId]);
if (!message) return;
const cachedAt = -1;
const deleted: Amity.InternalMessage = {
...message.data,
isDeleted: true,
updatedAt: new Date().toISOString(),
};
upsertInCache(['message', 'get', messageId], deleted, { cachedAt });
fireEvent('local.message.deleted', { messages: [deleted] });
return {
data: LinkedObject.message(deleted),
cachedAt,
};
};
/* end_public_function */