Skip to content

Commit 6f663b1

Browse files
author
dmrado
committed
DeletePost is ready!
1 parent 650072d commit 6f663b1

File tree

5 files changed

+31
-35
lines changed

5 files changed

+31
-35
lines changed

src/app/posts/[id]/page.tsx

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1-
import {Post} from '../../db/post.model'
21
import Link from "next/link"
32
import React from "react";
4-
import DeletePost from "@/components/DeletePost.tsx";
5-
// import {revalidatePath} from "next/cache"
3+
import {revalidatePath} from "next/cache";
4+
import {redirect} from "next/navigation";
65

7-
type PostPageParams = { params: { id: number }}
8-
const PostPage = async ({ params }: PostPageParams) => {
6+
import {Post} from '@/app/db/post.model.ts';
7+
import {sequelize} from "@/app/db/connection.ts";
8+
import {Sequelize} from "sequelize";
9+
import {QueryInterface} from "sequelize";
10+
const queryInterface: QueryInterface = sequelize.getQueryInterface();
11+
12+
13+
type PostPageParams = { params: { id: number } }
14+
const PostPage = async ({params}: PostPageParams) => {
915
//todo как делается обработка ошибок здесь?
1016
// try {
1117
const post = await Post.findByPk(params.id)
@@ -16,11 +22,19 @@ const PostPage = async ({ params }: PostPageParams) => {
1622
// console.log(error)
1723
// }
1824

19-
if (post === null){
25+
if (post === null) {
2026
// todo: return 404 status
2127
return <>Not found</>
2228
}
2329

30+
async function removePost (id: number) {
31+
'use server'
32+
await queryInterface.bulkDelete('posts', { id: [id] }, {}).then((): void => {});
33+
revalidatePath('/posts')
34+
redirect('/posts')
35+
};
36+
37+
2438
return (<>
2539
<div className="max-w-2xl overflow-hidden mt-0 mr-auto mb-0 ml-auto pr-1 pl-1">
2640
<div
@@ -39,7 +53,9 @@ const PostPage = async ({ params }: PostPageParams) => {
3953
{/*<p className="text-end text-blue-950">{moment(updatedAt).format("DD.MM.YYYY")}</p>*/}
4054
<p className="text-end text-white mt-10 italic">Дата публикации</p>
4155

42-
<DeletePost post={post}/>
56+
<form action={removePost.bind(null, post.id)}>
57+
<input type='submit' value="Удалить пост"/>
58+
</form>
4359

4460
<div className="mb-10 p-10">
4561
<Link href={`/posts`}>
@@ -51,7 +67,8 @@ const PostPage = async ({ params }: PostPageParams) => {
5167
</div>
5268
</div>
5369
</>
54-
);
70+
)
71+
;
5572
};
5673

5774
export default PostPage;

src/app/posts/new/page.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {Post} from "@/app/db/post.model";
22
import {revalidatePath} from "next/cache";
33
import Link from "next/link";
4+
import {redirect} from "next/navigation";
45

56

67
const AddPost = async () => {
@@ -18,6 +19,7 @@ const AddPost = async () => {
1819
text: formData.get('text') as string
1920
})
2021
revalidatePath('/posts')
22+
redirect('/posts')
2123
}
2224

2325
return (

src/app/posts/page.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ const Posts = async () => {
1313
console.log(posts)
1414

1515
const formData = new FormData();
16-
// todo всю голову сломал как в серверном компоненте передать в deletePost id удаляемого поста? С клиенским компонентом можно было бы использовать onSubmit=(e => deletePost(post.id)), но хочется остаться в серверной парадигме
1716
// formData.append('id', post.id);
1817

1918
// const deletePost = async (id: number) => {
@@ -69,13 +68,16 @@ const Posts = async () => {
6968
// {/* Удалить*/}
7069
// {/* </button>*/}
7170
// {/*</form>*/}
71+
//
72+
7273
//
7374
// </div>
7475
// </li>
7576
)}
7677
</ul>
7778
</div>
7879
</div>
80+
7981
</main>
8082
)
8183
}

src/components/DeletePost.tsx

Lines changed: 0 additions & 26 deletions
This file was deleted.

src/components/PostsPage.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ const PostsPage = (post: Post) => {
2222
{/*<p className="text-end text-blue-950">{moment(updatedAt).format("DD.MM.YYYY")}</p>*/}
2323
<p className="text-end text-blue-950 bottom-4 italic">Дата публикации</p>
2424
</div>
25+
2526
</div>
2627

2728
</li>

0 commit comments

Comments
 (0)