Compare commits
2 Commits
develop
...
number-pre
Author | SHA1 | Date | |
---|---|---|---|
|
5c23aa12ec | ||
|
387f28c1c9 |
|
@ -46,6 +46,8 @@ export type SquiggleChartProps = {
|
||||||
/** Whether to show vega actions to the user, so they can copy the chart spec */
|
/** Whether to show vega actions to the user, so they can copy the chart spec */
|
||||||
distributionChartActions?: boolean;
|
distributionChartActions?: boolean;
|
||||||
enableLocalSettings?: boolean;
|
enableLocalSettings?: boolean;
|
||||||
|
/** Precision to show numbers */
|
||||||
|
numberPrecision?: number;
|
||||||
} & (StandaloneExecutionProps | ProjectExecutionProps);
|
} & (StandaloneExecutionProps | ProjectExecutionProps);
|
||||||
|
|
||||||
// Props needed for a standalone execution
|
// Props needed for a standalone execution
|
||||||
|
@ -121,6 +123,7 @@ export const SquiggleChart: React.FC<SquiggleChartProps> = React.memo(
|
||||||
height = 200,
|
height = 200,
|
||||||
enableLocalSettings = false,
|
enableLocalSettings = false,
|
||||||
continues = defaultContinues,
|
continues = defaultContinues,
|
||||||
|
numberPrecision,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
const p = React.useMemo(() => {
|
const p = React.useMemo(() => {
|
||||||
|
@ -151,6 +154,7 @@ export const SquiggleChart: React.FC<SquiggleChartProps> = React.memo(
|
||||||
result={valueToRender}
|
result={valueToRender}
|
||||||
width={width}
|
width={width}
|
||||||
height={height}
|
height={height}
|
||||||
|
numberPrecision={numberPrecision}
|
||||||
distributionPlotSettings={distributionPlotSettings}
|
distributionPlotSettings={distributionPlotSettings}
|
||||||
chartSettings={chartSettings}
|
chartSettings={chartSettings}
|
||||||
environment={p.getEnvironment()}
|
environment={p.getEnvironment()}
|
||||||
|
|
|
@ -53,6 +53,7 @@ export const SquiggleEditor: React.FC<SquiggleEditorProps> = (props) => {
|
||||||
executionId = 0,
|
executionId = 0,
|
||||||
width,
|
width,
|
||||||
height = 200,
|
height = 200,
|
||||||
|
numberPrecision,
|
||||||
enableLocalSettings = false,
|
enableLocalSettings = false,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
|
@ -86,6 +87,7 @@ export const SquiggleEditor: React.FC<SquiggleEditorProps> = (props) => {
|
||||||
result={valueToRender}
|
result={valueToRender}
|
||||||
width={width}
|
width={width}
|
||||||
height={height}
|
height={height}
|
||||||
|
numberPrecision={numberPrecision}
|
||||||
distributionPlotSettings={distributionPlotSettings}
|
distributionPlotSettings={distributionPlotSettings}
|
||||||
chartSettings={chartSettings}
|
chartSettings={chartSettings}
|
||||||
environment={environment ?? defaultEnvironment}
|
environment={environment ?? defaultEnvironment}
|
||||||
|
|
|
@ -278,6 +278,7 @@ export const SquigglePlayground: FC<PlaygroundProps> = ({
|
||||||
diagramStart: 0,
|
diagramStart: 0,
|
||||||
diagramStop: 10,
|
diagramStop: 10,
|
||||||
diagramCount: 20,
|
diagramCount: 20,
|
||||||
|
numberPrecision: 3,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const vars = useWatch({
|
const vars = useWatch({
|
||||||
|
@ -332,6 +333,7 @@ export const SquigglePlayground: FC<PlaygroundProps> = ({
|
||||||
result={valueToRender}
|
result={valueToRender}
|
||||||
environment={environment}
|
environment={environment}
|
||||||
height={vars.chartHeight || 150}
|
height={vars.chartHeight || 150}
|
||||||
|
numberPrecision={vars.numberPrecision}
|
||||||
distributionPlotSettings={{
|
distributionPlotSettings={{
|
||||||
showSummary: vars.showSummary ?? false,
|
showSummary: vars.showSummary ?? false,
|
||||||
logX: vars.logX ?? false,
|
logX: vars.logX ?? false,
|
||||||
|
|
|
@ -68,9 +68,12 @@ export const ExpressionViewer: React.FC<Props> = ({ value, width }) => {
|
||||||
case SqValueTag.Number:
|
case SqValueTag.Number:
|
||||||
return (
|
return (
|
||||||
<VariableBox value={value} heading="Number">
|
<VariableBox value={value} heading="Number">
|
||||||
{() => (
|
{(settings) => (
|
||||||
<div className="font-semibold text-slate-600">
|
<div className="font-semibold text-slate-600">
|
||||||
<NumberShower precision={3} number={value.value} />
|
<NumberShower
|
||||||
|
precision={settings.numberPrecision}
|
||||||
|
number={value.value}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</VariableBox>
|
</VariableBox>
|
||||||
|
|
|
@ -38,6 +38,7 @@ const ItemSettingsModal: React.FC<
|
||||||
// this is a mess and should be fixed
|
// this is a mess and should be fixed
|
||||||
showEditor: true, // doesn't matter
|
showEditor: true, // doesn't matter
|
||||||
chartHeight: mergedSettings.height,
|
chartHeight: mergedSettings.height,
|
||||||
|
numberPrecision: mergedSettings.numberPrecision,
|
||||||
showSummary: mergedSettings.distributionPlotSettings.showSummary,
|
showSummary: mergedSettings.distributionPlotSettings.showSummary,
|
||||||
logX: mergedSettings.distributionPlotSettings.logX,
|
logX: mergedSettings.distributionPlotSettings.logX,
|
||||||
expY: mergedSettings.distributionPlotSettings.expY,
|
expY: mergedSettings.distributionPlotSettings.expY,
|
||||||
|
|
|
@ -29,6 +29,7 @@ export const ViewerContext = React.createContext<ViewerContextShape>({
|
||||||
},
|
},
|
||||||
environment: defaultEnvironment,
|
environment: defaultEnvironment,
|
||||||
height: 150,
|
height: 150,
|
||||||
|
numberPrecision: 3,
|
||||||
}),
|
}),
|
||||||
setSettings() {},
|
setSettings() {},
|
||||||
enableLocalSettings: false,
|
enableLocalSettings: false,
|
||||||
|
|
|
@ -23,6 +23,7 @@ type Props = {
|
||||||
/** Environment for further function executions */
|
/** Environment for further function executions */
|
||||||
environment: environment;
|
environment: environment;
|
||||||
enableLocalSettings?: boolean;
|
enableLocalSettings?: boolean;
|
||||||
|
numberPrecision?: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
type Settings = {
|
type Settings = {
|
||||||
|
@ -38,6 +39,7 @@ export const SquiggleViewer: React.FC<Props> = ({
|
||||||
distributionPlotSettings,
|
distributionPlotSettings,
|
||||||
chartSettings,
|
chartSettings,
|
||||||
environment,
|
environment,
|
||||||
|
numberPrecision = 3,
|
||||||
enableLocalSettings = false,
|
enableLocalSettings = false,
|
||||||
}) => {
|
}) => {
|
||||||
// can't store settings in the state because we don't want to rerender the entire tree on every change
|
// can't store settings in the state because we don't want to rerender the entire tree on every change
|
||||||
|
@ -74,10 +76,18 @@ export const SquiggleViewer: React.FC<Props> = ({
|
||||||
...(localSettings.environment || {}),
|
...(localSettings.environment || {}),
|
||||||
},
|
},
|
||||||
height: localSettings.height || height,
|
height: localSettings.height || height,
|
||||||
|
numberPrecision: localSettings.numberPrecision || numberPrecision,
|
||||||
};
|
};
|
||||||
return result;
|
return result;
|
||||||
},
|
},
|
||||||
[distributionPlotSettings, chartSettings, environment, height, getSettings]
|
[
|
||||||
|
distributionPlotSettings,
|
||||||
|
chartSettings,
|
||||||
|
environment,
|
||||||
|
height,
|
||||||
|
getSettings,
|
||||||
|
numberPrecision,
|
||||||
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -8,6 +8,7 @@ export type LocalItemSettings = {
|
||||||
chartSettings?: Partial<FunctionChartSettings>;
|
chartSettings?: Partial<FunctionChartSettings>;
|
||||||
height?: number;
|
height?: number;
|
||||||
environment?: Partial<environment>;
|
environment?: Partial<environment>;
|
||||||
|
numberPrecision?: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type MergedItemSettings = {
|
export type MergedItemSettings = {
|
||||||
|
@ -15,6 +16,7 @@ export type MergedItemSettings = {
|
||||||
chartSettings: FunctionChartSettings;
|
chartSettings: FunctionChartSettings;
|
||||||
height: number;
|
height: number;
|
||||||
environment: environment;
|
environment: environment;
|
||||||
|
numberPrecision: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const locationAsString = (location: SqValueLocation) =>
|
export const locationAsString = (location: SqValueLocation) =>
|
||||||
|
|
|
@ -21,6 +21,13 @@ export const viewSettingsSchema = yup.object({}).shape({
|
||||||
diagramStart: yup.number().required().positive().integer().default(0).min(0),
|
diagramStart: yup.number().required().positive().integer().default(0).min(0),
|
||||||
diagramStop: yup.number().required().positive().integer().default(10).min(0),
|
diagramStop: yup.number().required().positive().integer().default(10).min(0),
|
||||||
diagramCount: yup.number().required().positive().integer().default(20).min(2),
|
diagramCount: yup.number().required().positive().integer().default(20).min(2),
|
||||||
|
numberPrecision: yup
|
||||||
|
.number()
|
||||||
|
.required()
|
||||||
|
.integer()
|
||||||
|
.positive()
|
||||||
|
.default(3)
|
||||||
|
.min(0),
|
||||||
});
|
});
|
||||||
|
|
||||||
type FormFields = yup.InferType<typeof viewSettingsSchema>;
|
type FormFields = yup.InferType<typeof viewSettingsSchema>;
|
||||||
|
@ -57,6 +64,16 @@ export const ViewSettings: React.FC<{
|
||||||
</div>
|
</div>
|
||||||
</HeadedSection>
|
</HeadedSection>
|
||||||
|
|
||||||
|
<div className="pt-8">
|
||||||
|
<HeadedSection title="Number Display Settings">
|
||||||
|
<InputItem
|
||||||
|
name="numberPrecision"
|
||||||
|
type="number"
|
||||||
|
register={register}
|
||||||
|
label="Chart Height (in pixels)"
|
||||||
|
/>
|
||||||
|
</HeadedSection>
|
||||||
|
</div>
|
||||||
<div className="pt-8">
|
<div className="pt-8">
|
||||||
<HeadedSection title="Distribution Display Settings">
|
<HeadedSection title="Distribution Display Settings">
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
|
|
16
packages/components/test/number.test.tsx
Normal file
16
packages/components/test/number.test.tsx
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
import { render } from "@testing-library/react";
|
||||||
|
import React from "react";
|
||||||
|
import "@testing-library/jest-dom";
|
||||||
|
import { SquiggleChart } from "../src/index";
|
||||||
|
|
||||||
|
test("Precision", async () => {
|
||||||
|
const { container: highPrecision } = render(
|
||||||
|
<SquiggleChart code={"1.25476"} numberPrecision={5} />
|
||||||
|
);
|
||||||
|
expect(highPrecision).toHaveTextContent("1.2548");
|
||||||
|
|
||||||
|
const { container: lowPrecision } = render(
|
||||||
|
<SquiggleChart code={"1.25476"} numberPrecision={2} />
|
||||||
|
);
|
||||||
|
expect(lowPrecision).toHaveTextContent("1.3");
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user