|
363 | 363 |
|
364 | 364 | (rum/defc add-existing-values
|
365 | 365 | [property values {:keys [toggle-fn]}]
|
366 |
| - (let [uuid-values? (every? uuid? values) |
367 |
| - values' (if uuid-values? |
368 |
| - (let [values' (map #(db/entity [:block/uuid %]) values)] |
369 |
| - (->> values' |
370 |
| - (util/distinct-by db-property/closed-value-content) |
371 |
| - (map :block/uuid))) |
372 |
| - values)] |
373 |
| - [:div.flex.flex-col.gap-1.w-64.p-4.overflow-y-auto |
374 |
| - {:class "max-h-[50dvh]"} |
375 |
| - [:div "Existing values:"] |
376 |
| - [:ol |
377 |
| - (for [value values'] |
378 |
| - [:li (if (uuid? value) |
379 |
| - (let [result (db/entity [:block/uuid value])] |
380 |
| - (db-property/closed-value-content result)) |
381 |
| - (str value))])] |
382 |
| - (shui/button |
383 |
| - {:on-click (fn [] |
384 |
| - (p/let [_ (db-property-handler/add-existing-values-to-closed-values! (:db/id property) values')] |
385 |
| - (toggle-fn)))} |
386 |
| - "Add choices")])) |
| 366 | + [:div.flex.flex-col.gap-1.w-64.p-4.overflow-y-auto |
| 367 | + {:class "max-h-[50dvh]"} |
| 368 | + [:div "Existing values:"] |
| 369 | + [:ol |
| 370 | + (for [value values] |
| 371 | + [:li (:label value)])] |
| 372 | + (shui/button |
| 373 | + {:on-click (fn [] |
| 374 | + (p/let [_ (db-property-handler/add-existing-values-to-closed-values! (:db/id property) |
| 375 | + (map (fn [{:keys [value]}] |
| 376 | + (:block/uuid value)) values))] |
| 377 | + (toggle-fn)))} |
| 378 | + "Add choices")]) |
387 | 379 |
|
388 | 380 | (rum/defc choices-sub-pane < rum/reactive db-mixins/query
|
389 | 381 | [property {:keys [disabled?] :as opts}]
|
|
431 | 423 | {:icon :plus :title "Add choice"
|
432 | 424 | :item-props {:on-click
|
433 | 425 | (fn [^js e]
|
434 |
| - (p/let [values (db-async/<get-block-property-values (state/get-current-repo) (:db/ident property)) |
| 426 | + (p/let [values (db-async/<get-property-values (:db/ident property) {}) |
435 | 427 | existing-values (seq (:property/closed-values property))
|
436 |
| - values (if (seq existing-values) |
437 |
| - (let [existing-ids (set (map :db/id existing-values))] |
438 |
| - (remove (fn [id] (existing-ids id)) values)) |
439 |
| - values)] |
440 |
| - (shui/popup-show! (.-target e) |
441 |
| - (fn [{:keys [id]}] |
442 |
| - (let [opts {:toggle-fn (fn [] (shui/popup-hide! id))} |
443 |
| - values' (->> (if (contains? db-property-type/all-ref-property-types (:logseq.property/type property)) |
444 |
| - (->> values |
445 |
| - (map db/entity) |
446 |
| - (remove (fn [e] |
447 |
| - (let [value (db-property/property-value-content e)] |
448 |
| - (and (string? value) (string/blank? value))))) |
449 |
| - (map :block/uuid)) |
450 |
| - (remove string/blank? values)) |
451 |
| - distinct)] |
452 |
| - (if (seq values') |
453 |
| - (add-existing-values property values' opts) |
454 |
| - (choice-base-edit-form property {:create? true})))) |
455 |
| - {:id :ls-base-edit-form |
456 |
| - :align "start"})))}}))])) |
| 428 | + values' (if (seq existing-values) |
| 429 | + (let [existing-ids (set (map :db/id existing-values)) |
| 430 | + existing-titles (set (map db-property/property-value-content existing-values))] |
| 431 | + (remove (fn [{:keys [label value]}] |
| 432 | + (or (existing-ids (:db/id value)) |
| 433 | + (existing-titles label) |
| 434 | + (string/blank? label))) values)) |
| 435 | + (remove (fn [{:keys [label _value]}] |
| 436 | + (string/blank? label)) |
| 437 | + values))] |
| 438 | + (p/do! |
| 439 | + (when (seq values') |
| 440 | + (db-async/<get-blocks (state/get-current-repo) (map (fn [{:keys [value]}] (:db/id value)) values))) |
| 441 | + (shui/popup-show! (.-target e) |
| 442 | + (fn [{:keys [id]}] |
| 443 | + (let [opts {:toggle-fn (fn [] (shui/popup-hide! id))}] |
| 444 | + (if (seq values') |
| 445 | + (add-existing-values property values' opts) |
| 446 | + (choice-base-edit-form property {:create? true})))) |
| 447 | + {:id :ls-base-edit-form |
| 448 | + :align "start"}))))}}))])) |
457 | 449 |
|
458 | 450 | (rum/defc checkbox-state-mapping
|
459 | 451 | [choices]
|
|
766 | 758 | property (first (:rum/args state))
|
767 | 759 | ident (:db/ident property)]
|
768 | 760 | (p/let [_ (db-async/<get-block repo (:block/uuid property))
|
769 |
| - result (db-async/<get-block-property-values repo ident)] |
| 761 | + result (db-async/<get-property-values ident)] |
770 | 762 | (reset! *values result))
|
771 | 763 | (assoc state ::values *values)))}
|
772 | 764 | [state property* owner-block opts]
|
|
0 commit comments