From 24693e25f10e0cf3900e64e925ab7b4ad03fdcca Mon Sep 17 00:00:00 2001 From: honzapatCZ Date: Sat, 12 Oct 2024 15:30:19 +0200 Subject: [PATCH] change dropdown to tsx --- Parts/{DropDown.js => DropDown.tsx} | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) rename Parts/{DropDown.js => DropDown.tsx} (86%) diff --git a/Parts/DropDown.js b/Parts/DropDown.tsx similarity index 86% rename from Parts/DropDown.js rename to Parts/DropDown.tsx index 6371e00..06d15bb 100644 --- a/Parts/DropDown.js +++ b/Parts/DropDown.tsx @@ -1,9 +1,9 @@ import React, { cloneElement, isValidElement, useEffect, useImperativeHandle, useRef, useState } from "react"; -import { createPopper } from "@popperjs/core"; +import { createPopper, Placement } from "@popperjs/core"; import { usePopper } from 'react-popper'; import tw, { styled } from "twin.macro" - + import { colors, colorsDisabled, colorsHover, textColors, textColorsHover } from "./Colors"; @@ -16,7 +16,16 @@ const DropDownItem = styled.button(({ type }) => [ ]) export { DropDownItem } -let Dropdown = React.forwardRef(({ children, dropdownCss, onValueChanged, button, buttonProps, popper, placement, hover, ...props }, ref) => { +let Dropdown = React.forwardRef(({ children, dropdownCss = null, onValueChanged = null, button, buttonProps = null, popper = null, placement = null, hover = null, ...props }: { + children: React.ReactNode, + dropdownCss?: any, + onValueChanged?: (value: boolean) => void, + button?: React.ReactNode, + buttonProps?: any, + popper?: any, + placement?: Placement, + hover?: boolean, +}, ref) => { // dropdown props const [overButton, setOverButton] = React.useState(false); const [overDropDown, setOverDropDown] = React.useState(false); @@ -85,11 +94,14 @@ let Dropdown = React.forwardRef(({ children, dropdownCss, onValueChanged, button let childrenWithProps = React.Children.map(children, (item) => { if (!item) return; + //check that item is not only ReactNode + if (!isValidElement(item)) + return; let click = item.props?.onClick; let close = item.props?.closeOnClick ?? true; - return cloneElement(item, { key: children.indexOf ? children.indexOf(item) : 0, onClick: () => { close && closeDropdownPopover(); click && click() } }); - }); + return cloneElement(item as any, { key: Array.isArray(children) ? children.indexOf(item) : 0, onClick: () => { close && closeDropdownPopover(); click && click() } }); + }); return ( <>