FleetCart/Modules/Product/Resources/assets/admin/js/create.js
2023-12-03 14:07:47 +00:00

154 lines
4.4 KiB
JavaScript

import Vue from "vue";
import ProductMixin from "./mixins/ProductMixin";
import Errors from "@admin/js/Errors";
import { generateSlug } from "@admin/js/functions";
Vue.prototype.route = route;
new Vue({
el: "#app",
mixins: [ProductMixin],
data: {
formSubmissionType: null,
form: {
brand_id: "",
tax_class_id: "",
is_active: true,
media: [],
is_virtual: false,
manage_stock: 0,
in_stock: 1,
special_price_type: "fixed",
meta: {},
attributes: [],
downloads: [],
variations: [],
variants: [],
options: [],
slug: null,
},
errors: new Errors(),
selectizeConfig: {
plugins: ["remove_button"],
},
searchableSelectizeConfig: {},
categoriesSelectizeConfig: {
plugins: ["remove_button"],
onItemAdd(value) {
this.getItem(value)[0].innerHTML = this.getItem(
value
)[0].innerHTML.replace(/¦––\s/g, "");
},
},
flatPickrConfig: {
mode: "single",
enableTime: true,
altInput: true,
},
},
created() {
this.setSearchableSelectizeConfig();
},
methods: {
setProductSlug(value) {
this.form.slug = generateSlug(value);
},
setFormDefaultData() {
this.form = {
brand_id: "",
tax_class_id: "",
is_active: true,
media: [],
is_virtual: false,
manage_stock: 0,
in_stock: 1,
special_price_type: "fixed",
meta: {},
attributes: [],
downloads: [],
variations: [],
variants: [],
options: [],
slug: null,
};
},
resetForm() {
this.setFormDefaultData();
tinyMCE.get("description").setContent("");
this.resetBulkEditVariantFields();
this.focusField({
selector: "#name",
});
},
submit({ submissionType }) {
this.formSubmissionType = submissionType;
$.ajax({
type: "POST",
url: route("admin.products.store", {
...((submissionType === "save_and_edit" ||
submissionType === "save_and_exit") && {
exit_flash: true,
}),
}),
data: this.transformData(this.form),
dataType: "json",
success: ({ message, product_id }) => {
if (submissionType === "save_and_edit") {
location.href = route(
"admin.products.edit",
product_id
);
return;
}
if (submissionType === "save_and_exit") {
location.href = route("admin.products.index");
return;
}
toaster(message, {
type: "success",
});
this.resetForm();
},
})
.catch((error) => {
this.formSubmissionType = null;
toaster(error.responseJSON.message, {
type: "default",
});
if (error.status === 422) {
this.errors.reset();
this.errors.record(error.responseJSON.errors);
this.scrollToFirstErrorField(this.$refs.form.elements);
return;
}
if (this.hasAnyVariant) {
this.regenerateVariationsAndVariantsUid();
}
})
.always(() => {
if (submissionType === "save") {
this.formSubmissionType = null;
}
});
},
},
});