From d29f7c47f7d94152fb9e4739ea4471a417ffba5d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com>
Date: Sun, 8 Oct 2023 11:56:58 +0200
Subject: [PATCH] FIX: preserver subsec resolution

---
 src/core/js/caosdb.js    | 14 +++++++++++---
 src/core/js/edit_mode.js |  7 ++++---
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/src/core/js/caosdb.js b/src/core/js/caosdb.js
index a5483d64..5eb53a46 100644
--- a/src/core/js/caosdb.js
+++ b/src/core/js/caosdb.js
@@ -335,8 +335,12 @@ var getEntityIdVersion = function (entity) {
  * @param time A time
  * @return A CaosDB compatible representation.
  */
-function input2caosdbDate(date, time) {
-    return date + "T" + time;
+function input2caosdbDate(date, time, subsec) {
+    let res = date + "T" + time;
+    if (subsec!=""){
+        res = res +"." + subsec;
+    }
+    return  res
 }
 
 /**
@@ -377,8 +381,12 @@ var getAllEntityPermissions = function (entity) {
 function caosdb2InputDate(text) {
     if (text.includes("T")) {
         var spl = text.trim().split("T");
+        var subsec=""
+        if (spl[1].includes(".")) {
+            subsec = spl[1].split('.')[1]
+        }
         //TODO subsecond resolution is IGNORED!!!
-        return [spl[0], spl[1].substring(0, 8)];
+        return [spl[0], spl[1].substring(0, 8), subsec];
     }
     return [text];
 }
diff --git a/src/core/js/edit_mode.js b/src/core/js/edit_mode.js
index d9c5d193..beff84e1 100644
--- a/src/core/js/edit_mode.js
+++ b/src/core/js/edit_mode.js
@@ -513,8 +513,9 @@ var edit_mode = new function () {
         var _parse_single_datetime = function (field) {
             let time = $(field).find(":input[type='time']").val()
             let date = $(field).find(":input[type='date']").val();
+            let subsec = $(field).find(":input[type='time']").attr('subsec');
             if (time) {
-                return input2caosdbDate(date, time);
+                return input2caosdbDate(date, time, subsec);
             } else {
                 return date;
             }
@@ -975,10 +976,10 @@ var edit_mode = new function () {
                 dateandtime = caosdb2InputDate(property.value);
             }
             let date = dateandtime[0];
-            if (dateandtime.length == 2) {
+            if (dateandtime.length > 1) {
                 let time = dateandtime[1];
                 result = "<span><input type='date' value='" + date + "'/>" +
-                    "<input type='time' value='" + time + "'/></span>";
+                    "<input type='time' subsec='"+dateandtime[2]+"' value='" + time + "'/></span>";
             } else if (property.value && ((property.name || "").toLowerCase() == "year" || (date.match(/-/g) || []).length == 0)) {
                 // Year
                 result = "<input type='number' value='" + date + "'/>";
-- 
GitLab