+49
-9
src/components/timeline/delete-post-prompt.tsx
+49
-9
src/components/timeline/delete-post-prompt.tsx
···
1
-
import type { AppBskyFeedDefs } from '@atcute/client/lexicons';
1
+
import { XRPCError } from '@atcute/client';
2
+
import type { AppBskyFeedDefs, AppBskyFeedPost } from '@atcute/client/lexicons';
2
3
import { useQueryClient } from '@mary/solid-query';
3
4
4
5
import { updatePostShadow } from '~/api/cache/post-shadow';
5
6
import { parseAtUri } from '~/api/types/at-uri';
6
-
import { deleteRecord } from '~/api/utils/records';
7
7
8
8
import { useAgent } from '~/lib/states/agent';
9
9
import { useSession } from '~/lib/states/session';
···
25
25
26
26
const onDelete = () => {
27
27
const uri = parseAtUri(post.uri);
28
-
const promise = deleteRecord(rpc, {
29
-
repo: currentAccount!.did,
30
-
collection: 'app.bsky.feed.post',
31
-
rkey: uri.rkey,
28
+
29
+
const promise = rpc.call('com.atproto.repo.applyWrites', {
30
+
data: {
31
+
repo: currentAccount!.did,
32
+
writes: [
33
+
{
34
+
$type: 'com.atproto.repo.applyWrites#delete',
35
+
collection: 'app.bsky.feed.post',
36
+
rkey: uri.rkey,
37
+
},
38
+
],
39
+
},
32
40
});
33
41
34
42
updatePostShadow(queryClient, post.uri, { deleted: true });
35
43
36
-
if (onPostDelete) {
37
-
promise.then(onPostDelete);
38
-
}
44
+
promise.then(
45
+
() => {
46
+
onPostDelete?.();
47
+
},
48
+
async (err) => {
49
+
if (err instanceof XRPCError && err.kind === 'InternalServerError') {
50
+
await rpc.call('com.atproto.repo.putRecord', {
51
+
data: {
52
+
repo: currentAccount!.did,
53
+
collection: 'app.bsky.feed.post',
54
+
rkey: uri.rkey,
55
+
validate: false,
56
+
record: {
57
+
$type: 'app.bsky.feed.post',
58
+
text: '',
59
+
createdAt: '1970-01-01T00:00:00.000Z',
60
+
} satisfies AppBskyFeedPost.Record,
61
+
},
62
+
});
63
+
64
+
await rpc.call('com.atproto.repo.deleteRecord', {
65
+
data: {
66
+
repo: currentAccount!.did,
67
+
collection: 'app.bsky.feed.post',
68
+
rkey: uri.rkey,
69
+
},
70
+
});
71
+
72
+
onPostDelete?.();
73
+
return;
74
+
}
75
+
76
+
throw err;
77
+
},
78
+
);
39
79
};
40
80
41
81
return (