From 3c6ea6ded33b5740035d059d7d9812ed951ab215 Mon Sep 17 00:00:00 2001 From: Stephen Smith Date: Thu, 13 Oct 2022 13:31:16 -0400 Subject: [PATCH] 16073: Hide io param pdh links when equal to the first main file of that param Arvados-DCO-1.1-Signed-off-by: Stephen Smith --- cypress/integration/process.spec.js | 18 ++++++++-------- src/views/process-panel/process-io-card.tsx | 24 ++++++++++++++------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/cypress/integration/process.spec.js b/cypress/integration/process.spec.js index f4e5757803..e877c8e342 100644 --- a/cypress/integration/process.spec.js +++ b/cypress/integration/process.spec.js @@ -872,9 +872,9 @@ describe('Process tests', function() { cy.wait(2000); cy.waitForDom(); verifyIOParameter('input_file', null, "Label Description", 'input1.tar', '00000000000000000000000000000000+01'); - verifyIOParameter('input_file', null, "Label Description", 'input1-2.txt', '00000000000000000000000000000000+01', true); - verifyIOParameter('input_file', null, "Label Description", 'input1-3.txt', '00000000000000000000000000000000+01', true); - verifyIOParameter('input_file', null, "Label Description", 'input1-4.txt', '00000000000000000000000000000000+01', true); + verifyIOParameter('input_file', null, "Label Description", 'input1-2.txt', undefined, true); + verifyIOParameter('input_file', null, "Label Description", 'input1-3.txt', undefined, true); + verifyIOParameter('input_file', null, "Label Description", 'input1-4.txt', undefined, true); verifyIOParameter('input_dir', null, "Doc Description", 'No value', '11111111111111111111111111111111+01'); verifyIOParameter('input_bool', null, "Doc desc 1, Doc desc 2", 'true'); verifyIOParameter('input_int', null, null, '1'); @@ -883,8 +883,8 @@ describe('Process tests', function() { verifyIOParameter('input_double', null, null, '1.3'); verifyIOParameter('input_string', null, null, 'Hello World'); verifyIOParameter('input_file_array', null, null, 'input2.tar', '00000000000000000000000000000000+02'); - verifyIOParameter('input_file_array', null, null, 'input3.tar', '00000000000000000000000000000000+03', true); - verifyIOParameter('input_file_array', null, null, 'input3-2.txt', '00000000000000000000000000000000+03', true); + verifyIOParameter('input_file_array', null, null, 'input3.tar', undefined, true); + verifyIOParameter('input_file_array', null, null, 'input3-2.txt', undefined, true); verifyIOParameter('input_dir_array', null, null, 'No value', '11111111111111111111111111111111+02'); verifyIOParameter('input_dir_array', null, null, 'No value', '11111111111111111111111111111111+03', true); verifyIOParameter('input_int_array', null, null, ["1", "3", "5"]); @@ -902,8 +902,8 @@ describe('Process tests', function() { verifyIOParameter('output_file', null, "Label Description", 'cat.png', `${outPdh}`); verifyIOParameterImage('output_file', `/c=${outPdh}/cat.png`); verifyIOParameter('output_file_with_secondary', null, "Doc Description", 'main.dat', `${outPdh}`); - verifyIOParameter('output_file_with_secondary', null, "Doc Description", 'secondary.dat', `${outPdh}`, true); - verifyIOParameter('output_file_with_secondary', null, "Doc Description", 'secondary2.dat', `${outPdh}`, true); + verifyIOParameter('output_file_with_secondary', null, "Doc Description", 'secondary.dat', undefined, true); + verifyIOParameter('output_file_with_secondary', null, "Doc Description", 'secondary2.dat', undefined, true); verifyIOParameter('output_dir', null, "Doc desc 1, Doc desc 2", 'outdir1', `${outPdh}`); verifyIOParameter('output_bool', null, null, 'true'); verifyIOParameter('output_int', null, null, '1'); @@ -912,9 +912,9 @@ describe('Process tests', function() { verifyIOParameter('output_double', null, null, '100.3'); verifyIOParameter('output_string', null, null, 'Hello output'); verifyIOParameter('output_file_array', null, null, 'output2.tar', `${outPdh}`); - verifyIOParameter('output_file_array', null, null, 'output3.tar', `${outPdh}`, true); + verifyIOParameter('output_file_array', null, null, 'output3.tar', undefined, true); verifyIOParameter('output_dir_array', null, null, 'outdir2', `${outPdh}`); - verifyIOParameter('output_dir_array', null, null, 'outdir3', `${outPdh}`, true); + verifyIOParameter('output_dir_array', null, null, 'outdir3', undefined, true); verifyIOParameter('output_int_array', null, null, ["10", "11", "12"]); verifyIOParameter('output_long_array', null, null, ["51", "52"]); verifyIOParameter('output_float_array', null, null, ["100.2", "100.4", "100.6"]); diff --git a/src/views/process-panel/process-io-card.tsx b/src/views/process-panel/process-io-card.tsx index 45ba76b37c..94544918fc 100644 --- a/src/views/process-panel/process-io-card.tsx +++ b/src/views/process-panel/process-io-card.tsx @@ -501,9 +501,10 @@ export const getIOParamDisplayValue = (auth: AuthState, input: CommandInputParam ...(mainFile && !(Array.isArray(mainFile) && mainFile.length === 0) ? [mainFile] : []), ...secondaryFiles ]; + const mainFilePdhUrl = mainFile ? getResourcePdhUrl(mainFile, pdh) : ""; return files.length ? - files.map((file, i) => fileToProcessIOValue(file, (i > 0), auth, pdh)) : + files.map((file, i) => fileToProcessIOValue(file, (i > 0), auth, pdh, (i > 0 ? mainFilePdhUrl : ""))) : [{display: }]; case isPrimitiveOfType(input, CWLType.DIRECTORY): @@ -547,13 +548,15 @@ export const getIOParamDisplayValue = (auth: AuthState, input: CommandInputParam case isArrayOfType(input, CWLType.FILE): const fileArrayMainFiles = ((input as FileArrayCommandInputParameter).value || []); + const firstMainFilePdh = fileArrayMainFiles.length > 0 ? getResourcePdhUrl(fileArrayMainFiles[0], pdh) : ""; // Convert each main file into separate arrays of ProcessIOValue to preserve secondaryFile grouping - const fileArrayValues = fileArrayMainFiles.map((mainFile: File): ProcessIOValue[] => { + const fileArrayValues = fileArrayMainFiles.map((mainFile: File, i): ProcessIOValue[] => { const secondaryFiles = ((mainFile as unknown) as FileWithSecondaryFiles)?.secondaryFiles || []; return [ - fileToProcessIOValue(mainFile, false, auth, pdh), - ...(secondaryFiles.map(file => fileToProcessIOValue(file, true, auth, pdh))) + // Pass firstMainFilePdh to secondary files and every main file besides the first to hide pdh if equal + fileToProcessIOValue(mainFile, false, auth, pdh, i > 0 ? firstMainFilePdh : ""), + ...(secondaryFiles.map(file => fileToProcessIOValue(file, true, auth, pdh, firstMainFilePdh))) ]; // Reduce each mainFile/secondaryFile group into single array preserving ordering }).reduce((acc: ProcessIOValue[], mainFile: ProcessIOValue[]) => (acc.concat(mainFile)), []); @@ -591,9 +594,13 @@ interface KeepUrlProps { pdh?: string; } -const KeepUrlBase = withStyles(styles)(({auth, res, pdh, classes}: KeepUrlProps & WithStyles) => { +const getResourcePdhUrl = (res: File | Directory, pdh?: string): string => { const keepUrl = getKeepUrl(res, pdh); - const pdhUrl = keepUrl ? keepUrl.split('/').slice(0, 1)[0] : ''; + return keepUrl ? keepUrl.split('/').slice(0, 1)[0] : ''; +}; + +const KeepUrlBase = withStyles(styles)(({auth, res, pdh, classes}: KeepUrlProps & WithStyles) => { + const pdhUrl = getResourcePdhUrl(res, pdh); // Passing a pdh always returns a relative wb2 collection url const pdhWbPath = getNavUrl(pdhUrl, auth); return pdhUrl && pdhWbPath ? @@ -645,12 +652,13 @@ const directoryToProcessIOValue = (directory: Directory, auth: AuthState, pdh?: }; }; -const fileToProcessIOValue = (file: File, secondary: boolean, auth: AuthState, pdh?: string): ProcessIOValue => { +const fileToProcessIOValue = (file: File, secondary: boolean, auth: AuthState, pdh: string | undefined, mainFilePdh: string): ProcessIOValue => { + const resourcePdh = getResourcePdhUrl(file, pdh); return { display: , secondary, imageUrl: isFileImage(file.basename) ? getImageUrl(auth, file, pdh) : undefined, - collection: , + collection: (resourcePdh !== mainFilePdh) ? : <>, } }; -- 2.30.2