|
6 | 6 |
|
7 | 7 |
|
8 | 8 | ;; TODO:
|
9 |
| -;; Certain rows do not have uniqueness in the UI state management and therefore expand and collapse multiple when they are the same attribute |
10 |
| -;; When updating deeply nested values they do not trigger a refresh of the UI |
11 |
| -(defn table-row [{:keys [level row expandable-row? expand-row render-col full-width? view-state] :as props}] |
| 9 | +;; (1) When updating deeply nested values they do not trigger a refresh of the UI |
| 10 | +;; (2) Refactory unique row id generation. Perhaps see if this can be done in the `entity` ns |
| 11 | + |
| 12 | +(defn table-row [{:keys [level row expandable-row? expand-row render-col full-width? view-state table-id] :as props}] |
12 | 13 | (let [open? (r/atom false)]
|
13 | 14 | (fn []
|
14 | 15 | [:<>
|
15 | 16 | [:tr {:class "odd:bg-gray-100"}
|
16 | 17 | (doall
|
17 | 18 | (for [[i col] (map-indexed vector row)]
|
18 |
| - (let [row-id {:level level :col col}] |
19 |
| - ^{:key (str {:level level :col col})} |
| 19 | + (let [row-id {:level level :col col :table-id table-id}] |
| 20 | + ^{:key (str row-id)} |
20 | 21 | [:<>
|
21 | 22 | (if (= 0 i)
|
22 | 23 | [:td {:title (str col)
|
|
27 | 28 | (do (when view-state (reset! open? (contains? @view-state row-id)))
|
28 | 29 | [:button {:class "pr-1 focus:outline-none"
|
29 | 30 | :on-click (fn []
|
30 |
| - (js/console.log "inside the for function") |
31 |
| - (js/console.log "row level" level) |
32 | 31 | (when view-state (if (contains? @view-state row-id)
|
33 | 32 | (do (swap! view-state disj row-id)
|
34 |
| - (reset! view-state (set (filter #(<= (:level %) level) @view-state))) |
35 |
| - (js/console.log "this is the filter" (filter #(<= (:level %) level) @view-state))) |
| 33 | + (reset! view-state (set (filter #(<= (:level %) level) @view-state)))) |
36 | 34 | (swap! view-state conj row-id)))
|
37 |
| - (when view-state (js/console.log "this is the view state: " @view-state)) |
38 | 35 | (reset! open? (not @open?)))}
|
39 | 36 | (if @open? "▼" "▶")])
|
40 | 37 | [:span {:class "pr-1 invisible"} "▶"])
|
|
50 | 47 | [tree-table
|
51 | 48 | (merge props {:level (inc level)
|
52 | 49 | :caption nil
|
53 |
| - :rows (expand-row row)})] |
| 50 | + :rows (expand-row row) |
| 51 | + :table-id-acc table-id})] |
54 | 52 | [:button {:title (str "Collapse " (pr-str row))
|
55 | 53 | :on-click (fn []
|
56 | 54 | (let [row-id {:level level :col (first row)}]
|
57 | 55 | (swap! view-state disj row-id)
|
58 |
| - (reset! view-state (set (filter #(and (<= (:level %) level) (= :col (:col row-id))) @view-state)))) |
| 56 | + (reset! view-state (set (filter #(and (<= (:level %) level) |
| 57 | + (= (:col @view-state) (:col row-id))) |
| 58 | + @view-state)))) |
59 | 59 | (reset! open? false))
|
60 | 60 | :class "absolute h-full top-0 left-2.5 border-gray-300 border-l transform hover:border-l-6 hover:-translate-x-0.5 focus:outline-none"}]]])])))
|
61 | 61 |
|
|
64 | 64 | If the row is `(expandable-row? row)` then it will render a caret
|
65 | 65 | to toggle the `(expand-row row)` function and step down a level in the
|
66 | 66 | tree. `expand-row` should return a new sequence of rows."
|
67 |
| - [{:keys [level caption head-row rows expandable-row? expand-row render-col full-width?] |
| 67 | + [{:keys [level caption head-row rows expandable-row? expand-row render-col full-width? table-id-acc] |
68 | 68 | :as props}]
|
69 | 69 | (let [level (or level 0)
|
70 | 70 | render-col (or render-col str)
|
|
83 | 83 | [:tbody
|
84 | 84 | (for [row rows]
|
85 | 85 | ^{:key (str "tr-" level "-" (pr-str row))}
|
86 |
| - [table-row (merge props {:row row})])]])) |
| 86 | + [table-row (merge props |
| 87 | + {:row row |
| 88 | + :table-id (concat table-id-acc |
| 89 | + (if (= :db/id (ffirst rows)) |
| 90 | + [(-> rows first second)] |
| 91 | + [(-> rows first second :db/id)]))})])]])) |
0 commit comments