From dfeb61707171f8d287487bf0eff0590f6b752102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8Dvar=20Oddsson?= Date: Fri, 3 Jan 2025 13:24:03 +0000 Subject: [PATCH 1/2] Enable opening uploaded files on iOS --- .../web/src/utils/hooks/useFileList/index.ts | 10 ++++++++-- .../utils/hooks/useIsMobile/useIsMobile.ts | 20 +++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 apps/judicial-system/web/src/utils/hooks/useIsMobile/useIsMobile.ts diff --git a/apps/judicial-system/web/src/utils/hooks/useFileList/index.ts b/apps/judicial-system/web/src/utils/hooks/useFileList/index.ts index 0ab7be7464ed..5a668284561b 100644 --- a/apps/judicial-system/web/src/utils/hooks/useFileList/index.ts +++ b/apps/judicial-system/web/src/utils/hooks/useFileList/index.ts @@ -9,6 +9,7 @@ import { } from '@island.is/judicial-system-web/src/components' import { CaseFileState } from '@island.is/judicial-system-web/src/graphql/schema' +import useIsMobile from '../useIsMobile/useIsMobile' import { useGetSignedUrlLazyQuery } from './getSigendUrl.generated' import { useLimitedAccessGetSignedUrlLazyQuery } from './limitedAccessGetSigendUrl.generated' @@ -21,8 +22,13 @@ const useFileList = ({ caseId, connectedCaseParentId }: Parameters) => { const { limitedAccess } = useContext(UserContext) const { setWorkingCase } = useContext(FormContext) const { formatMessage } = useIntl() + const isMobile = useIsMobile() const [fileNotFound, setFileNotFound] = useState() + const openFile = (url: string) => { + window.open(url, isMobile ? '_self' : '_blank', 'noopener, noreferrer') + } + const [ getSignedUrl, { error: fullAccessError, variables: fullAccessVariables }, @@ -31,7 +37,7 @@ const useFileList = ({ caseId, connectedCaseParentId }: Parameters) => { errorPolicy: 'all', onCompleted(data) { if (data?.getSignedUrl?.url) { - window.open(data.getSignedUrl.url, '_blank') + openFile(data.getSignedUrl.url) } }, onError: () => { @@ -47,7 +53,7 @@ const useFileList = ({ caseId, connectedCaseParentId }: Parameters) => { errorPolicy: 'all', onCompleted(data) { if (data?.limitedAccessGetSignedUrl?.url) { - window.open(data.limitedAccessGetSignedUrl.url, '_blank') + openFile(data.limitedAccessGetSignedUrl.url) } }, onError: () => { diff --git a/apps/judicial-system/web/src/utils/hooks/useIsMobile/useIsMobile.ts b/apps/judicial-system/web/src/utils/hooks/useIsMobile/useIsMobile.ts new file mode 100644 index 000000000000..99131323e17f --- /dev/null +++ b/apps/judicial-system/web/src/utils/hooks/useIsMobile/useIsMobile.ts @@ -0,0 +1,20 @@ +import { useEffect, useState } from 'react' + +const useIsMobile = () => { + const [isMobile, setIsMobile] = useState(false) + + useEffect(() => { + const checkMobile = () => { + const userAgent = navigator.userAgent + const mobileRegex = + /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i + return mobileRegex.test(userAgent) + } + + setIsMobile(checkMobile()) + }, []) + + return isMobile +} + +export default useIsMobile From 9043af2acc22c13ac5b33f5dbc1c0279f33de255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=8Dvar=20Oddsson?= Date: Mon, 6 Jan 2025 13:17:50 +0000 Subject: [PATCH 2/2] Add SSR check --- .../web/src/utils/hooks/useIsMobile/useIsMobile.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/judicial-system/web/src/utils/hooks/useIsMobile/useIsMobile.ts b/apps/judicial-system/web/src/utils/hooks/useIsMobile/useIsMobile.ts index 99131323e17f..5afc2ea17f66 100644 --- a/apps/judicial-system/web/src/utils/hooks/useIsMobile/useIsMobile.ts +++ b/apps/judicial-system/web/src/utils/hooks/useIsMobile/useIsMobile.ts @@ -5,6 +5,11 @@ const useIsMobile = () => { useEffect(() => { const checkMobile = () => { + // Check for SSR + if (!window) { + return false + } + const userAgent = navigator.userAgent const mobileRegex = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i