303 lines
7.7 KiB
JavaScript
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;
|
|
};
|