fix: data loading after login fixed

This commit is contained in:
2025-07-04 21:12:01 +04:00
parent c3d135eba9
commit c866231730
6 changed files with 35 additions and 27 deletions

View File

@@ -1,27 +1,17 @@
import { modals } from "@mantine/modals";
import { Flex } from "@mantine/core";
import { DropResult } from "@hello-pangea/dnd";
import { useEffect, useState } from "react";
import { CardGroupService, CardService, CardSummary, CardSummaryReorderRequest } from "../../../../../client";
import { notifications } from "../../../../../shared/lib/notifications.ts";
import { dateWithoutTimezone } from "../../../../../shared/lib/date.ts";
type Props = {
summariesRaw: CardSummary[];
summaries: CardSummary[];
refetchSummaries: () => void;
}
const useCardsDnd = ({
summariesRaw,
refetchSummaries,
}: Props) => {
const [summaries, setSummaries] = useState(summariesRaw);
useEffect(() => {
setSummaries(summariesRaw);
}, [summariesRaw]);
const useCardsDnd = ({ summaries, refetchSummaries }: Props) => {
const recalculate = async (cardId: number) => {
return CardService.recalculateCardPrice({
requestBody: {
@@ -203,7 +193,6 @@ const useCardsDnd = ({
};
return {
summaries,
onCardDragEnd,
};
};

View File

@@ -1,5 +1,6 @@
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import { jwtDecode, JwtPayload as JwtPayloadBase } from "jwt-decode";
import { OpenAPI } from "../client";
interface AuthState {
isAuthorized: boolean;
@@ -38,6 +39,7 @@ const authSlice = createSlice({
const { sub, role } = jwtDecode<JwtPayload>(
action.payload.accessToken,
);
OpenAPI.TOKEN = action.payload.accessToken;
state.accessToken = action.payload.accessToken;
state.isAuthorized = true;
state.role = role;

View File

@@ -1,9 +1,12 @@
import { useEffect, useState } from "react";
import { type FullProjectSchema, ProjectService } from "../client";
import { useSelector } from "react-redux";
import { RootState } from "../redux/store.ts";
const useProjects = () => {
const [projects, setProjects] = useState<FullProjectSchema[]>([]);
const authState = useSelector((state: RootState) => state.auth);
const refetchProjects = () => {
ProjectService.getProjects()
@@ -14,8 +17,10 @@ const useProjects = () => {
};
useEffect(() => {
refetchProjects();
}, []);
if (authState.isAuthorized) {
refetchProjects();
}
}, [authState.isAuthorized]);
return {
projects,

View File

@@ -1,19 +1,27 @@
import { useParams } from "@tanstack/react-router";
import { CardPageContextProvider, useCardPageContext } from "../../CardsPage/contexts/CardPageContext.tsx";
import ProductAndServiceTab from "../../../modules/cardModules/cardEditorTabs/ProductAndServiceTab/ProductAndServiceTab.tsx";
import ProductAndServiceTab
from "../../../modules/cardModules/cardEditorTabs/ProductAndServiceTab/ProductAndServiceTab.tsx";
import React, { FC, useEffect } from "react";
import { CardService } from "../../../client";
import { useSelector } from "react-redux";
import { RootState } from "../../../redux/store.ts";
export type Props = {
cardId: number;
};
const CardPageContent: FC<Props> = ({ cardId }) => {
const { setSelectedCard } = useCardPageContext();
const authState = useSelector((state: RootState) => state.auth);
useEffect(() => {
CardService.getCardById({ cardId }).then(card => {
setSelectedCard(card);
});
}, []);
if (authState.isAuthorized) {
CardService.getCardById({ cardId }).then(card => {
setSelectedCard(card);
});
}
}, [authState.isAuthorized]);
return <ProductAndServiceTab />;
};

View File

@@ -17,21 +17,20 @@ type DndContextState = {
const DndContext = createContext<DndContextState | undefined>(undefined);
type DndContextProps = {
summariesRaw: CardSummary[];
summaries: CardSummary[];
refetchSummaries: () => void;
}
const useDndContextState = ({
summariesRaw,
summaries,
refetchSummaries,
}: DndContextProps) => {
const [dragState, setDragState] = useState<DragState>(DragState.DRAG_ENDED);
const {
summaries,
onCardDragEnd,
} = useCardsDnd({
summariesRaw,
summaries,
refetchSummaries,
});

View File

@@ -17,17 +17,22 @@ import ProjectEditDrawer from "../drawers/ProjectEditDrawer/ProjectEditDrawer.ts
import Boards from "../../../components/Dnd/Boards/Boards/Boards.tsx";
import { DndContextProvider } from "../contexts/DndContext.tsx";
import useCardSummaries from "../hooks/useCardSummaries.tsx";
import { useSelector } from "react-redux";
import { RootState } from "../../../redux/store.ts";
export const CardsPage: FC = () => {
const { form } = useCardsTableForm();
const { dealId } = useParams({ strict: false });
const { summaries, fetchSummaries } = useCardSummaries({ full: false });
const authState = useSelector((state: RootState) => state.auth);
const [displayMode, setDisplayMode] = useState<DisplayMode>(DisplayMode.BOARD);
useEffect(() => {
fetchSummaries();
}, []);
if (authState.isAuthorized) {
fetchSummaries();
}
}, [authState.isAuthorized]);
const tableBody = useMemo(() => {
return (
@@ -38,7 +43,7 @@ export const CardsPage: FC = () => {
const boardsBody = useMemo(() => {
return (
<DndContextProvider
summariesRaw={summaries}
summaries={summaries}
refetchSummaries={fetchSummaries}
>
<Boards />