diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0aadb234..675f2d21 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,7 @@
# master
- Simplify `missingFieldHandlers`. https://github.com/zth/rescript-relay/pull/589
+- Fix behavior of `refetchVariables` on optional variables. https://github.com/zth/rescript-relay/pull/588
# 4.1.0
diff --git a/packages/relay b/packages/relay
index 9296be1f..a6cb9529 160000
--- a/packages/relay
+++ b/packages/relay
@@ -1 +1 @@
-Subproject commit 9296be1f6fa7b8fd9fd326d556b20222b04c331e
+Subproject commit a6cb952907a74812e2b726c1bfab9da78dc0d0db
diff --git a/packages/rescript-relay/.gitignore b/packages/rescript-relay/.gitignore
index c372ea2c..a3aa48a8 100644
--- a/packages/rescript-relay/.gitignore
+++ b/packages/rescript-relay/.gitignore
@@ -4,4 +4,5 @@ node_modules
src/Dummy.re*
.bsb.lock
*.log
-relay-compiler
\ No newline at end of file
+relay-compiler
+__tests_preloaded__/__generated__/RelaySchemaAssets_graphql.res
\ No newline at end of file
diff --git a/packages/rescript-relay/__tests__/Test_refetching-tests.js b/packages/rescript-relay/__tests__/Test_refetching-tests.js
index 865f64ed..b3a00d83 100644
--- a/packages/rescript-relay/__tests__/Test_refetching-tests.js
+++ b/packages/rescript-relay/__tests__/Test_refetching-tests.js
@@ -10,12 +10,12 @@ describe("Fragment", () => {
test("refetching works", async () => {
queryMock.mockQuery({
name: "TestRefetchingQuery",
- variables: { beforeDate: "2023-01-01T00:00:00.000Z" },
+ variables: { beforeDate: "2023-01-01T00:00:00.000Z", showOnlineStatus: true, number: 10 },
data: {
loggedInUser: {
id: "user-1",
firstName: "First",
- onlineStatus: null,
+ onlineStatus: "offline",
friendsConnection: {
totalCount: 20,
},
@@ -40,6 +40,7 @@ describe("Fragment", () => {
showOnlineStatus: true,
friendsOnlineStatuses: ["Online", "offline"],
beforeDate: null,
+ number:10,
},
data: {
node: {
diff --git a/packages/rescript-relay/__tests__/Test_refetching.res b/packages/rescript-relay/__tests__/Test_refetching.res
index eb2ca824..d8da9d67 100644
--- a/packages/rescript-relay/__tests__/Test_refetching.res
+++ b/packages/rescript-relay/__tests__/Test_refetching.res
@@ -1,8 +1,10 @@
module Query = %relay(`
- query TestRefetchingQuery($beforeDate: Datetime) {
+ query TestRefetchingQuery($beforeDate: Datetime, $number: Number, $showOnlineStatus: Boolean!) {
loggedInUser {
...TestRefetching_user @arguments(
beforeDate: $beforeDate
+ number: $number
+ showOnlineStatus: $showOnlineStatus
)
}
}
@@ -15,13 +17,14 @@ module Fragment = %relay(`
friendsOnlineStatuses: { type: "[OnlineStatus!]" }
showOnlineStatus: { type: "Boolean", defaultValue: false }
beforeDate: { type: "Datetime" }
+ number: { type: "Number" }
) {
firstName
onlineStatus @include(if: $showOnlineStatus)
friendsConnection(statuses: $friendsOnlineStatuses) {
totalCount
}
- friends(beforeDate: $beforeDate) {
+ friends(beforeDate: $beforeDate, number: $number) {
id
}
}
@@ -43,6 +46,8 @@ module Test = {
let query = Query.use(
~variables={
beforeDate: Date.fromString("2023-01-01T00:00:00.000Z"),
+ showOnlineStatus: true,
+ number: [10],
},
)
@@ -65,7 +70,6 @@ module Test = {
startTransition(() => {
refetch(
~variables=Fragment.makeRefetchVariables(
- ~showOnlineStatus=Some(true),
~friendsOnlineStatuses=Some([Online, Offline]),
~beforeDate=None,
),
diff --git a/packages/rescript-relay/__tests__/Test_refetchingRecord-tests.js b/packages/rescript-relay/__tests__/Test_refetchingRecord-tests.js
new file mode 100644
index 00000000..1e0101bf
--- /dev/null
+++ b/packages/rescript-relay/__tests__/Test_refetchingRecord-tests.js
@@ -0,0 +1,73 @@
+require("@testing-library/jest-dom/extend-expect");
+const t = require("@testing-library/react");
+const React = require("react");
+const queryMock = require("./queryMock");
+const ReactTestUtils = require("react-dom/test-utils");
+
+const { test_refetching } = require("./Test_refetchingRecord.bs");
+
+describe("Fragment", () => {
+ test("refetching works when using a record for refetchVariables", async () => {
+ queryMock.mockQuery({
+ name: "TestRefetchingRecordQuery",
+ variables: { beforeDate: "2023-01-01T00:00:00.000Z", showOnlineStatus: true, number: 10 },
+ data: {
+ loggedInUser: {
+ id: "user-1",
+ firstName: "First",
+ onlineStatus: "offline",
+ friendsConnection: {
+ totalCount: 20,
+ },
+ friends: [
+ {
+ id: "user-2",
+ },
+ ],
+ },
+ },
+ });
+
+ t.render(test_refetching());
+
+ await t.screen.findByText("First is -");
+ await t.screen.findByText("Friends: 20");
+
+ queryMock.mockQuery({
+ name: "TestRefetchingRecordRefetchQuery",
+ variables: {
+ id: "user-1",
+ showOnlineStatus: true,
+ friendsOnlineStatuses: ["Online", "offline"],
+ beforeDate: null,
+ number:10,
+ },
+ data: {
+ node: {
+ __typename: "User",
+ id: "user-1",
+ firstName: "First",
+ onlineStatus: "Online",
+ friendsConnection: {
+ totalCount: 10,
+ },
+ friends: [
+ {
+ id: "user-2",
+ },
+ {
+ id: "user-3",
+ },
+ ],
+ },
+ },
+ });
+
+ ReactTestUtils.act(() => {
+ t.fireEvent.click(t.screen.getByText("Fetch online status"));
+ });
+
+ await t.screen.findByText("First is online");
+ await t.screen.findByText("Friends: 10");
+ });
+});
diff --git a/packages/rescript-relay/__tests__/Test_refetchingRecord.res b/packages/rescript-relay/__tests__/Test_refetchingRecord.res
new file mode 100644
index 00000000..723875bb
--- /dev/null
+++ b/packages/rescript-relay/__tests__/Test_refetchingRecord.res
@@ -0,0 +1,98 @@
+module Query = %relay(`
+ query TestRefetchingRecordQuery($beforeDate: Datetime, $number: Number, $showOnlineStatus: Boolean!) {
+ loggedInUser {
+ ...TestRefetchingRecord_user @arguments(
+ beforeDate: $beforeDate
+ number: $number
+ showOnlineStatus: $showOnlineStatus
+ )
+ }
+ }
+`)
+
+module Fragment = %relay(`
+ fragment TestRefetchingRecord_user on User
+ @refetchable(queryName: "TestRefetchingRecordRefetchQuery")
+ @argumentDefinitions(
+ friendsOnlineStatuses: { type: "[OnlineStatus!]" }
+ showOnlineStatus: { type: "Boolean", defaultValue: false }
+ beforeDate: { type: "Datetime" }
+ number: { type: "Number" }
+ ) {
+ firstName
+ onlineStatus @include(if: $showOnlineStatus)
+ friendsConnection(statuses: $friendsOnlineStatuses) {
+ totalCount
+ }
+ friends(beforeDate: $beforeDate, number: $number) {
+ id
+ }
+ }
+`)
+
+module FragmentWithNoArgs = %relay(`
+ fragment TestRefetchingRecordNoArgs_query on Query
+ @refetchable(queryName: "TestRefetchingRecordNoArgsRefetchQuery")
+ {
+ loggedInUser {
+ id
+ }
+ }
+`)
+
+module Test = {
+ @react.component
+ let make = () => {
+ let query = Query.use(
+ ~variables={
+ beforeDate: Date.fromString("2023-01-01T00:00:00.000Z"),
+ showOnlineStatus: true,
+ number: [10],
+ },
+ )
+
+ let (data, refetch) = Fragment.useRefetchable(query.loggedInUser.fragmentRefs)
+
+ let (_, startTransition) = React.useTransition()
+
+
+ {React.string(
+ data.firstName ++
+ (" is " ++
+ switch data.onlineStatus {
+ | Some(Online) => "online"
+ | _ => "-"
+ }),
+ )}
+
{React.string("Friends: " ++ data.friendsConnection.totalCount->Int.toString)}
+
+
+ }
+}
+
+@live
+let test_refetching = () => {
+ let network = RescriptRelay.Network.makePromiseBased(~fetchFunction=RelayEnv.fetchQuery)
+
+ let environment = RescriptRelay.Environment.make(
+ ~network,
+ ~store=RescriptRelay.Store.make(~source=RescriptRelay.RecordSource.make()),
+ )
+
+
+
+
+}
diff --git a/packages/rescript-relay/__tests__/__generated__/TestAliasedFragmentsQuery_graphql.res b/packages/rescript-relay/__tests__/__generated__/TestAliasedFragmentsQuery_graphql.res
index 69b1f07a..293316b5 100644
--- a/packages/rescript-relay/__tests__/__generated__/TestAliasedFragmentsQuery_graphql.res
+++ b/packages/rescript-relay/__tests__/__generated__/TestAliasedFragmentsQuery_graphql.res
@@ -19,12 +19,12 @@ module Types = {
}
@live
type refetchVariables = {
- skipThing: option,
+ skipThing?: bool,
}
@live let makeRefetchVariables = (
~skipThing=?,
): refetchVariables => {
- skipThing: skipThing
+ skipThing: ?skipThing
}
}
diff --git a/packages/rescript-relay/__tests__/__generated__/TestCodesplitQuery_graphql.res b/packages/rescript-relay/__tests__/__generated__/TestCodesplitQuery_graphql.res
index 21db2265..ae4a4053 100644
--- a/packages/rescript-relay/__tests__/__generated__/TestCodesplitQuery_graphql.res
+++ b/packages/rescript-relay/__tests__/__generated__/TestCodesplitQuery_graphql.res
@@ -33,12 +33,12 @@ module Types = {
}
@live
type refetchVariables = {
- includeBestFriendDescription: option,
+ includeBestFriendDescription?: bool,
}
@live let makeRefetchVariables = (
~includeBestFriendDescription=?,
): refetchVariables => {
- includeBestFriendDescription: includeBestFriendDescription
+ includeBestFriendDescription: ?includeBestFriendDescription
}
}
diff --git a/packages/rescript-relay/__tests__/__generated__/TestConnectionsQuery_graphql.res b/packages/rescript-relay/__tests__/__generated__/TestConnectionsQuery_graphql.res
index 00c188e8..2c877f79 100644
--- a/packages/rescript-relay/__tests__/__generated__/TestConnectionsQuery_graphql.res
+++ b/packages/rescript-relay/__tests__/__generated__/TestConnectionsQuery_graphql.res
@@ -18,12 +18,12 @@ module Types = {
}
@live
type refetchVariables = {
- beforeDate: option,
+ beforeDate?: TestsUtils.Datetime.t,
}
@live let makeRefetchVariables = (
~beforeDate=?,
): refetchVariables => {
- beforeDate: beforeDate
+ beforeDate: ?beforeDate
}
}
diff --git a/packages/rescript-relay/__tests__/__generated__/TestCustomScalarsQuery_graphql.res b/packages/rescript-relay/__tests__/__generated__/TestCustomScalarsQuery_graphql.res
index 042cad39..870857e7 100644
--- a/packages/rescript-relay/__tests__/__generated__/TestCustomScalarsQuery_graphql.res
+++ b/packages/rescript-relay/__tests__/__generated__/TestCustomScalarsQuery_graphql.res
@@ -32,15 +32,15 @@ module Types = {
}
@live
type refetchVariables = {
- beforeDate: option