diff --git a/config/2024/config.json b/config/2024/config.json index b193324..06e78bf 100644 --- a/config/2024/config.json +++ b/config/2024/config.json @@ -16,7 +16,9 @@ "title": "Match Number", "type": "number", "required": true, - "code": "matchNumber" + "code": "matchNumber", + "preserveDataOnReset": true, + "autoIncrementOnReset": true }, { "title": "Robot", @@ -59,29 +61,6 @@ { "name": "Autonomous", "fields": [ - { - "title": "Mobility?", - "type": "boolean", - "defaultValue": false, - "required": false, - "code": "Mved" - }, - { - "code": "auamp", - "title": "Amp Scored", - "type": "counter", - "defaultValue": 0, - "min": 0, - "required": false - }, - { - "code": "auampm", - "title": "Amp Missed", - "type": "counter", - "defaultValue": 0, - "min": 0, - "required": false - }, { "code": "ausc", "title": "Speaker Scored", @@ -99,12 +78,20 @@ "required": false }, { - "code": "auf", - "title": "Auto Foul", - "type": "counter", - "defaultValue": 0, - "min": 0, - "required": false + "code": "a_gp_collect", + "title": "Game Pieces Collected", + "type": "select", + "multiSelect": true, + "choices": { + "1": "Preload", + "2": "Floor 1", + "3": "Floor 2", + "4": "Floor 3", + "5": "Floor 4", + "6": "Floor 5", + "7": "Floor 6", + "8": "Floor 7" + } } ] }, diff --git a/config/schema.json b/config/schema.json index bebf282..ac96bb5 100644 --- a/config/schema.json +++ b/config/schema.json @@ -79,6 +79,12 @@ }, "max": { "type": "number" + }, + "multiSelect": { + "type": "boolean" + }, + "autoIncrementOnReset": { + "type": "boolean" } }, "required": ["title", "type", "required", "code"], diff --git a/package-lock.json b/package-lock.json index 9bf26ad..f4f0089 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@headlessui/react": "^1.7.18", "@heroicons/react": "^2.1.1", "@monaco-editor/react": "^4.6.0", + "clsx": "^2.1.0", "immer": "^10.0.3", "lodash": "^4.17.21", "next-themes": "^0.2.1", @@ -1649,6 +1650,14 @@ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, + "node_modules/clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", diff --git a/package.json b/package.json index c745054..ca3b38e 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "@headlessui/react": "^1.7.18", "@heroicons/react": "^2.1.1", "@monaco-editor/react": "^4.6.0", + "clsx": "^2.1.0", "immer": "^10.0.3", "lodash": "^4.17.21", "next-themes": "^0.2.1", diff --git a/src/components/inputs/BaseInputProps.ts b/src/components/inputs/BaseInputProps.ts index 226b9d1..ceae405 100644 --- a/src/components/inputs/BaseInputProps.ts +++ b/src/components/inputs/BaseInputProps.ts @@ -27,6 +27,7 @@ export interface InputProps { defaultValue?: any; min?: number; max?: number; + autoIncrementOnReset?: boolean; } export type InputTypes = diff --git a/src/components/inputs/NumberInput.tsx b/src/components/inputs/NumberInput.tsx index 9131b56..6c19e52 100644 --- a/src/components/inputs/NumberInput.tsx +++ b/src/components/inputs/NumberInput.tsx @@ -11,7 +11,7 @@ export interface NumberInputProps extends BaseInputProps { export default function NumberInput(data: NumberInputProps) { function handleChange(e: React.ChangeEvent) { e.preventDefault(); - data.onChange(e.currentTarget.value); + data.onChange(Number(e.currentTarget.value)); } return ( diff --git a/src/components/inputs/SelectInput.tsx b/src/components/inputs/SelectInput.tsx index 869936b..7065c53 100644 --- a/src/components/inputs/SelectInput.tsx +++ b/src/components/inputs/SelectInput.tsx @@ -1,23 +1,37 @@ +import clsx from 'clsx'; import React from 'react'; import BaseInputProps from './BaseInputProps'; export interface SelectInputProps extends BaseInputProps { options: Record; + multiSelect?: boolean; defaultValue: string; } export default function SelectInput(data: SelectInputProps) { function handleSelect(evt: React.ChangeEvent) { - data.onChange(evt.currentTarget.value); evt.preventDefault(); + if (!data.multiSelect) { + data.onChange(evt.currentTarget.value); + } else { + const selectedOptions = Array.from(evt.currentTarget.selectedOptions).map( + o => o.value, + ); + data.onChange(selectedOptions); + } } return (