Comments (7)
For your use-case I think it would be possible to write your own function that wraps everything you need. Probably something similar to:
function apolloToSignal<T, Q extends keyof T, U>(
query : Observable<ApolloQueryResult<T>,
queryName: Q,
initialValue: U
): Signal<T[Q] | U>
It's only pseudo-code, but it should be possible to make it work.
For the time being I'd probably avoid introducing signal-related things in this package, unless we have a clear and strong need for it.
from apollo-angular.
Hello,
I agree that using observables in the library seems like the best plan. I do however have some questions about using apollo-angular together with signals. There are a few things that I'm running into that make it harder to work with than I want it to be, hopefully you have some ideas how to remedy these.
When I want to consume the query results in my component I use the provided toSignal
from Angular. I don't want to check for null values everywhere, so I would like to use { requireSync: true }
with an initialValue.
I tried using useInitialLoading: true
but that isn't sync. That would also give me back data: Data | null
which isn't really what I want.
Now I solve it by adding a startWith({data: initialData, loading: true, errors: undefined })
to the pipe. Before that I have a map operator that removes the queryname property from the data field
map((res: ApolloQueryResult<T>) => ({
...res,
data: res.data.queryname
}))
because having that extra property only gets in the way (especially in the types, because its dynamic). But that's probably there to accommodate the __typename field I guess?
But having to do this for every query is a bit cumbersome. I would love for an initialValue
option in (Watch)QueryOptions that would do the work of the startWith operator above.
Now it might seem a bit weird to have initial data when loading is true, but when you create a signal from your query, I would prefer to not have to null check every computed
that is derived from that data. eg:
query = toSignal(...);
multiplied = computed(() => query().data.selection * 2
instead of
query = toSignal(...)
multiplied = computed(() => (query().data?.selection ?? 1) * 2)
Got any tips op workarounds for how best deal with these situations?
from apollo-angular.
Related Issues (20)
- Feedback for “Subscriptions”
- Apollo never executes any requests HOT 1
- Feedback for “Testing”
- Angular 16 support HOT 6
- PersitedQueryLink: AssetNotDestroyed Error when running ssr
- ApolloTestingController doesn't seem to be triggering an HttpInterceptor
- Feedback for “Get Started”
- Feedback for “Pagination”
- TypeError: Cannot read properties of undefined (reading 'architect') HOT 1
- Feedback for “Server Side Rendering” HOT 1
- Feedback Reset Store on Logout
- For subscriptions, the errorPolicy setting does nothing. HOT 6
- Defer doesn't work with multipart/mixed or text/event-stream HOT 13
- Block ApolloClient devtools checks to run when using ApolloTestingModule HOT 1
- [docs] Simple Apollo Angular Example demo is broken
- Angular 17 support HOT 3
- apollo-angular schematics has a fixed version of apollo-angular and @apollo/client packages HOT 1
- Unable to load template plugin matching 'apollo-angular'
- `ERR_UNSUPPORTED_DIR_IMPORT` or `EISDIR` with `vitest` HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from apollo-angular.