mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-07-22 19:59:02 +03:00
CI / AMD64 Build (push) Waiting to run
CI / ARM Build (push) Waiting to run
CI / Jetson Jetpack 6 (push) Waiting to run
CI / AMD64 Extra Build (push) Blocked by required conditions
CI / ARM Extra Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
CI / Synaptics Build (push) Blocked by required conditions
* resolve zone friendly names against the correct camera * Improve handling of zone names in chat prompt * show a numeric keyboard for numeric config form fields on mobile * Specify english only for semantic search tool when model is JinaV1 * resolve export hwaccel args global value against the correct config path --------- Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import type { RJSFSchema } from "@rjsf/utils";
|
|
|
|
type NumericInputOptions = {
|
|
signed?: boolean;
|
|
};
|
|
|
|
/**
|
|
* Derive the on-screen keyboard hint for a schema field.
|
|
*
|
|
* Numeric config fields render as text inputs because RJSF's NumberField
|
|
* relies on the widget echoing raw strings back, so that trailing "." and "0"
|
|
* characters survive while a value is being typed. That means the numeric
|
|
* keypad has to be requested explicitly. Desktop browsers ignore inputMode, so
|
|
* this only affects virtual keyboards.
|
|
*
|
|
* Fields accepting negative values opt out, since the iOS numeric and decimal
|
|
* keypads have no minus key. Most numeric fields declare no minimum even
|
|
* though they are non-negative, so signed fields are marked explicitly with
|
|
* ui:options.signed.
|
|
*
|
|
* Args:
|
|
* schema: The JSON schema for the field being rendered
|
|
* options: The resolved ui:options for the field
|
|
*
|
|
* Returns:
|
|
* The inputMode to apply, or undefined to leave the keyboard alone
|
|
*/
|
|
export function getNumericInputMode(
|
|
schema: RJSFSchema,
|
|
options: unknown,
|
|
): "numeric" | "decimal" | undefined {
|
|
const types = Array.isArray(schema.type) ? schema.type : [schema.type];
|
|
const isInteger = types.includes("integer");
|
|
|
|
if (!isInteger && !types.includes("number")) {
|
|
return undefined;
|
|
}
|
|
|
|
const numericOptions =
|
|
typeof options === "object" && options !== null
|
|
? (options as NumericInputOptions)
|
|
: undefined;
|
|
|
|
const minimum = schema.minimum ?? schema.exclusiveMinimum;
|
|
|
|
if (numericOptions?.signed || (minimum ?? 0) < 0) {
|
|
return undefined;
|
|
}
|
|
|
|
return isInteger ? "numeric" : "decimal";
|
|
}
|