diff --git a/src/App.vue b/src/App.vue
index 87ec588..e4f4e28 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,5 +1,5 @@
diff --git a/src/FeatureStep.vue b/src/modules/feature/FeatureStep.vue
similarity index 81%
rename from src/FeatureStep.vue
rename to src/modules/feature/FeatureStep.vue
index 8a53676..ff52c66 100644
--- a/src/FeatureStep.vue
+++ b/src/modules/feature/FeatureStep.vue
@@ -1,5 +1,5 @@
diff --git a/src/modules/feature/feature-board.ts b/src/modules/feature/feature-board.ts
new file mode 100644
index 0000000..bce6a8c
--- /dev/null
+++ b/src/modules/feature/feature-board.ts
@@ -0,0 +1,29 @@
+import { FeatureStatus, FeatureStep } from '@/modules/feature/feature-steps'
+import { features } from '@/modules/feature/feature.fixture'
+import { pickRandomElement, popNElement, shuffleArray } from '@/utils'
+
+export const createFeatureBoard = () => {
+ const boardFeatures = shuffleArray(features)
+
+ const initBoard = (featureSteps: FeatureStep[]): FeatureStep[] => {
+ const initialFeatures = popNElement(boardFeatures, 10)
+
+ initialFeatures.forEach((feature) => {
+ const step = pickRandomElement(featureSteps)
+ const doingOrDone: FeatureStatus = pickRandomElement(['doing', 'done'])
+
+ switch (doingOrDone) {
+ case 'doing':
+ step.featuresInProgress.push(feature)
+ break
+ case 'done':
+ step.featuresDone.push(feature)
+ break
+ }
+ })
+
+ return featureSteps
+ }
+
+ return { initBoard }
+}
diff --git a/src/feature-steps.ts b/src/modules/feature/feature-steps.ts
similarity index 83%
rename from src/feature-steps.ts
rename to src/modules/feature/feature-steps.ts
index 8251a36..ab0feef 100644
--- a/src/feature-steps.ts
+++ b/src/modules/feature/feature-steps.ts
@@ -1,15 +1,17 @@
+export type FeatureStatus = 'doing' | 'done'
+
export type FeatureStep = {
title: string
- featuresInProgress: string[]
- featuresDone: string[]
+ featuresInProgress: Feature[]
+ featuresDone: Feature[]
blueBuckets: number
}
export const featureSteps: FeatureStep[] = [
{
title: 'Pitch',
- featuresInProgress: ['Feature 3', 'Feature 4'],
- featuresDone: ['Feature 1', 'Feature 2'],
+ featuresInProgress: [],
+ featuresDone: [],
blueBuckets: 2
},
{
diff --git a/src/feature.fixture.test.ts b/src/modules/feature/feature.fixture.test.ts
similarity index 100%
rename from src/feature.fixture.test.ts
rename to src/modules/feature/feature.fixture.test.ts
diff --git a/src/feature.fixture.ts b/src/modules/feature/feature.fixture.ts
similarity index 100%
rename from src/feature.fixture.ts
rename to src/modules/feature/feature.fixture.ts
diff --git a/src/feature.ts b/src/modules/feature/feature.ts
similarity index 100%
rename from src/feature.ts
rename to src/modules/feature/feature.ts
diff --git a/src/utils.ts b/src/utils.ts
index a0d8a4c..d8eab79 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -10,3 +10,23 @@ export const shuffleArray = (array: T[]) => {
return arrayCopy
}
+
+export const popNElement = (array: T[], numberOfElements: number) => {
+ const poppedElements: T[] = []
+
+ for (let i = 0; i < numberOfElements; i++) {
+ const element = array.pop()
+
+ if (element) {
+ poppedElements.push(element)
+ }
+ }
+
+ return poppedElements
+}
+
+export const pickRandomIndex = (array: T[]) =>
+ Math.floor(Math.random() * array.length)
+
+export const pickRandomElement = (array: T[]) =>
+ array[pickRandomIndex(array)]