|
334 | 334 | (:block/title block)) |
335 | 335 | (ldb/built-in? block)))) |
336 | 336 | tx-data' (mapcat |
337 | | - (fn [[e a v _t added]] |
338 | | - (when added |
339 | | - (cond |
| 337 | + (fn [datom] |
| 338 | + (let [[e a v _t added] datom] |
| 339 | + (when added |
| 340 | + (cond |
340 | 341 | ;; using built-in pages as tags |
341 | | - (and (= a :block/tags) (built-in-page? v)) |
342 | | - [[:db/retract v :db/ident] |
343 | | - [:db/retract v :logseq.property.class/extends] |
344 | | - [:db/retract v :block/tags :logseq.class/Tag] |
345 | | - [:db/add v :block/tags :logseq.class/Page] |
346 | | - [:db/retract e a v]] |
| 342 | + (and (= a :block/tags) (built-in-page? v)) |
| 343 | + [[:db/retract v :db/ident] |
| 344 | + [:db/retract v :logseq.property.class/extends] |
| 345 | + [:db/retract v :block/tags :logseq.class/Tag] |
| 346 | + [:db/add v :block/tags :logseq.class/Page] |
| 347 | + [:db/retract e a v]] |
347 | 348 |
|
348 | | - ;; built-in block protected attributes/properties updated |
349 | | - (and (contains? #{:db/ident :block/title :block/name :block/uuid |
350 | | - :logseq.property/type :db/cardinality |
351 | | - :logseq.property/built-in? :logseq.property.class/extends} a) |
352 | | - (some? (d/entity db-before e)) |
353 | | - (let [block (d/entity db-after e)] |
354 | | - (and (ldb/built-in? block) |
355 | | - (not= (get block a) (get (d/entity db-before e) a))))) |
356 | | - (if-some [prev-v (get (d/entity db-before e) a)] |
357 | | - [[:db/add e a prev-v]] |
358 | | - [[:db/retract e a v]]) |
| 349 | + ;; built-in block protected properties updated |
| 350 | + (and (contains? #{:db/ident :block/title :block/name :block/uuid |
| 351 | + :logseq.property/type :db/cardinality |
| 352 | + :logseq.property/built-in? :logseq.property.class/extends} a) |
| 353 | + (some? (d/entity db-before e)) |
| 354 | + (let [block (d/entity db-after e)] |
| 355 | + (and (ldb/built-in? block) |
| 356 | + (not= (get block a) (get (d/entity db-before e) a))))) |
| 357 | + (if-some [prev-v (get (d/entity db-before e) a)] |
| 358 | + (if (= a :logseq.property.class/extends) |
| 359 | + [[:db/retract e a] |
| 360 | + {:db/id e |
| 361 | + a (map :db/id prev-v)}] |
| 362 | + [[:db/add e a prev-v]]) |
| 363 | + [[:db/retract e a v]]) |
359 | 364 |
|
360 | | - :else |
361 | | - nil))) |
| 365 | + ;; user class extends unexpected built-in classes |
| 366 | + (and (= a :logseq.property.class/extends) |
| 367 | + (let [block (d/entity db-after v)] |
| 368 | + (and (ldb/built-in? block) |
| 369 | + (not (contains? #{:logseq.class/Root :logseq.class/Page :logseq.class/Property |
| 370 | + :logseq.class/Task :logseq.class/Card} |
| 371 | + (:db/ident block)))))) |
| 372 | + (let [prev-v (get (d/entity db-before e) a)] |
| 373 | + [[:db/retract e a v] |
| 374 | + (if (seq prev-v) |
| 375 | + {:db/id e |
| 376 | + a (map :db/id prev-v)} |
| 377 | + [:db/add e a :logseq.class/Root])]) |
| 378 | + |
| 379 | + :else |
| 380 | + nil)))) |
362 | 381 | tx-data)] |
363 | 382 | (when (seq tx-data') |
364 | 383 | (prn :debug ::revert-built-in-block-updates :tx-data (distinct tx-data'))) |
|
0 commit comments