@@ -12,7 +12,7 @@ type SubmitResult = {
1212 maxScore : number ;
1313 percentage : number ;
1414 results : Array < {
15- number : number ;
15+ number : string ;
1616 rawAnswer : string ;
1717 isCorrect : boolean ;
1818 pointsAwarded : number ;
@@ -21,9 +21,9 @@ type SubmitResult = {
2121
2222type Props = {
2323 problemSetId : string ;
24- problemCount : number ;
24+ problemNumbers : string [ ] ;
2525 problemSummaries ?: Array < {
26- number : number ;
26+ number : string ;
2727 topicTags : string [ ] ;
2828 explanationNote : string | null ;
2929 contentFormat : "LATEX" | "HTML" ;
@@ -37,12 +37,11 @@ const REVIEW_KEY_PREFIX = "mo-review-";
3737
3838export function AnswerGrid ( {
3939 problemSetId,
40- problemCount ,
40+ problemNumbers ,
4141 problemSummaries = [ ] ,
4242 videoUrl = null ,
4343 lockedAttemptNumber = null ,
4444} : Props ) {
45- const problemNumbers = Array . from ( { length : problemCount } , ( _ , i ) => i + 1 ) ;
4645 const autosaveKey = `${ AUTOSAVE_KEY_PREFIX } ${ problemSetId } ` ;
4746 const reviewKey = `${ REVIEW_KEY_PREFIX } ${ problemSetId } ` ;
4847
@@ -59,11 +58,11 @@ export function AnswerGrid({
5958 const [ isSubmitting , setIsSubmitting ] = useState ( false ) ;
6059 const [ submitResult , setSubmitResult ] = useState < SubmitResult | null > ( null ) ;
6160 const [ submitError , setSubmitError ] = useState < string | null > ( null ) ;
62- const [ reviewLater , setReviewLater ] = useState < Set < number > > ( ( ) => {
61+ const [ reviewLater , setReviewLater ] = useState < Set < string > > ( ( ) => {
6362 if ( typeof window === "undefined" ) return new Set ( ) ;
6463 try {
6564 const saved = localStorage . getItem ( reviewKey ) ;
66- return new Set ( saved ? ( JSON . parse ( saved ) as number [ ] ) : [ ] ) ;
65+ return new Set ( saved ? ( JSON . parse ( saved ) as string [ ] ) : [ ] ) ;
6766 } catch {
6867 return new Set ( ) ;
6968 }
@@ -93,9 +92,9 @@ export function AnswerGrid({
9392 [ autosaveKey ] ,
9493 ) ;
9594
96- function onAnswerChange ( number : number , value : string ) {
95+ function onAnswerChange ( number : string , value : string ) {
9796 setAnswers ( ( prev ) => {
98- const next = { ...prev , [ String ( number ) ] : value } ;
97+ const next = { ...prev , [ number ] : value } ;
9998 debouncedSave ( next ) ;
10099 return next ;
101100 } ) ;
@@ -151,7 +150,7 @@ export function AnswerGrid({
151150 startTime . current = Date . now ( ) ;
152151 }
153152
154- function toggleReviewLater ( problemNumber : number ) {
153+ function toggleReviewLater ( problemNumber : string ) {
155154 setReviewLater ( ( current ) => {
156155 const next = new Set ( current ) ;
157156 if ( next . has ( problemNumber ) ) {
@@ -187,7 +186,7 @@ export function AnswerGrid({
187186 headers : { "Content-Type" : "application/json" } ,
188187 body : JSON . stringify ( {
189188 problemSetId,
190- problemNumber : problemNumber ? Number ( problemNumber ) : null ,
189+ problemNumber : problemNumber ? problemNumber : null ,
191190 type,
192191 message,
193192 } ) ,
@@ -453,7 +452,7 @@ export function AnswerGrid({
453452 aria-label = { `Answer ${ number } ` }
454453 name = { `answer-${ number } ` }
455454 placeholder = "answer"
456- value = { answers [ String ( number ) ] ?? "" }
455+ value = { answers [ number ] ?? "" }
457456 onChange = { ( e ) => onAnswerChange ( number , e . target . value ) }
458457 />
459458 </ label >
@@ -462,7 +461,7 @@ export function AnswerGrid({
462461
463462 < div className = "problem-actions" >
464463 < span className = "fill-count" >
465- { filledCount } /{ problemCount } answered
464+ { filledCount } /{ problemNumbers . length } answered
466465 </ span >
467466 < button
468467 className = "secondary-action"
0 commit comments