Files
anahita-front/initialize/product.js
T
mohadese namavar c1762c0083 apply debug changes
2024-07-07 14:16:58 +04:30

303 lines
7.7 KiB
JavaScript

import ProductDialogReminder from "../components/product/dialog/Reminder.vue";
import ProductDialogMenu from "../components/product/dialog/Menu.vue";
import ProductDialogShare from "../components/product/dialog/Share.vue";
import ProductDialogLineChart from "../components/product/dialog/LineChart.vue";
export default (data) => {
const { dialog, t } = inject("service");
const fevorites = useFavoritesStore();
const cart = useCartStore();
const token = useCookie("token");
const router = useRouter();
const confg = reactive({
btns: {
report: {
props: {
label: t("reportIncorrectSpecs"),
icon: "isax isax-info-circle",
severity: "secondary",
iconPos: "right",
rounded: true,
text: true,
},
},
arrows: [
{ icon: "isax isax-arrow-right-3", rounded: true, swiper: true },
{ icon: "isax isax-arrow-left-2", rounded: true, swiper: true },
],
close: {
props: {
icon: "isax isax-close-circle",
severity: "secondary",
rounded: true,
text: true,
},
},
shares: {
copyLink: {
props: {
label: t("copyLink"),
icon: "isax isax-document-copy",
severity: "secondary",
iconPos: "right",
outlined: true,
},
},
telegram: {
props: {
label: t("telegram"),
icon: "isax isax-send-2",
severity: "primary",
iconPos: "right",
},
},
whatsapp: {
props: {
label: t("whatsapp"),
icon: "isax isax-call4",
severity: "success",
iconPos: "right",
},
},
},
submit: {
props: {
label: t("submitComment"),
outlined: true,
},
},
sort: {
createdAt: {
props: {
label: t("newest"),
severity: "secondary",
text: true,
},
},
point: {
props: {
label: t("mostUseful"),
severity: "secondary",
text: true,
},
},
},
},
swiper: {
gallery: {
pagination: { dynamicBullets: true },
modules: [SwiperPagination],
},
similars: {
slidesPerView: "auto",
modules: [SwiperNavigation],
navigation: {
prevEl: "div>button[swiper]:first-of-type",
nextEl: "div>button[swiper]:last-of-type",
},
},
},
chart: {
setChartData: (prices, dates) => {
var ctx = document.getElementsByTagName("canvas")[0].getContext("2d");
var gradient = ctx.createLinearGradient(0, 0, 0, 400);
gradient.addColorStop(0, "rgba(1, 86, 153, 0.62)");
gradient.addColorStop(1, "rgba(1, 86, 153, 0)");
const labels = [];
const data = [];
prices
// .filter((item) => {
// return (
// new Date(item.date) >= new Date(dates.from) &&
// new Date(item.date) <= new Date(dates.to)
// )
// })
.forEach(({ date, price }) => {
labels.push(
new Date(date).toLocaleDateString("fa", {
month: "long",
year: "numeric",
})
);
data.push(price);
});
return {
labels,
datasets: [
{
label: "",
data,
fill: true,
tension: 0.4,
borderColor: "#379956",
backgroundColor: gradient,
},
],
};
},
setChartOptions: () => {
return {
maintainAspectRatio: false,
aspectRatio: 0.6,
plugins: { legend: { display: false } },
scales: {
x: { grid: { display: false } },
y: {
display: true,
title: {
display: true,
text: "Toman",
},
},
},
};
},
},
menu: {
share: {
label: t("shareProduct"),
icon: "isax isax-share",
click: () => dialog.show(ProductDialogShare, data),
},
reminder: {
label: t("amazingInformation"),
icon: "isax isax-notification4",
click: (dialogRef) => {
if (token.value) dialog.show(ProductDialogReminder, data);
else {
dialogRef.close();
router.push("/auth/login");
}
},
},
chart: {
label: t("priceChart"),
icon: "isax isax-chart-2",
click: () => dialog.show(ProductDialogLineChart, data),
},
compare: {
label: t("compareProduct"),
icon: "isax isax-row-horizontal4",
click: () => router.push("/compare/" + data.id),
},
},
options: {
favorite: {
props: {
severity: "secondary",
text: true,
rounded: true,
icon: computed(
() => `isax isax-heart${fevorites.find(data.id) ? "5" : ""}`
),
},
click: () => {
if (token.value) fevorites.update(data.id);
else router.push("/auth/login");
},
},
cart: {
props: {
icon: "isax isax-shopping-cart",
severity: "secondary",
text: true,
rounded: true,
badges: computed(() => cart.items.length),
},
click: () => router.push("/checkout/cart"),
},
menu: {
props: {
icon: "isax isax-more rotate-90",
severity: "secondary",
text: true,
rounded: true,
},
click: () =>
dialog.show(ProductDialogMenu, confg.menu, { dismissableMask: true }),
},
},
actions: {
favorite: {
props: {
severity: "secondary",
text: true,
rounded: true,
icon: computed(() => {
const like = fevorites.find(data.id);
return `isax isax-heart${like ? "5" : ""}`;
}),
},
click: () => {
if (token.value) fevorites.update(data.id);
else router.push("/auth/login");
},
},
share: {
props: {
icon: "isax isax-share",
severity: "secondary",
text: true,
rounded: true,
},
click: () => dialog.show(ProductDialogShare, data),
},
reminder: {
props: {
icon: "isax isax-notification4",
severity: "secondary",
text: true,
rounded: true,
},
click: () => {
if (token.value)
dialog.show(ProductDialogReminder, data)
else router.push('/auth/login')
}
},
chart: {
props: {
icon: "isax isax-chart-2",
severity: "secondary",
text: true,
rounded: true,
},
click: () => dialog.show(ProductDialogLineChart, data),
},
compare: {
props: {
icon: "isax isax-row-horizontal4",
severity: "secondary",
text: true,
rounded: true,
},
click: () => router.push("/compare/" + data.id),
},
},
checkboxes: {
reminder: ["sms", "notif", "email"],
report: [
"incorrectName",
"inappropriatePhoto",
"incorrectSpecs",
"incorrectDesc",
"notOriginal",
"duplicate",
],
},
sorts: [
"mostRelevant",
"mostVisited",
"newest",
"bestselling",
"cheapest",
"mostExpensive",
"buyersSuggestion",
],
});
return confg;
};