diff --git a/packages/fakeyou.com/src/components/common/Alert/Alert.tsx b/packages/fakeyou.com/src/components/common/Alert/Alert.tsx index 074f6f1cae..0d8b7e1952 100644 --- a/packages/fakeyou.com/src/components/common/Alert/Alert.tsx +++ b/packages/fakeyou.com/src/components/common/Alert/Alert.tsx @@ -22,6 +22,7 @@ interface AlertProps { icon?: IconProp; link?: string; linkText?: string; + className?: string; } function Alert({ @@ -32,6 +33,7 @@ function Alert({ icon, linkText, link, + className, }: AlertProps) { const [show, setShow] = useState(() => { const closedAt = localStorage.getItem(`alertClosedAt_${id}`); @@ -55,7 +57,9 @@ function Alert({ <> {show && (
{icon && } diff --git a/packages/fakeyou.com/src/components/common/Button/Button.scss b/packages/fakeyou.com/src/components/common/Button/Button.scss index 60d0a00c0c..fe4a74b99d 100644 --- a/packages/fakeyou.com/src/components/common/Button/Button.scss +++ b/packages/fakeyou.com/src/components/common/Button/Button.scss @@ -15,11 +15,13 @@ &-square { width: 46.5px; height: 46.5px; + padding: 0; } &-square-small { width: 37.5px; height: 37.5px; + padding: 0; } &:disabled, diff --git a/packages/fakeyou.com/src/components/common/Button/Button.tsx b/packages/fakeyou.com/src/components/common/Button/Button.tsx index c276f9214f..133ecf67e4 100644 --- a/packages/fakeyou.com/src/components/common/Button/Button.tsx +++ b/packages/fakeyou.com/src/components/common/Button/Button.tsx @@ -33,7 +33,9 @@ export default function Button({ const SpinnerComponent = isLoading ? (
Loading... @@ -59,7 +61,7 @@ export default function Button({ ) : ( <> - {IconComponent} + {isLoading ? null : IconComponent} {LabelComponent} {SpinnerComponent} diff --git a/packages/fakeyou.com/src/components/common/SelectModal/SelectModalV2.tsx b/packages/fakeyou.com/src/components/common/SelectModal/SelectModalV2.tsx index 4a341e9e0e..0408f0aec2 100644 --- a/packages/fakeyou.com/src/components/common/SelectModal/SelectModalV2.tsx +++ b/packages/fakeyou.com/src/components/common/SelectModal/SelectModalV2.tsx @@ -21,7 +21,7 @@ export type SelectModalData = { interface SelectModalProps { label?: string; modalTitle?: string; - value?: string; + value?: string | SelectModalData; onClear: () => void; required?: boolean; children: ReactNode @@ -32,21 +32,15 @@ export default memo(function SelectModal ({ // tabs, modalTitle = "Select", onClear, - value = "", + value:valueProps = "", required, children }: SelectModalProps) { - const [isModalOpen, setModalOpen] = useState(false - ) - const openModal = () => { - setModalOpen(true); - }; - - const closeModal = () => { - setModalOpen(false); - }; - - useEffect(closeModal, [value]); + const [isModalOpen, setModalOpen] = useState(false) + const openModal = () => setModalOpen(true); + const closeModal = () => setModalOpen(false); + useEffect(closeModal, [valueProps]); + const value = typeof valueProps === "string" ? valueProps : valueProps.title; return ( <> diff --git a/packages/fakeyou.com/src/components/common/SelectModalWeightsTabs/SelectModalWeightsTabs.tsx b/packages/fakeyou.com/src/components/common/SelectModalWeightsTabs/SelectModalWeightsTabs.tsx index 03b8204440..df5369def8 100644 --- a/packages/fakeyou.com/src/components/common/SelectModalWeightsTabs/SelectModalWeightsTabs.tsx +++ b/packages/fakeyou.com/src/components/common/SelectModalWeightsTabs/SelectModalWeightsTabs.tsx @@ -41,7 +41,7 @@ export default memo(function SelectModalWrapper({ {onSelect({title:"",token:""})}} > diff --git a/packages/fakeyou.com/src/components/common/SelectModalWeightsTabs/tabBookmarkedWeights.tsx b/packages/fakeyou.com/src/components/common/SelectModalWeightsTabs/tabBookmarkedWeights.tsx index 0a4e7c3e2f..ae6dbbb682 100644 --- a/packages/fakeyou.com/src/components/common/SelectModalWeightsTabs/tabBookmarkedWeights.tsx +++ b/packages/fakeyou.com/src/components/common/SelectModalWeightsTabs/tabBookmarkedWeights.tsx @@ -90,7 +90,7 @@ export default function WeightsTabsContent({ showCreator: true, type: "weights", inSelectModal: true, - onResultSelect: onSelect, + onResultBookmarkSelect: onSelect, }; return (
void; +} + +export default function SelectionBubbles({ + options, + onSelect, +}: SelectionBubbleProps) { + //Select first one as defaults + const [selectedOption, setSelectedOption] = useState( + options.length > 0 ? options[0] : null + ); + const [showGradient, setShowGradient] = useState(true); + const bubblesRef = useRef(null); + + const handleSelect = ( + event: React.MouseEvent, + option: string + ) => { + event.preventDefault(); + setSelectedOption(option); + onSelect(option); + }; + + useEffect(() => { + if (selectedOption) { + onSelect(selectedOption); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const handleScroll = () => { + if (bubblesRef.current) { + const { scrollLeft, scrollWidth, clientWidth } = bubblesRef.current; + const isAtEnd = scrollWidth - Math.round(scrollLeft + clientWidth) <= 1; // Adjust tolerance as needed + setShowGradient(!isAtEnd); + } + }; + + const checkForOverflowContent = () => { + if (bubblesRef.current) { + const { scrollWidth, clientWidth } = bubblesRef.current; + const isOverflowing = scrollWidth > clientWidth; + setShowGradient(isOverflowing); + } + }; + + useEffect(() => { + checkForOverflowContent(); + window.addEventListener("resize", checkForOverflowContent); + return () => window.removeEventListener("resize", checkForOverflowContent); + }, [options]); + + useEffect(() => { + if (bubblesRef.current) { + bubblesRef.current.addEventListener("scroll", handleScroll); + return () => + // eslint-disable-next-line react-hooks/exhaustive-deps + bubblesRef.current?.removeEventListener("scroll", handleScroll); + } + }, []); + + return ( +
+
+ {options.map(option => ( + + ))} +
+ {showGradient && ( + + )} +
+ ); +} diff --git a/packages/fakeyou.com/src/components/common/SelectionBubbles/index.tsx b/packages/fakeyou.com/src/components/common/SelectionBubbles/index.tsx new file mode 100644 index 0000000000..b1f5697e45 --- /dev/null +++ b/packages/fakeyou.com/src/components/common/SelectionBubbles/index.tsx @@ -0,0 +1 @@ +export { default } from "./SelectionBubbles"; diff --git a/packages/fakeyou.com/src/components/common/TempTextArea/TempTextArea.tsx b/packages/fakeyou.com/src/components/common/TempTextArea/TempTextArea.tsx index 4b49ff2b87..73e70b29d8 100644 --- a/packages/fakeyou.com/src/components/common/TempTextArea/TempTextArea.tsx +++ b/packages/fakeyou.com/src/components/common/TempTextArea/TempTextArea.tsx @@ -15,7 +15,6 @@ export default function TempTextArea({ ...rest }: TextAreaProps) { return ( - // Changed fragment to div here just so that it can be laid out with bootstrap easily using d-flex, flex-column and responsive gaps which requires grouping.
{label && (