diff --git a/web/src/settings_profile_fields.js b/web/src/settings_profile_fields.js index c8b0632b6d..42fa2cb89d 100644 --- a/web/src/settings_profile_fields.js +++ b/web/src/settings_profile_fields.js @@ -167,7 +167,11 @@ export function get_value_for_new_option(container) { } function create_choice_row(container) { - const context = {text: "", value: get_value_for_new_option(container)}; + const context = { + text: "", + value: get_value_for_new_option(container), + new_empty_choice_row: true, + }; const row = render_settings_profile_field_choice(context); $(container).append(row); } @@ -180,7 +184,6 @@ function clear_form_data() { // Clear data from select field form $("#profile_field_choices").empty(); create_choice_row($("#profile_field_choices")); - update_choice_delete_btn($("#profile_field_choices"), false); $("#profile_field_choices_row").hide(); // Clear external account field form $("#custom_field_url_pattern").val(""); @@ -318,20 +321,40 @@ function open_custom_profile_field_form_modal() { }); } +function disable_submit_btn_if_empty_choices() { + const $choice_text_rows = $("#edit-custom-profile-field-form-modal .choice-row").find( + ".modal_text_input", + ); + let non_empty_choice_present = false; + for (const text_row of $choice_text_rows) { + if ($(text_row).val() !== "") { + non_empty_choice_present = true; + break; + } + } + $("#edit-custom-profile-field-form-modal .dialog_submit_button").prop( + "disabled", + !non_empty_choice_present, + ); +} + function add_choice_row(e) { - if ($(e.target).parent().next().hasClass("choice-row")) { + disable_submit_btn_if_empty_choices(); + const $curr_choice_row = $(e.target).parent(); + if ($curr_choice_row.next().hasClass("choice-row")) { return; } + // Display delete buttons for all existing choices before creating the new row, + // which will not have the delete button so that there is at least one option present. + $curr_choice_row.find("button.delete-choice").show(); const choices_div = e.delegateTarget; - update_choice_delete_btn($(choices_div), true); create_choice_row(choices_div); } function delete_choice_row(e) { const $row = $(e.currentTarget).parent(); - const $container = $row.parent(); $row.remove(); - update_choice_delete_btn($container, false); + disable_submit_btn_if_empty_choices(); } function show_modal_for_deleting_options(field, deleted_values, update_profile_field) { @@ -411,7 +434,6 @@ function set_up_select_field_edit_form($profile_field_form, field_data) { // Add blank choice at last create_choice_row($choice_list); - update_choice_delete_btn($choice_list, false); Sortable.create($choice_list[0], { onUpdate() {}, filter: "input", @@ -674,7 +696,6 @@ export function do_populate_profile_fields(profile_fields_data) { function set_up_select_field() { create_choice_row("#profile_field_choices"); - update_choice_delete_btn($("#profile_field_choices"), false); if (page_params.is_admin) { const choice_list = $("#profile_field_choices")[0]; diff --git a/web/templates/settings/profile_field_choice.hbs b/web/templates/settings/profile_field_choice.hbs index ab6e956c55..dd7498297f 100644 --- a/web/templates/settings/profile_field_choice.hbs +++ b/web/templates/settings/profile_field_choice.hbs @@ -3,7 +3,7 @@ -