I need to update (replace) a property based on a certain text in Block Body

I have stopped using default Markers a long time ago, and, upon much fiddling, settled to something that works to me: unicode/emoji checkboxes and block properties (status::):

:commands [
...
	[ ".","β˜‘οΈ" ] ;; Checked (DONE)
	[ "0","πŸ”³" ] ;; UnChecked (not done -yet)
	[ "..", "πŸ› οΈ" ] ;; WIP / DOING
	[ "...", "β†—πŸ—“οΈ" ] ;; Deferred / Postponed
	[ "|", "β—πŸ”" ] ;; Blocking Point / Blocked
	[ "X", "❌" ] ;; CANCELLED	
	[ "-","β›”" ] ;; Not DONE / Failed
...
]

Now I can use whatever statuses/workflow suits my language and my needs but I have to update both the unicode and property value when a task needs to transition to another status.

Changing the unicode is quite fast as I only double-click the old one to get it β€œselected” and I write the < command to insert the new status in its place. But the property remains as it was and I need to go and edit that as well, which is not ideal.

I would like to write some javascript code that somehow maps each unicode to a status and replaces (or adds to) whatever previous value was there. For exemplification, I have the following map:

β˜‘οΈ- #facut
πŸ”³- #defacut
πŸ› οΈ- #determinat
πŸ—“οΈ- #amanat
πŸ”- #blocat
❌- #anulat
β›”- #nefacut

I imagine that this workflow could be used for better localization (each one cand write it in their own language) and better fitting workflows for their needs.

I guess yet another observer would be useful for this but I have no idea how to tackle this requirement which should involve Logseq API, search for the unicode in the text body then, if finding it, searches for its mapped pair within the status:: property and adds its mapped β€œvalue” in there…

ohh :man_facepalming: that’s wayy out of my league … :frowning: