Implement feedback questions

This commit is contained in:
Dennis Schoepf 2021-08-02 19:32:37 +02:00
parent 47a7ec98ea
commit ef2edf38f2
5 changed files with 190 additions and 10 deletions

View file

@ -212,6 +212,74 @@
</p>
<p>Have fun! 🤟</p>
</div>
<div id="intro-step5">Knowledge Questions</div>
<div id="intro-step6">
<h1>Questions about Play in Software Development</h1>
<p>
After the project-specific "knowledge" questions in the last step I want to get your
valuable input as a developer for the following questions:
</p>
<label for="fb-1">
1) Would you say, that you have learned something about the underlying project from
going through this interactive visualization? If yes, what have you learned? If no, what
was missing from the visualization in your opinion?
<textarea id="fb-1" name="fb-1" />
</label>
<label for="fb-2">
2) What was your overall experience going through this visualization? What did you like
or did not like? Is there anything that stood out for you?
<textarea id="fb-2" name="fb-2" />
</label>
<label for="fb-3">
3) How did you experience the companion (Lower right)? Was it helpful or rather
annoying?
<textarea id="fb-3" name="fb-3" />
</label>
<label for="fb-4">
4) Could you imageine yourself using this visualization or something similar on
different projects to learn about them? If so, on which projects would you want to try
it out?
<textarea id="fb-4" name="fb-4" />
</label>
<label for="fb-5">
5) Have you felt like any information was missing on the things that were shown within
the visualization?
<textarea id="fb-5" name="fb-5" />
</label>
<label for="fb-6">
6) Would you have liked to see additional information on the underlying project? If so,
what kind of information and how would you have liked?
<textarea id="fb-6" name="fb-6" />
</label>
<label for="fb-7">
7) Do you have any additional ideas on how playful elements or game mechanics could be
used within the onboarding phase of software development projects?
<textarea id="fb-7" name="fb-7" />
</label>
<label for="fb-8">
8) What is your general stance on using games/game mechanics or playful elements within
software development?
<textarea id="fb-8" name="fb-8" />
</label>
<label for="fb-9">
9) Do you have any additional ideas on how playful elements or game mechanics could be
used within the onboarding phase of software development projects? Any elements from
games you play that you think could be reused when making yourself familiar with new
projects?
<textarea id="fb-9" name="fb-9" />
</label>
<label for="fb-10">
10) Anything else you want to mention?
<textarea id="fb-10" name="fb-10" />
</label>
</div>
<div id="intro-step7">
<h2>Thank you so much! 🙏</h2>
<p>
Thank you for your participation. If you have additional feedback please contact me:
<a href="mailto:me@dnsc.io">me@dnsc.io</a>. You can now safely close the browser window.
</p>
</div>
<button id="intro-button">Let's start!</button>
</div>
</div>

View file

@ -38,6 +38,25 @@ export class OverviewScene {
}
private drawLocations() {
if (
store.getState().finishedSubProjects.every((fsp) => {
const edge = this.edges.filter((edge) => edge.name === fsp)[0];
return edge.finished;
}) &&
!store.getState().finishedGame &&
store.getState().finishedSubProjects.length > 0
) {
store.setState({ finishedGame: true });
setTimeout(() => {
store.getState().addUserMessage({
text: "Nice! 😎 You made it all the way through. Now I would be very thankful if you could take some time to answer the following questions. Don't overthink the answers and write down everything that comes to your mind. The more input you give, the better no matter how well it is formulated!",
inputWanted: false,
onNext: () => store.setState({ currentIntroStep: 5 }),
});
}, 800);
}
this.edges.forEach((edgeShape) => {
if (store.getState().finishedSubProjects.some((fsp) => fsp === edgeShape.name)) {
edgeShape.finished = true;

View file

@ -6,7 +6,6 @@ import project from '../metadata/project.json';
import { InfoMessageType } from './ui/info';
import { RevealableInterface, RevealableTypes } from './sketchObjects/Revealable';
import { getRevealablesforSubproject } from './helpers';
import { SubProject } from './types';
export interface State {
currentIntroStep: number;
@ -22,6 +21,7 @@ export interface State {
finishedSubProjects: string[];
setProjectMetadata: (projectName: string) => void;
participantAnonymous: boolean;
finishedGame: boolean;
}
const store = create<State>(
@ -33,6 +33,7 @@ const store = create<State>(
companionState: CompanionState.IDLE,
infoMessageShown: false,
infoMessages: [],
finishedGame: false,
addInfoMessage: (newMessage) =>
set((state) => ({ ...state, infoMessages: [...state.infoMessages, newMessage] })),
userMessages: [],

View file

@ -1,6 +1,7 @@
import store from '../store';
export class Intro {
currentStep: number;
anonymous: boolean;
nextButton: HTMLElement;
@ -11,6 +12,9 @@ export class Intro {
step2Container: HTMLElement;
step3Container: HTMLElement;
step4Container: HTMLElement;
step5Container: HTMLElement;
step6Container: HTMLElement;
step7Container: HTMLElement;
nameRef: HTMLInputElement;
ageRef: HTMLInputElement;
@ -24,6 +28,9 @@ export class Intro {
this.step2Container = document.getElementById('intro-step2');
this.step3Container = document.getElementById('intro-step3');
this.step4Container = document.getElementById('intro-step4');
this.step5Container = document.getElementById('intro-step5');
this.step6Container = document.getElementById('intro-step6');
this.step7Container = document.getElementById('intro-step7');
this.nextButton = document.getElementById('intro-button');
this.anonymousCheckbox = document.querySelector('#intro-anonymous');
this.introContainer = document.querySelector('#intro');
@ -38,11 +45,18 @@ export class Intro {
this.nextButton.addEventListener('click', () => this.onNextClick());
store.subscribe((state) => {
this.anonymous = state.participantAnonymous;
this.showStep(state.currentIntroStep);
this.currentStep = store.getState().currentIntroStep;
console.log(state.currentIntroStep);
if (this.currentStep === 0) {
this.introContainer.style.display = 'none';
this.introBackdrop.style.display = 'none';
} else {
this.showStep();
}
store.subscribe((state) => {
this.currentStep = state.currentIntroStep;
this.anonymous = state.participantAnonymous;
if (state.currentIntroStep === 2) {
this.nextButton.innerHTML = 'Agree';
@ -50,14 +64,25 @@ export class Intro {
this.nextButton.innerHTML = 'Confirm';
} else if (state.currentIntroStep === 4) {
this.nextButton.innerHTML = 'Start already!';
} else if (state.currentIntroStep === 7) {
this.nextButton.style.display = 'none';
} else if (state.currentIntroStep === 0) {
this.introContainer.style.display = 'none';
this.introBackdrop.style.display = 'none';
} else {
this.nextButton.innerHTML = 'Continue';
}
if (state.currentIntroStep !== 0) {
this.introContainer.style.display = 'block';
this.introBackdrop.style.display = 'block';
}
if (this.anonymous) {
this.hideNameInput();
}
this.showStep();
});
}
@ -103,27 +128,63 @@ export class Intro {
private hideNameInput() {}
private showStep(stepToShow: number) {
if (stepToShow === 1) {
private showStep() {
if (this.currentStep === 1) {
this.step1Container.style.display = 'flex';
this.step2Container.style.display = 'none';
this.step3Container.style.display = 'none';
this.step4Container.style.display = 'none';
} else if (stepToShow === 2) {
this.step5Container.style.display = 'none';
this.step6Container.style.display = 'none';
this.step7Container.style.display = 'none';
} else if (this.currentStep === 2) {
this.step1Container.style.display = 'none';
this.step2Container.style.display = 'flex';
this.step3Container.style.display = 'none';
this.step4Container.style.display = 'none';
} else if (stepToShow === 3) {
this.step5Container.style.display = 'none';
this.step6Container.style.display = 'none';
this.step7Container.style.display = 'none';
} else if (this.currentStep === 3) {
this.step1Container.style.display = 'none';
this.step2Container.style.display = 'none';
this.step3Container.style.display = 'flex';
this.step4Container.style.display = 'none';
} else if (stepToShow === 4) {
this.step5Container.style.display = 'none';
this.step6Container.style.display = 'none';
this.step7Container.style.display = 'none';
} else if (this.currentStep === 4) {
this.step1Container.style.display = 'none';
this.step2Container.style.display = 'none';
this.step3Container.style.display = 'none';
this.step4Container.style.display = 'flex';
this.step5Container.style.display = 'none';
this.step6Container.style.display = 'none';
this.step7Container.style.display = 'none';
} else if (this.currentStep === 5) {
this.step1Container.style.display = 'none';
this.step2Container.style.display = 'none';
this.step3Container.style.display = 'none';
this.step4Container.style.display = 'none';
this.step5Container.style.display = 'flex';
this.step6Container.style.display = 'none';
this.step7Container.style.display = 'none';
} else if (this.currentStep === 6) {
this.step1Container.style.display = 'none';
this.step2Container.style.display = 'none';
this.step3Container.style.display = 'none';
this.step4Container.style.display = 'none';
this.step5Container.style.display = 'none';
this.step6Container.style.display = 'flex';
this.step7Container.style.display = 'none';
} else if (this.currentStep === 7) {
this.step1Container.style.display = 'none';
this.step2Container.style.display = 'none';
this.step3Container.style.display = 'none';
this.step4Container.style.display = 'none';
this.step5Container.style.display = 'none';
this.step6Container.style.display = 'none';
this.step7Container.style.display = 'flex';
}
}
}

View file

@ -67,6 +67,18 @@ select {
border-radius: 5px;
}
textarea {
display: block;
width: 100%;
margin-top: 25px;
min-height: 8rem;
font-size: 18px;
padding: 8px 12px;
outline: 0;
border: 2px solid black;
border-radius: 5px;
}
.ui {
position: absolute;
bottom: 40px;
@ -309,6 +321,25 @@ select {
flex-direction: column;
}
#intro-step5 {
display: none;
flex-direction: column;
}
#intro-step6 {
display: none;
flex-direction: column;
label {
margin-top: 60px;
}
}
#intro-step7 {
display: none;
flex-direction: column;
}
#intro-button {
float: right;
margin-top: 25px;