@@ -50,26 +50,28 @@ export const QuestionListViewItem = ({item, ...rest} : {item: ShortcutResponse})
50
50
51
51
export const ConceptListViewItem = ( { item, ...rest } : { item : ShortcutResponse } ) => {
52
52
const itemSubject = tags . getSpecifiedTag ( TAG_LEVEL . subject , item . tags as TAG_ID [ ] ) ?. id as Subject ;
53
+ const url = `/${ documentTypePathPrefix [ DOCUMENT_TYPE . CONCEPT ] } /${ item . id } ` ;
53
54
54
55
return < AbstractListViewItem
55
56
icon = { { type : "hex" , icon : "list-icon-concept" , size : "sm" } }
56
57
title = { item . title ?? "" }
57
58
subject = { itemSubject }
58
59
subtitle = { item . subtitle }
59
- url = { item . url }
60
+ url = { url }
60
61
{ ...rest }
61
62
/> ;
62
63
} ;
63
64
64
65
export const EventListViewItem = ( { item, ...rest } : { item : ShortcutResponse } ) => {
65
66
const itemSubject = tags . getSpecifiedTag ( TAG_LEVEL . subject , item . tags as TAG_ID [ ] ) ?. id as Subject ;
67
+ const url = `/${ documentTypePathPrefix [ DOCUMENT_TYPE . EVENT ] } /${ item . id } ` ;
66
68
67
69
return < AbstractListViewItem
68
70
icon = { { type : "hex" , icon : "list-icon-events" , size : "sm" } }
69
71
title = { item . title ?? "" }
70
72
subject = { itemSubject }
71
73
subtitle = { item . subtitle }
72
- url = { item . url }
74
+ url = { url }
73
75
{ ...rest }
74
76
/> ;
75
77
} ;
@@ -81,7 +83,7 @@ export const QuizListViewItem = ({item, isQuizSetter, ...rest}: {item: QuizSumma
81
83
< AffixButton size = "md" color = "solid" onClick = { ( ) => ( dispatch ( showQuizSettingModal ( item ) ) ) } affix = { { affix : "icon-right" , position : "suffix" , type : "icon" } } >
82
84
Set test
83
85
</ AffixButton > :
84
- < AffixButton size = "md" color = "solid" to = { item . url } tag = { Link } affix = { { affix : "icon-right" , position : "suffix" , type : "icon" } } >
86
+ < AffixButton size = "md" color = "solid" to = { `/ ${ documentTypePathPrefix [ DOCUMENT_TYPE . QUIZ ] } / ${ item . id } ` } tag = { Link } affix = { { affix : "icon-right" , position : "suffix" , type : "icon" } } >
85
87
Take the test
86
88
</ AffixButton > ;
87
89
@@ -95,19 +97,79 @@ export const QuizListViewItem = ({item, isQuizSetter, ...rest}: {item: QuizSumma
95
97
/> ;
96
98
} ;
97
99
100
+ export const QuestionPackListViewItem = ( { item, ...rest } : { item : ShortcutResponse } ) => {
101
+ const breadcrumb = tags . getByIdsAsHierarchy ( ( item . tags || [ ] ) as TAG_ID [ ] ) . map ( tag => tag . title ) ;
102
+ const itemSubject = tags . getSpecifiedTag ( TAG_LEVEL . subject , item . tags as TAG_ID [ ] ) ?. id as Subject ;
103
+ const url = `/gameboards#${ item . id } ` ;
104
+
105
+ return < AbstractListViewItem
106
+ icon = { { type : "hex" , icon : "list-icon-question" , size : "sm" } }
107
+ title = { item . title ?? "" }
108
+ subject = { itemSubject }
109
+ subtitle = { item . subtitle }
110
+ breadcrumb = { breadcrumb }
111
+ url = { url }
112
+ { ...rest }
113
+ /> ;
114
+ } ;
115
+
116
+ export const QuickQuizListViewItem = ( { item, ...rest } : { item : ShortcutResponse } ) => {
117
+ const breadcrumb = tags . getByIdsAsHierarchy ( ( item . tags || [ ] ) as TAG_ID [ ] ) . map ( tag => tag . title ) ;
118
+ const audienceViews : ViewingContext [ ] = determineAudienceViews ( item . audience ) ;
119
+ const itemSubject = tags . getSpecifiedTag ( TAG_LEVEL . subject , item . tags as TAG_ID [ ] ) ?. id as Subject ;
120
+ const url = `/gameboards#${ item . id } ` ;
121
+
122
+ return < AbstractListViewItem
123
+ icon = { { type : "hex" , icon : "list-icon-question" , size : "sm" } }
124
+ title = { item . title ?? "" }
125
+ subject = { itemSubject }
126
+ subtitle = { item . subtitle }
127
+ breadcrumb = { breadcrumb }
128
+ status = { item . state }
129
+ testTag = { "Level 1" /* Quick quizzes are currently just gameboards. This tag doesn't exist yet. */ }
130
+ url = { url }
131
+ audienceViews = { audienceViews }
132
+ { ...rest }
133
+ /> ;
134
+ } ;
135
+
136
+ export const GenericListViewItem = ( { item, ...rest } : { item : ShortcutResponse } ) => {
137
+ const breadcrumb = tags . getByIdsAsHierarchy ( ( item . tags || [ ] ) as TAG_ID [ ] ) . map ( tag => tag . title ) ;
138
+ const audienceViews : ViewingContext [ ] = determineAudienceViews ( item . audience ) ;
139
+ const itemSubject = tags . getSpecifiedTag ( TAG_LEVEL . subject , item . tags as TAG_ID [ ] ) ?. id as Subject ;
140
+ const url = `/${ documentTypePathPrefix [ DOCUMENT_TYPE . QUESTION ] } /${ item . id } ` ;
141
+
142
+ return < AbstractListViewItem
143
+ icon = { { type : "hex" , icon : "list-icon-question" , size : "sm" } }
144
+ title = { item . title ?? "" }
145
+ subject = { itemSubject }
146
+ subtitle = { item . subtitle }
147
+ breadcrumb = { breadcrumb }
148
+ status = { item . state }
149
+ url = { url }
150
+ audienceViews = { audienceViews }
151
+ { ...rest }
152
+ /> ;
153
+ } ;
154
+
98
155
export const ListViewCards = ( { cards} : { cards : ListViewCardProps [ ] } ) => {
99
156
const cardGrid : JSX . Element [ ] = [ ] ;
100
- for ( let i = 0 ; i < cards . length ; i += 2 ) {
101
- if ( i % 2 === 0 ) {
102
- cardGrid . push ( < Row className = "w-100 link-list list-group-links ms-0 border-0" key = { i } >
103
- < Col xs = { 12 } lg = { 6 } className = "list-view-card-border" >
104
- < ListViewCard { ...cards [ i ] } />
105
- </ Col >
106
- < Col xs = { 12 } lg = { 6 } className = "list-view-card-border" >
107
- < ListViewCard { ...cards [ i + 1 ] } />
108
- </ Col >
109
- </ Row > ) ;
110
- }
157
+ for ( let i = 0 ; i < ( cards . length - cards . length % 2 ) ; i += 2 ) {
158
+ cardGrid . push ( < Row className = "w-100 link-list list-group-links ms-0 border-0" >
159
+ < Col xs = { 12 } lg = { 6 } className = "list-view-card-border" >
160
+ < ListViewCard { ...cards [ i ] } />
161
+ </ Col >
162
+ < Col xs = { 12 } lg = { 6 } className = "list-view-card-border" >
163
+ < ListViewCard { ...cards [ i + 1 ] } />
164
+ </ Col >
165
+ </ Row > ) ;
166
+ }
167
+ if ( cards . length % 2 == 1 ) {
168
+ cardGrid . push ( < Row className = "w-100 link-list list-group-links ms-0 border-0 justify-content-center" >
169
+ < Col xs = { 12 } lg = { 6 } className = "list-view-card-border" >
170
+ < ListViewCard { ...cards [ cards . length - 1 ] } />
171
+ </ Col >
172
+ </ Row > ) ;
111
173
}
112
174
113
175
return < div className = "list-view-card-container" >
@@ -116,37 +178,26 @@ export const ListViewCards = ({cards}: {cards: ListViewCardProps[]}) => {
116
178
} ;
117
179
118
180
export const ListView = ( { items, ...rest } : { items : ShortcutResponse [ ] , fullWidth ?: boolean , isQuizSetter ?: boolean } ) => {
119
-
120
- // Cards (e.g. the subjects on the homepage) Xxxx
121
- // Questions X
122
- // Question Packs
123
- // Quick Quizzes
124
- // Concepts
125
- // Tests x
126
-
127
181
return < ListGroup className = "link-list list-group-links" >
128
182
{ items . map ( ( item , index ) => {
129
183
switch ( item . type ) {
184
+ case ( DOCUMENT_TYPE . GENERIC ) :
130
185
case ( SEARCH_RESULT_TYPE . SHORTCUT ) :
131
- return < QuestionListViewItem key = { index } item = { item } { ...rest } /> ;
186
+ return < GenericListViewItem key = { index } item = { item } { ...rest } /> ;
132
187
case ( DOCUMENT_TYPE . QUESTION ) :
133
188
case ( DOCUMENT_TYPE . FAST_TRACK_QUESTION ) :
134
189
return < QuestionListViewItem key = { index } item = { item } { ...rest } /> ;
135
190
case ( DOCUMENT_TYPE . CONCEPT ) :
136
191
return < ConceptListViewItem key = { index } item = { item } { ...rest } /> ;
137
192
case ( DOCUMENT_TYPE . EVENT ) :
138
193
return < EventListViewItem key = { index } item = { item } { ...rest } /> ;
139
- case ( DOCUMENT_TYPE . TOPIC_SUMMARY ) :
140
- return < ConceptListViewItem key = { index } item = { item } { ...rest } /> ;
141
- case ( DOCUMENT_TYPE . GENERIC ) :
142
- return < QuestionListViewItem key = { index } item = { item } { ...rest } /> ;
143
194
case ( DOCUMENT_TYPE . QUIZ ) :
144
195
return < QuizListViewItem key = { index } item = { item } { ...rest } /> ;
145
196
default :
146
197
// Do not render this item if there is no matching DOCUMENT_TYPE
147
198
console . error ( "Not able to display item as a ListViewItem: " , item ) ;
148
199
return null ;
149
- }
200
+ }
150
201
} ) }
151
202
</ ListGroup > ;
152
203
} ;
0 commit comments