Skip to content

Commit 5f83600

Browse files
committed
Completed docs site for angular
1 parent 47cab3f commit 5f83600

File tree

10 files changed

+531
-9
lines changed

10 files changed

+531
-9
lines changed

biome.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
},
1919
"linter": {
2020
"enabled": true,
21+
"ignore": ["node_modules/**"],
2122
"rules": {
2223
"recommended": true,
2324
"style": {

dataconnect-sdk/js/default-connector/index.cjs.js

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,81 +7,89 @@ const connectorConfig = {
77
};
88
exports.connectorConfig = connectorConfig;
99

10-
exports.createMovieRef = function createMovieRef(dcOrVars, vars) {
10+
function createMovieRef(dcOrVars, vars) {
1111
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
1212
dcInstance._useGeneratedSdk();
1313
return mutationRef(dcInstance, 'CreateMovie', inputVars);
1414
}
15+
exports.createMovieRef = createMovieRef;
1516

1617
exports.createMovie = function createMovie(dcOrVars, vars) {
1718
return executeMutation(createMovieRef(dcOrVars, vars));
1819
};
1920

20-
exports.upsertMovieRef = function upsertMovieRef(dcOrVars, vars) {
21+
function upsertMovieRef(dcOrVars, vars) {
2122
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
2223
dcInstance._useGeneratedSdk();
2324
return mutationRef(dcInstance, 'UpsertMovie', inputVars);
2425
}
26+
exports.upsertMovieRef = upsertMovieRef;
2527

2628
exports.upsertMovie = function upsertMovie(dcOrVars, vars) {
2729
return executeMutation(upsertMovieRef(dcOrVars, vars));
2830
};
2931

30-
exports.deleteMovieRef = function deleteMovieRef(dcOrVars, vars) {
32+
function deleteMovieRef(dcOrVars, vars) {
3133
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
3234
dcInstance._useGeneratedSdk();
3335
return mutationRef(dcInstance, 'DeleteMovie', inputVars);
3436
}
37+
exports.deleteMovieRef = deleteMovieRef;
3538

3639
exports.deleteMovie = function deleteMovie(dcOrVars, vars) {
3740
return executeMutation(deleteMovieRef(dcOrVars, vars));
3841
};
3942

40-
exports.addMetaRef = function addMetaRef(dc) {
43+
function addMetaRef(dc) {
4144
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
4245
dcInstance._useGeneratedSdk();
4346
return mutationRef(dcInstance, 'AddMeta');
4447
}
48+
exports.addMetaRef = addMetaRef;
4549

4650
exports.addMeta = function addMeta(dc) {
4751
return executeMutation(addMetaRef(dc));
4852
};
4953

50-
exports.deleteMetaRef = function deleteMetaRef(dcOrVars, vars) {
54+
function deleteMetaRef(dcOrVars, vars) {
5155
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
5256
dcInstance._useGeneratedSdk();
5357
return mutationRef(dcInstance, 'DeleteMeta', inputVars);
5458
}
59+
exports.deleteMetaRef = deleteMetaRef;
5560

5661
exports.deleteMeta = function deleteMeta(dcOrVars, vars) {
5762
return executeMutation(deleteMetaRef(dcOrVars, vars));
5863
};
5964

60-
exports.listMoviesRef = function listMoviesRef(dc) {
65+
function listMoviesRef(dc) {
6166
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
6267
dcInstance._useGeneratedSdk();
6368
return queryRef(dcInstance, 'ListMovies');
6469
}
70+
exports.listMoviesRef = listMoviesRef;
6571

6672
exports.listMovies = function listMovies(dc) {
6773
return executeQuery(listMoviesRef(dc));
6874
};
6975

70-
exports.getMovieByIdRef = function getMovieByIdRef(dcOrVars, vars) {
76+
function getMovieByIdRef(dcOrVars, vars) {
7177
const { dc: dcInstance, vars: inputVars} = validateArgs(connectorConfig, dcOrVars, vars, true);
7278
dcInstance._useGeneratedSdk();
7379
return queryRef(dcInstance, 'GetMovieById', inputVars);
7480
}
81+
exports.getMovieByIdRef = getMovieByIdRef;
7582

7683
exports.getMovieById = function getMovieById(dcOrVars, vars) {
7784
return executeQuery(getMovieByIdRef(dcOrVars, vars));
7885
};
7986

80-
exports.getMetaRef = function getMetaRef(dc) {
87+
function getMetaRef(dc) {
8188
const { dc: dcInstance} = validateArgs(connectorConfig, dc, undefined);
8289
dcInstance._useGeneratedSdk();
8390
return queryRef(dcInstance, 'GetMeta');
8491
}
92+
exports.getMetaRef = getMetaRef;
8593

8694
exports.getMeta = function getMeta(dc) {
8795
return executeQuery(getMetaRef(dc));

docs.json

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
"id": "react",
1616
"title": "React",
1717
"href": "/react"
18+
},
19+
{
20+
"id": "angular",
21+
"title": "Angular",
22+
"href": "/angular"
1823
}
1924
],
2025
"sidebar": [
@@ -42,6 +47,37 @@
4247
}
4348
]
4449
},
50+
{
51+
"tab": "angular",
52+
"group": "Data Connect",
53+
"pages": [
54+
{
55+
"title": "Getting Started",
56+
"href": "/angular/data-connect"
57+
},
58+
{
59+
"title": "Querying",
60+
"href": "/angular/data-connect/querying"
61+
},
62+
{
63+
"title": "Mutations",
64+
"href": "/angular/data-connect/mutations"
65+
},
66+
{
67+
"group": "functions",
68+
"pages": [
69+
{
70+
"title": "injectDataConnectQuery",
71+
"href": "/angular/data-connect/functions/injectDataConnectQuery"
72+
},
73+
{
74+
"title": "injectDataConnectMutation",
75+
"href": "/angular/data-connect/functions/injectDataConnectMutation"
76+
}
77+
]
78+
}
79+
]
80+
},
4581
{
4682
"tab": "react",
4783
"group": "Authentication",
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
---
2+
title: injectDataConnectMutation
3+
---
4+
5+
`injectDataConnectMutation` is a hook designed to simplify handling mutations (creating, updating, deleting) with Firebase Data Connect.
6+
7+
See [mutations](/react/data-connect/mutations) for more information.
8+
9+
## Features
10+
11+
- Simplifies mutation handling for <b>create</b>, <b>update</b>, and <b>delete</b> operations using Firebase Data Connect.
12+
- Provides <b>type-safe</b> handling of mutations based on your Firebase Data Connect schema.
13+
- Automatically manages <b>pending</b>, <b>success</b>, and <b>error</b> states for mutations.
14+
- Supports <b>optimistic updates</b> and <b>caching</b> to improve user experience and performance.
15+
16+
## Usage
17+
18+
```ts
19+
import { injectDataConnectMutation } from "@tanstack-query-firebase/angular/data-connect";
20+
import { createMovieRef } from "@your-package-name/your-connector";
21+
22+
class AddMovieComponent() {
23+
createMovie = injectDataConnectMutation(
24+
createMovieRef
25+
);
26+
addMovie() {
27+
createMovie.mutate({
28+
title: 'John Wick',
29+
genre: "Action",
30+
imageUrl: "https://example.com/image.jpg",
31+
});
32+
}
33+
return (
34+
<button
35+
disabled={createMovie.isPending()}
36+
(click)="addMovie()"
37+
>
38+
{{createMovie.isPending() ? "Creating..." : "Create Movie"}}
39+
</button>
40+
);
41+
}
42+
```
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
title: injectDataConnectQuery
3+
---
4+
5+
`injectDataConnectQuery` is a hook designed to simplify data fetching and state management with Firebase Data Connect.
6+
7+
See [querying](/angular/data-connect/querying) for more information.
8+
9+
## Features
10+
11+
- Provides <b>type-safe</b> handling of queries based on the Firebase Data Connect schema.
12+
- Simplifies data fetching using Firebase Data Connect.
13+
- Automatically manages <b>loading</b>, <b>success</b>, and <b>error</b> states.
14+
- Supports <b>refetching data</b> with integrated <b>caching</b>.
15+
16+
## Usage
17+
18+
```ts
19+
import { injectDataConnectQuery } from '@tanstack-query-firebase/angular/data-connect';
20+
import { listMoviesRef } from "@your-package-name/your-connector";
21+
22+
// class
23+
export class MovieListComponent {
24+
movies = injectDataConnectQuery(listMoviesRef());
25+
}
26+
27+
// template
28+
@if (movies.isPending()) {
29+
Loading...
30+
}
31+
@if (movies.error()) {
32+
An error has occurred: {{ movies.error() }}
33+
}
34+
@if (movies.data(); as data) {
35+
@for (movie of data.movies; track movie.id) {
36+
<mat-card appearance="outlined">
37+
<mat-card-content>{{movie.description}}</mat-card-content>
38+
</mat-card>
39+
} @empty {
40+
<h2>No items!</h2>
41+
}
42+
}
43+
```
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
---
2+
title: Firebase Data Connect
3+
---
4+
5+
Firebase Data Connect is a relational database service for mobile and web apps that lets you build and scale using a fully-managed PostgreSQL database powered by Cloud SQL. It provides secure schema, query and mutation management using GraphQL technology that integrates well with Firebase Authentication.
6+
7+
To get started, ensure you have setup your Firebase project and have the Data Connect setup in your project. To learn more,
8+
follow the [Firebase Data Connect documentation](https://firebase.google.com/docs/data-connect/quickstart).
9+
10+
## Setup
11+
12+
Before using the Tanstack Query Firebase hooks for Data Connect, ensure you have configured your application using your chosen connector:
13+
14+
```ts
15+
// app.config.ts
16+
export const appConfig: ApplicationConfig = {
17+
providers: [
18+
...
19+
provideFirebaseApp(() =>
20+
initializeApp(/*Replace with your firebase config*/)
21+
),
22+
provideDataConnect(() => getDataConnect(connectorConfig)),
23+
provideTanStackQuery(new QueryClient()),
24+
],
25+
};
26+
```
27+
28+
## Importing
29+
30+
The package exports are available via the `@tanstack-query-firebase/angular` package under the `data-connect` namespace:
31+
32+
```ts
33+
import { injectDataConnectQuery } from "@tanstack-query-firebase/angular/data-connect";
34+
```
35+
36+
## Basic Usage
37+
38+
To use the Tanstack Query Firebase injectors, you can either use the generated SDKs, or the `injectDataConnectQuery` injector to fetch data from the database:
39+
40+
### Using the Generated SDK
41+
42+
The generated SDK reduces the boilerplate required to use Tanstack Query Firebase's injectors. Instead of having to provide a ref to `injectDataConnectQuery`, you simply need to call the generated
43+
injector function like so:
44+
45+
```ts
46+
import { injectListMyPosts } from '@firebasegen/posts/angular'
47+
48+
@Component({
49+
...
50+
template: `
51+
@if (posts.isPending()) {
52+
Loading...
53+
}
54+
@if (posts.error()) {
55+
An error has occurred: {{ posts.error() }}
56+
}
57+
@if (posts.data(); as data) {
58+
@for (post of data.posts; track post.id) {
59+
<mat-card appearance="outlined">
60+
<mat-card-content>{{post.description}}</mat-card-content>
61+
</mat-card>
62+
} @empty {
63+
<h2>No items!</h2>
64+
}
65+
}
66+
`,
67+
})
68+
export class PostListComponent {
69+
// Calls `injectDataConnectQuery` with the corresponding types.
70+
posts = injectListMyPosts();
71+
}
72+
```
73+
74+
### Using `injectDataConnectQuery`
75+
76+
Alternatively, you can use the `injectDataConnectQuery` injector. To use this, you need to pass the Response and Data generics:
77+
78+
```ts
79+
import { injectDataConnectQuery } from "@tanstack-query-firebase/angular";
80+
import { listMoviesRef } from "@firebasegen/posts";
81+
82+
@Component({
83+
...
84+
template: `
85+
@if (posts.isPending()) {
86+
Loading...
87+
}
88+
@if (posts.error()) {
89+
An error has occurred: {{ posts.error() }}
90+
}
91+
@if (posts.data(); as data) {
92+
@for (post of data.posts; track post.id) {
93+
<mat-card appearance="outlined">
94+
<mat-card-content>{{post.description}}</mat-card-content>
95+
</mat-card>
96+
} @empty {
97+
<h2>No items!</h2>
98+
}
99+
}
100+
`,
101+
})
102+
export class PostListComponent {
103+
// Calls `injectDataConnectQuery` with the corresponding types.
104+
// Alternatively:
105+
// injectDataConnectQuery(queryRef<ListMoviesData, ListMoviesResponse>(dc, 'ListMovies'))
106+
posts = injectDataConnectQuery(listMoviesRef());
107+
}
108+
```
109+
110+
The hooks will automatically infer the data type from the connector and the query and automtically create a [query key](https://tanstack.com/query/latest/docs/framework/react/guides/query-keys) for the query.
111+
112+
## Learning more
113+
114+
To learn more about the Data Connect hooks, check out the following pages:
115+
116+
- [Querying](/angular/data-connect/querying)
117+
- [Mutations](/angular/data-connect/mutations)

0 commit comments

Comments
 (0)