Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/lazy-donuts-yell.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"@khanacademy/perseus": patch
"@khanacademy/perseus-core": patch
"@khanacademy/perseus-editor": patch
---

Removing Interactive Graph Builder and refactoring tests/storybook to use more standardized generator patterns.
3 changes: 3 additions & 0 deletions packages/perseus-core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,10 @@ export {
generateIGLockedPolygon,
generateIGLockedFunction,
generateIGLockedLabel,
generateIGExponentialGraph,
generateIGAbsoluteValueGraph,
generateInteractiveGraphWidget,
generateInteractiveGraphQuestion,
} from "./utils/generators/interactive-graph-widget-generator";
export {
generateNumericInputOptions,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import interactiveGraphWidgetLogic from "../../widgets/interactive-graph";
import {getDefaultFigureForType} from "../get-default-figure-for-type";
import {generateTestPerseusRenderer} from "../test-utils";

import type {
InteractiveGraphWidget,
Expand All @@ -10,8 +11,10 @@ import type {
LockedPointType,
LockedPolygonType,
LockedVectorType,
PerseusGraphTypeAbsoluteValue,
PerseusGraphTypeAngle,
PerseusGraphTypeCircle,
PerseusGraphTypeExponential,
PerseusGraphTypeLinear,
PerseusGraphTypeLinearSystem,
PerseusGraphTypeNone,
Expand All @@ -23,6 +26,7 @@ import type {
PerseusGraphTypeSinusoid,
PerseusGraphTypeTangent,
PerseusInteractiveGraphWidgetOptions,
PerseusRenderer,
} from "../../data-schema";

export function generateInteractiveGraphWidget(
Expand Down Expand Up @@ -217,3 +221,48 @@ export function generateIGLockedLabel(
...options,
};
}

export function generateIGExponentialGraph(
options?: Partial<Omit<PerseusGraphTypeExponential, "type">>,
): PerseusGraphTypeExponential {
return {
type: "exponential",
...options,
};
}

export function generateIGAbsoluteValueGraph(
options?: Partial<Omit<PerseusGraphTypeAbsoluteValue, "type">>,
): PerseusGraphTypeAbsoluteValue {
return {
type: "absolute-value",
...options,
};
}

export function generateInteractiveGraphQuestion(
options?: Partial<PerseusInteractiveGraphWidgetOptions> & {
content?: string;
isStatic?: boolean;
},
): PerseusRenderer {
const {content, isStatic, ...widgetOptions} = options ?? {};

// If `correct` is set but `graph` is not, default `graph` to match
// the correct answer's type. For graph types that need shared config
// (like numSides, numPoints, snapTo), callers should pass `graph`
// explicitly.
if (widgetOptions.correct && !widgetOptions.graph) {
widgetOptions.graph = {type: widgetOptions.correct.type};
}

return generateTestPerseusRenderer({
content: content ?? "[[☃ interactive-graph 1]]",
widgets: {
"interactive-graph 1": generateInteractiveGraphWidget({
static: isStatic,
options: generateInteractiveGraphOptions(widgetOptions),
}),
},
});
}
Loading
Loading