ngx data :)

This commit is contained in:
David Lebee 2019-09-05 00:14:04 -05:00
parent 3efc179756
commit c89cc92d33
10 changed files with 181 additions and 105 deletions

127
package-lock.json generated
View File

@ -12,6 +12,17 @@
"requires": {
"@angular-devkit/core": "8.3.3",
"rxjs": "6.4.0"
},
"dependencies": {
"rxjs": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
"integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
}
}
}
},
"@angular-devkit/build-angular": {
@ -76,6 +87,17 @@
"webpack-subresource-integrity": "1.1.0-rc.6",
"worker-farm": "1.7.0",
"worker-plugin": "3.2.0"
},
"dependencies": {
"rxjs": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
"integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
}
}
}
},
"@angular-devkit/build-ng-packagr": {
@ -86,6 +108,17 @@
"requires": {
"@angular-devkit/architect": "0.803.3",
"rxjs": "6.4.0"
},
"dependencies": {
"rxjs": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
"integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
}
}
}
},
"@angular-devkit/build-optimizer": {
@ -111,6 +144,17 @@
"@angular-devkit/core": "8.3.3",
"rxjs": "6.4.0",
"webpack-merge": "4.2.1"
},
"dependencies": {
"rxjs": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
"integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
}
}
}
},
"@angular-devkit/core": {
@ -124,6 +168,17 @@
"magic-string": "0.25.3",
"rxjs": "6.4.0",
"source-map": "0.7.3"
},
"dependencies": {
"rxjs": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
"integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
}
}
}
},
"@angular-devkit/schematics": {
@ -134,6 +189,17 @@
"requires": {
"@angular-devkit/core": "8.3.3",
"rxjs": "6.4.0"
},
"dependencies": {
"rxjs": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
"integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
}
}
}
},
"@angular/animations": {
@ -330,7 +396,8 @@
"ansi-regex": {
"version": "2.1.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"aproba": {
"version": "1.2.0",
@ -371,7 +438,8 @@
"code-point-at": {
"version": "1.1.0",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"concat-map": {
"version": "0.0.1",
@ -381,7 +449,8 @@
"console-control-strings": {
"version": "1.1.0",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"core-util-is": {
"version": "1.0.2",
@ -511,6 +580,7 @@
"version": "1.0.0",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@ -636,7 +706,8 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"object-assign": {
"version": "4.1.1",
@ -769,6 +840,7 @@
"version": "1.0.2",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@ -788,6 +860,7 @@
"version": "3.0.1",
"bundled": true,
"dev": true,
"optional": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@ -831,7 +904,8 @@
"wrappy": {
"version": "1.0.2",
"bundled": true,
"dev": true
"dev": true,
"optional": true
},
"yallist": {
"version": "3.0.3",
@ -1829,12 +1903,26 @@
"rxjs": "6.4.0",
"tree-kill": "1.2.1",
"webpack-sources": "1.4.3"
},
"dependencies": {
"rxjs": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
"integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
}
}
}
},
"@poweredsoft/data": {
"version": "0.0.11",
"resolved": "https://registry.npmjs.org/@poweredsoft/data/-/data-0.0.11.tgz",
"integrity": "sha512-5KpsJg6l2sQ0Qx4RZ16lH9DtfeuJHWIqpGNe5wvkp8Csno7a/p+Rgaw1mePiDMpCKJudVLXKdLAfewGv5daSsA=="
"version": "0.0.14",
"resolved": "https://registry.npmjs.org/@poweredsoft/data/-/data-0.0.14.tgz",
"integrity": "sha512-FKCFKUp4kdGO3BAiOT4hP3QOXDwH2hAtMrE41JecN9tsYckXXXYarUhVMOcU8Z8mz8KgK9lTcIZFwniBkbuFHQ==",
"requires": {
"tslib": "^1.9.0"
}
},
"@schematics/angular": {
"version": "8.3.3",
@ -1860,6 +1948,17 @@
"rxjs": "6.4.0",
"semver": "6.3.0",
"semver-intersect": "1.4.0"
},
"dependencies": {
"rxjs": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
"integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
"dev": true,
"requires": {
"tslib": "^1.9.0"
}
}
}
},
"@sindresorhus/is": {
@ -7206,8 +7305,7 @@
"minimist": {
"version": "0.0.8",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"minipass": {
"version": "2.3.5",
@ -7311,8 +7409,7 @@
"number-is-nan": {
"version": "1.0.1",
"bundled": true,
"dev": true,
"optional": true
"dev": true
},
"object-assign": {
"version": "4.1.1",
@ -10194,9 +10291,9 @@
}
},
"rxjs": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
"integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz",
"integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
"requires": {
"tslib": "^1.9.0"
}

View File

@ -19,8 +19,8 @@
"@angular/platform-browser": "~8.2.4",
"@angular/platform-browser-dynamic": "~8.2.4",
"@angular/router": "~8.2.4",
"@poweredsoft/data": "0.0.11",
"rxjs": "~6.4.0",
"@poweredsoft/data": "0.0.14",
"rxjs": "~6.5.3",
"tslib": "^1.10.0",
"zone.js": "~0.9.1"
},

View File

@ -1,8 +1,10 @@
{
"name": "@poweredsoft/ngx-data",
"version": "0.0.1",
"version": "0.0.6",
"peerDependencies": {
"@angular/common": "^8.2.4",
"@angular/core": "^8.2.4"
"@angular/core": "^8.2.4",
"@poweredsoft/data": "^0.0.14",
"rxjs": "^6.5.3"
}
}

View File

@ -1,25 +0,0 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { NgxDataComponent } from './ngx-data.component';
describe('NgxDataComponent', () => {
let component: NgxDataComponent;
let fixture: ComponentFixture<NgxDataComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ NgxDataComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(NgxDataComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@ -1,19 +0,0 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'lib-ngx-data',
template: `
<p>
ngx-data works!
</p>
`,
styles: []
})
export class NgxDataComponent implements OnInit {
constructor() { }
ngOnInit() {
}
}

View File

@ -1,12 +1,11 @@
import { NgModule } from '@angular/core';
import { NgxDataComponent } from './ngx-data.component';
@NgModule({
declarations: [NgxDataComponent],
declarations: [],
imports: [
],
exports: [NgxDataComponent]
exports: [],
})
export class NgxDataModule { }

View File

@ -1,12 +0,0 @@
import { TestBed } from '@angular/core/testing';
import { NgxDataService } from './ngx-data.service';
describe('NgxDataService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const service: NgxDataService = TestBed.get(NgxDataService);
expect(service).toBeTruthy();
});
});

View File

@ -1,9 +1,65 @@
import { Injectable } from '@angular/core';
import { Injectable } from "@angular/core";
import { HttpClient } from '@angular/common/http';
import { IDataSourceTransportOptions, IDataSourceCommandAdapterOptions } from '@poweredsoft/data';
import { IQueryExecutionResult, IQueryExecutionGroupResult, IQueryCriteria } from '@poweredsoft/data';
import { IDataSourceQueryAdapterOptions } from '@poweredsoft/data';
@Injectable({
providedIn: 'root'
providedIn: 'root'
})
export class NgxDataService {
export class GenericRestDataSourceService
{
constructor(private http: HttpClient) {
constructor() { }
}
createStandardRestTransportOptions<TModel, TKey>(route: string, keyResolver: (model: TModel) => TKey) : IDataSourceTransportOptions<TModel> {
const query: IDataSourceQueryAdapterOptions<TModel> = {
adapter: {
handle: (criteria: IQueryCriteria) => {
const queryRoute = `${route}/read`;
return this.http.post<IQueryExecutionResult<TModel> & IQueryExecutionGroupResult<TModel>>(queryRoute, criteria);
}
}
};
const createCommand: IDataSourceCommandAdapterOptions<TModel> = {
adapter: {
handle: (command: TModel) => {
return this.http.post<TModel>(route, command);
}
}
};
const updateCommand: IDataSourceCommandAdapterOptions<TModel> = {
adapter: {
handle: (command: TModel) => {
const key = keyResolver(command);
const updateRoute = `${route}/${encodeURIComponent(key as any)}`;
return this.http.put<TModel>(updateRoute, command);
}
}
};
const deleteCommand: IDataSourceCommandAdapterOptions<TModel> = {
adapter: {
handle: (command: TModel) => {
const key = keyResolver(command);
const updateRoute = `${route}/${encodeURIComponent(key as any)}`;
return this.http.delete<TModel>(updateRoute);
}
}
};
return {
query: query,
commands: {
'create': createCommand,
'update': updateCommand,
'delete': deleteCommand
}
};
}
}

View File

@ -3,5 +3,4 @@
*/
export * from './lib/ngx-data.service';
export * from './lib/ngx-data.component';
export * from './lib/ngx-data.module';

View File

@ -1,21 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/dist/zone';
import 'zone.js/dist/zone-testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);