mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
80 lines
2.4 KiB
TypeScript
80 lines
2.4 KiB
TypeScript
|
import { useState } from "react";
|
||
|
import { usePopper } from "react-popper";
|
||
|
import { Calendar, History, Info } from "lucide-react";
|
||
|
// types
|
||
|
import { DocumentDetails } from "../types/editor-types";
|
||
|
|
||
|
type Props = {
|
||
|
documentDetails: DocumentDetails;
|
||
|
};
|
||
|
|
||
|
// function to render a Date in the format- 25 May 2023 at 2:53PM
|
||
|
const renderDate = (date: Date): string => {
|
||
|
const options: Intl.DateTimeFormatOptions = {
|
||
|
day: "numeric",
|
||
|
month: "long",
|
||
|
year: "numeric",
|
||
|
hour: "numeric",
|
||
|
minute: "numeric",
|
||
|
hour12: true,
|
||
|
};
|
||
|
|
||
|
const formattedDate: string = new Intl.DateTimeFormat(
|
||
|
"en-US",
|
||
|
options,
|
||
|
).format(date);
|
||
|
|
||
|
return formattedDate;
|
||
|
};
|
||
|
|
||
|
export const InfoPopover: React.FC<Props> = (props) => {
|
||
|
const { documentDetails } = props;
|
||
|
|
||
|
const [isPopoverOpen, setIsPopoverOpen] = useState<boolean>(false);
|
||
|
|
||
|
const [referenceElement, setReferenceElement] =
|
||
|
useState<HTMLButtonElement | null>(null);
|
||
|
const [popperElement, setPopperElement] = useState<HTMLDivElement | null>(
|
||
|
null,
|
||
|
);
|
||
|
|
||
|
const { styles: infoPopoverStyles, attributes: infoPopoverAttributes } =
|
||
|
usePopper(referenceElement, popperElement, {
|
||
|
placement: "bottom-start",
|
||
|
});
|
||
|
|
||
|
return (
|
||
|
<div
|
||
|
onMouseEnter={() => setIsPopoverOpen(true)}
|
||
|
onMouseLeave={() => setIsPopoverOpen(false)}
|
||
|
>
|
||
|
<button type="button" ref={setReferenceElement} className="block mt-1.5">
|
||
|
<Info className="h-3.5 w-3.5" />
|
||
|
</button>
|
||
|
{isPopoverOpen && (
|
||
|
<div
|
||
|
className="z-10 w-64 shadow-custom-shadow-rg rounded border-[0.5px] border-custom-border-200 bg-custom-background-100 p-3 space-y-2.5"
|
||
|
ref={setPopperElement}
|
||
|
style={infoPopoverStyles.popper}
|
||
|
{...infoPopoverAttributes.popper}
|
||
|
>
|
||
|
<div className="space-y-1.5">
|
||
|
<h6 className="text-custom-text-400 text-xs">Last updated on</h6>
|
||
|
<h5 className="text-sm flex items-center gap-1">
|
||
|
<History className="h-3 w-3" />
|
||
|
{renderDate(new Date(documentDetails.last_updated_at))}
|
||
|
</h5>
|
||
|
</div>
|
||
|
<div className="space-y-1.5">
|
||
|
<h6 className="text-custom-text-400 text-xs">Created on</h6>
|
||
|
<h5 className="text-sm flex items-center gap-1">
|
||
|
<Calendar className="h-3 w-3" />
|
||
|
{renderDate(new Date(documentDetails.created_on))}
|
||
|
</h5>
|
||
|
</div>
|
||
|
</div>
|
||
|
)}
|
||
|
</div>
|
||
|
);
|
||
|
};
|