Giter VIP home page Giter VIP logo

ngx-airtable's Introduction

ngx-airtable

npm version

ngx-airtable 3 (beta)

FOR 2.0.x PLEASE GO TO THE 2.0.x BRANCH

An Angular module wrapping the Airtable API

Feel free to take a look at the DEMO.

Installation

Install via npm:

npm install ngx-airtable --save

or install via yarn

yarn add ngx-airtable

Usage

Import NgxAirtableModule and HttpClientModule

import {NgModule} from '@angular/core';
import {NgxAirtableModule} from 'ngx-airtable';
import {HttpClientModule} from '@angular/common/http';

@NgModule({
  imports: [
    HttpClientModule,
    NgxAirtableModule.forRoot()
  ],
  bootstrap: [AppComponent]
})
export class AppModule {
}

Global configuration

If you want to have a global configuration you can provide an option config when importing the module:

NgxAirtableModule.forRoot({ apiKey: 'YOUR_API_KEY' })

The API key is the only configuration value which has to be provided (either globally or by usage (using configure())). The endpoint url and the api version are provided with the following default values:

  • endpointUrl: 'https://api.airtable.com'
  • apiVersion: 0

If you want to you can overwrite them (either globally or by usage (using configure()).

API

This module is providing the same functionality as the official Airtable JavaScript Library airtable.js as of v0.5.0.

Airtable (Service)

Methods

  • configure(opts: AirtableConfiguration): Airtable: provides the configuration or overrides the global configuration used to connect to the Airtable API
  • base(baseId: string): Base: creates a new Base instance identified by id

Properties

  • options: AirtableConfiguration: provides an accessor for the options object passed to the configure method

Base

Methods

  • table(tableOpts: {tableName?: string; tableId?: string;}): Table: creates a new Table instance identified by name or id

Properties

  • baseId: string: provides an accessor for the Base's id
  • airtable: Airtable: provides an accessor for the overlaying Airtable instance

Table

Methods

  • find(id: string): Observable<any>: fetches a record identified by id
  • select(params?: SelectParams): Query: creates a new Query instance with the given parameters
  • create(entityData: any): Observable<any>: creates a new entity
  • update(id: string, entityData: any): Observable<any>: updated an entity identified by id with the given data
  • destroy(id: string): Observable<any>: deletes an entity identified by id
  • replace(id: string, entityData: any): Observable<any>: replaces an entity identified by id with the given data

Properties

  • base: Base: provides an accessor for the overlaying Base instance
  • urlEncodedNameOrId: string: provides an accessor for the url-friendly encoded Table name or id

Query

Methods

  • firstPage(): Observable<any>: fetches the first page (if pageSize is omitted => max. 100 records)
  • eachPage(): Observable<any>: fetches each page (all records but each page is emitted separately)
  • all(): Observable<any>: fetches all pages and emits all records at once

AirtableConfiguration

  • apiKey?: string: provides the API key to access Airtable
  • endpointUrl?: string: the API endpoint to hit. You might want to override it if you are using an API proxy (e.g. runscope.net) to debug your API calls
  • apiVersion?: number: the API version

LinkedTable

Extends Table

The LinkedTable does the same - according to data fetching - as the Table but it can handle entity relations while fetching. Take a look at the DEMO. What the LinkedTableis not capable of are entity modifications - create, update, delete.

Methods

  • static fromTable(origin: Table, links: Link[]): LinkedTable: creates a new LinkedTable instance using the provided origin Table and the given links
  • find(id: string): Observable<any>: fetches a record identified by id with its related entities
  • select(params?: SelectParams): LinkedQuery: creates a new LinkedQuery instance with the given parameters

LinkedQuery

Extends Query

The LinkedQuery does the same - according to data fetching - as the Query but it can handle entity relations while fetching. Take a look at the DEMO.

Methods

  • firstPage(): Observable<any>: fetches the first page (if pageSize is omitted => max. 100 records) with its related entities
  • eachPage(): Observable<any>: fetches each page (all records but each page is emitted separately) with its related entities
  • all(): Observable<any>: fetches all pages and emits all records at once with its related entities

SelectParams

  • fields?: string[]: limits the fetched fields per record
  • filterByFormula?: string: a formula used to filter the records
  • maxRecords?: number: limits the maximum record count
  • pageSize?: number: The number of records returned in each request. Must be less than or equal to 100. Default is 100.
  • sort?: SortParam[]: specifying sorting rules by field and direction
  • view?: string: the name or id of the view to fetch

SortParam

  • field: string: the name of the field to sort
  • direction: SortDirection: the direction to sort

SortDirection

  • type SortDirection = 'asc' | 'desc'

ngx-airtable's People

Contributors

bohoffi avatar mklickman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

ngx-airtable's Issues

Angular 6 compatibility

I noticed that there is a package.json file in here that seems to indicate that you meant it to be compatible with Angular 6, yet the Node Package is still on version 2.0 and Angular 4. When I try to use it my Angular 6 project, I get the following error:

ERROR Error: Uncaught (in promise): TypeError: rxjs_Observable.Observable.defer is not a function
TypeError: rxjs_Observable.Observable.defer is not a function
at Query.push../node_modules/ngx-airtable/bundles/ngx-airtable.umd.js.Query._all (ngx-airtable.umd.js:178)
at Query.push../node_modules/ngx-airtable/bundles/ngx-airtable.umd.js.Query.all (ngx-airtable.umd.js:143)

This happens wen I use all().

firstPage() works properly.

angular 10 not working with angular/http

Describe the bug
when starting my project i get this error:

ERROR in The target entry-point "ngx-airtable" has missing dependencies:

  • @angular/http

To Reproduce
Steps to reproduce the behavior:
start angular 9 with ngx-airtable

Expected behavior
A clear and concise description of what you expected to happen.

Version information (please complete the following information):

  • "version": "2.0.0"
  • Angular 10.0.14
  • Browser chrome

Additional context
Add any other context about the problem here.

Global configuration

  • provide a configuration when importing the module and inject it into Airtable
  • using configure() will override global config per use

replace and update function returns "Invalid request: parameter validation failed. Check your request data."

Hi, I'm developing and Ionic/Angular App using Airtable DB. I create a data service that uses ngx-airtable to read/write data on Airtable tables.

I can read correctly data from any table and I can also "create" new records.

Now I'm trying to update records but I receive an 422 "Unprocessable Entity" error with the following response:

{"error":{"type":"INVALID_REQUEST_UNKNOWN","message":"Invalid request: parameter validation failed. Check your request data."}}

To Reproduce

--- app.module.ts ---
[...] import {NgxAirtableModule} from 'ngx-airtable'; [...] @NgModule({ declarations: [...], imports: [ [...] NgxAirtableModule.forRoot({apiKey: '<myapikey>'}), ], providers: [...], bootstrap: [...] }) export class AppModule {}

--- data.service.ts ---
`
import { Airtable, Base } from 'ngx-airtable';
import { environment } from 'src/environments/environment';

@Injectable({
providedIn: 'root'
})
export class DataService {
private readonly base: Base;
constructor(
private readonly airtable: Airtable,
) {
this.base = this.airtable.base(environment.airtableBase);
}
update(tableName: string, id: string, item: any): Promise {
return new Promise((resolve, reject) => {
console.log('update', id, item);
this.base.table({ tableName }).replace(id, item).subscribe(response => {
console.log('update', id, item);
resolve(response);
});
});
}
replace(tableName: string, id: string, item: any): Promise {
return new Promise((resolve, reject) => {
console.log('replace', id, item);
this.base.table({ tableName }).replace(id, item).subscribe(response => {
console.log('replace', response);
resolve(response);
});
});
}
create(tableName: string, item: any): Promise {
console.log('create', tableName, item);
return new Promise((resolve, reject) => {
this.base.table({ tableName }).create(item).subscribe(response => {
console.log('create', response);
resolve(response);
});
});
}
`

--- app.component.ts ---
`
[...]
import { DataService } from './services/data.service';
[...]

@component({
selector: 'app-root',
templateUrl: 'app.component.html',
styleUrls: ['app.component.scss'],
})

export class AppComponent {
[...]

constructor(
    private data: DataService
  ) {

      this.data.get('<MyTable>', '<MyFilterToGetOneItem>').then(item => {
        if( item ) {
          console.log('item exists', item);
          
          item.fields.ItemStringProperty = "MyUpdatedString";

          this.data.replace('<MyTable>', item.id, item);
        }
        else 
        {
          item = {
            fields: {
              ItemStringProperty: "MyCreatedString"
            }
          };
          this.data.create('<MyTable>', item);
        }
      });
    });

}
}
`

Steps to reproduce the behavior:

  1. First time my App enter in constructor, it doen't find "item" in so I "create" it and Airtable module do it fine
  2. Second time my App enter in constructor, it find "item" in so I try to "update" or "replace" it but Airable module gives me 422 "Unprocessable Entity" error with the following response:
    {"error":{"type":"INVALID_REQUEST_UNKNOWN","message":"Invalid request: parameter validation failed. Check your request data."}}

    Expected behavior
    I expect that, when an "item" is found in , if I try to "update" or "replace" it, updating fields, it doesn't give me and error.

    Version information (please complete the following information):

    • Node 14.17.0
    • Npm 8.1.3
    • Angular: 14.0.0
    • Ionic 6.17.1
    • Capacitor: 4.0.1
    • ngx-airtable: 2.0.1-next.0

Linked Queries

  • e.g. 2 Tables with connected Data (e.g. Bugs and Features)
  • fetch Bugs with their related Features

Angular Schematic support (ng add)

Describe the solution you'd like
The goal is to simplify the initial integration of the library into other angular projects using ng add.

Uncaught NullInjectorError

Describe the bug
Followed instructions to add ngx-airtable as described in README and on npmjs. After adding the global configuration, then in my component file I attempt to connect with a base, I receive the uncaught nullinjectorerrror.

To Reproduce
Steps to reproduce the behavior:

  1. Add ngx-airtable using yarn add ngx-airtable
  2. Open app.module.ts and under imports add NgxAirtableModule.forRoot({ apiKey: environment.airtableApiKey })
  3. Open app.component.ts and add private _airtable: Airtable to constructor, then under ngOnInit add const base = this._airtable.base(environment.tableId);
  4. See error

Expected behavior
Expected behavior is that no error would be encountered and the ability to use ngx-airtable as described.

Version information (please complete the following information):
"ngx-airtable": "^2.0.1-next.0"
"@angular/core": "~11.0.5"

Browser: Safari, Chrome

[Error] ERROR
Error: Uncaught (in promise): NullInjectorError: R3InjectorError(LandingModule)[Airtable -> Airtable -> HttpClient -> HttpClient -> HttpClient]: NullInjectorError: No provider for HttpClient! get@http://localhost:4200/vendor.js:25605:36 get@http://localhost:4200/vendor.js:25772:36 get@http://localhost:4200/vendor.js:25772:36 get@http://localhost:4200/vendor.js:25772:36 Airtable_Factory@http://localhost:4200/vendor.js:13480:214 hydrate@http://localhost:4200/vendor.js:25940:42 get@http://localhost:4200/vendor.js:25761:40 get@http://localhost:4200/vendor.js:25772:36 lookupTokenUsingModuleInjector@http://localhost:4200/vendor.js:18078:42 LandingComponent_Factory@http://localhost:4200/pages-landing-landing-module.js:3290:162 getNodeInjectable@http://localhost:4200/vendor.js:18285:51 instantiateRootComponent@http://localhost:4200/vendor.js:24644:40 createRootComponent@http://localhost:4200/vendor.js:26956:47 create@http://localhost:4200/vendor.js:39631:44 createComponent@http://localhost:4200/vendor.js:37671:53 activateWith@http://localhost:4200/vendor.js:72106:55 activateRoutes@http://localhost:4200/vendor.js:68944:52 http://localhost:4200/vendor.js:68895:32 forEach@[native code] activateChildRoutes@http://localhost:4200/vendor.js:68894:36 activateRoutes@http://localhost:4200/vendor.js:68951:41 http://localhost:4200/vendor.js:68895:32 forEach@[native code] activateChildRoutes@http://localhost:4200/vendor.js:68894:36 activate@http://localhost:4200/vendor.js:68820:33 http://localhost:4200/vendor.js:68805:18 _next@http://localhost:4200/vendor.js:50915:39 next@http://localhost:4200/vendor.js:5811:23 _next@http://localhost:4200/vendor.js:72961:30 next@http://localhost:4200/vendor.js:5811:23 _next@http://localhost:4200/vendor.js:50921:30 next@http://localhost:4200/vendor.js:5811:23 notifyNext@http://localhost:4200/vendor.js:14259:30 _next@http://localhost:4200/vendor.js:73748:31 next@http://localhost:4200/vendor.js:5811:23 _next@http://localhost:4200/vendor.js:50921:30 next@http://localhost:4200/vendor.js:5811:23 http://localhost:4200/vendor.js:57068:24 _trySubscribe@http://localhost:4200/vendor.js:8474:35 subscribe@http://localhost:4200/vendor.js:8460:35 subscribe@http://localhost:4200/vendor.js:8455:35 _innerSub@http://localhost:4200/vendor.js:14237:104 _next@http://localhost:4200/vendor.js:14227:23 next@http://localhost:4200/vendor.js:5811:23 notifyNext@http://localhost:4200/vendor.js:14259:30 _next@http://localhost:4200/vendor.js:73748:31 next@http://localhost:4200/vendor.js:5811:23 _next@http://localhost:4200/vendor.js:50921:30 next@http://localhost:4200/vendor.js:5811:23 _next@http://localhost:4200/vendor.js:72961:30 next@http://localhost:4200/vendor.js:5811:23 notifyNext@http://localhost:4200/vendor.js:14259:30 _next@http://localhost:4200/vendor.js:73748:31 next@http://localhost:4200/vendor.js:5811:23 _next@http://localhost:4200/vendor.js:72961:30 next@http://localhost:4200/vendor.js:5811:23 notifyNext@http://localhost:4200/vendor.js:2017:30 _next@http://localhost:4200/vendor.js:73748:31 next@http://localhost:4200/vendor.js:5811:23 notifyNext@http://localhost:4200/vendor.js:2017:30 _next@http://localhost:4200/vendor.js:73748:31 next@http://localhost:4200/vendor.js:5811:23 http://localhost:4200/vendor.js:57068:24 _trySubscribe@http://localhost:4200/vendor.js:8474:35 subscribe@http://localhost:4200/vendor.js:8460:35 _innerSub@http://localhost:4200/vendor.js:2004:105 _tryNext@http://localhost:4200/vendor.js:1998:23 _next@http://localhost:4200/vendor.js:1981:26 next@http://localhost:4200/vendor.js:5811:23 _complete@http://localhost:4200/vendor.js:6360:33 complete@http://localhost:4200/vendor.js:5823:27 complete@http://localhost:4200/vendor.js:5823:27 _complete@http://localhost:4200/vendor.js:2012:38 complete@http://localhost:4200/vendor.js:5823:27 http://localhost:4200/vendor.js:57070:24 _trySubscribe@http://localhost:4200/vendor.js:8474:35 subscribe@http://localhost:4200/vendor.js:8460:35 subscribe@http://localhost:4200/vendor.js:8455:35 subscribe@http://localhost:4200/vendor.js:8455:35 subscribe@http://localhost:4200/vendor.js:8455:35 subscribe@http://localhost:4200/vendor.js:8455:35 _innerSub@http://localhost:4200/vendor.js:2004:105 _tryNext@http://localhost:4200/vendor.js:1998:23 _next@http://localhost:4200/vendor.js:1981:26 next@http://localhost:4200/vendor.js:5811:23 http://localhost:4200/vendor.js:57068:24 _trySubscribe@http://localhost:4200/vendor.js:8474:35 subscribe@http://localhost:4200/vendor.js:8460:35 subscribe@http://localhost:4200/vendor.js:8455:35 subscribe@http://localhost:4200/vendor.js:8455:35 _innerSub@http://localhost:4200/vendor.js:14237:104 _next@http://localhost:4200/vendor.js:14227:23 next@http://localhost:4200/vendor.js:5811:23 _next@http://localhost:4200/vendor.js:72961:30 next@http://localhost:4200/vendor.js:5811:23 http://localhost:4200/vendor.js:57068:24 _trySubscribe@http://localhost:4200/vendor.js:8474:35 subscribe@http://localhost:4200/vendor.js:8460:35 subscribe@http://localhost:4200/vendor.js:8455:35 subscribe@http://localhost:4200/vendor.js:8455:35
resolvePromise — zone-evergreen.js:798
resolvePromise — zone-evergreen.js:750
(anonymous function) — zone-evergreen.js:860
onInvokeTask — core.js:28282
runTask — zone-evergreen.js:167
drainMicroTaskQueue — zone-evergreen.js:569
promiseReactionJob
	defaultErrorLogger (vendor.js:20762)
	handleError (vendor.js:20810)
	next (vendor.js:43676)
	(anonymous function) (vendor.js:40441)
	__tryOrUnsub (vendor.js:5945)
	next (vendor.js:5884)
	_next (vendor.js:5834)
	next (vendor.js:5811)
	next (vendor.js:12304)
	emit (vendor.js:40431)
	run (polyfills.js:219)
	onHandleError (vendor.js:43099)
	runGuarded (polyfills.js:232)
	(anonymous function) (polyfills.js:766)
	drainMicroTaskQueue (polyfills.js:672)
	promiseReactionJob
[Error] ERROR – Error: Uncaught (in promise): NullInjectorError: R3InjectorError(LandingModule)[Airtable -> Airtable -> HttpClient -> HttpClient -> HttpClient]: 
  NullInjectorError: No provider for HttpClient!
get@http://localhost:4200/vendor.js:25605:36
get@http://localhost:4200/vendor.js:25772:36
get@http://localhost:4200/vendor.js:25772:36
get@http://localhost:4200/vendor.js:25772:36
Airtable_Factory@http://localhost:4200/vendor.js:13480:214
hydrate@http://localhost:4200/vendor.js:25940:42
get@http://localhost:4200/vendor.js:25761:40
get@http://localhost:4200/vendor.js:25772:36
lookupTokenUsingModuleInjector@http://localhost:4200/vendor.js:18078:42
LandingComponent_Factory@http://localhost:4200/pages-landing-landing-module.js:3290:162
getNodeInjectable@http://localhost:4200/vendor.js:18285:51
instantiateRootComponent@http://localhost:4200/vendor.js:24644:40
createRootComponent@http://localhost:4200/vendor.js:26956:47
create@http://localhost:4200/vendor.js:39631:44
createComponent@http://localhost:4200/vendor.js:37671:53
activateWith@http://localhost:4200/vendor.js:72106:55
activateRoutes@http://localhost:4200/vendor.js:68944:52
http://localhost:4200/vendor.js:68895:32
forEach@[native code]
activateChildRoutes@http://localhost:4200/vendor.js:68894:36
activateRoutes@http://localhost:4200/vendor.js:68951:41
http://localhost:4200/vendor.js:68895:32
forEach@[native code]
activateChildRoutes@http://localhost:4200/vendor.js:68894:36
activate@http://localhost:4200/vendor.js:68820:33
http://localhost:4200/vendor.js:68805:18
_next@http://localhost:4200/vendor.js:50915:39
next@http://localhost:4200/vendor.js:5811:23
_next@http://localhost:4200/vendor.js:72961:30
next@http://localhost:4200/vendor.js:5811:23
_next@http://localhost:4200/vendor.js:50921:30
next@http://localhost:4200/vendor.js:5811:23
notifyNext@http://localhost:4200/vendor.js:14259:30
_next@http://localhost:4200/vendor.js:73748:31
next@http://localhost:4200/vendor.js:5811:23
_next@http://localhost:4200/vendor.js:50921:30
next@http://localhost:4200/vendor.js:5811:23
http://localhost:4200/vendor.js:57068:24
_trySubscribe@http://localhost:4200/vendor.js:8474:35
subscribe@http://localhost:4200/vendor.js:8460:35
subscribe@http://localhost:4200/vendor.js:8455:35
_innerSub@http://localhost:4200/vendor.js:14237:104
_next@http://localhost:4200/vendor.js:14227:23
next@http://localhost:4200/vendor.js:5811:23
notifyNext@http://localhost:4200/vendor.js:14259:30
_next@http://localhost:4200/vendor.js:73748:31
next@http://localhost:4200/vendor.js:5811:23
_next@http://localhost:4200/vendor.js:50921:30
next@http://localhost:4200/vendor.js:5811:23
_next@http://localhost:4200/vendor.js:72961:30
next@http://localhost:4200/vendor.js:5811:23
notifyNext@http://localhost:4200/vendor.js:14259:30
_next@http://localhost:4200/vendor.js:73748:31
next@http://localhost:4200/vendor.js:5811:23
_next@http://localhost:4200/vendor.js:72961:30
next@http://localhost:4200/vendor.js:5811:23
notifyNext@http://localhost:4200/vendor.js:2017:30
_next@http://localhost:4200/vendor.js:73748:31
next@http://localhost:4200/vendor.js:5811:23
notifyNext@http://localhost:4200/vendor.js:2017:30
_next@http://localhost:4200/vendor.js:73748:31
next@http://localhost:4200/vendor.js:5811:23
http://localhost:4200/vendor.js:57068:24
_trySubscribe@http://localhost:4200/vendor.js:8474:35
subscribe@http://localhost:4200/vendor.js:8460:35
_innerSub@http://localhost:4200/vendor.js:2004:105
_tryNext@http://localhost:4200/vendor.js:1998:23
_next@http://localhost:4200/vendor.js:1981:26
next@http://localhost:4200/vendor.js:5811:23
_complete@http://localhost:4200/vendor.js:6360:33
complete@http://localhost:4200/vendor.js:5823:27
complete@http://localhost:4200/vendor.js:5823:27
_complete@http://localhost:4200/vendor.js:2012:38
complete@http://localhost:4200/vendor.js:5823:27
http://localhost:4200/vendor.js:57070:24
_trySubscribe@http://localhost:4200/vendor.js:8474:35
subscribe@http://localhost:4200/vendor.js:8460:35
subscribe@http://localhost:4200/vendor.js:8455:35
subscribe@http://localhost:4200/vendor.js:8455:35
subscribe@http://localhost:4200/vendor.js:8455:35
subscribe@http://localhost:4200/vendor.js:8455:35
_innerSub@http://localhost:4200/vendor.js:2004:105
_tryNext@http://localhost:4200/vendor.js:1998:23
_next@http://localhost:4200/vendor.js:1981:26
next@http://localhost:4200/vendor.js:5811:23
http://localhost:4200/vendor.js:57068:24
_trySubscribe@http://localhost:4200/vendor.js:8474:35
subscribe@http://localhost:4200/vendor.js:8460:35
subscribe@http://localhost:4200/vendor.js:8455:35
subscribe@http://localhost:4200/vendor.js:8455:35
_innerSub@http://localhost:4200/vendor.js:14237:104
_next@http://localhost:4200/vendor.js:14227:23
next@http://localhost:4200/vendor.js:5811:23
_next@http://localhost:4200/vendor.js:72961:30
next@http://localhost:4200/vendor.js:5811:23
http://localhost:4200/vendor.js:57068:24
_trySubscribe@http://localhost:4200/vendor.js:8474:35
subscribe@http://localhost:4200/vendor.js:8460:35
subscribe@http://localhost:4200/vendor.js:8455:35
subscribe@http://localhost:4200/vendor.js:8455:35
Error: Uncaught (in promise): NullInjectorError: R3InjectorError(LandingModule)[Airtable -> Airtable -> HttpClient -> HttpClient -> HttpClient]: 
  NullInjectorError: No provider for HttpClient!
get@http://localhost:4200/vendor.js:25605:36
get@http://localhost:4200/vendor.js:25772:36
get@http://localhost:4200/vendor.js:25772:36
get@http://localhost:4200/vendor.js:25772:36
Airtable_Factory@http://localhost:4200/vendor.js:13480:214
hydrate@http://localhost:4200/vendor.js:25940:42
get@http://localhost:4200/vendor.js:25761:40
get@http://localhost:4200/vendor.js:25772:36
lookupTokenUsingModuleInjector@http://localhost:4200/vendor.js:18078:42
LandingComponent_Factory@http://localhost:4200/pages-landing-landing-module.js:3290:162
getNodeInjectable@http://localhost:4200/vendor.js:18285:51
instantiateRootComponent@http://localhost:4200/vendor.js:24644:40
createRootComponent@http://localhost:4200/vendor.js:26956:47
create@http://localhost:4200/vendor.js:39631:44
createComponent@http://localhost:4200/vendor.js:37671:53
activateWith@http://localhost:4200/vendor.js:72106:55
activateRoutes@http://localhost:4200/vendor.js:68944:52
http://localhost:4200/vendor.js:68895:32
forEach@[native code]
activateChildRoutes@http://localhost:4200/vendor.js:68894:36
activateRoutes@http://localhost:4200/vendor.js:68951:41
http://localhost:4200/vendor.js:68895:32
forEach@[native code]
activateChildRoutes@http://localhost:4200/vendor.js:68894:36
activate@http://localhost:4200/vendor.js:68820:33
http://localhost:4200/vendor.js:68805:18
_next@http://localhost:4200/vendor.js:50915:39
next@http://localhost:4200/vendor.js:5811:23
_next@http://localhost:4200/vendor.js:72961:30
next@http://localhost:4200/vendor.js:5811:23
_next@http://localhost:4200/vendor.js:50921:30
next@http://localhost:4200/vendor.js:5811:23
notifyNext@http://localhost:4200/vendor.js:14259:30
_next@http://localhost:4200/vendor.js:73748:31
next@http://localhost:4200/vendor.js:5811:23
_next@http://localhost:4200/vendor.js:50921:30
next@http://localhost:4200/vendor.js:5811:23
http://localhost:4200/vendor.js:57068:24
_trySubscribe@http://localhost:4200/vendor.js:8474:35
subscribe@http://localhost:4200/vendor.js:8460:35
subscribe@http://localhost:4200/vendor.js:8455:35
_innerSub@http://localhost:4200/vendor.js:14237:104
_next@http://localhost:4200/vendor.js:14227:23
next@http://localhost:4200/vendor.js:5811:23
notifyNext@http://localhost:4200/vendor.js:14259:30
_next@http://localhost:4200/vendor.js:73748:31
next@http://localhost:4200/vendor.js:5811:23
_next@http://localhost:4200/vendor.js:50921:30
next@http://localhost:4200/vendor.js:5811:23
_next@http://localhost:4200/vendor.js:72961:30
next@http://localhost:4200/vendor.js:5811:23
notifyNext@http://localhost:4200/vendor.js:14259:30
_next@http://localhost:4200/vendor.js:73748:31
next@http://localhost:4200/vendor.js:5811:23
_next@http://localhost:4200/vendor.js:72961:30
next@http://localhost:4200/vendor.js:5811:23
notifyNext@http://localhost:4200/vendor.js:2017:30
_next@http://localhost:4200/vendor.js:73748:31
next@http://localhost:4200/vendor.js:5811:23
notifyNext@http://localhost:4200/vendor.js:2017:30
_next@http://localhost:4200/vendor.js:73748:31
next@http://localhost:4200/vendor.js:5811:23
http://localhost:4200/vendor.js:57068:24
_trySubscribe@http://localhost:4200/vendor.js:8474:35
subscribe@http://localhost:4200/vendor.js:8460:35
_innerSub@http://localhost:4200/vendor.js:2004:105
_tryNext@http://localhost:4200/vendor.js:1998:23
_next@http://localhost:4200/vendor.js:1981:26
next@http://localhost:4200/vendor.js:5811:23
_complete@http://localhost:4200/vendor.js:6360:33
complete@http://localhost:4200/vendor.js:5823:27
complete@http://localhost:4200/vendor.js:5823:27
_complete@http://localhost:4200/vendor.js:2012:38
complete@http://localhost:4200/vendor.js:5823:27
http://localhost:4200/vendor.js:57070:24
_trySubscribe@http://localhost:4200/vendor.js:8474:35
subscribe@http://localhost:4200/vendor.js:8460:35
subscribe@http://localhost:4200/vendor.js:8455:35
subscribe@http://localhost:4200/vendor.js:8455:35
subscribe@http://localhost:4200/vendor.js:8455:35
subscribe@http://localhost:4200/vendor.js:8455:35
_innerSub@http://localhost:4200/vendor.js:2004:105
_tryNext@http://localhost:4200/vendor.js:1998:23
_next@http://localhost:4200/vendor.js:1981:26
next@http://localhost:4200/vendor.js:5811:23
http://localhost:4200/vendor.js:57068:24
_trySubscribe@http://localhost:4200/vendor.js:8474:35
subscribe@http://localhost:4200/vendor.js:8460:35
subscribe@http://localhost:4200/vendor.js:8455:35
subscribe@http://localhost:4200/vendor.js:8455:35
_innerSub@http://localhost:4200/vendor.js:14237:104
_next@http://localhost:4200/vendor.js:14227:23
next@http://localhost:4200/vendor.js:5811:23
_next@http://localhost:4200/vendor.js:72961:30
next@http://localhost:4200/vendor.js:5811:23
http://localhost:4200/vendor.js:57068:24
_trySubscribe@http://localhost:4200/vendor.js:8474:35
subscribe@http://localhost:4200/vendor.js:8460:35
subscribe@http://localhost:4200/vendor.js:8455:35
subscribe@http://localhost:4200/vendor.js:8455:35
	defaultErrorLogger (vendor.js:20762)
	handleError (vendor.js:20810)
	next (vendor.js:43676)
	(anonymous function) (vendor.js:40441)
	__tryOrUnsub (vendor.js:5945)
	next (vendor.js:5884)
	_next (vendor.js:5834)
	next (vendor.js:5811)
	next (vendor.js:12304)
	emit (vendor.js:40431)
	run (polyfills.js:219)
	onHandleError (vendor.js:43099)
	runGuarded (polyfills.js:232)
	(anonymous function) (polyfills.js:766)
	drainMicroTaskQueue (polyfills.js:672)
	promiseReactionJob

Can't compile in production mode.

When i have to compile to production mode, Angular compiler gived me followed error.

ERROR in ./node_modules/ngx-airtable/src/ngx-airtable.module.ts Module build failed: Error: C:\Users\david\Desktop\innoapsion_pages\sistema-consulta\node_modules\ngx-airtable\src\ngx-airtable.module.ts is missing from the TypeScript compilation. Please make sure it is in your tsconfig via the 'files' or 'include' property. The missing file seems to be part of a third party library. TS files in published libraries are often a sign of a badly packaged library. Please open an issue in the library repository to alert its author and ask them to package the library using the Angular Package Format (https://goo.gl/jB3GVv).

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.