diff --git a/src/App.js b/src/App.js
index e018745..e7114fa 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,4 +1,4 @@
-import { React, useState } from 'react';
+import { React, useState, useEffect } from 'react';
import {
ChakraProvider,
@@ -18,14 +18,15 @@ import {
import { FlatSelectionCard, FlatDetailsCard, SelfEvaluationCard, ResultsCard } from './Solimieten';
import { Nav } from './Nav';
-
+import { minRent, maxRent } from './Data';
function App() {
const [selectedFlat, setSelectedFlat] = useState();
const [selectedRoom, setSelectedRoom] = useState();
- const [numAdults, setNumAdults] = useState(1);
+ const [numAdults, setNumAdults] = useState();
- const [rent, setRent] = useState(0);
+ const [rent, setRent] = useState();
+ const [flatRent, setFlatRent] = useState();
const theme = extendTheme({
"colors": {
@@ -44,7 +45,30 @@ function App() {
}
});
+ useEffect(() => {
+ setFlatRent(null);
+ if (selectedFlat && numAdults && (selectedFlat.wgRoomList.length === 0 || selectedRoom)) {
+ console.log("Recalculating Rent...");
+ var commonAreaShare = 60 * numAdults;
+ var kitchenCost = 50;
+ var sizePrivate = selectedFlat.sizePrivate;
+ var internalAreaShare = 0;
+ if (selectedFlat.wgRoomList.length > 0) {
+ internalAreaShare = selectedFlat.calcInternalAreaShare(selectedRoom);
+ sizePrivate = selectedRoom.size;
+ kitchenCost = kitchenCost / selectedFlat.wgRoomList.length;
+ }
+
+ var newRent = {
+ min: (sizePrivate + internalAreaShare) * minRent + kitchenCost,
+ minCovering: (sizePrivate + internalAreaShare) * minRent + kitchenCost + commonAreaShare,
+ maxCovering: (sizePrivate + internalAreaShare) * maxRent + kitchenCost + commonAreaShare
+ }
+
+ setFlatRent(newRent);
+ }
+ }, [selectedFlat, selectedRoom, numAdults])
return (
@@ -55,7 +79,7 @@ function App() {
- Allemende Solimieten-Helferlein
+ Allmende Solimieten-Helferlein
Im Rahmen des Konzept für solidarische Mieten, kann jede Partei in der Allmende ihre Miethöhe selbst bestimmen.
Dieses Tool soll als Orientierungshilfe bei der Selbsteinschätzung dienen.
@@ -75,13 +99,13 @@ function App() {
-
+
Selbsteinschätzung
-
+
diff --git a/src/Solimieten.js b/src/Solimieten.js
index fcb1a5e..3108d4a 100644
--- a/src/Solimieten.js
+++ b/src/Solimieten.js
@@ -25,7 +25,7 @@ import {
Tooltip
} from '@chakra-ui/react';
-import { flatData, minRent, maxRent } from './Data';
+import { flatData } from './Data';
export function FlatSelectionCard({ setSelectedFlat, onRoomSelected, onNumAdultsSelected }) {
const [levelOptions, setLevelOption] = useState([{ value: 0, label: "EG" }, { value: 1, label: "1. OG" }, { value: 2, label: "2. OG" }, { value: 3, label: "3. OG" }]);
@@ -99,20 +99,17 @@ export function FlatSelectionCard({ setSelectedFlat, onRoomSelected, onNumAdults
}
-export function FlatDetailsCard({ flat, room, numAdults }) {
+export function FlatDetailsCard({ flat, room, flatRent }) {
var body =
Bitte auswählen
;
var badges = "";
- var kitchenCost = 50;
- var commonAreaShare = 60 * numAdults;
- if (flat && (room || flat.wgRoomList.length === 0)) {
+ if (flat && (flat.wgRoomList.length === 0 || room) && flatRent) {
var sizePrivate = flat.sizePrivate;
if (room) {
sizePrivate = room.size;
- kitchenCost = kitchenCost / flat.wgRoomList.length;
}
var sizeSharedBox = null;
@@ -171,7 +168,7 @@ export function FlatDetailsCard({ flat, room, numAdults }) {
Die Mindestmiete ergibt sich aus dem WBS Satz für die private Fläche (9,45 €/m²), den Nebenkosten (1,20 €/m²) und der Küchen-Nutzungspauschale von 50€ pro Küche (in Clustern und WGs auf Parteien aufgeteilt)
- {((sizePrivate + internalAreaShare) * minRent + kitchenCost).toFixed(2)} €
+ {(flatRent.min).toFixed(2)} €
@@ -180,7 +177,7 @@ export function FlatDetailsCard({ flat, room, numAdults }) {
Die Deckungsmiete beinhaltet einen Beitrag von 60 € pro erwachsener Person für die Gemeinschaftsflächen
- {((sizePrivate + internalAreaShare) * minRent + kitchenCost + commonAreaShare).toFixed(2)} €
+ {(flatRent.minCovering).toFixed(2)} €
@@ -189,7 +186,7 @@ export function FlatDetailsCard({ flat, room, numAdults }) {
Das ist die Miete, die für diese Wohnung ohne solidarischen Ausgleich anfallen würde{flat.isWbs ? ", wenn Sie frei finanziert wäre " : " "}und ergibt sich aus 13,06 €/m² plus 1,20 €/m² Nebenkosten und Gemeinschaftsflächen-Pauschale.
- {((sizePrivate + internalAreaShare) * maxRent + kitchenCost + commonAreaShare).toFixed(2)} €
+ {(flatRent.maxCovering).toFixed(2)} €
@@ -298,13 +295,14 @@ export function SelfEvaluationCard({ rent, setRent }) {
}
-export function ResultsCard({ rent, flat, room }) {
+export function ResultsCard({ rent, flat, room, numAdults, flatRent }) {
var body =
- if (flat && (room || flat.wgRoomList.length === 0)) {
+ if (flat && (room || flat.wgRoomList.length === 0) && flatRent) {
var totalSize = flat.calcTotalPayedArea(room)
+ var kitchenCost = flat.wgRoomList.length > 0 ? 50 / flat.wgRoomList.length : 50;
+ var relativeRent = (rent - kitchenCost - (60 * numAdults)) / totalSize;
- var relativeRent = rent / totalSize;
- var rangePosition = ((relativeRent - minRent) / (maxRent - minRent)) * 100;
+ var rangePosition = ((rent - flatRent.min) / (flatRent.maxCovering - flatRent.min)) * 100;
if (rangePosition < 0) { rangePosition = 0; }
if (rangePosition > 100) { rangePosition = 100; }
var color = "green";
@@ -330,13 +328,13 @@ export function ResultsCard({ rent, flat, room }) {
- WBS Miete
- {minRent.toFixed(2)} €
+ Mindestmiete
+ {flatRent.min.toFixed(2)} €
- Max
- {maxRent.toFixed(2)} €
+ Deckungsmiete freifinanziert
+ {flatRent.maxCovering.toFixed(2)} €