diff --git a/src/utils/helper.js b/src/utils/helper.js index 1e80d461..1bcb1b60 100644 --- a/src/utils/helper.js +++ b/src/utils/helper.js @@ -189,30 +189,28 @@ const uploadFile = ({ } // call stub function if available -const locationAssign = (relativeUrl) => { +const locationAssign = (url) => { if (window.locationAssign) { - window.locationAssign(relativeUrl) + window.locationAssign(url) } else { try { - const url = relativeUrl.startsWith('..') - ? new URL(relativeUrl, document.baseURI).href - : relativeUrl + const downloadUrl = url.startsWith('..') + ? new URL(url, document.baseURI).href + : url - const urlFilePart = new URL(url).pathname.split('/').pop() - const [, file, extension] = urlFilePart.match(/(^[^.]+)(\..+$)/) - - const downloadedFileName = `${file}${extension}` + const urlFilePart = new URL(downloadUrl).pathname.split('/').pop() + const [, filename] = urlFilePart.match(/(^[^.]+)(\..+$)/) const link = document.createElement('a') - link.href = url - link.download = downloadedFileName + link.href = downloadUrl + link.download = filename link.target = '_blank' link.click() return link } catch (err) { console.error(err) - window.open(relativeUrl, '_blank') + window.open(url, '_blank') } } } diff --git a/src/utils/helper.test.js b/src/utils/helper.test.js index 202de0a2..effdbc67 100644 --- a/src/utils/helper.test.js +++ b/src/utils/helper.test.js @@ -5,39 +5,39 @@ describe('locationAssign', () => { const url = 'https://debug.dhis2.org/dev/api/tracker/trackedEntities.json?ouMode=CAPTURE&format=json&includeDeleted=false&dataElementIdScheme=UID&eventIdScheme=UID&orgUnitIdScheme=UID&idScheme=UID&attachment=trackedEntities.json&paging=false&totalPages=false&program=lxAQ7Zs9VYR' const link = locationAssign(url) - expect(link.download).toEqual('trackedEntities.json') + expect(link.download).toEqual('trackedEntities') }) it('should create url with orgUnits', () => { const url = 'https://debug.dhis2.org/dev/api/tracker/trackedEntities.json?ouMode=SELECTED&includeDeleted=false&dataElementIdScheme=UID&eventIdScheme=UID&orgUnitIdScheme=UID&idScheme=UID&attachment=trackedEntities.json&paging=false&totalPages=false&orgUnits=O6uvpzGd5pu,fdc6uOvgoji&program=kla3mAPgvCH' const link = locationAssign(url) - expect(link.download).toEqual('trackedEntities.json') + expect(link.download).toEqual('trackedEntities') }) it('should create url with tracked entities', () => { const url = 'https://debug.dhis2.org/dev/api/tracker/trackedEntities.json?ouMode=SELECTED&includeDeleted=false&dataElementIdScheme=UID&eventIdScheme=UID&orgUnitIdScheme=UID&idScheme=UID&attachment=trackedEntities.json&paging=false&totalPages=false&orgUnits=ImspTQPwCqd&trackedEntityType=bVkFYAvoUCP' const link = locationAssign(url) - expect(link.download).toEqual('trackedEntities.json') + expect(link.download).toEqual('trackedEntities') }) it('should create url with CSV', () => { const url = 'https://debug.dhis2.org/dev/api/tracker/trackedEntities.csv?ouMode=SELECTED&includeDeleted=false&dataElementIdScheme=UID&eventIdScheme=UID&orgUnitIdScheme=UID&idScheme=UID&attachment=trackedEntities.csv&paging=false&totalPages=false&orgUnits=ImspTQPwCqd&program=lxAQ7Zs9VYR' const link = locationAssign(url) - expect(link.download).toEqual('trackedEntities.csv') + expect(link.download).toEqual('trackedEntities') }) it('should create url with events zip', () => { const url = 'https://debug.dhis2.org/dev/api/tracker/events.json.zip?links=false&paging=false&totalPages=false&orgUnit=fwH9ipvXde9&program=VBqh0ynB2wv&includeDeleted=false&dataElementIdScheme=UID&orgUnitIdScheme=UID&idScheme=UID&attachment=events.json.zip&occurredAfter=2023-12-12&occurredBefore=2024-03-12&ouMode=CHILDREN&format=json' const link = locationAssign(url) - expect(link.download).toEqual('events.json.zip') + expect(link.download).toEqual('events') }) it('should create url with events gzip', () => { const url = 'https://debug.dhis2.org/dev/api/tracker/events.json.gz?links=false&paging=false&totalPages=false&orgUnit=ImspTQPwCqd&program=lxAQ7Zs9VYR&includeDeleted=false&dataElementIdScheme=UID&orgUnitIdScheme=UID&idScheme=UID&attachment=events.json.gz&occurredAfter=2023-12-12&occurredBefore=2024-03-12&ouMode=SELECTED&format=json' const link = locationAssign(url) - expect(link.download).toEqual('events.json.gz') + expect(link.download).toEqual('events') }) it('should work with relative URLs when bundled in DHIS2', () => { Object.defineProperty(global.document, 'baseURI', { @@ -46,7 +46,7 @@ describe('locationAssign', () => { const url = '../api/tracker/trackedEntities.json?ouMode=SELECTED&includeDeleted=false&dataElementIdScheme=UID&eventIdScheme=UID&orgUnitIdScheme=UID&idScheme=UID&attachment=trackedEntities.json&paging=false&totalPages=false&orgUnits=ImspTQPwCqd&program=lxAQ7Zs9VYR' const link = locationAssign(url) - expect(link.download).toEqual('trackedEntities.json') + expect(link.download).toEqual('trackedEntities') }) it('should work with relative URLs when bundled in DHIS2 for zip', () => { Object.defineProperty(global.document, 'baseURI', { @@ -55,6 +55,6 @@ describe('locationAssign', () => { const url = '../api/tracker/events.json.zip?links=false&paging=false&totalPages=false&orgUnit=ImspTQPwCqd&program=lxAQ7Zs9VYR&includeDeleted=false&dataElementIdScheme=UID&orgUnitIdScheme=UID&idScheme=UID&attachment=events.json.zip&occurredAfter=2023-12-12&occurredBefore=2024-03-12&ouMode=SELECTED&format=json' const link = locationAssign(url) - expect(link.download).toEqual('events.json.zip') + expect(link.download).toEqual('events') }) })