@@ -18,6 +18,8 @@ import {
1818 VERSION_PROMOTE_ACTION ,
1919 VERSION_RESTORE_ACTION ,
2020 VERSION_UPLOAD_ACTION ,
21+ VERSION_RETENTION_DELETE_ACTION ,
22+ VERSION_RETENTION_REMOVE_ACTION ,
2123} from '../../../constants' ;
2224import type { VersionActionCallback } from './flowTypes' ;
2325import './VersionsItem.scss' ;
@@ -43,6 +45,10 @@ const ACTION_MAP = {
4345 [ VERSION_PROMOTE_ACTION ] : messages . versionPromotedBy ,
4446 [ VERSION_UPLOAD_ACTION ] : messages . versionUploadedBy ,
4547} ;
48+ const RETENTION_MAP = {
49+ [ VERSION_RETENTION_DELETE_ACTION ] : messages . versionRetentionDelete ,
50+ [ VERSION_RETENTION_REMOVE_ACTION ] : messages . versionRetentionRemove ,
51+ } ;
4652const FIVE_MINUTES_MS = 5 * 60 * 1000 ;
4753
4854const VersionsItem = ( {
@@ -65,12 +71,19 @@ const VersionsItem = ({
6571 is_download_available,
6672 permissions = { } ,
6773 restored_at : restoredAt ,
74+ retention,
6875 size,
6976 trashed_at : trashedAt ,
7077 version_number : versionNumber ,
7178 version_promoted : versionPromoted ,
7279 } = version ;
7380 const { can_delete, can_download, can_preview, can_upload } = permissions ;
81+ const {
82+ disposition_action : retentionDispositionAction ,
83+ disposition_at : retentionDispositionTime ,
84+ applied_at : retentionAppliedTime ,
85+ } = retention || { } ;
86+ const retentionDispositionTimestamp = retentionDispositionTime && new Date ( retentionDispositionTime ) . getTime ( ) ;
7487
7588 // Version info helpers
7689 const versionAction = selectors . getVersionAction ( version ) ;
@@ -86,6 +99,9 @@ const VersionsItem = ({
8699 const isDownloadable = ! ! is_download_available ;
87100 const isLimited = versionCount - versionInteger >= versionLimit ;
88101 const isRestricted = isWatermarked && ! isCurrent ; // Watermarked files do not support prior version preview
102+ const isRetained =
103+ ! ! retentionAppliedTime &&
104+ ( ! retentionDispositionTimestamp || retentionDispositionTimestamp > new Date ( ) . getTime ( ) ) ;
89105
90106 // Version action helpers
91107 const canPreview = can_preview && ! isDeleted && ! isLimited && ! isRestricted ;
@@ -129,9 +145,10 @@ const VersionsItem = ({
129145 values = { { name : versionUserName , versionPromoted } }
130146 />
131147 </ div >
148+
132149 < div className = "bcs-VersionsItem-info" >
133150 { versionTimestamp && (
134- < time className = "bcs-VersionsItem-date" dateTime = { createdAt } >
151+ < time className = "bcs-VersionsItem-date" dateTime = { versionTime } >
135152 < ReadableTime
136153 alwaysShowTime
137154 relativeThreshold = { FIVE_MINUTES_MS }
@@ -142,6 +159,17 @@ const VersionsItem = ({
142159 { ! ! size && < span className = "bcs-VersionsItem-size" > { sizeUtil ( size ) } </ span > }
143160 </ div >
144161
162+ { retentionDispositionTimestamp && (
163+ < div className = "bcs-VersionsItem-retention" >
164+ < FormattedMessage
165+ { ...RETENTION_MAP [ retentionDispositionAction ] }
166+ values = { {
167+ time : < ReadableTime timestamp = { retentionDispositionTimestamp } showWeekday /> ,
168+ } }
169+ />
170+ </ div >
171+ ) }
172+
145173 { isLimited && hasActions && (
146174 < div className = "bcs-VersionsItem-footer" >
147175 < FormattedMessage { ...messages . versionLimitExceeded } values = { { versionLimit } } />
@@ -152,6 +180,7 @@ const VersionsItem = ({
152180
153181 { ! isLimited && hasActions && (
154182 < VersionsItemActions
183+ enableDelete = { ! isRetained }
155184 fileId = { fileId }
156185 isCurrent = { isCurrent }
157186 onDelete = { handleAction ( onDelete ) }
0 commit comments