From e56c5e7f19cbbde18c7999c85c1bb3e6dcfc8864 Mon Sep 17 00:00:00 2001 From: wil Date: Wed, 31 Jan 2024 16:28:19 -0500 Subject: [PATCH 01/10] UI elements are working --- .../common/NumberSlider/NumberSlider.tsx | 8 +- .../common/NumberSliderV2/NumberSliderV2.scss | 42 ++++++++ .../common/NumberSliderV2/NumberSliderV2.tsx | 98 +++++++++++++++++++ .../components/common/NumberSliderV2/index.ts | 1 + .../common/TextAreaV2/TextAreaV2.scss | 27 +++++ .../common/TextAreaV2/TextAreaV2.tsx | 39 ++++++++ .../components/common/TextAreaV2/index.tsx | 1 + .../src/components/common/index.tsx | 6 ++ .../components/pageFilterControls.tsx | 79 ++++++++++++++- 9 files changed, 296 insertions(+), 5 deletions(-) create mode 100644 packages/fakeyou.com/src/components/common/NumberSliderV2/NumberSliderV2.scss create mode 100644 packages/fakeyou.com/src/components/common/NumberSliderV2/NumberSliderV2.tsx create mode 100644 packages/fakeyou.com/src/components/common/NumberSliderV2/index.ts create mode 100644 packages/fakeyou.com/src/components/common/TextAreaV2/TextAreaV2.scss create mode 100644 packages/fakeyou.com/src/components/common/TextAreaV2/TextAreaV2.tsx create mode 100644 packages/fakeyou.com/src/components/common/TextAreaV2/index.tsx diff --git a/packages/fakeyou.com/src/components/common/NumberSlider/NumberSlider.tsx b/packages/fakeyou.com/src/components/common/NumberSlider/NumberSlider.tsx index 6af7e0edeb..bb3b425fd7 100644 --- a/packages/fakeyou.com/src/components/common/NumberSlider/NumberSlider.tsx +++ b/packages/fakeyou.com/src/components/common/NumberSlider/NumberSlider.tsx @@ -8,12 +8,16 @@ interface Props { label?: string; max?: number; min?: number; - name?: string; - onChange?: any; required?: boolean; step?: number; thumbTip?: string; + // name, value and setter for onChange has to be in this particular format + // name = state variable's name as a stringh + // value = the state variable's reference + // onChange = the statevariable's setter function's reference + name?: string; value?: number; + onChange?: any; } const renderTrack = ({ props: { style, ...props }, children }: any) => ( diff --git a/packages/fakeyou.com/src/components/common/NumberSliderV2/NumberSliderV2.scss b/packages/fakeyou.com/src/components/common/NumberSliderV2/NumberSliderV2.scss new file mode 100644 index 0000000000..801687a57e --- /dev/null +++ b/packages/fakeyou.com/src/components/common/NumberSliderV2/NumberSliderV2.scss @@ -0,0 +1,42 @@ +@import "scss/colours.scss"; + +.fy-number-slider { + display: flex; + gap: 0.5rem; + align-items: center; + + .fy-number-slider-range { + flex-grow: 1; + } + + .fy-number-slider-value { + text-align: center; + width: fit-content; + padding: 6px; + border-radius: 8px; + background-color: $secondary; + border-width: 0px; + border-color: none; + color: rgba(#fff, 0.85); + font-weight: 500; + flex-shrink: 0; + } + + .fy-number-slider-track { + height: 6px; + margin: 0 0 0 0.6875rem; // margin half width of thumb, so that thumb does not overlap margins at minimum position + background-color: #4f4f66; + border-radius: 0.25rem; + } + + .fy-number-slider-thumb { + height: 16px; + width: 16px; + background-color: #e66462; + border-radius: 50%; + box-shadow: 0px 0px 10px rgba(#000, 0.15); + &:hover { + background-color: #fff; + } + } +} diff --git a/packages/fakeyou.com/src/components/common/NumberSliderV2/NumberSliderV2.tsx b/packages/fakeyou.com/src/components/common/NumberSliderV2/NumberSliderV2.tsx new file mode 100644 index 0000000000..cf29ef02d3 --- /dev/null +++ b/packages/fakeyou.com/src/components/common/NumberSliderV2/NumberSliderV2.tsx @@ -0,0 +1,98 @@ +import React from "react"; +import { Range } from "react-range"; +import Tippy from "@tippyjs/react"; +import { Label } from "components/common"; +import "./NumberSliderV2.scss"; + +interface Props { + label?: string; + thumbTip?: string; + min: number; + max: number; + step?: number; + initialValue?: number; + onChange?: (x:number) => void; + required?: boolean; +} + +function roundToStep(x:number, step:number){ + return Math.round(x/step) * step; +} + +const renderTrack = ({ props: { style, ...props }, children }: any) => ( +
+ {children} +
+); + +const thumb = + (thumbTip = "") => + ({ props: { style, ...props } }: any) => { + return ( + +
+
+ ); + }; + +export default function NumberSlider({ + label, + thumbTip, + min, + max, + step: stepProps, + onChange: onChangeCallback, + required, + initialValue: initialValueProps, +}: Props) { + const step = stepProps && stepProps <= max-min ? stepProps + : max-min >= 1 ? 1 : (max-min) / 10; + const initialValue = initialValueProps && initialValueProps <= max && initialValueProps >= min ? initialValueProps + : max-min == step ? min : roundToStep((max+min)/2, step); + + // const [value, setValue] = useState(initialValue); + // const didMount = useRef(false); + function handleInputOnChange(e: React.ChangeEvent){ + // setValue(Number.parseInt(e.target.value)); + if(onChangeCallback)onChangeCallback(Number.parseInt(e.target.value)) + } + function handleRangeOnChange(rangeValue: number[]){ + if(onChangeCallback)onChangeCallback(rangeValue[0]) + // setValue(rangeValue[0]) + } + + + return ( +
+
+ ); +} diff --git a/packages/fakeyou.com/src/components/common/NumberSliderV2/index.ts b/packages/fakeyou.com/src/components/common/NumberSliderV2/index.ts new file mode 100644 index 0000000000..66ed0c89fb --- /dev/null +++ b/packages/fakeyou.com/src/components/common/NumberSliderV2/index.ts @@ -0,0 +1 @@ +export { default } from './NumberSliderV2'; \ No newline at end of file diff --git a/packages/fakeyou.com/src/components/common/TextAreaV2/TextAreaV2.scss b/packages/fakeyou.com/src/components/common/TextAreaV2/TextAreaV2.scss new file mode 100644 index 0000000000..d87c7e986e --- /dev/null +++ b/packages/fakeyou.com/src/components/common/TextAreaV2/TextAreaV2.scss @@ -0,0 +1,27 @@ +.fy-textarea { + margin-bottom: 1rem; + + &:only-child, + &:last-child { + margin-bottom: 0; + } +} + +.d-flex:not(.flex-column) > .fy-textarea { + margin-bottom: 0; + margin-right: 0.5rem; + + &:only-child, + &:last-child { + margin-bottom: 0; + } +} + +.gap-1 > .fy-textarea, +.gap-2 > .fy-textarea, +.gap-3 > .fy-textarea, +.gap-4 > .fy-textarea, +.gap-5 > .fy-textarea { + margin-bottom: 0; + margin-right: 0; +} diff --git a/packages/fakeyou.com/src/components/common/TextAreaV2/TextAreaV2.tsx b/packages/fakeyou.com/src/components/common/TextAreaV2/TextAreaV2.tsx new file mode 100644 index 0000000000..5b2aa717d4 --- /dev/null +++ b/packages/fakeyou.com/src/components/common/TextAreaV2/TextAreaV2.tsx @@ -0,0 +1,39 @@ +import React from "react"; +import "./TextAreaV2.scss"; + +interface TextAreaProps { + label?: string; + required?: boolean; + placeholder?: string; + initialValue?: string; + value?: string; + onChange?: (newText:string) => void +} + +export default function TextArea({ + label, + required, + value, + placeholder, + onChange: onChangeCallback, +}: TextAreaProps) { + const handleOnChange = (e:React.ChangeEvent)=>{ + if(onChangeCallback) onChangeCallback (e.target.value); + } + return ( +
+ {label && + + } +
+