{"version":3,"file":"exp-uIFVHIKh.js","sources":["../../src/stores/exp.ts"],"sourcesContent":["import { defineStore } from 'pinia'\nimport { computed, ref } from 'vue'\nimport type { Experiment, ExperimentConfig } from '@/types/exp'\nimport { useProjStore } from '@/stores/proj'\nimport { useUserStore } from '@/stores/user'\n\n// 当前实验的状态管理\nexport const useExpStore = defineStore('exp', () => {\n const exp = ref()\n const projStore = useProjStore()\n const userStore = useUserStore()\n\n // 当前实验的cuid\n const cuid = computed(() => {\n if (!exp.value) throw new Error('exp is not ready when use cuid')\n return exp.value.cuid\n })\n\n // 当前实验状态\n const state = computed(() => exp.value?.state as Experiment['state'])\n\n // 当前用户在当前实验中的角色\n const role = computed(() => projStore.role)\n\n // 是否可以操作实验资源,放行者身份:\n // 1.组织所有者\n // 2.项目创建者\n // 3.实验创建者\n const canManage = computed(() => {\n const username = userStore.username\n const projUsername = projStore.proj?.user.username\n const expUsername = exp.value?.user.username\n return role.value === 'OWNER' || projUsername === username || expUsername === username\n })\n\n const privateUpdateState = (newState: Experiment['state'], finishedAt?: string) => {\n if (!exp.value) throw new Error('exp is not ready')\n exp.value.state = newState\n if (finishedAt) exp.value.finishedAt = finishedAt\n }\n\n // 更新实验配置\n const reconfig = (config: Partial) => {\n if (!exp.value) throw new Error('exp is not ready')\n exp.value.config = { ...exp.value.config, ...config } as ExperimentConfig\n }\n\n // 更新实验状态\n // 同时更新全局实验状态\n // 如果不传finishedAt则默认为当前时间\n const updateState = (newState: Experiment['state'], finishedAt?: string | null) => {\n // 只支持CRAHSED状态更新finishedAt\n // 伟大的产品经理在未来可能会要求将CRASHED改回RUNNING\n // if 判断一下总没错\n if (newState === 'RUNNING') throw new Error('cannot update state to RUNNING')\n privateUpdateState(newState, finishedAt || new Date().toISOString())\n projStore.updateState(cuid.value, newState)\n }\n // 更新实验名称\n const updateName = (newName: string) => {\n if (!exp.value) throw new Error('exp is not ready')\n exp.value.name = newName\n projStore.updateName(cuid.value, newName)\n }\n\n projStore.$onAction(({ name, args }) => {\n if (name == 'setShows') {\n if (!exp.value) return\n const arg = args[0]\n // 查询当前实验\n const currentExp = arg.find((item) => item.cuid === cuid.value)\n if (currentExp) privateUpdateState(currentExp.state)\n }\n })\n\n function $reset() {\n exp.value = undefined\n }\n\n return {\n exp,\n cuid,\n role,\n canManage,\n state,\n projStore,\n reconfig,\n updateState,\n updateName,\n $reset\n }\n})\n"],"names":["useExpStore","defineStore","exp","ref","projStore","useProjStore","userStore","useUserStore","cuid","computed","value","Error","state","_a","role","canManage","username","projUsername","proj","user","expUsername","_b","privateUpdateState","newState","finishedAt","$onAction","name","args","currentExp","find","item","reconfig","config","updateState","Date","toISOString","updateName","newName","$reset"],"mappings":"ubAOa,MAAAA,EAAcC,EAAY,OAAO,KAC5C,MAAMC,EAAMC,IACNC,EAAYC,IACZC,EAAYC,IAGZC,EAAOC,GAAiB,KAC5B,IAAKP,EAAIQ,MAAa,MAAA,IAAIC,MAAM,kCAChC,OAAOT,EAAIQ,MAAMF,IAAA,IAIbI,EAAQH,GAA8B,WAAM,OAAA,OAAAI,EAAAX,EAAIQ,YAAO,EAAAG,EAAAD,KAAA,IAGvDE,EAAOL,GAAS,IAAML,EAAUU,OAMhCC,EAAYN,GAAS,aACzB,MAAMO,EAAWV,EAAUU,SACrBC,EAAe,OAAAJ,EAAAT,EAAUc,WAAV,EAAAL,EAAgBM,KAAKH,SACpCI,EAAc,OAAAC,EAAAnB,EAAIQ,YAAJ,EAAAW,EAAWF,KAAKH,SACpC,MAAsB,UAAfF,EAAKJ,OAAqBO,IAAiBD,GAAYI,IAAgBJ,CAAA,IAG1EM,EAAqB,CAACC,EAA+BC,KACzD,IAAKtB,EAAIQ,MAAa,MAAA,IAAIC,MAAM,oBAChCT,EAAIQ,MAAME,MAAQW,EACdC,IAAgBtB,EAAAQ,MAAMc,WAAaA,EAAA,EAyClC,OAdPpB,EAAUqB,WAAU,EAAGC,OAAMC,WAC3B,GAAY,YAARD,EAAoB,CAClB,IAACxB,EAAIQ,MAAO,OACV,MAEAkB,EAFMD,EAAK,GAEME,MAAMC,GAASA,EAAKtB,OAASA,EAAKE,QACrDkB,GAA+BN,EAAAM,EAAWhB,MAAK,KAQhD,CACLV,MACAM,OACAM,OACAC,YACAH,QACAR,YACA2B,SA5CgBC,IAChB,IAAK9B,EAAIQ,MAAa,MAAA,IAAIC,MAAM,oBAC5BT,EAAAQ,MAAMsB,OAAS,IAAK9B,EAAIQ,MAAMsB,UAAWA,EAAO,EA2CpDC,YArCkB,CAACV,EAA+BC,KAIlD,GAAiB,YAAbD,EAA8B,MAAA,IAAIZ,MAAM,kCAC5CW,EAAmBC,EAAUC,IAAc,IAAIU,MAAOC,eAC5C/B,EAAA6B,YAAYzB,EAAKE,MAAOa,EAAQ,EAgC1Ca,WA7BkBC,IAClB,IAAKnC,EAAIQ,MAAa,MAAA,IAAIC,MAAM,oBAChCT,EAAIQ,MAAMgB,KAAOW,EACPjC,EAAAgC,WAAW5B,EAAKE,MAAO2B,EAAO,EA2BxCC,OAdF,WACEpC,EAAIQ,WAAQ,CAAA,EAcd"}