diff --git a/assets/src/bundles/save/index.js b/assets/src/bundles/save/index.js
--- a/assets/src/bundles/save/index.js
+++ b/assets/src/bundles/save/index.js
@@ -345,7 +345,7 @@
     'duration': (v) => v + ' seconds'
   };
 
-  return mapFormatPerTypeFn[type](value);
+  return value === null ? null : mapFormatPerTypeFn[type](value);
 }
 
 export function displaySaveRequestInfo(event, saveRequestId) {
diff --git a/cypress/integration/origin-save.spec.js b/cypress/integration/origin-save.spec.js
--- a/cypress/integration/origin-save.spec.js
+++ b/cypress/integration/origin-save.spec.js
@@ -103,6 +103,27 @@
     cy.visit(url);
   });
 
+  it('should format appropriately values depending on their type', function() {
+    let inputValues = [ // null values stay null
+      {type: 'json', value: null, expectedValue: null},
+      {type: 'date', value: null, expectedValue: null},
+      {type: 'raw', value: null, expectedValue: null},
+      {type: 'duration', value: null, expectedValue: null},
+      // non null values formatted depending on their type
+      {type: 'json', value: '{}', expectedValue: '"{}"'},
+      {type: 'date', value: '04/04/2021 01:00:00', expectedValue: '4/4/2021, 1:00:00 AM'},
+      {type: 'raw', value: 'value-for-identity', expectedValue: 'value-for-identity'},
+      {type: 'duration', value: '10', expectedValue: '10 seconds'},
+      {type: 'duration', value: 100, expectedValue: '100 seconds'}
+    ];
+    cy.window().then(win => {
+      inputValues.forEach(function(input, index, array) {
+        let actualValue = win.swh.save.formatValuePerType(input.type, input.value);
+        assert.equal(actualValue, input.expectedValue);
+      });
+    });
+  });
+
   it('should display accepted message when accepted', function() {
     stubSaveRequest({requestUrl: this.originSaveUrl,
                      saveRequestStatus: 'accepted',