123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- $(function () {
- const getFormData = function (elem) {
- const form_data = $("#edit_agent, #new_agent").serializeObject();
- const attribute = $(elem).data("attribute");
- form_data["attribute"] = attribute;
- delete form_data["_method"];
- return form_data;
- };
- return (window.initializeFormCompletable = function () {
- let returnedResults = {};
- const completableDefaultOptions = (input) => ({
- results: [
- returnedResults[$(input).data("attribute")] || {
- text: "Options",
- children: [{ id: undefined, text: "loading ..." }],
- },
- {
- text: "Current",
- children: [{ id: $(input).val(), text: $(input).val() }],
- },
- {
- text: "Custom",
- children: [{ id: "manualInput", text: "manual input" }],
- },
- ],
- });
- $("input[role~=validatable], select[role~=validatable]").on(
- "change",
- (e) => {
- const form_data = getFormData(e.currentTarget);
- const form_group = $(e.currentTarget).closest(".form-group");
- return $.ajax("/agents/validate", {
- type: "POST",
- data: form_data,
- success: (data) => {
- form_group.addClass("has-feedback").removeClass("has-error");
- form_group.find("span").addClass("hidden");
- form_group.find(".glyphicon-ok").removeClass("hidden");
- return (returnedResults = {});
- },
- error: (data) => {
- form_group.addClass("has-feedback").addClass("has-error");
- form_group.find("span").addClass("hidden");
- form_group.find(".glyphicon-remove").removeClass("hidden");
- return (returnedResults = {});
- },
- });
- }
- );
- $("input[role~=validatable], select[role~=validatable]").trigger("change");
- $.each($("input[role~=completable]"), (i, input) =>
- $(input)
- .select2({
- data: () => completableDefaultOptions(input),
- })
- .on("change", function (e) {
- if (e.added && e.added.id === "manualInput") {
- $(e.currentTarget).select2("destroy");
- return $(e.currentTarget).val(e.removed.id);
- }
- })
- );
- const updateDropdownData = function (form_data, element, data) {
- returnedResults[form_data.attribute] = {
- text: "Options",
- children: data,
- };
- $(element).trigger("change");
- $("input[role~=completable]").off(
- "select2-opening",
- select2OpeningCallback
- );
- $(element).select2("open");
- return $("input[role~=completable]").on(
- "select2-opening",
- select2OpeningCallback
- );
- };
- var select2OpeningCallback = function (e) {
- const form_data = getFormData(e.currentTarget);
- if (
- returnedResults[form_data.attribute] &&
- !$(e.currentTarget).data("cacheResponse")
- ) {
- delete returnedResults[form_data.attribute];
- }
- if (returnedResults[form_data.attribute]) {
- return;
- }
- return $.ajax("/agents/complete", {
- type: "POST",
- data: form_data,
- success: (data) => {
- return updateDropdownData(form_data, e.currentTarget, data);
- },
- error: (data) => {
- return updateDropdownData(form_data, e.currentTarget, [
- { id: undefined, text: "Error loading data." },
- ]);
- },
- });
- };
- $("input[role~=completable]").on("select2-opening", select2OpeningCallback);
- return $("input[type=radio][role~=form-configurable]").change(function (e) {
- const input = $(e.currentTarget)
- .parents()
- .siblings(
- `input[data-attribute=${$(e.currentTarget).data("attribute")}]`
- );
- if ($(e.currentTarget).val() === "manual") {
- return input.removeClass("hidden");
- } else {
- input.val($(e.currentTarget).val());
- return input.addClass("hidden");
- }
- });
- });
- });
|