base_ui/mixins/notifications/notificationMixin.js

356 lines
9.1 KiB
JavaScript
Raw Permalink Normal View History

2025-02-01 09:34:55 +00:00
import { mapActions, mapState } from "pinia";
import { useCommonStore } from "~/stores/commonStore";
import { useAuthStore } from "~/stores/authStore";
import adminApi from "~/apis/adminApi";
export default {
data() {
return {
activeTab: "all",
canView: false,
fetchingData: false,
listUnseen: [],
countUnseen: undefined,
list: [],
counts: "",
notificationItem: undefined,
buttonLoading: false,
pagination: {
page: 1,
pages: 0,
total: 0,
offset: 0,
limit: 5,
},
};
},
computed: {
...mapState(useAuthStore, ["currentUser", "isGuest"]),
},
methods: {
...mapActions(useCommonStore, ["checkPermissions"]),
filterNotifications(newTab) {
this.activeTab = newTab;
this.list = [];
this.getList();
},
async checkPermisionBeforGetList(permission) {
if (this.fetchingData) return;
this.fetchingData = true;
return await this.checkPermissions({ permission, _this: this })
.then(() => {
this.canView = true;
// this.fetchingData = false;
})
.catch(() => {
this.canView = false;
this.fetchingData = false;
});
},
// detelte item.
async deleteItem({ _id }) {
if (this.buttonLoading) return;
this.buttonLoading = true;
var url = adminApi.notification.delete;
url = url.replace("{{id}}", _id);
url = url.replace("{{entity_type}}", "notif");
try {
const { $api } = useNuxtApp();
const res = await $api(url, {
method: "POST",
baseURL: repoUrl(),
});
this.mySwalToast({
title: "تبریک",
html: res.message,
icon: "success",
});
return res;
} catch (err) {
this.fetchingData = false;
}
// return await this.httpService
// .postRequest(url)
// .then((res) => {
// this.mySwalToast({
// title: "تبریک",
// html: res.message,
// icon: "success",
// });
// })
// .catch((error) => {})
// .finally(() => {
// this.buttonLoading = false;
// });
},
// Getting notification item.
async getNotificationItem(id) {
let url = adminApi.notification.get;
url = url.replace("{{id}}", id);
// this.httpService
// .getRequest(url)
// .then((res) => {
// this.notificationItem = res;
// })
// .catch(() => {})
// .finally(() => {
// this.fetchingData = false;
// });
try {
const { $api } = useNuxtApp();
const res = await $api(url, {
method: "get",
baseURL: repoUrl(),
});
this.notificationItem = res;
} catch (err) {
this.fetchingData = false;
}
},
// admin
async getList() {
let url = adminApi.notification[this.activeTab];
url = url.replace("{{offset}}", this.pagination.offset);
url = url.replace("{{limit}}", this.pagination.limit);
// this.httpService
// .getRequest(url)
// .then((res) => {
// this.list = res.hits.hits;
// this.numberOfMark();
// const total = res.hits.total.value;
// const pages = Math.ceil(total / this.pagination.limit);
// const pagination = {
// total: total,
// pages: pages == 0 ? 1 : pages,
// };
// this.pagination = { ...this.pagination, ...pagination };
// })
// .catch(() => {})
// .finally(() => {
// this.fetchingData = false;
// });
try {
const { $api } = useNuxtApp();
const res = await $api(url, {
method: "get",
baseURL: repoUrl(),
});
this.list = res.hits.hits;
this.numberOfMark();
const total = res.hits.total.value;
const pages = Math.ceil(total / this.pagination.limit);
const pagination = {
total: total,
pages: pages == 0 ? 1 : pages,
};
this.pagination = { ...this.pagination, ...pagination };
} catch (err) {
this.fetchingData = false;
}
},
//user
async getListUnseen() {
let url = adminApi.notification.listUnseen;
url = url.replace("{{offset}}", this.pagination.offset);
url = url.replace("{{limit}}", this.pagination.limit);
// this.httpService
// .getRequest(url)
// .then((res) => {
// this.listUnseen = res.hits.hits;
// const total = res.hits.total.value;
// const pages = Math.ceil(total / this.pagination.limit);
// const pagination = {
// total: total,
// pages: pages == 0 ? 1 : pages,
// };
// this.pagination = { ...this.pagination, ...pagination };
// })
// .catch(() => {})
// .finally(() => {
// this.fetchingData = false;
// });
try {
const { $api } = useNuxtApp();
const res = await $api(url, {
method: "get",
baseURL: repoUrl(),
});
this.listUnseen = res.hits.hits;
const total = res.hits.total.value;
const pages = Math.ceil(total / this.pagination.limit);
const pagination = {
total: total,
pages: pages == 0 ? 1 : pages,
};
this.pagination = { ...this.pagination, ...pagination };
this.fetchingData = false;
} catch (err) {
this.fetchingData = false;
}
},
// user
async getCountUnseen() {
const url = adminApi.notification.countUnseen;
// this.httpService
// .getRequest(url)
// .then((res) => {
// this.countUnseen = res.count;
// })
// .catch(() => {})
// .finally(() => {});
try {
const { $api } = useNuxtApp();
const res = await $api(url, {
method: "get",
baseURL: repoUrl(),
});
this.countUnseen = res.data.count;
} catch (err) {}
},
goToNotificationShowPage(item) {
this.$router.push({
name: "notificationsShow",
params: {
id: item._id,
},
});
},
goToNotificationPage() {
this.$router.push({
name: "notifications",
});
},
resetPagination() {
this.pagination = {
pages: 0,
total: 0,
page: 1,
offset: 0,
limit: 10,
};
},
pageLimitChanged(paging) {
this.resetPagination();
this.pagination.limit = paging.limit;
this.getList();
},
pageChanged(paging) {
let page = paging.pageNumber;
page -= 1;
this.pagination.offset = page * paging.limit;
this.pagination.limit = paging.limit;
this.pagination.page = paging.pageNumber;
this.getList();
},
sortChanged(sorting) {
// keep limit status.
// reset page and offset values.
this.pagination.page = this.pagination.offset = 0;
this.sorting = sorting;
this.getList();
},
timeSince(timeStamp) {
var date = new Date(timeStamp * 1000);
var seconds = Math.floor((new Date() - date) / 1000);
var interval = seconds / 31536000;
if (interval > 1) {
return Math.floor(interval) + " سال";
}
interval = seconds / 2592000;
if (interval > 1) {
return Math.floor(interval) + " ماه";
}
interval = seconds / 86400;
if (interval > 1) {
return Math.floor(interval) + " روز";
}
interval = seconds / 3600;
if (interval > 1) {
return Math.floor(interval) + " ساعت";
}
interval = seconds / 60;
if (interval > 1) {
return Math.floor(interval) + " دقیقه";
}
return Math.floor(seconds) + " ثانیه";
},
async markAll() {
let url = adminApi.notification.markAllAsRead;
// this.httpService
// .postRequest(url)
// .then((res) => {
// this.getList();
// this.mySwalToast({
// html: res?.message ?? "با موفقیت تغییر یافت.",
// });
// this.numberOfMark();
// })
// .catch(() => {})
// .finally(() => {});
try {
const { $api } = useNuxtApp();
const res = await $api(url, {
method: "get",
baseURL: repoUrl(),
});
this.getList();
this.mySwalToast({
html: res?.message ?? "با موفقیت تغییر یافت.",
});
this.numberOfMark();
} catch (err) {}
},
async numberOfMark() {
let url = adminApi.notification.counts;
url = url.replace("{{data_type}}", this.data_type);
// this.httpService
// .getRequest(url)
// .then((res) => {
// this.counts = res.data;
// })
// .catch(() => {})
// .finally(() => {});
try {
const { $api } = useNuxtApp();
const res = await $api(url, {
method: "get",
baseURL: repoUrl(),
});
this.counts = res.data;
} catch (err) {}
},
},
};