From 76d3b6d423f2a7da35e303aab3d199a50c14fe0b Mon Sep 17 00:00:00 2001 From: morbalint Date: Thu, 28 Dec 2023 14:45:59 +0100 Subject: [PATCH] better isPublic handling --- Kemkas.Web/Controllers/CharacterController.cs | 4 +- Kemkas.Web/Program.cs | 2 + .../Character/CharacterDbModelToDtoService.cs | 1 + Kemkas.Web/ViewModels/CharacterDto.cs | 2 + Kemkas.Web/frontend/src/App.tsx | 31 +++++++- .../src/first-edition/api/character.api.ts | 10 ++- .../first-edition/pages/CreateCharacter.tsx | 78 ++++++++++++------- Kemkas.Web/frontend/src/shared/Header.tsx | 26 ++----- .../src/shared/contexts/UserContext.ts | 10 +++ .../frontend/src/shared/models/Fetched.ts | 6 ++ 10 files changed, 118 insertions(+), 52 deletions(-) create mode 100644 Kemkas.Web/frontend/src/shared/contexts/UserContext.ts create mode 100644 Kemkas.Web/frontend/src/shared/models/Fetched.ts diff --git a/Kemkas.Web/Controllers/CharacterController.cs b/Kemkas.Web/Controllers/CharacterController.cs index 02c8ce8..11e230b 100644 --- a/Kemkas.Web/Controllers/CharacterController.cs +++ b/Kemkas.Web/Controllers/CharacterController.cs @@ -17,7 +17,7 @@ public class CharacterController( : ControllerBase { [HttpPost] - public async Task> StoreNewCharacter([FromBody] CharacterDto dto, bool isPublic = true) + public async Task> StoreNewCharacter([FromBody] CharacterDto dto, [FromQuery]bool isPublic = true) { if (!ModelState.IsValid) { @@ -55,7 +55,7 @@ public class CharacterController( } [HttpPost("{id:guid}")] - public async Task> UpdateCharacter([FromRoute] Guid id, [FromBody] CharacterDto dto, bool isPublic = true) + public async Task> UpdateCharacter([FromRoute] Guid id, [FromBody] CharacterDto dto, [FromQuery]bool isPublic = true) { if (!ModelState.IsValid) { diff --git a/Kemkas.Web/Program.cs b/Kemkas.Web/Program.cs index 5867ba9..7c6bb7b 100644 --- a/Kemkas.Web/Program.cs +++ b/Kemkas.Web/Program.cs @@ -1,5 +1,6 @@ using System.Net; using System.Text.Encodings.Web; +using System.Text.Json.Serialization; using System.Text.Unicode; using Kemkas.Web.Config; using Microsoft.EntityFrameworkCore; @@ -55,6 +56,7 @@ builder.Services.AddAuthentication() builder.Services.AddControllersWithViews().AddJsonOptions(options => { + options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault; options.JsonSerializerOptions.AllowTrailingCommas = true; options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); }); diff --git a/Kemkas.Web/Services/Character/CharacterDbModelToDtoService.cs b/Kemkas.Web/Services/Character/CharacterDbModelToDtoService.cs index f9cfe59..7144ec6 100644 --- a/Kemkas.Web/Services/Character/CharacterDbModelToDtoService.cs +++ b/Kemkas.Web/Services/Character/CharacterDbModelToDtoService.cs @@ -44,6 +44,7 @@ public class CharacterDbModelToDtoService : ICharacterDbModelToDtoService PancelId = entity.Pancel, FegyverIds = entity.Felszereles.Where(x => x.IsFegyver).Select(x => x.Name).ToList(), }, + IsPublic = entity.IsPublic, }; } } \ No newline at end of file diff --git a/Kemkas.Web/ViewModels/CharacterDto.cs b/Kemkas.Web/ViewModels/CharacterDto.cs index 944de94..cbaa420 100644 --- a/Kemkas.Web/ViewModels/CharacterDto.cs +++ b/Kemkas.Web/ViewModels/CharacterDto.cs @@ -53,4 +53,6 @@ public struct CharacterDto [JsonPropertyName("felszereles")] public KarakterFelszerelesDto Felszereles { get; set; } + + public bool? IsPublic { get; set; } } \ No newline at end of file diff --git a/Kemkas.Web/frontend/src/App.tsx b/Kemkas.Web/frontend/src/App.tsx index 83a85c6..eccde9e 100644 --- a/Kemkas.Web/frontend/src/App.tsx +++ b/Kemkas.Web/frontend/src/App.tsx @@ -7,6 +7,8 @@ import CharacterList from "./first-edition/pages/CharacterList"; import ErrorBoundary from "./shared/ErrorBoundary"; import Header from "./shared/Header"; import Footer from "./shared/Footer"; +import {useState} from "react"; +import {UserContext, userDefaults} from './shared/contexts/UserContext'; function App(props: {faro?: Faro}) { const router = createBrowserRouter([ @@ -28,16 +30,41 @@ function App(props: {faro?: Faro}) { ErrorBoundary: ErrorBoundary, } ]); + + const [fetchedUser, setFetchedUser] = useState(userDefaults) + if (fetchedUser.state === "not-started") { + setFetchedUser({...fetchedUser, state: "loading"}) + fetch('api/User/me') + .then(response => { + if (response.ok) { + return response.text(); + } + console.log(response) + }) + .then(userNameResponse => { + const userName = userNameResponse && userNameResponse.length > 0 ? userNameResponse : null; + setFetchedUser({ + data: userName, + state: "finished" + }); + }) + .catch(() => { + setFetchedUser({ + data: null, + state: "finished" + }) + }) + } return ( - <> +