diff --git a/src/cryptometrics/components/button/Button.js b/src/cryptometrics/components/button/Button.js index 3e625e13c4d67a8db13f309c9eb7267d1679a8c9..882cc5c4019f09da72169abd407750ea76f9cd2a 100644 --- a/src/cryptometrics/components/button/Button.js +++ b/src/cryptometrics/components/button/Button.js @@ -13,11 +13,13 @@ import classNames from "classnames"; * </Button> * ) */ -function Button({ children, className, onClick, type }) { +function Button({ children, className, onClick, type, disabled }) { return ( <button - className={classNames("py-2 px-5 rounded-xl", className)} - onClick={onClick} + className={classNames("py-2 px-5 rounded-xl", className, { + "brightness-50 cursor-default": disabled, + })} + onClick={disabled ? undefined : onClick} type={type ? type : "button"} > {children} @@ -38,6 +40,18 @@ Button.propTypes = { * The function to run when button is pressed */ onClick: PropTypes.func, + /** + * The type of button + */ + type: PropTypes.string, + /** + * Whether the button is disabled + */ + disabled: PropTypes.bool, +}; + +Button.defaultProps = { + type: "button", }; export default Button; diff --git a/src/cryptometrics/components/dropdown/FilterDropdown.js b/src/cryptometrics/components/dropdown/FilterDropdown.js index 8ea571776a30cd38609a191aca62367ad0db10a5..12af95a4bbe68fe96f17c1fe9f1088db58e62e15 100644 --- a/src/cryptometrics/components/dropdown/FilterDropdown.js +++ b/src/cryptometrics/components/dropdown/FilterDropdown.js @@ -1,6 +1,6 @@ import { ArrowRightIcon } from "@heroicons/react/outline"; import classNames from "classnames"; -import React, { useState, useEffect } from "react"; +import React, { useState, useEffect, useRef } from "react"; import Button from "../button/Button"; import { RadioInputForm } from "../radio/RadioForm"; import { CSSTransition } from "react-transition-group"; @@ -14,6 +14,7 @@ export function FilterDropdown({ const [selectedFilter, setSelectedFilter] = useState(null); const [radioValue, setRadioValue] = useState("is"); const [inputValue, setInputValue] = useState(""); + const secondaryDropdownRef = useRef(null); useEffect(() => { if (selectedFilter) { @@ -67,13 +68,14 @@ export function FilterDropdown({ )} </div> <CSSTransition - in={selectedFilter} + in={selectedFilter !== null} classNames="secondary-dropdown" timeout={300} unmountOnExit + nodeRef={secondaryDropdownRef} > {selectedFilter ? ( - <span className="ml-3"> + <span className="ml-3" ref={secondaryDropdownRef}> <SecondaryFilterDropdown open={true} onSelectedFilterChange={onSelectedFilterChange} @@ -89,7 +91,7 @@ export function FilterDropdown({ /> </span> ) : ( - <div></div> + <div ref={secondaryDropdownRef}></div> )} </CSSTransition> </div> @@ -141,6 +143,7 @@ export function SecondaryFilterDropdown({ className="bg-indigo-600 text-white font-semibold w-full" onClick={onFilterAdd} type="submit" + disabled={inputValue === ""} > Filter </Button>