3
3
4
4
from sqlmodel import select
5
5
6
+ from .. import navigation
6
7
from .model import BlogPostModel
7
8
9
+ BLOG_POSTS_ROUTE = navigation .routes .BLOG_POSTS_ROUTE
10
+ if BLOG_POSTS_ROUTE .endswith ("/" ):
11
+ BLOG_POSTS_ROUTE = BLOG_POSTS_ROUTE [:- 1 ]
12
+
8
13
class BlogPostState (rx .State ):
9
14
posts : List ['BlogPostModel' ] = []
10
15
post : Optional ['BlogPostModel' ] = None
@@ -14,6 +19,18 @@ class BlogPostState(rx.State):
14
19
def blog_post_id (self ):
15
20
return self .router .page .params .get ("blog_id" , "" )
16
21
22
+ @rx .var
23
+ def blog_post_url (self ):
24
+ if not self .post :
25
+ return f"{ BLOG_POSTS_ROUTE } "
26
+ return f"{ BLOG_POSTS_ROUTE } /{ self .post .id } "
27
+
28
+ @rx .var
29
+ def blog_post_edit_url (self ):
30
+ if not self .post :
31
+ return f"{ BLOG_POSTS_ROUTE } "
32
+ return f"{ BLOG_POSTS_ROUTE } /{ self .post .id } /edit"
33
+
17
34
def get_post_detail (self ):
18
35
with rx .session () as session :
19
36
if self .blog_post_id == "" :
@@ -65,7 +82,14 @@ def save_post_edits(self, post_id:int, updated_data:dict):
65
82
session .add (post )
66
83
session .commit ()
67
84
session .refresh (post )
68
- #
85
+ self .post = post
86
+
87
+ def to_blog_post (self , edit_page = False ):
88
+ if not self .post :
89
+ return rx .redirect (BLOG_POSTS_ROUTE )
90
+ if edit_page :
91
+ return rx .redirect (f"{ self .blog_post_edit_url } " )
92
+ return rx .redirect (f"{ self .blog_post_url } " )
69
93
70
94
71
95
class BlogAddPostFormState (BlogPostState ):
@@ -74,7 +98,7 @@ class BlogAddPostFormState(BlogPostState):
74
98
def handle_submit (self , form_data ):
75
99
self .form_data = form_data
76
100
self .add_post (form_data )
77
- # redirect
101
+ return self . to_blog_post ( edit_page = True )
78
102
79
103
80
104
class BlogEditFormState (BlogPostState ):
@@ -86,4 +110,4 @@ def handle_submit(self, form_data):
86
110
post_id = form_data .pop ('post_id' )
87
111
updated_data = {** form_data }
88
112
self .save_post_edits (post_id , updated_data )
89
- # redirect
113
+ return self . to_blog_post ()
0 commit comments