Skip to content

Commit

Permalink
backend coupling , refresh encapsulation , empty data / error fallbac…
Browse files Browse the repository at this point in the history
…k options
  • Loading branch information
Safouene1 committed Apr 25, 2024
1 parent cbc061e commit f175a38
Show file tree
Hide file tree
Showing 24 changed files with 558 additions and 230 deletions.
3 changes: 2 additions & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
"VITE_BACKEND_PORT=9000"
VITE_BACKEND_PORT=9000
VITE_API_TIMEOUT=5000
123 changes: 122 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,14 @@
"class-variance-authority": "^0.7.0",
"clsx": "^2.0.0",
"cmdk": "^1.0.0",
"dotenv": "^16.4.5",
"lucide-react": "^0.371.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-query": "^3.39.3",
"react-router-dom": "^6.16.0",
"react-wrap-balancer": "^1.1.0",
"sonner": "^1.4.41",
"tailwind-merge": "^1.14.0",
"tailwindcss-animate": "^1.0.7"
},
Expand Down
23 changes: 20 additions & 3 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,30 @@ import { RouterProvider } from "react-router-dom";
import { ThemeProvider } from "./contexts/ThemeContext";
import { router } from "./Router";
import { TooltipProvider } from "@/components/ui/tooltip";
import { toast, Toaster } from "sonner";
import { QueryClient, QueryClientProvider } from "react-query";

export default function App() {
const queryClient = new QueryClient();
queryClient.setDefaultOptions({
queries: {
onError: (error: unknown) => {
if (error instanceof Error) {
toast.error(`Something went wrong: ${error.message}`);
}
},
staleTime: 10000,
refetchOnWindowFocus: "always",
},
});
return (
<ThemeProvider>
<TooltipProvider>
<RouterProvider router={router} />
</TooltipProvider>
<QueryClientProvider client={queryClient}>
<TooltipProvider>
<Toaster richColors closeButton />
<RouterProvider router={router} />
</TooltipProvider>
</QueryClientProvider>
</ThemeProvider>
);
}
2 changes: 1 addition & 1 deletion src/Router.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import NoMatch from "./modules/fallback/NoMatch";
import ClustersPage from "@/modules/clusters/clusters-list/ClustersPage";
import { appConfig } from "@/config/app";
import { ClusterInfo } from "@/modules/clusters/cluster-information/ClusterInfo";
const defaultTab = appConfig.sveltosType;
const defaultTab = appConfig.defaultType;
const defaultPage = appConfig.defaultPage;
export const router = createBrowserRouter(
[
Expand Down
12 changes: 10 additions & 2 deletions src/api-client/apiClient.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
import axios from "axios";
import { toast } from "sonner";

const client = axios.create({
baseURL: import.meta.env.VITE_SVELTOS_API_BASE_URL,
timeout: 1000,
baseURL: "/api",
timeout: import.meta.env.VITE_API_TIMEOUT,
});

client.interceptors.request.use(function (config) {
config.headers["Content-Type"] = "application/json";
return config;
});

export default client;
4 changes: 2 additions & 2 deletions src/components/layouts/Header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import {
AccordionTrigger,
} from "@/components/ui/accordion";
import { ModeToggle } from "@/components/mode-toggle";
import { Badge } from "@/components/ui/badge";


export function Header() {
const [open, setOpen] = useState(false);
Expand Down Expand Up @@ -99,7 +99,7 @@ export function Header() {
cn(
"text-sm font-medium flex items-center transition-colors hover:text-primary",
isActive
? "bg-slate-100 dark:bg-slate-700 p-2 rounded hover:text-main-500 "
? "bg-slate-100 dark:bg-slate-800 p-2 rounded hover:text-main-500 "
: "text-foreground/60 hover:text-primary",
)
}
Expand Down
5 changes: 1 addition & 4 deletions src/components/ui/PageHeading.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { CardsFilterToolbar } from "@/modules/clusters/clusters-list/components/
interface PageHeadingProps {
title: string;
description: string;

}
export const PageHeading = ({ title, description }: PageHeadingProps) => {
return (
Expand All @@ -12,10 +13,6 @@ export const PageHeading = ({ title, description }: PageHeadingProps) => {
<h2 className="text-2xl font-bold tracking-tight">{title}</h2>
<p className="text-muted-foreground w-2/3">
{description}
<a href="#" className="text-main-500 hover:text-main-800">
Retry
</a>{" "}
or{" "}
<a
href="https://projectsveltos.github.io/sveltos/"
className="text-main-500 hover:text-main-800"
Expand Down
37 changes: 37 additions & 0 deletions src/components/ui/RefreshButton.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import * as React from "react";

import { cn } from "@/lib/utils";
import { Button, ButtonProps } from "@/components/ui/button";
import { useIsFetching, useQueryClient } from "react-query";

import { RefreshCcw } from "lucide-react";

const RefreshButton = React.forwardRef<HTMLButtonElement, ButtonProps>(
({ className, variant, size, asChild = false, ...props }, ref) => {

const queryClient = useQueryClient();
const isFetching = useIsFetching();
const handleRefresh = () =>{
queryClient.refetchQueries();
};
return (
<Button
variant={"outline"}
disabled={isFetching> 0}
onClick={handleRefresh}
className={className}
ref={ref}
>
<>


{isFetching>0 ? <RefreshCcw className="w-4 h-4 animate-spin mr-2" /> : <RefreshCcw className="w-4 h-4 mr-2" />}
Refresh
</>
</Button>
);
},
);
RefreshButton.displayName = "Button";

export { RefreshButton };
Loading

0 comments on commit f175a38

Please sign in to comment.