base_ui/stores/commonStore.ts

580 lines
18 KiB
TypeScript
Raw Normal View History

2025-02-01 09:34:55 +00:00
import { defineStore } from "pinia";
import { useAuthStore } from "./authStore";
import permitApis from "~/apis/permitApi";
import authApi from "~/apis/authApi";
import {useStorage} from "@vueuse/core";
import type {
JahatSection,
Book,
TempData,
AuthorizedPages,
Schemas,
ActiveSchema,
ForwardItem,
Selectedlists,
Permission,
System,
User,
lastRecord,
Pagination,
} from "~/types/commonTypes";
export const useCommonStore = defineStore("commonStore", {
persist: {
storage: piniaPluginPersistedstate.localStorage()
},
state: () => ({
count: 0 as number,
name: "" as string,
jahatSection: [] as JahatSection,
tokenIsValid: false,
pwaInstallPromptEvent: null,
axiosBaseUrl: null,
componentName: "",
show_base_modal: false,
book: {} as Book,
tempData: {} as TempData,
collapsed: +import.meta.env.VITE_BUILD_STATE as
| number
| boolean
| undefined,
show_form: false,
is_edit_mode: false,
refresh_form: false,
user_permissions: [] as string[],
authorized_pages: [] as AuthorizedPages,
isDesktop: false,
isMobile: false,
userLastState: null,
schemas: {} as Schemas,
activeSchema: {} as ActiveSchema,
forwardItem: {} as ForwardItem,
selectedlists: {} as Selectedlists,
sidebarListStatus: false,
userHistory: {},
lastRecord: {} as lastRecord | undefined,
lang: "fa" as string,
fontData: undefined,
pagination: {
pages: 0,
total: 0,
page: 1,
offset: 0,
limit: 10,
} as Pagination,
systems: [] as System[],
activeSystem: {} as System,
appVersion: "" as string,
isShowHilight: true as boolean,
sidebarMenu: {},
}),
getters: {
doubleCount: (state) => state.count * 2,
loginMicroServiceName: () => import.meta.env.VITE_AUTH,
messageMircroServiceName: () => import.meta.env.VITE_MESSAGE,
keyValueMircroServiceName: () => import.meta.env.VITE_KEY_VALUE,
permitMircroServiceName: () => import.meta.env.VITE_PERMIT,
repoMircroServiceName: () => import.meta.env.VITE_REPO,
logMircroServiceName: () => import.meta.env.VITE_LOG,
listMircroServiceName: () => import.meta.env.VITE_LIST,
getForwardItem: (state) => state.forwardItem,
activeSchemaGetter: (state) => state.activeSchema,
schemasGetter: (state) => state.schemas,
organNameGetter: () => import.meta.env.VITE_BUILD_NAME,
sectionsGetter: (state) => state.jahatSection,
getTokenIsValid: (state) => state.tokenIsValid,
getPwaInstallPromptEvent: (state) => state.pwaInstallPromptEvent,
getUserLastState: (state) => state.userLastState,
getAxiosBaseUrl: (state) => state.axiosBaseUrl,
authorizedPagesGetter: (state) => state.authorized_pages,
userPermisionGetter: (state) => state.user_permissions,
getBook: (state) => state.book,
getComponentName: (state) => state.componentName,
getShowBaseModal: (state) => state.show_base_modal,
isSidebarCollapsed: (state) => state.collapsed,
getPanelStatus: (state) => state.show_form,
getRefreshForm: (state) => state.refresh_form,
isDesktopGetter: (state) => state.isDesktop,
isMobileGetter: (state) => state.isMobile,
selectedlistsGetter: (state) => state.selectedlists,
sidebarListStatusGetter: (state) => state.sidebarListStatus,
sidebarMenuGetter: (state) => state.sidebarMenu,
userHistoryGetter: (state) => state.userHistory,
lastRecordGetter: (state) => state.lastRecord,
appVersionGetter: (state) => state.appVersion,
systemsGetter: (state) => state.systems,
activeSystemGetter: (state) => state.activeSystem,
langGetter: (state) => state.lang,
fontDataGetter: (state) => state.fontData,
paginationGetter: (state) => state.pagination,
isShowHilightGetter: (state) => state.isShowHilight,
},
actions: {
activeSchemaSetter(activeSchema: {}) {
if (this.activeSchema) this.activeSchema = activeSchema;
},
schemasSetter(schemas: any[]) {
this.schemas = schemas;
},
sidebarCollapsedSetter(isCollapsed: boolean) {
this.collapsed = isCollapsed;
},
SET_FORWARD_ITEM(forwardItem: ForwardItem) {
this.forwardItem = forwardItem;
},
SET_SECTIONS(jahatSection: JahatSection) {
this.jahatSection = jahatSection;
},
// SET_TOKEN_IS_VALID_EVENT(tokenIsValid: boolean) {
// this.tokenIsValid = tokenIsValid;
// },
SET_PWA_INSTALL_PROMPT_EVENT(event = null) {
this.pwaInstallPromptEvent = event;
},
// SET_USER_LAST_STATE(userLastState: null) {
// this.userLastState = userLastState;
// },
SET_IS_DESKTOP(isDesktop: boolean) {
this.isDesktop = isDesktop;
},
SET_IS_MOBILE(isMobile: boolean) {
this.isMobile = isMobile;
},
TOGGLE_SIDEBAR_MENU() {
this.collapsed = !this.collapsed;
},
BOOK_DATA(payload: Book) {
this.book = payload;
},
COMPONENT_NAME(payload: string) {
this.componentName = payload;
},
SHOW_BASE_MODAL(payload: boolean) {
this.show_base_modal = payload;
},
REFRESH_FORM() {
this.refresh_form = !this.refresh_form;
},
TOGGLE_PANEL(status: boolean) {
this.show_form = status;
},
SELECTED_LISTS(selectedlists: Selectedlists) {
this.selectedlists = selectedlists;
},
// SET_SIDEBAR_LIST_STATUS(newState = undefined) {
// this.sidebarListStatus =
// newState != undefined || newState != null
// ? newState
// : !this.sidebarListStatus;
// },
SET_AUTHORIZED_PAGES(pages: Permission[] = []) {
const AuthorizedPages: Set<string> = new Set();
if (pages && pages.length) {
pages.forEach((item: Permission) =>
AuthorizedPages.add(item.section_tag)
);
}
// this.authorized_pages = AuthorizedPages as Set<string>;
this.authorized_pages = Array.from(AuthorizedPages);
},
SET_USER_PERMISSIONS(permissions: Permission[] = []) {
const permissionArray: string[] = [];
if (permissions && permissions.length) {
permissions.forEach((item: Permission) =>
permissionArray.push(item.action_tag)
);
}
this.user_permissions = permissionArray;
// localStorage.setItem('user_permissions', JSON.stringify(permissionArray))
},
increment() {
this.count++;
},
// easily reset state using `$reset`
clearUser() {
this.$reset();
},
chatSidebarListStatusReactor(newState: boolean) {
// this.SET_SIDEBAR_LIST_STATUS = newVal;
this.sidebarListStatus =
newState != undefined || newState != null
? newState
: !this.sidebarListStatus;
},
async getState() {
const settingsApi = (await import("~/apis/adminApi")).default;
const url = settingsApi.user.get;
try {
const response = await useAPI(url, {
baseURL: import.meta.env.VITE_REPO_BASE_URL,
});
this.userLastState = JSON.parse(response?._source?.user_last_state);
return this.getUserLastState;
} catch (error) {
return error;
}
// const httpService = new HttpService(import.meta.env.VITE_REPO_BASE_URL);
// const url = settingsApi.user.get;
// return await httpService.getRequest(url).then((res: any) => {
// this.userLastState = JSON.parse(res?._source?.user_last_state);
// return this.getUserLastState;
// });
// const url = adminApi.admin.get.replace(
// "{{system}}/",
// "user_log/user_last_state"
// );
// return await httpService.getRequest(url).then((res) => {
// this.SET_USER_LAST_STATE", JSON.parse(res.hits.hits[0]._source.value));
// return getters.getUserLastState;
// });
},
// async storeState(userLastState: any) {
// const httpService = new HttpService(import.meta.env.VITE_REPO_BASE_URL);
// const settingsApi = require("~/apis/settingsApi");
// const payload = {
// user_id: getters.currentUser.user_id,
// username: getters.currentUser.username ?? null,
// project: "user_log",
// key_option: "user_last_state",
// value: JSON.stringify(userLastState),
// };
// return await httpService.postRequest(adminApi.admin.save, payload);
// const payload = {
// user_last_state: userLastState,
// };
// const url = settingsApi.user.setKey_object.replace(
// "{{key}}",
// "user_last_state"
// );
// return await httpService.postRequest(url, payload);
// },
setBodyClass(customClass: string | null = null) {
if (customClass) {
document.querySelector("body")?.classList.add(customClass);
} else {
const activeSystem = this.activeSystemGetter;
if (
activeSystem &&
activeSystem.link &&
location.pathname.includes(activeSystem.link)
) {
document
.querySelector("body")
?.classList.add(`${activeSystem.link}-system`);
} else {
if (this.systemsGetter) {
this.setNewSystem(this.systemsGetter);
} else {
this.getSystems().then((systems: any) => {
this.setNewSystem(systems);
});
}
}
}
},
// setNewSystem<Type>(systems: Type): void {
setNewSystem(systems: System[]) {
const extractedSystemName = location.pathname
.match(/\/(.*)\/{0,1}/)
?.pop()
?.split("/");
let result: System | null = null;
if (extractedSystemName && extractedSystemName.length > 0) {
result = systems.find(
(item) => item.link === extractedSystemName[0]
) as System;
}
if (result) {
this.activeSystem = result;
const bodyElement = document.querySelector("body");
if (bodyElement) {
bodyElement.classList.add(result.link + "-system");
}
}
},
async getSystems() {
const apiName = import.meta.env.VITE_API_NAME;
const baseUrl = import.meta.env.VITE_BASE_URL;
return await $fetch(permitApis.projects.list, {
baseURL: baseUrl + apiName + import.meta.env.VITE_PERMIT_BASE_URL,
headers: {
Authorization: useStorage('id_token','').value,
},
method: "post",
})
.then((res: any) => {
const systems = this.systemsGetter;
if (!systems) {
// this.systemsSetter = res.data.data;
this.systems = res.data;
}
return res;
})
.catch((error) => {
throw createError({
...error,
statusMessage: `Could not fetch posts`,
});
});
// const httpService = axios.create({
// baseURL: import.meta.env.VITE_PERMIT_BASE_URL,
// headers: {
// Authorization: getToken(),
// },
// });
// return new Promise((resolve, reject) => {
// httpService
// .post(permitApis.projects.list)
// .then((res: resModelOne) => {
// const systems = this.systemsGetter;
// if (!systems) {
// // this.systemsSetter = res.data.data;
// this.systems = res.data;
// }
// // resolve(res.data.data);
// resolve(res.data);
// })
// .catch((err: any) => {
// reject(err);
// });
// });
},
async getUserPermissions(projectId = undefined) {
const authStore = useAuthStore();
const data = {
project_id: projectId ?? this.activeSystem.id,
user_id: authStore.currentUser.user_id,
};
try {
const res = await useAPI(permitApis.permissions.listUserPermission, {
baseURL: import.meta.env.VITE_AUTH_BASE_URL,
method: "POST",
body: formDataParamMaker(data),
// headers: {
// 'Content-Type': 'application/x-www-form-urlencoded',
// },
});
this.SET_USER_PERMISSIONS(res.data);
this.SET_AUTHORIZED_PAGES(res.data);
return res.data;
} catch (error) {
return error;
}
// const httpService = new HttpService(import.meta.env.VITE_PERMIT_BASE_URL);
// return new Promise((resolve, reject) => {
// httpService
// .formDataRequest(permitApis.permissions.listUserPermission, data)
// .then((res) => {
// this.SET_USER_PERMISSIONS = res.data;
// this.SET_AUTHORIZED_PAGES = res.data;
// resolve(res.data);
// })
// .catch(({ response }) => {
// reject(response);
// });
// });
},
async checkPermissions(permission = null) {
const authStore = useAuthStore();
return new Promise((resolve, reject) => {
// اگر قبلا لیست دسترسی ها دریافت شده بود.
if (this.userPermisionGetter && this.userPermisionGetter.length) {
if (
authStore.currentUser.user_level > 1 ||
this.userPermisionGetter.includes(permission)
) {
resolve(null);
} else {
reject();
}
} else {
this.getUserPermissions().then((res) => {
if (
authStore.currentUser.user_level > 1 ||
this.userPermisionGetter.includes(permission)
) {
resolve(null);
} else {
// mySwalToast({
// title: "خطا",
// html: "عدم دسترسی",
// icon: "error",
// });
reject();
}
});
}
});
},
checkPagePermissions(pageUrl = null) {
return new Promise((resolve, reject) => {
// اگر قبلا لیست دسترسی صفحات دریافت شده بود.
if (this.authorizedPagesGetter && this.authorizedPagesGetter.size > 0) {
if (
pageUrl == "" ||
pageUrl == "view" ||
this.authorizedPagesGetter.has(pageUrl)
)
resolve(null);
else reject();
} else {
this.getUserPermissionTags().then(() => {
if (
pageUrl == "" ||
pageUrl == "view" ||
this.authorizedPagesGetter?.has(pageUrl)
)
resolve(null);
else reject();
});
}
});
},
async getUserPermissionTags() {
try {
const res = await useAPI(permitApis.permissions.userPermissionTags, {
baseURL: import.meta.env.VITE_PERMIT_BASE_URL,
method: "POST",
body: {},
});
this.SET_USER_PERMISSIONS(res.data);
this.SET_AUTHORIZED_PAGES(res.data);
return res.data;
} catch (error) {
return error;
}
// const httpService = new HttpService(import.meta.env.VITE_PERMIT_BASE_URL);
// return new Promise((resolve, reject) => {
// httpService
// .formDataRequest(permitApis.permissions.userPermissionTags, {})
// .then((res) => {
// this.SET_USER_PERMISSIONS = res.data;
// this.SET_AUTHORIZED_PAGES = res.data;
// resolve(res.data);
// })
// .catch(({ response }) => {
// reject(response);
// });
// });
},
async checkTokenIsValid() {
const authStore = useAuthStore();
try {
const res = await useAPI(authApi.validateUser, {
baseURL: import.meta.env.VITE_AUTH_BASE_URL,
});
this.tokenIsValid = true;
let userData = {
["user_data"]: res.data?.data,
} as User;
if (
userData.user_data?.user_id == 3 ||
userData.user_data?.username == "Guest"
) {
authStore.setGuest(userData);
}
return res;
} catch (error) {
return error;
}
// const httpService = new HttpService(import.meta.env.VITE_AUTH_BASE_URL);
// return new Promise((resolve, reject) => {
// httpService
// .getRequest(authApi.validateUser)
// .then((res) => {
// // this.SET_TOKEN_IS_VALID_EVENT = true;
// this.tokenIsValid = true;
// // if(typeof res.data == "boolean")
// // this.SET_TOKEN_IS_VALID_EVENT', res.data)
// // else{
// // this.SET_TOKEN_IS_VALID_EVENT', true)
// // }
// let userData = {
// ["user_data"]: res.data?.data,
// } as User;
// if (
// userData.user_data?.user_id == 3 ||
// userData.user_data?.username == "Guest"
// ) {
// authStore.setGuest(userData);
// }
// resolve(null);
// })
// .catch(({ response }) => {
// reject(response);
// });
// });
},
sidebarMenuSetter(sidebarMenu: {}) {
this.sidebarMenu = sidebarMenu;
},
lastRecordSetter(lastRecord: lastRecord) {
this.lastRecord = lastRecord;
},
appVersionSetter(appVersion = "") {
this.appVersion = appVersion;
},
systemsSetter(systems: System[]) {
this.systems = systems;
},
activeSystemSetter(activeSystem: System) {
this.activeSystem = activeSystem;
},
langSetter(lang = "fa") {
this.lang = lang;
},
fontDataSetter(fontData = undefined) {
this.fontData = fontData;
},
paginationSetter(pagination: Pagination) {
this.pagination = pagination;
},
isShowHilightSetter(isShowHilight = true) {
this.isShowHilight = isShowHilight;
},
},
});