Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refine Radio's Rubric and UserInput types #1758

Merged
merged 8 commits into from
Oct 28, 2024

Conversation

Myranae
Copy link
Contributor

@Myranae Myranae commented Oct 16, 2024

Summary:

As part of the Server Side Scoring project, this refactors Radio's Rubric type to only contain what is necessary for scoring and UserInput to only contain info about the user's input. Also adds the types to Radio's validator tests.

Issue: LEMS-2471

Test plan:

  • Confirm all checks pass
  • Confirm Radio still works as expected via Storybook

@Myranae Myranae self-assigned this Oct 16, 2024
Copy link
Contributor

github-actions bot commented Oct 16, 2024

npm Snapshot: Published

Good news!! We've packaged up the latest commit from this PR (277954c) and published it to npm. You
can install it using the tag PR1758.

Example:

yarn add @khanacademy/perseus@PR1758

If you are working in Khan Academy's webapp, you can run:

./dev/tools/bump_perseus_version.sh -t PR1758

Copy link
Contributor

github-actions bot commented Oct 16, 2024

Size Change: -13 B (0%)

Total Size: 866 kB

Filename Size Change
packages/perseus/dist/es/index.js 419 kB -13 B (0%)
ℹ️ View Unchanged
Filename Size
packages/kas/dist/es/index.js 38.8 kB
packages/keypad-context/dist/es/index.js 760 B
packages/kmath/dist/es/index.js 4.27 kB
packages/math-input/dist/es/index.js 77.8 kB
packages/math-input/dist/es/strings.js 1.79 kB
packages/perseus-core/dist/es/index.js 1.48 kB
packages/perseus-editor/dist/es/index.js 280 kB
packages/perseus-linter/dist/es/index.js 22.2 kB
packages/perseus/dist/es/strings.js 3.4 kB
packages/pure-markdown/dist/es/index.js 3.66 kB
packages/simple-markdown/dist/es/index.js 12.4 kB

compressed-size-action

@Myranae Myranae marked this pull request as ready for review October 16, 2024 21:19
@Myranae Myranae requested a review from handeyeco October 16, 2024 21:19
@khan-actions-bot
Copy link
Contributor

khan-actions-bot commented Oct 16, 2024

Gerald

Required Reviewers
  • @Khan/perseus for changes to .changeset/odd-dancers-relax.md, packages/perseus/src/validation.types.ts, packages/perseus/src/multi-items/__tests__/multi-renderer.test.tsx, packages/perseus/src/widgets/group/group.test.tsx, packages/perseus/src/widgets/radio/radio-component.tsx, packages/perseus/src/widgets/radio/radio-validator.test.ts, packages/perseus/src/widgets/radio/radio-validator.ts

Don't want to be involved in this pull request? Comment #removeme and we won't notify you of further changes.

@khan-actions-bot khan-actions-bot requested a review from a team October 16, 2024 21:19

export type PerseusRadioUserInput = {
/*TODO(LEMS-2541): countChoices seems to be necessary for rendering the
question, not scoring. Maybe move to renderProps?*/
countChoices?: boolean;
Copy link
Contributor

@handeyeco handeyeco Oct 16, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So one way to look at the overall problem of RenderProps vs UserInput vs Rubric: is the thing in question used in the validator? Since countChoices isn't in the validator (or any of the functionality that the validator uses), it can't be in the Rubric (which is stuff we need from KA to validate the answer) or UserInput (which is stuff we need from the leaner to validate the answer). It's rendering logic, so RenderProps.

Then like numCorrect is a weird one:

  • Is there anything the learner can do to affect numCorrect and if so would that affect their score? No, so it's not UserInput.
  • Is numCorrect something KA determines and is it used to score? Yes, so it's part of the Rubric.
  • Is numCorrect something that determines how we render the component? Yes, so it needs to be part of RenderProps.

There's some overlap between all of this, but that's okay. What's important (for this leg of the work) is that we know exactly what shape the Rubric and UserInput is.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Totally makes sense. I wanted to fix the UserInput so countChoices is not included, but that requires some logic refactoring, which is why I created a separate ticket for it. Should I just do the refactoring as part of the type update here?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I went through the code to see where removing countChoices from Radio's user input would require a refactor, but didn't see it. I asked Jeremy to follow-up on this today so you have coverage while I'm gone.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I was getting some weird errors the first time, but I was able to follow through with removing countChoices from the UserInput type, so that's been added here.

Copy link
Member

@catandthemachines catandthemachines left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me!

choicesSelected: [false, false, false, false, true],
noneOfTheAboveSelected: true,
noneOfTheAboveIndex: 4,
};

const rubric = {
const rubric: PerseusRadioRubric = {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I love all this typing. Thank you!

@khan-actions-bot khan-actions-bot requested a review from a team October 17, 2024 16:46
@Myranae Myranae requested a review from handeyeco October 17, 2024 16:52
@Myranae Myranae changed the title Refine Radio's Rubric type Refine Radio's Rubric and UserInput types Oct 17, 2024
Copy link
Contributor

@handeyeco handeyeco left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you

@@ -21,7 +21,7 @@ function radioValidator(
};
}

// TODO: should numCorrect actually be on the rubric
// TODO(LEMS-2541): should numCorrect actually be on the rubric
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for filing this ticket. I think numCorrect, noneOfTheAboveIndex, and noneOfTheAboveSelected are all problematic, but I don't think we have to address it in this PR. It should probably be a fast follow though.

@Myranae Myranae merged commit d6edf18 into main Oct 28, 2024
9 checks passed
@Myranae Myranae deleted the tb/LEMS-2471/radio-refine-types branch October 28, 2024 15:53
benchristel pushed a commit that referenced this pull request Oct 28, 2024
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.


# Releases
## @khanacademy/[email protected]

### Patch Changes

-   [#1799](#1799) [`f3139edfe`](f3139ed) Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Change functional components to use default parameters instead of deprecated 'defaultProps'

## @khanacademy/[email protected]

### Patch Changes

-   [#1766](#1766) [`39e1292a9`](39e1292) Thanks [@Myranae](https://github.com/Myranae)! - Refine iFrame's Rubric type


-   [#1799](#1799) [`f3139edfe`](f3139ed) Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Change functional components to use default parameters instead of deprecated 'defaultProps'


-   [#1765](#1765) [`5cf8d975b`](5cf8d97) Thanks [@Myranae](https://github.com/Myranae)! - Refine Sorter's Rubric type


-   [#1758](#1758) [`d6edf18ef`](d6edf18) Thanks [@Myranae](https://github.com/Myranae)! - Refine Radio's Rubric and UserInput types


-   [#1743](#1743) [`5ea5d5927`](5ea5d59) Thanks [@mark-fitzgerald](https://github.com/mark-fitzgerald)! - BUGFIX - [Numeric Input] - Check for wrong answers when scoring


-   [#1760](#1760) [`9426509cd`](9426509) Thanks [@Myranae](https://github.com/Myranae)! - Refine Matrix's Rubric and UserInput types


-   [#1761](#1761) [`dbe17d1ee`](dbe17d1) Thanks [@Myranae](https://github.com/Myranae)! - Refine NumericInput's Rubric type

-   Updated dependencies \[[`f3139edfe`](f3139ed)]:
    -   @khanacademy/[email protected]

## @khanacademy/[email protected]

### Patch Changes

-   [#1794](#1794) [`9dd0f8c56`](9dd0f8c) Thanks [@jeremywiebe](https://github.com/jeremywiebe)! - Remove unused prop, optionRenderer, from dropdown-option component

-   Updated dependencies \[[`39e1292a9`](39e1292), [`f3139edfe`](f3139ed), [`5cf8d975b`](5cf8d97), [`d6edf18ef`](d6edf18), [`5ea5d5927`](5ea5d59), [`9426509cd`](9426509), [`dbe17d1ee`](dbe17d1)]:
    -   @khanacademy/[email protected]
    -   @khanacademy/[email protected]

## @khanacademy/[email protected]

### Patch Changes

-   Updated dependencies \[[`f3139edfe`](f3139ed)]:
    -   @khanacademy/[email protected]

Author: khan-actions-bot

Reviewers: benchristel

Required Reviewers:

Approved By: benchristel

Checks: ⏭️  Publish npm snapshot, ✅ Lint, Typecheck, Format, and Test (ubuntu-latest, 20.x), ✅ Check builds for changes in size (ubuntu-latest, 20.x), ✅ Cypress (ubuntu-latest, 20.x), ✅ Check for .changeset entries for all changed files (ubuntu-latest, 20.x), ✅ gerald

Pull Request URL: #1800
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants