100% working DD
This commit is contained in:
parent
eba2e740af
commit
5453ee671f
|
|
@ -1,8 +1,10 @@
|
||||||
import React, { cloneElement, isValidElement, useEffect, useImperativeHandle, useRef, useState } from "react";
|
import React, { cloneElement, isValidElement, useEffect, useImperativeHandle, useRef, useState } from "react";
|
||||||
import { createPopper } from "@popperjs/core";
|
import { createPopper } from "@popperjs/core";
|
||||||
|
import { usePopper } from 'react-popper';
|
||||||
|
|
||||||
import tw, { styled } from "twin.macro"
|
import tw, { styled } from "twin.macro"
|
||||||
import "styled-components/macro"
|
import "styled-components/macro"
|
||||||
|
|
||||||
import { colors, colorsDisabled, colorsHover, textColors, textColorsHover } from "./Colors";
|
import { colors, colorsDisabled, colorsHover, textColors, textColorsHover } from "./Colors";
|
||||||
|
|
||||||
const DropDownItem = styled.button(({ type }) => [
|
const DropDownItem = styled.button(({ type }) => [
|
||||||
|
|
@ -21,15 +23,16 @@ let Dropdown = React.forwardRef(({ children, dropdownCss, onValueChanged, button
|
||||||
|
|
||||||
const [dropdownPopoverShow, setDropdownPopoverShow] = React.useState(false);
|
const [dropdownPopoverShow, setDropdownPopoverShow] = React.useState(false);
|
||||||
|
|
||||||
const btnDropdownRef = React.createRef();
|
const [btnDropdownRef, setBtnDropdownRef] = React.useState(null);
|
||||||
const popoverDropdownRef = React.createRef();
|
const [popoverDropdownRef, setPopoverDropdownRef] = React.useState(null);
|
||||||
|
|
||||||
const openDropdownPopover = () => {
|
const { styles, attributes, update } = usePopper(btnDropdownRef, popoverDropdownRef,
|
||||||
createPopper(btnDropdownRef.current, popoverDropdownRef.current, {
|
{ placement: placement ?? "bottom", ...popper });
|
||||||
placement: placement ?? "bottom",
|
|
||||||
...popper
|
const openDropdownPopover = async () => {
|
||||||
});
|
|
||||||
setDropdownPopoverShow(true);
|
setDropdownPopoverShow(true);
|
||||||
|
console.log(update)
|
||||||
|
await update();
|
||||||
|
|
||||||
onValueChanged && onValueChanged(true);
|
onValueChanged && onValueChanged(true);
|
||||||
};
|
};
|
||||||
|
|
@ -39,7 +42,7 @@ let Dropdown = React.forwardRef(({ children, dropdownCss, onValueChanged, button
|
||||||
};
|
};
|
||||||
|
|
||||||
function handleOutsideClick(event) {
|
function handleOutsideClick(event) {
|
||||||
let node = popoverDropdownRef?.current;
|
let node = popoverDropdownRef;
|
||||||
if (node && !node?.contains(event.target)) {
|
if (node && !node?.contains(event.target)) {
|
||||||
closeDropdownPopover();
|
closeDropdownPopover();
|
||||||
}
|
}
|
||||||
|
|
@ -74,31 +77,34 @@ let Dropdown = React.forwardRef(({ children, dropdownCss, onValueChanged, button
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<button
|
<button
|
||||||
ref={btnDropdownRef}
|
ref={setBtnDropdownRef}
|
||||||
onClick={(e) => {
|
onClick={async (e) => {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
dropdownPopoverShow ? closeDropdownPopover() : openDropdownPopover();
|
dropdownPopoverShow ? closeDropdownPopover() : await openDropdownPopover();
|
||||||
}}
|
}}
|
||||||
onMouseEnter={() => { setOverButton(true); hover && openDropdownPopover() }}
|
onMouseEnter={async () => { setOverButton(true); hover && await openDropdownPopover() }}
|
||||||
onMouseLeave={() => { setOverButton(false); (!overDropDown && hover) && closeDropdownPopover() }}
|
onMouseLeave={() => { setOverButton(false); (!overDropDown && hover) && closeDropdownPopover() }}
|
||||||
{...buttonProps}
|
{...buttonProps}
|
||||||
>
|
>
|
||||||
{button}
|
{button}
|
||||||
</button>
|
</button>
|
||||||
<div
|
{dropdownPopoverShow &&
|
||||||
{...props}
|
<div
|
||||||
ref={popoverDropdownRef}
|
{...props}
|
||||||
onMouseEnter={() => { setOverDropDown(true); hover && openDropdownPopover() }}
|
ref={setPopoverDropdownRef}
|
||||||
onMouseLeave={() => { setOverDropDown(false); (!overButton && hover) && closeDropdownPopover() }}
|
onMouseEnter={async () => { setOverDropDown(true); hover && await openDropdownPopover() }}
|
||||||
css={[
|
onMouseLeave={() => { setOverDropDown(false); (!overButton && hover) && closeDropdownPopover() }}
|
||||||
(dropdownPopoverShow ? tw`block` : tw`hidden`),
|
style={styles.popper}
|
||||||
tw`bg-trinary text-base z-50 float-left rounded-xl overflow-hidden text-left shadow-lg`,
|
{...attributes.popper}
|
||||||
dropdownCss,
|
css={[
|
||||||
props.css
|
tw`bg-trinary text-base z-50 float-left rounded-xl overflow-hidden text-left shadow-lg`,
|
||||||
]}
|
dropdownCss,
|
||||||
>
|
props.css
|
||||||
{dropdownPopoverShow && childrenWithProps}
|
]}
|
||||||
</div>
|
>
|
||||||
|
{childrenWithProps}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
@ -111,8 +117,7 @@ export function DropdownMenu({ children, fallback, button, notSelectedOne = true
|
||||||
if (children && children.length > 0)
|
if (children && children.length > 0)
|
||||||
btn = children[value > children.length ? 0 : value]
|
btn = children[value > children.length ? 0 : value]
|
||||||
|
|
||||||
if(button != null)
|
if (button != null) {
|
||||||
{
|
|
||||||
btn = button(btn, value > children.length ? 0 : value);
|
btn = button(btn, value > children.length ? 0 : value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user