Skip to content

Commit 048f779

Browse files
authored
refactor(contractor-onboarding): transform correctly base64 files (#712)
* feat(contractor-onboarding) - fix update files * fix tests
1 parent c318f49 commit 048f779

3 files changed

Lines changed: 20 additions & 4 deletions

File tree

src/flows/ContractorOnboarding/hooks.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import {
5656
buildContractPreviewJsfModify,
5757
} from '@/src/flows/ContractorOnboarding/jsfModify';
5858
import { useUploadFile } from '@/src/common/api/files';
59+
import { dataURLtoFile } from '@/src/lib/files';
5960

6061
type useContractorOnboardingProps = Omit<
6162
ContractorOnboardingFlowProps,
@@ -421,9 +422,7 @@ export const useContractorOnboarding = ({
421422
saudi_nationality_status: employment?.contract_details?.nationality,
422423
...(ir35File?.content && {
423424
ir35_sds_file: [
424-
new File([ir35File.content as unknown as string], ir35File.name, {
425-
type: 'application/pdf',
426-
}),
425+
dataURLtoFile(ir35File.content as unknown as string, ir35File.name),
427426
],
428427
}),
429428
};

src/flows/ContractorOnboarding/tests/ContractorOnboarding.test.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,8 @@ describe('ContractorOnboardingFlow', () => {
380380
id: '643e3627-320e-44a9-9721-7b9a3cf5b946',
381381
name: 'test-sds.pdf',
382382
type: 'other',
383-
content: 'data:application/pdf;base64,JVBERi0xLjQKJeLjz9MK...', // Truncated base64
383+
content:
384+
'data:application/pdf;base64,JVBERi0xLjQKMSAwIG9iago8PAovVGl0bGUgKP7/KQovQ3JlYXRvciAo/v8AdwBrAGgAdABtAGwAdABvAHAAZABmACAAMAAuADEAMgAuADYALgAxKQovUHJvZHVjZXIgKP7/AFEAdAAgADQALgA4AC4ANykKL0NyZWF0aW9uRGF0ZSAoRDoyMDI1MTAyMzE1MjEwNFopCj4+CmVuZG9iagozIDAgb2JqCjw8Ci9UeXBlIC9FeHRHU3RhdGUKL1NBIHRydWUKL1NNIDAuMDIKL2NhIDEuMAovQ0EgMS4wCi9BSVMgZmFsc2UKL1NNYXNrIC9Ob25lPj4KZW5kb2JqCjQgMCBvYmoKWy9QYXR0ZXJuIC9E',
384385
inserted_at: '2026-01-26T11:08:56Z',
385386
sub_type: 'ir_35',
386387
},

src/lib/files.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,19 @@ export const convertFilesToBase64 = async (files: File[]) => {
2222
);
2323
return base64Files;
2424
};
25+
26+
/**
27+
* Convert a data URL to a File object
28+
* @param dataURL - The data URL to convert
29+
* @param filename - The name of the file
30+
* @returns The File object
31+
*/
32+
export function dataURLtoFile(dataURL: string, filename: string): File {
33+
const arr = dataURL.split(',');
34+
const mime = arr[0].match(/:(.*?);/)?.[1];
35+
const bstr = atob(arr[1]);
36+
37+
const u8arr = Uint8Array.from(bstr, (char) => char.charCodeAt(0));
38+
39+
return new File([u8arr], filename, { type: mime });
40+
}

0 commit comments

Comments
 (0)