mattmilburn/strapi-plugin-preview-button

Add a hook to run before building the "live url"

kristijorgji opened this issue · 3 comments

Hi,

you have already one hook that runs before building the preview url which is used in the preview button.
This is working great (export const HOOK_BEFORE_BUILD_URL = 'plugin/preview-button/before-build-url';).

I would like to have another hook for the show button, when the content is published and you open the live view.

Why?
Because the existing config is not enough for dynamically locating the page where a particular cms element is used.

I want to open as live view something like example.com/api/locate?type=block&otherdatahere then the web locates where this block is uses and redirects 307 to that page.

The problem is that now you do not urlencode the query parameters properly and is not very flexible.

My current config:

                    {
                        uid: 'api::block.block',
                        published: {
                            url: `${env(
                                'SITE_URL',
                            )}/api/show?locale={locale}&type=block&container={container}&key={key}`,
                        },
                    },

if container is an url like magic-products/blabla it is not urlencoded and breaks.

Would be super easy if we have a hook to build ourselves the published url based on the entity content instead of being limited only to the statis plugins.ts config

Hi @kristijorgji If you're using the HOOK_BEFORE_BUILD_URL hook, are you not able to inspect data.publishedAt to determine if it is in draft or published mode? Also, the configs for draft and published modes already separate so checking the published state shouldn't be necessary.

As for encoding, it seems like we just need to update this line of code to use [key]: encodeURIComponent(val) which would produce this URL based on your example:

http://localhost:3000/api/show?locale=en&type=block&container=foo%2Fbar&key=3

@kristijorgji Actually after adding tests for encoded params, I've realized that I was relying on qs to encode the params and tests were failing because of that. I think I have a safe fix for this on the way 👍🏻

@kristijorgji I created PR 112 which should fix this issue 👍🏻 but please let me know if I can clarify anything else about your issue.