fix: autumn-js invalidates cache
This commit is contained in:
@@ -6,7 +6,7 @@ import type {
|
||||
ClientOpenCustomerPortalParams,
|
||||
ClientSetupPaymentParams,
|
||||
} from "autumn-js/react";
|
||||
import { useCustomer } from "autumn-js/react";
|
||||
import { useCustomer, useListPlans } from "autumn-js/react";
|
||||
import { useId, useState } from "react";
|
||||
import { DataViewer } from "@/components/debug/DataViewer";
|
||||
import { DebugCard } from "@/components/debug/DebugCard";
|
||||
@@ -53,6 +53,9 @@ const toErrorPayload = ({ error }: { error: unknown }) => {
|
||||
};
|
||||
|
||||
export default function UseAutumnScenarioPage() {
|
||||
const customerResult = useCustomer({
|
||||
errorOnNotFound: false,
|
||||
});
|
||||
const {
|
||||
isLoading,
|
||||
error,
|
||||
@@ -62,10 +65,11 @@ export default function UseAutumnScenarioPage() {
|
||||
check,
|
||||
setupPayment,
|
||||
openCustomerPortal,
|
||||
} = useCustomer({
|
||||
errorOnNotFound: false,
|
||||
});
|
||||
} = customerResult;
|
||||
|
||||
const plansResult = useListPlans();
|
||||
|
||||
const [showDebugData, setShowDebugData] = useState(false);
|
||||
const [lastUpdatedAt, setLastUpdatedAt] = useState<string | null>(null);
|
||||
const [isRunning, setIsRunning] = useState(false);
|
||||
const [lastAction, setLastAction] = useState<LastActionState>(null);
|
||||
@@ -83,7 +87,7 @@ export default function UseAutumnScenarioPage() {
|
||||
const [setupPaymentSuccessUrl, setSetupPaymentSuccessUrl] = useState("");
|
||||
const [setupPaymentPlanId, setSetupPaymentPlanId] = useState("");
|
||||
const [checkoutSessionParams, setCheckoutSessionParams] = useState(
|
||||
'{\n "billing_address_collection": "required",\n "automatic_tax": { "enabled": true }\n}',
|
||||
'{\n "billing_address_collection": "required"\n}',
|
||||
);
|
||||
|
||||
// Form element IDs
|
||||
@@ -569,6 +573,36 @@ export default function UseAutumnScenarioPage() {
|
||||
value={lastAction?.error ?? null}
|
||||
defaultExpandedDepth={3}
|
||||
/>
|
||||
|
||||
<DebugCard
|
||||
title="Hook Data"
|
||||
actions={
|
||||
<label className="flex items-center gap-2 text-sm text-zinc-600">
|
||||
<input
|
||||
type="checkbox"
|
||||
checked={showDebugData}
|
||||
onChange={(e) => setShowDebugData(e.target.checked)}
|
||||
className="rounded border-zinc-300"
|
||||
/>
|
||||
Show
|
||||
</label>
|
||||
}
|
||||
>
|
||||
{showDebugData && (
|
||||
<div className="grid gap-4 lg:grid-cols-2">
|
||||
<DataViewer
|
||||
title="useCustomer"
|
||||
value={customerResult.data ?? null}
|
||||
defaultExpandedDepth={2}
|
||||
/>
|
||||
<DataViewer
|
||||
title="useListPlans"
|
||||
value={plansResult.data ?? null}
|
||||
defaultExpandedDepth={2}
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</DebugCard>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "autumn-js",
|
||||
"description": "Autumn JS Library",
|
||||
"version": "1.0.3",
|
||||
"version": "1.0.4",
|
||||
"repository": "github:useautumn/autumn",
|
||||
"homepage": "https://docs.useautumn.com",
|
||||
"main": "./dist/sdk/index.js",
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
"use client";
|
||||
|
||||
import { useQueryClient } from "@tanstack/react-query";
|
||||
import type {
|
||||
AttachResponse,
|
||||
BillingUpdateResponse,
|
||||
@@ -48,6 +49,7 @@ export const useCustomerActions = ({
|
||||
client: IAutumnClient;
|
||||
customer: Customer | null;
|
||||
}) => {
|
||||
const queryClient = useQueryClient();
|
||||
const attach = useCallback(
|
||||
async (params: AttachParams): Promise<AttachResponse> => {
|
||||
const response = await client.attach({
|
||||
@@ -60,10 +62,12 @@ export const useCustomerActions = ({
|
||||
url: response.paymentUrl,
|
||||
openInNewTab: params.openInNewTab,
|
||||
});
|
||||
} else {
|
||||
queryClient.invalidateQueries({ queryKey: ["autumn"] });
|
||||
}
|
||||
return response;
|
||||
},
|
||||
[client],
|
||||
[client, queryClient],
|
||||
);
|
||||
|
||||
const previewAttach = useCallback(
|
||||
@@ -84,10 +88,12 @@ export const useCustomerActions = ({
|
||||
url: response.paymentUrl,
|
||||
openInNewTab: params.openInNewTab,
|
||||
});
|
||||
} else {
|
||||
queryClient.invalidateQueries({ queryKey: ["autumn"] });
|
||||
}
|
||||
return response;
|
||||
},
|
||||
[client],
|
||||
[client, queryClient],
|
||||
);
|
||||
|
||||
const previewUpdateSubscription = useCallback(
|
||||
@@ -140,10 +146,12 @@ export const useCustomerActions = ({
|
||||
url: response.paymentUrl,
|
||||
openInNewTab: params.openInNewTab,
|
||||
});
|
||||
} else {
|
||||
queryClient.invalidateQueries({ queryKey: ["autumn"] });
|
||||
}
|
||||
return response;
|
||||
},
|
||||
[client],
|
||||
[client, queryClient],
|
||||
);
|
||||
|
||||
const previewMultiAttach = useCallback(
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { test } from "bun:test";
|
||||
import { type ApiCustomerV3, tryCatch } from "@autumn/shared";
|
||||
import { expectCustomerFeatureCorrect } from "@tests/integration/billing/utils/expectCustomerFeatureCorrect";
|
||||
import {
|
||||
calculateTrialEndMs,
|
||||
@@ -12,57 +11,14 @@ import { initScenario, s } from "@tests/utils/testInitUtils/initScenario";
|
||||
import { advanceTestClock } from "@/utils/scriptUtils/testClockUtils";
|
||||
|
||||
test("temp: paid default trial customer can upgrade to premium", async () => {
|
||||
const customerId = `temp-default-trial-upgrade`;
|
||||
|
||||
const defaultTrial = products.defaultTrial({
|
||||
id: "default-trial",
|
||||
items: [items.monthlyMessages({ includedUsage: 500 })],
|
||||
trialDays: 7,
|
||||
cardRequired: false,
|
||||
});
|
||||
|
||||
const premium = products.premium({
|
||||
id: "premium",
|
||||
items: [items.monthlyMessages({ includedUsage: 1000 })],
|
||||
});
|
||||
const customerId = `sdk-test-customer`;
|
||||
|
||||
const { autumnV1, ctx, testClockId } = await initScenario({
|
||||
customerId,
|
||||
setup: [
|
||||
s.customer({ testClock: true, withDefault: true }),
|
||||
s.products({ list: [defaultTrial, premium] }),
|
||||
s.customer({ testClock: true, paymentMethod: "success" }),
|
||||
// s.products({ list: [defaultTrial, premium] }),
|
||||
],
|
||||
actions: [],
|
||||
});
|
||||
|
||||
const customerBeforeUpgrade =
|
||||
await autumnV1.customers.get<ApiCustomerV3>(customerId);
|
||||
|
||||
await expectProductTrialing({
|
||||
customer: customerBeforeUpgrade,
|
||||
productId: defaultTrial.id,
|
||||
trialEndsAt: calculateTrialEndMs({ trialDays: 7 }),
|
||||
});
|
||||
|
||||
expectCustomerFeatureCorrect({
|
||||
customer: customerBeforeUpgrade,
|
||||
featureId: TestFeature.Messages,
|
||||
includedUsage: 500,
|
||||
balance: 500,
|
||||
usage: 0,
|
||||
});
|
||||
|
||||
try {
|
||||
await autumnV1.billing.attach({
|
||||
customer_id: customerId,
|
||||
product_id: premium.id,
|
||||
// redirect_mode: "redirect_mode",
|
||||
});
|
||||
} catch (error) {}
|
||||
|
||||
await advanceTestClock({
|
||||
stripeCli: ctx.stripeCli,
|
||||
testClockId: testClockId!,
|
||||
numberOfDays: 12,
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user