Improve interface to create and edit subevents (Z#23207890) (#5519)

* Use select2 item input in newly added quotas

* Make submit row sticky on really long forms

* Only show product settings that match quotas
This commit is contained in:
Raphael Michel
2025-10-15 09:13:05 +02:00
committed by GitHub
parent 6190b93f89
commit ebfcb6f7c8
6 changed files with 106 additions and 55 deletions

View File

@@ -26,6 +26,7 @@ $(document).on("pretix:bind-forms", function () {
}
}
// RRule editor
function rrule_preview() {
var ruleset = new rrule.RRuleSet();
@@ -121,7 +122,14 @@ $(document).on("pretix:bind-forms", function () {
});
}
}
$("#rrule-formset").on("change keydown keyup keypress dp.change", "input, select", function () {
rrule_preview();
});
rrule_preview();
$("#rrule-formset").on("formAdded", "div", function (event) {rrule_bind_form($(event.target)); });
// Timeslot editor
$("#subevent_add_many_slots_go").on("click", function () {
$("#time-formset [data-formset-form]").each(function () {
var tf = $(this).find("[name$=time_from]").val()
@@ -167,13 +175,45 @@ $(document).on("pretix:bind-forms", function () {
$(this).addClass("hidden");
});
$("#rrule-formset").on("change keydown keyup keypress dp.change", "input, select", function () {
rrule_preview();
});
rrule_preview();
// Hide config for products that are not for sale
function quota_form_handlers(el) {
// searchable_selection = True
el.find('[id^="id_quotas-"]').on("select2:select select2:unselect", () => {
update_item_visibility();
});
// searchable_selection = False
el.find('input[id^="id_quotas-"][id*=itemvars_]').on("change", () => {
update_item_visibility();
});
}
function update_item_visibility() {
const itemvars = [];
$("#rrule-formset").on("formAdded", "div", function (event) { rrule_bind_form($(event.target)); });
// searchable_selection = True
$("select[id^=id_quotas-][id$=-itemvars]").filter((idx, el) => {
return !$(el).closest('[data-formset-form]').is('[data-formset-form-deleted]');
}).each((_, e) => itemvars.push(...$(e).val()));
// searchable_selection = False
$("input[id^=id_quotas-][id*=itemvars_]:checked").filter((idx, el) => {
return !$(el).closest('[data-formset-form]').is('[data-formset-form-deleted]');
}).each((_, e) => itemvars.push($(e).val()));
$("div[data-itemvar]").each(function (idx, e) {
const el = $(e);
el.prop("hidden", !itemvars.includes(el.attr("data-itemvar")) && !el.find(".has-error, .alert-danger").length);
});
}
$('[data-formset-prefix="quotas"]').on("formDeleted", "div", () => {
update_item_visibility();
}).on("formAdded", "div", (event) => {
quota_form_handlers($(event.target));
update_item_visibility();
})
quota_form_handlers($("body"));
update_item_visibility();
// Auto-set name of check-in list
var $namef = $("input[id^=id_name]").first();
var lastValue = $namef.val();
$namef.change(function () {

View File

@@ -91,6 +91,12 @@ td > .form-group > .checkbox {
}
}
.submit-group-sticky {
position: sticky;
bottom: 0;
z-index: 100;
}
.panel .form-group:last-child {
margin-bottom: 0;
}