From b9dd32cdd57e7d39ee94623b9c74747f532943f1 Mon Sep 17 00:00:00 2001 From: Hassan Abouelela <47495861+HassanAbouelela@users.noreply.github.com> Date: Mon, 4 Jan 2021 03:57:10 +0300 Subject: Implements Input Types Adds functionality and JSX for all input types. Adds a dispatcher that can pick and return the needed element. Signed-off-by: Hassan Abouelela <47495861+HassanAbouelela@users.noreply.github.com> --- src/components/InputTypes/Checkbox.tsx | 22 ++++++++++ src/components/InputTypes/Code.tsx | 11 +++++ src/components/InputTypes/Radio.tsx | 18 +++++++++ src/components/InputTypes/Range.tsx | 52 ++++++++++++++++++++++++ src/components/InputTypes/Select.tsx | 60 ++++++++++++++++++++++++++++ src/components/InputTypes/ShortText.tsx | 11 +++++ src/components/InputTypes/TextArea.tsx | 11 +++++ src/components/InputTypes/index.tsx | 71 +++++++++++++++++++++++++++++++++ 8 files changed, 256 insertions(+) create mode 100644 src/components/InputTypes/Checkbox.tsx create mode 100644 src/components/InputTypes/Code.tsx create mode 100644 src/components/InputTypes/Radio.tsx create mode 100644 src/components/InputTypes/Range.tsx create mode 100644 src/components/InputTypes/Select.tsx create mode 100644 src/components/InputTypes/ShortText.tsx create mode 100644 src/components/InputTypes/TextArea.tsx create mode 100644 src/components/InputTypes/index.tsx (limited to 'src') diff --git a/src/components/InputTypes/Checkbox.tsx b/src/components/InputTypes/Checkbox.tsx new file mode 100644 index 0000000..ed02b83 --- /dev/null +++ b/src/components/InputTypes/Checkbox.tsx @@ -0,0 +1,22 @@ +/** @jsx jsx */ +import { jsx } from "@emotion/react"; +import React, { ChangeEvent } from "react"; + +interface CheckboxProps { + index: number, + option: string, + handler: (event: ChangeEvent) => void +} + +export default function Checkbox(props: CheckboxProps): JSX.Element { + return ( + + ); +} diff --git a/src/components/InputTypes/Code.tsx b/src/components/InputTypes/Code.tsx new file mode 100644 index 0000000..51ca98d --- /dev/null +++ b/src/components/InputTypes/Code.tsx @@ -0,0 +1,11 @@ +/** @jsx jsx */ +import { jsx } from "@emotion/react"; +import React, { ChangeEvent } from "react"; + +interface CodeProps { + handler: (event: ChangeEvent) => void +} + +export default function Code(props: CodeProps): JSX.Element { + return ; +} diff --git a/src/components/InputTypes/Radio.tsx b/src/components/InputTypes/Radio.tsx new file mode 100644 index 0000000..81f8375 --- /dev/null +++ b/src/components/InputTypes/Radio.tsx @@ -0,0 +1,18 @@ +/** @jsx jsx */ +import { jsx } from "@emotion/react"; +import React, { ChangeEvent } from "react"; + +interface RadioProps { + option: string, + question_id: string, + handler: (event: ChangeEvent) => void +} + +export default function Radio(props: RadioProps): JSX.Element { + return ( + + ); +} diff --git a/src/components/InputTypes/Range.tsx b/src/components/InputTypes/Range.tsx new file mode 100644 index 0000000..a0260ad --- /dev/null +++ b/src/components/InputTypes/Range.tsx @@ -0,0 +1,52 @@ +/** @jsx jsx */ +import { jsx } from "@emotion/react"; +import React from "react"; + +interface RangeProps { + question_id: string, + options: Array, + state_dict: Map +} + +let last_selection: Element; + +interface handler_props { + state_dict: Map, + ref: React.RefObject +} + +function handler(this: handler_props): void { + if (last_selection) { + last_selection.classList.toggle("selected"); + } + + const dot: Element = this.ref.current!.lastElementChild!; // eslint-disable-line + dot.classList.toggle("selected"); + + last_selection = dot; + + const value: string = this.ref.current!.textContent!; //eslint-disable-line + this.state_dict.set("value", value); +} + +export default function Range(props: RangeProps): JSX.Element { + const range = props.options.map((option, index) => { + const ref: React.RefObject = React.createRef(); + return ( +