Crocoblock / suggestions

The suggestions for CrocoBlock project
195 stars 78 forks source link

JetFormBuilder v3.0.0 Beta #6408

Closed MjHead closed 1 year ago

MjHead commented 1 year ago

Hi,

We are almost getting ready to release JetFormBuilder v3.0.0 and we would like to ask you to help us test JetFormBuilder v3.0.0 Beta.

You can download beta version here https://github.com/Crocoblock/jetformbuilder/releases/tag/3.0.0-beta

Please note that is a beta version, not stable release, so its not ready to use on production websites!

:one: Refactoring

The refactoring touches upon only the front-end script, which used to contain 80% of the logic visible when interacting with the form on a public page.

Why was refactoring necessary?

We've reached a turning point where it's become too hard to maintain the code, and scaling makes it only worse. We stumbled upon this issue when we started working on new features for this release and saw there was no other way but to rewrite everything.

What is the result?

Now the code will have a more structured look, which makes it easier to expand it further. It is truly a big step forward, which leads the way to completely new features and unlimited possibilities. As to drawbacks, the size of the initial scripts turned out to be the only one. We solved this issue on our end by using compression (minification) and splitting scripts into separate components. Now, only the minimum required number of scripts will be loaded for each form. During the refactoring, we've also eliminated some fundamental problems, which are usually difficult to find without looking into the original script.

:two: Reactivity

It can hardly be called a feature for the end user, but I hope it will be a nice addition for those doing JavaScript form personalization.

In short, this is a new approach (for JetFormBuilder) to entering and reading data to/from form fields. Based on reactivity, we've managed to improve the working mechanics for Calculated Field and Conditional Block. For more detail, please refer to Understanding-reactivity.

:three: Calculate Everything

Since its inception, JetFormBuilder supported only numeric operations in the Calculated Field block, meaning the result of processing the initial value was rigidly converted into a number. Now we can change the returned value format and concatenate strings.

Additionally, compared to macros for the Send Email action, we couldn't use filters before to change the returned field value.

Since v3.0, we actually can, and not just using filters. You should get familiar with concepts such as attributes and external macros.

Having learned how to combine filters, attributes, and macros, you will be able to do the following:

:four: Conditionality Reborn

image

In the new version, you will see not only new operators for setting up conditional logic but also the so-called "OR" operator.

These are the new operators:

A cherry on top is the ability to remove HTML elements located inside a Conditional Block. This feature makes it possible to completely ignore some form field, even if it is a required one. As a bonus, Hidden Field values will not be sent in the form request.

:five: Render States

Imagine a registration and login form. I bet most of you thought about two forms. That's not the case here. Using the new Render States logic, you can implement such functionality within a single form.

How it works

Each state has a condition under which it can be added to the list of triggered states. By default, there will be just one state on this list — DEFAULT.STATE.

During the form output, a Hidden Field containing this list of states is added to its body. When submitting the form, after the DEFAULT.PROCESS event is executed, the plugin runs a cycle to trigger the event having the render state's name and the prefix "ON." As a result, it will generate an event called ON.DEFAULT.STATE for the DEFAULT.STATE state.

How to work with it?

There will be no additional render states in JetFormBuilder itself; you have to add them yourself. To do this, you need to add a Conditional Block containing the "Is render state" statement to the form.

image

Create an identical Conditional Block, but make sure the first Render State contains DEFAULT.STATE, and the second contains the state you added manually by clicking on the plus sign.

To switch states, you can use the Action Button with the corresponding Action Type — "Change Render State".

:six: Live Validation

Prior to this release, we had just one "legitimate" method of field value validation — the Call Hook action. However, it's got several disadvantages:

Therefore, the new JetFormBuilder version offers you a completely new logic and API to it, which allows adding or even writing rules according to which the field values should be checked.

How it works

To enable live validation, switch from "Default" to "Advanced" in the Validation section. Right after, you will be able to customize error message texts. Next, add any field type with the "Is Required" option enabled. When trying to submit an empty form, you will see an error message under this field.

Advanced rules

So far, there are only six of them:

image

Each of them can be applied in any number to a Text Field or Textarea Field. I'll skip the first five rules and focus on the sixth instead.

Server-Side validation

image

This validation type stands apart because the verification itself is performed on the server.

How it works

The checking is performed when the focus is lost. The form sends a request to the server via the REST API endpoint, which conducts the checking and returns the result. Such an operation can take 1-2 seconds, depending on the configuration and server equipment's capacity.

As long as this request is in progress, the client cannot submit the form.

Custom Server-Side callback

In addition, you will be able to apply any PHP function to check the value. Implementation principles and instructions are provided in the plugin UI.

Please leave your feedback and any found bugs or issues in the comments below

Lonsdale201 commented 1 year ago

"We are almost getting ready to release JetEngine v3.1.0 and we would like to ask you to help us test JetEngine v3.1.0 Beta."

Lonsdale201 commented 1 year ago

@girafffee I started updating my larger request and added the New and Old Style markers to make it more transapreneurial. When I have time, I'll start refactoring the code one by one. So far I've only got as far as the textarea counter, I like that this can now be implemented with a calcualted field and macro combo. Blessings for the New Validation. I'm used to working with jQuery validate, not yet with jfb, but I've worked with it in Epro form. And I was thinking about writing some for JFB and put the request up, but I don't need it :P

So far, everything is great in the beta, but I've only done a few tight tests. :)

cwinkler8 commented 1 year ago

The calculated value argument in the query are no longer working in the generate dynamically option for select fields.

image
girafffee commented 1 year ago

@cwinkler8 Thanks, we'll check it out

DosenOnline commented 1 year ago

I use version 2.1.11, I set the field with a default value, and after update, the value did not change (still from the default value, not from Preset Settings ).

The version 3 is this value set from Preset if the default value exists?

girafffee commented 1 year ago

Hi @DosenOnline I don't quite understand your problem. Could you describe it in more detail and I would also appreciate it if you could add screenshots

DosenOnline commented 1 year ago

Hi @DosenOnline I don't quite understand your problem. Could you describe it in more detail and I would also appreciate it if you could add screenshots

Sorry I explained incompletely. The point is if I set the fields with default values, these Preset Settings don't work. The values still load from default, not preset settings. Screenshot_425

girafffee commented 1 year ago

@DosenOnline Yes, Default Value has an advantage over Preset, this logic was started on the first major release, if I remember correctly. Be that as it may, now this logic can be changed if you apply Dynamic Value.

Follow these steps:

  1. Add a new Dynamic Value in the Value section of the block settings
  2. In the "Value to Set" field, enter the value that was in the Default Value.
  3. In the "Apply Type" field, you should select the Once option so that this value is applied only once when the conditions are met.
  4. Add a new condition that will also check the field itself for the presence of some value.

image image

Thus, the "text_field" field will have the value "value if preset is empty" if the Preset value for the same field is empty. I hope I understood correctly what you need to do.

However, I must warn you that there is a side effect in my proposed solution.

If we are talking about a text field, or something else where you can clear the value, then maybe this solution can work as follows.

If the value from the preset is not empty, Dynamic Value will not work. And only after clearing the field manually by the user - the dynamic value will be applied.

tizum commented 1 year ago

I would like to suggest an easy way to get a response after sending a webhook along with the submit, I fill out a form, send it to the webhook and the backend does all the processing, and responds with the result, it works perfectly, but I can't display this result on the screen when submitting.

girafffee commented 1 year ago

@tizum Can you tell in more detail what you want to get as a result? In what form do you expect to see the result?

Lonsdale201 commented 1 year ago

Are the logic conditions supported in version 3.0 if you need to return a taxonomy-based value? I mean, we have a select that shows the taxonomy terms values, and we display another field based on the selected value - so using the logical conditions.

tizum commented 1 year ago

Can you tell in more detail what you want to get as a result? In what form do you expect to see the result?

Of course, I'll try to describe it as best as I can.

With the form I can send any information to the backend using webhook, and use this data in an automation platform such as zapier, make or n8n.

in my case i use n8n.

let's say that the form has, for example, name, email and telephone and an open question, in the example the field is like message.

with this data in my backend I can, for example, search if this email already exists in our database, if not I can register it on another site, consult your question in another api for example, in this case I use chatgpt to search information about the question of the user who just filled out the form, and after sending it to the chatgpt open ai api, I get the answer and return it to the form through a response to the webhook, I can also do any other thing thing with the information of course, but here it's just about the return on the website form.

this return can come in several ways, it can be a json, it can be a text, and also binary, for example returning a photo generated in midjorney.

let's say one of the jetformbuilder fields is the prompt.

when submitting the form, my backend processes it while the form waits for a return from the webhook if the submission was successful, for example, I can return a code 200 and a response, or a code 201 that was successful and created something in the system for example , following the http protocol.

today I can do all this, I just can't print the answer in the front end where the form is.

In the example below, I'm going to use postman and send it to my webhook with the same form parameters and the same endpoint, it will return the answer I want exactly.

Here it's all simple right? But getting the answer I want to make it very complex, and the conditions will all come from the form, it already works if I assemble it, but I can't show the result on the screen.

Postman image

Backend n8n image image

girafffee commented 1 year ago

Here it's all simple right?

It's an interesting system, but it's not easy at all :)

I understand from your report that you need to get a response from a request to n8n. We will get the answer, for example, we will write plain text in some field using this hook. But what to do with him next?

The easiest way is to make a redirect to another page with a GET parameter in which there will be a response from AI. A better result can be achieved with the help of plugins designed for data output, such as JetEngine and its Dynamic Visibility.

If you want to build a similar system (as on chat.openai) with a form that will work as a chat, then you will have to make a custom solution. Because currently the role of JetFormBuilder can only be to receive a request from the client, perform certain actions with this request and give a short message about the result of the work performed.

Maybe we will do something for your case in the future, but now we have very few such cases.

girafffee commented 1 year ago

@Lonsdale201

Are the logic conditions supported in version 3.0 if you need to return a taxonomy-based value? I mean, we have a select that shows the taxonomy terms values, and we display another field based on the selected value - so using the logical conditions.

I understand that you are asking about loading values ​​via AJAX or REST API depending on the value of another field?

Maybe Hierarchical Select will suit you? If we are talking about taxonomies. We have similar logic only in this addon, and there is no universal solution for other fields yet.

Although we have already thought a lot about this, and I would appreciate it if you could share your case

tizum commented 1 year ago

Aqui é tudo simples né?

É um sistema interessante, mas não é nada fácil :)

Entendo pelo seu relatório que você precisa obter uma resposta de uma solicitação para n8n. Obteremos uma resposta, por exemplo, escreveremos texto simples em algum campo usando este gancho . Mas o que fazer com ele a seguir?

A maneira mais fácil é fazer um redirecionamento para outra página com um parâmetro GET na qual haverá uma resposta do AI. Um melhor resultado pode ser alcançado com a ajuda de plugins projetados para saída de dados, como o JetEngine e sua Visibilidade Dinâmica.

Se você quiser construir um sistema semelhante (como no chat.openai) com um formulário que funcione como um chat, você terá que fazer uma solução personalizada. Como atualmente a função do JetFormBuilder pode ser apenas receber uma solicitação do cliente, executar determinadas ações com essa solicitação e enviar uma mensagem curta sobre o resultado do trabalho realizado.

Talvez façamos algo pelo seu caso no futuro, mas agora temos muito poucos desses casos.

very cool, thanks for the feedback!

What I need to build is simple, just the part of the return that I need to come back on the same page, if the person wants to do another search, they do it again...

I'm going to look at these hooks, I hope I can do something, it's simply getting the response and printing it to an element on the front, the problem is just finding a way to bring this return, if I manage to get this response, on the front I'll manage with some javascript or jquery.

there could be an example there in the hook, with something already formatted, apparently.

cwinkler8 commented 1 year ago

@girafffee

I understand that you are asking about loading values ​​via AJAX or REST API depending on the value of another field?

Maybe Hierarchical Select will suit you? If we are talking about taxonomies. We have similar logic only in this addon, and there is no universal solution for other fields yet.

Although we have already thought a lot about this, and I would appreciate it if you could share your case

I'm currently working with support on a use case that would greatly benefit from this. I have an Event registration form that allows a user to register multiple participants who are stored in a CPT. I have a listing on the Event page for the related participants and when I click on a participant I'd like to have their data loaded into the form along with the Event information. On submit, this form will push the combined data into an event registration CCT. Apparently there is a bug preventing this workflow, so I've also attempted to load the related participants into a select field using the same query I have on the page. Happy to share more details or discuss if it's helpful. Thanks for considering!

girafffee commented 1 year ago

@tizum Here is an example of how to save an answer

  1. Add the code (you will have to modify it a little)

    add_action(
    'jet-form-builder/action/webhook/response',
    function ( array $response, array $settings ) {
        // Checking if we are processing the same request
        if ( false === stripos( $settings['webhook_url'], 'example.domain.com/path' ) ) {
            return;
        }
    
        /**
         * We store in an array of fields, where 'chat_gpt_answer' can be an arbitrary term,
         * but must match the hidden field that you added in the form itself
         */
        jet_fb_action_handler()->add_request(
            array(
                'chat_gpt_answer' => $response['path']['to']['answer'] ?? '',
            )
        );
    }
    );
  2. Add a hidden field to manipulate the answer in the form. image

  3. Add Redirect to Page action. image

girafffee commented 1 year ago

@cwinkler8 thanks for the details, we'll take your case into consideration when we get to the implementation of the logic with subloading the data in the form.

If you do not resort to customization, you will have to divide your large form into different ones that will be on separate pages

torsten3d commented 1 year ago

Hi, i'm not often work with GutHub. Hope this is the right way to report a bug. I have to stat, that's also the first time i work with JetForms, but i wantedt to use the newest version for not having problems after V3 is final.

So, first of all, i have problems styling the form. It doesn't respond to the JetStyleManager in some terms, Even if some elements like a background color are applied in the form editor, it isn't visible in the frontend.

image

https://neu.werbemittel-suehr.de/lamy-safari-kugelschreiber-druckbleistift-fuellhalter-tintenroller/ (Have to click: "Anfrage"-Button)

At the moment i styled with my style.css. (Theme Blocksy Pro)

And for some unknown reason, some elements are based on "User Agent Sytelesheet and have a "display:block" which disables the flexbox model used later in the Jetforms style.

image

Additionally some noob Question: Is it possible to add a class to an input, if the field is filled? My former Plugin uses a small javascript for that.

document.addEventListener("kaliFormProcessConstructed", function (event) { [...event.detail.formElements].forEach(function (element) { if (element.type === "text" || element.type === "textarea") { var label = element.parentNode.querySelector("label"); if(element.value !== ''){ label.classList.add("input-filled"); }

  element.addEventListener("blur", function () {
    element.value === '' ? label.classList.remove("input-filled") : label.classList.add("input-filled");
  });
}

}); });`

Best Torsten

girafffee commented 1 year ago

@torsten3d thanks for reporting!

JuanCar29 commented 1 year ago

Hello It would be nice if in the numeric fields the minimum and maximum value could be filled with dynamic values Captura de pantalla 2023-01-30 111753

girafffee commented 1 year ago

@torsten3d

Is it possible to add a class to an input, if the field is filled?

This is an interesting idea, and the easiest way to implement it you already have. Another option is to add a new type of function to the Conditional Block. Later, instructions on how to do this will appear on the JetFormBuilder wiki pages.

torsten3d commented 1 year ago

@girafffee

I struggle to impelement the Code from Kaliforms, cause i think at least "document.addEventListener("kaliFormProcessConstructed", ..." has to be replaced with the JetForm equivalent of this Event?


Later, instructions on how to do this will appear on the JetFormBuilder wiki pages.

I don't know if a conditional Block is the right thing. As you might have seen i use the information to apply the same CSS for the label like in Focus state (like here: https://www.cstgmbh.de/kontakt/ ). This affects all inputs, except Selectfields, Radiofields, Checkboxes and so on. But you have the bigger image of that indeed! :)


What i also missed by creating the form was the possibility to add a class for the input wrapper. It only applied to the input itself. I have a custom class for each wrapper of course, but it's hard or to give some Wrappers across the form the same class and apply CSS to them. If the custom class will be apllied to the wrapper instead of the input, the input still is adresseable very easy, but the wrapper too. Or maybe have a separate css-class for the wrapper for mor complex situations.

image

Best Torsten

girafffee commented 1 year ago

@torsten3d

has to be replaced with the JetForm equivalent of this Event?

Yes, you are right, the form builder has its own events, or "hooks". Here is an example of how you can refactor your code

window?.JetPlugins?.hooks?.addAction(
    'jet.fb.input.makeReactive',
    'jet-form-builder/label-css',
    /**
     * @param input {InputData}
     */
    function ( input ) {
        const [ node ] = input.nodes;

        if ( ![ 'text', 'textarea' ].includes( node?.type ) ) {
            return;
        }

        const labelNode = node.closest(
            '.jet-form-builder-row',
        ).querySelector(
            '.jet-form-builder__label',
        );

        const addClassForLabel = () => {
            labelNode.classList.toggle(
                'input-filled',
                input.value.current?.length,
            );
        };

        addClassForLabel();
        node.addEventListener( 'blur', addClassForLabel );
    },
);

The jet.fb.input.makeReactive action will be executed when each field is initialized. This happens when the page is loaded, and when a new element is added to the repeater.

input.value.current - it is a reactive variable that stores the value of the field. More details on how it works are described here https://github.com/Crocoblock/jetformbuilder/wiki/Understanding-reactivity

girafffee commented 1 year ago

@torsten3d

possibility to add a class for the input wrapper

Yes, it should be made possible from our side. But for now, you can transform the text field so that it is inside the Group block

image

And add a class to this block

torsten3d commented 1 year ago

@girafffee Yes, it should be made possible from our side. But for now, you can transform the text field so that it is inside the Group block

Ah OK, that's a good workaround indeed. But to safe DOM and have a less cluttered backend a direct way for later should would be welcome :)

girafffee commented 1 year ago

@JuanCar29

Hello It would be nice if in the numeric fields the minimum and maximum value could be filled with dynamic values

OK, we'll do it.

davidkleinm commented 1 year ago

Hi guys. Do you know if conditional blocks are working fine? because since im trying to use this beta version all my conditionals blocks are not working. Maybe there is a new way to setup. Pls some help.

Thanks!

torsten3d commented 1 year ago

@davidkleinm I have a conditional Block and it is working.

girafffee commented 1 year ago

Hi @davidkleinm Maybe you have browser console errors on the frontend-page? If so, it would be great if you could add this code to your wp-config.php

define( 'SCRIPT_DEBUG', true );

and take a screenshot of those errors.

torsten3d commented 1 year ago

@girafffee Sorry, but i don't get the script working:

`window.JetPlugins.hooks.addAction( 'jet.fb.input.makeReactive', 'jet-form-builder/label-css', /**

Uncaught TypeError: Cannot read properties of undefined (reading 'hooks') Do i have to initialize that hook before or ist the code incorrect? The examples don't bring mo to the right path, but i have to state that my JS knowledge is less then basic. Just enough for tweaking some given code if it is simple.

girafffee commented 1 year ago

@torsten3d The problem is that your code is executed before the scripts of the JetFormBuilder itself. This can be solved in several ways. However, the easiest way is to slightly change the code to the following:

document.addEventListener( 'DOMContentLoaded', () => {
    if ( !window.JetPlugins ) {
        return;
    }
    window.JetPlugins.hooks.addAction(
        'jet.fb.input.makeReactive',
        'jet-form-builder/label-css',
        /**
         * @param input {InputData}
         */
        function ( input ) {
            const [ node ] = input.nodes;

            if ( ![ 'text', 'textarea' ].includes( node.type ) ) {
                return;
            }

            const labelNode = node.closest(
                '.jet-form-builder-row',
            ).querySelector(
                '.jet-form-builder__label',
            );

            const addClassForLabel = () => {
                labelNode.classList.toggle(
                    'input-filled',
                    input.value.current.length,
                );
            };

            addClassForLabel();
            node.addEventListener( 'blur', addClassForLabel );
        },
    );
} );
torsten3d commented 1 year ago

Hi @girafffee your explanation makes sense and is a goof advice or further coding on my site. The result works like a charm. Thanks for your fast and patient help! :)

cwinkler8 commented 1 year ago

Converting text fields to hidden fields is changing values to postid when used in calculated field...

image

image

image

image

image

cwinkler8 commented 1 year ago

Converting text fields to hidden fields is changing values to postid when used in calculated field...

Actually, I just discovered the issue. After converting a field to hidden it automatically sets the hidden field value to 'Current Post ID'. I changed that to '--' and it used the Default Value setting instead. I might suggest changing this to set the Hidden Field Value to "--" since the options list does not directly map to other field options.

cwinkler8 commented 1 year ago

Is it possible to apply callbacks to the preset values to change the format of a date?

girafffee commented 1 year ago

@cwinkler8 Now I understand. It works like this because the hidden field has the following settings by default: Field Value -> Current Post ID. Thanks for the details, this small fix will be in the release.

Lonsdale201 commented 1 year ago

@Lonsdale201

Are the logic conditions supported in version 3.0 if you need to return a taxonomy-based value? I mean, we have a select that shows the taxonomy terms values, and we display another field based on the selected value - so using the logical conditions.

I understand that you are asking about loading values ​​via AJAX or REST API depending on the value of another field?

Maybe Hierarchical Select will suit you? If we are talking about taxonomies. We have similar logic only in this addon, and there is no universal solution for other fields yet.

Although we have already thought a lot about this, and I would appreciate it if you could share your case

Maybe I worded it wrong. So, there is a select field that displays taxonomy terms values. And at the moment we can't apply logical conditions when it comes to terms. So I can't currently do that if I have a Category whose categories (terms) are displayed by a select field, and then I have another field that is only displayed if the select field is selected with, say, terms B. In 3.0 will this now be solved, or is it still not possible to use the logical condition with Taxonomy terms?

girafffee commented 1 year ago

@cwinkler8

Is it possible to apply callbacks to the preset values to change the format of a date?

This is currently possible with a special code. But it won't work at all if you use a Date field. It gives and receives values ​​in only one yyyy-mm-dd format. The same applies to the Datetime field, except that there is a different format, but it is also unchanged. Maybe in the future we'll make a filter for the Calculated Field so that a formatted date can be returned from the Date Field, but there are currently no such plans.

girafffee commented 1 year ago

@Lonsdale201 You can apply a conditional block for this. However, you will need to enter the IDs of your terms in the Conditional Block manually.

For example:

image

There is no other way yet, if I understand you correctly

Lonsdale201 commented 1 year ago

@Lonsdale201 You can apply a conditional block for this. However, you will need to enter the IDs of your terms in the Conditional Block manually.

For example:

image

There is no other way yet, if I understand you correctly

Ahhh, no I didn't know that, I always tried the slug, but I should have thought it could be in ID form, thanks :P

cwinkler8 commented 1 year ago

@cwinkler8

Is it possible to apply callbacks to the preset values to change the format of a date?

This is currently possible with a special code. But it won't work at all if you use a Date field. It gives and receives values ​​in only one yyyy-mm-dd format. The same applies to the Datetime field, except that there is a different format, but it is also unchanged. Maybe in the future we'll make a filter for the Calculated Field so that a formatted date can be returned from the Date Field, but there are currently no such plans.

@girafffee I was actually able to get it to work by first retrieving the dates into a text field, convert that to a hidden field, then used JS to format the date in the conditional field. It's a little convoluted, but it's working. Would love to see options for 'read-only' fields and date formatting added to the UX.

( new Date( '%FIELD::swim-test-date%').getMonth() + 1 ).toString().padStart( 2, '0' ) + '/' + ( new Date( '%FIELD::swim-test-date%' ).getDate() + 1).toString().padStart( 2, '0' ) + '/' + (new Date( '%FIELD::swim-test-date%' ).getFullYear() + 1)

image

loucasl commented 1 year ago

I'm testing out the beta on a form, and the submit button isn't working for some reason. I've tried testing both AJAX and page reload but nothing happens when you click the button, and also no errors in the console.

If you just go through the form and click any option and fill in any values, and try to click submit, you'll see what I mean: https://staging19.luckyelement.ca/real-estate-booking/

It may be worth mentioning that I have the JetFormBuilder WooCommerce Cart & Checkout Action installed, but I have tried disabling the action and the issue persists.

https://user-images.githubusercontent.com/35241778/216368443-abe899d1-6d2b-43fa-b23e-879aa3fac924.mov

girafffee commented 1 year ago

Hi @loucasl Thanks for reporting. This is due to the fact that the form builder did not skip the required fields that were in the conditional block that was hidden using css. I just made the fix, now it should work as before.

To check this, you can manually download the plugin from the JetFormBuilder repository, or wait for the official release

cwinkler8 commented 1 year ago

Is it possible to update the "Add to Cart & Redirect" action to make the redirect optional? There is an option setting in WooCommerce that allows "Redirect to the cart page after successful addition" to be disabled, but it is not honored by the action.

image

loucasl commented 1 year ago

Hi @loucasl Thanks for reporting. This is due to the fact that the form builder did not skip the required fields that were in the conditional block that was hidden using css. I just made the fix, now it should work as before.

To check this, you can manually download the plugin from the JetFormBuilder repository, or wait for the official release

Perfect this did the trick!

One more thing to report, I have a global macro at the end of the same form that pulls a $ amount from a hidden calculated field above it. The calculated field setting is set to show two decimals, however on the frontend, the decimal count is inconsistent.

Backend Screenshot 2023-02-02 at 2 53 53 PM
girafffee commented 1 year ago

@loucasl Thanks again :) I've already committed the patch to the repository

girafffee commented 1 year ago

@cwinkler8 We plan to expand the capabilities of this addon and most likely we will also implement an optional redirect

cwinkler8 commented 1 year ago

Could you expand the presets to return "Display Name" as one of the User Fields? Currently, the only way I've found to retrieve this is through a current user query, but please let me know if I'm missing something. Thanks!

image

cwinkler8 commented 1 year ago

One suggestion to improve the UX for "Insert/Update CCT" and "Insert/Update Post" actions... Change the fields map to list the CCT or CPT fields first, then the select options should be populated with the fields from the form. The current process makes it difficult to see which fields you have already mapped, which is made more difficult when multiple fields are present in the form for calculations and conditional processes. Switching the order would make it very easy to go down the list and map the required fields in the CPT/CCT and visually see what is complete. Thanks!

image