Skip to content
Snippets Groups Projects
Commit 860a1fa5 authored by David Sehnal's avatar David Sehnal
Browse files

do not include optional params in default values; interval range support

parent bcaead92
No related branches found
No related tags found
No related merge requests found
......@@ -75,8 +75,7 @@ export namespace ParamDefinition {
return setInfo<Color>({ type: 'color', defaultValue }, info)
}
export interface Numeric extends Base<number> {
type: 'number'
export interface Range {
/** If given treat as a range. */
min?: number
/** If given treat as a range. */
......@@ -87,10 +86,7 @@ export namespace ParamDefinition {
*/
step?: number
}
export function Numeric(defaultValue: number, range?: { min?: number, max?: number, step?: number }, info?: Info): Numeric {
return setInfo<Numeric>(setRange({ type: 'number', defaultValue }, range), info)
}
function setRange(p: Numeric, range?: { min?: number, max?: number, step?: number }) {
function setRange<T extends Numeric | Interval>(p: T, range?: { min?: number, max?: number, step?: number }) {
if (!range) return p;
if (typeof range.min !== 'undefined') p.min = range.min;
if (typeof range.max !== 'undefined') p.max = range.max;
......@@ -98,11 +94,18 @@ export namespace ParamDefinition {
return p;
}
export interface Interval extends Base<[number, number]> {
export interface Numeric extends Base<number>, Range {
type: 'number'
}
export function Numeric(defaultValue: number, range?: { min?: number, max?: number, step?: number }, info?: Info): Numeric {
return setInfo<Numeric>(setRange({ type: 'number', defaultValue }, range), info)
}
export interface Interval extends Base<[number, number]>, Range {
type: 'interval'
}
export function Interval(defaultValue: [number, number], info?: Info): Interval {
return setInfo<Interval>({ type: 'interval', defaultValue }, info)
export function Interval(defaultValue: [number, number], range?: { min?: number, max?: number, step?: number }, info?: Info): Interval {
return setInfo<Interval>(setRange({ type: 'interval', defaultValue }, range), info)
}
export interface LineGraph extends Base<Vec2[]> {
......@@ -151,8 +154,11 @@ export namespace ParamDefinition {
export function getDefaultValues<T extends Params>(params: T) {
const d: { [k: string]: any } = {}
Object.keys(params).forEach(k => d[k] = params[k].defaultValue)
return d as Values<T>
for (const k of Object.keys(params)) {
if (params[k].isOptional) continue;
d[k] = params[k].defaultValue;
}
return d as Values<T>;
}
export function getLabels<T extends Params>(params: T) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment