import { DBManager, ModuleInstruction, ObjectData } from '@cyklang/core'; import { createPinia, defineStore } from 'pinia'; import { VariableReact } from './cykReact'; import { ComponentModel, useCykLang } from './cykLang'; import loglevel from 'loglevel' const logger = loglevel.getLogger('cykStore.ts') logger.setLevel('debug') export interface UserState { user_id: number | undefined user_name: string | undefined user_email: string | undefined; user_access: string | undefined; user_appli: string | undefined; user_lang: string | undefined; user_company: number | undefined; co_label: string | undefined; accessJWT: string | undefined; logged: boolean; errorMsg: string | undefined; } export interface ModuleState { module_id: string | undefined module_dbname: string | undefined module_source: string | undefined module_description: string | undefined module_access: string | undefined source_edit: string | undefined } export interface LoggerState { output: string notifs: number } function padNumber(numb: number, length: number): string { return String(numb).padStart(length, '0') } const pinia = createPinia() const useStore = defineStore('cykStore', { state: () => ({ loginRoute: undefined as string | undefined, user: { user_name: undefined, logged: false } as UserState, module: {} as ModuleState, moduleInstruction: undefined as ModuleInstruction | undefined, menuList: undefined as ComponentModel | undefined, keyMenuData: 0, formTitle: '', variableReact: undefined as VariableReact | undefined, toolbarData: undefined as ObjectData | undefined, keyToolbarData: 0, loggerState: { output: '', notifs: 0 } as LoggerState, dbManager: undefined as DBManager | undefined }), actions: { async currentuser() { // get current user from server const { dbRemote } = useCykLang() try { const { user_id, user_email, user_name, user_access, user_lang, user_appli, user_company, co_label } = await dbRemote.apiServer.get('/api/currentuser') this.user.user_id = user_id this.user.user_email = user_email this.user.user_name = user_name this.user.user_access = user_access this.user.user_lang = user_lang this.user.user_appli = user_appli this.user.user_company = user_company this.user.co_label = co_label this.user.logged = (user_name) // logger.debug('cykStore.currentuser set to', this.user) } catch (err) { console.log(err) this.user.logged = false } }, loggerInit() { this.loggerState.output = ''; this.loggerState.notifs = 0 }, loggerOutput(line: string, level?: string) { const dtnow = new Date() const timestamp = padNumber(dtnow.getHours(), 2) + ':' + padNumber(dtnow.getMinutes(), 2) + ':' + padNumber(dtnow.getSeconds(), 2) + '.' + padNumber(dtnow.getMilliseconds(), 3) this.loggerState.output += timestamp + ' ' + (level !== undefined ? level : 'INFO ') + line + '\n' this.loggerState.notifs++ } } }); export function useCykStore() { return useStore(pinia) }