Refaktoryzacja zarządzania stanem w raporcie administracji
- Zastąpienie `props` na `storeToRefs(useReportStore())` w komponentach administracji. - Refaktoryzacja interfejsu `AccordionItem` do `AccordionItems` i dostosowanie typów. - Usunięcie zbędnych właściwości `turn` i `state` z `AdministrationBurgCard.vue`. - Przebudowa sposobu obliczania pojemności rządu w `administrationDetails.vue`. - Poprawienie inicjalizacji `state` i `turn` w `reportStore.ts`. Zmiany poprawiają zarządzanie stanem i czytelność kodu.
This commit is contained in:
@@ -1,17 +1,18 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type { StatesResponse, TurnsResponse } from '@/types/pb-types';
|
import type { BurgsResponse, ProvincesResponse } from '@/types/pb-types';
|
||||||
|
|
||||||
interface AccordionItem {
|
interface AccordionItems {
|
||||||
title: string;
|
title: string;
|
||||||
content: any[];
|
content:
|
||||||
|
| ProvincesResponse<unknown>[]
|
||||||
|
| BurgsResponse<unknown>[]
|
||||||
|
| { name: string; amount: number }[];
|
||||||
len: number;
|
len: number;
|
||||||
type: 'provinces' | 'burgs' | 'chart';
|
type: 'provinces' | 'burgs' | 'chart';
|
||||||
}
|
}
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
turn: TurnsResponse<unknown>;
|
accordionItems: AccordionItems[];
|
||||||
state: StatesResponse<unknown, unknown, unknown, unknown, unknown>;
|
|
||||||
accordionItems: AccordionItem[];
|
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const provinces = props.accordionItems.find(item => item.type === 'provinces')?.content ?? [];
|
const provinces = props.accordionItems.find(item => item.type === 'provinces')?.content ?? [];
|
||||||
@@ -47,13 +48,7 @@ const burgs = props.accordionItems.find(item => item.type === 'burgs')?.content
|
|||||||
<AccordionContent v-else-if="item.type === 'burgs'">
|
<AccordionContent v-else-if="item.type === 'burgs'">
|
||||||
<ScrollArea class="h-[500px]">
|
<ScrollArea class="h-[500px]">
|
||||||
<div class="flex flex-wrap justify-center gap-6">
|
<div class="flex flex-wrap justify-center gap-6">
|
||||||
<AdministrationBurgCard
|
<AdministrationBurgCard v-for="burg in burgs" :key="burg.id" :burg="burg" />
|
||||||
v-for="burg in burgs"
|
|
||||||
:key="burg.id"
|
|
||||||
:burg="burg"
|
|
||||||
:turn="props.turn"
|
|
||||||
:state="props.state"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</ScrollArea>
|
</ScrollArea>
|
||||||
</AccordionContent>
|
</AccordionContent>
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type { BurgsResponse, StatesResponse, TurnsResponse } from '@/types/pb-types';
|
import type { BurgsResponse } from '@/types/pb-types';
|
||||||
import { Icon } from '@iconify/vue';
|
import { Icon } from '@iconify/vue';
|
||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
burg: BurgsResponse<unknown>;
|
burg: BurgsResponse<unknown>;
|
||||||
turn: TurnsResponse<unknown>;
|
|
||||||
state: StatesResponse<unknown, unknown, unknown, unknown, unknown>;
|
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const { cultureNames, religionNames } = await useFetchAdministrationReport(props.turn, props.state);
|
const { state, turn } = storeToRefs(useReportStore());
|
||||||
|
|
||||||
|
const { cultureNames, religionNames } = await useFetchAdministrationReport(turn.value, state.value);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
|||||||
@@ -1,17 +1,12 @@
|
|||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type { StatesResponse, TurnsResponse } from '@/types/pb-types';
|
const { state, turn } = storeToRefs(useReportStore());
|
||||||
|
|
||||||
const props = defineProps<{
|
const { cultureNames, burgsData } = await useFetchAdministrationReport(turn.value, state.value);
|
||||||
turn: TurnsResponse<unknown>;
|
|
||||||
state: StatesResponse<unknown, unknown, unknown, unknown, unknown>;
|
|
||||||
}>();
|
|
||||||
|
|
||||||
const { cultureNames, burgsData } = await useFetchAdministrationReport(props.turn, props.state);
|
const primaryCulture = cultureNames.find(c => c.id === state.value.culture)?.id;
|
||||||
|
|
||||||
const primaryCulture = cultureNames.find(c => c.id === props.state.culture)?.id;
|
|
||||||
|
|
||||||
const nonPrimaryCultureCells: number = (
|
const nonPrimaryCultureCells: number = (
|
||||||
Object.entries(props.state.culturesCells as Record<string, string>) as [string, string][]
|
Object.entries(state.value.culturesCells as Record<string, string>) as [string, string][]
|
||||||
).reduce(
|
).reduce(
|
||||||
(sum: number, [key, value]: [string, string]) =>
|
(sum: number, [key, value]: [string, string]) =>
|
||||||
key !== primaryCulture ? sum : sum + parseInt(value),
|
key !== primaryCulture ? sum : sum + parseInt(value),
|
||||||
@@ -21,19 +16,19 @@ const nonPrimaryCultureCells: number = (
|
|||||||
const nonPrimaryCultureBurgs = burgsData.value.filter(b => b.culture !== primaryCulture).length;
|
const nonPrimaryCultureBurgs = burgsData.value.filter(b => b.culture !== primaryCulture).length;
|
||||||
|
|
||||||
const governmentCapacityPoints =
|
const governmentCapacityPoints =
|
||||||
props.state.cells + nonPrimaryCultureCells + burgsData.value.length + nonPrimaryCultureBurgs;
|
state.value.cells + nonPrimaryCultureCells + burgsData.value.length + nonPrimaryCultureBurgs;
|
||||||
|
|
||||||
const technologieGovernmentCapacityLimit = 1 * 50;
|
const technologieGovernmentCapacityLimit = 1 * 50;
|
||||||
|
|
||||||
const governmentCapacityLimit =
|
const governmentCapacityLimit =
|
||||||
(constGovernmentTypes.find(g => g.name === props.state.form)?.governmentCapacityLimit || 0) +
|
(constGovernmentTypes.find(g => g.name === state.value.form)?.governmentCapacityLimit || 0) +
|
||||||
technologieGovernmentCapacityLimit;
|
technologieGovernmentCapacityLimit;
|
||||||
|
|
||||||
const governmentCapacity = Math.round((governmentCapacityPoints / governmentCapacityLimit) * 100);
|
const governmentCapacity = Math.round((governmentCapacityPoints / governmentCapacityLimit) * 100);
|
||||||
const progress = ref(Math.min(governmentCapacity, 100));
|
const progress = ref(Math.min(governmentCapacity, 100));
|
||||||
|
|
||||||
const governmentCapacityRows = [
|
const governmentCapacityRows = [
|
||||||
{ type: 'Kratki', points: 1, value: props.state.cells },
|
{ type: 'Kratki', points: 1, value: state.value.cells },
|
||||||
{ type: 'Kratki ob. kultura', points: 1, value: nonPrimaryCultureCells },
|
{ type: 'Kratki ob. kultura', points: 1, value: nonPrimaryCultureCells },
|
||||||
{ type: 'Miasta', points: 1, value: burgsData.value.length },
|
{ type: 'Miasta', points: 1, value: burgsData.value.length },
|
||||||
{ type: 'Miasta ob. kultura', points: 1, value: nonPrimaryCultureBurgs }
|
{ type: 'Miasta ob. kultura', points: 1, value: nonPrimaryCultureBurgs }
|
||||||
@@ -42,7 +37,7 @@ const governmentCapacityRows = [
|
|||||||
const governmentCapacityLimitRows = [
|
const governmentCapacityLimitRows = [
|
||||||
{
|
{
|
||||||
type: 'Forma rządu',
|
type: 'Forma rządu',
|
||||||
value: constGovernmentTypes.find(g => g.name === props.state.form)?.governmentCapacityLimit || 0
|
value: constGovernmentTypes.find(g => g.name === state.value.form)?.governmentCapacityLimit || 0
|
||||||
},
|
},
|
||||||
{ type: 'Technologia', value: technologieGovernmentCapacityLimit }
|
{ type: 'Technologia', value: technologieGovernmentCapacityLimit }
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -2,6 +2,16 @@
|
|||||||
// TODO: Administracja (GovCap, Prowincje, Miasta)
|
// TODO: Administracja (GovCap, Prowincje, Miasta)
|
||||||
import type { BurgsResponse, ProvincesResponse } from '@/types/pb-types';
|
import type { BurgsResponse, ProvincesResponse } from '@/types/pb-types';
|
||||||
|
|
||||||
|
interface AccordionItems {
|
||||||
|
title: string;
|
||||||
|
content:
|
||||||
|
| ProvincesResponse<unknown>[]
|
||||||
|
| BurgsResponse<unknown>[]
|
||||||
|
| { name: string; amount: number }[];
|
||||||
|
len: number;
|
||||||
|
type: 'provinces' | 'burgs' | 'chart';
|
||||||
|
}
|
||||||
|
|
||||||
const { state, turn } = storeToRefs(useReportStore());
|
const { state, turn } = storeToRefs(useReportStore());
|
||||||
|
|
||||||
const { provincesData, burgsData } = await useFetchAdministrationReport(turn.value, state.value);
|
const { provincesData, burgsData } = await useFetchAdministrationReport(turn.value, state.value);
|
||||||
@@ -10,7 +20,7 @@ const biomesChartData = prepareChartData(state.value.biomesCells as object);
|
|||||||
const religionsChartData = prepareChartData(state.value.religionsCells as object);
|
const religionsChartData = prepareChartData(state.value.religionsCells as object);
|
||||||
const culturesChartData = prepareChartData(state.value.culturesCells as object);
|
const culturesChartData = prepareChartData(state.value.culturesCells as object);
|
||||||
|
|
||||||
const accordionItems = [
|
const accordionItems: AccordionItems[] = [
|
||||||
{
|
{
|
||||||
title: 'Prowincje',
|
title: 'Prowincje',
|
||||||
content: provincesData.value as ProvincesResponse<unknown>[],
|
content: provincesData.value as ProvincesResponse<unknown>[],
|
||||||
@@ -53,12 +63,7 @@ function prepareChartData(content: object) {
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div class="grid grid-cols-12 gap-3">
|
<div class="grid grid-cols-12 gap-3">
|
||||||
<AdministrationAccordion
|
<AdministrationAccordion class="col-span-4" :accordionItems="accordionItems" />
|
||||||
class="col-span-4"
|
|
||||||
:accordionItems="accordionItems"
|
|
||||||
:turn="turn"
|
|
||||||
:state="state"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<AdministrationDetails
|
<AdministrationDetails
|
||||||
class="col-span-8 flex w-full flex-col items-center justify-center"
|
class="col-span-8 flex w-full flex-col items-center justify-center"
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
import type { StatesResponse, TurnsResponse } from '@/types/pb-types';
|
import type { StatesResponse, TurnsResponse } from '@/types/pb-types';
|
||||||
|
|
||||||
export const useReportStore = defineStore('useReportStore', () => {
|
export const useReportStore = defineStore('useReportStore', () => {
|
||||||
const state = ref<StatesResponse<unknown, unknown, unknown, unknown, unknown>>();
|
const state = ref<StatesResponse<unknown, unknown, unknown, unknown, unknown>>(
|
||||||
const turn = ref<TurnsResponse<unknown>>();
|
{} as StatesResponse<unknown, unknown, unknown, unknown, unknown>
|
||||||
|
);
|
||||||
|
const turn = ref<TurnsResponse<unknown>>({} as TurnsResponse<unknown>);
|
||||||
|
|
||||||
function setState(newState: StatesResponse<unknown, unknown, unknown, unknown, unknown>): void {
|
function setState(newState: StatesResponse<unknown, unknown, unknown, unknown, unknown>): void {
|
||||||
state.value = newState;
|
state.value = newState;
|
||||||
|
|||||||
Reference in New Issue
Block a user