diff --git a/src/components/breadcrumb/breadcrumb.tsx b/src/components/breadcrumb/breadcrumb.tsx index 134e89ec..d7022afa 100644 --- a/src/components/breadcrumb/breadcrumb.tsx +++ b/src/components/breadcrumb/breadcrumb.tsx @@ -14,13 +14,13 @@ export interface BreadCrumbProps extends HTMLAttributes { defaultActiveIndex?: number } -export const handleNext = (setActive: Dispatch>, onClick: () => void, index: number) => ( - e: MouseEvent, -) => { - e.preventDefault() - setActive(index) - onClick() -} +export const handleNext = + (setActive: Dispatch>, onClick: () => void, index: number) => + (e: MouseEvent) => { + e.preventDefault() + setActive(index) + onClick() + } export const BreadCrumb: FC = ({ items, defaultActiveIndex = 0, ...rest }) => { const [active, setActive] = useState(defaultActiveIndex) diff --git a/src/components/card/__tests__/card-components.test.tsx b/src/components/card/__tests__/card-components.test.tsx index 3d931b2f..1a7096d5 100644 --- a/src/components/card/__tests__/card-components.test.tsx +++ b/src/components/card/__tests__/card-components.test.tsx @@ -96,7 +96,7 @@ describe('handleToggleContextMenu', () => { stopPropagation: jest.fn(), } - curried((event as unknown) as MouseEvent) + curried(event as unknown as MouseEvent) expect(mockSetValue).toHaveBeenCalledTimes(1) expect(mockSetValue).toHaveBeenCalledWith(true) @@ -113,7 +113,7 @@ describe('handleToggleMainMobileOpen', () => { stopPropagation: jest.fn(), } - curried((event as unknown) as MouseEvent) + curried(event as unknown as MouseEvent) expect(mockSetValue).toHaveBeenCalledTimes(1) expect(mockSetValue).toHaveBeenCalledWith(true) @@ -130,7 +130,7 @@ describe('handleToggleListMobileOpen', () => { stopPropagation: jest.fn(), } - curried((event as unknown) as MouseEvent) + curried(event as unknown as MouseEvent) expect(mockSetValue).toHaveBeenCalledTimes(1) expect(mockSetValue).toHaveBeenCalledWith(true) @@ -149,7 +149,7 @@ describe('handleToggleBothMobileOpen', () => { stopPropagation: jest.fn(), } - curried((event as unknown) as MouseEvent) + curried(event as unknown as MouseEvent) expect(mockSetValue).toHaveBeenCalledTimes(1) expect(mockSetValue).toHaveBeenCalledWith(true) diff --git a/src/components/card/card-components.tsx b/src/components/card/card-components.tsx index 43e99eef..3299b7db 100644 --- a/src/components/card/card-components.tsx +++ b/src/components/card/card-components.tsx @@ -70,50 +70,44 @@ export interface CardProps extends HTMLAttributes { isSelected?: boolean // Does the card have the blue selected border } -export const handleToggleContextMenu = ( - contextMenuOpen: boolean, - setContextMenuOpen: Dispatch>, -) => (event: MouseEvent) => { - event.stopPropagation() - setContextMenuOpen(!contextMenuOpen) -} +export const handleToggleContextMenu = + (contextMenuOpen: boolean, setContextMenuOpen: Dispatch>) => (event: MouseEvent) => { + event.stopPropagation() + setContextMenuOpen(!contextMenuOpen) + } -export const handleToggleMainMobileOpen = ( - mainMobileOpen: boolean, - setMainMobileOpen: Dispatch>, -) => (event: MouseEvent) => { - event.stopPropagation() - deprecateFunction('handleToggleMainMobileOpen') - setMainMobileOpen(!mainMobileOpen) -} +export const handleToggleMainMobileOpen = + (mainMobileOpen: boolean, setMainMobileOpen: Dispatch>) => (event: MouseEvent) => { + event.stopPropagation() + deprecateFunction('handleToggleMainMobileOpen') + setMainMobileOpen(!mainMobileOpen) + } -export const handleToggleListMobileOpen = ( - listMobileOpen: boolean, - setListMobileOpen: Dispatch>, -) => (event: MouseEvent) => { - event.stopPropagation() - deprecateFunction('handleToggleListMobileOpen') - setListMobileOpen(!listMobileOpen) -} +export const handleToggleListMobileOpen = + (listMobileOpen: boolean, setListMobileOpen: Dispatch>) => (event: MouseEvent) => { + event.stopPropagation() + deprecateFunction('handleToggleListMobileOpen') + setListMobileOpen(!listMobileOpen) + } -export const handleToggleBothMobileOpen = ( - mainMobileOpen: boolean, - setMainMobileOpen: Dispatch>, - listMobileOpen: boolean, - setListMobileOpen: Dispatch>, -) => (event: MouseEvent) => { - event.stopPropagation() - deprecateFunction('handleToggleBothMobileOpen') - setMainMobileOpen(!mainMobileOpen) - setListMobileOpen(!listMobileOpen) -} +export const handleToggleBothMobileOpen = + ( + mainMobileOpen: boolean, + setMainMobileOpen: Dispatch>, + listMobileOpen: boolean, + setListMobileOpen: Dispatch>, + ) => + (event: MouseEvent) => { + event.stopPropagation() + deprecateFunction('handleToggleBothMobileOpen') + setMainMobileOpen(!mainMobileOpen) + setListMobileOpen(!listMobileOpen) + } -export const handleMouseHover = ( - hoverIndex: number | null, - setHoverIndex: Dispatch>, -) => () => { - setHoverIndex(hoverIndex) -} +export const handleMouseHover = + (hoverIndex: number | null, setHoverIndex: Dispatch>) => () => { + setHoverIndex(hoverIndex) + } export const CardContextMenu: FC = ({ className, contextMenuItems, ...rest }) => { const [contextMenuOpen, setContextMenuOpen] = useState(false) diff --git a/src/components/file-input/__tests__/file-input.test.tsx b/src/components/file-input/__tests__/file-input.test.tsx index 51a9cedd..b88ae1b2 100644 --- a/src/components/file-input/__tests__/file-input.test.tsx +++ b/src/components/file-input/__tests__/file-input.test.tsx @@ -40,7 +40,7 @@ describe('handleFileView', () => { const curried = handleFileView(onFileView, fileUrl) - curried((event as unknown) as MouseEvent) + curried(event as unknown as MouseEvent) expect(onFileView).toHaveBeenCalledWith(fileUrl) expect(event.stopPropagation).toHaveBeenCalledTimes(1) @@ -58,7 +58,7 @@ describe('handleFileClear', () => { const curried = handleFileClear(setFileName) - curried((event as unknown) as MouseEvent) + curried(event as unknown as MouseEvent) expect(setFileName).toHaveBeenCalledWith('') expect(event.stopPropagation).toHaveBeenCalledTimes(1) @@ -79,7 +79,7 @@ describe('handleFileChange', () => { const curried = handleFileChange(setFileName, fileName, onFileUpload) - const reader = curried((event as unknown) as ChangeEvent) + const reader = curried(event as unknown as ChangeEvent) expect(reader instanceof FileReader).toBe(true) }) diff --git a/src/components/file-input/file-input.tsx b/src/components/file-input/file-input.tsx index 65560174..87168d2b 100644 --- a/src/components/file-input/file-input.tsx +++ b/src/components/file-input/file-input.tsx @@ -53,60 +53,60 @@ export interface ImageUploadModel { Url: string } -export const handleFileChange = ( - setFileName: Dispatch>, - fileName: string, - onFileUpload?: (uploadImageModel: CreateImageUploadModel) => Promise, -) => (event: ChangeEvent) => { - if (event.target && event.target.files && event.target.files[0]) { - const file = event.target.files[0] - - const fileUrl = URL.createObjectURL(file) - - if (typeof fileUrl === 'string') { - setFileName(fileUrl) - } +export const handleFileChange = + ( + setFileName: Dispatch>, + fileName: string, + onFileUpload?: (uploadImageModel: CreateImageUploadModel) => Promise, + ) => + (event: ChangeEvent) => { + if (event.target && event.target.files && event.target.files[0]) { + const file = event.target.files[0] + + const fileUrl = URL.createObjectURL(file) + + if (typeof fileUrl === 'string') { + setFileName(fileUrl) + } - const reader = new FileReader() - reader.readAsDataURL(file) - reader.onload = async () => { - const base64 = reader.result + const reader = new FileReader() + reader.readAsDataURL(file) + reader.onload = async () => { + const base64 = reader.result - if (onFileUpload && typeof base64 === 'string') { - const uploaded = await onFileUpload({ - imageData: base64, - name: `${fileName ? fileName : file.name}`, - }) + if (onFileUpload && typeof base64 === 'string') { + const uploaded = await onFileUpload({ + imageData: base64, + name: `${fileName ? fileName : file.name}`, + }) - if (uploaded && (uploaded as ImageUploadModel).Url) { - setFileName((uploaded as ImageUploadModel).Url) + if (uploaded && (uploaded as ImageUploadModel).Url) { + setFileName((uploaded as ImageUploadModel).Url) + } } } - } - reader.onerror = (error) => { - console.error(`file upload error: ${error}`) - } + reader.onerror = (error) => { + console.error(`file upload error: ${error}`) + } - return reader + return reader + } } -} -export const handleFileClear = (setFileName: Dispatch>) => ( - event: MouseEvent, -) => { - event.stopPropagation() - event.preventDefault() +export const handleFileClear = + (setFileName: Dispatch>) => (event: MouseEvent) => { + event.stopPropagation() + event.preventDefault() - setFileName('') -} + setFileName('') + } -export const handleFileView = (onFileView: (fileUrl: string) => void, fileUrl: string) => ( - event: MouseEvent, -) => { - event.stopPropagation() - event.preventDefault() - onFileView(fileUrl) -} +export const handleFileView = + (onFileView: (fileUrl: string) => void, fileUrl: string) => (event: MouseEvent) => { + event.stopPropagation() + event.preventDefault() + onFileView(fileUrl) + } export const FilePreviewImage: FC = ({ src }) => { if (!src) return @@ -152,7 +152,7 @@ export const FileInput: FileInputWrapped = forwardRef( id={inputId} {...rest} defaultValue={defaultValue} - ref={(ref as unknown) as LegacyRef} + ref={ref as unknown as LegacyRef} /> {fileUrl ? ( diff --git a/src/components/form-layout/form-layout.tsx b/src/components/form-layout/form-layout.tsx index 16f8e522..aec0e067 100644 --- a/src/components/form-layout/form-layout.tsx +++ b/src/components/form-layout/form-layout.tsx @@ -26,15 +26,14 @@ export const FormSectionDivider: FC = ({ children, ...rest }) = return {children} } -export const InputWrap: React.ForwardRefExoticComponent< - FormLayoutProps & React.RefAttributes -> = forwardRef(({ children, ...rest }, ref) => { - return ( - }> - {children} - - ) -}) +export const InputWrap: React.ForwardRefExoticComponent> = + forwardRef(({ children, ...rest }, ref) => { + return ( + }> + {children} + + ) + }) export const InputWrapSmall: FC = ({ children, ...rest }) => { return {children} diff --git a/src/components/input/input.tsx b/src/components/input/input.tsx index 18ab8c22..ba2a7b4f 100644 --- a/src/components/input/input.tsx +++ b/src/components/input/input.tsx @@ -16,7 +16,7 @@ export const Input: InputWrapped = forwardRef( } + ref={ref as unknown as LegacyRef} /> ) }, diff --git a/src/components/mobile-controls/__tests__/mobile-controls.test.tsx b/src/components/mobile-controls/__tests__/mobile-controls.test.tsx index 6a8d0756..8992bdf4 100644 --- a/src/components/mobile-controls/__tests__/mobile-controls.test.tsx +++ b/src/components/mobile-controls/__tests__/mobile-controls.test.tsx @@ -38,10 +38,10 @@ describe('clickEventHandler', () => { it('should handle a click event', () => { const setActive = jest.fn() const onClick = jest.fn() - const event = ({ + const event = { preventDefault: jest.fn(), stopPropagation: jest.fn(), - } as unknown) as MouseEvent + } as unknown as MouseEvent const curried = clickEventHandler(setActive, onClick) diff --git a/src/components/mobile-controls/mobile-controls.tsx b/src/components/mobile-controls/mobile-controls.tsx index 3d672acf..aa8a2f41 100644 --- a/src/components/mobile-controls/mobile-controls.tsx +++ b/src/components/mobile-controls/mobile-controls.tsx @@ -17,18 +17,18 @@ export interface MobileControlsProps extends HTMLAttributes { isVisible?: boolean } -export const clickEventHandler = (setActive: Dispatch>, onClick?: () => void) => ( - event: MouseEvent, -) => { - event?.preventDefault() - event?.stopPropagation() +export const clickEventHandler = + (setActive: Dispatch>, onClick?: () => void) => + (event: MouseEvent) => { + event?.preventDefault() + event?.stopPropagation() - setActive((active) => !active) + setActive((active) => !active) - if (onClick) { - onClick() + if (onClick) { + onClick() + } } -} export const MobileControls: FC = ({ mobileControlItems, diff --git a/src/components/multi-select/__tests__/__snapshots__/multi-select.test.tsx.snap b/src/components/multi-select/__tests__/__snapshots__/multi-select.test.tsx.snap index 70094908..ad64505c 100644 --- a/src/components/multi-select/__tests__/__snapshots__/multi-select.test.tsx.snap +++ b/src/components/multi-select/__tests__/__snapshots__/multi-select.test.tsx.snap @@ -169,7 +169,11 @@ exports[`MultiSelectInput should match a snapshot and render children 1`] = ` "asFragment": [Function], "baseElement":
- + @@ -215,7 +219,11 @@ exports[`MultiSelectInput should match a snapshot and render children 1`] = `
, "container":
- + @@ -318,7 +326,11 @@ exports[`MultiSelectInput should match a snapshot and render non selected messag "asFragment": [Function], "baseElement":
- + @@ -377,7 +389,11 @@ exports[`MultiSelectInput should match a snapshot and render non selected messag
, "container":
- + diff --git a/src/components/multi-select/multi-select.tsx b/src/components/multi-select/multi-select.tsx index e9216bf8..19a3c927 100644 --- a/src/components/multi-select/multi-select.tsx +++ b/src/components/multi-select/multi-select.tsx @@ -9,6 +9,7 @@ import React, { RefAttributes, SetStateAction, useEffect, + useId, useMemo, useState, } from 'react' @@ -60,44 +61,41 @@ const setNativeInputValue = (element: HTMLElement, value: string[], testFunc?: ( } } -export const handleSetNativeInput = ( - id: string, - selectedOptionValues: string[], - testFunc?: (value: string[]) => void, -) => () => { - const input = document.getElementById(id) - if (input) { - setNativeInputValue(input, selectedOptionValues, testFunc) - const changeEvent = new Event('change', { bubbles: true }) - input.dispatchEvent(changeEvent) +export const handleSetNativeInput = + (id: string, selectedOptionValues: string[], testFunc?: (value: string[]) => void) => () => { + const input = document.getElementById(id) + if (input) { + setNativeInputValue(input, selectedOptionValues, testFunc) + const changeEvent = new Event('change', { bubbles: true }) + input.dispatchEvent(changeEvent) + } } -} -export const handleResetDefaultValues = ( - setSelectedOptionValues: Dispatch>, - setSelectedDefaultValues: Dispatch>, - defaultValues?: string[], - selectedDefaultValues?: string[], -) => () => { - if (defaultValues && JSON.stringify(defaultValues) !== JSON.stringify(selectedDefaultValues)) { - setSelectedOptionValues(defaultValues) - setSelectedDefaultValues(defaultValues) +export const handleResetDefaultValues = + ( + setSelectedOptionValues: Dispatch>, + setSelectedDefaultValues: Dispatch>, + defaultValues?: string[], + selectedDefaultValues?: string[], + ) => + () => { + if (defaultValues && JSON.stringify(defaultValues) !== JSON.stringify(selectedDefaultValues)) { + setSelectedOptionValues(defaultValues) + setSelectedDefaultValues(defaultValues) + } } -} -export const handleSelectedOptions = ( - value: string, - selectedOptionValues: string[], - setSelectedOptionValues: Dispatch>, -) => (event: ChangeEvent) => { - const isChecked = event.target.checked +export const handleSelectedOptions = + (value: string, selectedOptionValues: string[], setSelectedOptionValues: Dispatch>) => + (event: ChangeEvent) => { + const isChecked = event.target.checked - const newSelected = isChecked - ? [...selectedOptionValues, value] - : selectedOptionValues.filter((option) => option !== value) + const newSelected = isChecked + ? [...selectedOptionValues, value] + : selectedOptionValues.filter((option) => option !== value) - setSelectedOptionValues(newSelected) -} + setSelectedOptionValues(newSelected) + } export const MultiSelectChip: FC = ({ className, children, id, ...rest }) => { const chipId = useMemo(() => { @@ -156,9 +154,11 @@ export const MultiSelectInput: MultiSelectInputWrapped = forwardRef( [defaultValues], ) + const listId = useId() + return ( - - } /> + + } /> {selectedOptionValues.length ? ( options.map((option) => { diff --git a/src/components/nav/__tests__/nav-responsive.test.tsx b/src/components/nav/__tests__/nav-responsive.test.tsx index 4cf803bf..d236d17b 100644 --- a/src/components/nav/__tests__/nav-responsive.test.tsx +++ b/src/components/nav/__tests__/nav-responsive.test.tsx @@ -89,10 +89,10 @@ describe('handleToggleLogo', () => { describe('clickNavEventHandler', () => { it('should handle a click event', () => { const setActive = jest.fn() - const event = ({ + const event = { preventDefault: jest.fn(), stopPropagation: jest.fn(), - } as unknown) as MouseEvent + } as unknown as MouseEvent const curried = clickNavEventHandler(setActive) diff --git a/src/components/nav/nav-responsive.tsx b/src/components/nav/nav-responsive.tsx index d73623b8..6fdcb5a6 100644 --- a/src/components/nav/nav-responsive.tsx +++ b/src/components/nav/nav-responsive.tsx @@ -90,25 +90,23 @@ export const handleToggleLogo = (logoState: LogoIcon, setLogoState: Dispatch>, callback?: () => void) => ( - event: MouseEvent, -) => { - event.preventDefault() - event.stopPropagation() - setState((state) => !state) - if (callback) { - callback() +export const handleToggleMenu = + (setState: Dispatch>, callback?: () => void) => (event: MouseEvent) => { + event.preventDefault() + event.stopPropagation() + setState((state) => !state) + if (callback) { + callback() + } } -} -export const clickNavEventHandler = (setActive: Dispatch>) => ( - event: MouseEvent, -) => { - event?.preventDefault() - event?.stopPropagation() +export const clickNavEventHandler = + (setActive: Dispatch>) => (event: MouseEvent) => { + event?.preventDefault() + event?.stopPropagation() - setActive((active) => !active) -} + setActive((active) => !active) + } export const NavResponsiveAvatar: FC = ({ options, isHidden, text }) => { const [avatarOpen, setAvatarOpen] = useState(false) diff --git a/src/components/pagination/pagination.tsx b/src/components/pagination/pagination.tsx index 5a217db4..31a770b5 100644 --- a/src/components/pagination/pagination.tsx +++ b/src/components/pagination/pagination.tsx @@ -34,35 +34,28 @@ export interface PaginationInputProps extends InputHTMLAttributes {} -export const handlePageChange = ( - nextPage: number | null, - callback: (page: number) => void, - setInputValue: Dispatch>, -) => () => { - if (nextPage) { - setInputValue(String(nextPage)) - callback(nextPage) +export const handlePageChange = + (nextPage: number | null, callback: (page: number) => void, setInputValue: Dispatch>) => + () => { + if (nextPage) { + setInputValue(String(nextPage)) + callback(nextPage) + } } -} -export const handlePageInputChange = ( - numberPages: number, - currentPage: number, - inputValue: string, - callback: (page: number) => void, -) => () => { - const nextPage = Number(inputValue) - if (nextPage && nextPage <= numberPages && nextPage !== currentPage) { - callback(nextPage) +export const handlePageInputChange = + (numberPages: number, currentPage: number, inputValue: string, callback: (page: number) => void) => () => { + const nextPage = Number(inputValue) + if (nextPage && nextPage <= numberPages && nextPage !== currentPage) { + callback(nextPage) + } } -} -export const handlePageInput = (setInputValue: Dispatch>) => ( - event: ChangeEvent, -) => { - const nextPage = event.target.value - setInputValue(nextPage) -} +export const handlePageInput = + (setInputValue: Dispatch>) => (event: ChangeEvent) => { + const nextPage = event.target.value + setInputValue(nextPage) + } export const PaginationWrap: FC = ({ children, ...rest }) => ( {children} diff --git a/src/components/progress-bar/progress-bar.tsx b/src/components/progress-bar/progress-bar.tsx index 600adc0f..fb0dd7c2 100644 --- a/src/components/progress-bar/progress-bar.tsx +++ b/src/components/progress-bar/progress-bar.tsx @@ -36,22 +36,20 @@ export const ProgressBarLabel: FC = ({ children, ...rest } {children} ) -export const handleSetPercentageComplete = ( - setPercentageComplete: Dispatch>, - intervalTime: number, -) => () => { - const interval = window.setInterval(() => { - setPercentageComplete((prev) => { - if (prev < 100) { - return ++prev - } - - return prev - }) - }, intervalTime) - - return () => window.clearInterval(interval) -} +export const handleSetPercentageComplete = + (setPercentageComplete: Dispatch>, intervalTime: number) => () => { + const interval = window.setInterval(() => { + setPercentageComplete((prev) => { + if (prev < 100) { + return ++prev + } + + return prev + }) + }, intervalTime) + + return () => window.clearInterval(interval) + } export const ProgressBarPercentage: FC = ({ duration, showLabel = true, ...rest }) => { const [percentageComplete, setPercentageComplete] = useState(0) @@ -76,13 +74,10 @@ export const ProgressBarPercentage: FC = ({ duration ) } -export const handleSetPercentageCompleteSteps = ( - setPercentageComplete: Dispatch>, - currentStep: number, - numberSteps: number, -) => () => { - setPercentageComplete((currentStep / numberSteps) * 100) -} +export const handleSetPercentageCompleteSteps = + (setPercentageComplete: Dispatch>, currentStep: number, numberSteps: number) => () => { + setPercentageComplete((currentStep / numberSteps) * 100) + } export const ProgressBarSteps: FC = ({ numberSteps, currentStep, showLabel = true, ...rest }) => { const [percentageComplete, setPercentageComplete] = useState((currentStep / numberSteps) * 100) diff --git a/src/components/searchable-dropdown/__tests__/__snapshots__/searchable-dropdown.test.tsx.snap b/src/components/searchable-dropdown/__tests__/__snapshots__/searchable-dropdown.test.tsx.snap index 156a51c4..322a3cf9 100644 --- a/src/components/searchable-dropdown/__tests__/__snapshots__/searchable-dropdown.test.tsx.snap +++ b/src/components/searchable-dropdown/__tests__/__snapshots__/searchable-dropdown.test.tsx.snap @@ -5,7 +5,12 @@ exports[`ControlledSearchableDropdown component should display default value 1`] "asFragment": [Function], "baseElement":
- +