commit b9804fe555dd7e982cd4cf50c52616577bd0fbec
parent 57be49f4c638dfe9800cb9b5a5c171590eed9741
Author: hrryt <harry@mayesfield.uk>
Date: Sat, 1 Aug 2026 00:35:27 +0100
Rename parameters variables and constants
Diffstat:
5 files changed, 41 insertions(+), 45 deletions(-)
diff --git a/src/components/MultipleSelection.jsx b/src/components/MultipleSelection.jsx
@@ -1,12 +1,12 @@
import * as React from 'react';
-export default function MultipleSelection({ parameter, setParameter, id, legend, values, labels = values }) {
- checked = values.map(value => parameter.includes(value));
+export default function MultipleSelection({ variable, setVariable, id, legend, values, labels = values }) {
+ checked = values.map(value => variable.includes(value));
- function updateParameter(e, index) {
+ function updateVariable(e, index) {
const newChecked = checked.map((value, i) => i === index ? e.target.checked : value);
const validChecked = newChecked.some(Boolean) ? newChecked : checked.map((value) => !value);
- setParameter(values.filter((_, i) => validChecked[i]));
+ setVariable(values.filter((_, i) => validChecked[i]));
}
return (
@@ -16,7 +16,7 @@ export default function MultipleSelection({ parameter, setParameter, id, legend,
const name = `${id}:${value}`;
return (
<div key={value} className="field-row">
- <input type="checkbox" id={name} name={name} checked={checked[i]} onChange={e => updateParameter(e, i)} />
+ <input type="checkbox" id={name} name={name} checked={checked[i]} onChange={e => updateVariable(e, i)} />
<label htmlFor={name}>{labels[i]}</label>
</div>
);
diff --git a/src/components/QuestionWindow.jsx b/src/components/QuestionWindow.jsx
@@ -24,27 +24,27 @@ function chooseQuestionComponent(type) {
}
}
-function resolveParameters(question, variableParameters) {
- const parameters = question.lockedParameters || { };
- const controlledParameters = question.controlledParameters || { };
- Object.keys(controlledParameters).forEach((key) => {
- parameters[key] = variableParameters[controlledParameters[key]];
+function resolveParameters(question, variables) {
+ const parameters = question.constants || { };
+ const variableKeys = question.variables || { };
+ Object.keys(variableKeys).forEach((key) => {
+ parameters[key] = variables[variableKeys[key]];
})
return parameters;
}
-function renderQuestion(seed, showAnswer, variableParameters) {
+function renderQuestion(seed, showAnswer, variables) {
return (question, i) => {
const QuestionComponent = chooseQuestionComponent(question.type);
- const parameters = resolveParameters(question, variableParameters);
- return <QuestionComponent key={i} seed={seed+i} showAnswer={showAnswer} parameters={parameters} />;
+ const parameters = resolveParameters(question, variables);
+ return <QuestionComponent key={i} seed={seed+i} showAnswer={showAnswer} {...parameters} />;
};
}
-function getQuestionList(id, questions, showAnswers, seed, variableParameters) {
+function getQuestionList(id, questions, showAnswers, seed, variables) {
return (
<QuestionList key={id}>
- {questions.map(renderQuestion(seed, showAnswers, variableParameters))}
+ {questions.map(renderQuestion(seed, showAnswers, variables))}
</QuestionList>
);
}
@@ -55,18 +55,18 @@ function shuffleArray(arr, n, seed) {
export default function QuestionWindow({ data }) {
- defaultParameters = Object.fromEntries(
- data.inputs.map(input => [input.id, input.default ?? input.values])
+ defaultVariables = Object.fromEntries(
+ data.variables.map(input => [input.id, input.default ?? input.values])
);
- const [showAnswers , setShowAnswers ] = React.useState(false);
- const [seed , setSeed ] = React.useState(Math.random());
- const [variableParameters , setVariableParameters ] = React.useState(defaultParameters);
+ const [showAnswers, setShowAnswers] = React.useState(false);
+ const [seed , setSeed ] = React.useState(Math.random());
+ const [variables , setVariables ] = React.useState(defaultVariables);
- function setParameter(id) {
+ function setVariable(id) {
return (value) => {
- setVariableParameters({
- ...variableParameters,
+ setVariables({
+ ...variables,
[id]: value
});
}
@@ -79,19 +79,17 @@ export default function QuestionWindow({ data }) {
const questions = data.questionLists.map(questionList => {
const { id: id, n: n, questions: unique_questions } = questionList;
const questions = shuffleArray(unique_questions, n, current_seed);
- const randomQuestionList = getQuestionList(id, questions, showAnswers, current_seed, variableParameters);
+ const randomQuestionList = getQuestionList(id, questions, showAnswers, current_seed, variables);
current_seed += n;
return randomQuestionList;
});
- const fields = data.inputs.map(input => {
+ const fields = data.variables.map(input => {
const { type: type, ...props } = input;
const InputComponent = chooseInputComponent(type);
- return <InputComponent parameter={variableParameters[input.id]} setParameter={setParameter(input.id)} {...props} />;
+ return <InputComponent variable={variables[input.id]} setVariable={setVariable(input.id)} {...props} />;
});
- console.log(variableParameters);
-
return (
<Window title="Questions">
{fields}
diff --git a/src/components/questions/AddingFractionsQuestion.jsx b/src/components/questions/AddingFractionsQuestion.jsx
@@ -26,7 +26,7 @@ function getRandomFractions(seed) {
return [num1, denom1, num2, denom2];
}
-export default function AddingFractionsQuestion({ seed, showAnswer, parameters }) {
+export default function AddingFractionsQuestion({ seed, showAnswer }) {
const [num1, denom1, num2, denom2] = getRandomFractions(seed);
const question = formatFraction(num1, denom1) + ' + ' + formatFraction(num2, denom2);
diff --git a/src/components/questions/QuadraticEquationQuestion.jsx b/src/components/questions/QuadraticEquationQuestion.jsx
@@ -45,17 +45,17 @@ function getRandomRoots(seed) {
].sort((a, b) => a - b);
}
-export default function QuadraticEquationQuestion({ seed, showAnswer, parameters }) {
- const {
- aPlurality: aPlurality = ["a=1", "a>1"],
- factorise: factorise = getRandomBoolean(seed + .1),
- } = parameters;
-
+export default function QuadraticEquationQuestion({ seed, showAnswer, aPlurality, framing }) {
const aChoices = Array();
aPlurality.includes("a=1") && aChoices.push(1);
aPlurality.includes("a>1") && aChoices.push(2, 3);
const a = getRandomChoice(aChoices, seed);
+ const factoriseChoices = Array();
+ framing.includes("Solve") && factoriseChoices.push(false);
+ framing.includes("Factorise") && factoriseChoices.push(true);
+ const factorise = getRandomChoice(factoriseChoices, seed + .1);
+
const [root1, root2] = getRandomRoots(seed + .2);
const b = a * -(root1 + root2);
diff --git a/src/data/test-question-window.js b/src/data/test-question-window.js
@@ -1,7 +1,12 @@
export const questionWindow = {
- inputs: [{
+ variables: [{
+ id: 'framing',
+ legend: 'Quadratic Equations: Framing',
+ type: 'multiple-selection',
+ values: ["Solve", "Factorise"],
+ }, {
id: 'aPlurality',
- legend: 'Quadratic Equations: a',
+ legend: 'Quadratic Equations: Coefficient a',
type: 'multiple-selection',
values: ["a=1", "a>1"],
}],
@@ -10,7 +15,7 @@ export const questionWindow = {
n: 10,
questions: [{
type: 'quadratic-equation',
- controlledParameters: { aPlurality: 'aPlurality' },
+ variables: { aPlurality: 'aPlurality', framing: 'framing' },
}]
}, {
id: 1,
@@ -18,12 +23,5 @@ export const questionWindow = {
questions: [{
type: 'adding-fractions',
}]
- }, {
- id: 2,
- n: 5,
- questions: [{
- type: 'quadratic-equation',
- lockedParameters: { aPlurality: ["a=1"], factorise: false },
- }]
}]
}