From aa99b7e57a663b0835f4b89c2ca6c0d9d6b61d10 Mon Sep 17 00:00:00 2001 From: "anastasia.birillo" Date: Thu, 10 Aug 2023 20:13:16 +0200 Subject: [PATCH] Implement ducks initialization --- .../src/commonMain/kotlin/duck/shop/Duck.kt | 1 + duckShopFrontend/src/App.css | 101 ++++++++++++++++++ duckShopFrontend/src/assets/best.svg | 3 + duckShopFrontend/src/assets/duck_box.svg | 14 +++ duckShopFrontend/src/assets/duck_label.svg | 3 + duckShopFrontend/src/assets/ducks/alex.svg | 15 +++ duckShopFrontend/src/assets/ducks/daniel.svg | 21 ++++ duckShopFrontend/src/assets/ducks/dorian.svg | 13 +++ duckShopFrontend/src/assets/ducks/jack.svg | 13 +++ .../src/assets/ducks/kristian.svg | 14 +++ duckShopFrontend/src/assets/ducks/leo.svg | 14 +++ duckShopFrontend/src/assets/ducks/mr.pink.svg | 15 +++ duckShopFrontend/src/assets/ducks/oliver.svg | 13 +++ duckShopFrontend/src/assets/ducks/piter.svg | 17 +++ duckShopFrontend/src/assets/ducks/vanessa.svg | 20 ++++ duckShopFrontend/src/components/Duck.tsx | 17 +++ .../src/components/DuckContainer.tsx | 32 ++++++ .../components/screens/MainActionsScreen.tsx | 10 +- duckShopFrontend/src/models/DuckInfo.tsx | 17 +++ .../kotlin/course/duck/shop/duck/Duck.kt | 13 ++- .../course/duck/shop/mode/GameModeResource.kt | 6 +- 21 files changed, 362 insertions(+), 10 deletions(-) create mode 100644 duckShopFrontend/src/assets/best.svg create mode 100644 duckShopFrontend/src/assets/duck_box.svg create mode 100644 duckShopFrontend/src/assets/duck_label.svg create mode 100644 duckShopFrontend/src/assets/ducks/alex.svg create mode 100644 duckShopFrontend/src/assets/ducks/daniel.svg create mode 100644 duckShopFrontend/src/assets/ducks/dorian.svg create mode 100644 duckShopFrontend/src/assets/ducks/jack.svg create mode 100644 duckShopFrontend/src/assets/ducks/kristian.svg create mode 100644 duckShopFrontend/src/assets/ducks/leo.svg create mode 100644 duckShopFrontend/src/assets/ducks/mr.pink.svg create mode 100644 duckShopFrontend/src/assets/ducks/oliver.svg create mode 100644 duckShopFrontend/src/assets/ducks/piter.svg create mode 100644 duckShopFrontend/src/assets/ducks/vanessa.svg create mode 100644 duckShopFrontend/src/components/Duck.tsx create mode 100644 duckShopFrontend/src/components/DuckContainer.tsx create mode 100644 duckShopFrontend/src/models/DuckInfo.tsx diff --git a/common/src/commonMain/kotlin/duck/shop/Duck.kt b/common/src/commonMain/kotlin/duck/shop/Duck.kt index 9bde6dd..3f31b91 100644 --- a/common/src/commonMain/kotlin/duck/shop/Duck.kt +++ b/common/src/commonMain/kotlin/duck/shop/Duck.kt @@ -8,4 +8,5 @@ import kotlin.js.JsExport data class JsDuck( val name: String, val description: String? = null, + val hasKotlinAttribute: Boolean = false, ) diff --git a/duckShopFrontend/src/App.css b/duckShopFrontend/src/App.css index a6223dd..2c67524 100644 --- a/duckShopFrontend/src/App.css +++ b/duckShopFrontend/src/App.css @@ -123,3 +123,104 @@ .App-button-map { background-image: url('assets/map_button.svg'); } + +.App-ducks-container { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + +.App-ducks-row { + align-items: center; + justify-content: center; + display: flex; + flex-direction: row; +} + +.App-ducks-row-top { + padding-top: 3vmin; + padding-bottom: 0.5vmin; +} + +.App-ducks-row-bottom { + padding-top: 0.5vmin; + padding-bottom: 2vmin; +} + +.App-duck-container { + background-image: url('assets/duck_box.svg'); + height: 18vmin; + width: 18vmin; + background-size: contain; + background-repeat: no-repeat; + margin-left: 1vmin; + margin-right: 1vmin; +} + + +.App-duck-image { + height: 100%; + width: 100%; + background-repeat: no-repeat; + background-size: contain; + margin-bottom: 2vmin; + margin-right: 0; +} + +.App-duck-image-alex { + background-image: url('assets/ducks/alex.svg'); +} + +.App-duck-image-daniel { + background-image: url('assets/ducks/daniel.svg'); +} + +.App-duck-image-dorian { + background-image: url('assets/ducks/dorian.svg'); +} + +.App-duck-image-jack { + background-image: url('assets/ducks/jack.svg'); +} + +.App-duck-image-kristian { + background-image: url('assets/ducks/kristian.svg'); +} + +.App-duck-image-leo { + background-image: url('assets/ducks/leo.svg'); +} + +.App-duck-image-mrpink { + background-image: url('assets/ducks/mr.pink.svg'); +} + +.App-duck-image-oliver { + background-image: url('assets/ducks/oliver.svg'); +} + +.App-duck-image-piter { + background-image: url('assets/ducks/piter.svg'); +} + +.App-duck-image-vanessa { + background-image: url('assets/ducks/vanessa.svg'); +} + + +.App-duck-container-label { + background-image: url('assets/duck_label.svg'); + position: absolute; + font-size: 15px; + padding-top: 4px; + padding-bottom: 4px; + margin-top: -4.7vmin; + margin-left: 0.5vmin; + width: 8vmin; + text-align: center; +} + +.App-display-none { + display: none; +} diff --git a/duckShopFrontend/src/assets/best.svg b/duckShopFrontend/src/assets/best.svg new file mode 100644 index 0000000..3459820 --- /dev/null +++ b/duckShopFrontend/src/assets/best.svg @@ -0,0 +1,3 @@ + + + diff --git a/duckShopFrontend/src/assets/duck_box.svg b/duckShopFrontend/src/assets/duck_box.svg new file mode 100644 index 0000000..1b336bf --- /dev/null +++ b/duckShopFrontend/src/assets/duck_box.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/duckShopFrontend/src/assets/duck_label.svg b/duckShopFrontend/src/assets/duck_label.svg new file mode 100644 index 0000000..42800c1 --- /dev/null +++ b/duckShopFrontend/src/assets/duck_label.svg @@ -0,0 +1,3 @@ + + + diff --git a/duckShopFrontend/src/assets/ducks/alex.svg b/duckShopFrontend/src/assets/ducks/alex.svg new file mode 100644 index 0000000..198fd5b --- /dev/null +++ b/duckShopFrontend/src/assets/ducks/alex.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/duckShopFrontend/src/assets/ducks/daniel.svg b/duckShopFrontend/src/assets/ducks/daniel.svg new file mode 100644 index 0000000..c82b401 --- /dev/null +++ b/duckShopFrontend/src/assets/ducks/daniel.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/duckShopFrontend/src/assets/ducks/dorian.svg b/duckShopFrontend/src/assets/ducks/dorian.svg new file mode 100644 index 0000000..5e3a168 --- /dev/null +++ b/duckShopFrontend/src/assets/ducks/dorian.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/duckShopFrontend/src/assets/ducks/jack.svg b/duckShopFrontend/src/assets/ducks/jack.svg new file mode 100644 index 0000000..9bc1d90 --- /dev/null +++ b/duckShopFrontend/src/assets/ducks/jack.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/duckShopFrontend/src/assets/ducks/kristian.svg b/duckShopFrontend/src/assets/ducks/kristian.svg new file mode 100644 index 0000000..22ab2b8 --- /dev/null +++ b/duckShopFrontend/src/assets/ducks/kristian.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/duckShopFrontend/src/assets/ducks/leo.svg b/duckShopFrontend/src/assets/ducks/leo.svg new file mode 100644 index 0000000..e55eea4 --- /dev/null +++ b/duckShopFrontend/src/assets/ducks/leo.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/duckShopFrontend/src/assets/ducks/mr.pink.svg b/duckShopFrontend/src/assets/ducks/mr.pink.svg new file mode 100644 index 0000000..db6ae39 --- /dev/null +++ b/duckShopFrontend/src/assets/ducks/mr.pink.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/duckShopFrontend/src/assets/ducks/oliver.svg b/duckShopFrontend/src/assets/ducks/oliver.svg new file mode 100644 index 0000000..d6b7644 --- /dev/null +++ b/duckShopFrontend/src/assets/ducks/oliver.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/duckShopFrontend/src/assets/ducks/piter.svg b/duckShopFrontend/src/assets/ducks/piter.svg new file mode 100644 index 0000000..bb415eb --- /dev/null +++ b/duckShopFrontend/src/assets/ducks/piter.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/duckShopFrontend/src/assets/ducks/vanessa.svg b/duckShopFrontend/src/assets/ducks/vanessa.svg new file mode 100644 index 0000000..6f7f3a8 --- /dev/null +++ b/duckShopFrontend/src/assets/ducks/vanessa.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/duckShopFrontend/src/components/Duck.tsx b/duckShopFrontend/src/components/Duck.tsx new file mode 100644 index 0000000..99e5c2f --- /dev/null +++ b/duckShopFrontend/src/components/Duck.tsx @@ -0,0 +1,17 @@ +import {DuckInfo} from "../models/DuckInfo"; + +type DuckProps = { + duck: DuckInfo +} + +export default function Duck({duck}: DuckProps) { + let baseDucksClasses = "App-duck-image " + let baseLabelClasses = "App-duck-container-label " + + return( +
+
+
{duck.description}
+
+ ) +} diff --git a/duckShopFrontend/src/components/DuckContainer.tsx b/duckShopFrontend/src/components/DuckContainer.tsx new file mode 100644 index 0000000..bc0b5cb --- /dev/null +++ b/duckShopFrontend/src/components/DuckContainer.tsx @@ -0,0 +1,32 @@ +import {duck} from "common-types"; +import JsDuck = duck.shop.JsDuck; +import {DuckInfo} from "../models/DuckInfo"; +import Duck from "./Duck"; + +type DuckContainerProps = { + ducks: Array +} + +export default function DuckContainer({ducks}: DuckContainerProps) { + function getDuckByIndex(index: number): DuckInfo { + if (ducks.length > index) { + return new DuckInfo(ducks[index]) + } + return new DuckInfo(new JsDuck("", null, false)) + } + + return( +
+
+ + + +
+
+ + + +
+
+ ) +} diff --git a/duckShopFrontend/src/components/screens/MainActionsScreen.tsx b/duckShopFrontend/src/components/screens/MainActionsScreen.tsx index 35f49f1..c5c7cd9 100644 --- a/duckShopFrontend/src/components/screens/MainActionsScreen.tsx +++ b/duckShopFrontend/src/components/screens/MainActionsScreen.tsx @@ -3,6 +3,7 @@ import {useEffect, useState} from "react"; import {duck} from "common-types"; import JsDuck = duck.shop.JsDuck; import axios from "axios"; +import DuckContainer from "../DuckContainer"; type MainActionsScreenProps = { gameStateSetter: (gs: GameState) => void @@ -14,7 +15,6 @@ export default function MainActionsScreen({gameStateSetter}: MainActionsScreenPr function initDuckShop(url: string) { axios.get(url).then(async (response) => { ducksSetter(response.data as Array) - console.log(ducks) }) } @@ -40,8 +40,12 @@ export default function MainActionsScreen({gameStateSetter}: MainActionsScreenPr { - wasGameInitialized() ?
-
:
+ wasGameInitialized() ? +
+
+ +
+ :
Please initialize the duck shop!
} diff --git a/duckShopFrontend/src/models/DuckInfo.tsx b/duckShopFrontend/src/models/DuckInfo.tsx new file mode 100644 index 0000000..3aa461e --- /dev/null +++ b/duckShopFrontend/src/models/DuckInfo.tsx @@ -0,0 +1,17 @@ +import {Nullable} from "common-types"; +import {duck} from "common-types"; +import JsDuck = duck.shop.JsDuck; + +export class DuckInfo { + imageClass: Nullable + description: Nullable + hasKotlinAttribute: boolean + + constructor(duck: JsDuck) { + this.imageClass = duck.name != "" ? "App-duck-image-" + this.duckName(duck.name) : null + this.description = duck.description + this.hasKotlinAttribute = duck.hasKotlinAttribute + } + + duckName(name: String): String { return name.toLowerCase().replace(" ", "").replace(".", "") } +} diff --git a/duckShopServer/duckShopServerIntroduction/src/main/kotlin/org/jetbrains/kotlin/course/duck/shop/duck/Duck.kt b/duckShopServer/duckShopServerIntroduction/src/main/kotlin/org/jetbrains/kotlin/course/duck/shop/duck/Duck.kt index 7c9b7ad..59d0d19 100644 --- a/duckShopServer/duckShopServerIntroduction/src/main/kotlin/org/jetbrains/kotlin/course/duck/shop/duck/Duck.kt +++ b/duckShopServer/duckShopServerIntroduction/src/main/kotlin/org/jetbrains/kotlin/course/duck/shop/duck/Duck.kt @@ -1,13 +1,18 @@ package org.jetbrains.kotlin.course.duck.shop.duck enum class Duck( - val customName: String? = null + val customName: String? = null, + val hasKotlinAttribute: Boolean = false, ) { - Kristian, Alex, + Daniel(hasKotlinAttribute = true), + Dorian, + Jack, + Kristian, + Leo, MrPink("Mr. Pink"), + Oliver, Piter, - Dorian, - Vanessa + Vanessa(hasKotlinAttribute = true) ; } diff --git a/duckShopServer/duckShopServerIntroduction/src/main/kotlin/org/jetbrains/kotlin/course/duck/shop/mode/GameModeResource.kt b/duckShopServer/duckShopServerIntroduction/src/main/kotlin/org/jetbrains/kotlin/course/duck/shop/mode/GameModeResource.kt index e164021..86ef177 100644 --- a/duckShopServer/duckShopServerIntroduction/src/main/kotlin/org/jetbrains/kotlin/course/duck/shop/mode/GameModeResource.kt +++ b/duckShopServer/duckShopServerIntroduction/src/main/kotlin/org/jetbrains/kotlin/course/duck/shop/mode/GameModeResource.kt @@ -12,15 +12,15 @@ class CardResource(val service: GameModeService) { @CrossOrigin @GetMapping("/list") fun generateListOfCharacters(): List = - service.generateListOfDucks().map { JsDuck(it.customName ?: it.name) } + service.generateListOfDucks().map { JsDuck(it.customName ?: it.name, hasKotlinAttribute = it.hasKotlinAttribute) } @CrossOrigin @GetMapping("/set") fun generateSetOfCharacters(): List = service.generateSetOfDucks() - .map { JsDuck(it.customName ?: it.name) } + .map { JsDuck(it.customName ?: it.name, hasKotlinAttribute = it.hasKotlinAttribute) } @CrossOrigin @GetMapping("/map") fun generateMapOfCharacters(): List = service.generateMapOfDucks() - .map { JsDuck(it.key.name, it.value) } + .map { JsDuck(it.key.name, it.value, hasKotlinAttribute = it.key.hasKotlinAttribute) } }