Skip to content

Commit

Permalink
support aliased fragments
Browse files Browse the repository at this point in the history
  • Loading branch information
zth committed Jul 1, 2024
1 parent b2c57fd commit acb4a4f
Show file tree
Hide file tree
Showing 8 changed files with 468 additions and 1 deletion.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

# Unreleased

- Support `@alias` fragments.

# 3.0.0-rc.9

- Fix client extension enums mixup with `FutureAddedValue`.
Expand Down
27 changes: 27 additions & 0 deletions packages/rescript-relay/__tests__/Test_aliasedFragments-tests.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
require("@testing-library/jest-dom/extend-expect");
const t = require("@testing-library/react");
const React = require("react");
const queryMock = require("./queryMock");

const { test_aliasedFragments } = require("./Test_aliasedFragments.bs");

describe("Aliased fragments", () => {
test("basic fragments work", async () => {
queryMock.mockQuery({
name: "TestAliasedFragmentsQuery",
variables: {
skipThing: false,
},
data: {
loggedInUser: {
id: "user-1",
firstName: "First",
lastName: "Last",
},
},
});

t.render(test_aliasedFragments());
await t.screen.findByText("First Last");
});
});
58 changes: 58 additions & 0 deletions packages/rescript-relay/__tests__/Test_aliasedFragments.res
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
module FragmentFirstName = %relay(`
fragment TestAliasedFragments_userFirstName on User {
firstName
}
`)

module FragmentLastName = %relay(`
fragment TestAliasedFragments_userLastName on User {
lastName
}
`)

module Query = %relay(`
query TestAliasedFragmentsQuery($skipThing: Boolean!) {
loggedInUser {
...TestAliasedFragments_userFirstName @alias
...TestAliasedFragments_userLastName @alias @skip(if: $skipThing)
}
}
`)

module Test = {
@react.component
let make = () => {
let query = Query.use(~variables={skipThing: false})
let firstNameData = FragmentFirstName.use(
query.loggedInUser.testAliasedFragments_userFirstName.fragmentRefs,
)
let lastNameData = FragmentLastName.useOpt(
query.loggedInUser.testAliasedFragments_userLastName->Belt.Option.map(f => f.fragmentRefs),
)

<div>
{React.string(
firstNameData.firstName ++
" " ++
switch lastNameData {
| None => "-"
| Some({lastName}) => lastName
},
)}
</div>
}
}

@live
let test_aliasedFragments = () => {
let network = RescriptRelay.Network.makePromiseBased(~fetchFunction=RelayEnv.fetchQuery)

let environment = RescriptRelay.Environment.make(
~network,
~store=RescriptRelay.Store.make(~source=RescriptRelay.RecordSource.make()),
)

<TestProviders.Wrapper environment>
<Test />
</TestProviders.Wrapper>
}

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

Loading

0 comments on commit acb4a4f

Please sign in to comment.