Hello. When a user edits a collection, I need to know if there is an edit flag or something that will tell me that the user is editing the collection. The reason being, I need to remove a tag when a user is editing the collection. I did see
views.Edit
in the documentation:
https://payloadcms.com/docs/admin/components#collections, but as I understand
views.Edit
only passes in components, which isn't what I need. I need to be able to pass in a function when the user is inside the collection editing. Any ideas?
Thanks.
The reason being, I need to remove a tag when a user is editing the collection.
Do you mind expanding a bit on what you're trying to achieve?
For example:
- when you say "remove a tag", do you mean "update a relationship field value", or is it a custom component thing?
- when you say "is editing the collection", do you mean "the user has changed a value in the database", or "the user in on the page"?
Having more context would help us help you find the best solution. 😊
Hey @tinouti . Sure thing!
- remove tag: When a user is inside of the collection view.Edit page, if the collection is being edited, (data is being updated and user has changed value), I need to remove any tags related to prod for security reasons.
- editing collection: user is inside the view.Edit page of that collection (data is being updated and user has changed value).
Hope this gives you a bit more context. Ty!
So in general, I need to be able to detect if the user has clicked inside of the collection to edit.
I need to run a function to remove a specific tag if the user has made any changes i.e. data has been updated.
If no data has been updated, function does nothing.
you could build a custom
Provider
that uses React Router to monitor the route of the user
and if they navigate to the route(s) in question, you could fire off callbacks
https://payloadcms.com/docs/admin/components#custom-providers
thanks jm! will take a look
I was trying to use the beforeOperation hook to see if url includes the collection id. If it does, it would mean they are in the edit page. Does that sound correct? Also How would I update the data? Would a call to /api/collectionName/id and changing that data make an update?
If this doesn't work I'll definitely go with the context solution, but the question would still remain. How would I update the data to reflect changes to server and client? ie remove a specific tag in the data so that the client will see that that tag is no longer there before submitting any changes.
you can definitely look at the
req
to determine if the update is coming from the admin UI.... but that's not really a pattern that we see often. I'm sure you have your reasons, but does it make a difference if the update comes from admin UI, or straight form REST / GraphQL? Something to consider
and if you are going to look at the
req
from a hook, could you use the
beforeChange
hook instead of
beforeOperation
?
the reason i'm asking about which hook you want to use is because to update the data in a
beforeOperation
hook, you would need to parse different argument properties based on which type of operation you are looking at. If it's
read
, you will not have
data
or
doc
available, because it's
before the operation. If it was
update
or
create
, then you would have the
data
argument, which you could then simply transform
Thanks @jmikrut! I am going to go with the custom Provider approach. What you said does make sense as I do need the data argument and was wondering how to get it. So I'll create a custom provider that uses React Router to monitor the route of the user. And when they navigate to said route, I will trigger my functions as needed. Then I can use the beforeChange hook to do what I need. Does that sound about right? Thanks for the help!
100%
Star
Discord
online
Get help straight from the Payload team with an Enterprise License.