(
defmethod
revision/diff-strings
:model/Dashboard
[
_model
prev-dashboard
dashboard
]
(
let
[
[
removals
changes
]
(
diff
prev-dashboard
dashboard
)
check-series-change
(
fn
[
idx
card-changes
]
(
when
(
and
(
:series
card-changes
)
(
get-in
prev-dashboard
[
:cards
idx
:card_id
]
)
)
(
let
[
num-seriesā
(
count
(
get-in
prev-dashboard
[
:cards
idx
:series
]
)
)
num-seriesā
(
count
(
get-in
dashboard
[
:cards
idx
:series
]
)
)
]
(
cond
(
<
num-seriesā
num-seriesā
)
(
deferred-tru
"added some series to card {0}"
(
get-in
prev-dashboard
[
:cards
idx
:card_id
]
)
)
(
>
num-seriesā
num-seriesā
)
(
deferred-tru
"removed some series from card {0}"
(
get-in
prev-dashboard
[
:cards
idx
:card_id
]
)
)
:else
(
deferred-tru
"modified the series on card {0}"
(
get-in
prev-dashboard
[
:cards
idx
:card_id
]
)
)
)
)
)
)
]
(
->
[
(
when-let
[
default-description
(
u/build-sentence
(
(
get-method
revision/diff-strings
:default
)
:model/Dashboard
prev-dashboard
dashboard
)
)
]
(
cond->
default-description
(
str/ends-with?
default-description
"."
)
(
subs
0
(
dec
(
count
default-description
)
)
)
)
)
(
when
(
:cache_ttl
changes
)
(
cond
(
nil?
(
:cache_ttl
prev-dashboard
)
)
(
deferred-tru
"added a cache ttl"
)
(
nil?
(
:cache_ttl
dashboard
)
)
(
deferred-tru
"removed the cache ttl"
)
:else
(
deferred-tru
"changed the cache ttl from \"{0}\" to \"{1}\""
(
:cache_ttl
prev-dashboard
)
(
:cache_ttl
dashboard
)
)
)
)
(
when
(
or
(
:cards
changes
)
(
:cards
removals
)
)
(
let
[
prev-card-ids
(
set
(
map
:id
(
:cards
prev-dashboard
)
)
)
num-prev-cards
(
count
prev-card-ids
)
new-card-ids
(
set
(
map
:id
(
:cards
dashboard
)
)
)
num-new-cards
(
count
new-card-ids
)
num-cards-diff
(
abs
(
-
num-prev-cards
num-new-cards
)
)
keys-changes
(
set
(
flatten
(
concat
(
map
keys
(
:cards
changes
)
)
(
map
keys
(
:cards
removals
)
)
)
)
)
]
(
cond
(
and
(
set/subset?
prev-card-ids
new-card-ids
)
(
<
num-prev-cards
num-new-cards
)
)
(
deferred-trun
"added a card"
"added {0} cards"
num-cards-diff
)
(
and
(
set/subset?
new-card-ids
prev-card-ids
)
(
>
num-prev-cards
num-new-cards
)
)
(
deferred-trun
"removed a card"
"removed {0} cards"
num-cards-diff
)
(
set/subset?
keys-changes
#{
:row
:col
:size_x
:size_y
}
)
(
deferred-tru
"rearranged the cards"
)
:else
(
deferred-tru
"modified the cards"
)
)
)
)
(
when
(
or
(
:tabs
changes
)
(
:tabs
removals
)
)
(
let
[
prev-tabs
(
:tabs
prev-dashboard
)
new-tabs
(
:tabs
dashboard
)
prev-tab-ids
(
set
(
map
:id
prev-tabs
)
)
num-prev-tabs
(
count
prev-tab-ids
)
new-tab-ids
(
set
(
map
:id
new-tabs
)
)
num-new-tabs
(
count
new-tab-ids
)
num-tabs-diff
(
abs
(
-
num-prev-tabs
num-new-tabs
)
)
]
(
cond
(
and
(
set/subset?
prev-tab-ids
new-tab-ids
)
(
<
num-prev-tabs
num-new-tabs
)
)
(
deferred-trun
"added a tab"
"added {0} tabs"
num-tabs-diff
)
(
and
(
set/subset?
new-tab-ids
prev-tab-ids
)
(
>
num-prev-tabs
num-new-tabs
)
)
(
deferred-trun
"removed a tab"
"removed {0} tabs"
num-tabs-diff
)
(
=
(
set
(
map
#(
dissoc
%
:position
)
prev-tabs
)
)
(
set
(
map
#(
dissoc
%
:position
)
new-tabs
)
)
)
(
deferred-tru
"rearranged the tabs"
)
:else
(
deferred-tru
"modified the tabs"
)
)
)
)
(
let
[
f
(
comp
boolean
:auto_apply_filters
)
]
(
when
(
not=
(
f
prev-dashboard
)
(
f
dashboard
)
)
(
deferred-tru
"set auto apply filters to {0}"
(
str
(
f
dashboard
)
)
)
)
)
]
(
concat
(
map-indexed
check-series-change
(
:cards
changes
)
)
)
(
->>
(
filter
identity
)
)
)
)
)