From 298a799e03a9982b6fa3370a81327c2a01cb49ed Mon Sep 17 00:00:00 2001 From: Arnaud Date: Tue, 24 Sep 2024 12:56:06 +0200 Subject: [PATCH] Improve empty state --- .../Availability/AvailabilitiesTable.tsx | 25 ++++++--- .../Availability/AvailabilityReservations.css | 34 ------------- .../Availability/AvailabilityReservations.tsx | 51 +++++++++---------- .../Availailibities/Availabilities.tsx | 16 ------ 4 files changed, 43 insertions(+), 83 deletions(-) diff --git a/src/components/Availability/AvailabilitiesTable.tsx b/src/components/Availability/AvailabilitiesTable.tsx index ebdfcb9..2647d0a 100644 --- a/src/components/Availability/AvailabilitiesTable.tsx +++ b/src/components/Availability/AvailabilitiesTable.tsx @@ -4,17 +4,18 @@ import { PrettyBytes } from "../../utils/bytes"; import { AvailabilityActionsCell } from "./AvailabilityActionsCell"; import { CodexAvailability } from "@codex-storage/sdk-js/async"; import { Times } from "../../utils/times"; +import { useState } from "react"; +import { AvailabilityReservations } from "./AvailabilityReservations"; type Props = { // onEdit: () => void; availabilities: CodexAvailability[]; - onReservationsShow: (availability: CodexAvailability) => void; }; -export function AvailabilitiesTable({ - availabilities, - onReservationsShow, -}: Props) { +export function AvailabilitiesTable({ availabilities }: Props) { + const [availability, setAvailability] = useState( + null + ); const headers = [ "id", "total size", @@ -24,6 +25,10 @@ export function AvailabilitiesTable({ "actions", ]; + const onReservationsShow = (a: CodexAvailability) => setAvailability(a); + + const onReservationsClose = () => setAvailability(null); + const cells = availabilities.map((a) => { return [ @@ -39,5 +44,13 @@ export function AvailabilitiesTable({ ]; }) || []; - return ; + return ( + <> +
+ + + ); } diff --git a/src/components/Availability/AvailabilityReservations.css b/src/components/Availability/AvailabilityReservations.css index f6af0b0..b95f09c 100644 --- a/src/components/Availability/AvailabilityReservations.css +++ b/src/components/Availability/AvailabilityReservations.css @@ -1,37 +1,3 @@ -.reservations { - transition: transform 0.15s; - max-width: 800px; - overflow-y: auto; - overflow-x: hidden; - opacity: 0; - z-index: -1; - max-height: 100%; - left: 50%; - top: 50%; - transform: translate(-50%, -50%) scale(0); - position: fixed; - display: flex; - flex-direction: column; - background-color: var(--codex-background); - padding: 1.5rem; - border-radius: var(--codex-border-radius); -} - -.reservations--open { - transform: translate(-50%, -50%) scale(1); -} - -.reservations--open { - opacity: 1; - z-index: 10; -} - -.reservations-buttons { - margin-top: 1rem; - display: flex; - justify-content: center; -} - .reservations-title { margin-left: auto; margin-right: auto; diff --git a/src/components/Availability/AvailabilityReservations.tsx b/src/components/Availability/AvailabilityReservations.tsx index 29757d1..24210f1 100644 --- a/src/components/Availability/AvailabilityReservations.tsx +++ b/src/components/Availability/AvailabilityReservations.tsx @@ -1,24 +1,19 @@ import { - Backdrop, - Button, EmptyPlaceholder, Modal, - Placeholder, SpaceAllocation, Spinner, } from "@codex-storage/marketplace-ui-components"; -import { classnames } from "../../utils/classnames"; import "./AvailabilityReservations.css"; import { useQuery, useQueryClient } from "@tanstack/react-query"; import { CodexSdk } from "../../sdk/codex"; import { Promises } from "../../utils/promises"; import { CodexAvailability } from "@codex-storage/sdk-js"; import { useEffect } from "react"; -import { ErrorIcon } from "../ErrorIcon/ErrorIcon"; import { ErrorPlaceholder } from "../ErrorPlaceholder/ErrorPlaceholder"; type Props = { - availability: CodexAvailability; + availability: CodexAvailability | null; open: boolean; onClose: () => unknown; }; @@ -41,16 +36,27 @@ export function AvailabilityReservations({ isPending, error, } = useQuery({ - queryFn: () => { - return CodexSdk.marketplace - .reservations(availability?.id) - .then((s) => Promises.rejectOnError(s)); - }, + queryFn: () => + CodexSdk.marketplace + .reservations(availability!.id) + .then((s) => Promises.rejectOnError(s)), queryKey: ["reservations"], retry: 0, staleTime: 0, + initialData: [], + enabled: !!availability, }); + if (!availability) { + return ( + + + + ); + } + if (isPending) { return ( @@ -85,22 +91,13 @@ export function AvailabilityReservations({ return ( -
- Availability reservations - - {isEmpty ? ( - - ) : ( - - )} - -
-
-
+ {isEmpty ? ( + + ) : ( + + )}
); } diff --git a/src/components/Availailibities/Availabilities.tsx b/src/components/Availailibities/Availabilities.tsx index 2846638..d33b94b 100644 --- a/src/components/Availailibities/Availabilities.tsx +++ b/src/components/Availailibities/Availabilities.tsx @@ -23,9 +23,6 @@ const defaultSpace = { export function Availabilities() { { - const [availabilitySelected, setAvailabilitySelected] = - useState(null); - // Error will be catched in ErrorBounday const { data: availabilities = [], isPending } = useQuery({ queryFn: () => @@ -48,11 +45,6 @@ export function Availabilities() { staleTime: 24 * 60 * 60 * 1000, }); - const onReservationsShow = (a: CodexAvailability) => - setAvailabilitySelected(a); - - const onReservationsClose = () => setAvailabilitySelected(null); - const allocation = availabilities .map((a) => ({ title: Strings.shortId(a.id), @@ -62,13 +54,6 @@ export function Availabilities() { return (
- {availabilitySelected && ( - - )} -
{isPending ? (
@@ -79,7 +64,6 @@ export function Availabilities() {
)}