extract all simulation to the dashboard store
This commit is contained in:
@@ -1,10 +1,26 @@
|
||||
import { Dashboard } from '@/store-type'
|
||||
import { featureSteps } from '@/modules/feature/feature-steps'
|
||||
import { Strategy } from '@/modules/lean/strategy'
|
||||
import { Dashboard, Meta } from '@/store-type'
|
||||
import { defineStore } from 'pinia'
|
||||
|
||||
type State = {
|
||||
dashboards: Dashboard[]
|
||||
}
|
||||
|
||||
const instance = new ComlinkWorker<typeof import('../feature/feature-board')>(
|
||||
new URL('../feature/feature-board', import.meta.url)
|
||||
)
|
||||
|
||||
const resetMeta = (): Meta => ({
|
||||
totalDays: 0,
|
||||
daysWithProblemSolving: 0,
|
||||
strategy: {
|
||||
push: 0,
|
||||
pull: 0,
|
||||
'problem-solving': 0
|
||||
}
|
||||
})
|
||||
|
||||
export const useDashboardStore = defineStore('dashboard', {
|
||||
state: (): State => {
|
||||
return {
|
||||
@@ -15,6 +31,44 @@ export const useDashboardStore = defineStore('dashboard', {
|
||||
newDashboard(dashboard: Dashboard) {
|
||||
this.dashboards.push(dashboard)
|
||||
},
|
||||
async simulate(strategy: Strategy) {
|
||||
const backlog = await instance.newBacklog()
|
||||
const steps = featureSteps
|
||||
const features = await instance.initBoard(steps, backlog)
|
||||
|
||||
const newState = await instance.simulate(
|
||||
{
|
||||
backlog,
|
||||
steps,
|
||||
features,
|
||||
meta: resetMeta()
|
||||
},
|
||||
strategy
|
||||
)
|
||||
|
||||
const [worstFeature] = newState.features.sort((a, b) =>
|
||||
a.qualityIssue > b.qualityIssue ? -1 : 1
|
||||
)
|
||||
|
||||
this.newDashboard({
|
||||
uuid: new Date().getTime().toString(),
|
||||
meta: newState.meta,
|
||||
analysis: {
|
||||
meanComplexity: await instance.meanComplexity(newState.features),
|
||||
meanLeadTime: await instance.meanLeadTime(newState.features),
|
||||
meanQualityIssue: await instance.meanQualityIssue(newState.features),
|
||||
worstFeature,
|
||||
mainStrategy: Object.entries(newState.meta.strategy).sort((a, b) =>
|
||||
a[1] > b[1] ? -1 : 1
|
||||
)[0][0]
|
||||
}
|
||||
})
|
||||
},
|
||||
async simulate100(strategy: Strategy) {
|
||||
for (let i = 0; i < 100; i++) {
|
||||
await this.simulate(strategy)
|
||||
}
|
||||
},
|
||||
clearDashboard() {
|
||||
this.dashboards = []
|
||||
}
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<script setup lang="ts">
|
||||
import { useFeatureStore } from '@/modules/feature/feature-store'
|
||||
import { useDashboardStore } from '@/modules/dashboard/dashboard-store'
|
||||
|
||||
const featureStore = useFeatureStore()
|
||||
const dashboardStore = useDashboardStore()
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="feature-dashboard">
|
||||
Dashboard
|
||||
<ul>
|
||||
<li v-for="dashboard in featureStore.dashboards" :key="dashboard.uuid">
|
||||
<li v-for="dashboard in dashboardStore.dashboards" :key="dashboard.uuid">
|
||||
{{ dashboard.analysis.mainStrategy }}: mean lead time
|
||||
{{ dashboard.analysis.meanLeadTime }} | worst feature for quality
|
||||
{{ dashboard.analysis.worstFeature.qualityIssue }} [{{
|
||||
|
||||
@@ -47,16 +47,16 @@ const pushAndProblemSolving20Percent = () => {
|
||||
<button @click="featureStore.nextDay('problem-solving')">
|
||||
problem solving
|
||||
</button>
|
||||
<button @click="featureStore.simulate('push')">
|
||||
<button @click="dashboardStore.simulate('push')">
|
||||
simulate push system
|
||||
</button>
|
||||
<button @click="featureStore.simulate('pull')">
|
||||
<button @click="dashboardStore.simulate('pull')">
|
||||
simulate pull system
|
||||
</button>
|
||||
<button @click="featureStore.simulate100('pull')">
|
||||
<button @click="dashboardStore.simulate100('pull')">
|
||||
simulate 100 pull system
|
||||
</button>
|
||||
<button @click="featureStore.simulate('problem-solving')">
|
||||
<button @click="dashboardStore.simulate('problem-solving')">
|
||||
simulate pull and problem solving
|
||||
</button>
|
||||
<button @click="dashboardStore.clearDashboard()">clear dashboard</button>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import { useDashboardStore } from '@/modules/dashboard/dashboard-store'
|
||||
import { Feature } from '@/modules/feature/feature'
|
||||
import {
|
||||
initBoard,
|
||||
meanComplexity,
|
||||
meanLeadTime,
|
||||
meanQualityIssue
|
||||
meanQualityIssue,
|
||||
newBacklog,
|
||||
nextDay
|
||||
} from '@/modules/feature/feature-board'
|
||||
import { featureSteps } from '@/modules/feature/feature-steps'
|
||||
import { Strategy } from '@/modules/lean/strategy'
|
||||
@@ -11,12 +13,6 @@ import { FeatureState, Meta } from '@/store-type'
|
||||
import { clone } from '@/utils'
|
||||
import { defineStore } from 'pinia'
|
||||
|
||||
const dashboardStore = useDashboardStore()
|
||||
|
||||
const instance = new ComlinkWorker<typeof import('./feature-board')>(
|
||||
new URL('./feature-board', import.meta.url)
|
||||
)
|
||||
|
||||
const resetMeta = (): Meta => ({
|
||||
totalDays: 0,
|
||||
daysWithProblemSolving: 0,
|
||||
@@ -36,13 +32,9 @@ export const useFeatureStore = defineStore('feature', {
|
||||
}),
|
||||
actions: {
|
||||
async initBoard() {
|
||||
const newBacklog = await instance.newBacklog()
|
||||
this.backlog = newBacklog
|
||||
this.backlog = newBacklog()
|
||||
this.steps = featureSteps
|
||||
this.features = await instance.initBoard(
|
||||
clone(this.steps),
|
||||
clone(this.backlog)
|
||||
)
|
||||
this.features = initBoard(clone(this.steps), clone(this.backlog))
|
||||
|
||||
this.backlog = this.backlog.filter(
|
||||
(l) => !this.features.find((f) => f.name === l.name)
|
||||
@@ -50,49 +42,11 @@ export const useFeatureStore = defineStore('feature', {
|
||||
this.meta = resetMeta()
|
||||
},
|
||||
async nextDay(strategy: Strategy) {
|
||||
const newState = await instance.nextDay(clone(this.$state), strategy)
|
||||
const newState = nextDay(clone(this.$state), strategy)
|
||||
|
||||
this.backlog = newState.backlog
|
||||
this.meta = newState.meta
|
||||
this.features = newState.features
|
||||
},
|
||||
async simulate(strategy: Strategy) {
|
||||
const backlog = await instance.newBacklog()
|
||||
const steps = featureSteps
|
||||
const features = await instance.initBoard(steps, backlog)
|
||||
|
||||
const newState = await instance.simulate(
|
||||
{
|
||||
backlog,
|
||||
steps,
|
||||
features,
|
||||
meta: resetMeta()
|
||||
},
|
||||
strategy
|
||||
)
|
||||
|
||||
const [worstFeature] = newState.features.sort((a, b) =>
|
||||
a.qualityIssue > b.qualityIssue ? -1 : 1
|
||||
)
|
||||
|
||||
dashboardStore.newDashboard({
|
||||
uuid: new Date().getTime().toString(),
|
||||
meta: newState.meta,
|
||||
analysis: {
|
||||
meanComplexity: await instance.meanComplexity(newState.features),
|
||||
meanLeadTime: await instance.meanLeadTime(newState.features),
|
||||
meanQualityIssue: await instance.meanQualityIssue(newState.features),
|
||||
worstFeature,
|
||||
mainStrategy: Object.entries(newState.meta.strategy).sort((a, b) =>
|
||||
a[1] > b[1] ? -1 : 1
|
||||
)[0][0]
|
||||
}
|
||||
})
|
||||
},
|
||||
async simulate100(strategy: Strategy) {
|
||||
for (let i = 0; i < 100; i++) {
|
||||
await this.simulate(strategy)
|
||||
}
|
||||
}
|
||||
},
|
||||
getters: {
|
||||
|
||||
Reference in New Issue
Block a user