mirror of
https://github.com/urbit/shrub.git
synced 2025-01-03 10:02:32 +03:00
metadata-store: support %edit action
This commit is contained in:
parent
e378673552
commit
046d2db442
@ -94,7 +94,7 @@
|
||||
^- (quip card (unit vase))
|
||||
=/ =update:store !<(update:store vas)
|
||||
:- ~
|
||||
?. ?=(?(%add %remove) -.update)
|
||||
?. ?=(?(%add %remove %edit) -.update)
|
||||
~
|
||||
=/ role=(unit (unit role-tag))
|
||||
(role-for-ship:grp group.update src.bowl)
|
||||
|
@ -151,18 +151,145 @@
|
||||
++ on-poke
|
||||
|= [=mark =vase]
|
||||
^- (quip card _this)
|
||||
?> (team:title our.bowl src.bowl)
|
||||
?> (team:title [our src]:bowl)
|
||||
|^
|
||||
=^ cards state
|
||||
?+ mark (on-poke:def mark vase)
|
||||
?(%metadata-action %metadata-update-1)
|
||||
(poke-metadata-update:mc !<(update:store vase))
|
||||
(poke-metadata-update !<(update:store vase))
|
||||
::
|
||||
%import
|
||||
(poke-import:mc q.vase)
|
||||
(poke-import q.vase)
|
||||
::
|
||||
%noun ~& +.state `state
|
||||
==
|
||||
[cards this]
|
||||
::
|
||||
++ poke-metadata-update
|
||||
|= upd=update:store
|
||||
^- (quip card _state)
|
||||
|^
|
||||
?+ -.upd ~|(%bad-poke !!)
|
||||
%add (handle-add +.upd)
|
||||
%remove (handle-remove +.upd)
|
||||
%edit (handle-edit +.upd)
|
||||
%initial-group (handle-initial-group +.upd)
|
||||
==
|
||||
::
|
||||
++ handle-add
|
||||
|= [group=resource =md-resource:store =metadatum:store]
|
||||
^- (quip card _state)
|
||||
:- %- send-diff:mc
|
||||
[%add group md-resource metadatum]
|
||||
%= state
|
||||
associations
|
||||
(~(put by associations) md-resource [group metadatum])
|
||||
::
|
||||
app-indices
|
||||
%+ ~(put ju app-indices)
|
||||
app-name.md-resource
|
||||
[group resource.md-resource]
|
||||
::
|
||||
resource-indices
|
||||
(~(put by resource-indices) md-resource group)
|
||||
::
|
||||
group-indices
|
||||
(~(put ju group-indices) group md-resource)
|
||||
==
|
||||
::
|
||||
++ handle-edit
|
||||
|= [group=resource =md-resource:store =edit-field:store]
|
||||
^- (quip card _state)
|
||||
=/ [new-group=resource =metadatum:store]
|
||||
~| %no-assoc-for-edit
|
||||
(~(got by associations) md-resource)
|
||||
~| %cant-reassign-groups
|
||||
?> =(new-group group)
|
||||
=. metadatum
|
||||
?- -.edit-field
|
||||
%title metadatum(title title.edit-field)
|
||||
%description metadatum(description description.edit-field)
|
||||
%color metadatum(color color.edit-field)
|
||||
%picture metadatum(picture url.edit-field)
|
||||
%hidden metadatum(hidden hidden.edit-field)
|
||||
%preview metadatum(preview preview.edit-field)
|
||||
%vip metadatum(vip vip.edit-field)
|
||||
==
|
||||
:- (send-diff:mc %add group md-resource metadatum)
|
||||
%_ state
|
||||
associations (~(put by associations) md-resource group metadatum)
|
||||
==
|
||||
::
|
||||
++ handle-remove
|
||||
|= [group=resource =md-resource:store]
|
||||
^- (quip card _state)
|
||||
:- (send-diff:mc [%remove group md-resource])
|
||||
%= state
|
||||
associations
|
||||
(~(del by associations) md-resource)
|
||||
::
|
||||
app-indices
|
||||
%+ ~(del ju app-indices)
|
||||
app-name.md-resource
|
||||
[group resource.md-resource]
|
||||
::
|
||||
resource-indices
|
||||
(~(del by resource-indices) md-resource)
|
||||
::
|
||||
group-indices
|
||||
(~(del ju group-indices) group md-resource)
|
||||
==
|
||||
::
|
||||
++ handle-initial-group
|
||||
|= [group=resource =associations:store]
|
||||
=/ assocs=(list [=md-resource:store grp=resource =metadatum:store])
|
||||
~(tap by associations)
|
||||
:- (send-diff:mc %initial-group group associations)
|
||||
|-
|
||||
?~ assocs
|
||||
state
|
||||
=, assocs
|
||||
?> =(group grp.i)
|
||||
=^ cards state
|
||||
(handle-add group [md-resource metadatum]:i)
|
||||
$(assocs t)
|
||||
--
|
||||
::
|
||||
++ poke-import
|
||||
|= arc=*
|
||||
^- (quip card _state)
|
||||
|^
|
||||
=^ cards state
|
||||
(on-load:mc !>([%9 (remake-metadata ;;(tree-metadata +.arc))]))
|
||||
:_ state
|
||||
%+ weld cards
|
||||
%+ turn ~(tap in ~(key by group-indices))
|
||||
|= rid=resource
|
||||
%- poke-our
|
||||
?: =(entity.rid our.bowl)
|
||||
:- %metadata-push-hook
|
||||
push-hook-action+!>([%add rid])
|
||||
:- %metadata-pull-hook
|
||||
pull-hook-action+!>([%add [entity .]:rid])
|
||||
::
|
||||
++ poke-our
|
||||
|= [app=term =cage]
|
||||
^- card
|
||||
[%pass / %agent [our.bowl app] %poke cage]
|
||||
::
|
||||
+$ tree-metadata
|
||||
$: associations=(tree [md-resource:store [resource metadatum:store]])
|
||||
~
|
||||
==
|
||||
::
|
||||
++ remake-metadata
|
||||
|= tm=tree-metadata
|
||||
^- base-state-3
|
||||
:* (remake-map associations.tm)
|
||||
~
|
||||
==
|
||||
--
|
||||
--
|
||||
::
|
||||
++ on-watch
|
||||
|= =path
|
||||
@ -403,109 +530,6 @@
|
||||
ship+path.md-resource
|
||||
[[path [%graph new-path]] m(module app)]
|
||||
--
|
||||
::
|
||||
:: TODO: refactor into a |^ inside the agent core
|
||||
++ poke-metadata-update
|
||||
|= upd=update:store
|
||||
^- (quip card _state)
|
||||
?> (team:title [our src]:bowl)
|
||||
?+ -.upd !!
|
||||
%add (handle-add +.upd)
|
||||
%remove (handle-remove +.upd)
|
||||
%initial-group (handle-initial-group +.upd)
|
||||
==
|
||||
::
|
||||
:: TODO: refactor into a |^ inside the agent core
|
||||
++ poke-import
|
||||
|= arc=*
|
||||
^- (quip card _state)
|
||||
|^
|
||||
=^ cards state
|
||||
(on-load !>([%9 (remake-metadata ;;(tree-metadata +.arc))]))
|
||||
:_ state
|
||||
%+ weld cards
|
||||
%+ turn ~(tap in ~(key by group-indices))
|
||||
|= rid=resource
|
||||
%- poke-our
|
||||
?: =(entity.rid our.bowl)
|
||||
:- %metadata-push-hook
|
||||
push-hook-action+!>([%add rid])
|
||||
:- %metadata-pull-hook
|
||||
pull-hook-action+!>([%add [entity .]:rid])
|
||||
::
|
||||
++ poke-our
|
||||
|= [app=term =cage]
|
||||
^- card
|
||||
[%pass / %agent [our.bowl app] %poke cage]
|
||||
::
|
||||
+$ tree-metadata
|
||||
$: associations=(tree [md-resource:store [resource metadatum:store]])
|
||||
~
|
||||
==
|
||||
::
|
||||
++ remake-metadata
|
||||
|= tm=tree-metadata
|
||||
^- base-state-3
|
||||
:* (remake-map associations.tm)
|
||||
~
|
||||
==
|
||||
--
|
||||
::
|
||||
++ handle-add
|
||||
|= [group=resource =md-resource:store =metadatum:store]
|
||||
^- (quip card _state)
|
||||
:- %- send-diff
|
||||
[%add group md-resource metadatum]
|
||||
%= state
|
||||
associations
|
||||
(~(put by associations) md-resource [group metadatum])
|
||||
::
|
||||
app-indices
|
||||
%+ ~(put ju app-indices)
|
||||
app-name.md-resource
|
||||
[group resource.md-resource]
|
||||
::
|
||||
resource-indices
|
||||
(~(put by resource-indices) md-resource group)
|
||||
::
|
||||
group-indices
|
||||
(~(put ju group-indices) group md-resource)
|
||||
==
|
||||
::
|
||||
++ handle-remove
|
||||
|= [group=resource =md-resource:store]
|
||||
^- (quip card _state)
|
||||
:- (send-diff [%remove group md-resource])
|
||||
%= state
|
||||
associations
|
||||
(~(del by associations) md-resource)
|
||||
::
|
||||
app-indices
|
||||
%+ ~(del ju app-indices)
|
||||
app-name.md-resource
|
||||
[group resource.md-resource]
|
||||
::
|
||||
resource-indices
|
||||
(~(del by resource-indices) md-resource)
|
||||
::
|
||||
group-indices
|
||||
(~(del ju group-indices) group md-resource)
|
||||
==
|
||||
::
|
||||
++ handle-initial-group
|
||||
|= [group=resource =associations:store]
|
||||
=/ assocs=(list [=md-resource:store grp=resource =metadatum:store])
|
||||
~(tap by associations)
|
||||
:- (send-diff %initial-group group associations)
|
||||
|-
|
||||
?~ assocs
|
||||
state
|
||||
=, assocs
|
||||
?> =(group grp.i)
|
||||
=^ cards state
|
||||
(handle-add group [md-resource metadatum]:i)
|
||||
$(assocs t)
|
||||
::
|
||||
++ metadata-for-app
|
||||
|= =app-name:store
|
||||
^- associations:store
|
||||
|
@ -30,7 +30,7 @@
|
||||
|= =vase
|
||||
^- (list resource)
|
||||
=/ =update:store !<(update:store vase)
|
||||
?. ?=(?(%add %remove %initial-group) -.update) ~
|
||||
?. ?=(?(%add %remove %initial-group %edit) -.update) ~
|
||||
~[group.update]
|
||||
::
|
||||
++ app-paths-from-group
|
||||
|
Loading…
Reference in New Issue
Block a user