0.7.178 • Published 1 year ago

@rxdi/graphql-client v0.7.178

Weekly downloads
221
License
MIT
Repository
github
Last release
1 year ago

Graphql module for client side rxdi application build with Apollo-graphql

Install

npm i @rxdi/graphql-client

Define routes with forRoot these will be evaluated lazy

import { Module } from '@rxdi/core';
import { AppComponent } from './app.component';
import { GraphqlModule } from '@rxdi/graphql-client';
import { DOCUMENTS } from './@introspection/documents';

@Module({
  imports: [
    GraphqlModule.forRoot({
      async onRequest(this: GraphQLRequest) {
        const headers = new Headers();
        headers.append('authorization', '');
        return headers;
      },
      uri: 'http://localhost:9000/graphql',
      pubsub: 'ws://localhost:9000/subscriptions',
      apolloClientOptions: {
        /* ApolloClientOptions defined above */
      },
      apolloRequestHandler: (operation, forward) => forward(operation)
      /*
      * Will cancel all request from the same type
      * in order to make only 1 request for specific update or query
      * `false` by default
      */
      cancelPendingRequests: true,
    }, DOCUMENTS),
  ],
  bootstrap: [AppComponent],
})
export class AppModule {}

In order to collect DOCUMENTS from .graphql files we need @gapi/cli

npm i -g @gapi/cli

Collect queries/mutations/subscriptions/fragments

gapi schema introspect --collect-documents --collect-types

More information can be found HERE

ApolloClientOptions interface

interface ApolloClientOptions {
  link?: ApolloLink;
  cache: ApolloCache;
  ssrForceFetchDelay?: number;
  ssrMode?: boolean;
  connectToDevTools?: boolean;
  queryDeduplication?: boolean;
  defaultOptions?: DefaultOptions;
  assumeImmutableResults?: boolean;
  resolvers?: Resolvers | Resolvers[];
  typeDefs?: string | string[] | DocumentNode | DocumentNode[];
  fragmentMatcher?: FragmentMatcher;
  name?: string;
  version?: string;
}

Base component

import { Injector } from "@rxdi/core";
import { DocumentTypes } from "../@introspection/documentTypes";
import { of, Observable } from "rxjs";
import { switchMap } from "rxjs/operators";
import { IQuery, IMutation, ISubscription } from "../@introspection";
import { LitElement } from "@rxdi/lit-html";
import {
  importQuery,
  ApolloClient,
  QueryOptions,
  SubscriptionOptions,
  MutationOptions,
  DataProxy,
} from "@rxdi/graphql-client";

export class BaseComponent extends LitElement {
  @Injector(ApolloClient)
  public graphql: ApolloClient;

  query<T = IQuery>(options: ImportQueryMixin) {
    return of(importQuery(options.query)).pipe(
      switchMap((query) => this.graphql.query({ ...options, query }) as any)
    ) as Observable<{ data: T }>;
  }

  mutate<T = IMutation>(options: ImportMutationMixin) {
    return of(importQuery(options.mutation)).pipe(
      switchMap((mutation) => this.graphql.mutate({ ...options, mutation }) as any)
    ) as Observable<{ data: T }>;
  }

  subscribe<T = ISubscription>(options: ImportSubscriptionMixin) {
    return of(importQuery(options.query)).pipe(
      switchMap((query) => this.graphql.subscribe({ ...options, query }) as any)
    ) as Observable<{ data: T }>;
  }
}

interface ImportQueryMixin extends QueryOptions {
  query: DocumentTypes;
}

interface ImportSubscriptionMixin extends SubscriptionOptions {
  query: DocumentTypes;
}

interface ImportMutationMixin extends MutationOptions {
  mutation: DocumentTypes;
  update?(proxy: DataProxy, res: { data: IMutation }): void;
}

Usage

import { Component, html, css, async } from "@rxdi/lit-html";
import { BaseComponent } from "../../shared/base.component";
import { RouteParams } from "@rxdi/router";
import { map } from "rxjs/operators";

@Component({
  selector: "project-details-component",
  style: css`
    .container {
      width: 1000px;
    }
  `,
  template(this: DetailsComponent) {
    return html`
      <div class="container">
        ${async(this.project)}
      </div>
    `;
  },
})
export class DetailsComponent extends BaseComponent {
  @RouteParams()
  private params: { projectName: string };

  private project: Observable<IProjectType>;

  OnUpdateFirst() {
    this.project = this.getProject();
  }
  getProject() {
    return this.query({
      query: "get-project.query.graphql",
      variables: {
        name: this.params.projectName,
      },
    }).pipe(
      map(({ data }) => data.getProject),
      map(
        (project) => html`
          <p>${project.createdAt}</p>
          <p>${project.id}</p>
          <p>${project.name}</p>
          <p>${project.ownedBy}</p>
        `
      )
    );
  }
}

Advanced features

Compression of Documents can be done like so

0.7.176

1 year ago

0.7.175

1 year ago

0.7.178

1 year ago

0.7.177

1 year ago

0.7.174

2 years ago

0.7.173

2 years ago

0.7.170

2 years ago

0.7.172

2 years ago

0.7.171

2 years ago

0.7.169

2 years ago

0.7.167

2 years ago

0.7.168

2 years ago

0.7.163

2 years ago

0.7.162

2 years ago

0.7.165

2 years ago

0.7.164

2 years ago

0.7.166

2 years ago

0.7.161

2 years ago

0.7.160

2 years ago

0.7.159

2 years ago

0.7.158

2 years ago

0.7.157

2 years ago

0.7.152

3 years ago

0.7.154

3 years ago

0.7.153

3 years ago

0.7.156

3 years ago

0.7.155

3 years ago

0.7.151

3 years ago

0.7.150

3 years ago

0.7.149

3 years ago

0.7.148

3 years ago

0.7.147

3 years ago

0.7.141

3 years ago

0.7.140

3 years ago

0.7.143

3 years ago

0.7.142

3 years ago

0.7.145

3 years ago

0.7.144

3 years ago

0.7.146

3 years ago

0.7.138

3 years ago

0.7.137

3 years ago

0.7.139

3 years ago

0.7.136

4 years ago

0.7.135

4 years ago

0.7.121

4 years ago

0.7.120

4 years ago

0.7.123

4 years ago

0.7.122

4 years ago

0.7.125

4 years ago

0.7.124

4 years ago

0.7.130

4 years ago

0.7.132

4 years ago

0.7.131

4 years ago

0.7.134

4 years ago

0.7.133

4 years ago

0.7.127

4 years ago

0.7.126

4 years ago

0.7.129

4 years ago

0.7.128

4 years ago

0.7.118

4 years ago

0.7.119

4 years ago

0.7.116

4 years ago

0.7.117

4 years ago

0.7.115

4 years ago

0.7.114

4 years ago

0.7.113

4 years ago

0.7.112

4 years ago

0.7.111

4 years ago

0.7.110

4 years ago

0.7.109

4 years ago

0.7.108

4 years ago

0.7.107

4 years ago

0.7.103

4 years ago

0.7.102

4 years ago

0.7.105

4 years ago

0.7.104

4 years ago

0.7.106

4 years ago

0.7.101

4 years ago

0.7.100

4 years ago

0.7.99

4 years ago

0.7.98

4 years ago

0.7.97

4 years ago

0.7.95

4 years ago

0.7.96

4 years ago

0.7.94

4 years ago

0.7.93

4 years ago

0.7.91

5 years ago

0.7.92

5 years ago

0.7.90

5 years ago

0.7.88

5 years ago

0.7.89

5 years ago

0.7.87

5 years ago

0.7.86

5 years ago

0.7.85

5 years ago

0.7.84

5 years ago

0.7.83

5 years ago

0.7.82

5 years ago

0.7.81

5 years ago

0.7.80

5 years ago

0.7.79

5 years ago

0.7.78

5 years ago

0.7.77

5 years ago

0.7.76

5 years ago

0.7.75

5 years ago

0.7.74

5 years ago

0.7.73

5 years ago

0.7.72

5 years ago

0.7.71

5 years ago

0.7.70

5 years ago

0.7.69

5 years ago

0.7.68

5 years ago

0.7.67

5 years ago

0.7.66

5 years ago

0.7.63

5 years ago

0.7.62

5 years ago

0.7.61

5 years ago

0.7.60

5 years ago

0.7.57

5 years ago

0.7.56

5 years ago

0.7.59

5 years ago

0.7.58

5 years ago

0.7.53

5 years ago

0.7.51

5 years ago

0.7.50

5 years ago

0.7.52

5 years ago

0.7.48

5 years ago

0.7.49

5 years ago

0.7.46

5 years ago

0.7.47

5 years ago

0.7.38

6 years ago

0.7.37

6 years ago

0.7.36

6 years ago

0.7.35

6 years ago

0.7.34

6 years ago

0.7.33

6 years ago

0.7.32

6 years ago

0.7.31

6 years ago

0.7.30

6 years ago

0.7.29

6 years ago

0.7.28

6 years ago

0.7.27

6 years ago

0.7.26

6 years ago

0.7.25

6 years ago

0.7.24

6 years ago

0.7.23

6 years ago

0.7.22

6 years ago

0.7.21

6 years ago

0.7.20

6 years ago

0.7.19

6 years ago

0.7.18

6 years ago

0.7.17

6 years ago

0.7.16

6 years ago

0.7.15

6 years ago

0.7.14

6 years ago

0.7.13

6 years ago

0.7.12

6 years ago

0.7.11

6 years ago

0.7.10

6 years ago

0.7.9

6 years ago

0.7.8

6 years ago

0.7.7

6 years ago

0.7.6

6 years ago

0.7.5

6 years ago

0.7.4

6 years ago

0.7.3

6 years ago

0.7.2

6 years ago

0.7.1

6 years ago

0.7.0

6 years ago

0.6.13

6 years ago

0.6.12

6 years ago

0.6.11

6 years ago

0.6.10

6 years ago

0.6.9

6 years ago

0.6.8

6 years ago

0.6.7

6 years ago

0.6.6

6 years ago

0.6.5

6 years ago

0.6.4

6 years ago

0.6.3

6 years ago

0.6.2

6 years ago

0.6.1

6 years ago

0.6.0

6 years ago

0.5.21

6 years ago

0.5.20

6 years ago

0.5.19

6 years ago

0.5.18

6 years ago

0.5.17

6 years ago

0.5.16

6 years ago

0.5.15

6 years ago

0.5.14

6 years ago

0.5.13

6 years ago

0.5.12

6 years ago

0.5.11

6 years ago

0.5.10

6 years ago

0.5.9

6 years ago

0.5.8

6 years ago

0.5.7

6 years ago

0.5.6

6 years ago

0.5.5

6 years ago

0.5.4

6 years ago

0.5.3

6 years ago

0.5.2

6 years ago

0.5.1

6 years ago

0.5.0

6 years ago

0.4.35

6 years ago

0.4.34

6 years ago

0.4.33

6 years ago

0.4.32

6 years ago

0.4.31

6 years ago

0.4.30

6 years ago

0.4.29

6 years ago

0.4.28

6 years ago

0.4.27

6 years ago

0.4.26

6 years ago

0.4.25

6 years ago

0.4.24

6 years ago

0.4.23

6 years ago

0.4.22

6 years ago

0.4.21

6 years ago

0.4.20

6 years ago

0.4.19

6 years ago

0.4.18

6 years ago

0.4.17

6 years ago

0.4.16

6 years ago

0.4.15

6 years ago

0.4.14

6 years ago

0.4.13

6 years ago

0.4.12

6 years ago

0.4.11

6 years ago

0.4.10

6 years ago

0.4.9

6 years ago

0.4.8

6 years ago

0.4.7

6 years ago

0.4.6

6 years ago

0.4.5

6 years ago

0.4.4

6 years ago

0.4.3

6 years ago

0.4.2

6 years ago

0.4.1

6 years ago

0.4.0

6 years ago

0.3.19

6 years ago

0.3.18

6 years ago

0.3.17

6 years ago

0.3.16

6 years ago

0.3.15

6 years ago

0.3.14

6 years ago

0.3.13

6 years ago

0.3.12

6 years ago

0.3.11

6 years ago

0.3.10

6 years ago

0.3.9

6 years ago

0.3.8

6 years ago

0.3.7

6 years ago

0.3.6

6 years ago

0.3.5

6 years ago

0.3.4

6 years ago

0.3.3

6 years ago

0.3.2

6 years ago

0.3.1

6 years ago

0.3.0

6 years ago

0.2.36

6 years ago

0.2.35

6 years ago

0.2.34

6 years ago

0.2.33

6 years ago

0.2.32

6 years ago

0.2.31

6 years ago

0.2.30

6 years ago

0.2.29

6 years ago

0.2.28

6 years ago

0.2.27

6 years ago

0.2.26

6 years ago