From 097176a26db7b0c80b3be5e6fe469539f65de0ea Mon Sep 17 00:00:00 2001 From: Ben Christel Date: Fri, 7 Feb 2025 09:58:13 -0800 Subject: [PATCH] Create a function to get the public options for a Matrix widget (#2207) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: https://khanacademy.atlassian.net/browse/LEMS-2762 ## Test plan: `yarn test` Author: benchristel Reviewers: Myranae, handeyeco, jeremywiebe Required Reviewers: Approved By: Myranae Checks: ✅ Publish npm snapshot (ubuntu-latest, 20.x), ✅ Lint, Typecheck, Format, and Test (ubuntu-latest, 20.x), ✅ Cypress (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), ✅ Publish Storybook to Chromatic (ubuntu-latest, 20.x) Pull Request URL: https://github.com/Khan/perseus/pull/2207 --- .changeset/lazy-shirts-fix.md | 6 +++++ packages/perseus-core/src/index.ts | 1 + .../src/widgets/matrix/matrix-util.test.ts | 27 +++++++++++++++++++ .../src/widgets/matrix/matrix-util.ts | 13 +++++++++ packages/perseus/src/types.ts | 4 ++- .../perseus/src/widgets/matrix/matrix.tsx | 2 ++ 6 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 .changeset/lazy-shirts-fix.md create mode 100644 packages/perseus-core/src/widgets/matrix/matrix-util.test.ts create mode 100644 packages/perseus-core/src/widgets/matrix/matrix-util.ts diff --git a/.changeset/lazy-shirts-fix.md b/.changeset/lazy-shirts-fix.md new file mode 100644 index 0000000000..2f25bf9d6d --- /dev/null +++ b/.changeset/lazy-shirts-fix.md @@ -0,0 +1,6 @@ +--- +"@khanacademy/perseus": minor +"@khanacademy/perseus-core": minor +--- + +Create a function to get the public options for a Matrix widget diff --git a/packages/perseus-core/src/index.ts b/packages/perseus-core/src/index.ts index c0abc08bfd..406e998e4c 100644 --- a/packages/perseus-core/src/index.ts +++ b/packages/perseus-core/src/index.ts @@ -136,3 +136,4 @@ export {default as getNumberLinePublicWidgetOptions} from "./widgets/number-line export {default as getRadioPublicWidgetOptions} from "./widgets/radio/radio-util"; export {default as getTablePublicWidgetOptions} from "./widgets/table/table-util"; export {default as getIFramePublicWidgetOptions} from "./widgets/iframe/iframe-util"; +export {default as getMatrixPublicWidgetOptions} from "./widgets/matrix/matrix-util"; diff --git a/packages/perseus-core/src/widgets/matrix/matrix-util.test.ts b/packages/perseus-core/src/widgets/matrix/matrix-util.test.ts new file mode 100644 index 0000000000..b26691d16a --- /dev/null +++ b/packages/perseus-core/src/widgets/matrix/matrix-util.test.ts @@ -0,0 +1,27 @@ +import getMatrixPublicWidgetOptions from "./matrix-util"; + +import type {PerseusMatrixWidgetOptions} from "../../data-schema"; + +describe("getMatrixPublicWidgetOptions", () => { + it("removes the `answers` field", () => { + const options: PerseusMatrixWidgetOptions = { + answers: [ + [1, 2], + [3, 4], + ], + cursorPosition: [0, 0], + matrixBoardSize: [2, 2], + prefix: "the prefix", + suffix: "the suffix", + }; + + const publicOptions = getMatrixPublicWidgetOptions(options); + + expect(publicOptions).toEqual({ + cursorPosition: [0, 0], + matrixBoardSize: [2, 2], + prefix: "the prefix", + suffix: "the suffix", + }); + }); +}); diff --git a/packages/perseus-core/src/widgets/matrix/matrix-util.ts b/packages/perseus-core/src/widgets/matrix/matrix-util.ts new file mode 100644 index 0000000000..e6e685323f --- /dev/null +++ b/packages/perseus-core/src/widgets/matrix/matrix-util.ts @@ -0,0 +1,13 @@ +import type {PerseusMatrixWidgetOptions} from "@khanacademy/perseus-core"; + +type MatrixPublicWidgetOptions = Pick< + PerseusMatrixWidgetOptions, + "prefix" | "suffix" | "cursorPosition" | "matrixBoardSize" | "static" +>; + +export default function getMatrixPublicWidgetOptions( + options: PerseusMatrixWidgetOptions, +): MatrixPublicWidgetOptions { + const {answers: _, ...publicOptions} = options; + return publicOptions; +} diff --git a/packages/perseus/src/types.ts b/packages/perseus/src/types.ts index db46fe998e..d1ffe904e5 100644 --- a/packages/perseus/src/types.ts +++ b/packages/perseus/src/types.ts @@ -34,6 +34,7 @@ import type { getRadioPublicWidgetOptions, getTablePublicWidgetOptions, getIFramePublicWidgetOptions, + getMatrixPublicWidgetOptions, } from "@khanacademy/perseus-core"; import type {LinterContextProps} from "@khanacademy/perseus-linter"; import type { @@ -504,7 +505,8 @@ export type PublicWidgetOptionsFunction = | typeof getCSProgramPublicWidgetOptions | typeof getNumberLinePublicWidgetOptions | typeof getTablePublicWidgetOptions - | typeof getGrapherPublicWidgetOptions; + | typeof getGrapherPublicWidgetOptions + | typeof getMatrixPublicWidgetOptions; export type WidgetExports< T extends React.ComponentType & Widget = React.ComponentType, diff --git a/packages/perseus/src/widgets/matrix/matrix.tsx b/packages/perseus/src/widgets/matrix/matrix.tsx index cb19570d60..94e5f5eee4 100644 --- a/packages/perseus/src/widgets/matrix/matrix.tsx +++ b/packages/perseus/src/widgets/matrix/matrix.tsx @@ -1,4 +1,5 @@ import { + getMatrixPublicWidgetOptions, getMatrixSize, type PerseusMatrixWidgetAnswers, type PerseusMatrixWidgetOptions, @@ -572,4 +573,5 @@ export default { transform: propTransform, staticTransform: staticTransform, isLintable: true, + getPublicWidgetOptions: getMatrixPublicWidgetOptions, } satisfies WidgetExports;