Skip to content

Commit ac59057

Browse files
committed
Render Scale even when value is null
1 parent 7309829 commit ac59057

3 files changed

Lines changed: 74 additions & 9 deletions

File tree

lib/src/Scale.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ interface RenderProps {
99
center: [number, number];
1010
color?: string;
1111
className?: string;
12+
13+
/**
14+
* Id of the active tick.
15+
*
16+
* Can be `-1` if there is no active tick in this state.
17+
*/
1218
active: number;
1319
activeColor?: string;
1420
activeClassName?: string;
@@ -81,7 +87,7 @@ export interface RenderCustomProps extends RenderProps {
8187
tickWidth: number;
8288
tickHeight: number;
8389
steps: number;
84-
percentage: number;
90+
percentage: number | null;
8591
}
8692

8793
function renderCustom({
@@ -92,7 +98,7 @@ function renderCustom({
9298
tickWidth: number;
9399
tickHeight: number;
94100
steps: number;
95-
percentage: number;
101+
percentage: number | null;
96102
} & RenderProps) {
97103
return (_: unknown, i: number) => fn({ ...props, i });
98104
}
@@ -139,11 +145,9 @@ export function Scale(props: Props) {
139145
const length = steps + (angleRange === 360 ? 0 : 1);
140146
const translateX = center[0] - tickWidth / 2;
141147
const translateY = center[1] - radius;
142-
if (percentage === null) {
143-
return <></>;
144-
}
145148

146-
const active = Math.round((length - 1) * percentage);
149+
const active =
150+
percentage === null ? -1 : Math.round((length - 1) * percentage);
147151

148152
function getRenderFn() {
149153
if (steps === undefined) {
@@ -181,9 +185,6 @@ export function Scale(props: Props) {
181185
});
182186
}
183187
if (fn) {
184-
if (percentage === null) {
185-
return <></>;
186-
}
187188
return renderCustom({
188189
fn,
189190
tickWidth,

lib/test/Scale.spec.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,27 @@ describe('Scale', () => {
111111
);
112112
expect(container.children[0].children[0].children[0]).toMatchSnapshot();
113113
});
114+
it('renders when value is null', () => {
115+
const { container } = render(
116+
<Knob
117+
min={0}
118+
max={100}
119+
value={null}
120+
size={100}
121+
angleOffset={90}
122+
angleRange={200}
123+
>
124+
<Scale
125+
type="circle"
126+
steps={3}
127+
radius={40}
128+
tickWidth={2}
129+
tickHeight={10}
130+
className="someClassName"
131+
activeClassName="someActiveClassName"
132+
/>
133+
</Knob>,
134+
);
135+
expect(container.children[0].children[0].children[0]).toMatchSnapshot();
136+
});
114137
});

lib/test/__snapshots__/Scale.spec.tsx.snap

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,3 +241,44 @@ exports[`Scale > renders correct with custom render function for ticks 1`] = `
241241
/>
242242
</g>
243243
`;
244+
245+
exports[`Scale > renders when value is null 1`] = `
246+
<g>
247+
<circle
248+
class="someClassName"
249+
r="2"
250+
stroke="none"
251+
transform="
252+
rotate(90 50 50)
253+
translate(49 10)
254+
"
255+
/>
256+
<circle
257+
class="someClassName"
258+
r="2"
259+
stroke="none"
260+
transform="
261+
rotate(156.66666666666669 50 50)
262+
translate(49 10)
263+
"
264+
/>
265+
<circle
266+
class="someClassName"
267+
r="2"
268+
stroke="none"
269+
transform="
270+
rotate(223.33333333333334 50 50)
271+
translate(49 10)
272+
"
273+
/>
274+
<circle
275+
class="someClassName"
276+
r="2"
277+
stroke="none"
278+
transform="
279+
rotate(290 50 50)
280+
translate(49 10)
281+
"
282+
/>
283+
</g>
284+
`;

0 commit comments

Comments
 (0)