@@ -915,17 +915,68 @@ export default {
915
915
getIsPublishedBase (item ) {
916
916
return item .status === pkp .const .STATUS_PUBLISHED ;
917
917
},
918
+ /**
919
+ * Gets pubObject's versions/publications. Considers only latest minor versions. Assumes original object is submission.
920
+ *
921
+ * @param {Object} item Item being mapped
922
+ * @returns {Object} Modified mapped item
923
+ */
918
924
getVersions (item ) {
925
+ var latestMinorPublications = [];
926
+ item .publications ? .forEach ((publication ) => {
927
+ if (publication .versionStage == null ) {
928
+ if (! (' unassigned' in latestMinorPublications)) {
929
+ latestMinorPublications[' unassigned' ] = [];
930
+ }
931
+ latestMinorPublications[' unassigned' ].push (publication);
932
+ return ;
933
+ }
934
+ if (! (publication .versionStage in latestMinorPublications)) {
935
+ latestMinorPublications[publication .versionStage ] = [];
936
+ }
937
+ if (
938
+ ! (
939
+ publication .versionMajor in
940
+ latestMinorPublications[publication .versionStage ]
941
+ )
942
+ ) {
943
+ latestMinorPublications[publication .versionStage ][
944
+ publication .versionMajor
945
+ ] = publication;
946
+ return ;
947
+ }
948
+ if (
949
+ publication .versionMinor >
950
+ latestMinorPublications[publication .versionStage ][
951
+ publication .versionMajor
952
+ ].versionMinor
953
+ ) {
954
+ latestMinorPublications[publication .versionStage ][
955
+ publication .versionMajor
956
+ ] = publication;
957
+ }
958
+ });
919
959
return (
920
- item .publications ? .map ((publication ) => {
921
- return {
922
- id: publication .id ,
923
- isCurrentVersion: item .currentPublicationId === publication .id ,
924
- versionNumber: publication .versionString ,
925
- urlPublished: publication .urlPublished ,
926
- datePublished: publication .datePublished ,
927
- };
928
- }) || []
960
+ item .publications
961
+ ? .filter ((publication ) =>
962
+ latestMinorPublications[
963
+ publication .versionStage ?? ' unassigned'
964
+ ].includes (publication),
965
+ )
966
+ .map ((publication ) => {
967
+ let versionString = publication .versionString ;
968
+ if (publication .versionStage == null ) {
969
+ // to distinguish unassigned versions created on the same day, add publication ID
970
+ versionString = publication .id + ' - ' + versionString;
971
+ }
972
+ return {
973
+ id: publication .id ,
974
+ isCurrentVersion: item .currentPublicationId === publication .id ,
975
+ versionNumber: versionString,
976
+ urlPublished: publication .urlPublished ,
977
+ datePublished: publication .datePublished ,
978
+ };
979
+ }) || []
929
980
);
930
981
},
931
982
/**
0 commit comments