@@ -34,14 +34,14 @@ public void ConfigureServices(IServiceCollection services)
3434 . WithNamedTerm ( "status" , builder => builder
3535 . OneCondition ( ( val , query ) =>
3636 {
37- if ( Enum . TryParse < ContentsStatus > ( val , true , out var e ) )
37+ if ( Enum . TryParse < BlogPostStatus > ( val , true , out var e ) )
3838 {
3939 switch ( e )
4040 {
41- case ContentsStatus . Published :
41+ case BlogPostStatus . Published :
4242 query . With < BlogPostIndex > ( x => x . Published ) ;
4343 break ;
44- case ContentsStatus . Draft :
44+ case BlogPostStatus . Draft :
4545 query . With < BlogPostIndex > ( x => ! x . Published ) ;
4646 break ;
4747 default :
@@ -53,22 +53,66 @@ public void ConfigureServices(IServiceCollection services)
5353 } )
5454 . MapTo < Filter > ( ( val , model ) =>
5555 {
56- if ( Enum . TryParse < ContentsStatus > ( val , true , out var e ) )
56+ if ( Enum . TryParse < BlogPostStatus > ( val , true , out var e ) )
5757 {
58- model . SelectedFilter = e ;
58+ model . SelectedStatus = e ;
5959 }
6060 } )
6161 . MapFrom < Filter > ( ( model ) =>
6262 {
63- if ( model . SelectedFilter != ContentsStatus . Default )
63+ if ( model . SelectedStatus != BlogPostStatus . Default )
6464 {
65- return ( true , model . SelectedFilter . ToString ( ) ) ;
65+ return ( true , model . SelectedStatus . ToString ( ) ) ;
6666 }
6767
6868 return ( false , String . Empty ) ;
6969
7070 } )
7171 )
72+ . WithNamedTerm ( "sort" , b => b
73+ . OneCondition ( ( val , query ) =>
74+ {
75+ if ( Enum . TryParse < BlogPostSort > ( val , true , out var e ) )
76+ {
77+ switch ( e )
78+ {
79+ case BlogPostSort . Newest :
80+ query . With < BlogPostIndex > ( ) . OrderByDescending ( x => x . PublishedUtc ) ;
81+ break ;
82+ case BlogPostSort . Oldest :
83+ query . With < BlogPostIndex > ( ) . OrderBy ( x => x . PublishedUtc ) ;
84+ break ;
85+ default :
86+ query . With < BlogPostIndex > ( ) . OrderByDescending ( x => x . PublishedUtc ) ;
87+ break ;
88+ }
89+ }
90+ else
91+ {
92+ query . With < BlogPostIndex > ( ) . OrderByDescending ( x => x . PublishedUtc ) ;
93+ }
94+
95+ return query ;
96+ } )
97+ . MapTo < Filter > ( ( val , model ) =>
98+ {
99+ if ( Enum . TryParse < BlogPostSort > ( val , true , out var e ) )
100+ {
101+ model . SelectedSort = e ;
102+ }
103+ } )
104+ . MapFrom < Filter > ( ( model ) =>
105+ {
106+ if ( model . SelectedSort != BlogPostSort . Newest )
107+ {
108+ return ( true , model . SelectedSort . ToString ( ) ) ;
109+ }
110+
111+ return ( false , String . Empty ) ;
112+
113+ } )
114+ . AlwaysRun ( )
115+ )
72116 . WithDefaultTerm ( "title" , b => b
73117 . ManyCondition (
74118 ( ( val , query ) => query . With < BlogPostIndex > ( x => x . Title . Contains ( val ) ) ) ,
0 commit comments