From 2f848cd51e8c48d7663583a34abf51866da882e8 Mon Sep 17 00:00:00 2001 From: Jose Manuel Serrano Amaut <a20122128@pucp.pe> Date: Thu, 23 Mar 2023 16:23:58 -0500 Subject: [PATCH] [REF]: Refactor for moving logic of drag drop and click utils to a folder outside core --- .../FilesUiProvider/FilesUiContextType.ts | 20 ++++- .../download-hidden/DownloadHidden.tsx | 3 +- .../DropzoneDisabledLayer.tsx | 17 +++- .../DropzoneFooter/DropzoneFooter.tsx | 5 +- .../dropzone/components/dropzone/Dropzone.tsx | 7 +- .../components/file-card/FileCard.tsx | 19 +++-- .../file-input-button/FileInputButton.tsx | 5 +- .../components/file-mosaic/FileMosaic.tsx | 3 +- .../components/icons/Cancel/Cancel.tsx | 2 +- src/files-ui/components/icons/Clear/Clear.tsx | 2 +- .../components/icons/CloudDone/CloudDone.tsx | 2 +- .../icons/DownloadFile/DownloadFile.tsx | 2 +- .../components/icons/InfoBlack/InfoBlack.tsx | 2 +- .../icons/InfoDisney/InfoDisney.tsx | 2 +- .../components/icons/Person/Person.tsx | 2 +- .../icons/PhotoCamera/PhotoCamera.tsx | 2 +- .../components/icons/Play/PlayIcon.tsx | 2 +- .../components/icons/Remove/Remove.tsx | 2 +- .../components/icons/Remove/RemoveOutline.tsx | 2 +- .../icons/Visibility/Visibility.tsx | 2 +- .../files-ui-react/utils/click.utils.ts | 24 ++++++ .../files-ui-react/utils/dragdrop.utils.ts | 21 +++++ src/files-ui/files-ui-react/utils/index.ts | 4 + .../files-ui-react/utils/ripple/index.ts | 1 + .../files-ui-react/utils/ripple/ripple.ts | 81 +++++++++++++++++++ 25 files changed, 198 insertions(+), 36 deletions(-) create mode 100644 src/files-ui/files-ui-react/utils/click.utils.ts create mode 100644 src/files-ui/files-ui-react/utils/dragdrop.utils.ts create mode 100644 src/files-ui/files-ui-react/utils/index.ts create mode 100644 src/files-ui/files-ui-react/utils/ripple/index.ts create mode 100644 src/files-ui/files-ui-react/utils/ripple/ripple.ts diff --git a/src/files-ui/FilesUiProvider/FilesUiContextType.ts b/src/files-ui/FilesUiProvider/FilesUiContextType.ts index 4f848a9..014def9 100644 --- a/src/files-ui/FilesUiProvider/FilesUiContextType.ts +++ b/src/files-ui/FilesUiProvider/FilesUiContextType.ts @@ -1,8 +1,20 @@ -import { IconsMap } from "../core"; +import { IconsMap, Localization } from "../core"; export type FilesUiConfig = { - darkMode?:boolean; - icons?:IconsConfig; + /** + * If true, dark mode colors are used in FileMosaic and FIleCard components. + */ + darkMode?: boolean; + /** + * Set of icons to override the existing ones + */ + icons?: IconsConfig; + /** + * The language in which text labels are shown. + * @default "EN-en" + */ + localization?: Localization; + //fontFamily?:string; } -export type IconsConfig=IconsMap; \ No newline at end of file +export type IconsConfig = IconsMap; \ No newline at end of file diff --git a/src/files-ui/components/download-hidden/DownloadHidden.tsx b/src/files-ui/components/download-hidden/DownloadHidden.tsx index 9596cac..966c226 100644 --- a/src/files-ui/components/download-hidden/DownloadHidden.tsx +++ b/src/files-ui/components/download-hidden/DownloadHidden.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { handleClickUtil } from "../../core"; +//import { handleClickUtil } from "../../core"; export type DownloadHiddenProps = { downloadUrl?: string; anchorRef: React.RefObject<HTMLAnchorElement>; @@ -23,6 +23,7 @@ const DownloadHidden: React.FC<DownloadHiddenProps> = ( href={downloadUrl} download={fileName} hidden + rel={"noopener noreferrer"} onClick={handleClick} > download_file diff --git a/src/files-ui/components/dropzone/components/DropzoneDisabledLayer/DropzoneDisabledLayer.tsx b/src/files-ui/components/dropzone/components/DropzoneDisabledLayer/DropzoneDisabledLayer.tsx index 16677b3..5eb7f2a 100644 --- a/src/files-ui/components/dropzone/components/DropzoneDisabledLayer/DropzoneDisabledLayer.tsx +++ b/src/files-ui/components/dropzone/components/DropzoneDisabledLayer/DropzoneDisabledLayer.tsx @@ -1,5 +1,11 @@ import * as React from "react"; -import { addClassName, handleClickUtil, handleDragUtil, handleDropUtil } from "../../../../core"; +import { + addClassName, + //handleClickUtil, + //handleDragUtil, + //handleDropUtil, +} from "../../../../core"; +import { handleClickUtil, handleDragUtil, handleDropUtil } from "../../../../files-ui-react/utils"; import "./DropzoneDisabledLayer.scss"; export declare type DropzoneDisabledLayerProps = { open?: boolean; @@ -24,12 +30,15 @@ const DropzoneDisabledLayer: React.FC<DropzoneDisabledLayerProps> = ( handleDragUtil(evt); }; - const handleDrop : React.DragEventHandler<HTMLDivElement> = async ( + const handleDrop: React.DragEventHandler<HTMLDivElement> = async ( evt: React.DragEvent<HTMLDivElement> ): Promise<void> => { handleDropUtil(evt); - } - const finalDisabledLayerClassName:string = addClassName("dropzone-ui-disabled-root",className); + }; + const finalDisabledLayerClassName: string = addClassName( + "dropzone-ui-disabled-root", + className + ); if (open) { return ( <div diff --git a/src/files-ui/components/dropzone/components/DropzoneFooter/DropzoneFooter.tsx b/src/files-ui/components/dropzone/components/DropzoneFooter/DropzoneFooter.tsx index ccf25a7..5d5ac60 100644 --- a/src/files-ui/components/dropzone/components/DropzoneFooter/DropzoneFooter.tsx +++ b/src/files-ui/components/dropzone/components/DropzoneFooter/DropzoneFooter.tsx @@ -3,10 +3,11 @@ import { addClassName, DropzoneLocalizerSelector, FunctionLabel, - handleClickUtil, + //handleClickUtil, Localization, LocalLabels, } from "../../../../core"; +import { handleClickUtil } from "../../../../files-ui-react/utils"; import { FooterConfig } from "../dropzone/DropzoneProps"; export interface DropzoneFooterProps extends FooterConfig { @@ -48,7 +49,7 @@ const DropzoneFooter: React.FC<DropzoneFooterProps> = ( } const finalClassName = resetStyles ? className - : addClassName("files-ui-footer" + " " + firstClassName, className); + : addClassName(`files-ui-footer ${firstClassName}`, className); const finalStyle = resetStyles ? style diff --git a/src/files-ui/components/dropzone/components/dropzone/Dropzone.tsx b/src/files-ui/components/dropzone/components/dropzone/Dropzone.tsx index 7ceae5a..1dcddf1 100644 --- a/src/files-ui/components/dropzone/components/dropzone/Dropzone.tsx +++ b/src/files-ui/components/dropzone/components/dropzone/Dropzone.tsx @@ -7,10 +7,10 @@ import { validateExtFileList, FileValidatorProps, isValidateActive, - handleClickInput, - handleDragUtil, + //handleClickInput, + //handleDragUtil, createFuiRippleFromDiv, - handleDropUtil, + //handleDropUtil, UploadConfig, ExtFileInstance, FunctionLabel, @@ -54,6 +54,7 @@ import DropzoneHeader from "../DropzoneHeader/DropzoneHeader"; import DropzoneFooter from "../DropzoneFooter/DropzoneFooter"; import DropzoneButtons from "../DropzoneButtons/DropzoneButtons"; import { completeAsureColor } from "../../../../core"; +import { handleClickInput, handleDragUtil, handleDropUtil } from "../../../../files-ui-react/utils"; //import { print_manager } from "../../../../../utils"; diff --git a/src/files-ui/components/file-card/FileCard.tsx b/src/files-ui/components/file-card/FileCard.tsx index 25a19eb..9dbd635 100644 --- a/src/files-ui/components/file-card/FileCard.tsx +++ b/src/files-ui/components/file-card/FileCard.tsx @@ -3,7 +3,12 @@ import { FileCardProps } from "./FileCardProps"; import "./FileCard.scss"; import "./../icons/IconStyles.scss"; import "./components/FileCardPaper.scss"; -import { fileSizeFormater, getLocalFileItemData, handleClickUtil, shrinkWord } from "../../core"; +import { + fileSizeFormater, + getLocalFileItemData, + //handleClickUtil, + shrinkWord, +} from "../../core"; import useProgress from "../file-mosaic/hooks/useProgress"; import useFileMosaicInitializer from "../file-mosaic/hooks/useFileMosaicInitializer"; import { useIsUploading } from "../file-mosaic/hooks/useIsUploading"; @@ -17,6 +22,7 @@ import FileCardUploadLayer from "./components/FileCardUploadLayer"; import { Tooltip } from "../tooltip"; import DownloadHidden from "../download-hidden/DownloadHidden"; import { FilesUiContext } from "../../FilesUiProvider/FilesUiContext"; +import { handleClickUtil } from "../../files-ui-react/utils"; const setFinalElevation = (elevation: string | number): number => { // let finalElevation: number = ""; @@ -84,7 +90,7 @@ const FileCard: React.FC<FileCardProps> = (props: FileCardProps) => { videoUrl, info, backgroundBlurImage = true, - darkMode:darkModeProp, + darkMode: darkModeProp, alwaysActive = true, @@ -108,11 +114,10 @@ const FileCard: React.FC<FileCardProps> = (props: FileCardProps) => { smartImgFit = "orientation", //} = mergeProps(props, FileCardPropsDefault); } = props; -//context -const { darkMode: darkModeContext , icons} = React.useContext(FilesUiContext); -const darkMode: boolean | undefined = - darkModeProp !== undefined ? darkModeProp : darkModeContext; - + //context + const { darkMode: darkModeContext, icons } = React.useContext(FilesUiContext); + const darkMode: boolean | undefined = + darkModeProp !== undefined ? darkModeProp : darkModeContext; //ref for anchor element const downloadRef = React.useRef<HTMLAnchorElement>(null); diff --git a/src/files-ui/components/file-input-button/FileInputButton.tsx b/src/files-ui/components/file-input-button/FileInputButton.tsx index b3e276d..4f257e1 100644 --- a/src/files-ui/components/file-input-button/FileInputButton.tsx +++ b/src/files-ui/components/file-input-button/FileInputButton.tsx @@ -10,7 +10,7 @@ import { FileValidatorProps, getRandomInt, //FunctionLabel, - handleClickInput, + //handleClickInput, instantPreparingToUploadOne, isUploadAbleExtFile, isValidateActive, @@ -25,6 +25,7 @@ import { //UploadResponse, validateExtFileList, } from "../../core"; +import { handleClickInput } from "../../files-ui-react/utils"; import useDropzoneFileListUpdater from "../../hooks/useDropzoneFileUpdater"; import { DropzoneActions } from "../dropzone/components/dropzone/DropzoneProps"; import DropzoneButtons from "../dropzone/components/DropzoneButtons/DropzoneButtons"; @@ -459,7 +460,7 @@ const FileInputButton: React.FC<FileInputButtonProps> = ( // HANDLERS for CLICK function handleClick(): void { - console.log("HAAAAAAAA"); + //console.log("HAAAAAAAA"); //handleClickUtil(evt); if (disabled) return; diff --git a/src/files-ui/components/file-mosaic/components/file-mosaic/FileMosaic.tsx b/src/files-ui/components/file-mosaic/components/file-mosaic/FileMosaic.tsx index 8700e91..a80ff71 100644 --- a/src/files-ui/components/file-mosaic/components/file-mosaic/FileMosaic.tsx +++ b/src/files-ui/components/file-mosaic/components/file-mosaic/FileMosaic.tsx @@ -3,7 +3,7 @@ import { addClassName, fileSizeFormater, getLocalFileItemData, - handleClickUtil, + //handleClickUtil, } from "../../../../core"; import "./FileMosaic.scss"; import "./../../../icons/IconStyles.scss"; @@ -22,6 +22,7 @@ import useProgress from "../../hooks/useProgress"; import DownloadHidden from "../../../download-hidden/DownloadHidden"; import FileMosaicMainLayer from "../FileMosaicMainLayer.tsx/FileMosaicMainLayer"; import { FilesUiContext } from "../../../../FilesUiProvider/FilesUiContext"; +import { handleClickUtil } from "../../../../files-ui-react/utils"; const FileMosaic: React.FC<FileMosaicProps> = (props: FileMosaicProps) => { const { diff --git a/src/files-ui/components/icons/Cancel/Cancel.tsx b/src/files-ui/components/icons/Cancel/Cancel.tsx index 77709d1..a6fc7b4 100644 --- a/src/files-ui/components/icons/Cancel/Cancel.tsx +++ b/src/files-ui/components/icons/Cancel/Cancel.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { CancelProps } from "./CancelProps"; -import { handleClickUtil } from "../../../core"; +import { handleClickUtil } from "../../../files-ui-react/utils"; const Cancel: React.FC<CancelProps> = (props: CancelProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/Clear/Clear.tsx b/src/files-ui/components/icons/Clear/Clear.tsx index d3d0203..45999d5 100644 --- a/src/files-ui/components/icons/Clear/Clear.tsx +++ b/src/files-ui/components/icons/Clear/Clear.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { ClearProps } from "./ClearProps"; -import { handleClickUtil } from "../../../core"; +import { handleClickUtil } from "../../../files-ui-react/utils"; const Clear: React.FC<ClearProps> = (props: ClearProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/CloudDone/CloudDone.tsx b/src/files-ui/components/icons/CloudDone/CloudDone.tsx index 637cd27..c279285 100644 --- a/src/files-ui/components/icons/CloudDone/CloudDone.tsx +++ b/src/files-ui/components/icons/CloudDone/CloudDone.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { CloudDoneProps } from "./CloudDoneProps"; -import { handleClickUtil } from "../../../core"; +import { handleClickUtil } from "../../../files-ui-react/utils"; const CloudDone: React.FC<CloudDoneProps> = (props: CloudDoneProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/DownloadFile/DownloadFile.tsx b/src/files-ui/components/icons/DownloadFile/DownloadFile.tsx index b2fd994..bce0da9 100644 --- a/src/files-ui/components/icons/DownloadFile/DownloadFile.tsx +++ b/src/files-ui/components/icons/DownloadFile/DownloadFile.tsx @@ -1,5 +1,5 @@ import * as React from "react"; -import { handleClickUtil } from "../../../core"; +import { handleClickUtil } from "../../../files-ui-react/utils"; import { parseSize } from "../utils/utils"; import { DownloadFileProps } from "./DownloadFileProps"; diff --git a/src/files-ui/components/icons/InfoBlack/InfoBlack.tsx b/src/files-ui/components/icons/InfoBlack/InfoBlack.tsx index 025f2fc..cb37bfe 100644 --- a/src/files-ui/components/icons/InfoBlack/InfoBlack.tsx +++ b/src/files-ui/components/icons/InfoBlack/InfoBlack.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { InfoBlackProps } from "./InfoBlackProps"; -import { handleClickUtil } from "../../../core"; +import { handleClickUtil } from "../../../files-ui-react/utils"; const InfoBlack: React.FC<InfoBlackProps> = (props: InfoBlackProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/InfoDisney/InfoDisney.tsx b/src/files-ui/components/icons/InfoDisney/InfoDisney.tsx index 2872875..80b9e2a 100644 --- a/src/files-ui/components/icons/InfoDisney/InfoDisney.tsx +++ b/src/files-ui/components/icons/InfoDisney/InfoDisney.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { InfoDisneyProps } from "./InfoDisneyProps"; -import { handleClickUtil } from "../../../core"; +import { handleClickUtil } from "../../../files-ui-react/utils"; const InfoDisney: React.FC<InfoDisneyProps> = (props: InfoDisneyProps) => { const { diff --git a/src/files-ui/components/icons/Person/Person.tsx b/src/files-ui/components/icons/Person/Person.tsx index a80ab2e..fe87a3f 100644 --- a/src/files-ui/components/icons/Person/Person.tsx +++ b/src/files-ui/components/icons/Person/Person.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { PersonProps } from "./PersonProps"; -import { handleClickUtil } from "../../../core"; +import { handleClickUtil } from "../../../files-ui-react/utils"; const Person: React.FC<PersonProps> = (props: PersonProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/PhotoCamera/PhotoCamera.tsx b/src/files-ui/components/icons/PhotoCamera/PhotoCamera.tsx index 220897f..b7a70ff 100644 --- a/src/files-ui/components/icons/PhotoCamera/PhotoCamera.tsx +++ b/src/files-ui/components/icons/PhotoCamera/PhotoCamera.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { PhotoCameraProps } from "./PhotoCameraProps"; -import { handleClickUtil } from "../../../core"; +import { handleClickUtil } from "../../../files-ui-react/utils"; const PhotoCamera: React.FC<PhotoCameraProps> = (props: PhotoCameraProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/Play/PlayIcon.tsx b/src/files-ui/components/icons/Play/PlayIcon.tsx index 690eb31..b37b94f 100644 --- a/src/files-ui/components/icons/Play/PlayIcon.tsx +++ b/src/files-ui/components/icons/Play/PlayIcon.tsx @@ -1,7 +1,7 @@ import React, { FC } from "react"; import { parseSize } from "../utils/utils"; import { PlayIconProps } from "./PlayIconProps"; -import { handleClickUtil } from "../../../core"; +import { handleClickUtil } from "../../../files-ui-react/utils"; const PlayIcon: FC<PlayIconProps> = (props: PlayIconProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/Remove/Remove.tsx b/src/files-ui/components/icons/Remove/Remove.tsx index ee6ebd8..83cf251 100644 --- a/src/files-ui/components/icons/Remove/Remove.tsx +++ b/src/files-ui/components/icons/Remove/Remove.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { RemoveProps } from "./RemoveProps"; -import { handleClickUtil } from "../../../core"; +import { handleClickUtil } from "../../../files-ui-react/utils"; const Remove: React.FC<RemoveProps> = (props: RemoveProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/Remove/RemoveOutline.tsx b/src/files-ui/components/icons/Remove/RemoveOutline.tsx index a1d6068..526995f 100644 --- a/src/files-ui/components/icons/Remove/RemoveOutline.tsx +++ b/src/files-ui/components/icons/Remove/RemoveOutline.tsx @@ -1,7 +1,7 @@ import * as React from "react"; import { parseSize } from "../utils/utils"; import { RemoveProps } from "./RemoveProps"; -import { handleClickUtil } from "../../../core"; +import { handleClickUtil } from "../../../files-ui-react/utils"; const RemoveOutline: React.FC<RemoveProps> = (props: RemoveProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/components/icons/Visibility/Visibility.tsx b/src/files-ui/components/icons/Visibility/Visibility.tsx index 539862e..d7d9e41 100644 --- a/src/files-ui/components/icons/Visibility/Visibility.tsx +++ b/src/files-ui/components/icons/Visibility/Visibility.tsx @@ -1,7 +1,7 @@ import React, { FC } from "react"; import { parseSize } from "../utils/utils"; import { VisibilityProps } from "./VisibilityProps"; -import { handleClickUtil } from "../../../core"; +import { handleClickUtil } from "../../../files-ui-react/utils"; const Visibility: FC<VisibilityProps> = (props: VisibilityProps) => { const { size, color, colorFill, onClick, style, className } = props; diff --git a/src/files-ui/files-ui-react/utils/click.utils.ts b/src/files-ui/files-ui-react/utils/click.utils.ts new file mode 100644 index 0000000..a91e6a9 --- /dev/null +++ b/src/files-ui/files-ui-react/utils/click.utils.ts @@ -0,0 +1,24 @@ +/** + * Performs stopPropagation and preventDefault functions on an click event instance + * @param evt click event handler object + */ +export function + handleClickUtil<T extends HTMLDivElement | HTMLButtonElement | HTMLAnchorElement | SVGSVGElement | HTMLInputElement> + ( + evt: React.MouseEvent<T, MouseEvent> + ) { + evt.preventDefault(); + evt.stopPropagation(); +} +/** + * Click programatically an input element. + * If the input element is null, nothing will happend + * @param input the input element target to make a click + */ +export const handleClickInput = ( + input: HTMLInputElement | null +) => { + console.log("handleClickInput:", input); + if (!input) return; + input.click(); +} \ No newline at end of file diff --git a/src/files-ui/files-ui-react/utils/dragdrop.utils.ts b/src/files-ui/files-ui-react/utils/dragdrop.utils.ts new file mode 100644 index 0000000..9a04abb --- /dev/null +++ b/src/files-ui/files-ui-react/utils/dragdrop.utils.ts @@ -0,0 +1,21 @@ +/** + * Performs stopPropagation and preventDefault functions on an drop event instance + * @param evt drag event handler object + */ +export const handleDropUtil: React.DragEventHandler<HTMLDivElement> = ( + evt: React.DragEvent<HTMLDivElement> +) => { + evt.stopPropagation(); + evt.preventDefault(); +}; +/** + * Performs stopPropagation and preventDefault functions on an drop event instance + * and also specifies that the drop effect is link + * @param evt drag event handler object + */ +export const handleDragUtil: React.DragEventHandler<HTMLDivElement> = ( + evt: React.DragEvent<HTMLDivElement> +) => { + + evt.dataTransfer.dropEffect = "link"; handleDropUtil(evt); +}; \ No newline at end of file diff --git a/src/files-ui/files-ui-react/utils/index.ts b/src/files-ui/files-ui-react/utils/index.ts new file mode 100644 index 0000000..10f6843 --- /dev/null +++ b/src/files-ui/files-ui-react/utils/index.ts @@ -0,0 +1,4 @@ +export { handleDragUtil, handleDropUtil } from "./dragdrop.utils"; +export { handleClickInput, handleClickUtil } from "./click.utils"; + +export { createFuiRippleFromDiv, createRippleButton } from "./ripple"; diff --git a/src/files-ui/files-ui-react/utils/ripple/index.ts b/src/files-ui/files-ui-react/utils/ripple/index.ts new file mode 100644 index 0000000..62b0479 --- /dev/null +++ b/src/files-ui/files-ui-react/utils/ripple/index.ts @@ -0,0 +1 @@ +export { createFuiRippleFromDiv,createRippleButton } from "./ripple"; \ No newline at end of file diff --git a/src/files-ui/files-ui-react/utils/ripple/ripple.ts b/src/files-ui/files-ui-react/utils/ripple/ripple.ts new file mode 100644 index 0000000..28a73f3 --- /dev/null +++ b/src/files-ui/files-ui-react/utils/ripple/ripple.ts @@ -0,0 +1,81 @@ +import { completeAsureColor, hexColorToRGB } from "../../../core"; + +const asureRippleColor = (color: string): string => { + return completeAsureColor(color, + 0.4 + ); +} + + +export function createFuiRippleFromDiv + <T extends HTMLButtonElement | HTMLAnchorElement | HTMLDivElement> + ( + fuiContainerAbs: T | null, + fuiContainerRel: T | null, + color: string + ) { + if (!fuiContainerRel || !fuiContainerAbs) return; + + fuiContainerAbs.style.display = "block"; + //removeRippleIfExist(fuiContainerRel, "dui-ripple"); + // creating the span circle ripple + const circle: HTMLSpanElement = document.createElement("span"); + //for searching + circle.id = "dui-ripple"; + //for styles + circle.className = "ripple"; + // calculates the diameter + const diameter: number = Math.max( + fuiContainerRel.clientWidth, + fuiContainerRel.clientHeight + ); + + //const rippleCircleRadius: number = diameter / 2; + + //console.log("w,h", fuiContainerRel.clientWidth, fuiContainerRel.clientHeight); + + circle.style.width = circle.style.height = `${diameter}px`; + circle.style.backgroundColor = asureRippleColor(color); + + fuiContainerRel.appendChild(circle); + //remove trash + setTimeout(() => { + fuiContainerAbs.style.display = "none"; + circle?.remove(); + }, 501); +} + + +export function createRippleButton< + T extends HTMLButtonElement | HTMLAnchorElement | HTMLDivElement +>(event: React.MouseEvent<T, MouseEvent>, variant: string, color: string) { + const buttonAnchorDiv = event.currentTarget; + + const circle: HTMLSpanElement = document.createElement("span"); + + const diameter = Math.max( + buttonAnchorDiv.clientWidth, + buttonAnchorDiv.clientHeight + ); + //const radius = diameter / 2; + + circle.style.width = circle.style.height = `${diameter}px`; + /* circle.style.left = `${event.clientX - radius + }px`; + circle.style.top = `${event.clientY - radius + }px`; */ + + circle.classList.add("ripple"); + + if (variant !== "contained") { + circle.style.backgroundColor = asureRippleColor(color); + } else { + + circle.style.backgroundColor = hexColorToRGB("#ffffff", 0.4); + } + buttonAnchorDiv.appendChild(circle); + + setTimeout(() => { + circle?.remove(); + }, 501); +} \ No newline at end of file -- GitLab