Skip to content

Commit

Permalink
Create a function to get the public options for the NumberLine widget (
Browse files Browse the repository at this point in the history
…#2179)

Issue: https://khanacademy.atlassian.net/browse/LEMS-2768

## Test plan:

`yarn test`

Author: benchristel

Reviewers: Myranae, handeyeco, jeremywiebe

Required Reviewers:

Approved By: Myranae

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

Pull Request URL: #2179
  • Loading branch information
benchristel authored Feb 3, 2025
1 parent 7f88f17 commit 564447a
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 1 deletion.
6 changes: 6 additions & 0 deletions .changeset/wise-plants-lick.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@khanacademy/perseus": minor
"@khanacademy/perseus-core": minor
---

Create a function to get the public options for the NumberLine widget
1 change: 1 addition & 0 deletions packages/perseus-core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,3 +122,4 @@ export {default as getLabelImagePublicWidgetOptions} from "./widgets/label-image
export {default as getSorterPublicWidgetOptions} from "./widgets/sorter/sorter-util";
export {default as getDropdownPublicWidgetOptions} from "./widgets/dropdown/dropdown-util";
export {default as getNumericInputPublicWidgetOptions} from "./widgets/numeric-input/numeric-input-util";
export {default as getNumberLinePublicWidgetOptions} from "./widgets/number-line/number-line-util";
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import getNumberLinePublicWidgetOptions from "./number-line-util";

import type {PerseusNumberLineWidgetOptions} from "../../data-schema";

describe("getNumberLinePublicWidgetOptions", () => {
it("removes correctX and correctRel", () => {
const options: PerseusNumberLineWidgetOptions = {
correctRel: "lt",
correctX: 42,
range: [0, 100],
numDivisions: 5,
tickStep: 6,
divisionRange: [],
initialX: 3,
labelRange: [],
labelStyle: "",
labelTicks: false,
snapDivisions: 0,
isTickCtrl: false,
showTooltips: false,
static: false,
};

const publicOptions = getNumberLinePublicWidgetOptions(options);

expect(publicOptions).toEqual({
range: [0, 100],
numDivisions: 5,
tickStep: 6,
divisionRange: [],
initialX: 3,
labelRange: [],
labelStyle: "",
labelTicks: false,
snapDivisions: 0,
isTickCtrl: false,
showTooltips: false,
static: false,
});
});
});
24 changes: 24 additions & 0 deletions packages/perseus-core/src/widgets/number-line/number-line-util.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import type {PerseusNumberLineWidgetOptions} from "../../data-schema";

type NumberLinePublicWidgetOptions = Pick<
PerseusNumberLineWidgetOptions,
| "range"
| "labelRange"
| "labelStyle"
| "labelTicks"
| "isTickCtrl"
| "divisionRange"
| "numDivisions"
| "snapDivisions"
| "tickStep"
| "initialX"
| "showTooltips"
| "static"
>;

export default function getNumberLinePublicWidgetOptions(
options: PerseusNumberLineWidgetOptions,
): NumberLinePublicWidgetOptions {
const {correctX: _, correctRel: __, ...publicOptions} = options;
return publicOptions;
}
4 changes: 3 additions & 1 deletion packages/perseus/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import type {
getSorterPublicWidgetOptions,
getDropdownPublicWidgetOptions,
getNumericInputPublicWidgetOptions,
getNumberLinePublicWidgetOptions,
} from "@khanacademy/perseus-core";
import type {LinterContextProps} from "@khanacademy/perseus-linter";
import type {
Expand Down Expand Up @@ -553,7 +554,8 @@ export type PublicWidgetOptionsFunction =
| typeof getExpressionPublicWidgetOptions
| typeof getLabelImagePublicWidgetOptions
| typeof getSorterPublicWidgetOptions
| typeof getCSProgramPublicWidgetOptions;
| typeof getCSProgramPublicWidgetOptions
| typeof getNumberLinePublicWidgetOptions;

export type WidgetExports<
T extends React.ComponentType<any> & Widget = React.ComponentType<any>,
Expand Down
2 changes: 2 additions & 0 deletions packages/perseus/src/widgets/number-line/number-line.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {number as knumber, KhanMath} from "@khanacademy/kmath";
import {getNumberLinePublicWidgetOptions} from "@khanacademy/perseus-core";
import {scoreNumberLine, validateNumberLine} from "@khanacademy/perseus-score";
import * as React from "react";
import ReactDOM from "react-dom";
Expand Down Expand Up @@ -808,4 +809,5 @@ export default {
// TODO(LEMS-2656): remove TS suppression
// @ts-expect-error: Type 'UserInput' is not assignable to type 'PerseusNumberLineUserInput'.
validator: validateNumberLine,
getPublicWidgetOptions: getNumberLinePublicWidgetOptions,
} satisfies WidgetExports<typeof NumberLine>;

0 comments on commit 564447a

Please sign in to comment.