graph-push-hook: implement transform-add-nodes mark and properly ingest %add-nodes event

This commit is contained in:
Logan Allen 2021-02-24 12:25:53 -06:00
parent face904377
commit 22d1348e57
4 changed files with 80 additions and 22 deletions

View File

@ -76,34 +76,67 @@
%add-nodes
?. (is-allowed-add:hc rid nodes.q.update)
~
:: TODO: use marks to transform based on graph-type
=/ mark (get-mark:gra rid)
?~ mark `vas
|^
=/ transform=$-([index:store post:store] [index:store post:store])
!< $-([index:store post:store] [index:store post:store])
=/ transform=$-([index:store post:store atom ?] [index:store post:store])
!< $-([index:store post:store atom ?] [index:store post:store])
%. !>(*indexed-post:store)
.^(tube:clay (scry:hc %cc %home /[u.mark]/transform-add-nodes))
=. nodes.q.update
%- ~(gas by *(map index:store node:store))
%- zing
%+ turn
~(tap by nodes.q.update)
=/ [* lis=(list [index:store node:store])]
%+ roll
(flatten-node-map ~(tap by nodes.q.update))
(transform-list transform)
=. nodes.q.update
(~(gas by *(map index:store node:store)) lis)
[~ !>(update)]
::
++ transform-list
|= transform=$-([index:store post:store] [index:store post:store])
++ flatten-node-map
|= lis=(list [index:store node:store])
^- (list [index:store node:store])
|^
%- sort-nodes
%+ weld
(turn lis empty-children)
%- zing
%+ turn lis
|= [=index:store =node:store]
^- (list [index:store node:store])
=/ [ind=index:store =post:store] (transform index post.node)
:- [ind [post [%empty ~]]]
?: ?=(%empty -.children.node)
~
%- zing
%+ turn
(tap-deep:gra p.children.node)
(transform-list transform)
(turn (tap-deep:gra p.children.node) empty-children)
::
++ empty-children
|= [=index:store =node:store]
^- [index:store node:store]
[index node(children [%empty ~])]
::
++ sort-nodes
|= lis=(list [index:store node:store])
^- (list [index:store node:store])
%+ sort lis
|= [p=[=index:store *] q=[=index:store *]]
^- ?
(lth (lent index.p) (lent index.q))
--
::
++ transform-list
|= transform=$-([index:store post:store atom ?] [index:store post:store])
|= $: [=index:store =node:store]
[indices=(set index:store) lis=(list [index:store node:store])]
==
=/ l (lent index)
=/ parent-modified=?
%- ~(rep in indices)
|= [i=index:store out=?]
?: out out
?: (lte l (lent i))
%.n
=((swag [0 l] i) index)
=/ [ind=index:store =post:store]
(transform index post.node now.bowl parent-modified)
:- (~(put in indices) index)
(snoc lis [ind node(post post)])
--
::
%remove-nodes

View File

@ -22,9 +22,10 @@
==
::
++ transform-add-nodes
|= [=index =post]
|= [=index =post =atom was-parent-modified=?]
^- [^index ^post]
[index post]
=- [- post(index -)]
[atom ~]
--
++ grab
|%

View File

@ -32,9 +32,17 @@
==
::
++ transform-add-nodes
|= [=index =post]
|= [=index =post =atom was-parent-modified=?]
^- [^index ^post]
[index post]
=- [- post(index -)]
?+ index ~|(transform+[index post] !!)
[@ ~] [atom ~]
[@ @ ~] [i.index atom ~]
[@ @ @ ~]
?: was-parent-modified
[i.index atom atom ~]
[i.index i.t.index atom ~]
==
--
++ grab
|%

View File

@ -32,9 +32,25 @@
==
::
++ transform-add-nodes
|= [=index =post]
|= [=index =post =atom was-parent-modified=?]
^- [^index ^post]
[index post]
=- [- post(index -)]
?+ index ~|(transform+[index post] !!)
[@ ~] [atom ~]
[@ %1 ~] [atom %1 ~]
::
[@ %1 @ ~]
?: was-parent-modified
[atom %1 atom ~]
[i.index %1 atom ~]
::
[@ %2 ~] [atom %2 ~]
[@ %2 @ ~] [i.index %2 atom ~]
[@ %2 @ @ ~]
?: was-parent-modified
[i.index %2 atom atom ~]
[i.index %2 i.t.t.index atom ~]
==
--
++ grab
|%