hadith_ui/pages/hadith/(show)/[key]/[id]/index.vue

1839 lines
60 KiB
Vue
Raw Normal View History

2025-02-11 10:17:22 +00:00
<template>
<NuxtLayout name="search-layout" :menu="sidbarMenu">
<!-- <Head> -->
<!-- <Title>{{ metaTitle }}</Title> -->
<!-- <Meta name="description" :content="title" /> -->
<!-- <Style type="text/css" children="body { background-color: green; }" ></Style> -->
<!-- </Head> -->
<div class="container-fluid">
<div class="row">
<!-- #region منو سمت راست -->
<div class="col-auto col-md-3">
<template v-if="!isMajlesBuild() && showListRight">
<div
class="filter-list-container"
:class="{ expanded: showFilter }"
>
<ul
:class="buildName() + '-header-color'"
v-if="$route.name != 'research'"
class="nav nav-tabs pt-1 d-none d-xl-flex"
>
<li class="nav-item desktop">
<button
title=""
type="button"
@click.prevent="setActiveListType('Navigation', 'simple')"
class="btn nav-link"
:class="{
active: activeListType == 'simple',
}"
>
{{ listTabTitle1 }}
</button>
</li>
<li class="nav-item desktop">
<button
title=""
type="button"
@click.prevent="setActiveListType('UserHistory', 'history')"
class="btn nav-link"
:class="{
active: activeListType == 'history',
}"
>
{{ listTabTitle2 }}
</button>
</li>
</ul>
<div class="mobile-mode d-lg-none">
<button
v-if="showFilter"
class="btn mb-1"
@click.prevnet="showFilter = !showFilter"
>
<svg class="icon icon-chevron-double-right ms-1">
<use xlink:href="#icon-chevron-double-right"></use>
</svg>
</button>
</div>
<component
:key="renderResearch"
class="main-filter"
:item="getPanelComponent"
:is="panelComponentName"
ref="panelComponent"
@fishHandlerInResearch="researchModalHandler"
@content-updated="updateMainContent"
></component>
</div>
</template>
</div>
<!-- #endregion -->
<!-- #region بخش محتوای اصلی سایت -->
<div :class="columnClass">
<!-- #region بخش هِدر -->
<div
class="row align-items-center"
:class="buildName() + '-header-color'"
>
<div class="pt-2 d-flex justify-content-between align-items-center">
<div class="d-md-none">
<div class="d-flex align-items-center">
<button
name="button"
type="button"
class="toggle-mobile-nav dropdown-hamburger pe-0"
@click.prevent="toggleSidebarMenu()"
>
<span class="sr-only">باز کردن منوی کنار</span>
<svg class="s18" data-testid="sidebar-icon">
<use href="~/assets/common/img/icons.svg#sidebar"></use>
</svg>
</button>
</div>
</div>
<div class="">
<div class="nav-tabs-container nav-tabs justify-content-start">
<ul v-if="navList" class="nav al">
<li
class="nav-item desktop"
v-for="(navItem, index) in navList"
:key="index"
>
<button
:title="navItem.title"
type="button"
class="btn nav-link"
@click.prevent="setActiveTab(navItem)"
:class="{
active: activeTabGetter?.key == navItem.key,
}"
>
{{ navItem.title }}
</button>
</li>
<li
class="nav-item mobile tabs-more-btn d-lg-none d-flex align-items-center"
v-if="navList?.length > 3"
>
<div class="dropdown">
<button
class="btn"
type="button"
id="dropdownMenuButton"
data-bs-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false"
>
<svg class="icon icon-Component-81--1">
<use xlink:href="#icon-Component-81--1"></use>
</svg>
</button>
<div
class="dropdown-menu"
aria-labelledby="dropdownMenuButton"
>
<a
class="dropdown-item"
href="#"
v-for="(navItem, index) in navList"
:key="index"
@click.prevent="setActiveTab(navItem)"
:class="{
active: activeTabGetter?.key == navItem.key,
}"
v-if="index > 2"
>{{ navItem.title }}</a
>
</div>
</div>
</li>
</ul>
</div>
</div>
<div class="d-none d-lg-block">
<auto-complation
:key="'auto' + renderAutoComplation"
:showAppend="false"
class="entityTheme entity-auto-complation"
ref="autoComplationRef"
:contentKey="activeEntityViewSchemaGetter?.key"
:textSearch="$route.query?.searchtext ?? ''"
:placeholder="autoComplationPlaceholder"
@onSelectHistory="onSelectHistory"
></auto-complation>
</div>
<div class="d-lg-none">
<a
class=""
type="button"
data-bs-toggle="collapse"
data-bs-target="#mobileCollapse"
aria-expanded="false"
aria-controls="collapseExample"
name="button"
>
<svg class="icon icon-Component-198--1">
<use xlink:href="#icon-Component-198--1"></use>
</svg>
</a>
</div>
</div>
<div id="mobileCollapse" class="collapse d-lg-none">
<div class="col-12 d-flex justify-content-center">
<div class="col-10 col-sm-6">
<auto-complation
:key="'auto' + renderAutoComplation"
:showAppend="false"
class="my-2 entityTheme entity-auto-complation"
ref="autoComplationRef"
:contentKey="activeEntityViewSchemaGetter?.key"
:textSearch="$route.query?.searchtext ?? ''"
:placeholder="autoComplationPlaceholder"
@onSelectHistory="onSelectHistory"
></auto-complation>
</div>
</div>
</div>
</div>
<!-- #endregion -->
<!-- #region بخش محتوای متنی سایت -->
<div class="row">
<EntityHeader
v-if="
mainComponentName !== ('EntityCompareText2', 'EntityChartGantt')
"
@toggle-reading-mode="toggleReadingMode"
@groupEditComponent="EditComponent"
@selectedItem="selectedItemlevel"
@NewComponent="NewComponent"
@show-compare-modal="showCompareModal"
@showListHeadline="showListHeadline"
@close-compare="closeCompare()"
@change-compare="changeCompare($event)"
@switch-view="switchView"
:isCompareState="mainComponentName == 'EntityCompareText2'"
ref="headers"
class="col-12"
>
</EntityHeader>
<template v-if="!isMajlesBuild() && showListRight">
<div class="button-cloce">
<button
v-if="showFilter == false"
class="btn_close"
@click.prevnet="showFilter = !showFilter"
>
<svg class="icon icon-chevron-double-left">
<use xlink:href="#icon-chevron-double-left"></use>
</svg>
</button>
</div>
</template>
<div
v-if="hideCircleButton == false"
class="circle--button"
@click.prevent="circleButton()"
ref="circle"
>
<svg
class="icon-chevron-double-lg-left"
data-testid="chevron-double-lg-left-icon"
>
<use
href="~/assets/common/img/icons.svg#chevron-double-lg-left"
></use>
</svg>
</div>
<div class="col">
<div class="row mx-2">
<div
class="col-12"
:class="{
'col-lg':
mainComponentName != 'PropertyBuilder' &&
mainComponentName != 'EntityRepetitionWords' &&
mainComponentName !== 'EntityChartGantt',
}"
>
<component
v-if="mainComponentName"
:class="{
component_page:
mainComponentName !== 'EntityQaSection' ||
mainComponentName !== 'LibraryText' ||
mainComponentName !== 'EntityChartGantt',
}"
:readingMode="isReadingModeGetter"
:propText="mainComponentName"
:is="mainComponentName"
:slug="slug"
:selectedItem="selectedItemEntityGetter"
:editItem="editItem"
:editComponent="editComponent"
:text1Compare="text1Compare"
:text2Compare="text2Compare"
:copmareSideBySide="copmareSideBySide"
:compareLineByLine="compareLineByLine"
:routeEntityid="params.id"
:listBooks="listBooks"
:viewMode="viewMode"
@is-search-mode="closeSearchMode"
@fishHandler="fishHandler"
@termHandler="termHandler"
@statusEdit="statusEdit"
@annotationHandler="annotationHandler"
@editPropertyTags="editPropertyTags"
@close-compare="closeCompare()"
@click-node="chartGanttClickNode"
@linked-title-click="linkedTitleClick"
@column-title-click="columnTitleClick"
@handler-icon-click="handlerIconClick"
:propertyBuilderForm="
activeEntityViewSchemaGetter?.property
"
></component>
<!-- //:key="renderResearch" -->
<!-- این مقدار حذف شد به این دلیل که بعد از فیش زدن به اول صفحه میرفت -->
</div>
<div
:class="{ 'col-4': buildName() == 'hadith' }"
class="col-3 entity-tree-list"
v-if="isSearchMode || isHeadingMode"
>
<div class="container-fluid">
<!-- <div class="row">
<div
class="d-flex justify-content-between align-items-center w-100"
>
<div>سرفصل ها</div>
<button
class="close"
@click="showEntityHeading = false"
>
<span aria-hidden="true">&times;</span>
</button>
</div>
</div> -->
<div class="row">
<text-search
@is-search-mode="closeSearchMode"
@showListHeadline="showListHeadline"
v-if="isSearchMode"
class=""
></text-search>
<entity-tree-list
:dataTree="dataTree"
@showListHeadline="showListHeadline"
@is-treelist-mode="closeTreelistMode"
v-if="isHeadingMode"
class=""
></entity-tree-list>
</div>
</div>
</div>
</div>
</div>
<!-- <base-modal
v-if="uploadForFirstTime"
@close="closeModal"
@save="saveBaseModal"
@canel="closeModal()"
:description="description"
:showHeaderCloseButton="true"
:modalTitle="modalTitle"
class="borhan-modal"
:height="getModalHeight()"
maxHeight="30em"
overflow="hidden"
:hasFooter="false"
:showSaveButton="false"
:showCloseButton="false"
>
<component
:is="slotComponentName"
:uploadForFirstTime="uploadForFirstTime"
:listData="listData"
:valueModal="valueResearchModal"
@canel="closeModal()"
@close="closeModal()"
@closeAfterSaving="closeAfterSaving"
@compare-text="compareText"
@load-text="loadText"
@word-file="wordFile"
@after-select-file="afterSelectFile()"
></component>
</base-modal> -->
<base-modal-v2
v-if="uploadForFirstTime"
@close="closeModal"
:showHeaderCloseButton="true"
:hasFooter="false"
:modalTitle="modalTitle"
:modalSize="modalWidthManagement"
:height="modalHeightManagement"
maxHeight="36em"
overflow="hidden"
:showSaveButton="true"
:showCloseButton="true"
:showDeleteButton="false"
>
<template v-slot:default> {{ modalTitle }}</template>
<template v-slot:body>
<component
:is="slotComponentName"
:uploadForFirstTime="uploadForFirstTime"
:listData="listData"
:valueModal="valueResearchModal"
:sectionItem="sectionItem"
:versionItem="versionItem"
:listItemsCompare="listItemsCompare"
:numberCurrentTab="2"
:showCurrentTab="false"
@edit-sections="editSections"
@canel="closeModal()"
@close="closeModal()"
@closeAfterSaving="closeAfterSaving"
@compare-text="compareText"
@load-text="loadText"
@word-file="wordFile"
@compare-versions-qanon="compareVersionsQanon"
:elements="dataOrganhMeta"
@after-select-file="afterSelectFile()"
height="100%"
></component>
</template>
</base-modal-v2>
</div>
<!-- #endregion -->
</div>
<!-- #endregion -->
</div>
</div>
</NuxtLayout>
</template>
<script>
import { mapActions, mapState } from "pinia";
import { useEntityStore } from "@search/stores/entityStore";
import { useSearchStore } from "~/stores/searchStore";
import { useCommonStore } from "~/stores/commonStore";
import sidbarMenuDefault from "~/json/entity/entityMenu.json";
import sidbarMenuMajles from "~/json/entity/entityMenuMajles.json";
import entityApi from "~/apis/entityApi";
import repoApi from "~/apis/repoApi";
export default {
setup() {
useHead({
title: import.meta.env.VITE_ENTITY_PAGE_TITLE,
meta: [{ name: "description", content: "My page description" }],
bodyAttrs: {
class: import.meta.env.VITE_ENTITY_SYSTEM,
},
});
definePageMeta({
// names: [
// "search/key/id",
// "search/key/id/show",
// "search/key/id/list",
// "search/key/id/research",
// ],
// middleware: "redirect",
// alias: [
// "/search/key/id",
// "/search/key/id/show",
// "/search/key/id/list",
// "/search/key/id/research",
// ],
layout: false,
});
},
created() {
this.routeKey = this.$route.params.key;
this.routeId = this.$route.params.id;
this.httpService = useNuxtApp()["$http"];
},
mounted() {
sidbarMenuDefault.entity.forEach((element) => {
if (element.link.includes("/key/id/") > 0)
element.link = element.link
.replace("id", this.$route.params.id)
.replace("key", this.$route.params.key);
});
console.info("sidbarMenuDefault", sidbarMenuDefault);
if (this.$route.query?.listkey == "branch")
this.listTabTitle1 = "جلسات دوره";
this.setPanelComponentName();
this.getEntityInfo(this.routeKey, this.routeId);
this.getListInformation();
this.listData = this.listEntityGetter;
this.setShowListRight();
var font = JSON.parse(localStorage.getItem("settings"));
this.progress = font?.fontSize;
// اگر شرط سوم فعال باشه، هر سری که کامپوننت (entityview1) لود بشه ، درخواست به سرور ارسال میشه
// گرفتن دوباره اسکیما
// این کامنت موقت
let isRouterKeyFixed =
this.activeEntityViewSchemaGetter &&
this.entityViewSchemaGetter &&
this.activeEntityViewSchemaGetter?.key == this.$route.params?.key;
if (isRouterKeyFixed) {
this.updateMainContent();
} else this.getSchemas();
if (window.outerWidth < 992) {
this.$store.commit("TOGGLE_SIDEBAR_MENU");
}
if (this.activeEntityViewSchemaGetter?.tabs) {
if (this.activeTabGetter) this.setActiveTab(this.activeTabGetter);
else this.setActiveTab(this.activeEntityViewSchemaGetter.tabs[0]);
}
const { $eventBus } = useNuxtApp();
$eventBus.on("update-component-data", () => {
this.updateComponentData();
});
this.getDataTree();
if (buildName() == "hadith") {
this.getBooksList();
}
},
watch: {
mainComponentName(newVal) {
this.setShowListRight(newVal);
// if (this.$route.name !== "show") {
// if (
// // newVal === "PropertyBuilder" ||
// // newVal === "EntityRepetitionWords" ||
// newVal === "Gantt"
// ) {
// this.showListRight = false;
// } else {
// this.showListRight = true;
// }
// }
},
similarInfoGetter(newVal) {
if (newVal.show) {
this.openModal("EntitySimilar", newVal.label, newVal.text);
}
},
statusButtonGetter(newVal) {
this.statusPage = newVal;
},
// statusRemovCheckBoxGetter(newVal) {
// this.removCheckBox();
// },
$route: {
handler(to, from) {
this.setPanelComponentName();
},
deep: true,
nested: true,
},
},
data() {
return {
routeKey: "",
routeId: "",
dataOrganhMeta: "",
renderAutoComplation: 1,
listTabTitle1: "از جستجو",
listTabTitle2: "تاریخچه",
activeListType: "simple",
// readingMode: false,
renderResearch: 1,
httpService: undefined,
slotComponentName: null,
mainComponentName: null,
tempComponentName: null,
modalTitle: null,
slug: null,
statusPage: 1,
copmareSideBySide: true,
compareLineByLine: false,
uploadForFirstTime: false,
showFilter: true,
showListRight: true,
hideCircleButton: true,
showSimilar: false,
isSearchMode: false,
isHeadingMode: false,
showEntityHeading: false,
valueResearchModal: {},
firstItem: {},
sidbarMenuDefault: sidbarMenuDefault,
sidbarMenuMajles: sidbarMenuMajles,
params: this.$route.params,
firstList: [],
listData: [],
description: "",
editItem: "",
editComponent: "",
newComponent: "",
panelComponentName: "Navigation",
text1Compare: "",
text2Compare: "",
listBooks: [],
pagination: {
page: 0,
total: 0,
pageTop: 0,
pageBottom: 1,
offset: 0, // page * per_page
limit: 25, //per_page
},
path: this.$route.path,
dataTree: [],
listBooks: [],
pagination: {
page: 0,
total: 0,
pageTop: 0,
pageBottom: 1,
offset: 0, // page * per_page
limit: 25, //per_page
},
viewMode: "table",
sectionItem: {},
versionItem: [],
listItemsCompare: {},
isPrevComponent: "text",
// text: "",
// uuid: undefined,
// texts3: "تحلیل",
// editDescription: "",
// editData: "",
// bedtimeText: "",
// showchang: true,
// editTitle: "",
// editVersion: "",
// showFish: false,
// fishModalTitle: "",
};
},
computed: {
...mapState(useEntityStore, [
"selectedItemEntityGetter",
"listEntityGetter",
"statusButtonGetter",
"similarInfoGetter",
"entityViewSchemaGetter",
"activeEntityViewSchemaGetter",
"activeTabGetter",
"isReadingModeGetter",
]),
...mapState(useCommonStore, [
"organNameGetter",
"isSidebarCollapsed",
"currentUser",
]),
autoComplationPlaceholder() {
if (this.activeEntityViewSchemaGetter?.search_placeholder)
return this.activeEntityViewSchemaGetter.search_placeholder;
else return "جستجو در عنوان";
},
navList() {
if (!isMajlesBuild()) return this.activeEntityViewSchemaGetter?.tabs;
if (this.activeEntityViewSchemaGetter?.tabs) {
let list = this.activeEntityViewSchemaGetter?.tabs;
if (!this.isDevelopMode)
list = this.activeEntityViewSchemaGetter?.tabs.filter((item) => {
item?.isDevelopMode == 1;
});
return list;
} else return [];
},
columnClass() {
if (!isMajlesBuild() && this.showListRight) {
return "col-12 col-md-9"; // وقتی شرط برقرار باشد
}
return "col-12"; // در حالت عادی
},
sidbarMenu() {
if (isMajlesBuild()) return sidbarMenuMajles;
else return sidbarMenuDefault;
},
modalWidthManagement() {
switch (this.slotComponentName) {
case "EntitiyModalCompareVersionQa":
return "modal-md";
break;
default:
return "modal-xl";
break;
}
},
modalHeightManagement() {
switch (this.slotComponentName) {
case "EntitiyModalCompareVersionQa":
return "430px";
break;
default:
return "556px";
break;
}
},
},
methods: {
...mapActions(useEntityStore, [
"SET_ITEM_ENTITY",
"SET_LIST_ENTITY",
"SET_STATUS_ENTITY_VIEWPAGE",
"SET_STATUS_BUTTON",
"SET_FONT",
"activeEntityViewSchemaSetter",
"entityViewSchemaSetter",
"activeTabSetter",
]),
...mapActions(useCommonStore, ["TOGGLE_PANEL"]),
editProperty(innerGroupItem) {
this.dataOrganhMeta = innerGroupItem;
this.openModal("TagsEdit", "ویرایش " + innerGroupItem?.label);
},
onSelectHistory(payload) {
let _id = payload.searchItem._source.qanon_id;
let _listkey = this.$route.query.listkey;
let name = "navigationView";
if (_listkey) name = "navigation";
this.$router
.push({
name: name,
params: {
id: _id,
key: this.$route.params?.key,
},
query: {
searchtext: payload.textSearch ?? undefined,
listkey: _listkey,
},
})
.catch(() => {});
},
getBooksList() {
let field_collapse = "book_title"; //"normal"
let url = repoUrl() + libraryApi.search.volume;
url = url.replace("{{field_collapse}}", field_collapse);
url = url.replace("{{offset}}", this.pagination.offset);
url = url.replace("{{limit}}", this.pagination.limit);
url = url.replace("{{filter}}", "none");
this.httpService
.postRequest(url)
.then((response) => {
this.listBooks = [];
this.listBooks = response.hits?.hits.map((item) => {
const source = item._source;
const publishDate = item._source.publish_date
? new Date(source.publish_date).toLocaleDateString("fa-IR")
: null;
// console.log(publishDate);
return {
...item,
_source: {
...source,
publish_date: publishDate,
},
};
});
})
.catch((error) => {});
},
updateComponentData() {
if (this.$route.query?.listkey == "branch")
this.listTabTitle1 = "جلسات دوره";
this.setPanelComponentName();
this.getEntityInfo(this.routeKey, this.routeId);
this.getListInformation();
this.listData = this.listEntityGetter;
this.setShowListRight();
var font = JSON.parse(localStorage.getItem("settings"));
this.progress = font?.fontSize;
// اگر شرط سوم فعال باشه، هر سری که کامپوننت (entityview1) لود بشه ، درخواست به سرور ارسال میشه
// گرفتن دوباره اسکیما
// این کامنت موقت
let isRouterKeyFixed =
this.activeEntityViewSchemaGetter &&
this.entityViewSchemaGetter &&
this.activeEntityViewSchemaGetter?.key == this.$route.params?.key;
if (isRouterKeyFixed) {
this.updateMainContent();
} else this.getSchemas();
if (window.outerWidth < 992) {
this.$store.commit("TOGGLE_SIDEBAR_MENU");
}
if (this.activeEntityViewSchemaGetter?.tabs) {
if (this.activeTabGetter) this.setActiveTab(this.activeTabGetter);
else this.setActiveTab(this.activeEntityViewSchemaGetter.tabs[0]);
}
},
// switchViewGraph(event) {
// if (event == "show") this.mainComponentName = "EntityChartGraph";
// else this.mainComponentName = "EntityQaRelation";
// },
switchView(event) {
if (event == "show") {
if (this.activeTabGetter?.key == "graph") {
this.mainComponentName = "EntityChartGraph";
} else if (this.activeTabGetter?.key == "gantt") {
this.mainComponentName = "EntityChartGantt";
this.viewMode = "table";
}
} else {
if (this.activeTabGetter?.key == "graph") {
this.mainComponentName = "EntityQaRelation";
} else if (this.activeTabGetter?.key == "gantt") {
this.mainComponentName = "EntityChartGantt";
this.viewMode = "chart";
}
}
},
setActiveListType(componentName, listType) {
this.panelComponentName = componentName;
this.activeListType = listType;
},
toggleReadingMode(event) {
// if (event) this.readingMode = false;
// else this.readingMode = true;
},
getModalHeight() {
return this.slotComponentName === "SelectEntityText" ? "30em" : "auto";
},
// removCheckBox() {
// let remov = this.statusRemovCheckBoxGetter;
// let index;
// this.listResearch.forEach((item) => {
// if (item === remov) {
// index = this.listItem.indexOf(item);
// this.listItem.splice(index, 1);
// }
// });
// },
// datefa(item) {
// var m = this.selectedItemEntityGetter.begin_date;
// var d = new Date(m).toLocaleDateString("fa-IR");
// return d;
// },
// updateFont(event) {
// if (this.progress == "15") {
// this.progress = JSON.parse(localStorage.getItem("settings"));
// } else {
// this.progress = event.target?.value;
// this.SET_FONT(this.progress);
// const settings = {
// fontSize: this.progress,
// };
// localStorage.setItem("settings", JSON.stringify(settings));
// }
// },
/**
* مدیریت نمایش مدال تحقیق.
* @param {Object} value - مقدار شامل اطلاعات ویرایش آیتم.
*/
researchModalHandler(value) {
if (value.itemEdit._source.research_key == "term") {
this.termHandler(value);
} else if (value.itemEdit._source.research_key == "note") {
this.annotationHandler(value);
} else if (value.itemEdit._source.research_key == "fish") {
this.fishHandler(value);
} else {
// let key = value.itemEdit._source?.research_key;
let schema = this.activeEntityViewSchemaGetter.contextMenu.find(
(item) => item.key === value.itemEdit._source?.research_key
);
this.valueResearchModal = value;
this.valueResearchModal.itemSchema = schema;
this.openModal("ComponentTextFish", schema.title);
}
},
/**
* مدیریت نمایش مدال حاشیهنویسی.
* @param {Object} item - آیتم شامل اطلاعات schema.
*/
annotationHandler(item) {
this.valueResearchModal = item;
this.openModal("ComponentTextFish", item.itemSchema.title);
},
/**
* مدیریت نمایش مدال فیش.
* @param {Object} item - آیتم شامل اطلاعات schema.
*/
fishHandler(item) {
this.valueResearchModal = item;
this.openModal("ComponentTextFish", item.itemSchema.title);
},
/**
* مدیریت نمایش مدال اصطلاح.
* @param {Object} item - آیتم شامل اطلاعات schema.
*/
termHandler(item) {
this.valueResearchModal = item;
this.openModal("SelectTerm", "انتخاب اصطلاح ", "", "term");
},
/**
* تغییر وضعیت نمایش سرخط نهاد.
*/
showListHeadline({ isSearchMode, isHeadingMode }) {
this.isSearchMode = isSearchMode;
this.isHeadingMode = isHeadingMode;
// this.showEntityHeading = !this.showEntityHeading;
},
/**
* بررسی اینکه آیا کاربر میتواند یک کلید خاص را ببیند.
* @param {String} keyName - نام کلید برای بررسی.
* @returns {Boolean} - اگر کاربر میتواند کلید را ببیند true و در غیر اینصورت false.
*/
canSee(keyName) {
if (this.currentUser?.user_level > 1) return true;
return this.userPermisionGetter.includes(keyName);
},
async getEntityText(id) {
let key = this.routeKey;
let url = "";
if (key == "qasection" || key == "rgsection") {
url = repoUrl() + entityApi.comparison.getParent;
url = url.replace("@index_key", key);
url = url.replace("@parent_id", id);
} else {
url = repoUrl() + entityApi.comparison.getText;
url = url.replace("@index_key", key);
url = url.replace("@id", id);
}
// console.log(url)
return await this.httpService
.getRequest(url)
.then((res) => {
return res.text;
})
.catch(() => {
return "";
});
},
/**
* بارگذاری متن برای مقایسه
* @param {String} text - متنی که باید بارگذاری شود.
*/
loadText(text) {
this.text2Compare = text;
let vm = this;
this.closeModal();
this.getEntityText(this.routeId).then((text) => {
vm.text1Compare = text;
vm.mainComponentName = "EntityCompareText2";
});
},
/**
* مدیریت مقایسه فایل ورد.
* @param {String} text - متنی که باید مقایسه شود.
*/
wordFile(text) {
this.text2Compare = text;
this.closeModal();
this.getEntityText(this.routeId).then((text) => {
this.text1Compare = text;
this.mainComponentName = "EntityCompareText2";
});
},
/**
* مدیریت مقایسه متن.
* @param {String} id - شناسه متنی که باید مقایسه شود.
*/
compareText(id) {
this.mainComponentName = "EntityCompareText2";
this.closeModal();
let vm = this;
this.getEntityText(id).then((text) => {
vm.text2Compare = text;
vm.getEntityText(vm.routeId).then((text) => {
vm.text1Compare = text;
vm.mainComponentName = "EntityCompareText2";
});
});
},
/**
* بستن نمای مقایسه.
*/
closeCompare() {
if (this.activeEntityViewSchemaGetter?.tabs) {
switch (this.isPrevComponent) {
case "text":
this.setActiveTab(this.activeEntityViewSchemaGetter.tabs[0]);
break;
case "gantt":
this.setActiveTab(this.activeEntityViewSchemaGetter.tabs[4]);
break;
default:
this.setActiveTab(this.activeEntityViewSchemaGetter.tabs[0]);
}
}
},
/**
* بستن مدال.
*/
closeModal() {
// $("#base-modal").modal("hide");
this.slotComponentName = undefined;
this.modalTitle = undefined;
this.description = undefined;
this.listData = [];
this.valueResearchModal = {};
setTimeout(() => {
this.uploadForFirstTime = false;
}, 500);
},
closeAfterSaving() {
this.renderResearch++;
this.closeModal();
},
saveBaseModal() {},
/**
* باز کردن مدال با کامپوننت و عنوان مشخص.
* @param {String} componentName - نام کامپوننتی که باید در مدال نمایش داده شود.
* @param {String} title - عنوان مدال.
* @param {String} [description=""] - توضیحات مدال.
* @param {String} [key=undefined] - کلید برای مدال.
*/
openModal(componentName, title, description, key = undefined) {
this.slotComponentName = componentName;
this.modalTitle = title;
this.description = description;
this.uploadForFirstTime = true;
// setTimeout(() => {
// $("#base-modal").modal({ backdrop: "static", keyboard: false }, "show");
// }, 500);
},
/**
* تنظیم نمایش موارد مشابه.
* @param {Boolean} [isShow=true] - نشان میدهد که آیا باید موارد مشابه نمایش داده شوند یا خیر.
*/
setShowSimilar(isShow = true) {
this.showSimilar = isShow;
},
/**
* نمایش تجزیهگر در صورت صحیح بودن شرط.
* @param {Boolean} isShow - نشان میدهد که آیا باید تجزیهگر نمایش داده شود یا خیر.
*/
showParserIfTrue(isShow) {
if (!isShow) {
this.tempComponentName = this.mainComponentName;
this.mainComponentName = "EntityRepetitionWords";
} else {
this.mainComponentName = this.tempComponentName ?? "EntityText";
}
},
/**
* مدیریت دکمه دایرهای.
*/
circleButton() {
this.hideCircleButton = true;
this.isVisiablePanel = true;
},
/**
* مدیریت رویداد کامپوننت جدید.
* @param {Event} event - شیء رویداد.
*/
NewComponent(event) {
this.newComponent = event;
if (event == true) {
this.statusPage = 2;
} else {
this.statusPage = 1;
}
},
/**
* مدیریت رویداد ویرایش وضعیت.
* @param {Event} event - شیء رویداد.
*/
statusEdit(event) {
if (event == false) {
this.statusPage = 1;
}
},
/**
* مدیریت رویداد انتخاب سطح آیتم.
* @param {Event} event - شیء رویداد.
*/
selectedItemlevel(event) {
this.editItem = event;
},
/**
* مدیریت رویداد ویرایش کامپوننت.
* @param {Event} event - شیء رویداد.
*/
EditComponent(event) {
this.editComponent = event;
if (event.EditComponent == true || event.EditComponent == false) {
this.statusPage = 2;
} else {
this.statusPage = 1;
}
},
/**
* تنظیم تب فعال.
* @param {Object} tab - شیء تب که باید فعال شود.
*/
setActiveTab(tab) {
this.activeTabSetter(tab);
// close text headings and search section.
this.showListHeadline({
isSearchMode: false,
isHeadingMode: false,
});
if (this.showSimilar) this.showSimilar = tab?.key == "content";
this.mainComponentName = "EntityText";
if (tab?.key == "content") {
// if (this.activeEntityViewSchemaGetter?.key == this.routeKey)
if (this.activeEntityViewSchemaGetter?.type)
this.mainComponentName = this.activeEntityViewSchemaGetter?.type;
else this.mainComponentName = "EntityText";
} else if (tab.key == "meta") {
this.mainComponentName = "PropertyBuilder";
} else if (tab.key == "parser") {
this.mainComponentName = "EntityRepetitionWords";
} else if (tab.key == "gantt") {
this.mainComponentName = "EntityChartGantt";
} else if (tab.key == "graph") {
this.mainComponentName = "EntityChartGraph";
} else if (tab.key == "compare") {
this.mainComponentName = "EntityQaSection";
}
},
/**
* تنظیم وضعیت صفحه به ۱ برای ویرایش واگذاری.
*/
waiverEdit() {
this.statusPage = 1;
},
/**
* دریافت اطلاعات schema.
*/
getSchemas() {
let url = repoUrl() + entityApi.schema.list;
this.httpService
.postRequest(url, {
organ: this.organNameGetter,
system: "entityView",
build_state: buildState(),
})
.then((response) => {
const routeParamsKey = this.routeKey;
let schemaBasedOnRouteKeyIndex = response.data.entityView.findIndex(
(item) => item.key == routeParamsKey
);
schemaBasedOnRouteKeyIndex =
schemaBasedOnRouteKeyIndex == -1 ? 0 : schemaBasedOnRouteKeyIndex;
this.entityViewSchemaSetter(response.data.entityView);
this.activeEntityViewSchemaSetter(
response.data.entityView[schemaBasedOnRouteKeyIndex]
);
this.activeTabSetter(
response.data.entityView[schemaBasedOnRouteKeyIndex].tabs[0]
);
this.renderAutoComplation++;
this.updateMainContent();
});
},
/**
* تغییر وضعیت نمایش منوی سایدبار.
*/
toggleSidebarMenu() {
this.$store.commit("TOGGLE_SIDEBAR_MENU");
},
/**
* تغییر وضعیت نمایش پنل لیست.
*/
showToggleListPanel() {
this.showListPanel = !this.showListPanel;
},
/**
* دریافت مقدار یک داده بر اساس کلید و نوع آن (در صورت وجود).
* @param {String} key - کلید داده مورد نظر.
* @param {String} [type=""] - نوع داده (اختیاری).
* @returns {String} - مقدار داده.
*/
// getDataValue(key, type = "") {
// let value = "";
// if (this.selectedItemEntityGetter[key]) {
// value = this.selectedItemEntityGetter[key];
// if (type == "date") value = this.datefa(value);
// }
// return value;
// },
/**
* دریافت اطلاعات موجودیت بر اساس نوع و شناسه آن.
* @param {String} _entityType - نوع موجودیت.
* @param {String} _entityId - شناسه موجودیت.
*/
getEntityInfo(_entityType, _entityId) {
if (this.fetchingData) return;
this.fetchingData = true;
this.entity_type = _entityType;
if (_entityType == "qasection" || _entityType == "rgsection") {
//در این حالت استفاده ندارد تست کردم
// // برای تنظیم داده های هدر در تبهای مختلف غیر متن نیاز هست
// let url = repoUrl() + repoApi.entity.qanonList;
// url = url.replace("@index_key", _entityType);
// url = url.replace("@parent_key", "qanon_id");
// url = url.replace("@parent_id", _entityId);
// url = url.replace("@from", 0);
// url = url.replace("@countInPage", 1);
// this.httpService.getRequest(url).then((response) => {
// if (response.hits.total.value > 0) {
// let res = response.hits.hits[0];
// this.entity = { ...res, ...res._source };
// this.SET_ITEM_ENTITY(this.entity);
// setDocumentTitle(this.selectedItemEntityGetter);
// }
// this.fetchingData = false;
// });
} else {
let url = repoUrl() + repoApi.public.get;
url = url.replace("{{index_key}}", _entityType);
url = url.replace("{{entity_id}}", _entityId);
this.httpService.getRequest(url).then((res) => {
this.entity = { ...res, ...res._source };
this.SET_ITEM_ENTITY(this.entity);
this.fetchingData = false;
useHead({
title: this.selectedItemEntityGetter,
});
});
}
},
/**
* دریافت اطلاعات لیست موجودیتها از localStorage در صورت عدم وجود در getter.
*/
getListInformation() {
const myList = localStorage.getItem("myList");
this.jsonList = JSON.parse(myList);
const myItem = localStorage.getItem("myItem");
this.firstItem = JSON.parse(myItem);
this.SET_LIST_ENTITY(this.jsonList);
if (this.selectedItemEntityGetter === undefined) {
this.SET_ITEM_ENTITY(this.firstItem);
useHead({
title: this.selectedItemEntityGetter,
});
// setDocumentTitle(this.selectedItemEntityGetter);
}
},
/**
* بهروزرسانی تاریخ در عنصر با کلاس begin_date.
*/
updateDate() {
const myelement = document.getElementsByClassName("begin_date");
const date = myelement[0].innerHTML;
},
/**
* تنظیم نام کامپوننت پنل بر اساس مسیر جاری.
*/
setPanelComponentName() {
// if (this.$route.name == "entityEdit") {
// this.panelComponentName = "EntityTreeList";
// } else
if (this.$route.name == "navigationView") {
this.panelComponentName = "navigation";
} else if (this.$route.name == "entityResearch") {
this.panelComponentName = "research";
} else {
this.panelComponentName = this.$route.name;
}
},
setShowListRight(mainComponent = undefined) {
let routeName = this.$route.name;
if (mainComponent === "EntityChartGantt") {
this.showListRight = false;
} else if (routeName == "showEntity") {
this.showListRight = false;
} else if (routeName == "navigation" && !this.listEntityGetter) {
this.showListRight = false;
} else if (routeName == "research") {
this.showListRight = false;
} else this.showListRight = true;
},
/**
* دریافت کامپوننت پنل بر اساس مسیر جاری.
* @returns {String|null} - نام کامپوننت پنل.
*/
getPanelComponent() {
this.setShowListRight();
if (!this.showListRight) return null;
if (
this.activeEntityViewSchemaGetter?.entityPanel &&
this.activeEntityViewSchemaGetter?.entityPanel[this.$route.name]
)
return this.activeEntityViewSchemaGetter?.entityPanel[this.$route.name];
else return this.activeEntityViewSchemaGetter?.entityPanel[0];
},
/**
* بهروزرسانی محتوای اصلی بر اساس کلید موجود در مسیر.
*/
updateMainContent() {
if (this.routeKey) {
if (this.activeEntityViewSchemaGetter?.key == this.routeKey)
this.mainComponentName = this.activeEntityViewSchemaGetter?.type;
else this.mainComponentName = "EntityText";
} else this.mainComponentName = "EntityText";
},
/**
* یافتن ایندکس و بازگرداندن نام کامپوننت بر اساس کلید.
* @param {String} keyName - کلید موجودیت.
* @returns {String} - نام کامپوننت.
*/
findIndexAndReturnComponentName(keyName) {
const contentIndex = this.entityViewSchemaGetter?.findIndex(
(item) => item.key == keyName
);
return this.entityViewSchemaGetter[contentIndex]?.type;
},
/**
* پنهان کردن پنل.
*/
hidePanel() {
this.hideCircleButton = false;
this.isVisiablePanel = false;
},
/**
* تغییر حالت مقایسه.
* @param {Boolean} item - وضعیت مقایسه.
*/
changeCompare(item) {
if (!item) {
this.copmareSideBySide = false;
this.compareLineByLine = true;
} else {
this.copmareSideBySide = true;
this.compareLineByLine = false;
}
},
closeSearchMode() {
this.isSearchMode = false;
},
closeTreelistMode() {
this.isHeadingMode = false;
},
getDataTree() {
if (buildName() === "majles") {
let url = repoUrl() + buildName() + "/" + entityApi.edit.treeList;
url = url.replace("@index_key", this.routeKey);
url = url.replace("@qanon_id", this.routeId);
this.httpService.getRequest(url).then((res) => {
this.dataTree = res.data;
// this.loading = false;
});
} else if (buildName() === "hadith") {
let id = this.routeId;
let url = repoUrl() + libraryApi.tree.getDataTree;
url = url.replace("@offset", 0);
url = url.replace("@limit", 500);
url = url.replace("@vol_id", id);
url = url.replace("@q", "none");
this.httpService.getRequest(url).then((res) => {
this.dataTree = this.convertToTree(res.hits.hits);
// this.loading = false;
});
}
},
/**
* تبدیل دادههای خطی به ساختار درختی.
* @param {Array} rawData - آرایهای از دادههای ورودی که باید به ساختار درختی تبدیل شوند.
* @returns {Array} - ساختار درختی شامل آیتمهای سطح اول و زیرآیتمهایشان.
*/
convertToTree(rawData) {
let prevlevel = -1; // سطح قبلی برای مقایسه (مقدار اولیه -1 به معنای بدون سطح قبلی)
let pathItems = []; // آرایه‌ای برای ذخیره مسیر آیتم‌ها در ساختار درختی
let prevItem = undefined; // آیتم قبلی که در حال پردازش است
let list = []; // لیست نهایی که شامل آیتم‌های سطح اول درخت است
rawData.forEach((el) => {
let jumpPage = el._source?.meta?.page;
// استخراج سطح و ایجاد آیتم جدید
let level = el._source?.meta?.level;
let item = {
id: el._id,
text: el._source?.content,
jumpPage: jumpPage,
children: [],
};
// قرار دادن آیتم در ساختار درختی بر اساس سطح آن
if (prevlevel == -1 || level == 1) {
// اگر این اولین آیتم است یا سطح آن 1 است، به سطح اول اضافه می‌شود
list.push(item);
pathItems.push(item);
} else if (level > prevlevel) {
// اگر سطح فعلی بیشتر از سطح قبلی باشد، آیتم فرزند آیتم قبلی می‌شود
prevItem.children.push(item);
pathItems.push(item);
} else if (level == prevlevel) {
// اگر سطح فعلی برابر با سطح قبلی باشد، آیتم به خواهر/برادر آیتم قبلی اضافه می‌شود
if (pathItems.length > 1) {
pathItems[pathItems.length - 2].children.push(item);
}
} else {
// اگر سطح فعلی کمتر از سطح قبلی باشد
let diff = prevlevel - level; // اختلاف سطح فعلی و قبلی
if (pathItems.length > diff + 1) {
pathItems[pathItems.length - 1 - diff].children.push(item);
}
}
// به‌روزرسانی مقادیر قبلی برای پردازش آیتم بعدی
prevlevel = level;
prevItem = item;
});
return list; // بازگرداندن ساختار درختی نهایی
},
chartGanttClickNode(event) {
this.openModal("EntityQaSection", event.name, "");
// .then(
// () => {
// // this.name = event.name;
// // this.y = event.y;
// // this.getChartTreeItems(this.name, this.y);
// }
// );
},
linkedTitleClick(rowItem, tableColumn, index) {
this.sectionItem = rowItem;
setTimeout(() => {
this.openModal("EntityQaHistory", "وضعیت", "");
}, 500);
},
columnTitleClick(tableColumn) {
console.log("5555555555");
this.listItemsCompare = tableColumn;
let id = this.routeId;
let payload = {
qanon_id: id,
date: tableColumn.title,
};
let url = entityApi.chart.version;
let key = this.activeEntityViewSchemaGetter?.key;
url = url.replace("@index_key", key);
this.httpService.postRequest(url, payload).then((res) => {
this.versionItem = res.data;
let data = res.data;
data.forEach((element) => {
this.text1Compare = element._source.content;
this.text2Compare = element._source.content;
});
this.openModal("EntityShowVersionsQa", tableColumn.titleTooltip, "");
});
},
handlerIconClick(tableColumn) {
this.listItemsCompare = tableColumn;
this.openModal("EntitiyModalCompareVersionQa", "مقایسه نسخه ها");
},
compareVersionsQanon(versionOneContent, versionTwoContent) {
this.text1Compare = versionOneContent;
this.text2Compare = versionTwoContent;
this.isPrevComponent = "gantt";
this.closeModal();
this.mainComponentName = "EntityCompareText2";
},
showCompareModal() {
this.isPrevComponent = "text";
this.openModal("SelectEntityText", "انتخاب متن مقایسه");
},
editSections() {
this.openModal("DraftImportEffectModal", "ویرایش");
},
chartGanttClickNode(event) {
this.openModal("EntityQaSection", event.name, "");
// .then(
// () => {
// // this.name = event.name;
// // this.y = event.y;
// // this.getChartTreeItems(this.name, this.y);
// }
// );
},
linkedTitleClick(rowItem, tableColumn, index) {
this.sectionItem = rowItem;
setTimeout(() => {
this.openModal("EntityQaHistory", "وضعیت", "");
}, 500);
},
columnTitleClick(tableColumn) {
this.listItemsCompare = tableColumn;
let id = this.$route.params.id;
let payload = {
qanon_id: id,
date: tableColumn.title,
};
let url = entityApi.chart.version;
let key = this.activeEntityViewSchemaGetter?.key;
url = url.replace("@index_key", key);
this.httpService.postRequest(url, payload).then((res) => {
this.versionItem = res.data;
let data = res.data;
data.forEach((element) => {
this.text1Compare = element._source.content;
this.text2Compare = element._source.content;
});
this.openModal("EntityShowVersionsQa", tableColumn.titleTooltip, "");
});
},
handlerIconClick(tableColumn) {
this.listItemsCompare = tableColumn;
this.openModal("EntitiyModalCompareVersionQa", "مقایسه نسخه ها");
},
compareVersionsQanon(versionOneContent, versionTwoContent) {
this.text1Compare = versionOneContent;
this.text2Compare = versionTwoContent;
this.isPrevComponent = "gantt";
this.closeModal();
this.mainComponentName = "EntityCompareText2";
},
showCompareModal() {
this.isPrevComponent = "text";
this.openModal("SelectEntityText", "انتخاب متن مقایسه");
},
editSections() {
this.openModal("DraftImportEffectModal", "ویرایش");
},
},
components: {
AutoComplation: defineAsyncComponent(() =>
import("../../../../../../components/global/AutoComplation.vue")
),
EntityQaRelation: defineAsyncComponent(() =>
import("~/components/entity/components/EntityQaRelation.vue")
),
ComponentTextFish: defineAsyncComponent(() =>
import("~/components/entity/components/ComponentTextFish.vue")
),
ComparisonEntity: defineAsyncComponent(() =>
import("~/components/entity/components/ComparisonEntity.vue")
),
SelectEntityText: defineAsyncComponent(() =>
import("~/components/entity/components/SelectEntityText.vue")
),
EntitySelectTerm: defineAsyncComponent(() =>
import("~/components/entity/components/EntitySelectTerm.vue")
),
EntityText: defineAsyncComponent(() =>
import("~/components/entity/components/EntityText.vue")
),
EntityMqSection: defineAsyncComponent(() =>
import("~/components/entity/components/EntityMqSection.vue")
),
EntityQaSection: defineAsyncComponent(() =>
import("~/components/entity/components/EntityQaSection.vue")
),
EntityChartGraph: defineAsyncComponent(() =>
import("~/components/entity/components/EntityChartGraph.vue")
),
EntityChartGantt: defineAsyncComponent(() =>
import("~/components/entity/components/EntityChartGantt.vue")
),
EntityCompareText: defineAsyncComponent(() =>
import("~/components/entity/components/EntityCompareText.vue")
),
EntityCompareText2: defineAsyncComponent(() =>
import("~/components/entity/components/EntityCompareText2.vue")
),
EntitySimilar: defineAsyncComponent(() =>
import("~/components/entity/components/EntitySimilar.vue")
),
EntitySanad: defineAsyncComponent(() =>
import("~/components/entity/components/EntitySanad.vue")
),
EntityVoice: defineAsyncComponent(() =>
import("~/components/entity/components/EntityVoice.vue")
),
EntityVideo: defineAsyncComponent(() =>
import("~/components/entity/components/EntityVideo.vue")
),
EntityFile: defineAsyncComponent(() =>
import("~/components/entity/components/EntityFile.vue")
),
EntityRepetitionWords: defineAsyncComponent(() =>
import("~/components/entity/components/EntityRepetitionWords.vue")
),
LibraryText: defineAsyncComponent(() =>
import("~/components/library/components/LibraryText.vue")
),
EntityQaHistory: defineAsyncComponent(() =>
import("~/components/entity/components/EntityQaHistory.vue")
),
EntityShowVersionsQa: defineAsyncComponent(() =>
import("~/components/entity/components/EntityShowVersionsQa.vue")
),
EntitiyModalCompareVersionQa: defineAsyncComponent(() =>
import("~/components/entity/components/EntitiyModalCompareVersionQa.vue")
),
UserHistory: defineAsyncComponent(() =>
import("~/components/entity/sidebar-panels/UserHistory.vue")
),
TextSearch: defineAsyncComponent(() =>
import("~/components/entity/sidebar-panels/TextSearch.vue")
),
NavigationView: defineAsyncComponent(() =>
import("~/components/entity/sidebar-panels/Navigation.vue")
),
Navigation: defineAsyncComponent(() =>
import("~/components/entity/sidebar-panels/Navigation.vue")
),
Research: defineAsyncComponent(() =>
import("~/components/entity/sidebar-panels/Research.vue")
),
EntityTreeList: defineAsyncComponent(() =>
import("~/components/entity/sidebar-panels/EntityTreeList.vue")
),
PropertyBuilder: defineAsyncComponent(() =>
import("~/components/other/PropertyBuilder.vue")
),
TagsEdit: defineAsyncComponent(() =>
import("~/components/other/TagsEdit.vue")
),
DraftImportEffectModal: defineAsyncComponent(() =>
import("~/components/entity/modals/DraftImportEffectModal.vue")
),
},
};
</script>
<style scoped lang="scss">
.button-cloce {
position: relative;
right: 3em;
top: 1em;
z-index: 100;
.btn_close {
border-radius: 50%;
font-size: 0.8rem;
width: 2.5em;
height: 2.5em;
box-shadow: 0px 0px 7px 1px #eee;
display: flex;
justify-content: center;
align-items: center;
transform: translateX(1.5em);
background-color: #eee;
&:hover {
filter: brightness(0.8);
}
}
}
.nav-tabs-container {
display: flex;
justify-content: center;
}
.filter-list-container {
// padding-top: 0.5em;
// // position: fixed;
// z-index: 9;
// width: 20em;
height: 100dvh;
.main-filter {
display: none;
}
.mobile-mode {
display: flex;
justify-content: flex-end;
.btn {
border-radius: 50%;
// font-size: 0.7rem;
width: 2.5em;
height: 2.5em;
box-shadow: 0px 0px 7px 1px #eee;
display: flex;
justify-content: center;
align-items: center;
transform: translateX(1.5em);
background-color: #eee;
&:hover {
filter: brightness(0.8);
}
}
}
&.expanded {
top: 0;
bottom: 0;
background: #fff;
justify-content: center;
box-shadow: -1px 0px 7px 1px #eee;
// width: 20em;
.main-filter {
display: block;
height: 90dvh;
}
}
}
.main-filter {
padding: 0 1em;
// overflow: auto;
}
.component_page {
height: calc(100dvh - 13em);
overflow: auto;
padding-left: 1em;
overflow-x: hidden;
scrollbar-width: thin;
scrollbar-color: #ccc #eee;
}
.entity-tree-list {
border-radius: 0.5em;
overflow-y: auto;
box-shadow: 0 0.4688rem 2.1875rem rgba(4, 9, 20, 0.03),
0 0.9375rem 1.4063rem rgba(4, 9, 20, 0.03),
0 0.25rem 0.5313rem rgba(4, 9, 20, 0.03),
0 0.125rem 0.1875rem rgba(4, 9, 20, 0.03);
}
@media (max-width: 575.98px) {
.component_page {
height: calc(100dvh - 15em);
padding-left: 0.5em;
}
.button-cloce {
right: 2em;
}
.filter-list-container {
margin-right: -1em;
}
.main-filter {
width: 20em !important;
}
}
@media only screen and (min-width: 576px) and (max-width: 767.98px) {
.component_page {
height: calc(100dvh - 16em);
}
.filter-list-container {
margin-right: -1em;
}
.main-filter {
width: 20em !important;
}
}
@media only screen and (min-width: 768px) and (max-width: 991.98px) {
.component_page {
height: calc(100dvh - 16em);
}
.filter-list-container {
width: 20em !important;
margin-right: -1em;
}
}
@media only screen and (min-width: 992px) and (max-width: 1199.98px) {
.main-filter {
height: calc(100dvh - 11em);
// overflow: auto;
}
.component_page {
height: calc(100dvh - 15em);
}
}
@media (min-width: 1200px) {
.main-filter {
height: calc(100dvh - 5em);
// overflow: auto;
}
}
</style>