diff --git a/angular-cli-build.js b/angular-cli-build.js index 6f6e2d3..012a27d 100644 --- a/angular-cli-build.js +++ b/angular-cli-build.js @@ -17,7 +17,8 @@ module.exports = function(defaults) { 'rxjs/**/*.+(js|js.map)', '@angular/**/*.+(js|js.map)', 'angularfire2/**/*.js', - 'firebase/*.js' + 'firebase/*.js', + 'ng2-dnd/**/*.js' ] }); }; diff --git a/package.json b/package.json index f847a76..3fe3161 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "angularfire2": "^2.0.0-beta.2", "es6-shim": "0.35.1", "firebase": "^3.2.0", + "ng2-dnd": "^1.12.0", "reflect-metadata": "0.1.3", "rxjs": "5.0.0-beta.6", "systemjs": "0.19.26", diff --git a/src/app/add-item/add-item.component.ts b/src/app/add-item/add-item.component.ts index e94e51c..b12ff4b 100644 --- a/src/app/add-item/add-item.component.ts +++ b/src/app/add-item/add-item.component.ts @@ -23,7 +23,11 @@ export class AddItemComponent implements OnInit { addItem($event) { if($event.keyCode === 13){ - this.items.push({ desc: this.itemWrapper.desc, created_at: new Date().getTime() }); + this.items.push({ + desc: this.itemWrapper.desc, + status: 'pending', + created_at: new Date().getTime() + }); this.itemWrapper.desc = undefined; } } diff --git a/src/app/app.component.html b/src/app/app.component.html index 49e0477..3901332 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,10 +1,9 @@

{{title}}

- diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 873d1d3..b77d495 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,20 +1,20 @@ import { Component } from '@angular/core'; import { ROUTER_DIRECTIVES } from '@angular/router'; -import { AngularFire } from 'angularfire2'; import { LoginComponent } from './login/login.component' import { ItemsComponent } from "./items/items.component"; import { LogoutComponent } from "./logout/logout.component"; import {AddItemComponent} from "./add-item/add-item.component"; +import { ConditionalRouterLinkComponent } from "./conditional-router-link/conditional-router-link.component"; @Component({ moduleId: module.id, selector: 'app-root', templateUrl: 'app.component.html', styleUrls: ['app.component.css'], - directives: [ROUTER_DIRECTIVES, LoginComponent, ItemsComponent, LogoutComponent] + directives: [ROUTER_DIRECTIVES, LoginComponent, ItemsComponent, LogoutComponent, ConditionalRouterLinkComponent] }) export class AppComponent { title = 'FirebaseAngular2Cli'; - constructor(public af: AngularFire) { } + constructor() { } } diff --git a/src/app/conditional-router-link/conditional-router-link.component.css b/src/app/conditional-router-link/conditional-router-link.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/conditional-router-link/conditional-router-link.component.html b/src/app/conditional-router-link/conditional-router-link.component.html new file mode 100644 index 0000000..8ade27e --- /dev/null +++ b/src/app/conditional-router-link/conditional-router-link.component.html @@ -0,0 +1 @@ +{{label}} diff --git a/src/app/conditional-router-link/conditional-router-link.component.spec.ts b/src/app/conditional-router-link/conditional-router-link.component.spec.ts new file mode 100644 index 0000000..0b0c6eb --- /dev/null +++ b/src/app/conditional-router-link/conditional-router-link.component.spec.ts @@ -0,0 +1,13 @@ +// /* tslint:disable:no-unused-variable */ +// +// import { By } from '@angular/platform-browser'; +// import { DebugElement } from '@angular/core'; +// import { addProviders, async, inject } from '@angular/core/testing'; +// import { ConditionalRouterLinkComponent } from './conditional-router-link.component'; +// +// describe('Component: ConditionalRouterLink', () => { +// it('should create an instance', () => { +// let component = new ConditionalRouterLinkComponent(); +// expect(component).toBeTruthy(); +// }); +// }); diff --git a/src/app/conditional-router-link/conditional-router-link.component.ts b/src/app/conditional-router-link/conditional-router-link.component.ts new file mode 100644 index 0000000..f341f22 --- /dev/null +++ b/src/app/conditional-router-link/conditional-router-link.component.ts @@ -0,0 +1,26 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { AngularFire } from 'angularfire2'; + +@Component({ + moduleId: module.id, + selector: 'conditional-router-link', + templateUrl: 'conditional-router-link.component.html', + styleUrls: ['conditional-router-link.component.css'] +}) +export class ConditionalRouterLinkComponent implements OnInit { + @Input() routerLink: string; + @Input() label: string; + @Input() requiresLogin: boolean; + + constructor(public af: AngularFire) { } + + ngOnInit() { + if(!this.label) { + this.label = 'Some link' + } + if(this.requiresLogin == undefined) { + this.requiresLogin = true + } + } + +} diff --git a/src/app/conditional-router-link/index.ts b/src/app/conditional-router-link/index.ts new file mode 100644 index 0000000..cc6e972 --- /dev/null +++ b/src/app/conditional-router-link/index.ts @@ -0,0 +1 @@ +export * from './conditional-router-link.component'; diff --git a/src/app/item/item.component.html b/src/app/item/item.component.html index 6610846..75adea4 100644 --- a/src/app/item/item.component.html +++ b/src/app/item/item.component.html @@ -1,2 +1,3 @@ {{item.desc}} -XXXX +{{item.status}} +DELETE diff --git a/src/app/items/items.component.css b/src/app/items/items.component.css index e69de29..8515876 100644 --- a/src/app/items/items.component.css +++ b/src/app/items/items.component.css @@ -0,0 +1,3 @@ +.panel { + border: 1px solid #bbb; +} diff --git a/src/app/items/items.component.html b/src/app/items/items.component.html index cbd740f..789f962 100644 --- a/src/app/items/items.component.html +++ b/src/app/items/items.component.html @@ -2,8 +2,27 @@

Items

- +
+
+
+ +
+
+
+ +
+ +

Items done

+
+
Place to drop
+
+
+
+ +
+
+
+ +
+
+
diff --git a/src/app/items/items.component.ts b/src/app/items/items.component.ts index f3064aa..7565bab 100644 --- a/src/app/items/items.component.ts +++ b/src/app/items/items.component.ts @@ -1,5 +1,6 @@ import { Component, OnInit } from '@angular/core'; -import { AngularFire, FirebaseListObservable } from 'angularfire2'; +import { AngularFire, FirebaseListObservable, FirebaseObjectObservable } from 'angularfire2'; +import { DND_DIRECTIVES } from 'ng2-dnd/ng2-dnd'; import {AddItemComponent} from "../add-item/add-item.component"; import {ItemComponent} from "../item/item.component"; @@ -8,16 +9,36 @@ import {ItemComponent} from "../item/item.component"; selector: 'items', templateUrl: 'items.component.html', styleUrls: ['items.component.css'], - directives: [AddItemComponent, ItemComponent] + directives: [DND_DIRECTIVES, AddItemComponent, ItemComponent] }) export class ItemsComponent implements OnInit { items: FirebaseListObservable; + pendingItems: FirebaseListObservable; + doneItems: FirebaseListObservable; + item: FirebaseObjectObservable; constructor(af: AngularFire) { this.items = af.database.list('items'); + this.pendingItems = af.database.list('items', { + query: { + orderByChild: 'status', + equalTo: 'pending' + } + }); + this.doneItems = af.database.list('items', { + query: { + orderByChild: 'status', + equalTo: 'done' + } + }); } ngOnInit() { } + + markAsDone($event){ + this.items.update($event.dragData.$key, { status: 'done' }); + } + } diff --git a/src/main.ts b/src/main.ts index b43f264..2967612 100644 --- a/src/main.ts +++ b/src/main.ts @@ -4,7 +4,7 @@ import { AppComponent, environment } from './app/'; import { FIREBASE_PROVIDERS, defaultFirebase, AngularFire, AuthMethods, AuthProviders, firebaseAuthConfig } from 'angularfire2'; import { disableDeprecatedForms, provideForms } from '@angular/forms'; import { appRouterProviders } from './app/app.routes'; - +import { DND_PROVIDERS } from 'ng2-dnd/ng2-dnd'; if (environment.production) { enableProdMode(); @@ -25,5 +25,6 @@ bootstrap(AppComponent, [ }), disableDeprecatedForms(), provideForms(), - appRouterProviders + appRouterProviders, + DND_PROVIDERS ]); diff --git a/src/system-config.ts b/src/system-config.ts index 57808a0..ece3a6a 100644 --- a/src/system-config.ts +++ b/src/system-config.ts @@ -10,7 +10,8 @@ /** Map relative paths to URLs. */ const map: any = { 'firebase': 'vendor/firebase/firebase.js', - 'angularfire2': 'vendor/angularfire2' + 'angularfire2': 'vendor/angularfire2', + 'ng2-dnd': 'vendor/ng2-dnd' }; /** User packages configuration. */ @@ -18,7 +19,8 @@ const packages: any = { angularfire2: { defaultExtension: 'js', main: 'angularfire2.js' - } + }, + 'ng2-dnd': { defaultExtension: 'js', main: 'ng2-dnd.js' } }; //////////////////////////////////////////////////////////////////////////////////////////////// @@ -47,6 +49,7 @@ const barrels: string[] = [ 'app/logout', 'app/add-item', 'app/item', + 'app/conditional-router-link' /** @cli-barrel */ ];