🐛 Make ct/format-inst nil safe (#8612)

Prevent JS TypeError when date is nil in date formatting.

Signed-off-by: Andrey Antukh <niwi@niwi.nz>
This commit is contained in:
Andrey Antukh 2026-03-12 19:55:51 +01:00 committed by GitHub
parent 25df9f2f83
commit e7e6303184
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 36 additions and 35 deletions

View File

@ -204,40 +204,41 @@
(defn format-inst (defn format-inst
([v] (format-inst v :iso)) ([v] (format-inst v :iso))
([v fmt] ([v fmt]
(case fmt (when (some? v)
(:iso :iso8601) (case fmt
#?(:clj (.format DateTimeFormatter/ISO_INSTANT ^Instant v) (:iso :iso8601)
:cljs (dfn-format-iso v)) #?(:clj (.format DateTimeFormatter/ISO_INSTANT ^Instant v)
:cljs (dfn-format-iso v))
:iso-date :iso-date
#?(:clj (.format DateTimeFormatter/ISO_LOCAL_DATE #?(:clj (.format DateTimeFormatter/ISO_LOCAL_DATE
^ZonedDateTime (ZonedDateTime/ofInstant v (ZoneId/of "UTC"))) ^ZonedDateTime (ZonedDateTime/ofInstant v (ZoneId/of "UTC")))
:cljs (dfn-format-iso v #js {:representation "date"})) :cljs (dfn-format-iso v #js {:representation "date"}))
(:rfc1123 :http) (:rfc1123 :http)
#?(:clj (.format DateTimeFormatter/RFC_1123_DATE_TIME #?(:clj (.format DateTimeFormatter/RFC_1123_DATE_TIME
^ZonedDateTime (ZonedDateTime/ofInstant v (ZoneId/of "UTC"))) ^ZonedDateTime (ZonedDateTime/ofInstant v (ZoneId/of "UTC")))
:cljs (dfn-format v "EEE, dd LLL yyyy HH:mm:ss 'GMT'")) :cljs (dfn-format v "EEE, dd LLL yyyy HH:mm:ss 'GMT'"))
#?@(:cljs [:time-24-simple #?@(:cljs [:time-24-simple
(dfn-format v "HH:mm") (dfn-format v "HH:mm")
;; DEPRECATED ;; DEPRECATED
:date-full :date-full
(dfn-format v "PPP") (dfn-format v "PPP")
:localized-date :localized-date
(dfn-format v "PPP") (dfn-format v "PPP")
:localized-time :localized-time
(dfn-format v "p") (dfn-format v "p")
:localized-date-time :localized-date-time
(dfn-format v "PPP . p") (dfn-format v "PPP . p")
(if (string? fmt) (if (string? fmt)
(dfn-format v fmt) (dfn-format v fmt)
(throw (js/Error. "unpexted format")))])))) (throw (js/Error. "unpexted format")))])))))
#?(:cljs #?(:cljs
(def locales (def locales

View File

@ -137,16 +137,16 @@
(ptk/reify ::pin-version (ptk/reify ::pin-version
ptk/WatchEvent ptk/WatchEvent
(watch [_ state _] (watch [_ state _]
(let [version (->> (dm/get-in state [:workspace-versions :data]) (when-let [version (->> (dm/get-in state [:workspace-versions :data])
(d/seek #(= (:id %) id))) (d/seek #(= (:id %) id)))]
params {:id id (let [params {:id id
:label (ct/format-inst (:created-at version) :localized-date)}] :label (ct/format-inst (:created-at version) :localized-date)}]
(->> (rp/cmd! :update-file-snapshot params) (->> (rp/cmd! :update-file-snapshot params)
(rx/mapcat (fn [_] (rx/mapcat (fn [_]
(rx/of (update-versions-state {:editing id}) (rx/of (update-versions-state {:editing id})
(fetch-versions) (fetch-versions)
(ptk/event ::ev/event {::ev/name "pin-version"}))))))))) (ptk/event ::ev/event {::ev/name "pin-version"}))))))))))
(defn lock-version (defn lock-version
[id] [id]