Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[5.x] Add field actions modals #10833

Draft
wants to merge 22 commits into
base: 5.x
Choose a base branch
from

Conversation

jacksleight
Copy link
Contributor

@jacksleight jacksleight commented Sep 24, 2024

Summary

This PR builds upon #10352 and adds the ability to easily create confirmation/form modals from within the action run method, allowing you to prompt for user input before performing the rest of the action logic:

CleanShot.2024-09-24.at.18.33.14.mp4

The action for that looks like this:

Statamic.$actions.add('text-fieldtype', {
    title: 'Translate',
    run: async ({ value, update }) => {
        const { values: options, close } = await Statamic.$actions.modal({
            title: 'Translate',
            keepOpen: true,
            fields: {
                language: {
                    type: 'select',
                    display: 'Language',
                    instructions: 'Please select a language',
                    validate: 'required',
                    options: {
                        en: 'English',
                        es: 'Spanish',
                        fr: 'French',
                        de: 'German',
                        it: 'Italian',
                    }
                },
            }, 
        });
        const translated = await translationService({
            text: value,
            lang: options.language,
        });
        update(translated);
        close();
    },
});

The fields are passed to the backend to resolve a full blueprint for the form. The values are also passed to the backend for validation. The return data contains both pre-processed and raw values, as different use cases may need different types of values.

The keepOpen flag allows you to keep the modal and it's busy state visible after it's confirmed. This is useful if you then need to perform other long-running tasks and want to show some feedback to the user. Without it the modal just closes as normal on confirm.

Todo

  • Figure out non-field (confirmation only) return data
  • Figure out cancel return data (or throw?)
  • Fix dirty state handling
  • Should there be an automatic modal if fields are defined in the action?

@jacksleight jacksleight changed the title Add field actions modals [5.x] Add field actions modals Sep 24, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant