From 3d4cbe28f2fb343b5fac9006ab3820faad2bbce7 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Fri, 24 Apr 2020 15:26:05 +0200 Subject: [PATCH] :tada: Add uxbox.util.object ns. --- frontend/src/uxbox/util/object.cljs | 47 +++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 frontend/src/uxbox/util/object.cljs diff --git a/frontend/src/uxbox/util/object.cljs b/frontend/src/uxbox/util/object.cljs new file mode 100644 index 000000000..dabc12f65 --- /dev/null +++ b/frontend/src/uxbox/util/object.cljs @@ -0,0 +1,47 @@ +;; This Source Code Form is subject to the terms of the Mozilla Public +;; License, v. 2.0. If a copy of the MPL was not distributed with this +;; file, You can obtain one at http://mozilla.org/MPL/2.0/. +;; +;; This Source Code Form is "Incompatible With Secondary Licenses", as +;; defined by the Mozilla Public License, v. 2.0. +;; +;; Copyright (c) 2020 UXBOX Labs SL + +(ns uxbox.util.object + "A collection of helpers for work with javascript objects." + (:refer-clojure :exclude [get get-in assoc!]) + (:require [goog.object :as gobj])) + +(defn get + ([obj k] + (when (object? obj) + (unchecked-get obj k))) + ([obj k default] + (if (object? obj) + (or (unchecked-get obj k) default) + default))) + +(defn get-in + [obj keys] + (loop [key (first keys) + keys (rest keys) + res obj] + (if (nil? key) + res + (if (nil? res) + res + (recur (first keys) + (rest keys) + (unchecked-get res key)))))) + +(defn assign! + ([a b] + (js/Object.assign a b)) + ([a b & more] + (reduce assign! (assign! a b) more))) + +(defn assoc! + [obj attr value] + (when (object? obj) + (unchecked-set obj attr value) + obj))