import { NavigationTree } from '@/@types/navigation' import appConfig from '@/configs/app.config' import { ApplicationConfigurationDto, ApplicationLocalizationRequestDto, } from '@/proxy/config/models' import { MenuDto } from '@/proxy/menus' import getChildren from '@/utils/navigation' import type { Action, Thunk } from 'easy-peasy' import { action, thunk } from 'easy-peasy' import { Injections, StoreModel } from '.' import { getLocalization, setLocalization } from '../services/localization.service' export type Texts = Record> export interface AbpConfigModel { config?: ApplicationConfigurationDto setConfig: Action getConfig: Thunk texts?: Texts setTexts: Action getTexts: Thunk menu: { mainMenu: NavigationTree[] } setMenu: Action getMenu: Thunk } export const abpConfigModel: AbpConfigModel = { config: undefined, setConfig: action((state, payload) => { state.config = payload }), getConfig: thunk(async (actions, payload, helpers) => { const service = helpers.injections.abpConfigService const result = await service.getAppConfig(payload) // AppConfig'den gelen culture mevcuttan farklı ise localizationları da al const newCulture = result.data?.localization.currentCulture.cultureName const currentCulture = helpers.getState().config?.localization.currentCulture.cultureName const isCultureDifferent = newCulture && currentCulture !== newCulture const isTextsEmpty = !helpers.getState().texts if (isCultureDifferent || isTextsEmpty) { await actions.getTexts({ cultureName: newCulture ?? currentCulture ?? appConfig.locale, onlyDynamics: false, }) } // Set HTML Lang document.documentElement.setAttribute('lang', newCulture ?? currentCulture ?? appConfig.locale) actions.setConfig(result.data) await actions.getMenu() }), texts: undefined, setTexts: action((state, payload) => { state.texts = payload }), getTexts: thunk(async (actions, payload, helpers) => { const service = helpers.injections.abpConfigService const result = await service.getLocalizations(payload) actions.setTexts(setLocalization(result.data)) }), menu: { mainMenu: [], }, setMenu: action((state, payload) => { // const formMenu: NavigationTree = { // key: 'form', // path: 'form/Form-0001', // title: 'Form', // type: 'item', // translateKey: 'form', // icon: 'form', // subMenu: [], // authority: [], // } // state.menu.mainMenu = [...payload, formMenu] state.menu.mainMenu = [...payload] }), getMenu: thunk(async (actions, _, { injections, getState, getStoreState }) => { const { signedIn } = getStoreState().auth.session if (!signedIn) { return } const result = await injections.menuService.getList({ sorting: 'order', skipCount: 0, maxResultCount: 1000, }) const texts = getState().texts const defaultResourceName = getState().config?.localization.defaultResourceName result.data.items?.forEach((menu: MenuDto) => { const displayName = '::' + menu.displayName menu.displayName = getLocalization(texts, defaultResourceName, displayName) }) const menu = getChildren(result.data.items ?? [], null) actions.setMenu(menu) /* const appsMenuConfig: NavigationTree[] = [ { key: 'apps', path: '', title: 'APPS', translateKey: 'nav.apps', icon: 'apps', type: NAV_ITEM_TYPE_TITLE, authority: [ADMIN, USER], subMenu: [ { key: 'apps.project', path: '', title: 'Project', translateKey: 'nav.appsProject.project', icon: 'project', type: NAV_ITEM_TYPE_COLLAPSE, authority: [ADMIN, USER], subMenu: [ { key: 'appsProject.dashboard', path: `${APP_PREFIX_PATH}/project/dashboard`, title: 'Dashboard', translateKey: 'nav.appsProject.dashboard', icon: '', type: NAV_ITEM_TYPE_ITEM, authority: [ADMIN, USER], subMenu: [], }, { key: 'appsProject.projectList', path: `${APP_PREFIX_PATH}/project/project-list`, title: 'Project List', translateKey: 'nav.appsProject.projectList', icon: '', type: NAV_ITEM_TYPE_ITEM, authority: [ADMIN, USER], subMenu: [], }, ], }, ], }, ] */ }), }