- {/* Next, add items to define what customers with this product
- get access to, and how much they should be charged for it. */}
- Next, add which features your customers can use on this
- product and how much it should cost.
-
+ {/* Next, add items to define what customers with this product
+ get access to, and how much they should be charged for it. */}
+ Next, add which features your customers can use on this
+ product and how much it should cost.
+
+ );
+};
diff --git a/vite/src/views/features/CreateFeature.tsx b/vite/src/views/products/features/components/CreateFeature.tsx
similarity index 81%
rename from vite/src/views/features/CreateFeature.tsx
rename to vite/src/views/products/features/components/CreateFeature.tsx
index 2df3c88aa..38680b176 100644
--- a/vite/src/views/features/CreateFeature.tsx
+++ b/vite/src/views/products/features/components/CreateFeature.tsx
@@ -1,4 +1,4 @@
-import { DialogFooter, DialogHeader } from "@/components/ui/dialog";
+import { DialogHeader } from "@/components/ui/dialog";
import { Button } from "@/components/ui/button";
import { Dialog, DialogTrigger, DialogTitle } from "@/components/ui/dialog";
@@ -8,40 +8,33 @@ import {
CreateFeature as CreateFeatureType,
FeatureType,
} from "@autumn/shared";
-import { useFeaturesContext } from "./FeaturesContext";
import { useAxiosInstance } from "@/services/useAxiosInstance";
import { FeatureService } from "@/services/FeatureService";
-import { FeatureConfig } from "./metered-features/FeatureConfig";
+import { FeatureConfig } from "./FeatureConfig";
import { getBackendErr } from "@/utils/genUtils";
-import { useEnv } from "@/utils/envUtils";
-import { getDefaultFeature } from "./utils/defaultFeature";
+import { getDefaultFeature } from "../utils/defaultFeature";
import {
CustomDialogBody,
CustomDialogContent,
} from "@/components/general/modal-components/DialogContentWrapper";
-import { CreateFeatureFooter } from "./components/CreateFeatureFooter";
+import { CreateFeatureFooter } from "./CreateFeatureFooter";
+import { useFeaturesQuery } from "@/hooks/queries/useFeaturesQuery";
export const CreateFeature = ({
- // isFromEntitlement,
- // setShowFeatureCreate,
onSuccess,
setOpen,
open,
entityCreate,
handleBack,
}: {
- // isFromEntitlement: boolean;
- // setShowFeatureCreate: (show: boolean) => void;
onSuccess?: (newFeature: CreateFeatureType) => Promise;
setOpen: (open: boolean) => void;
open: boolean;
entityCreate?: boolean;
handleBack?: () => void;
}) => {
- const env = useEnv();
-
- const axiosInstance = useAxiosInstance({ env });
- const { mutate, features } = useFeaturesContext();
+ const axiosInstance = useAxiosInstance();
+ const { refetch } = useFeaturesQuery();
const [feature, setFeature] = useState(getDefaultFeature(entityCreate));
const [eventNameInput, setEventNameInput] = useState("");
const [eventNameChanged, setEventNameChanged] = useState(true);
@@ -87,19 +80,9 @@ export const CreateFeature = ({
if (onSuccess) {
await onSuccess(createdFeature);
} else {
- await mutate();
+ await refetch();
setOpen(false);
}
-
- // if (isFromEntitlement) {
- // if (createdFeature) {
- // setSelectedFeature(createdFeature);
- // }
- // setShowFeatureCreate(false);
- // } else {
- // await mutate();
- // setOpen(false);
- // }
} catch (error) {
toast.error(getBackendErr(error, "Failed to create feature"));
}
diff --git a/vite/src/views/features/components/CreateFeatureFooter.tsx b/vite/src/views/products/features/components/CreateFeatureFooter.tsx
similarity index 100%
rename from vite/src/views/features/components/CreateFeatureFooter.tsx
rename to vite/src/views/products/features/components/CreateFeatureFooter.tsx
diff --git a/vite/src/views/features/metered-features/FeatureConfig.tsx b/vite/src/views/products/features/components/FeatureConfig.tsx
similarity index 100%
rename from vite/src/views/features/metered-features/FeatureConfig.tsx
rename to vite/src/views/products/features/components/FeatureConfig.tsx
index bd0097ebb..92bd6827d 100644
--- a/vite/src/views/features/metered-features/FeatureConfig.tsx
+++ b/vite/src/views/products/features/components/FeatureConfig.tsx
@@ -15,9 +15,9 @@ import {
TooltipContent,
TooltipTrigger,
} from "@/components/ui/tooltip";
-import { SelectFeatureUsageType } from "./SelectFeatureUsageType";
import { notNullish, nullish } from "@/utils/genUtils";
import { SelectFeatureType } from "./SelectFeatureType";
+import { SelectFeatureUsageType } from "./SelectFeatureUsageType";
export function FeatureConfig({
feature,
diff --git a/vite/src/views/features/FeatureTypeBadge.tsx b/vite/src/views/products/features/components/FeatureTypeBadge.tsx
similarity index 100%
rename from vite/src/views/features/FeatureTypeBadge.tsx
rename to vite/src/views/products/features/components/FeatureTypeBadge.tsx
diff --git a/vite/src/views/features/FeaturesTable.tsx b/vite/src/views/products/features/components/FeaturesTable.tsx
similarity index 73%
rename from vite/src/views/features/FeaturesTable.tsx
rename to vite/src/views/products/features/components/FeaturesTable.tsx
index 97fb55121..c294057b6 100644
--- a/vite/src/views/features/FeaturesTable.tsx
+++ b/vite/src/views/products/features/components/FeaturesTable.tsx
@@ -2,18 +2,18 @@ import UpdateFeature from "./UpdateFeature";
import CopyButton from "@/components/general/CopyButton";
import { useState } from "react";
-import { useNavigate } from "react-router";
import { formatUnixToDateTime } from "@/utils/formatUtils/formatDateUtils";
import { Feature, FeatureType } from "@autumn/shared";
-import { FeatureRowToolbar } from "./FeatureRowToolbar";
-import { useFeaturesContext } from "./FeaturesContext";
+import { FeatureRowToolbar } from "../feature-row-toolbar/FeatureRowToolbar";
import { FeatureTypeBadge } from "./FeatureTypeBadge";
import { Item, Row } from "@/components/general/TableGrid";
import { AdminHover } from "@/components/general/AdminHover";
+import { useFeaturesQuery } from "@/hooks/queries/useFeaturesQuery";
+import { useProductsQueryState } from "../../hooks/useProductsQueryState";
export const FeaturesTable = () => {
- const { env, features, onboarding, showArchived } = useFeaturesContext();
- const navigate = useNavigate();
+ const { features } = useFeaturesQuery();
+ const { queryStates } = useProductsQueryState();
const [open, setOpen] = useState(false);
const [selectedFeature, setSelectedFeature] = useState(null);
@@ -33,6 +33,13 @@ export const FeaturesTable = () => {
setOpen(true);
};
+ const filteredFeatures = features.filter((feature) => {
+ if (feature.type === FeatureType.CreditSystem) return false;
+ return queryStates.showArchivedFeatures
+ ? feature.archived
+ : !feature.archived;
+ });
+
return (
{
NameIDType
- {!onboarding && Event Names}
- {!onboarding && Created At}
+ Event Names
+ Created At
) : (
- {showArchived
- ? "You haven't archived any features yet."
+ {queryStates.showArchivedFeatures
+ ? "You haven't archived any features yet."
: "Define the features of your application you want to charge for."}
)}
- {features.map((feature: Feature) => (
+ {filteredFeatures.map((feature: Feature) => (
{
- {!onboarding && (
-
- {getMeteredEventNames(feature)}
-
- )}
- {!onboarding && (
-
- {formatUnixToDateTime(feature.created_at).date}
- {/*
- {" "}
- {formatUnixToDateTime(feature.created_at).time}
- */}
-
- )}
+
+ {getMeteredEventNames(feature)}
+
+
+ {formatUnixToDateTime(feature.created_at).date}
+
diff --git a/vite/src/views/features/metered-features/SelectFeatureType.tsx b/vite/src/views/products/features/components/SelectFeatureType.tsx
similarity index 97%
rename from vite/src/views/features/metered-features/SelectFeatureType.tsx
rename to vite/src/views/products/features/components/SelectFeatureType.tsx
index 206769a50..96d2d067f 100644
--- a/vite/src/views/features/metered-features/SelectFeatureType.tsx
+++ b/vite/src/views/products/features/components/SelectFeatureType.tsx
@@ -7,7 +7,7 @@ import {
FeatureUsageType,
} from "@autumn/shared";
import { Zap, Clock, ArrowUp01, Flag } from "lucide-react";
-import { defaultMeteredConfig } from "./defaultFeatureConfig";
+import { defaultMeteredConfig } from "../utils/defaultFeatureConfig";
export const SelectFeatureType = ({
feature,
diff --git a/vite/src/views/features/metered-features/SelectFeatureUsageType.tsx b/vite/src/views/products/features/components/SelectFeatureUsageType.tsx
similarity index 94%
rename from vite/src/views/features/metered-features/SelectFeatureUsageType.tsx
rename to vite/src/views/products/features/components/SelectFeatureUsageType.tsx
index ae2d553cf..03ac12ffc 100644
--- a/vite/src/views/features/metered-features/SelectFeatureUsageType.tsx
+++ b/vite/src/views/products/features/components/SelectFeatureUsageType.tsx
@@ -4,8 +4,8 @@ import {
FeatureType,
FeatureUsageType,
} from "@autumn/shared";
-import { Clock, ToggleLeft, Zap } from "lucide-react";
-import { defaultMeteredConfig } from "./defaultFeatureConfig";
+import { Clock, Zap } from "lucide-react";
+import { defaultMeteredConfig } from "../utils/defaultFeatureConfig";
import FieldLabel from "@/components/general/modal-components/FieldLabel";
import { SelectType } from "@/components/general/SelectType";
diff --git a/vite/src/views/features/UpdateFeature.tsx b/vite/src/views/products/features/components/UpdateFeature.tsx
similarity index 89%
rename from vite/src/views/features/UpdateFeature.tsx
rename to vite/src/views/products/features/components/UpdateFeature.tsx
index 5477264e4..1b8c9646f 100644
--- a/vite/src/views/features/UpdateFeature.tsx
+++ b/vite/src/views/products/features/components/UpdateFeature.tsx
@@ -1,14 +1,8 @@
import { Button } from "@/components/ui/button";
-import { FeatureConfig } from "./metered-features/FeatureConfig";
-import {
- Dialog,
- DialogContent,
- DialogTitle,
- DialogFooter,
-} from "@/components/ui/dialog";
+import { Dialog, DialogTitle } from "@/components/ui/dialog";
import { useEffect, useRef, useState } from "react";
import { FeatureService } from "@/services/FeatureService";
-import { useFeaturesContext } from "./FeaturesContext";
+
import { useAxiosInstance } from "@/services/useAxiosInstance";
import { toast } from "sonner";
import { FeatureType } from "@autumn/shared";
@@ -19,6 +13,8 @@ import {
CustomDialogFooter,
} from "@/components/general/modal-components/DialogContentWrapper";
import { CircleArrowUp, Save } from "lucide-react";
+import { useFeaturesQuery } from "@/hooks/queries/useFeaturesQuery";
+import { FeatureConfig } from "@/views/products/features/components/FeatureConfig";
export default function UpdateFeature({
open,
@@ -31,8 +27,8 @@ export default function UpdateFeature({
selectedFeature: any;
setSelectedFeature: (feature: any) => void;
}) {
- const { env, mutate } = useFeaturesContext();
- const axiosInstance = useAxiosInstance({ env });
+ const { refetch } = useFeaturesQuery();
+ const axiosInstance = useAxiosInstance();
const [updateLoading, setUpdateLoading] = useState(false);
const [eventNameInput, setEventNameInput] = useState("");
const [eventNameChanged, setEventNameChanged] = useState(true);
@@ -77,7 +73,7 @@ export default function UpdateFeature({
config: updateConfig(),
});
- await mutate();
+ await refetch();
setOpen(false);
} catch (error) {
console.log(error);
diff --git a/vite/src/views/credits/CreateCreditSystem.tsx b/vite/src/views/products/features/credit-systems/CreateCreditSystem.tsx
similarity index 72%
rename from vite/src/views/credits/CreateCreditSystem.tsx
rename to vite/src/views/products/features/credit-systems/CreateCreditSystem.tsx
index 1bee7153d..aa1e65526 100644
--- a/vite/src/views/credits/CreateCreditSystem.tsx
+++ b/vite/src/views/products/features/credit-systems/CreateCreditSystem.tsx
@@ -1,31 +1,25 @@
import { Button } from "@/components/ui/button";
import {
Dialog,
- DialogContent,
DialogTrigger,
DialogHeader,
DialogTitle,
- DialogFooter,
} from "@/components/ui/dialog";
import { useEffect, useState } from "react";
import { FeatureService } from "@/services/FeatureService";
import { useAxiosInstance } from "@/services/useAxiosInstance";
import { toast } from "sonner";
-import {
- CreateFeature,
- Feature,
- FeatureType,
- FeatureUsageType,
-} from "@autumn/shared";
+import { CreateFeature, FeatureType, FeatureUsageType } from "@autumn/shared";
import { getBackendErr } from "@/utils/genUtils";
import CreditSystemConfig from "./CreditSystemConfig";
-import { useFeaturesContext } from "../features/FeaturesContext";
import {
CustomDialogBody,
CustomDialogContent,
CustomDialogFooter,
} from "@/components/general/modal-components/DialogContentWrapper";
+import { useFeaturesQuery } from "@/hooks/queries/useFeaturesQuery";
+import { validateCreditSystem } from "./utils/validateCreditSystem";
const defaultCreditSystem = {
name: "",
id: "",
@@ -36,33 +30,9 @@ const defaultCreditSystem = {
},
};
-export const validateCreditSystem = (
- creditSystem: CreateFeature
-): string | null => {
- if (!creditSystem.id || !creditSystem.name) {
- return "Please fill in all fields";
- }
-
- if (creditSystem.config.schema.length === 0) {
- return "Need at least one metered feature";
- }
-
- for (const item of creditSystem.config.schema) {
- if (!item.metered_feature_id) {
- return "Select a metered feature";
- }
-
- if (item.feature_amount <= 0 || item.credit_amount <= 0) {
- return "Credit amount must be greater than 0";
- }
- }
-
- return null;
-};
-
function CreateCreditSystem() {
- const { mutate, env } = useFeaturesContext();
- const axiosInstance = useAxiosInstance({ env: env });
+ const { refetch } = useFeaturesQuery();
+ const axiosInstance = useAxiosInstance();
const [isLoading, setIsLoading] = useState(false);
const [open, setOpen] = useState(false);
@@ -91,7 +61,7 @@ function CreateCreditSystem() {
type: FeatureType.CreditSystem,
config: creditSystem.config,
});
- await mutate();
+ await refetch();
setOpen(false);
} catch (error) {
toast.error(getBackendErr(error, "Failed to create credit system"));
@@ -125,9 +95,6 @@ function CreateCreditSystem() {
- {/*
-
- */}
);
}
diff --git a/vite/src/views/credits/CreditSystemConfig.tsx b/vite/src/views/products/features/credit-systems/CreditSystemConfig.tsx
similarity index 97%
rename from vite/src/views/credits/CreditSystemConfig.tsx
rename to vite/src/views/products/features/credit-systems/CreditSystemConfig.tsx
index 99969e781..272ed4d5c 100644
--- a/vite/src/views/credits/CreditSystemConfig.tsx
+++ b/vite/src/views/products/features/credit-systems/CreditSystemConfig.tsx
@@ -16,10 +16,10 @@ import {
} from "@/components/ui/select";
import { Input } from "@/components/ui/input";
-import React, { useEffect, useState } from "react";
+import { useEffect, useState } from "react";
import { Button } from "@/components/ui/button";
-import { useFeaturesContext } from "../features/FeaturesContext";
import { X } from "lucide-react";
+import { useFeaturesQuery } from "@/hooks/queries/useFeaturesQuery";
function CreditSystemConfig({
creditSystem,
@@ -28,7 +28,7 @@ function CreditSystemConfig({
creditSystem: CreateFeature;
setCreditSystem: (creditSystem: CreateFeature) => void;
}) {
- const { features } = useFeaturesContext();
+ const { features } = useFeaturesQuery();
const [fields, setFields] = useState(
creditSystem.name
? {
diff --git a/vite/src/views/credits/CreditSystemsTable.tsx b/vite/src/views/products/features/credit-systems/CreditSystemsTable.tsx
similarity index 80%
rename from vite/src/views/credits/CreditSystemsTable.tsx
rename to vite/src/views/products/features/credit-systems/CreditSystemsTable.tsx
index df10efa3a..7e3f2e106 100644
--- a/vite/src/views/credits/CreditSystemsTable.tsx
+++ b/vite/src/views/products/features/credit-systems/CreditSystemsTable.tsx
@@ -1,21 +1,27 @@
import { formatUnixToDateTime } from "@/utils/formatUtils/formatDateUtils";
-import { CreateFeature, Feature } from "@autumn/shared";
+import { CreateFeature, Feature, FeatureType } from "@autumn/shared";
import { useState } from "react";
-import { CreditSystemRowToolbar } from "./CreditSystemRowToolbar";
-import { useFeaturesContext } from "../features/FeaturesContext";
-import UpdateCreditSystem from "./UpdateCreditSystem";
+// import { CreditSystemRowToolbar } from "./CreditSystemRowToolbar";
+// import UpdateCreditSystem from "./UpdateCreditSystem";
import { Item, Row } from "@/components/general/TableGrid";
import { AdminHover } from "@/components/general/AdminHover";
+import { useFeaturesQuery } from "@/hooks/queries/useFeaturesQuery";
+import UpdateCreditSystem from "./UpdateCreditSystem";
+import { FeatureRowToolbar } from "../feature-row-toolbar/FeatureRowToolbar";
export const CreditSystemsTable = () => {
- const { creditSystems } = useFeaturesContext();
+ const { features } = useFeaturesQuery();
const [selectedCreditSystem, setSelectedCreditSystem] =
useState(null);
const [open, setOpen] = useState(false);
+ const creditSystems = features.filter(
+ (feature) => feature.type === FeatureType.CreditSystem
+ );
+
const handleRowClick = (id: string) => {
const creditSystem = creditSystems.find(
- (creditSystem: Feature) => creditSystem.id === id,
+ (creditSystem: Feature) => creditSystem.id === id
);
if (!creditSystem) return;
setSelectedCreditSystem(creditSystem);
@@ -74,13 +80,10 @@ export const CreditSystemsTable = () => {
{formatUnixToDateTime(creditSystem.created_at).date}
- {/*
- {" "}
- {formatUnixToDateTime(creditSystem.created_at).time}
- */}
-
+ {/* */}
+
))}
diff --git a/vite/src/views/credits/UpdateCreditSystem.tsx b/vite/src/views/products/features/credit-systems/UpdateCreditSystem.tsx
similarity index 84%
rename from vite/src/views/credits/UpdateCreditSystem.tsx
rename to vite/src/views/products/features/credit-systems/UpdateCreditSystem.tsx
index eba2895b6..f075c2d0a 100644
--- a/vite/src/views/credits/UpdateCreditSystem.tsx
+++ b/vite/src/views/products/features/credit-systems/UpdateCreditSystem.tsx
@@ -1,24 +1,19 @@
-import React, { useState } from "react";
+import { useState } from "react";
import CreditSystemConfig from "./CreditSystemConfig";
import { CreateFeature } from "@autumn/shared";
-import {
- Dialog,
- DialogContent,
- DialogFooter,
- DialogTitle,
-} from "@/components/ui/dialog";
+import { Dialog, DialogTitle } from "@/components/ui/dialog";
import { Button } from "@/components/ui/button";
import { FeatureService } from "@/services/FeatureService";
import { useAxiosInstance } from "@/services/useAxiosInstance";
import { toast } from "sonner";
-import { useFeaturesContext } from "../features/FeaturesContext";
-import { validateCreditSystem } from "./CreateCreditSystem";
import {
CustomDialogBody,
CustomDialogContent,
CustomDialogFooter,
} from "@/components/general/modal-components/DialogContentWrapper";
import { getBackendErr } from "@/utils/genUtils";
+import { validateCreditSystem } from "./utils/validateCreditSystem";
+import { useFeaturesQuery } from "@/hooks/queries/useFeaturesQuery";
function UpdateCreditSystem({
open,
@@ -32,8 +27,8 @@ function UpdateCreditSystem({
setSelectedCreditSystem: (creditSystem: CreateFeature) => void;
}) {
const [updateLoading, setUpdateLoading] = useState(false);
- const { env, mutate } = useFeaturesContext();
- const axiosInstance = useAxiosInstance({ env });
+ const { refetch } = useFeaturesQuery();
+ const axiosInstance = useAxiosInstance();
const handleUpdateCreditSystem = async () => {
const validationError = validateCreditSystem(selectedCreditSystem);
@@ -51,7 +46,7 @@ function UpdateCreditSystem({
...selectedCreditSystem,
}
);
- await mutate();
+ await refetch();
setOpen(false);
} catch (error) {
toast.error(getBackendErr(error, "Failed to update credit system"));
diff --git a/vite/src/views/products/features/credit-systems/utils/validateCreditSystem.ts b/vite/src/views/products/features/credit-systems/utils/validateCreditSystem.ts
new file mode 100644
index 000000000..1dfe7d741
--- /dev/null
+++ b/vite/src/views/products/features/credit-systems/utils/validateCreditSystem.ts
@@ -0,0 +1,25 @@
+import { CreateFeature } from "@autumn/shared";
+
+export const validateCreditSystem = (
+ creditSystem: CreateFeature
+): string | null => {
+ if (!creditSystem.id || !creditSystem.name) {
+ return "Please fill in all fields";
+ }
+
+ if (creditSystem.config.schema.length === 0) {
+ return "Need at least one metered feature";
+ }
+
+ for (const item of creditSystem.config.schema) {
+ if (!item.metered_feature_id) {
+ return "Select a metered feature";
+ }
+
+ if (item.feature_amount <= 0 || item.credit_amount <= 0) {
+ return "Credit amount must be greater than 0";
+ }
+ }
+
+ return null;
+};
diff --git a/vite/src/views/features/components/DeleteFeatureDialog.tsx b/vite/src/views/products/features/feature-row-toolbar/DeleteFeatureDialog.tsx
similarity index 89%
rename from vite/src/views/features/components/DeleteFeatureDialog.tsx
rename to vite/src/views/products/features/feature-row-toolbar/DeleteFeatureDialog.tsx
index bccd34d9e..0876893a0 100644
--- a/vite/src/views/features/components/DeleteFeatureDialog.tsx
+++ b/vite/src/views/products/features/feature-row-toolbar/DeleteFeatureDialog.tsx
@@ -2,49 +2,49 @@ import { Button } from "@/components/ui/button";
import {
Dialog,
DialogContent,
- DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
} from "@/components/ui/dialog";
import { Feature } from "@autumn/shared";
-import { useFeaturesContext } from "../FeaturesContext";
import { useState, useEffect } from "react";
import { FeatureService } from "@/services/FeatureService";
import { useAxiosInstance } from "@/services/useAxiosInstance";
import { getBackendErr } from "@/utils/genUtils";
import { toast } from "sonner";
-import { useAxiosPostSWR, useAxiosSWR } from "@/services/useAxiosSwr";
+import { useFeaturesQuery } from "@/hooks/queries/useFeaturesQuery";
+import { useGeneralQuery } from "@/hooks/queries/useGeneralQuery";
export const DeleteFeatureDialog = ({
feature,
open,
setOpen,
+ dropdownOpen,
}: {
feature: Feature;
open: boolean;
setOpen: (open: boolean) => void;
+ dropdownOpen: boolean;
}) => {
- const { mutate, env, features } = useFeaturesContext();
+ const { refetch } = useFeaturesQuery();
+ const axiosInstance = useAxiosInstance();
const [deleteLoading, setDeleteLoading] = useState(false);
const [archiveLoading, setArchiveLoading] = useState(false);
- const axiosInstance = useAxiosInstance({ env });
const {
data: deletionText,
- isLoading: isDeletionTextLoading,
- mutate: mutateDeletionText,
- } = useAxiosSWR({
+ isLoading: isFeatureInfoLoading,
+ refetch: refetchFeatureInfo,
+ } = useGeneralQuery({
url: `/features/data/deletion_text/${feature.id}`,
- options: {
- refreshInterval: 0,
- },
+ queryKey: ["featureInfo", feature.id],
+ enabled: dropdownOpen,
});
useEffect(() => {
if (open) {
- mutateDeletionText();
+ refetchFeatureInfo();
}
}, [open, feature.id]);
@@ -76,7 +76,7 @@ export const DeleteFeatureDialog = ({
setDeleteLoading(true);
try {
await FeatureService.deleteFeature(axiosInstance, feature.id);
- await mutate();
+ await refetch();
setOpen(false);
} catch (error) {
console.error("Error deleting feature:", error);
@@ -93,7 +93,7 @@ export const DeleteFeatureDialog = ({
await FeatureService.updateFeature(axiosInstance, feature.id, {
archived: newArchivedState,
});
- await mutate();
+ await refetch();
toast.success(
`Feature ${feature.name} ${newArchivedState ? "archived" : "unarchived"} successfully`
);
@@ -114,6 +114,8 @@ export const DeleteFeatureDialog = ({
}
};
+ if (isFeatureInfoLoading) return <>>;
+
return (