X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/b2fcdb2fac8ba49fecca5c30fc56e63b71746cf3..17a3019e33d6d6820f50dabfa9d9ad7a4b02a4b8:/src/views-components/data-explorer/renderers.tsx diff --git a/src/views-components/data-explorer/renderers.tsx b/src/views-components/data-explorer/renderers.tsx index b826aa2b6e..d274157c48 100644 --- a/src/views-components/data-explorer/renderers.tsx +++ b/src/views-components/data-explorer/renderers.tsx @@ -36,7 +36,7 @@ import { connect, DispatchProp } from 'react-redux'; import { RootState } from 'store/store'; import { getResource, filterResources } from 'store/resources/resources'; import { GroupContentsResource } from 'services/groups-service/groups-service'; -import { getProcess, Process, getProcessStatus, getProcessStatusColor, getProcessRuntime } from 'store/processes/process'; +import { getProcess, Process, getProcessStatus, getProcessStatusStyles, getProcessRuntime } from 'store/processes/process'; import { ArvadosTheme } from 'common/custom-theme'; import { compose, Dispatch } from 'redux'; import { WorkflowResource } from 'models/workflow'; @@ -61,9 +61,10 @@ import { getUserUuid } from 'common/getuser'; import { VirtualMachinesResource } from 'models/virtual-machines'; import { CopyToClipboardSnackbar } from 'components/copy-to-clipboard-snackbar/copy-to-clipboard-snackbar'; import { ProjectResource } from 'models/project'; +import { ProcessResource } from 'models/process'; -const renderName = (dispatch: Dispatch, item: GroupContentsResource) => { +const renderName = (dispatch: Dispatch, item: GroupContentsResource) => { const navFunc = ("groupClass" in item && item.groupClass === GroupClass.ROLE ? navigateToGroupDetails : navigateTo); return @@ -89,6 +90,7 @@ const renderName = (dispatch: Dispatch, item: GroupContentsResource) => { ; }; + const FrozenProject = (props: {item: ProjectResource}) => { const [fullUsername, setFullusername] = React.useState(null); const getFullName = React.useCallback(() => { @@ -113,6 +115,7 @@ export const ResourceName = connect( return resource; })((resource: GroupContentsResource & DispatchProp) => renderName(resource.dispatch, resource)); + const renderIcon = (item: GroupContentsResource) => { switch (item.kind) { case ResourceKind.PROJECT: @@ -230,6 +233,11 @@ const renderUuid = (item: { uuid: string }) => {(item.uuid && ) || '-' } ; +const renderUuidCopyIcon = (item: { uuid: string }) => + + {(item.uuid && ) || '-' } + ; + export const ResourceUuid = connect((state: RootState, props: { uuid: string }) => ( getResource(props.uuid)(state.resources) || { uuid: '' } ))(renderUuid); @@ -446,7 +454,7 @@ export const ResourceCluster = (props: { uuid: string }) => { // Links Resources const renderLinkName = (item: { name: string }) => - {item.name || '(none)'}; + {item.name || '-'}; export const ResourceLinkName = connect( (state: RootState, props: { uuid: string }) => { @@ -664,29 +672,59 @@ export const ResourceWorkflowStatus = connect( }; })((props: { ownerUuid?: string, uuidPrefix: string }) => renderWorkflowStatus(props.uuidPrefix, props.ownerUuid)); -const renderProcessState = (processState: string) => {processState || '-'} - -export const ResourceProcessState = connect( - (state: RootState, props: { uuid: string }) => { - const process = getProcess(props.uuid)(state.resources) - // console.log('PROCESS>>>', process) - return { state: process?.container?.state ? process?.container?.state : '' }; - })((props: { state: string }) => renderProcessState(props.state)); - -export const ResourceProcessUuid = connect( +export const ResourceContainerUuid = connect( (state: RootState, props: { uuid: string }) => { const process = getProcess(props.uuid)(state.resources) return { uuid: process?.container?.uuid ? process?.container?.uuid : '' }; })((props: { uuid: string }) => renderUuid({ uuid: props.uuid })); +enum ColumnSelection { + OUTPUT_UUID = 'outputUuid', + LOG_UUID = 'logUuid' +} + +const renderUuidLinkWithCopyIcon = (dispatch: Dispatch, item: ProcessResource, column: string) => { + const selectedColumnUuid = item[column] + return + + {selectedColumnUuid ? + dispatch(navigateTo(selectedColumnUuid))}> + {selectedColumnUuid} + + : '-' } + + + {selectedColumnUuid && renderUuidCopyIcon({ uuid: selectedColumnUuid })} + + ; +}; + +export const ResourceOutputUuid = connect( + (state: RootState, props: { uuid: string }) => { + const resource = getResource(props.uuid)(state.resources); + return resource; + })((process: ProcessResource & DispatchProp) => renderUuidLinkWithCopyIcon(process.dispatch, process, ColumnSelection.OUTPUT_UUID)); + +export const ResourceLogUuid = connect( + (state: RootState, props: { uuid: string }) => { + const resource = getResource(props.uuid)(state.resources); + return resource; + })((process: ProcessResource & DispatchProp) => renderUuidLinkWithCopyIcon(process.dispatch, process, ColumnSelection.LOG_UUID)); + export const ResourceParentProcess = connect( (state: RootState, props: { uuid: string }) => { const process = getProcess(props.uuid)(state.resources) - const parentProcessUuid = process?.containerRequest?.requestingContainerUuid - return { parentProcess: parentProcessUuid || '' }; + return { parentProcess: process?.containerRequest?.requestingContainerUuid || '' }; })((props: { parentProcess: string }) => renderUuid({uuid: props.parentProcess})); -export const ResourceCreatedAtDate = connect( +export const ResourceModifiedByUserUuid = connect( + (state: RootState, props: { uuid: string }) => { + const process = getProcess(props.uuid)(state.resources) + return { userUuid: process?.containerRequest?.modifiedByUserUuid || '' }; + })((props: { userUuid: string }) => renderUuid({uuid: props.userUuid})); + + export const ResourceCreatedAtDate = connect( (state: RootState, props: { uuid: string }) => { const resource = getResource(props.uuid)(state.resources); return { date: resource ? resource.createdAt : '' }; @@ -750,6 +788,16 @@ export const ResourceUUID = connect( const resource = getResource(props.uuid)(state.resources); return { uuid: resource ? resource.uuid : '' }; })((props: { uuid: string }) => renderUuid({uuid: props.uuid})); + +const renderVersion = (version: number) =>{ + return {version ?? '-'} +} + +export const ResourceVersion = connect( + (state: RootState, props: { uuid: string }) => { + const resource = getResource(props.uuid)(state.resources); + return { version: resource ? resource.version: '' }; + })((props: { version: number }) => renderVersion(props.version)); const renderPortableDataHash = (portableDataHash:string | null) => @@ -763,20 +811,6 @@ export const ResourcePortableDataHash = connect( return { portableDataHash: resource ? resource.portableDataHash : '' }; })((props: { portableDataHash: string }) => renderPortableDataHash(props.portableDataHash)); -const renderVersion = (version: number) =>{ - return {version ?? '-'} -} - -export const ResourceVersion = connect( - (state: RootState, props: { uuid: string }) => { - const resource = getResource(props.uuid)(state.resources); - return { version: resource ? resource.version: '' }; - })((props: { version: number }) => renderVersion(props.version)); - -const renderDescription = (description: string)=>{ - const truncatedDescription = description ? description.slice(0, 18) + '...' : '-' - return {truncatedDescription}; -} const renderFileCount = (fileCount: number) =>{ return {fileCount ?? '-'} @@ -788,16 +822,6 @@ export const ResourceFileCount = connect( return { fileCount: resource ? resource.fileCount: '' }; })((props: { fileCount: number }) => renderFileCount(props.fileCount)); -export const ResourceDescription = connect( - (state: RootState, props: { uuid: string }) => { - const resource = getResource(props.uuid)(state.resources); - //testing--------------- - // const containerRequestDescription = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." - // if (resource && !resource.description && resource.kind === ResourceKind.PROCESS) resource.description = containerRequestDescription - //testing--------------- - return { description: resource ? resource.description : '' }; - })((props: { description: string }) => renderDescription(props.description)); - const userFromID = connect( (state: RootState, props: { uuid: string }) => { @@ -820,11 +844,14 @@ const ownerFromResourceId = userFromID ); + + + + const _resourceWithName = withStyles({}, { withTheme: true }) ((props: { uuid: string, userFullname: string, dispatch: Dispatch, theme: ArvadosTheme }) => { const { uuid, userFullname, dispatch, theme } = props; - if (userFullname === '') { dispatch(loadResource(uuid, false)); return @@ -841,6 +868,8 @@ export const ResourceOwnerWithName = ownerFromResourceId(_resourceWithName); export const ResourceWithName = userFromID(_resourceWithName); + + export const UserNameFromID = compose(userFromID)( (props: { uuid: string, displayAsText?: string, userFullname: string, dispatch: Dispatch }) => { @@ -958,15 +987,14 @@ export const ProcessStatus = compose( style={{ height: props.theme.spacing.unit * 3, width: props.theme.spacing.unit * 12, - backgroundColor: getProcessStatusColor( + ...getProcessStatusStyles( getProcessStatus(props.process), props.theme), - color: props.theme.palette.common.white, fontSize: '0.875rem', borderRadius: props.theme.spacing.unit * 0.625, }} /> : - - ); + ); export const ProcessStartDate = connect( (state: RootState, props: { uuid: string }) => { @@ -1014,6 +1042,6 @@ export const ContainerRunTime = connect((state: RootState, props: { uuid: string } render() { - return renderRunTime(this.state.runtime); + return this.props.process ? renderRunTime(this.state.runtime) : -; } });