TJSDocumentProperty Prototype
So I implemented a prototype of a custom store implementation that wraps a
TJSDocument
instance that allows dynamic store access to property accessors. TJSDocumentProperty
is a complete Writable
instance allowing update
to be used when more complex modification is required for the underlying property; IE pushing to an array or modifying a nested object.
I included TJSDocumentProperty
as an attachment to this post. Also is a demo Svelte component that can be copied to BasicDocAppShell
in essential-svelte-esm
. This demo is what is shown in the video preview.
Note: That I'm using the internal 0.2.0
pre-release code and likely there are modifications necessary to get this to work with 0.1.3
which likely has slightly different context callback data. Also note that the core v12 changes for renderContext
are not normalized yet. TJSDocument
will receive a facelift for the 0.2.0
release and quite likely a solution related to TJSDocumentProperty
will be available built-in to TJSDocument
I'd be glad to get some feedback and certainly can help adjust this code to the current 0.1.3
release, but it clearly shows what is possible.
Here is the video preview:
https://www.youtube.com/watch?v=PPW7opFlS90TyphonJS
YouTube
TJSDocumentProperty Prototype
This video shows off a new separate prototype implementation for Foundry document property accessor access with a connected TJSDocument instance. This separate class
TJSDocumentProperty
is a custom store that wraps a TJSDocument instance and buffers updates through the connected document. It can be bound as a store to input elements and provid...8 Replies
The
#handleDocUpdate
V12 shim uses context.renderData
to retrieve the new value, when renderData
only includes new stuff instead of the entire object.
Replacing context.renderData
with this.#doc?.get()
in that section (logged "#handleDocUpdate - D
") fixes the issue
As far as I have testedExactly.. Though the idea is to minimize the updates if the given property is not actually updated. Swapping out to always update regardless of property could be a problem with lots of properties. I did see the renderData problem just after I posted the code. I'll likely come up with a good solution when I get around to finishing
TJSDocument
improvements.yeah looking at it there is one more important thing to implement which is the removal of properties
Looking at
unsetFlag
its not so difficult I guess but I do need to make an explicit remove
function for itYou should make that call directly on the document.
basically
update({"-=key": null})
I'll be making a managed version of all of this similar to the reactive embedded collection API in TJSDocument. Probably will be able to get the backing TJSDocument instance from the property store, but the API is going to be something like this:
tjsDocument.accessors.get('flags.my-thing.foo');
You can pass around the TJSDocument and share property accessors across components.... I think this would have fixed everything since the beginning
It works now
just, plainly
:stress:
well at least its solved :clownWokeJoy: