235 lines
5.4 KiB
Vue
235 lines
5.4 KiB
Vue
<script setup>
|
||
import hadithaApi from "@haditha/apis/hadithaApi";
|
||
|
||
definePageMeta({
|
||
layout: false,
|
||
name: "hadithaFavorites",
|
||
});
|
||
useHead({
|
||
name: "hadithaFavorites",
|
||
title: `${import.meta.env.VITE_HADITH_PAGE_TITLE} | ذخیره ها`,
|
||
meta: [
|
||
{ name: "description", content: "کاوش با هوش مصنوعی در احادیث اسلامی" },
|
||
{
|
||
name: "msapplication-TileImage",
|
||
content: "/img/haditha/fav-icons/ms-icon-144x144.png",
|
||
},
|
||
{ name: "theme-color", content: "#ffffff" },
|
||
],
|
||
bodyAttrs: {
|
||
class: import.meta.env.VITE_HADITH_SYSTEM,
|
||
},
|
||
link: [
|
||
{
|
||
rel: "icon",
|
||
type: "image/x-icon",
|
||
href: "/img/haditha/fav-icons/favicon.ico",
|
||
},
|
||
{ rel: "manifest", href: "/img/haditha/fav-icons/manifest.json" },
|
||
// rel: icon
|
||
{
|
||
rel: "icon",
|
||
type: "image/png",
|
||
sizes: "16x16",
|
||
href: "/img/haditha/fav-icons/favicon-16x16.png",
|
||
},
|
||
{
|
||
rel: "icon",
|
||
type: "image/png",
|
||
sizes: "32x32",
|
||
href: "/img/haditha/fav-icons/favicon-32x32.png",
|
||
},
|
||
{
|
||
rel: "icon",
|
||
type: "image/png",
|
||
sizes: "96x96",
|
||
href: "/img/haditha/fav-icons/favicon-96x96.png",
|
||
},
|
||
{
|
||
rel: "icon",
|
||
sizes: "192x192",
|
||
type: "image/png",
|
||
href: "/img/haditha/fav-icons/android-icon-192x192.png",
|
||
},
|
||
// rel: apple
|
||
{
|
||
rel: "apple-touch-icon",
|
||
sizes: "57x57",
|
||
href: "/img/haditha/fav-icons/apple-icon-57x57.png",
|
||
},
|
||
{
|
||
rel: "apple-touch-icon",
|
||
sizes: "60x60",
|
||
href: "/img/haditha/fav-icons/android-icon-60x60.png",
|
||
},
|
||
{
|
||
rel: "apple-touch-icon",
|
||
sizes: "72x72",
|
||
href: "/img/haditha/fav-icons/android-icon-72x72.png",
|
||
},
|
||
{
|
||
rel: "apple-touch-icon",
|
||
sizes: "76x76",
|
||
href: "/img/haditha/fav-icons/android-icon-76x76.png",
|
||
},
|
||
{
|
||
rel: "apple-touch-icon",
|
||
sizes: "114x114",
|
||
href: "/img/haditha/fav-icons/android-icon-114x114.png",
|
||
},
|
||
{
|
||
rel: "apple-touch-icon",
|
||
sizes: "120x120",
|
||
href: "/img/haditha/fav-icons/android-icon-120x120.png",
|
||
},
|
||
{
|
||
rel: "apple-touch-icon",
|
||
sizes: "144x144",
|
||
href: "/img/haditha/fav-icons/android-icon-144x144.png",
|
||
},
|
||
{
|
||
rel: "apple-touch-icon",
|
||
sizes: "152x152",
|
||
href: "/img/haditha/fav-icons/android-icon-152x152.png",
|
||
},
|
||
{
|
||
rel: "apple-touch-icon",
|
||
sizes: "180x180",
|
||
href: "/img/haditha/fav-icons/android-icon-180x180.png",
|
||
},
|
||
],
|
||
});
|
||
|
||
// #region refs
|
||
const loading = ref(false);
|
||
const httpService = useNuxtApp()["$http"];
|
||
|
||
// #endregion refs
|
||
|
||
// #region reactive
|
||
const state = reactive({
|
||
// list: new Array(5).fill(0),
|
||
list: [],
|
||
counts: [],
|
||
totalCounts: [],
|
||
pagination: {
|
||
page: 1,
|
||
pages: 1,
|
||
offset: 0,
|
||
limit: 10,
|
||
},
|
||
});
|
||
// #endregion reactive
|
||
|
||
// #region methods
|
||
|
||
const getCategories = async (dataType = "bookmark") => {
|
||
if (loading.value) return;
|
||
|
||
loading.value = true;
|
||
|
||
let url = repoUrl() + hadithaApi.favorite.getList;
|
||
url = url.replace("@data_type", dataType);
|
||
url = url.replace("@time_key", "all");
|
||
url = url.replace("@source", "main");
|
||
url = url.replace("@offset", state.pagination.offset);
|
||
url = url.replace("@limit", state.pagination.limit);
|
||
url = url.replace("@q", "none");
|
||
|
||
return await httpService
|
||
.getRequest(url)
|
||
.then((res) => {
|
||
state.list = res.hits.hits;
|
||
state.totalCounts = res.hits.total.value;
|
||
loading.value = false;
|
||
// getCounts();
|
||
})
|
||
.catch((err) => {
|
||
console.info(err);
|
||
loading.value = false;
|
||
});
|
||
};
|
||
|
||
// const getCounts = async () => {
|
||
// let url = repoUrl() + hadithaApi.favorite.getCounts;
|
||
// url = url.replace("@data_type", "bookmark");
|
||
|
||
// await httpService
|
||
// .getRequest(url)
|
||
// .then((res) => {
|
||
// state.totalCounts = res.hits.total.value;
|
||
// state.counts = res.aggregations.result.buckets;
|
||
// loading.value = false;
|
||
// })
|
||
// .catch((err) => {
|
||
// console.info(err);
|
||
// })
|
||
// .finally(() => {
|
||
// loading.value = false;
|
||
// });
|
||
// };
|
||
// #endregion methods
|
||
|
||
// #region hooks
|
||
onMounted(() => {
|
||
getCategories();
|
||
});
|
||
// #endregion methods
|
||
|
||
const HadithaLayout = defineAsyncComponent(() =>
|
||
import("@haditha/layouts/HadithaLayout.vue")
|
||
);
|
||
const NavigationMenu = defineAsyncComponent(() =>
|
||
import("@haditha/components/haditha/NavigationMenu.vue")
|
||
);
|
||
|
||
const SearchList = defineAsyncComponent(() =>
|
||
import("@haditha/components/haditha/search-page/SearchList.vue")
|
||
);
|
||
</script>
|
||
|
||
<template>
|
||
<HadithaLayout>
|
||
<div class="h-full flex flex-col justify-center">
|
||
<div class="bg-container h-full">
|
||
<navigation-menu></navigation-menu>
|
||
|
||
<div class="text-logo">
|
||
<div class="search-box-container pb-0 flex justify-center">
|
||
<search-list
|
||
no-data-text="هنوز چیزی ذخیره نکردهاید!"
|
||
no-data-icon="/img/haditha/save.png"
|
||
:list="state.list"
|
||
:total="state.totalCounts"
|
||
></search-list>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</HadithaLayout>
|
||
</template>
|
||
|
||
<style scoped>
|
||
.bg-container {
|
||
min-height: 100%;
|
||
/* height: 100dvh; */
|
||
background-size: cover;
|
||
background-repeat: no-repeat;
|
||
background: #f7fffd;
|
||
}
|
||
|
||
.text-logo {
|
||
padding-top: 4.5em;
|
||
position: relative;
|
||
}
|
||
|
||
.search-box-container {
|
||
padding-top: 0.7em;
|
||
padding-bottom: 4em; /*64px */
|
||
|
||
&.pb-0 {
|
||
padding-bottom: 0 !important;
|
||
}
|
||
}
|
||
</style>
|