From ef37d2ae0bf60befbe7a0369c26eadf479847428 Mon Sep 17 00:00:00 2001 From: vsavkin Date: Tue, 21 Jun 2016 23:06:35 -0700 Subject: [PATCH] example(router): add an example app for the new router --- .../e2e_test/routing/routing_spec.ts | 69 - .../routing_deprecated_spec.dart | 3 + .../routing_deprecated_spec.ts | 91 + modules/playground/src/bootstrap.ts | 1 + .../playground/src/routing/app/drafts.html | 2 +- .../playground/src/routing/app/inbox-app.html | 4 +- .../playground/src/routing/app/inbox-app.ts | 99 +- .../src/routing/app/inbox-detail.html | 4 +- modules/playground/src/routing/app/inbox.html | 2 +- modules/playground/src/routing/index.ts | 7 +- .../src/routing_deprecated/app/data.ts | 2116 +++++++++++++++++ .../src/routing_deprecated/app/drafts.html | 11 + .../src/routing_deprecated/app/inbox-app.html | 5 + .../src/routing_deprecated/app/inbox-app.ts | 161 ++ .../routing_deprecated/app/inbox-detail.html | 24 + .../src/routing_deprecated/app/inbox.html | 10 + .../src/routing_deprecated/css/app.css | 57 + .../src/routing_deprecated/index.html | 14 + .../src/routing_deprecated/index.ts | 9 + 19 files changed, 2555 insertions(+), 134 deletions(-) create mode 100644 modules/playground/e2e_test/routing_deprecated/routing_deprecated_spec.dart create mode 100644 modules/playground/e2e_test/routing_deprecated/routing_deprecated_spec.ts create mode 100644 modules/playground/src/routing_deprecated/app/data.ts create mode 100644 modules/playground/src/routing_deprecated/app/drafts.html create mode 100644 modules/playground/src/routing_deprecated/app/inbox-app.html create mode 100644 modules/playground/src/routing_deprecated/app/inbox-app.ts create mode 100644 modules/playground/src/routing_deprecated/app/inbox-detail.html create mode 100644 modules/playground/src/routing_deprecated/app/inbox.html create mode 100644 modules/playground/src/routing_deprecated/css/app.css create mode 100644 modules/playground/src/routing_deprecated/index.html create mode 100644 modules/playground/src/routing_deprecated/index.ts diff --git a/modules/playground/e2e_test/routing/routing_spec.ts b/modules/playground/e2e_test/routing/routing_spec.ts index 2c9d697119..eb6aaaa8ef 100644 --- a/modules/playground/e2e_test/routing/routing_spec.ts +++ b/modules/playground/e2e_test/routing/routing_spec.ts @@ -18,74 +18,5 @@ describe('routing inbox-app', () => { waitForElement('.inbox-item-record'); expect(element.all(by.css('.inbox-item-record')).count()).toEqual(200); }); - - it('should build a link which points to the detail page', () => { - browser.get(URL); - waitForElement('#item-15'); - expect(element(by.css('#item-15')).getAttribute('href')).toMatch(/#\/detail\/15$/); - element(by.css('#item-15')).click(); - waitForElement('#record-id'); - expect(browser.getCurrentUrl()).toMatch(/\/detail\/15$/); - }); }); - - - describe('drafts view', () => { - var URL = 'all/playground/src/routing/#/drafts'; - - it('should navigate to the drafts view when the drafts link is clicked', () => { - browser.get(URL); - waitForElement('.inbox-item-record'); - element(by.linkText('Drafts')).click(); - waitForElement('.page-title'); - expect(element(by.css('.page-title')).getText()).toEqual('Drafts'); - }); - - it('should navigate to email details', () => { - browser.get(URL); - element(by.linkText('Drafts')).click(); - waitForElement('.inbox-item-record'); - expect(element.all(by.css('.inbox-item-record')).count()).toEqual(2); - expect(element(by.css('#item-201')).getAttribute('href')).toMatch(/#\/detail\/201$/); - element(by.css('#item-201')).click(); - waitForElement('#record-id'); - expect(browser.getCurrentUrl()).toMatch(/\/detail\/201$/); - }); - }); - - - describe('detail view', () => { - var URL = 'all/playground/src/routing/'; - - it('should navigate to the detail view when an email is clicked', () => { - browser.get(URL); - waitForElement('#item-10'); - element(by.css('#item-10')).click(); - waitForElement('#record-id'); - var recordId = element(by.css("#record-id")); - browser.wait(protractor.until.elementTextIs(recordId, "ID: 10"), 5000); - expect(recordId.getText()).toEqual('ID: 10'); - }); - - it('should navigate back to the email inbox page when the back button is clicked', () => { - browser.get(URL); - waitForElement('#item-10'); - element(by.css('#item-10')).click(); - waitForElement('.back-button'); - element(by.css('.back-button')).click(); - expect(browser.getCurrentUrl()).toMatch(/\/$/); - }); - - it('should navigate back to index and sort the page items based on the provided querystring param', - () => { - browser.get(URL); - waitForElement('#item-10'); - element(by.css('#item-10')).click(); - waitForElement('.sort-button'); - element(by.css('.sort-button')).click(); - expect(browser.getCurrentUrl()).toMatch(/\/#\?sort=date$/); - waitForElement('.inbox-item-record'); - expect(element(by.css(".inbox-item-record > a")).getAttribute("id")).toEqual("item-137"); - }); - }) }); diff --git a/modules/playground/e2e_test/routing_deprecated/routing_deprecated_spec.dart b/modules/playground/e2e_test/routing_deprecated/routing_deprecated_spec.dart new file mode 100644 index 0000000000..8c1c7fd661 --- /dev/null +++ b/modules/playground/e2e_test/routing_deprecated/routing_deprecated_spec.dart @@ -0,0 +1,3 @@ +library playground.e2e_test.routing.routing_spec; + +main() {} diff --git a/modules/playground/e2e_test/routing_deprecated/routing_deprecated_spec.ts b/modules/playground/e2e_test/routing_deprecated/routing_deprecated_spec.ts new file mode 100644 index 0000000000..272efd0dff --- /dev/null +++ b/modules/playground/e2e_test/routing_deprecated/routing_deprecated_spec.ts @@ -0,0 +1,91 @@ +import {verifyNoBrowserErrors} from '@angular/platform-browser/testing_e2e'; + +function waitForElement(selector: any /** TODO #9100 */) { + var EC = (protractor).ExpectedConditions; + // Waits for the element with id 'abc' to be present on the dom. + browser.wait(EC.presenceOf($(selector)), 20000); +} + +describe('deprecated routing inbox-app', () => { + + afterEach(verifyNoBrowserErrors); + + describe('index view', () => { + var URL = 'all/playground/src/routing_deprecated/'; + + it('should list out the current collection of items', () => { + browser.get(URL); + waitForElement('.inbox-item-record'); + expect(element.all(by.css('.inbox-item-record')).count()).toEqual(200); + }); + + it('should build a link which points to the detail page', () => { + browser.get(URL); + waitForElement('#item-15'); + expect(element(by.css('#item-15')).getAttribute('href')).toMatch(/#\/detail\/15$/); + element(by.css('#item-15')).click(); + waitForElement('#record-id'); + expect(browser.getCurrentUrl()).toMatch(/\/detail\/15$/); + }); + }); + + + describe('drafts view', () => { + var URL = 'all/playground/src/routing_deprecated/#/drafts'; + + it('should navigate to the drafts view when the drafts link is clicked', () => { + browser.get(URL); + waitForElement('.inbox-item-record'); + element(by.linkText('Drafts')).click(); + waitForElement('.page-title'); + expect(element(by.css('.page-title')).getText()).toEqual('Drafts'); + }); + + it('should navigate to email details', () => { + browser.get(URL); + element(by.linkText('Drafts')).click(); + waitForElement('.inbox-item-record'); + expect(element.all(by.css('.inbox-item-record')).count()).toEqual(2); + expect(element(by.css('#item-201')).getAttribute('href')).toMatch(/#\/detail\/201$/); + element(by.css('#item-201')).click(); + waitForElement('#record-id'); + expect(browser.getCurrentUrl()).toMatch(/\/detail\/201$/); + }); + }); + + + describe('detail view', () => { + var URL = 'all/playground/src/routing_deprecated/'; + + it('should navigate to the detail view when an email is clicked', () => { + browser.get(URL); + waitForElement('#item-10'); + element(by.css('#item-10')).click(); + waitForElement('#record-id'); + var recordId = element(by.css("#record-id")); + browser.wait(protractor.until.elementTextIs(recordId, "ID: 10"), 5000); + expect(recordId.getText()).toEqual('ID: 10'); + }); + + it('should navigate back to the email inbox page when the back button is clicked', () => { + browser.get(URL); + waitForElement('#item-10'); + element(by.css('#item-10')).click(); + waitForElement('.back-button'); + element(by.css('.back-button')).click(); + expect(browser.getCurrentUrl()).toMatch(/\/$/); + }); + + it('should navigate back to index and sort the page items based on the provided querystring param', + () => { + browser.get(URL); + waitForElement('#item-10'); + element(by.css('#item-10')).click(); + waitForElement('.sort-button'); + element(by.css('.sort-button')).click(); + expect(browser.getCurrentUrl()).toMatch(/\/#\?sort=date$/); + waitForElement('.inbox-item-record'); + expect(element(by.css(".inbox-item-record > a")).getAttribute("id")).toEqual("item-137"); + }); + }) +}); diff --git a/modules/playground/src/bootstrap.ts b/modules/playground/src/bootstrap.ts index b7f2f7babd..f2f987e601 100644 --- a/modules/playground/src/bootstrap.ts +++ b/modules/playground/src/bootstrap.ts @@ -26,6 +26,7 @@ declare var System: any; '@angular/http': '/packages-dist/http/bundles/http.umd.js', '@angular/upgrade': '/packages-dist/upgrade/bundles/upgrade.umd.js', '@angular/router-deprecated': '/packages-dist/router-deprecated/bundles/router-deprecated.umd.js', + '@angular/router': '/packages-dist/router/bundles/router.umd.js', '@angular/core/src/facade': '/all/@angular/core/src/facade', 'rxjs': location.pathname.replace(/\w+\.html$/i, '') + 'rxjs' }, diff --git a/modules/playground/src/routing/app/drafts.html b/modules/playground/src/routing/app/drafts.html index 6cfee645bd..62d968bc1c 100644 --- a/modules/playground/src/routing/app/drafts.html +++ b/modules/playground/src/routing/app/drafts.html @@ -4,7 +4,7 @@
  1. + [routerLink]="['/detail', item.id]"> {{ item.subject }}
diff --git a/modules/playground/src/routing/app/inbox-app.html b/modules/playground/src/routing/app/inbox-app.html index 4629749c18..5c24c031bb 100644 --- a/modules/playground/src/routing/app/inbox-app.html +++ b/modules/playground/src/routing/app/inbox-app.html @@ -1,5 +1,5 @@ - Inbox - Drafts + Inbox + Drafts diff --git a/modules/playground/src/routing/app/inbox-app.ts b/modules/playground/src/routing/app/inbox-app.ts index 3c941937b8..b9e800a527 100644 --- a/modules/playground/src/routing/app/inbox-app.ts +++ b/modules/playground/src/routing/app/inbox-app.ts @@ -1,18 +1,11 @@ import {Component, Injectable} from '@angular/core'; -import { - RouterLink, - RouteConfig, - Router, - Route, - RouterOutlet, - RouteParams -} from '@angular/router-deprecated'; +import {ROUTER_DIRECTIVES, ActivatedRoute, Router} from '@angular/router'; import * as db from './data'; import {Location} from '@angular/common'; import {PromiseWrapper, PromiseCompleter} from '@angular/core/src/facade/async'; import {isPresent, DateWrapper} from '@angular/core/src/facade/lang'; -class InboxRecord { +export class InboxRecord { id: string = ''; subject: string = ''; content: string = ''; @@ -57,7 +50,7 @@ class InboxRecord { } @Injectable() -class DbService { +export class DbService { getData(): Promise { var p = new PromiseCompleter(); p.resolve(db.data); @@ -89,48 +82,51 @@ class DbService { } @Component( - {selector: 'inbox-detail', directives: [RouterLink], templateUrl: 'app/inbox-detail.html'}) -class InboxDetailCmp { - record: InboxRecord = new InboxRecord(); - ready: boolean = false; + {selector: 'inbox-detail', directives: ROUTER_DIRECTIVES, templateUrl: 'app/inbox-detail.html'}) +export class InboxDetailCmp { + private record: InboxRecord = new InboxRecord(); + private ready: boolean = false; - constructor(db: DbService, params: RouteParams) { - var id = params.get('id'); - PromiseWrapper.then(db.email(id), (data) => { this.record.setData(data); }); + constructor(db: DbService, route: ActivatedRoute) { + route.params.forEach(p => { + PromiseWrapper.then(db.email(p['id']), (data) => { this.record.setData(data); }); + }); } } -@Component({selector: 'inbox', templateUrl: 'app/inbox.html', directives: [RouterLink]}) -class InboxCmp { - items: InboxRecord[] = []; - ready: boolean = false; +@Component({selector: 'inbox', templateUrl: 'app/inbox.html', directives: ROUTER_DIRECTIVES}) +export class InboxCmp { + private items: InboxRecord[] = []; + private ready: boolean = false; - constructor(public router: Router, db: DbService, params: RouteParams) { - var sortType = params.get('sort'); - var sortEmailsByDate = isPresent(sortType) && sortType == "date"; + constructor(public router: Router, db: DbService, route: ActivatedRoute) { + route.params.forEach(p => { + const sortType = p['sort']; + const sortEmailsByDate = isPresent(sortType) && sortType == "date"; - PromiseWrapper.then(db.emails(), (emails: any[]) => { - this.ready = true; - this.items = emails.map(data => new InboxRecord(data)); + PromiseWrapper.then(db.emails(), (emails: any[]) => { + this.ready = true; + this.items = emails.map(data => new InboxRecord(data)); - if (sortEmailsByDate) { - this.items.sort((a: InboxRecord, b: InboxRecord) => - DateWrapper.toMillis(DateWrapper.fromISOString(a.date)) < - DateWrapper.toMillis(DateWrapper.fromISOString(b.date)) ? - -1 : - 1); - } + if (sortEmailsByDate) { + this.items.sort((a: InboxRecord, b: InboxRecord) => + DateWrapper.toMillis(DateWrapper.fromISOString(a.date)) < + DateWrapper.toMillis(DateWrapper.fromISOString(b.date)) ? + -1 : + 1); + } + }); }); } } -@Component({selector: 'drafts', templateUrl: 'app/drafts.html', directives: [RouterLink]}) -class DraftsCmp { - items: InboxRecord[] = []; - ready: boolean = false; +@Component({selector: 'drafts', templateUrl: 'app/drafts.html', directives: ROUTER_DIRECTIVES}) +export class DraftsCmp { + private items: InboxRecord[] = []; + private ready: boolean = false; - constructor(public router: Router, db: DbService) { + constructor(private router: Router, db: DbService) { PromiseWrapper.then(db.drafts(), (drafts: any[]) => { this.ready = true; this.items = drafts.map(data => new InboxRecord(data)); @@ -138,24 +134,17 @@ class DraftsCmp { } } +export const ROUTER_CONFIG = [ + {path: '', terminal: true, redirectTo: 'inbox'}, + {path: 'inbox', component: InboxCmp}, + {path: 'drafts', component: DraftsCmp}, + {path: 'detail/:id', component: InboxDetailCmp} +]; + @Component({ selector: 'inbox-app', viewProviders: [DbService], templateUrl: 'app/inbox-app.html', - directives: [RouterOutlet, RouterLink] + directives: ROUTER_DIRECTIVES }) -@RouteConfig([ - new Route({path: '/', component: InboxCmp, name: 'Inbox'}), - new Route({path: '/drafts', component: DraftsCmp, name: 'Drafts'}), - new Route({path: '/detail/:id', component: InboxDetailCmp, name: 'DetailPage'}) -]) -export class InboxApp { - router: Router; - location: Location; - constructor(router: Router, location: Location) { - this.router = router; - this.location = location; - } - inboxPageActive() { return this.location.path() == ''; } - draftsPageActive() { return this.location.path() == '/drafts'; } -} +export class InboxApp {} diff --git a/modules/playground/src/routing/app/inbox-detail.html b/modules/playground/src/routing/app/inbox-detail.html index 0766e502cb..bcd6d13a1b 100644 --- a/modules/playground/src/routing/app/inbox-detail.html +++ b/modules/playground/src/routing/app/inbox-detail.html @@ -13,12 +13,12 @@

- Back + Back
- + View Latest Messages diff --git a/modules/playground/src/routing/app/inbox.html b/modules/playground/src/routing/app/inbox.html index 4568060601..976525c39f 100644 --- a/modules/playground/src/routing/app/inbox.html +++ b/modules/playground/src/routing/app/inbox.html @@ -4,7 +4,7 @@
  1. {{ item.subject }} + [routerLink]="['/detail', item.id]">{{ item.subject }}
diff --git a/modules/playground/src/routing/index.ts b/modules/playground/src/routing/index.ts index e829e12149..86a35ee24b 100644 --- a/modules/playground/src/routing/index.ts +++ b/modules/playground/src/routing/index.ts @@ -1,9 +1,8 @@ -import {InboxApp} from './app/inbox-app'; +import {InboxApp, ROUTER_CONFIG} from './app/inbox-app'; import {bootstrap} from '@angular/platform-browser-dynamic'; import {HashLocationStrategy, LocationStrategy} from '@angular/common'; -import {ROUTER_PROVIDERS} from '@angular/router-deprecated'; +import {provideRouter} from '@angular/router'; export function main() { - bootstrap(InboxApp, - [ROUTER_PROVIDERS, {provide: LocationStrategy, useClass: HashLocationStrategy}]); + bootstrap(InboxApp, [provideRouter(ROUTER_CONFIG), {provide: LocationStrategy, useClass: HashLocationStrategy}]); } diff --git a/modules/playground/src/routing_deprecated/app/data.ts b/modules/playground/src/routing_deprecated/app/data.ts new file mode 100644 index 0000000000..a984dd6ea3 --- /dev/null +++ b/modules/playground/src/routing_deprecated/app/data.ts @@ -0,0 +1,2116 @@ +export var data = [ + { + "id": "1", + "first-name": "Montana", + "last-name": "Prosacco", + "email": "jairo.bergnaum@bergnaum.org", + "date": "1991-10-12 15:12:46 -0700", + "content": + "Et quisquam veniam voluptatem enim temporibus itaque. Ipsam voluptatem et. Occaecati rerum animi.", + "subject": "Quidem quo ipsam architecto soluta numquam et" + }, + + { + "id": "2", + "first-name": "Frances", + "last-name": "Schaden", + "email": "pierre_tromp@adams.com", + "date": "2001-05-06 08:22:33 -0700", + "content": "Porro ea tempore numquam deserunt voluptas qui. Est quis suscipit.", + "subject": "Voluptatibus dolore porro animi" + }, + + { + "id": "3", + "first-name": "Jayne", + "last-name": "Kreiger", + "email": "breanne@howell.net", + "date": "2001-05-22 14:28:41 -0700", + "content": "Voluptas et est laborum non ullam.", + "subject": "Ratione ut illum fuga non" + }, + + { + "id": "4", + "first-name": "Hester", + "last-name": "Wyman", + "email": "fausto@steuber.com", + "date": "1996-07-20 02:13:12 -0700", + "content": + "Iusto enim laborum. Autem sed quas laborum deserunt quibusdam dolorem. Laboriosam nesciunt debitis possimus ut aut quae.", + "subject": "Ea quas et quia beatae dolores" + }, + + { + "id": "5", + "first-name": "Alexandre", + "last-name": "Dietrich", + "email": "carmella_mante@moendibbert.biz", + "date": "2006-03-20 23:44:38 -0800", + "content": "Voluptates voluptatem dolorem non quod dolores.", + "subject": "Nostrum ad modi non consequatur repellendus et harum" + }, + + { + "id": "6", + "first-name": "Ena", + "last-name": "Green", + "email": "jan_koepp@glover.name", + "date": "1988-03-21 02:00:36 -0800", + "content": + "Nam inventore voluptatum eaque ratione nisi nesciunt. Qui ex qui omnis aliquid. Dolorem ipsum expedita.", + "subject": "Qui sint vero accusamus quam id vitae quis quia" + }, + + { + "id": "7", + "first-name": "Rebecca", + "last-name": "Walsh", + "email": "marta@mueller.biz", + "date": "1974-05-09 02:40:20 -0700", + "content": + "Voluptas vel ut. Rerum vero repellat accusantium earum. Ea atque exercitationem expedita id dolores dolorem.", + "subject": "Suscipit et inventore exercitationem ut voluptatum esse vero" + }, + + { + "id": "8", + "first-name": "Jed", + "last-name": "Rogahn", + "email": "talia_crist@mertzfadel.info", + "date": "2006-10-17 01:28:46 -0700", + "content": "Cupiditate nam blanditiis.", + "subject": "Dolore nulla qui sequi ut enim sed" + }, + + { + "id": "9", + "first-name": "Fabiola", + "last-name": "Olson", + "email": "henderson@casper.org", + "date": "2008-02-29 11:46:44 -0800", + "content": + "Similique nesciunt omnis beatae omnis pariatur quas. Voluptatem eum consequatur id impedit fugit dignissimos ut.", + "subject": "Sit quasi accusamus aut et eum" + }, + + { + "id": "10", + "first-name": "Alex", + "last-name": "Turcotte", + "email": "mya@stokes.org", + "date": "1974-03-29 12:02:53 -0700", + "content": + "Ut pariatur porro maiores. Saepe soluta aspernatur est sed suscipit. Excepturi incidunt aut atque nostrum cum non.", + "subject": "Rerum dolore sunt veniam provident" + }, + + { + "id": "11", + "first-name": "Jerome", + "last-name": "Greenholt", + "email": "jazmyne.dibbert@abshire.org", + "date": "1997-01-12 02:48:08 -0800", + "content": "Natus error id.", + "subject": "Rerum nemo aperiam veritatis veniam" + }, + + { + "id": "12", + "first-name": "Antwan", + "last-name": "Kreiger", + "email": "delilah@dibbert.name", + "date": "1971-05-08 10:45:01 -0700", + "content": + "Perspiciatis sed quo. Eum dignissimos quia expedita dolorem illum minima enim. Fugiat ducimus nostrum quia reiciendis autem nisi placeat.", + "subject": "Esse ipsum pariatur voluptatum rerum labore id odit" + }, + + { + "id": "13", + "first-name": "Kyleigh", + "last-name": "Rogahn", + "email": "ralph_ledner@bartolettifay.info", + "date": "2013-11-28 16:10:15 -0800", + "content": "Molestias repudiandae dicta vel.", + "subject": "Facilis occaecati pariatur qui incidunt reprehenderit sunt" + }, + + { + "id": "14", + "first-name": "Henriette", + "last-name": "Gottlieb", + "email": "adeline.rowe@lubowitz.net", + "date": "1983-02-11 06:45:49 -0800", + "content": "Eveniet ut voluptas eos ut rerum voluptatum.", + "subject": "Natus voluptas voluptatem alias" + }, + + { + "id": "15", + "first-name": "Jacklyn", + "last-name": "White", + "email": "milton_keebler@braun.biz", + "date": "1992-01-07 12:27:59 -0800", + "content": "Reiciendis et aperiam. Doloremque totam repudiandae velit fuga fugiat.", + "subject": "Nulla est magnam ducimus porro commodi" + }, + + { + "id": "16", + "first-name": "Charlotte", + "last-name": "Ziemann", + "email": "brett@purdymills.com", + "date": "1972-06-06 02:42:50 -0700", + "content": + "Voluptatem corporis tempore. Consectetur fugit perspiciatis libero dolore consequatur asperiores. Voluptates ea accusamus.", + "subject": "Ea adipisci reiciendis excepturi suscipit necessitatibus ut sed" + }, + + { + "id": "17", + "first-name": "Giovanny", + "last-name": "Runolfsdottir", + "email": "dustin.sanford@rippin.com", + "date": "1987-04-14 19:29:11 -0700", + "content": + "Dolor consequuntur sed aspernatur qui. Sit cumque id animi ut sed id. Asperiores voluptatem similique voluptas.", + "subject": "Id ut voluptatum culpa molestiae quo" + }, + + { + "id": "18", + "first-name": "Savion", + "last-name": "McCullough", + "email": "don@gorczanysimonis.name", + "date": "1974-01-18 14:40:40 -0700", + "content": + "Autem voluptatem dignissimos vel debitis ipsum voluptatem consequuntur. Voluptatum et saepe.", + "subject": "Ipsa similique quo nostrum" + }, + + { + "id": "19", + "first-name": "Robbie", + "last-name": "Kohler", + "email": "haley@waters.biz", + "date": "2002-09-28 08:35:10 -0700", + "content": + "Quo ut accusantium similique necessitatibus. Sunt impedit commodi ut et odit voluptatibus error.", + "subject": "Voluptate eum quo error" + }, + + { + "id": "20", + "first-name": "Eulalia", + "last-name": "Effertz", + "email": "rodrigo_parisian@bergecartwright.net", + "date": "2006-07-29 21:47:56 -0700", + "content": + "Eum repudiandae rem aliquid dolorum suscipit vel. Autem vel voluptas et iure magni.", + "subject": "Est dolorum modi et error consequuntur qui" + }, + + { + "id": "21", + "first-name": "Gregoria", + "last-name": "Boehm", + "email": "miles@jerde.org", + "date": "1997-04-11 19:49:38 -0700", + "content": + "Qui necessitatibus veniam. Maiores impedit in natus aspernatur adipisci. Ad sapiente iste.", + "subject": "Doloribus ipsum a eius voluptatem nulla" + }, + + { + "id": "22", + "first-name": "Berry", + "last-name": "Collier", + "email": "larry_rath@rathbernier.info", + "date": "1981-06-26 05:26:47 -0700", + "content": + "Numquam rerum quia similique enim sequi eos inventore. Numquam inventore aliquam commodi neque maiores. Hic et vel aut velit corrupti.", + "subject": "Optio ab delectus pariatur vel tempore" + }, + + { + "id": "23", + "first-name": "Crawford", + "last-name": "Ryan", + "email": "cindy_ziemann@harvey.org", + "date": "1997-06-12 07:56:32 -0700", + "content": "Odio ea nostrum molestiae. Doloribus ducimus occaecati facilis pariatur ut est.", + "subject": "Quo fugit at totam voluptate est" + }, + + { + "id": "24", + "first-name": "Kelsie", + "last-name": "Stokes", + "email": "jackson_ferry@connelly.name", + "date": "1986-07-30 21:39:50 -0700", + "content": + "Amet voluptatem ea nesciunt sunt. Quidem pariatur sit. Minus aliquam itaque laudantium in quibusdam laboriosam.", + "subject": "Labore voluptas dolor repellendus accusantium tempora" + }, + + { + "id": "25", + "first-name": "Josefa", + "last-name": "Predovic", + "email": "moises@sauer.info", + "date": "1976-04-09 22:38:31 -0800", + "content": + "Aliquam consectetur et non soluta. Quia dolore molestiae facilis eos nihil vel. Quidem eos et.", + "subject": "Qui architecto inventore alias non aut dolorum porro" + }, + + { + "id": "26", + "first-name": "Toby", + "last-name": "Wehner", + "email": "janet@mohr.org", + "date": "2003-05-08 07:44:26 -0700", + "content": "Suscipit cumque alias debitis necessitatibus et qui.", + "subject": "Possimus laudantium exercitationem ut deleniti similique" + }, + + { + "id": "27", + "first-name": "Keira", + "last-name": "Stamm", + "email": "karlie@witting.info", + "date": "2010-11-11 16:17:29 -0800", + "content": + "Rerum cum at autem repellat quod nihil. Quasi voluptates minus autem accusantium debitis cumque qui.", + "subject": "Nostrum repudiandae voluptatum adipisci ut error sunt et sint" + }, + + { + "id": "28", + "first-name": "Clark", + "last-name": "Predovic", + "email": "palma@ankundingbednar.biz", + "date": "1978-02-10 16:55:54 -0800", + "content": + "Non ex aperiam porro. At harum vitae ut exercitationem qui qui. Quae sed sapiente sed debitis officiis quis unde.", + "subject": "Eos eligendi voluptatum consequatur reprehenderit" + }, + + { + "id": "29", + "first-name": "Colby", + "last-name": "Jacobson", + "email": "rozella@spencer.com", + "date": "1978-01-04 00:18:51 -0800", + "content": + "Molestiae laudantium voluptas ipsa est laborum vel. Dolorem et est nihil distinctio numquam.", + "subject": "Aut et sint deleniti mollitia debitis" + }, + + { + "id": "30", + "first-name": "Kayley", + "last-name": "Connelly", + "email": "rowland.thiel@gutmannorn.info", + "date": "2012-12-10 09:59:08 -0800", + "content": + "Eligendi quia repellat distinctio eum voluptas debitis. Totam a alias qui voluptates dolor.", + "subject": "Ipsum consequatur culpa repellat quae mollitia quia unde" + }, + + { + "id": "31", + "first-name": "Kay", + "last-name": "Reynolds", + "email": "lexie.frami@beattyschoen.info", + "date": "1991-05-27 22:37:41 -0700", + "content": + "Laborum quod iusto in voluptas et adipisci dolor. Totam et voluptatibus id tempora. Asperiores magnam dolorem quo iste sapiente.", + "subject": "Tempora et eligendi quia dolorem alias ullam maiores doloremque" + }, + + { + "id": "32", + "first-name": "Ellsworth", + "last-name": "Veum", + "email": "estefania_hermann@murray.biz", + "date": "1974-12-07 03:43:52 -0800", + "content": + "Et commodi molestiae hic distinctio et iusto. Quod illo natus unde est aut. Laborum rem rerum totam.", + "subject": "Expedita nostrum consectetur sint velit modi maxime quisquam" + }, + + { + "id": "33", + "first-name": "Adeline", + "last-name": "Altenwerth", + "email": "francesco@weberstroman.com", + "date": "1988-03-25 22:52:39 -0800", + "content": + "Quod deserunt eum dignissimos eius et veniam. Non exercitationem omnis molestiae corrupti aliquid commodi repudiandae.", + "subject": "Dolor incidunt debitis possimus temporibus rerum quibusdam eaque" + }, + + { + "id": "34", + "first-name": "River", + "last-name": "Roob", + "email": "lester.hodkiewicz@hoppemcglynn.name", + "date": "1981-01-03 06:04:53 -0800", + "content": + "Sed dolorem et laborum voluptate perspiciatis doloremque aliquam. Recusandae et odit. Sit esse consequatur occaecati fuga sed.", + "subject": "Dolorem ut quia repudiandae accusamus reprehenderit dignissimos iste cupiditate" + }, + + { + "id": "35", + "first-name": "Chaya", + "last-name": "Stokes", + "email": "rebekah.baumbach@toy.org", + "date": "1979-09-03 07:52:52 -0700", + "content": "Ea voluptas minus hic omnis.", + "subject": "Ab repellendus quia eos eius" + }, + + { + "id": "36", + "first-name": "Cara", + "last-name": "Brown", + "email": "natasha_gibson@bins.name", + "date": "1985-12-19 03:29:37 -0800", + "content": + "Numquam nobis consectetur modi eligendi. Facere adipisci aut velit quis dolor quidem totam. Consequatur qui placeat aut molestiae dignissimos.", + "subject": "Est quia reiciendis enim et totam temporibus" + }, + + { + "id": "37", + "first-name": "Laron", + "last-name": "Wunsch", + "email": "erna@heathcote.com", + "date": "2004-06-28 16:53:07 -0700", + "content": + "Quisquam maxime nostrum explicabo corrupti ut. Et accusantium culpa occaecati officiis quo.", + "subject": "Et et nulla aspernatur quas distinctio" + }, + + { + "id": "38", + "first-name": "Lessie", + "last-name": "Roob", + "email": "ona_olson@dicki.biz", + "date": "1980-02-10 00:18:48 -0800", + "content": + "Facere veritatis aut quam praesentium ut. Consectetur praesentium explicabo consequuntur quia vel rem.", + "subject": "Tenetur ducimus mollitia consequatur dicta" + }, + + { + "id": "39", + "first-name": "Felton", + "last-name": "Labadie", + "email": "stone.kihn@vonruedenbartoletti.biz", + "date": "2002-04-04 17:29:31 -0800", + "content": + "Iure ad nesciunt. Excepturi impedit eum suscipit dignissimos est. Corrupti accusamus sapiente ratione eaque iure aut mollitia.", + "subject": "Sunt et eius et iusto accusamus voluptas eum" + }, + + { + "id": "40", + "first-name": "Verna", + "last-name": "Hoppe", + "email": "arthur_schiller@daniel.org", + "date": "2013-05-15 16:04:25 -0700", + "content": + "Veniam quia omnis at sapiente. Est est fugit eum. Impedit suscipit hic similique eum quibusdam.", + "subject": "Voluptatum ipsum libero et vitae odio dolore tenetur perspiciatis" + }, + + { + "id": "41", + "first-name": "Velda", + "last-name": "Veum", + "email": "christy@feil.org", + "date": "1988-10-24 12:42:25 -0700", + "content": "Rem inventore necessitatibus iste et quia vero laudantium.", + "subject": "Suscipit similique provident officia est explicabo sed" + }, + + { + "id": "42", + "first-name": "Mackenzie", + "last-name": "Schroeder", + "email": "miles.dietrich@stehrkuhic.org", + "date": "1990-01-07 22:38:09 -0800", + "content": "Non autem delectus. Architecto recusandae unde quia rerum inventore repudiandae.", + "subject": "Molestiae odio et repudiandae ut" + }, + + { + "id": "43", + "first-name": "Natalie", + "last-name": "Hoeger", + "email": "gregorio_mosciski@schneiderframi.net", + "date": "1976-04-06 06:23:07 -0800", + "content": + "Iste id illo cupiditate enim aut quo. Vel ut eos qui. Aut at in eum maiores voluptatem quidem.", + "subject": "Quia officiis sit sint aliquid ad quibusdam et" + }, + + { + "id": "44", + "first-name": "Joan", + "last-name": "Mosciski", + "email": "thad@dickivolkman.info", + "date": "1990-12-26 15:04:40 -0800", + "content": "Culpa est officia veritatis esse.", + "subject": "Est eum ullam quo" + }, + + { + "id": "45", + "first-name": "Emmitt", + "last-name": "Keeling", + "email": "cali@ferry.info", + "date": "2009-04-10 10:14:57 -0700", + "content": + "Numquam velit sunt sed et ut. Laudantium qui laboriosam quibusdam qui. Odio non maxime soluta vero qui.", + "subject": "Accusantium saepe id totam aut reiciendis at esse magnam" + }, + + { + "id": "46", + "first-name": "Guy", + "last-name": "Renner", + "email": "naomie_klein@streich.name", + "date": "1970-12-18 13:09:51 -0800", + "content": "Iure quia at excepturi sit consequatur.", + "subject": "Commodi aut ipsa accusantium dolor repudiandae in" + }, + + { + "id": "47", + "first-name": "Eric", + "last-name": "Kihn", + "email": "dock.schmeler@langworth.biz", + "date": "1993-12-17 11:17:07 -0800", + "content": "Facere voluptate omnis qui officia dicta.", + "subject": "Incidunt a libero ab asperiores fuga ut quo illum" + }, + + { + "id": "48", + "first-name": "Kraig", + "last-name": "Keeling", + "email": "alejandrin@streichwiegand.org", + "date": "1977-12-09 14:54:22 -0800", + "content": "Asperiores expedita incidunt in cum ex vel hic.", + "subject": "In illum quisquam ut est eligendi aut" + }, + + { + "id": "49", + "first-name": "Justice", + "last-name": "Leuschke", + "email": "florencio@conn.info", + "date": "1991-12-14 09:38:08 -0800", + "content": + "Aspernatur nesciunt voluptas sit. Cum architecto enim et blanditiis soluta dolor. Recusandae numquam occaecati esse animi et aut.", + "subject": "Quaerat voluptatibus eum sapiente iure deserunt" + }, + + { + "id": "50", + "first-name": "Jodie", + "last-name": "O'Hara", + "email": "rick@stehrboehm.info", + "date": "2000-07-21 05:34:03 -0700", + "content": + "Labore repudiandae dolor nostrum quo tempora eos. Natus ea fugit voluptas doloremque distinctio quaerat unde. Ut aut nostrum.", + "subject": "Tempore in quam id aliquam fuga eos dolor" + }, + + { + "id": "51", + "first-name": "Dannie", + "last-name": "Vandervort", + "email": "mariana@abbottruecker.biz", + "date": "2001-09-15 19:00:54 -0700", + "content": "Consectetur dolore voluptas.", + "subject": "Tenetur possimus et fuga mollitia perferendis omnis corporis" + }, + + { + "id": "52", + "first-name": "Delaney", + "last-name": "Champlin", + "email": "kyler_welch@krisrowe.biz", + "date": "2014-07-22 07:09:07 -0700", + "content": "Voluptates qui aut.", + "subject": "Quam eos laborum nisi delectus" + }, + + { + "id": "53", + "first-name": "Barbara", + "last-name": "Kihn", + "email": "tyrese.casper@keebler.net", + "date": "1996-02-29 20:04:40 -0800", + "content": "Totam labore voluptatem eos qui temporibus velit.", + "subject": "Eum neque sed aut sunt" + }, + + { + "id": "54", + "first-name": "Jarred", + "last-name": "Shanahan", + "email": "coralie@weinat.net", + "date": "1977-06-08 01:46:22 -0700", + "content": "Sed et voluptatum ut est quo et aut.", + "subject": "Aut eligendi voluptas mollitia et accusamus sint nemo" + }, + + { + "id": "55", + "first-name": "Llewellyn", + "last-name": "Bechtelar", + "email": "kaci@jast.com", + "date": "1998-12-01 21:14:32 -0800", + "content": "Architecto eligendi et ut occaecati temporibus voluptas quia.", + "subject": "Sint quis vitae voluptatem dolor aut quo maiores quas" + }, + + { + "id": "56", + "first-name": "Albertha", + "last-name": "Upton", + "email": "august@bradtkemiller.net", + "date": "2006-11-16 14:38:45 -0800", + "content": + "Voluptas perspiciatis recusandae et. Sequi eum eius dicta dolorem. Alias reprehenderit explicabo doloribus exercitationem sint.", + "subject": "Quo nihil fuga dolores cumque rerum eos asperiores" + }, + + { + "id": "57", + "first-name": "Christy", + "last-name": "Considine", + "email": "eliseo@veum.com", + "date": "1997-05-17 13:54:41 -0700", + "content": + "Consequatur rerum laudantium distinctio magni. Iusto ullam et suscipit nemo ex velit voluptatem.", + "subject": "Ut ea quisquam libero qui repudiandae aut officia" + }, + + { + "id": "58", + "first-name": "Jessica", + "last-name": "Simonis", + "email": "rickey@mertz.info", + "date": "2012-10-04 00:32:34 -0700", + "content": + "Neque tenetur sunt sunt ratione. Rerum dolorem illo ab blanditiis quisquam architecto. Quidem ea exercitationem enim eos.", + "subject": "Atque quo nemo explicabo voluptas blanditiis accusantium et" + }, + + { + "id": "59", + "first-name": "Justen", + "last-name": "Davis", + "email": "karen@jaskolskigleason.org", + "date": "1994-08-10 02:33:43 -0700", + "content": "Eius tenetur mollitia ad alias ab.", + "subject": "Ut accusantium sunt qui nostrum eligendi" + }, + + { + "id": "60", + "first-name": "Elwin", + "last-name": "Daugherty", + "email": "milo@ko.net", + "date": "1976-06-30 05:16:38 -0700", + "content": "Sit necessitatibus minus.", + "subject": "A molestiae voluptates ducimus id est recusandae" + }, + + { + "id": "61", + "first-name": "Clair", + "last-name": "Raynor", + "email": "zella.hermiston@batz.org", + "date": "1985-12-18 14:30:18 -0800", + "content": "Aut aliquid est sit pariatur voluptatem dolorum.", + "subject": "Consectetur reprehenderit temporibus vel voluptatem voluptatem et rem fuga" + }, + + { + "id": "62", + "first-name": "Hilario", + "last-name": "Klein", + "email": "adrain@stark.biz", + "date": "1980-09-08 18:06:43 -0700", + "content": "Eum dolore optio quos animi.", + "subject": "Illum nihil vitae molestiae laboriosam beatae modi" + }, + + { + "id": "63", + "first-name": "Greta", + "last-name": "Murray", + "email": "ethelyn@fritsch.org", + "date": "1970-05-23 02:27:54 -0700", + "content": + "Quisquam animi et recusandae rem modi eos ipsa. Eaque et expedita qui animi veritatis temporibus.", + "subject": "Repellendus fuga sint nemo" + }, + + { + "id": "64", + "first-name": "Anissa", + "last-name": "Adams", + "email": "edward@armstrong.com", + "date": "1997-01-26 22:21:57 -0800", + "content": "Laudantium culpa rem voluptas tempore. Sit modi dolor est sunt rem.", + "subject": "Autem unde minima quia beatae totam" + }, + + { + "id": "65", + "first-name": "Kaylah", + "last-name": "Conroy", + "email": "brian.cormier@hyatt.org", + "date": "2015-02-02 07:44:37 -0800", + "content": "Voluptates vitae nulla expedita. Possimus et quo aut eum.", + "subject": "Molestiae minus enim adipisci et" + }, + + { + "id": "66", + "first-name": "Jamey", + "last-name": "Ebert", + "email": "seth@pfannerstillrodriguez.name", + "date": "1987-09-29 09:40:59 -0700", + "content": "Voluptatem est quae.", + "subject": "Similique nemo placeat id tempore dolorum" + }, + + { + "id": "67", + "first-name": "Johnson", + "last-name": "Mosciski", + "email": "morton@littel.net", + "date": "1989-02-14 11:15:10 -0800", + "content": + "Molestias expedita exercitationem et praesentium et vel delectus. Qui fuga molestias porro.", + "subject": "Aut rerum quidem est iste in blanditiis sit" + }, + + { + "id": "68", + "first-name": "Ellis", + "last-name": "O'Keefe", + "email": "taurean@ullrich.biz", + "date": "1987-03-09 11:29:05 -0800", + "content": + "Facere sint doloribus qui illo autem consequatur culpa. Est quisquam enim accusantium praesentium.", + "subject": "Quis beatae quia velit deserunt est sit odit quisquam" + }, + + { + "id": "69", + "first-name": "Marlen", + "last-name": "Ritchie", + "email": "rodger_schamberger@thiel.net", + "date": "1989-07-23 03:03:52 -0700", + "content": "Doloribus porro hic quis explicabo fuga veritatis vero.", + "subject": "Et doloribus est consequatur unde" + }, + + { + "id": "70", + "first-name": "Maddison", + "last-name": "Kuhic", + "email": "rosetta@von.biz", + "date": "1975-06-22 10:34:58 -0700", + "content": + "Sit ut eos libero error sapiente veritatis. Est dolore qui impedit recusandae quas animi rerum.", + "subject": "Quos culpa assumenda enim eius aliquid dolorum" + }, + + { + "id": "71", + "first-name": "Whitney", + "last-name": "Parisian", + "email": "everardo@langworth.name", + "date": "1970-11-04 01:17:28 -0800", + "content": + "Quam dolores pariatur ut possimus. Alias tenetur ex accusantium quasi. Nihil dolorem mollitia quidem.", + "subject": "Officia totam excepturi sed illum et tempore commodi sit" + }, + + { + "id": "72", + "first-name": "Madyson", + "last-name": "Streich", + "email": "imani@murray.biz", + "date": "1983-07-16 11:27:34 -0700", + "content": + "Veritatis molestiae id placeat dolorem consectetur a est. Est enim aut. Magnam aut distinctio quo sapiente ea est accusantium.", + "subject": "Aut sunt esse eligendi et qui ut sed" + }, + + { + "id": "73", + "first-name": "Laurie", + "last-name": "Purdy", + "email": "jarrell@paucek.biz", + "date": "1992-10-18 12:48:31 -0700", + "content": + "Saepe facilis est repellendus praesentium autem. Qui soluta voluptas ullam sequi. Molestias aut quibusdam.", + "subject": "Quo ullam totam sit dolores" + }, + + { + "id": "74", + "first-name": "Ollie", + "last-name": "Lowe", + "email": "corene@kris.info", + "date": "1976-08-24 16:28:46 -0700", + "content": "Nostrum qui eaque aperiam possimus libero non. Quae aut enim non.", + "subject": "Optio minus aut officiis voluptates reiciendis sit dicta" + }, + + { + "id": "75", + "first-name": "Ian", + "last-name": "Murray", + "email": "adelia_bernhard@maggio.com", + "date": "1982-04-08 00:25:22 -0800", + "content": "Quod dolores quibusdam nihil aut vel. Sit ab vitae necessitatibus eum.", + "subject": "Quia praesentium nam debitis nulla repellendus quos" + }, + + { + "id": "76", + "first-name": "Bernard", + "last-name": "Zieme", + "email": "kaelyn.johnson@markswalsh.net", + "date": "2014-01-17 03:47:35 -0800", + "content": "Repellendus qui reiciendis quibusdam voluptatum voluptate omnis.", + "subject": "Mollitia ut omnis tempore aut debitis ratione alias illum" + }, + + { + "id": "77", + "first-name": "Megane", + "last-name": "Kuvalis", + "email": "otis@donnellypouros.name", + "date": "1987-09-29 22:10:00 -0700", + "content": + "Explicabo repellat qui placeat inventore velit. Tempora accusamus minima facilis dicta architecto unde. Excepturi enim eos.", + "subject": "Quam molestias amet officiis" + }, + + { + "id": "78", + "first-name": "Freeman", + "last-name": "Nader", + "email": "samara_hoppe@dachcorkery.info", + "date": "2009-02-02 12:08:30 -0800", + "content": "Perferendis aut minus in.", + "subject": "Voluptates odio neque laudantium accusamus ipsa accusantium" + }, + + { + "id": "79", + "first-name": "Margarita", + "last-name": "Heller", + "email": "heloise@rogahn.name", + "date": "1984-01-04 10:41:32 -0800", + "content": "Officiis voluptas omnis. Nihil consectetur id reiciendis qui nemo est.", + "subject": "Velit in molestias quo repudiandae accusamus et excepturi et" + }, + + { + "id": "80", + "first-name": "Lonny", + "last-name": "Goodwin", + "email": "darian@kundebernier.info", + "date": "1999-02-08 07:00:38 -0800", + "content": + "Earum provident et minima aliquam iusto sint. Sed numquam ducimus voluptatem quos enim.", + "subject": "Commodi beatae vitae aut quos dolor consequatur" + }, + + { + "id": "81", + "first-name": "Jazlyn", + "last-name": "Bayer", + "email": "harvey@rempel.org", + "date": "2009-09-28 16:50:32 -0700", + "content": "Ipsum voluptas perferendis aperiam dolor.", + "subject": "Omnis inventore nobis cupiditate quas quis tenetur" + }, + + { + "id": "82", + "first-name": "Jakob", + "last-name": "Conn", + "email": "rylee@vandervort.net", + "date": "2008-11-12 17:22:34 -0800", + "content": + "Aut temporibus perferendis neque nulla et. Totam ab neque inventore et facere eligendi.", + "subject": "A optio ut molestiae iste et nam" + }, + + { + "id": "83", + "first-name": "Mikayla", + "last-name": "Romaguera", + "email": "rebecca_moriette@stracke.net", + "date": "1986-08-09 12:39:31 -0700", + "content": "Dicta et reiciendis corrupti.", + "subject": "Neque odio voluptates aut quam" + }, + + { + "id": "84", + "first-name": "Brianne", + "last-name": "West", + "email": "sheila@terry.com", + "date": "1972-04-25 22:32:20 -0800", + "content": + "Nulla sit mollitia qui odit sit corrupti repudiandae. Voluptas consequuntur voluptatibus molestiae. Illo quidem nostrum odio et.", + "subject": "Deserunt voluptas et accusamus" + }, + + { + "id": "85", + "first-name": "Destiny", + "last-name": "Mohr", + "email": "ernestine.waters@connellypfannerstill.com", + "date": "2012-10-30 15:02:35 -0700", + "content": + "Eveniet voluptatem molestias dolores aut voluptates. Quisquam nemo ipsam dicta numquam aut temporibus.", + "subject": "Pariatur nisi facilis tempora" + }, + + { + "id": "86", + "first-name": "Brooks", + "last-name": "Herman", + "email": "brendan_smith@treutel.info", + "date": "1972-04-01 17:10:07 -0800", + "content": "Qui sunt dolore molestiae minima. Suscipit ea quia a aut sunt et.", + "subject": "Magni quia perferendis possimus ipsam" + }, + + { + "id": "87", + "first-name": "Celestino", + "last-name": "Dickens", + "email": "cruz.mcdermott@ziemann.org", + "date": "2007-08-14 14:55:17 -0700", + "content": "Saepe libero tenetur.", + "subject": "Molestiae nulla aut laborum placeat perferendis aliquam" + }, + + { + "id": "88", + "first-name": "Angel", + "last-name": "Tillman", + "email": "shayna_baumbach@durgan.biz", + "date": "1978-08-31 01:02:14 -0700", + "content": + "Libero sequi ea dolore. Numquam quia temporibus voluptatum rerum. Deserunt tenetur nesciunt veritatis debitis.", + "subject": "Occaecati quo omnis adipisci sit perspiciatis aut modi cum" + }, + + { + "id": "89", + "first-name": "Verlie", + "last-name": "Tillman", + "email": "aurelia@gorczany.name", + "date": "1995-07-27 01:25:55 -0700", + "content": "Iure est veritatis qui et. Sit tempore ducimus repellat cupiditate.", + "subject": "Dolorum similique expedita praesentium quisquam quasi dolorem eligendi" + }, + + { + "id": "90", + "first-name": "Cornell", + "last-name": "Padberg", + "email": "rhianna@thiel.name", + "date": "2009-12-14 14:21:13 -0800", + "content": + "Ea modi consequatur. Necessitatibus sit qui voluptatem et accusantium. Cumque rerum omnis.", + "subject": "Molestiae nostrum aut officiis porro tempore" + }, + + { + "id": "91", + "first-name": "Carmelo", + "last-name": "Kunde", + "email": "beulah@rolfsonschaefer.info", + "date": "2010-08-14 23:10:58 -0700", + "content": "Ut molestiae dolorem fuga in aliquam est provident.", + "subject": "Atque occaecati temporibus et autem est" + }, + + { + "id": "92", + "first-name": "Jess", + "last-name": "Corwin", + "email": "korey.barrows@reillyankunding.com", + "date": "1976-11-13 05:09:16 -0800", + "content": + "Commodi eveniet aspernatur earum nisi aut sit dolor. Odio vero facilis reprehenderit dolore. Provident voluptatibus atque qui assumenda quaerat.", + "subject": "Commodi laboriosam accusamus quis dolores tempora eos" + }, + + { + "id": "93", + "first-name": "Hugh", + "last-name": "Hirthe", + "email": "verla.dickens@keeling.name", + "date": "1971-03-17 23:51:15 -0800", + "content": + "Voluptatibus saepe dolor voluptas sed cupiditate incidunt. Magni velit ut beatae minus. Consequatur recusandae voluptas ad ex dolores modi quos.", + "subject": "Ut pariatur odit mollitia soluta eaque magnam" + }, + + { + "id": "94", + "first-name": "Elsa", + "last-name": "Morissette", + "email": "otto@ohara.org", + "date": "2006-11-27 01:10:16 -0800", + "content": + "Et architecto ipsam asperiores vitae quo. Fugiat error quidem facilis. Eaque officiis est veniam.", + "subject": "Autem rerum consequatur suscipit veritatis" + }, + + { + "id": "95", + "first-name": "Gianni", + "last-name": "Nitzsche", + "email": "maxine.carter@schimmelfritsch.com", + "date": "2006-02-22 21:52:15 -0800", + "content": + "Nam aut at esse. Adipisci tenetur in voluptas. Dolore quia nobis voluptatibus iure sit eaque fugit.", + "subject": "Et est rerum non aut eum" + }, + + { + "id": "96", + "first-name": "Reed", + "last-name": "Kirlin", + "email": "keaton@gutmann.net", + "date": "2001-08-15 19:41:38 -0700", + "content": "Mollitia hic numquam dicta.", + "subject": "Est accusantium et nam dolores aliquam" + }, + + { + "id": "97", + "first-name": "Thelma", + "last-name": "Labadie", + "email": "leonor@bahringer.biz", + "date": "1993-01-04 20:38:12 -0800", + "content": + "Porro rerum ea similique. Vel qui est. Temporibus a distinctio dolor doloremque eos beatae.", + "subject": "Aut et quasi aut" + }, + + { + "id": "98", + "first-name": "Neva", + "last-name": "Stehr", + "email": "clifton.turner@beeroconnell.name", + "date": "1983-03-21 03:23:41 -0800", + "content": "Voluptatem impedit sed minus. Incidunt ad est consequatur rerum mollitia.", + "subject": "Eum sapiente quis placeat" + }, + + { + "id": "99", + "first-name": "Jovan", + "last-name": "Kunze", + "email": "grady_keler@casper.net", + "date": "1985-11-17 01:24:57 -0800", + "content": + "Molestiae laboriosam quia adipisci delectus praesentium nam. Dolorum repudiandae delectus esse quis voluptatem similique. Illum tempore vitae quia minus.", + "subject": "Nihil qui repellendus animi nostrum voluptas quisquam aut minima" + }, + + { + "id": "100", + "first-name": "Agustin", + "last-name": "Rowe", + "email": "roderick@cartermckenzie.name", + "date": "2013-08-15 06:42:43 -0700", + "content": "Quo eaque non laboriosam sunt. Ad aliquid laudantium quia. Aut nisi magnam.", + "subject": "Aut hic iste maiores sit" + }, + + { + "id": "101", + "first-name": "Lennie", + "last-name": "Pacocha", + "email": "valentine@goldnerryan.com", + "date": "1995-11-23 15:07:48 -0800", + "content": + "Provident sit voluptate odio qui. Est consequatur nobis. Quibusdam exercitationem ducimus aspernatur.", + "subject": "Perferendis adipisci necessitatibus qui similique" + }, + + { + "id": "102", + "first-name": "Brionna", + "last-name": "Brown", + "email": "jesus@gusikowski.info", + "date": "2007-12-21 20:22:44 -0800", + "content": + "Qui deleniti quaerat ratione doloremque ea quod consequatur. Illo consequatur nisi eos molestiae quos ullam. Enim neque rerum perspiciatis inventore consectetur.", + "subject": "Perferendis ratione voluptatem quae non magnam" + }, + + { + "id": "103", + "first-name": "Ceasar", + "last-name": "Becker", + "email": "barney@conn.biz", + "date": "1991-03-31 18:06:07 -0800", + "content": "Cupiditate ipsa minus. Recusandae consequatur aperiam ab ut sint expedita.", + "subject": "Dolore voluptatum maiores repudiandae ipsam qui consectetur veniam et" + }, + + { + "id": "104", + "first-name": "Jadon", + "last-name": "Walker", + "email": "alexie@brownspencer.biz", + "date": "2014-05-05 03:04:04 -0700", + "content": + "Ipsam ut molestias necessitatibus consequatur eligendi adipisci nihil. Nemo voluptatem dolores iure enim fuga.", + "subject": "Sunt officia voluptas porro et voluptatum exercitationem aut id" + }, + + { + "id": "105", + "first-name": "Harvey", + "last-name": "Little", + "email": "dell_reichel@mayert.name", + "date": "1997-05-17 16:09:39 -0700", + "content": + "Saepe et voluptate enim facere. Nihil est et sint odit aut quae. Deserunt molestiae explicabo impedit iure quod ratione.", + "subject": "Veniam ipsum est eum dolorem neque aut" + }, + + { + "id": "106", + "first-name": "Kailey", + "last-name": "Doyle", + "email": "golda@hayesdavis.name", + "date": "1992-07-01 10:53:52 -0700", + "content": + "Necessitatibus aspernatur nesciunt rerum nam. Qui quaerat modi. Et voluptatem ut quod perspiciatis quo eligendi.", + "subject": "Exercitationem voluptatem sunt hic debitis" + }, + + { + "id": "107", + "first-name": "Emily", + "last-name": "Gutmann", + "email": "mazie@bashirian.biz", + "date": "1999-12-26 09:22:07 -0800", + "content": + "Rem debitis qui quia. Nihil quis quia omnis et ea aliquid. Quam praesentium commodi itaque.", + "subject": "Maiores ea alias fuga" + }, + + { + "id": "108", + "first-name": "Jack", + "last-name": "O'Keefe", + "email": "carlos@wilkinson.biz", + "date": "1988-04-28 18:31:09 -0700", + "content": "Ab aspernatur vel et. Architecto occaecati qui. Adipisci ut sequi culpa.", + "subject": "Qui fuga rerum quo" + }, + + { + "id": "109", + "first-name": "Mylene", + "last-name": "Barton", + "email": "sherman.kunde@block.info", + "date": "1996-04-16 20:06:02 -0700", + "content": "Nostrum iste laboriosam corporis omnis.", + "subject": "Nihil et minima odit iste et beatae" + }, + + { + "id": "110", + "first-name": "Cristopher", + "last-name": "Krajcik", + "email": "levi@oconnell.com", + "date": "1989-11-08 03:06:37 -0800", + "content": "Assumenda qui et accusamus magnam deserunt ut nobis.", + "subject": "Aut numquam saepe placeat facilis at" + }, + + { + "id": "111", + "first-name": "Amya", + "last-name": "Anderson", + "email": "travis@waelchigottlieb.biz", + "date": "1986-12-25 15:27:02 -0800", + "content": "Iure numquam ea omnis nemo illo.", + "subject": "Labore sit aut ea in nemo et deleniti" + }, + + { + "id": "112", + "first-name": "Alphonso", + "last-name": "Buckridge", + "email": "duncan@barton.name", + "date": "1991-02-27 01:09:28 -0800", + "content": "Sint ducimus sed temporibus quo. Voluptas possimus eaque earum aut.", + "subject": "Quidem aliquid blanditiis quasi" + }, + + { + "id": "113", + "first-name": "Jovani", + "last-name": "Thompson", + "email": "lewis.greenfelder@stark.biz", + "date": "1970-10-29 18:08:36 -0800", + "content": "Modi aut ut amet ut qui.", + "subject": "Deserunt est autem sed dicta qui" + }, + + { + "id": "114", + "first-name": "Roosevelt", + "last-name": "Blick", + "email": "sophie_kaulke@kunze.biz", + "date": "2001-11-11 17:45:44 -0800", + "content": "Debitis non exercitationem vero nostrum dignissimos. Et voluptates ad nulla.", + "subject": "Quasi est ipsam accusantium sint" + }, + + { + "id": "115", + "first-name": "Darren", + "last-name": "Brown", + "email": "jammie@hickle.net", + "date": "2007-10-05 11:14:49 -0700", + "content": + "Quas ut odio blanditiis corrupti quia dolor. Id enim in veniam voluptatem. Laborum delectus quidem voluptatem beatae facilis ut.", + "subject": "Fugiat totam dolores harum soluta iusto et" + }, + + { + "id": "116", + "first-name": "Dexter", + "last-name": "Schroeder", + "email": "efrain.corwin@hane.name", + "date": "1973-09-30 19:52:23 -0700", + "content": "Debitis assumenda fugit. Sunt omnis in quod aut quibusdam qui.", + "subject": "Aut iure molestias suscipit laboriosam dolores" + }, + + { + "id": "117", + "first-name": "Mellie", + "last-name": "Hilpert", + "email": "amiya_haley@douglasbins.org", + "date": "1992-05-14 20:52:23 -0700", + "content": + "Vero aut perferendis commodi. Quod dolorem distinctio sint. Error nostrum reprehenderit aut quaerat officiis eaque.", + "subject": "Omnis aliquid rerum fuga vero molestiae quidem eveniet" + }, + + { + "id": "118", + "first-name": "Laura", + "last-name": "Koepp", + "email": "gus@hagenes.biz", + "date": "2007-08-04 22:19:10 -0700", + "content": + "Quibusdam fugiat quasi consequatur. Ipsam corporis nesciunt quae ipsa aliquid hic eius.", + "subject": "Asperiores quisquam voluptatem aut quam dolores" + }, + + { + "id": "119", + "first-name": "Amara", + "last-name": "Jerde", + "email": "estelle@marksdonnelly.info", + "date": "1989-08-19 01:24:43 -0700", + "content": + "Architecto voluptatum quas pariatur expedita exercitationem quo. Sint eum perferendis a. Et similique est amet dolores.", + "subject": "Id consequuntur nesciunt tenetur impedit sit voluptas" + }, + + { + "id": "120", + "first-name": "Jacquelyn", + "last-name": "Barton", + "email": "antwon_mayer@kshleringibson.info", + "date": "1989-08-19 13:07:02 -0700", + "content": "Quos enim repellendus praesentium sit rerum deserunt.", + "subject": "Et omnis hic autem ipsa tempora impedit perspiciatis" + }, + + { + "id": "121", + "first-name": "Micaela", + "last-name": "Runte", + "email": "vivianne.graham@vonrueden.org", + "date": "1986-09-27 01:16:29 -0700", + "content": "Et neque rem.", + "subject": "Enim facere corrupti accusamus quam consequatur beatae aspernatur vero" + }, + + { + "id": "122", + "first-name": "Millie", + "last-name": "Flatley", + "email": "gino@kihn.biz", + "date": "1980-02-09 01:35:05 -0800", + "content": "Rerum sint quis esse minus. Aut at asperiores. Amet magni beatae atque.", + "subject": "Illo vitae blanditiis et impedit in dolor" + }, + + { + "id": "123", + "first-name": "Sincere", + "last-name": "Rohan", + "email": "zora@beattyerdman.org", + "date": "2002-11-11 22:02:22 -0800", + "content": "Ut error voluptatem aut ratione molestiae. Omnis qui rem delectus.", + "subject": "Unde sed voluptas assumenda non animi quo" + }, + + { + "id": "124", + "first-name": "Vicky", + "last-name": "Kautzer", + "email": "mustafa.lueilwitz@tremblay.name", + "date": "2014-08-15 11:18:05 -0700", + "content": + "Nostrum quis et et molestiae molestiae. Corporis corrupti deleniti qui fugiat eos. Porro qui quis mollitia.", + "subject": "Quisquam ex esse dolore" + }, + + { + "id": "125", + "first-name": "Lavon", + "last-name": "Padberg", + "email": "destin_sanford@reynolds.net", + "date": "2005-07-11 21:24:34 -0700", + "content": "Officia dolorem autem beatae soluta numquam aperiam et.", + "subject": "Ad labore aut corporis" + }, + + { + "id": "126", + "first-name": "Shaina", + "last-name": "Dare", + "email": "carrie_sawayn@buckridge.net", + "date": "2001-10-12 08:02:09 -0700", + "content": "Ex doloremque dolor deleniti.", + "subject": "Asperiores recusandae reprehenderit quia tempore qui ipsam sit" + }, + + { + "id": "127", + "first-name": "Sigrid", + "last-name": "Farrell", + "email": "soledad_abshire@miller.net", + "date": "2003-03-24 17:55:50 -0800", + "content": "Debitis ea soluta eos ut omnis. Ut et laboriosam. Quaerat sit velit impedit.", + "subject": "Eum et nesciunt quidem quo repudiandae rerum doloremque beatae" + }, + + { + "id": "128", + "first-name": "Viola", + "last-name": "Dooley", + "email": "myrtice_grant@zemlakbashirian.com", + "date": "2006-06-01 21:17:02 -0700", + "content": "Sit doloremque est aut voluptatem.", + "subject": "Aut accusamus consectetur nihil iusto" + }, + + { + "id": "129", + "first-name": "Davion", + "last-name": "Conn", + "email": "travis@bins.biz", + "date": "1993-11-26 09:03:37 -0800", + "content": + "Voluptatibus ipsum mollitia fugit aspernatur enim sint. Laudantium exercitationem sed voluptas consequatur quis.", + "subject": "Illum aspernatur tempora amet itaque ipsam distinctio aliquid" + }, + + { + "id": "130", + "first-name": "Hobart", + "last-name": "Oberbrunner", + "email": "eric@wisozk.net", + "date": "2000-02-11 07:40:02 -0800", + "content": "Quis aut sint officia sunt.", + "subject": "Ut pariatur explicabo consequatur libero distinctio nulla consequatur placeat" + }, + + { + "id": "131", + "first-name": "Raleigh", + "last-name": "Hegmann", + "email": "jasen.koepp@hickle.name", + "date": "1993-03-01 22:48:23 -0800", + "content": + "Delectus aut quod maxime incidunt et consequatur. Nihil eos et eveniet quo iure. Alias facilis earum dicta nulla quo sed.", + "subject": "Aliquam eos aliquid dolor" + }, + + { + "id": "132", + "first-name": "Hector", + "last-name": "Denesik", + "email": "bernice@leuschke.biz", + "date": "2013-08-03 14:45:55 -0700", + "content": "Et ut dicta. Qui sunt vel et voluptas hic suscipit.", + "subject": "Ipsum quo est consequatur" + }, + + { + "id": "133", + "first-name": "Nikko", + "last-name": "Rolfson", + "email": "crystel@upton.net", + "date": "1977-02-19 16:22:15 -0800", + "content": "Velit quo repellendus consequatur.", + "subject": "Exercitationem omnis aut id deserunt nihil et inventore" + }, + + { + "id": "134", + "first-name": "Jovany", + "last-name": "Nienow", + "email": "neil.muller@lakin.info", + "date": "2004-09-28 21:55:43 -0700", + "content": + "Voluptatibus numquam blanditiis quibusdam. Illum suscipit dolorum. Sunt amet est sint.", + "subject": "Esse nihil est voluptas rerum ea" + }, + + { + "id": "135", + "first-name": "Ellis", + "last-name": "Kohler", + "email": "cordie_bartoletti@barrows.net", + "date": "1989-09-19 13:57:30 -0700", + "content": + "Eum corporis nobis laborum fugiat amet alias. Voluptatum quasi ducimus fuga corrupti. Mollitia modi laborum.", + "subject": "Ipsum modi nulla et" + }, + + { + "id": "136", + "first-name": "Marley", + "last-name": "Runolfsson", + "email": "kian_vonrueden@collier.info", + "date": "2003-01-17 06:33:04 -0800", + "content": "Et rerum explicabo iusto ipsa ipsum. Quia ipsa ab sed perspiciatis.", + "subject": "Voluptas esse iure quia hic dolor eligendi velit maiores" + }, + + { + "id": "137", + "first-name": "Grant", + "last-name": "Jenkins", + "email": "hayden.altenwerth@corkeryankunding.net", + "date": "1970-03-24 13:04:46 -0800", + "content": "Tenetur odit ratione voluptatum dolore qui.", + "subject": "Tempore est molestiae id" + }, + + { + "id": "138", + "first-name": "Deangelo", + "last-name": "Koss", + "email": "reba.skiles@bruen.com", + "date": "1999-10-16 20:28:42 -0700", + "content": "Sit vero sint ut beatae iure. Minima harum tempora sit rerum aut.", + "subject": "Aspernatur cumque non consequatur blanditiis enim quas quam" + }, + + { + "id": "139", + "first-name": "Mariana", + "last-name": "Jakubowski", + "email": "brett@swift.biz", + "date": "1970-07-04 08:54:29 -0700", + "content": "Beatae expedita praesentium ea corrupti. Aut sint ad et sunt.", + "subject": "Dolore distinctio consequatur aut laudantium officiis aliquid soluta" + }, + + { + "id": "140", + "first-name": "Leonard", + "last-name": "Kovacek", + "email": "jermain@dachbruen.biz", + "date": "1981-10-15 00:39:10 -0700", + "content": + "Deserunt cupiditate modi. Eius consequatur aut dolor nostrum porro dignissimos. Labore consequatur quod est et distinctio possimus ducimus.", + "subject": "Et rerum id voluptates et iure eligendi rerum" + }, + + { + "id": "141", + "first-name": "Etha", + "last-name": "Ondricka", + "email": "noemy@okuneva.org", + "date": "1994-04-29 12:19:51 -0700", + "content": + "Velit fuga quasi pariatur consectetur est nihil. Dolore nisi dolores quia qui voluptatem inventore provident.", + "subject": "Enim est commodi nisi autem asperiores molestiae minima" + }, + + { + "id": "142", + "first-name": "Nannie", + "last-name": "Fadel", + "email": "frida.streich@prosacco.org", + "date": "2012-12-15 16:56:24 -0800", + "content": "Rerum id quo. Recusandae aut optio voluptate perspiciatis tempore sed nemo.", + "subject": "Pariatur soluta praesentium enim quo quam alias consequuntur in" + }, + + { + "id": "143", + "first-name": "Shyanne", + "last-name": "Kunze", + "email": "annabel@littel.net", + "date": "1992-12-09 23:41:23 -0800", + "content": "Dolores iure iste unde. Illo esse autem harum perspiciatis.", + "subject": "Atque illum et qui" + }, + + { + "id": "144", + "first-name": "Eloy", + "last-name": "Barton", + "email": "leonie_gulgowski@skiles.com", + "date": "2013-01-12 20:05:57 -0800", + "content": "Cumque id sapiente explicabo. Voluptas pariatur quibusdam dolores et.", + "subject": "Ut dolore velit qui omnis" + }, + + { + "id": "145", + "first-name": "Rosalinda", + "last-name": "Pfeffer", + "email": "anabelle@langworth.com", + "date": "2001-05-17 05:43:52 -0700", + "content": "Et voluptatem quasi voluptatum.", + "subject": "Voluptatum quia incidunt ut repudiandae blanditiis" + }, + + { + "id": "146", + "first-name": "William", + "last-name": "Bogisich", + "email": "bertha@gibsonrohan.info", + "date": "2009-11-01 04:28:13 -0800", + "content": + "Quaerat dolorem odio et dolor saepe quia odit. Corporis molestiae ab ipsa occaecati autem fuga dicta. Voluptate ratione sunt.", + "subject": "Ipsam quidem mollitia blanditiis magnam ut et" + }, + + { + "id": "147", + "first-name": "Laurianne", + "last-name": "Bergstrom", + "email": "brisa_howe@dare.net", + "date": "2003-03-23 21:58:11 -0800", + "content": "Et porro recusandae aut. Tenetur voluptas aperiam ut vitae.", + "subject": "Molestias autem qui nisi mollitia nulla dolorum repudiandae hic" + }, + + { + "id": "148", + "first-name": "Carroll", + "last-name": "Hickle", + "email": "noemi.grady@grimesritchie.com", + "date": "1996-07-15 02:55:52 -0700", + "content": "Quia voluptas assumenda. Numquam inventore facilis dicta qui ipsa reiciendis.", + "subject": "Perferendis rerum vel incidunt molestias recusandae" + }, + + { + "id": "149", + "first-name": "Jasen", + "last-name": "Romaguera", + "email": "jayce@berge.name", + "date": "1984-04-12 11:56:39 -0800", + "content": "Consectetur molestias perspiciatis ut omnis aliquid.", + "subject": "Hic optio accusamus qui adipisci repellendus ipsa in" + }, + + { + "id": "150", + "first-name": "Heaven", + "last-name": "Fay", + "email": "enola@sanfordsteuber.net", + "date": "2000-11-23 00:18:07 -0800", + "content": + "Quia itaque temporibus. Provident ducimus quidem consectetur qui voluptatum. Sunt cum quis dolorum hic.", + "subject": "Ad excepturi illum doloremque ducimus corporis ut qui omnis" + }, + + { + "id": "151", + "first-name": "Wilburn", + "last-name": "Cartwright", + "email": "jaida_erdman@nitzsche.com", + "date": "2011-09-19 01:58:53 -0700", + "content": "Autem iure magni ut odio amet et.", + "subject": "Fuga quis quidem sint laborum et delectus iste" + }, + + { + "id": "152", + "first-name": "Concepcion", + "last-name": "McLaughlin", + "email": "bernardo_langworth@jakubowski.org", + "date": "1992-08-20 13:35:09 -0700", + "content": "Rerum laboriosam omnis nobis eaque odit sequi dicta.", + "subject": "Sint accusantium ab quis sed ipsa" + }, + + { + "id": "153", + "first-name": "Vita", + "last-name": "Fisher", + "email": "chanelle_gulgowski@roob.info", + "date": "2005-09-21 12:09:45 -0700", + "content": + "Sunt quibusdam adipisci accusantium laborum distinctio voluptate autem. Quis pariatur culpa ut et. Fuga similique dignissimos culpa dolorum neque reiciendis.", + "subject": "Nulla enim et fugiat eveniet ducimus delectus" + }, + + { + "id": "154", + "first-name": "Elliott", + "last-name": "Champlin", + "email": "kamille@kulascain.biz", + "date": "2003-05-20 15:42:54 -0700", + "content": + "Eos quisquam et voluptates rerum vel. Consectetur veniam voluptatem minus totam numquam in.", + "subject": "Deleniti ipsum et odio" + }, + + { + "id": "155", + "first-name": "Heidi", + "last-name": "Macejkovic", + "email": "stefanie@barrowshagenes.info", + "date": "1983-06-02 17:59:14 -0700", + "content": "Ut officiis animi exercitationem delectus suscipit qui voluptatibus.", + "subject": "Eveniet ipsam asperiores qui aut consectetur vel provident" + }, + + { + "id": "156", + "first-name": "Janae", + "last-name": "Pollich", + "email": "brianne.sauer@marquardtsteuber.com", + "date": "2000-05-14 07:13:30 -0700", + "content": "Facilis sit ut odit.", + "subject": "Sapiente explicabo sequi molestias illo saepe" + }, + + { + "id": "157", + "first-name": "Kaylin", + "last-name": "Lindgren", + "email": "urban.franecki@wilkinsonwilderman.org", + "date": "2014-09-09 00:48:38 -0700", + "content": "Eaque ad repellendus est nihil iste vero.", + "subject": "Deserunt qui dolor rerum ut beatae aut" + }, + + { + "id": "158", + "first-name": "Garland", + "last-name": "Nienow", + "email": "ellen.schultz@kihn.org", + "date": "2013-10-27 00:18:14 -0700", + "content": "Quam voluptatem nam est.", + "subject": "Et occaecati quisquam impedit dolore quod" + }, + + { + "id": "159", + "first-name": "Lilly", + "last-name": "Hills", + "email": "macey@labadie.biz", + "date": "1981-02-23 03:46:55 -0800", + "content": + "Quia perferendis est consequuntur voluptates cumque commodi. Laboriosam expedita sit excepturi.", + "subject": "Eos doloribus repellendus provident" + }, + + { + "id": "160", + "first-name": "Lilla", + "last-name": "Abshire", + "email": "roselyn@rippin.org", + "date": "1998-05-16 00:55:49 -0700", + "content": "Ratione deserunt ut ut beatae praesentium qui. Nulla ut ipsam tempore.", + "subject": "Autem nostrum tempora iure laborum" + }, + + { + "id": "161", + "first-name": "Alessandro", + "last-name": "Hayes", + "email": "gia_bradtke@schimmelwalsh.biz", + "date": "2001-11-28 23:52:57 -0800", + "content": + "Quasi perspiciatis tenetur dolorum. Quae cupiditate fuga molestiae et tempore soluta.", + "subject": "Non ipsam quis soluta" + }, + + { + "id": "162", + "first-name": "Sharon", + "last-name": "Goodwin", + "email": "ulices.schimmel@oreillyabshire.name", + "date": "2010-03-12 00:46:00 -0800", + "content": "Neque omnis in. Qui ad sint. Velit voluptatibus repellat esse at.", + "subject": "Magni exercitationem quas consectetur qui quia id" + }, + + { + "id": "163", + "first-name": "Claude", + "last-name": "Gleason", + "email": "ken.gulgowski@labadie.net", + "date": "2003-05-30 14:58:54 -0700", + "content": "Et sit non harum quo sunt. Odio beatae voluptatem ad. Nemo in hic nulla.", + "subject": "Nobis consequatur non sunt sequi ex nihil" + }, + + { + "id": "164", + "first-name": "Maximilian", + "last-name": "Mann", + "email": "samir@stehr.biz", + "date": "1993-08-21 15:54:18 -0700", + "content": + "Minus quae voluptatem sequi. Distinctio voluptatem amet iusto velit et praesentium. Distinctio ipsum voluptas voluptas.", + "subject": "Facere voluptatem laudantium laboriosam omnis" + }, + + { + "id": "165", + "first-name": "Jennyfer", + "last-name": "Satterfield", + "email": "janiya_senger@olson.info", + "date": "2006-09-21 00:36:50 -0700", + "content": "Doloribus praesentium excepturi omnis.", + "subject": "Non fuga unde incidunt ad exercitationem maxime laboriosam qui" + }, + + { + "id": "166", + "first-name": "Robin", + "last-name": "Murray", + "email": "alycia@cruickshank.name", + "date": "1985-10-04 03:44:39 -0700", + "content": "Repudiandae dolorem ut. Possimus earum dignissimos temporibus amet vel eum.", + "subject": "Vel culpa debitis quam" + }, + + { + "id": "167", + "first-name": "Albina", + "last-name": "Reinger", + "email": "guie.gleason@gorczany.info", + "date": "1985-10-02 08:07:53 -0700", + "content": "Natus rerum repellat voluptas. Distinctio dolor est in dolores.", + "subject": "Modi perspiciatis iure odio hic et dignissimos rem qui" + }, + + { + "id": "168", + "first-name": "Eloisa", + "last-name": "Wolf", + "email": "leopold@jenkins.info", + "date": "2007-02-19 09:25:29 -0800", + "content": "Corporis ut dolorem ullam quidem ratione. Nam eveniet dicta autem eum.", + "subject": "Facilis voluptas vel repellat et aut amet est" + }, + + { + "id": "169", + "first-name": "Caden", + "last-name": "Cartwright", + "email": "mohammad_lockman@okoncrooks.net", + "date": "1974-11-14 03:12:44 -0800", + "content": + "Sunt nobis voluptate quasi sapiente magni a officia. Laudantium perspiciatis quod quis quidem voluptatum pariatur. Sit ut optio tempora.", + "subject": "Nihil maxime officia et repellat" + }, + + { + "id": "170", + "first-name": "Raul", + "last-name": "Sipes", + "email": "danial.miller@kulas.info", + "date": "1996-12-11 14:14:16 -0800", + "content": + "Ea rerum quo id omnis. Hic est voluptate voluptatem ut. Rerum eos ipsa laboriosam et ut expedita.", + "subject": "Aliquam reiciendis quam expedita sed ad neque voluptas" + }, + + { + "id": "171", + "first-name": "Allie", + "last-name": "Runolfsson", + "email": "skye@marvin.com", + "date": "2011-07-31 19:37:22 -0700", + "content": "Perspiciatis mollitia fugit sunt et.", + "subject": "Nihil expedita neque reprehenderit" + }, + + { + "id": "172", + "first-name": "Belle", + "last-name": "Nader", + "email": "eugenia@mante.info", + "date": "1995-09-06 05:30:08 -0700", + "content": "Expedita delectus quis ipsa dolore voluptatum.", + "subject": "Recusandae quasi ullam consequatur assumenda aliquid unde" + }, + + { + "id": "173", + "first-name": "Clemens", + "last-name": "Tromp", + "email": "geovanny@kilback.org", + "date": "1980-11-28 08:48:35 -0800", + "content": "Sint eos ea quidem tempora.", + "subject": "Velit aperiam consequatur ut et aliquam at" + }, + + { + "id": "174", + "first-name": "Bettie", + "last-name": "Mueller", + "email": "edgardo@little.net", + "date": "1983-06-26 14:10:56 -0700", + "content": "Dolore tempore accusamus.", + "subject": "Autem tempore et ut" + }, + + { + "id": "175", + "first-name": "Guy", + "last-name": "King", + "email": "macie@schmeler.info", + "date": "1999-03-28 22:34:59 -0800", + "content": "Recusandae laborum ut et eaque eum.", + "subject": "Dolor ullam totam consequatur eos fuga" + }, + + { + "id": "176", + "first-name": "Cydney", + "last-name": "Cronin", + "email": "camren@thompson.org", + "date": "1993-10-23 02:50:41 -0700", + "content": "Exercitationem modi eos sint vero. Iste possimus quis. Non est voluptas.", + "subject": "Tempora ipsum soluta ut corrupti omnis in" + }, + + { + "id": "177", + "first-name": "Ludwig", + "last-name": "Hoeger", + "email": "javon@torpolson.info", + "date": "2007-12-20 19:09:13 -0800", + "content": "Architecto ut optio tempore pariatur itaque saepe.", + "subject": "Earum unde quis officiis doloremque et animi qui" + }, + + { + "id": "178", + "first-name": "Travon", + "last-name": "Jacobi", + "email": "jameson_streich@hansen.org", + "date": "2013-02-03 09:53:51 -0800", + "content": "Autem dolorem totam atque id sit. Consectetur dolor maiores.", + "subject": "Quia autem deleniti ullam neque odio" + }, + + { + "id": "179", + "first-name": "Brennan", + "last-name": "Jaskolski", + "email": "harold_thompson@schaefer.info", + "date": "2004-01-13 10:53:47 -0800", + "content": "Libero et dolorem nihil. Omnis consequuntur possimus ut.", + "subject": "Eum labore omnis ipsa doloremque consequuntur soluta esse fuga" + }, + + { + "id": "180", + "first-name": "Clifton", + "last-name": "Boyer", + "email": "justine@skiles.biz", + "date": "2000-01-28 22:33:14 -0800", + "content": + "Nobis recusandae fugiat quibusdam doloribus. Aut praesentium corrupti tenetur ullam quia.", + "subject": "Ea dolorem voluptas aut cumque inventore delectus non molestiae" + }, + + { + "id": "181", + "first-name": "Walker", + "last-name": "Rogahn", + "email": "stanton@rempel.net", + "date": "2012-04-02 20:05:38 -0700", + "content": "Consectetur et soluta. Minus voluptatem quod aut vitae praesentium.", + "subject": "Tenetur architecto reprehenderit corporis fuga et rerum vel" + }, + + { + "id": "182", + "first-name": "Jennings", + "last-name": "Hills", + "email": "kenton@murrayharvey.biz", + "date": "2007-09-24 22:09:51 -0700", + "content": + "Velit porro quidem nostrum. Perspiciatis consequatur consectetur reiciendis sunt cupiditate quae. Vitae et ut autem iure.", + "subject": "Cupiditate quis maiores omnis" + }, + + { + "id": "183", + "first-name": "Julianne", + "last-name": "O'Kon", + "email": "helene@abshire.com", + "date": "1987-02-09 22:56:12 -0800", + "content": + "Voluptas voluptatem veniam porro dolorem maxime. Itaque eveniet laborum optio sed aspernatur omnis. Veritatis enim itaque sint illo ipsam eius.", + "subject": "Corporis et laboriosam aspernatur aut" + }, + + { + "id": "184", + "first-name": "Raymond", + "last-name": "Orn", + "email": "cloyd@rempel.biz", + "date": "2014-02-04 04:33:02 -0800", + "content": + "Eum voluptatibus accusantium rem. Deleniti harum eum. Illo est facere illum saepe voluptas.", + "subject": "Eveniet est architecto id ut rerum nam quidem" + }, + + { + "id": "185", + "first-name": "Johan", + "last-name": "Legros", + "email": "rosie_ernser@wolf.com", + "date": "1989-03-02 11:17:10 -0800", + "content": "Architecto explicabo praesentium amet eaque quibusdam.", + "subject": "Consectetur fugiat iusto omnis aspernatur ut" + }, + + { + "id": "186", + "first-name": "Daryl", + "last-name": "Labadie", + "email": "ashly_thompson@casper.net", + "date": "2003-01-28 00:02:56 -0800", + "content": "Et est doloribus. Fuga hic sed voluptatibus ullam officia aspernatur.", + "subject": "A sunt eum quas accusamus" + }, + + { + "id": "187", + "first-name": "Gavin", + "last-name": "Moore", + "email": "dahlia@leffleroberbrunner.biz", + "date": "1970-10-15 07:36:57 -0700", + "content": "Sapiente ipsum magni dolore est dolor.", + "subject": "Est maxime consequatur esse qui dicta aut quaerat" + }, + + { + "id": "188", + "first-name": "Coby", + "last-name": "Swaniawski", + "email": "millie.labadie@wuckert.name", + "date": "2012-09-14 00:25:46 -0700", + "content": + "Magni qui molestias debitis reprehenderit vel quo est. Blanditiis debitis autem neque non illo.", + "subject": "Rerum accusantium magni dolorem in reprehenderit et voluptas" + }, + + { + "id": "189", + "first-name": "Luis", + "last-name": "Stracke", + "email": "merle@mrazswaniawski.biz", + "date": "2007-11-11 05:28:46 -0800", + "content": "Neque magnam sint porro reprehenderit quo. In et reiciendis non velit et eum quos.", + "subject": "Sit voluptates nulla perspiciatis debitis dolor eaque a" + }, + + { + "id": "190", + "first-name": "Leone", + "last-name": "Huel", + "email": "emil@botsford.biz", + "date": "2004-03-16 23:46:45 -0800", + "content": "Vitae amet et quae ullam.", + "subject": "Rerum enim voluptate qui" + }, + + { + "id": "191", + "first-name": "Aylin", + "last-name": "Kling", + "email": "anderson_jast@kozeyparisian.com", + "date": "1979-06-17 04:05:50 -0700", + "content": "Quam eligendi numquam sint. Non ipsa et qui error dolor velit.", + "subject": "Culpa iste rerum facere praesentium deleniti sequi" + }, + + { + "id": "192", + "first-name": "Junior", + "last-name": "Bartoletti", + "email": "te@kuvalis.net", + "date": "1994-12-09 11:00:34 -0800", + "content": "Velit eos et nemo dolore eum necessitatibus. Ea inventore adipisci.", + "subject": "Velit dolorem cumque ipsa" + }, + + { + "id": "193", + "first-name": "Nathanael", + "last-name": "Hermiston", + "email": "macy.cole@wittingcasper.info", + "date": "2002-01-06 17:45:52 -0800", + "content": + "Corporis occaecati quidem quia repudiandae repellendus beatae similique. Inventore quo ullam.", + "subject": "Quidem expedita quia inventore dolores ratione totam et dignissimos" + }, + + { + "id": "194", + "first-name": "Hal", + "last-name": "Bruen", + "email": "nathen.ziemann@gerlachko.name", + "date": "1996-03-01 01:35:30 -0800", + "content": + "Qui eius aspernatur et aut et vel in. Adipisci aliquid consequatur dolores et ut. Est aut temporibus.", + "subject": "Voluptas placeat eveniet non quas assumenda quam minus" + }, + + { + "id": "195", + "first-name": "Freddie", + "last-name": "Thompson", + "email": "elia@aufderharbrown.org", + "date": "2005-03-20 05:07:30 -0800", + "content": "Dolor nemo sed molestiae quae quia.", + "subject": "Quam sint et voluptatem et fuga sint ut saepe" + }, + + { + "id": "196", + "first-name": "Aida", + "last-name": "Gorczany", + "email": "olga.labadie@abshire.name", + "date": "1989-07-26 04:26:19 -0700", + "content": + "Sit qui voluptatem facere. Similique alias quia sit ipsum. Ut corrupti tempore molestiae.", + "subject": "Qui veniam blanditiis nesciunt beatae tempore aut fugiat maiores" + }, + + { + "id": "197", + "first-name": "Isabelle", + "last-name": "Collier", + "email": "christiana_gottlieb@borer.biz", + "date": "1978-05-15 13:13:34 -0700", + "content": "Aliquam earum velit ut.", + "subject": "Neque et voluptate ratione totam voluptas est nulla ipsum" + }, + + { + "id": "198", + "first-name": "Ida", + "last-name": "Reichert", + "email": "mervin@keeling.com", + "date": "1991-02-06 05:02:15 -0800", + "content": + "Velit in at et dicta tenetur. Doloremque cupiditate est. Excepturi non minus aspernatur dolores qui quaerat architecto.", + "subject": "Ut voluptas qui ad minus" + }, + + { + "id": "199", + "first-name": "Angelina", + "last-name": "Mueller", + "email": "leonel@purdyschroeder.org", + "date": "2008-06-17 01:01:57 -0700", + "content": + "Recusandae eius non necessitatibus. Quisquam qui quo. Voluptas dolorem dolorem sit repellat laudantium ducimus qui.", + "subject": "Dolorem atque impedit qui soluta" + }, + + { + "id": "200", + "first-name": "Marcelle", + "last-name": "Connelly", + "email": "heath@leuschke.net", + "date": "1983-10-02 18:32:18 -0700", + "content": + "Debitis quasi voluptates et voluptatibus rerum. Et explicabo quia qui qui voluptate dolor.", + "subject": "Rem molestiae nobis consequatur eligendi ut" + }, + { + "id": "201", + "first-name": "Bob", + "last-name": "Brown", + "email": "bob@brown.net", + "date": "1983-10-02 18:32:18 -0700", + "content": + "Debitis quasi voluptates et voluptatibus rerum. Et explicabo quia qui qui voluptate dolor.", + "subject": "Urgent question about whipped cream", + "draft": true + }, + { + "id": "202", + "first-name": "Mary", + "last-name": "Jones", + "email": "mary@jones.net", + "date": "1983-10-02 18:32:18 -0700", + "content": + "Debitis quasi voluptates et voluptatibus rerum. Et explicabo quia qui qui voluptate dolor.", + "subject": "Fwd: wedding photos", + "draft": true + } +] diff --git a/modules/playground/src/routing_deprecated/app/drafts.html b/modules/playground/src/routing_deprecated/app/drafts.html new file mode 100644 index 0000000000..6cfee645bd --- /dev/null +++ b/modules/playground/src/routing_deprecated/app/drafts.html @@ -0,0 +1,11 @@ +
+

Drafts

+ +
    +
  1. + + {{ item.subject }} +
  2. +
+
diff --git a/modules/playground/src/routing_deprecated/app/inbox-app.html b/modules/playground/src/routing_deprecated/app/inbox-app.html new file mode 100644 index 0000000000..4629749c18 --- /dev/null +++ b/modules/playground/src/routing_deprecated/app/inbox-app.html @@ -0,0 +1,5 @@ + + Inbox + Drafts + + diff --git a/modules/playground/src/routing_deprecated/app/inbox-app.ts b/modules/playground/src/routing_deprecated/app/inbox-app.ts new file mode 100644 index 0000000000..3c941937b8 --- /dev/null +++ b/modules/playground/src/routing_deprecated/app/inbox-app.ts @@ -0,0 +1,161 @@ +import {Component, Injectable} from '@angular/core'; +import { + RouterLink, + RouteConfig, + Router, + Route, + RouterOutlet, + RouteParams +} from '@angular/router-deprecated'; +import * as db from './data'; +import {Location} from '@angular/common'; +import {PromiseWrapper, PromiseCompleter} from '@angular/core/src/facade/async'; +import {isPresent, DateWrapper} from '@angular/core/src/facade/lang'; + +class InboxRecord { + id: string = ''; + subject: string = ''; + content: string = ''; + email: string = ''; + firstName: string = ''; + lastName: string = ''; + date: string; + draft: boolean = false; + + constructor(data: { + id: string, + subject: string, + content: string, + email: string, + firstName: string, + lastName: string, + date: string, draft?: boolean + } = null) { + if (isPresent(data)) { + this.setData(data); + } + } + + setData(record: { + id: string, + subject: string, + content: string, + email: string, + firstName: string, + lastName: string, + date: string, draft?: boolean + }) { + this.id = record['id']; + this.subject = record['subject']; + this.content = record['content']; + this.email = record['email']; + this.firstName = (record as any /** TODO #9100 */)['first-name']; + this.lastName = (record as any /** TODO #9100 */)['last-name']; + this.date = record['date']; + this.draft = record['draft'] == true; + } +} + +@Injectable() +class DbService { + getData(): Promise { + var p = new PromiseCompleter(); + p.resolve(db.data); + return p.promise; + } + + drafts(): Promise { + return this.getData().then( + (data: any[]): any[] => + data.filter(record => isPresent(record['draft']) && record['draft'] == true)); + } + + emails(): Promise { + return this.getData().then((data: any[]): any[] => + data.filter(record => !isPresent(record['draft']))); + } + + email(id: any /** TODO #9100 */): Promise { + return PromiseWrapper.then(this.getData(), (data: any[]) => { + for (var i = 0; i < data.length; i++) { + var entry = data[i]; + if (entry['id'] == id) { + return entry; + } + } + return null; + }); + } +} + +@Component( + {selector: 'inbox-detail', directives: [RouterLink], templateUrl: 'app/inbox-detail.html'}) +class InboxDetailCmp { + record: InboxRecord = new InboxRecord(); + ready: boolean = false; + + constructor(db: DbService, params: RouteParams) { + var id = params.get('id'); + PromiseWrapper.then(db.email(id), (data) => { this.record.setData(data); }); + } +} + +@Component({selector: 'inbox', templateUrl: 'app/inbox.html', directives: [RouterLink]}) +class InboxCmp { + items: InboxRecord[] = []; + ready: boolean = false; + + constructor(public router: Router, db: DbService, params: RouteParams) { + var sortType = params.get('sort'); + var sortEmailsByDate = isPresent(sortType) && sortType == "date"; + + PromiseWrapper.then(db.emails(), (emails: any[]) => { + this.ready = true; + this.items = emails.map(data => new InboxRecord(data)); + + if (sortEmailsByDate) { + this.items.sort((a: InboxRecord, b: InboxRecord) => + DateWrapper.toMillis(DateWrapper.fromISOString(a.date)) < + DateWrapper.toMillis(DateWrapper.fromISOString(b.date)) ? + -1 : + 1); + } + }); + } +} + + +@Component({selector: 'drafts', templateUrl: 'app/drafts.html', directives: [RouterLink]}) +class DraftsCmp { + items: InboxRecord[] = []; + ready: boolean = false; + + constructor(public router: Router, db: DbService) { + PromiseWrapper.then(db.drafts(), (drafts: any[]) => { + this.ready = true; + this.items = drafts.map(data => new InboxRecord(data)); + }); + } +} + +@Component({ + selector: 'inbox-app', + viewProviders: [DbService], + templateUrl: 'app/inbox-app.html', + directives: [RouterOutlet, RouterLink] +}) +@RouteConfig([ + new Route({path: '/', component: InboxCmp, name: 'Inbox'}), + new Route({path: '/drafts', component: DraftsCmp, name: 'Drafts'}), + new Route({path: '/detail/:id', component: InboxDetailCmp, name: 'DetailPage'}) +]) +export class InboxApp { + router: Router; + location: Location; + constructor(router: Router, location: Location) { + this.router = router; + this.location = location; + } + inboxPageActive() { return this.location.path() == ''; } + draftsPageActive() { return this.location.path() == '/drafts'; } +} diff --git a/modules/playground/src/routing_deprecated/app/inbox-detail.html b/modules/playground/src/routing_deprecated/app/inbox-detail.html new file mode 100644 index 0000000000..0766e502cb --- /dev/null +++ b/modules/playground/src/routing_deprecated/app/inbox-detail.html @@ -0,0 +1,24 @@ +
+

{{ record.subject }}

+ +
    +
  • ID: {{ record.id }}
  • +
  • Name: {{ record.firstName }} {{ record.lastName }}
  • +
  • Email: {{ record.email }}
  • +
  • Date: {{ record.date }}
  • +
+ +

+ {{ record.content }} +

+ + + Back + + +
+ + + View Latest Messages + +
diff --git a/modules/playground/src/routing_deprecated/app/inbox.html b/modules/playground/src/routing_deprecated/app/inbox.html new file mode 100644 index 0000000000..4568060601 --- /dev/null +++ b/modules/playground/src/routing_deprecated/app/inbox.html @@ -0,0 +1,10 @@ +
+

Inbox

+ +
    +
  1. + {{ item.subject }} +
  2. +
+
diff --git a/modules/playground/src/routing_deprecated/css/app.css b/modules/playground/src/routing_deprecated/css/app.css new file mode 100644 index 0000000000..42945f32a4 --- /dev/null +++ b/modules/playground/src/routing_deprecated/css/app.css @@ -0,0 +1,57 @@ +body { + background:#eee; + color:black; +} + +.inbox-list, +.inbox-list li { + list-style:none; + padding:0; + margin:0; +} + +.inbox-list a { + padding:5px; + display:block; +} + +inbox, drafts, inbox-side-menu { + display:block; +} + +inbox-side-menu .link { + display:block; + text-align:center; + padding:1em; +} + +inbox-side-menu .link.active { + background:white; +} + +inbox-side-menu .link:hover { + background:#eee; +} + +inbox-side-menu { + position:fixed; + left:0; + top:0; + bottom:0; + width:200px; + background:#ddd; +} + +inbox-side-menu a { + display: block; +} + +inbox, drafts, inbox-detail { + padding:1em; + margin-left:200px; +} + +inbox-detail { + display:block; + margin-left:200px; +} diff --git a/modules/playground/src/routing_deprecated/index.html b/modules/playground/src/routing_deprecated/index.html new file mode 100644 index 0000000000..7d386130be --- /dev/null +++ b/modules/playground/src/routing_deprecated/index.html @@ -0,0 +1,14 @@ + + + Routing Example + + + + + + Loading... + + + + + diff --git a/modules/playground/src/routing_deprecated/index.ts b/modules/playground/src/routing_deprecated/index.ts new file mode 100644 index 0000000000..e829e12149 --- /dev/null +++ b/modules/playground/src/routing_deprecated/index.ts @@ -0,0 +1,9 @@ +import {InboxApp} from './app/inbox-app'; +import {bootstrap} from '@angular/platform-browser-dynamic'; +import {HashLocationStrategy, LocationStrategy} from '@angular/common'; +import {ROUTER_PROVIDERS} from '@angular/router-deprecated'; + +export function main() { + bootstrap(InboxApp, + [ROUTER_PROVIDERS, {provide: LocationStrategy, useClass: HashLocationStrategy}]); +}