/
events.cljs
89 lines (73 loc) · 1.95 KB
/
events.cljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
(ns re-datagrid-demo.events
(:require [re-datagrid-demo.db :as db]
[re-frame.core :as rf]
[reagent.core :as r]
[taoensso.timbre :as timbre
:refer-macros (log trace debug info warn error fatal report
logf tracef debugf infof warnf errorf fatalf reportf
spy get-env log-env)]))
(rf/reg-event-db
:initialize-db
(fn [_ _]
db/default-db))
(def last-id (r/atom 100))
(rf/reg-event-db
:create
(fn [db [_ r]]
(swap! last-id inc)
(update db :data conj
(assoc r :id @last-id))))
(rf/reg-event-db
:delete
(fn [db [_ r]]
(update db
:data
#(remove
(fn [r'] (= (:id r') (:id %2)))
%1)
r)))
(rf/reg-event-db
:update
(fn [db [_ r]]
(update db
:data
#(map
(fn [r']
(if (= (:id r') (:id %2))
%2
r'))
%1)
r)))
(defn swap [v i1 i2]
(assoc v i2 (v i1) i1 (v i2)))
(defn index-of [coll v pk]
(let [i (count (take-while #(not= (get v pk) (get % pk)) coll))]
(when (or (< i (count coll))
(= (get v pk) (get (last coll) pk)))
i)))
(defn move
[db direction record]
(let [i (index-of (:data db) record :id)
i2 (if (= :up direction)
(dec i)
(inc i))
n (count (:data db))
data (if (and (>= i2 0) (< i2 n)
(>= i 0) (< i n))
(swap (:data db) i i2)
(:data db))]
(assoc db :data data)))
(rf/reg-event-db
:reorder
(fn [db [_ direction record]]
(move db direction record)))
(rf/reg-event-db
:sort
(fn [db [_ field direction]]
(debug "custom sort effect, sorting: " field " direction " direction)
db))
(rf/reg-event-db
:header-filter-dispatch
(fn [db [_ id k v blur?]]
(debug "custom header-filter-dispatch effect, " id k v blur?)
db))