Repository: tochoromero/vuejs-smart-table
Branch: master
Commit: e8af4c4a97eb
Files: 38
Total size: 127.5 KB
Directory structure:
gitextract_kaf1xz4h/
├── .browserslistrc
├── .circleci/
│ └── config.yml
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── LICENSE
├── README.md
├── babel.config.js
├── deploy.sh
├── docs/
│ ├── .vuepress/
│ │ ├── components/
│ │ │ ├── BasicFiltering.vue
│ │ │ ├── CustomFiltering.vue
│ │ │ ├── InputSpinner.vue
│ │ │ ├── Pagination.vue
│ │ │ ├── Selection.vue
│ │ │ ├── SelectionApi.vue
│ │ │ ├── Sorting.vue
│ │ │ ├── SortingFA.vue
│ │ │ ├── TheBasics.vue
│ │ │ └── data.json
│ │ └── config.js
│ ├── README.md
│ ├── filtering/
│ │ └── README.md
│ ├── pagination/
│ │ └── README.md
│ ├── selection/
│ │ └── README.md
│ ├── sorting/
│ │ └── README.md
│ └── the-basics/
│ └── README.md
├── package.json
├── postcss.config.js
├── src/
│ ├── SmartPagination.vue
│ ├── VTable.vue
│ ├── VTh.vue
│ ├── VTr.vue
│ ├── main.js
│ ├── store.js
│ └── table-utils.js
└── tests/
└── unit/
├── .eslintrc.js
└── table-utils.spec.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .browserslistrc
================================================
> 1%
last 2 versions
not ie <= 8
================================================
FILE: .circleci/config.yml
================================================
version: 2.1
jobs:
build:
docker:
- image: circleci/node
steps:
- checkout
- run: yarn install
- run: yarn test:unit
- store_test_results:
path: tests/results
================================================
FILE: .editorconfig
================================================
[*.{js,jsx,ts,tsx,vue}]
indent_style = space
indent_size = 2
trim_trailing_whitespace = true
insert_final_newline = true
================================================
FILE: .eslintignore
================================================
/dist
================================================
FILE: .eslintrc.js
================================================
module.exports = {
root: true,
env: {
node: true
},
'extends': [
'plugin:vue/essential',
'@vue/standard'
],
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'
},
parserOptions: {
parser: 'babel-eslint'
}
}
================================================
FILE: .gitignore
================================================
.DS_Store
node_modules
dist
tests/results
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*
docs/.vuepress/dist
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2019 Hector Romero
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
:fire::fire::fire: Vue 3 support is comming :fire::fire::fire:
Vue 3 support is already in beta in the `next` branch, the next version also supports Vue 2, you can take a look in the [new documentation site](https://vue-smart-table.netlify.app/).
# VueJs Smart Table
Vue Smart Table was created out of the need for a simple highly customizable data table plugin
that could take advantage of Vue's slots. It has no dependencies but Vue and because it
renders as a standard HTML table it is compatible with CSS Frameworks such as Bootstrap and Foundation.
Out of the box you will get filtering, column sorting, client side pagination and row selection.
## Full Documentation
Please read the [documentation](https://tochoromero.github.io/vuejs-smart-table/) to learn how to use it.
## Installation
To install simply run
```
npm add vuejs-smart-table
```
or
```
yarn add vuejs-smart-table
```
Then in your `main.js`
```js
import SmartTable from 'vuejs-smart-table'
Vue.use(SmartTable)
```
This will globally register four Components: `v-table`, `v-th`, `v-tr` and `smart-pagination`
================================================
FILE: babel.config.js
================================================
module.exports = {
presets: [
'@vue/app'
]
}
================================================
FILE: deploy.sh
================================================
#!/usr/bin/env sh
set -e
npm run docs:build
cd docs/.vuepress/dist
git init
git add -A
git commit -m 'deploy'
git push -f git@github.com:tochoromero/vuejs-smart-table.git master:gh-pages
cd -
================================================
FILE: docs/.vuepress/components/BasicFiltering.vue
================================================
================================================
FILE: docs/.vuepress/components/CustomFiltering.vue
================================================
Min Age:
Max Age:
Name
Age
Email
Address
{{ row.name }}
{{ row.age }}
{{ row.email }}
{{ row.address.street }},
{{ row.address.city }}
{{ row.address.state}}
================================================
FILE: docs/.vuepress/components/InputSpinner.vue
================================================
================================================
FILE: docs/.vuepress/components/Pagination.vue
================================================
Name
Age
State
Registered
{{ row.name }}
{{ row.age }}
{{ row.address.state }}
{{ row.registered }}
================================================
FILE: docs/.vuepress/components/Selection.vue
================================================
Name
Age
State
Registered
{{ row.name }}
{{ row.age }}
{{ row.address.state }}
{{ row.registered }}
Selected:
No Rows Selected
================================================
FILE: docs/.vuepress/components/SelectionApi.vue
================================================
Select All
Deselect All
Name
Age
State
Registered
{{ row.name }}
{{ row.age }}
{{ row.address.state }}
{{ row.registered }}
Selected:
No Rows Selected
================================================
FILE: docs/.vuepress/components/Sorting.vue
================================================
Name
Age
State
Registered
{{ row.name }}
{{ row.age }}
{{ row.address.state }}
{{ row.registered }}
================================================
FILE: docs/.vuepress/components/SortingFA.vue
================================================
Name
Age
State
{{ row.name }}
{{ row.age }}
{{ row.address.state }}
================================================
FILE: docs/.vuepress/components/TheBasics.vue
================================================
Name
Age
Email
Address
{{ row.name }}
{{ row.age }}
{{ row.email }}
{{ row.address.street }}, {{ row.address.city }} {{ row.address.state}}
================================================
FILE: docs/.vuepress/components/data.json
================================================
[
{
"_id": "57ef9cd8e22df324d77c4f07",
"index": 0,
"guid": "9bc8e89d-658c-47cf-acc3-b0e225ddb549",
"isActive": false,
"balance": "$1,029.59",
"picture": "http://placehold.it/32x32",
"age": 25,
"eyeColor": "green",
"name": "Deana Lindsay",
"gender": "female",
"company": "TERRAGO",
"email": "deanalindsay@terrago.com",
"phone": "+1 (858) 506-2166",
"address": {
"street": "268 Garnet Street",
"city": "Chicopee",
"state": "Pennsylvania"
},
"registered": "2015-10-30",
"tags": [
"reprehenderit",
"duis",
"mollit",
"eiusmod",
"incididunt",
"nisi",
"sunt"
]
},
{
"_id": "57ef9cd8392af802937a0974",
"index": 1,
"guid": "1436aae5-4540-474a-8bad-4ca6b9c903ac",
"isActive": true,
"balance": "$1,302.22",
"picture": "http://placehold.it/32x32",
"age": 39,
"eyeColor": "blue",
"name": "Wyatt Kline",
"gender": "male",
"company": "MEDMEX",
"email": "wyattkline@medmex.com",
"phone": "+1 (827) 579-2502",
"address": {
"street": "234 Irwin Street",
"city": "Irwin",
"state": "Maine"
},
"registered": "2014-06-17",
"tags": [
"aute",
"laboris",
"sit",
"voluptate",
"magna",
"voluptate",
"occaecat"
]
},
{
"_id": "57ef9cd865c7f5203dc5e126",
"index": 2,
"guid": "2bc5aad6-2172-4041-a949-b31729290f25",
"isActive": true,
"balance": "$3,066.01",
"picture": "http://placehold.it/32x32",
"age": 29,
"eyeColor": "green",
"name": "Harmon Huber",
"gender": "male",
"company": "SNIPS",
"email": "harmonhuber@snips.com",
"phone": "+1 (931) 482-3018",
"address": {
"street": "913 Gerritsen Avenue",
"city": "Nash",
"state": "American Samoa"
},
"registered": "2016-01-25",
"tags": [
"do",
"voluptate",
"id",
"do",
"occaecat",
"minim",
"tempor"
]
},
{
"_id": "57ef9cd8594cc4bc18a121f7",
"index": 3,
"guid": "5d48aae2-9e3c-434e-a835-3abdab56e240",
"isActive": false,
"balance": "$3,574.33",
"picture": "http://placehold.it/32x32",
"age": 29,
"eyeColor": "green",
"name": "Penny Maddox",
"gender": "female",
"company": "BALUBA",
"email": "pennymaddox@baluba.com",
"phone": "+1 (873) 552-2338",
"address": {
"street": "218 Agate Court",
"city": "Sandston",
"state": "Oregon"
},
"registered": "2016-01-08",
"tags": [
"anim",
"aliqua",
"consequat",
"tempor",
"excepteur",
"est",
"enim"
]
},
{
"_id": "57ef9cd846b7cd74053c10c9",
"index": 4,
"guid": "3c4a0399-68c9-4741-8c77-0e7e0dd9ed00",
"isActive": true,
"balance": "$1,363.39",
"picture": "http://placehold.it/32x32",
"age": 39,
"eyeColor": "brown",
"name": "Morgan Gomez",
"gender": "male",
"company": "AFFLUEX",
"email": "morgangomez@affluex.com",
"phone": "+1 (976) 466-3779",
"address": {
"street": "632 Highland Avenue",
"city": "Tuttle",
"state": "Connecticut"
},
"registered": "2014-04-10",
"tags": [
"duis",
"deserunt",
"id",
"nostrud",
"mollit",
"consequat",
"ea"
]
},
{
"_id": "57ef9cd8d429bf34a0c2dc36",
"index": 5,
"guid": "d321b26f-f8ce-461e-9673-5b9497aacea7",
"isActive": false,
"balance": "$1,469.54",
"picture": "http://placehold.it/32x32",
"age": 35,
"eyeColor": "green",
"name": "Beck Mckay",
"gender": "male",
"company": "GEOLOGIX",
"email": "beckmckay@geologix.com",
"phone": "+1 (879) 477-3341",
"address": {
"street": "936 Woodpoint Road",
"city": "Wakulla",
"state": "Mississippi"
},
"registered": "2016-05-06",
"tags": [
"non",
"cillum",
"culpa",
"irure",
"nulla",
"non",
"occaecat"
]
},
{
"_id": "57ef9cd86866468dc1c20447",
"index": 6,
"guid": "c097a185-98ee-4bdd-a6ec-a3e5e40801be",
"isActive": true,
"balance": "$3,125.22",
"picture": "http://placehold.it/32x32",
"age": 39,
"eyeColor": "blue",
"name": "Massey Carlson",
"gender": "male",
"company": "EARTHWAX",
"email": "masseycarlson@earthwax.com",
"phone": "+1 (871) 471-2647",
"address": {
"street": "278 Chapel Street",
"city": "Taycheedah",
"state": "Hawaii"
},
"registered": "2014-10-22",
"tags": [
"ullamco",
"fugiat",
"consequat",
"nostrud",
"aliqua",
"consequat",
"fugiat"
]
},
{
"_id": "57ef9cd83f55c1d078fc6cfd",
"index": 7,
"guid": "29e53cbb-6353-44a3-a2c8-e7b3176d00af",
"isActive": false,
"balance": "$3,663.46",
"picture": "http://placehold.it/32x32",
"age": 33,
"eyeColor": "blue",
"name": "Hill Hale",
"gender": "male",
"company": "CALCU",
"email": "hillhale@calcu.com",
"phone": "+1 (877) 598-2610",
"address": {
"street": "618 Newport Street",
"city": "Deercroft",
"state": "Colorado"
},
"registered": "2016-04-18",
"tags": [
"nostrud",
"duis",
"Lorem",
"ex",
"elit",
"labore",
"in"
]
},
{
"_id": "57ef9cd8f8863a277e1c2055",
"index": 8,
"guid": "955a6cd5-b73c-4a6c-9280-76cbc4e232b2",
"isActive": false,
"balance": "$2,451.20",
"picture": "http://placehold.it/32x32",
"age": 26,
"eyeColor": "blue",
"name": "Stokes Hurst",
"gender": "male",
"company": "DATAGEN",
"email": "stokeshurst@datagen.com",
"phone": "+1 (897) 537-2718",
"address": {
"street": "146 Conover Street",
"city": "Dahlen",
"state": "North Dakota"
},
"registered": "2016-01-30",
"tags": [
"est",
"eu",
"anim",
"eiusmod",
"exercitation",
"commodo",
"nulla"
]
},
{
"_id": "57ef9cd86b62971bb96f7603",
"index": 9,
"guid": "239a3301-1dae-4ef8-ae30-7e92a84c78a2",
"isActive": false,
"balance": "$1,753.67",
"picture": "http://placehold.it/32x32",
"age": 20,
"eyeColor": "green",
"name": "Cain Knapp",
"gender": "male",
"company": "NAMEBOX",
"email": "cainknapp@namebox.com",
"phone": "+1 (873) 435-3377",
"address": {
"street": "460 Bridgewater Street",
"city": "Manchester",
"state": "Michigan"
},
"registered": "2016-01-04",
"tags": [
"fugiat",
"non",
"adipisicing",
"id",
"incididunt",
"do",
"enim"
]
},
{
"_id": "57ef9cd8431bccda13eea218",
"index": 10,
"guid": "b5671cc8-2776-4180-9cab-2f26fd38c720",
"isActive": false,
"balance": "$1,619.16",
"picture": "http://placehold.it/32x32",
"age": 22,
"eyeColor": "brown",
"name": "Ramirez Valdez",
"gender": "male",
"company": "SOLAREN",
"email": "ramirezvaldez@solaren.com",
"phone": "+1 (820) 465-2360",
"address": {
"street": "932 Battery Avenue",
"city": "Iola",
"state": "Virginia"
},
"registered": "2014-01-27",
"tags": [
"minim",
"aliqua",
"culpa",
"dolore",
"excepteur",
"minim",
"sit"
]
},
{
"_id": "57ef9cd8e7379045d04a0540",
"index": 11,
"guid": "19b39b01-74e1-495c-b7a6-a88d66420fba",
"isActive": false,
"balance": "$1,638.78",
"picture": "http://placehold.it/32x32",
"age": 39,
"eyeColor": "brown",
"name": "Alisha Michael",
"gender": "female",
"company": "STUCCO",
"email": "alishamichael@stucco.com",
"phone": "+1 (800) 497-2778",
"address": {
"street": "184 Coffey Street",
"city": "Trucksville",
"state": "New York"
},
"registered": "2015-03-31",
"tags": [
"irure",
"dolore",
"minim",
"excepteur",
"aliquip",
"officia",
"fugiat"
]
},
{
"_id": "57ef9cd8059fd44b460b7c38",
"index": 12,
"guid": "2a3054d0-a2ea-4ee2-a2f5-f5d1d0573b11",
"isActive": true,
"balance": "$1,156.43",
"picture": "http://placehold.it/32x32",
"age": 21,
"eyeColor": "brown",
"name": "Shepard Russo",
"gender": "male",
"company": "MAXIMIND",
"email": "shepardrusso@maximind.com",
"phone": "+1 (810) 417-3060",
"address": {
"street": "450 Stryker Court",
"city": "Eagleville",
"state": "South Dakota"
},
"registered": "2014-12-17",
"tags": [
"qui",
"irure",
"pariatur",
"eiusmod",
"tempor",
"ullamco",
"aliquip"
]
},
{
"_id": "57ef9cd8afc877c47ac02b6a",
"index": 13,
"guid": "7ad0c0a8-59ca-457f-9b41-fd1ae83b4f60",
"isActive": false,
"balance": "$2,376.34",
"picture": "http://placehold.it/32x32",
"age": 39,
"eyeColor": "blue",
"name": "Joyner Cohen",
"gender": "male",
"company": "LYRIA",
"email": "joynercohen@lyria.com",
"phone": "+1 (962) 595-2903",
"address": {
"street": "304 Calder Place",
"city": "Choctaw",
"state": "Louisiana"
},
"registered": "2016-04-30",
"tags": [
"in",
"sunt",
"cupidatat",
"nostrud",
"laboris",
"culpa",
"consequat"
]
},
{
"_id": "57ef9cd8aa516857d091b670",
"index": 14,
"guid": "47be1205-5fde-4a1b-ba80-5ab56e659c32",
"isActive": false,
"balance": "$1,837.95",
"picture": "http://placehold.it/32x32",
"age": 32,
"eyeColor": "blue",
"name": "Doreen Vincent",
"gender": "female",
"company": "VANTAGE",
"email": "doreenvincent@vantage.com",
"phone": "+1 (972) 484-2153",
"address": {
"street": "520 Greenpoint Avenue",
"city": "Chapin",
"state": "Rhode Island"
},
"registered": "2015-12-11",
"tags": [
"cillum",
"aute",
"Lorem",
"occaecat",
"eu",
"voluptate",
"ea"
]
},
{
"_id": "57ef9cd8778023bd5ebc71df",
"index": 15,
"guid": "3efedc36-6bcd-4f78-b64e-11f6c3374ff0",
"isActive": true,
"balance": "$3,412.92",
"picture": "http://placehold.it/32x32",
"age": 34,
"eyeColor": "green",
"name": "Felicia Osborne",
"gender": "female",
"company": "XELEGYL",
"email": "feliciaosborne@xelegyl.com",
"phone": "+1 (884) 448-3923",
"address": {
"street": "895 Luquer Street",
"city": "Bluffview",
"state": "Alabama"
},
"registered": "2015-04-11",
"tags": [
"elit",
"veniam",
"consectetur",
"sunt",
"ipsum",
"incididunt",
"adipisicing"
]
},
{
"_id": "57ef9cd862a19b82a2b57c2a",
"index": 16,
"guid": "2a08992f-b1ca-4a75-9b4c-df4ba052f3b2",
"isActive": false,
"balance": "$2,053.01",
"picture": "http://placehold.it/32x32",
"age": 35,
"eyeColor": "green",
"name": "Dillon Schmidt",
"gender": "male",
"company": "KEEG",
"email": "dillonschmidt@keeg.com",
"phone": "+1 (869) 554-3796",
"address": {
"street": "344 Sullivan Place",
"city": "Bawcomville",
"state": "Palau"
},
"registered": "2016-07-04",
"tags": [
"mollit",
"duis",
"pariatur",
"velit",
"Lorem",
"Lorem",
"anim"
]
},
{
"_id": "57ef9cd8b2b36698294cfb64",
"index": 17,
"guid": "9644a804-0216-49c7-8625-d15a3bfb31c5",
"isActive": false,
"balance": "$2,507.00",
"picture": "http://placehold.it/32x32",
"age": 40,
"eyeColor": "blue",
"name": "Melody Miranda",
"gender": "female",
"company": "ENTHAZE",
"email": "melodymiranda@enthaze.com",
"phone": "+1 (849) 464-3618",
"address": {
"street": "418 Whitney Avenue",
"city": "Sanders",
"state": "Indiana"
},
"registered": "2014-04-22",
"tags": [
"consequat",
"commodo",
"magna",
"aute",
"occaecat",
"ea",
"minim"
]
},
{
"_id": "57ef9cd8410de3de4768210a",
"index": 18,
"guid": "3859f0d4-cc87-4d6b-b101-e867b8e5c0cc",
"isActive": false,
"balance": "$2,737.68",
"picture": "http://placehold.it/32x32",
"age": 36,
"eyeColor": "green",
"name": "Wilkerson Melendez",
"gender": "male",
"company": "TECHMANIA",
"email": "wilkersonmelendez@techmania.com",
"phone": "+1 (952) 481-3063",
"address": {
"street": "818 Ocean Parkway",
"city": "Kerby",
"state": "Iowa"
},
"registered": "2014-11-14",
"tags": [
"sit",
"cupidatat",
"aliqua",
"in",
"officia",
"pariatur",
"ex"
]
},
{
"_id": "57ef9cd8bda3e38af810f58a",
"index": 19,
"guid": "90af70fd-1241-4d07-b3f0-727f7987a60c",
"isActive": true,
"balance": "$1,028.57",
"picture": "http://placehold.it/32x32",
"age": 37,
"eyeColor": "blue",
"name": "Rivera Velazquez",
"gender": "male",
"company": "GLEAMINK",
"email": "riveravelazquez@gleamink.com",
"phone": "+1 (973) 597-3283",
"address": {
"street": "330 Monaco Place",
"city": "Grahamtown",
"state": "Northern Mariana Islands"
},
"registered": "2016-01-10",
"tags": [
"excepteur",
"est",
"occaecat",
"nulla",
"nostrud",
"eu",
"ipsum"
]
},
{
"_id": "57ef9cd8351d9509288c8469",
"index": 20,
"guid": "c9f0b7e4-f7ec-44b5-ba6b-d9991bb3404b",
"isActive": true,
"balance": "$2,456.41",
"picture": "http://placehold.it/32x32",
"age": 35,
"eyeColor": "blue",
"name": "Reese Velez",
"gender": "male",
"company": "POLARIA",
"email": "reesevelez@polaria.com",
"phone": "+1 (950) 549-3805",
"address": {
"street": "571 Wilson Avenue",
"city": "Hannasville",
"state": "Tennessee"
},
"registered": "2016-07-24",
"tags": [
"veniam",
"occaecat",
"irure",
"consequat",
"labore",
"laboris",
"Lorem"
]
},
{
"_id": "57ef9cd8014e14851bee0084",
"index": 21,
"guid": "6691378e-7cb9-4bff-ac93-a79fadfa49d1",
"isActive": false,
"balance": "$3,892.36",
"picture": "http://placehold.it/32x32",
"age": 33,
"eyeColor": "blue",
"name": "Kayla Morgan",
"gender": "female",
"company": "VIDTO",
"email": "kaylamorgan@vidto.com",
"phone": "+1 (976) 499-2436",
"address": {
"street": "188 Lancaster Avenue",
"city": "Bowden",
"state": "District Of Columbia"
},
"registered": "2015-12-16",
"tags": [
"minim",
"proident",
"sunt",
"nostrud",
"adipisicing",
"cupidatat",
"veniam"
]
},
{
"_id": "57ef9cd810b76a3d60fb0b9b",
"index": 22,
"guid": "26e927c7-63c5-4e82-bdc0-7832cb890156",
"isActive": false,
"balance": "$3,668.66",
"picture": "http://placehold.it/32x32",
"age": 20,
"eyeColor": "brown",
"name": "Benson Snyder",
"gender": "male",
"company": "ZOSIS",
"email": "bensonsnyder@zosis.com",
"phone": "+1 (923) 595-3264",
"address": {
"street": "294 Douglass Street",
"city": "Hiseville",
"state": "Marshall Islands"
},
"registered": "2016-07-02",
"tags": [
"sint",
"amet",
"cillum",
"exercitation",
"Lorem",
"amet",
"ad"
]
},
{
"_id": "57ef9cd8d6e3b40316003054",
"index": 23,
"guid": "248e3d33-6827-461b-a92e-408a4927d5dc",
"isActive": true,
"balance": "$2,253.39",
"picture": "http://placehold.it/32x32",
"age": 32,
"eyeColor": "green",
"name": "Strickland Andrews",
"gender": "male",
"company": "COMBOT",
"email": "stricklandandrews@combot.com",
"phone": "+1 (969) 560-2376",
"address": {
"street": "677 Albemarle Road",
"city": "Thornport",
"state": "Florida"
},
"registered": "2015-06-15",
"tags": [
"culpa",
"nulla",
"excepteur",
"incididunt",
"nulla",
"mollit",
"occaecat"
]
},
{
"_id": "57ef9cd8bbf66c3b7757b773",
"index": 24,
"guid": "303c36fd-14e0-49f7-b6de-01c6cf866313",
"isActive": false,
"balance": "$1,248.11",
"picture": "http://placehold.it/32x32",
"age": 21,
"eyeColor": "blue",
"name": "Castro Hanson",
"gender": "male",
"company": "FURNITECH",
"email": "castrohanson@furnitech.com",
"phone": "+1 (901) 512-2724",
"address": {
"street": "932 Herkimer Court",
"city": "Cavalero",
"state": "Texas"
},
"registered": "2014-12-07",
"tags": [
"est",
"aliqua",
"enim",
"ex",
"Lorem",
"nostrud",
"eiusmod"
]
},
{
"_id": "57ef9cd8aa22d92e5c82b2f6",
"index": 25,
"guid": "fd997458-836f-4d24-bbab-a0aa26e68c2d",
"isActive": false,
"balance": "$1,264.43",
"picture": "http://placehold.it/32x32",
"age": 21,
"eyeColor": "blue",
"name": "Iris Nielsen",
"gender": "female",
"company": "ROUGHIES",
"email": "irisnielsen@roughies.com",
"phone": "+1 (916) 468-3250",
"address": {
"street": "824 Doscher Street",
"city": "Goodville",
"state": "South Carolina"
},
"registered": "2015-08-01",
"tags": [
"sint",
"voluptate",
"adipisicing",
"id",
"eiusmod",
"veniam",
"excepteur"
]
},
{
"_id": "57ef9cd8e00712c4924d6413",
"index": 26,
"guid": "f6b3c048-e563-4fa6-a28f-d358c5b4f74c",
"isActive": true,
"balance": "$1,462.23",
"picture": "http://placehold.it/32x32",
"age": 23,
"eyeColor": "blue",
"name": "Dionne Boyer",
"gender": "female",
"company": "PETIGEMS",
"email": "dionneboyer@petigems.com",
"phone": "+1 (826) 510-3961",
"address": {
"street": "483 Prospect Avenue",
"city": "Forestburg",
"state": "Nevada"
},
"registered": "2016-09-09",
"tags": [
"ipsum",
"id",
"eiusmod",
"laboris",
"incididunt",
"deserunt",
"anim"
]
},
{
"_id": "57ef9cd8a25729d7ccb55e01",
"index": 27,
"guid": "376807be-1fdc-4d6a-961c-84b313b81f70",
"isActive": true,
"balance": "$1,384.08",
"picture": "http://placehold.it/32x32",
"age": 33,
"eyeColor": "green",
"name": "Cooke Alford",
"gender": "male",
"company": "PROXSOFT",
"email": "cookealford@proxsoft.com",
"phone": "+1 (850) 486-2468",
"address": {
"street": "870 High Street",
"city": "Reinerton",
"state": "Delaware"
},
"registered": "2016-03-25",
"tags": [
"id",
"amet",
"irure",
"eiusmod",
"excepteur",
"nostrud",
"qui"
]
},
{
"_id": "57ef9cd8998c6d6498836a72",
"index": 28,
"guid": "fe5ad1f3-c898-4635-bbd8-6c3185e9415f",
"isActive": false,
"balance": "$1,658.18",
"picture": "http://placehold.it/32x32",
"age": 24,
"eyeColor": "brown",
"name": "Goff Lamb",
"gender": "male",
"company": "GLOBOIL",
"email": "gofflamb@globoil.com",
"phone": "+1 (996) 400-2491",
"address": {
"street": "361 Interborough Parkway",
"city": "Dodge",
"state": "Kansas"
},
"registered": "2016-09-12",
"tags": [
"nisi",
"cupidatat",
"aliquip",
"non",
"et",
"sint",
"enim"
]
},
{
"_id": "57ef9cd82e0778dff1ee3579",
"index": 29,
"guid": "ea213edd-47dd-4fd5-be36-27e34fa7fba1",
"isActive": false,
"balance": "$2,355.96",
"picture": "http://placehold.it/32x32",
"age": 21,
"eyeColor": "brown",
"name": "Barry Ramsey",
"gender": "male",
"company": "ACCUPHARM",
"email": "barryramsey@accupharm.com",
"phone": "+1 (841) 406-3771",
"address": {
"street": "220 Henderson Walk",
"city": "Gerber",
"state": "California"
},
"registered": "2014-11-15",
"tags": [
"cillum",
"esse",
"aliqua",
"do",
"irure",
"eu",
"eu"
]
},
{
"_id": "57ef9cd8b7a3f7141cd6787a",
"index": 30,
"guid": "05148b5f-e9b2-4697-a25c-b9de7473f4bc",
"isActive": true,
"balance": "$1,262.77",
"picture": "http://placehold.it/32x32",
"age": 31,
"eyeColor": "brown",
"name": "Aguilar Koch",
"gender": "male",
"company": "EMERGENT",
"email": "aguilarkoch@emergent.com",
"phone": "+1 (829) 518-3177",
"address": {
"street": "929 Himrod Street",
"city": "Leeper",
"state": "New Jersey"
},
"registered": "2015-07-12",
"tags": [
"ipsum",
"eu",
"cillum",
"aute",
"labore",
"ea",
"eiusmod"
]
},
{
"_id": "57ef9cd83f6b95641c5e3c75",
"index": 31,
"guid": "27304437-1b44-4ad8-81e8-710b4b8345ff",
"isActive": false,
"balance": "$3,601.82",
"picture": "http://placehold.it/32x32",
"age": 24,
"eyeColor": "brown",
"name": "Oconnor Hopper",
"gender": "male",
"company": "FUELWORKS",
"email": "oconnorhopper@fuelworks.com",
"phone": "+1 (891) 493-3016",
"address": {
"street": "426 Montieth Street",
"city": "Hegins",
"state": "Wyoming"
},
"registered": "2015-07-24",
"tags": [
"minim",
"voluptate",
"elit",
"incididunt",
"ut",
"fugiat",
"occaecat"
]
},
{
"_id": "57ef9cd8369d6e4b835f3fcd",
"index": 32,
"guid": "721a77b7-b011-47f4-a810-e7f29e7006c9",
"isActive": true,
"balance": "$1,915.04",
"picture": "http://placehold.it/32x32",
"age": 20,
"eyeColor": "green",
"name": "Daugherty White",
"gender": "male",
"company": "BOLAX",
"email": "daughertywhite@bolax.com",
"phone": "+1 (826) 594-2129",
"address": {
"street": "449 Lester Court",
"city": "Joes",
"state": "Massachusetts"
},
"registered": "2014-10-13",
"tags": [
"Lorem",
"enim",
"nostrud",
"nisi",
"consequat",
"ullamco",
"laborum"
]
},
{
"_id": "57ef9cd86305c595658af48b",
"index": 33,
"guid": "1cfc8de2-d36c-4ef1-9e40-f088cf75eb82",
"isActive": true,
"balance": "$2,866.63",
"picture": "http://placehold.it/32x32",
"age": 40,
"eyeColor": "blue",
"name": "Kane Mclaughlin",
"gender": "male",
"company": "BUZZNESS",
"email": "kanemclaughlin@buzzness.com",
"phone": "+1 (832) 531-3366",
"address": {
"street": "661 Apollo Street",
"city": "Crayne",
"state": "Kentucky"
},
"registered": "2014-07-08",
"tags": [
"laboris",
"quis",
"enim",
"ea",
"cupidatat",
"nisi",
"ipsum"
]
},
{
"_id": "57ef9cd8306a49b3a4173669",
"index": 34,
"guid": "0bf330e0-c370-466d-9a5e-4506272fd132",
"isActive": false,
"balance": "$1,185.64",
"picture": "http://placehold.it/32x32",
"age": 40,
"eyeColor": "brown",
"name": "Berry Moore",
"gender": "male",
"company": "MOBILDATA",
"email": "berrymoore@mobildata.com",
"phone": "+1 (868) 455-2610",
"address": {
"street": "655 Eldert Street",
"city": "Camino",
"state": "Arizona"
},
"registered": "2015-10-08",
"tags": [
"labore",
"dolore",
"labore",
"proident",
"aute",
"amet",
"quis"
]
},
{
"_id": "57ef9cd80ae90356bd04b760",
"index": 35,
"guid": "2be39caa-9fcc-4616-a7b5-f72e3d3cbdaf",
"isActive": true,
"balance": "$1,185.60",
"picture": "http://placehold.it/32x32",
"age": 26,
"eyeColor": "blue",
"name": "Gwendolyn Hunt",
"gender": "female",
"company": "DIGIAL",
"email": "gwendolynhunt@digial.com",
"phone": "+1 (853) 562-3237",
"address": {
"street": "597 Hart Street",
"city": "Kenmar",
"state": "Maryland"
},
"registered": "2015-10-27",
"tags": [
"Lorem",
"officia",
"adipisicing",
"velit",
"tempor",
"eiusmod",
"labore"
]
},
{
"_id": "57ef9cd884359a9538967098",
"index": 36,
"guid": "63ab3d9c-8138-4f09-baf9-6d76c5ba573a",
"isActive": true,
"balance": "$2,469.48",
"picture": "http://placehold.it/32x32",
"age": 23,
"eyeColor": "green",
"name": "Willie Garrett",
"gender": "female",
"company": "BALOOBA",
"email": "williegarrett@balooba.com",
"phone": "+1 (843) 425-3145",
"address": {
"street": "456 Maple Avenue",
"city": "Hackneyville",
"state": "Illinois"
},
"registered": "2014-02-09",
"tags": [
"est",
"aliqua",
"in",
"excepteur",
"ut",
"eu",
"fugiat"
]
},
{
"_id": "57ef9cd8db282c5f4f1448d4",
"index": 37,
"guid": "bc8ce4f1-6cc4-4925-9046-3a5e91f858bc",
"isActive": true,
"balance": "$1,067.32",
"picture": "http://placehold.it/32x32",
"age": 29,
"eyeColor": "green",
"name": "Christina Good",
"gender": "female",
"company": "APPLIDECK",
"email": "christinagood@applideck.com",
"phone": "+1 (851) 462-3278",
"address": {
"street": "650 Arlington Place",
"city": "Wheaton",
"state": "West Virginia"
},
"registered": "2015-01-28",
"tags": [
"cupidatat",
"ad",
"consequat",
"proident",
"ex",
"officia",
"adipisicing"
]
},
{
"_id": "57ef9cd88452ab36aa70f054",
"index": 38,
"guid": "4db3de26-08ae-40a0-9dc6-cd9aad7bdc25",
"isActive": false,
"balance": "$3,016.01",
"picture": "http://placehold.it/32x32",
"age": 35,
"eyeColor": "brown",
"name": "Hooper Blair",
"gender": "male",
"company": "ANARCO",
"email": "hooperblair@anarco.com",
"phone": "+1 (877) 468-2384",
"address": {
"street": "535 Bancroft Place",
"city": "National",
"state": "Alaska"
},
"registered": "2015-02-24",
"tags": [
"non",
"laboris",
"aliqua",
"velit",
"officia",
"aliqua",
"in"
]
},
{
"_id": "57ef9cd8fd30953315b376ce",
"index": 39,
"guid": "2537139a-70e6-438b-980f-a43ee251db50",
"isActive": true,
"balance": "$1,259.80",
"picture": "http://placehold.it/32x32",
"age": 26,
"eyeColor": "brown",
"name": "Wilson Whitley",
"gender": "male",
"company": "BUNGA",
"email": "wilsonwhitley@bunga.com",
"phone": "+1 (881) 545-2408",
"address": {
"street": "536 Delevan Street",
"city": "Clara",
"state": "Oklahoma"
},
"registered": "2015-05-15",
"tags": [
"sunt",
"officia",
"officia",
"est",
"Lorem",
"elit",
"exercitation"
]
},
{
"_id": "57ef9cd88d9237233ce5a603",
"index": 40,
"guid": "407cc2cb-7eb0-4614-97d8-85a2b0ca2c55",
"isActive": false,
"balance": "$1,954.73",
"picture": "http://placehold.it/32x32",
"age": 28,
"eyeColor": "blue",
"name": "Hilda Osborn",
"gender": "female",
"company": "SLOGANAUT",
"email": "hildaosborn@sloganaut.com",
"phone": "+1 (975) 466-3813",
"address": {
"street": "412 Tudor Terrace",
"city": "Brecon",
"state": "Federated States Of Micronesia"
},
"registered": "2016-06-23",
"tags": [
"anim",
"culpa",
"fugiat",
"minim",
"occaecat",
"sit",
"excepteur"
]
},
{
"_id": "57ef9cd839131d7d2e092514",
"index": 41,
"guid": "0eb0fb97-2de9-4815-a533-7ac084b94863",
"isActive": false,
"balance": "$2,347.37",
"picture": "http://placehold.it/32x32",
"age": 29,
"eyeColor": "blue",
"name": "Denise Griffin",
"gender": "female",
"company": "ATOMICA",
"email": "denisegriffin@atomica.com",
"phone": "+1 (858) 538-2320",
"address": {
"street": "415 Catherine Street",
"city": "Onton",
"state": "Vermont"
},
"registered": "2014-06-17",
"tags": [
"qui",
"sunt",
"commodo",
"tempor",
"exercitation",
"nisi",
"exercitation"
]
},
{
"_id": "57ef9cd89974d5066113c5eb",
"index": 42,
"guid": "03ba8cb5-6ad5-47f9-a0f1-28939ade5983",
"isActive": true,
"balance": "$3,867.30",
"picture": "http://placehold.it/32x32",
"age": 26,
"eyeColor": "green",
"name": "Neal Castro",
"gender": "male",
"company": "OVATION",
"email": "nealcastro@ovation.com",
"phone": "+1 (967) 436-2454",
"address": {
"street": "119 Harrison Avenue",
"city": "Volta",
"state": "Idaho"
},
"registered": "2014-06-22",
"tags": [
"Lorem",
"cupidatat",
"et",
"quis",
"voluptate",
"incididunt",
"dolore"
]
},
{
"_id": "57ef9cd88d860c6070fafef1",
"index": 43,
"guid": "e14b2f74-0aaa-4218-940d-5f7fb2551151",
"isActive": true,
"balance": "$3,011.45",
"picture": "http://placehold.it/32x32",
"age": 22,
"eyeColor": "blue",
"name": "Rich Montoya",
"gender": "male",
"company": "ORBAXTER",
"email": "richmontoya@orbaxter.com",
"phone": "+1 (866) 530-3039",
"address": {
"street": "134 Blake Court",
"city": "Kaka",
"state": "Arkansas"
},
"registered": "2016-06-21",
"tags": [
"sunt",
"cillum",
"enim",
"occaecat",
"minim",
"reprehenderit",
"nulla"
]
},
{
"_id": "57ef9cd8e093c420b70f6787",
"index": 44,
"guid": "1cabe364-180d-4147-88c7-2154241c22f2",
"isActive": false,
"balance": "$2,413.74",
"picture": "http://placehold.it/32x32",
"age": 37,
"eyeColor": "brown",
"name": "Galloway Wilcox",
"gender": "male",
"company": "KENEGY",
"email": "gallowaywilcox@kenegy.com",
"phone": "+1 (806) 596-3339",
"address": {
"street": "131 Kay Court",
"city": "Bannock",
"state": "Ohio"
},
"registered": "2014-12-04",
"tags": [
"consequat",
"elit",
"in",
"mollit",
"nostrud",
"amet",
"irure"
]
},
{
"_id": "57ef9cd8a07f64e3585adaa4",
"index": 45,
"guid": "9a0ba82c-3a59-4b8c-a735-16f57c4e5b7b",
"isActive": true,
"balance": "$1,419.98",
"picture": "http://placehold.it/32x32",
"age": 25,
"eyeColor": "green",
"name": "Estela Johnson",
"gender": "female",
"company": "LUNCHPOD",
"email": "estelajohnson@lunchpod.com",
"phone": "+1 (857) 457-3968",
"address": {
"street": "909 Cheever Place",
"city": "Clarence",
"state": "Missouri"
},
"registered": "2015-06-19",
"tags": [
"sint",
"velit",
"ut",
"minim",
"ad",
"proident",
"labore"
]
},
{
"_id": "57ef9cd863d1b1a4acb74988",
"index": 46,
"guid": "8154d3fc-2b77-4107-ab34-42bb23f470e6",
"isActive": false,
"balance": "$2,049.10",
"picture": "http://placehold.it/32x32",
"age": 27,
"eyeColor": "green",
"name": "Lorrie Huffman",
"gender": "female",
"company": "SPHERIX",
"email": "lorriehuffman@spherix.com",
"phone": "+1 (855) 535-2317",
"address": {
"street": "221 Essex Street",
"city": "Tedrow",
"state": "Washington"
},
"registered": "2016-09-27",
"tags": [
"consequat",
"excepteur",
"ipsum",
"ipsum",
"esse",
"cillum",
"qui"
]
},
{
"_id": "57ef9cd8e0a6bad7cf9ec1dc",
"index": 47,
"guid": "d44f213d-7164-4aba-b5e1-5e8646853e41",
"isActive": true,
"balance": "$1,958.21",
"picture": "http://placehold.it/32x32",
"age": 37,
"eyeColor": "brown",
"name": "Celia Burnett",
"gender": "female",
"company": "ENORMO",
"email": "celiaburnett@enormo.com",
"phone": "+1 (834) 438-2214",
"address": {
"street": "315 Louisiana Avenue",
"city": "Wauhillau",
"state": "New Hampshire"
},
"registered": "2014-02-21",
"tags": [
"officia",
"cupidatat",
"ullamco",
"velit",
"ad",
"ea",
"nostrud"
]
},
{
"_id": "57ef9cd8e0617ebaf2a76998",
"index": 48,
"guid": "9d09a10a-6b16-44c5-bd72-20ee3188432c",
"isActive": false,
"balance": "$3,027.42",
"picture": "http://placehold.it/32x32",
"age": 31,
"eyeColor": "brown",
"name": "Delaney Hamilton",
"gender": "male",
"company": "ACCUSAGE",
"email": "delaneyhamilton@accusage.com",
"phone": "+1 (862) 425-3630",
"address": {
"street": "407 Oceanview Avenue",
"city": "Waikele",
"state": "New Mexico"
},
"registered": "2014-07-06",
"tags": [
"aliquip",
"fugiat",
"cillum",
"id",
"excepteur",
"ad",
"non"
]
},
{
"_id": "57ef9cd831ecdff3ea6aba9e",
"index": 49,
"guid": "f5212db5-dfe2-426e-a4e0-83331831bbe8",
"isActive": false,
"balance": "$2,970.07",
"picture": "http://placehold.it/32x32",
"age": 39,
"eyeColor": "green",
"name": "Elma Baldwin",
"gender": "female",
"company": "XANIDE",
"email": "elmabaldwin@xanide.com",
"phone": "+1 (991) 445-3729",
"address": {
"street": "817 Loring Avenue",
"city": "Jenkinsville",
"state": "Virgin Islands"
},
"registered": "2015-03-13",
"tags": [
"aute",
"nisi",
"laborum",
"incididunt",
"non",
"eiusmod",
"ad"
]
},
{
"_id": "57ef9cd86e789f3db59cc997",
"index": 50,
"guid": "c24777cb-e9c6-451a-b70b-9ffeefb35ee0",
"isActive": false,
"balance": "$1,072.96",
"picture": "http://placehold.it/32x32",
"age": 24,
"eyeColor": "green",
"name": "Roxie Butler",
"gender": "female",
"company": "ISOLOGICA",
"email": "roxiebutler@isologica.com",
"phone": "+1 (919) 442-2920",
"address": {
"street": "512 Dewey Place",
"city": "Lacomb",
"state": "Montana"
},
"registered": "2015-05-26",
"tags": [
"qui",
"labore",
"non",
"quis",
"id",
"quis",
"anim"
]
},
{
"_id": "57ef9cd882f83000536be05a",
"index": 51,
"guid": "2798139e-b8ec-409e-aa87-613149059143",
"isActive": false,
"balance": "$3,771.00",
"picture": "http://placehold.it/32x32",
"age": 38,
"eyeColor": "blue",
"name": "Margie Davenport",
"gender": "female",
"company": "MALATHION",
"email": "margiedavenport@malathion.com",
"phone": "+1 (976) 567-3933",
"address": {
"street": "241 Lloyd Court",
"city": "Stockwell",
"state": "Puerto Rico"
},
"registered": "2016-04-05",
"tags": [
"et",
"reprehenderit",
"dolor",
"consequat",
"sit",
"qui",
"mollit"
]
},
{
"_id": "57ef9cd8199466c0f80eaef0",
"index": 52,
"guid": "0d8ea36b-df98-4b07-952a-4cbac7c92c64",
"isActive": false,
"balance": "$2,047.61",
"picture": "http://placehold.it/32x32",
"age": 31,
"eyeColor": "brown",
"name": "Zelma Macias",
"gender": "female",
"company": "ECLIPSENT",
"email": "zelmamacias@eclipsent.com",
"phone": "+1 (893) 522-3991",
"address": {
"street": "812 Morgan Avenue",
"city": "Moquino",
"state": "Minnesota"
},
"registered": "2014-03-14",
"tags": [
"quis",
"aliquip",
"occaecat",
"ut",
"duis",
"est",
"Lorem"
]
},
{
"_id": "57ef9cd8e332fa4683ed0ef2",
"index": 53,
"guid": "992c8935-6934-4b46-be34-bb81f596d0cc",
"isActive": true,
"balance": "$3,363.81",
"picture": "http://placehold.it/32x32",
"age": 32,
"eyeColor": "blue",
"name": "Dominique Best",
"gender": "female",
"company": "SNOWPOKE",
"email": "dominiquebest@snowpoke.com",
"phone": "+1 (941) 596-2718",
"address": {
"street": "851 Turnbull Avenue",
"city": "Ruffin",
"state": "Wisconsin"
},
"registered": "2016-03-04",
"tags": [
"magna",
"velit",
"Lorem",
"culpa",
"mollit",
"adipisicing",
"eu"
]
},
{
"_id": "57ef9cd8b65cc853f277c21a",
"index": 54,
"guid": "8f690f7b-cdc8-4c84-b928-44fe3e7bc4b4",
"isActive": false,
"balance": "$3,463.40",
"picture": "http://placehold.it/32x32",
"age": 39,
"eyeColor": "blue",
"name": "Meyers Navarro",
"gender": "male",
"company": "VALREDA",
"email": "meyersnavarro@valreda.com",
"phone": "+1 (969) 596-2487",
"address": {
"street": "692 Lake Street",
"city": "Marienthal",
"state": "Guam"
},
"registered": "2015-06-22",
"tags": [
"mollit",
"laboris",
"deserunt",
"sit",
"excepteur",
"ut",
"ut"
]
},
{
"_id": "57ef9cd88d03578a7c15a598",
"index": 55,
"guid": "46cd7eac-1353-4bd2-99cc-2a9b5264a966",
"isActive": false,
"balance": "$1,911.65",
"picture": "http://placehold.it/32x32",
"age": 24,
"eyeColor": "green",
"name": "Holland Hess",
"gender": "male",
"company": "IDEALIS",
"email": "hollandhess@idealis.com",
"phone": "+1 (867) 599-2608",
"address": {
"street": "934 Stoddard Place",
"city": "Frizzleburg",
"state": "Nebraska"
},
"registered": "2015-02-19",
"tags": [
"dolor",
"sint",
"ipsum",
"ex",
"et",
"aute",
"elit"
]
},
{
"_id": "57ef9cd8a1f6180aec4821e5",
"index": 56,
"guid": "eb23120a-a47d-499d-a3a5-9a5cc0d40233",
"isActive": true,
"balance": "$3,547.64",
"picture": "http://placehold.it/32x32",
"age": 25,
"eyeColor": "brown",
"name": "Mckay Fields",
"gender": "male",
"company": "SLAX",
"email": "mckayfields@slax.com",
"phone": "+1 (802) 483-2694",
"address": {
"street": "595 Jerome Street",
"city": "Oneida",
"state": "Utah"
},
"registered": "2014-11-18",
"tags": [
"reprehenderit",
"pariatur",
"aliquip",
"ullamco",
"veniam",
"labore",
"velit"
]
},
{
"_id": "57ef9cd8c473ecd605a3b6ca",
"index": 57,
"guid": "84c4fe9c-6917-49ce-a7a4-71ba9a7cba69",
"isActive": true,
"balance": "$1,731.31",
"picture": "http://placehold.it/32x32",
"age": 39,
"eyeColor": "blue",
"name": "Melanie Austin",
"gender": "female",
"company": "ANDRYX",
"email": "melanieaustin@andryx.com",
"phone": "+1 (994) 412-2994",
"address": {
"street": "533 Saratoga Avenue",
"city": "Bangor",
"state": "Georgia"
},
"registered": "2014-03-09",
"tags": [
"mollit",
"minim",
"in",
"in",
"Lorem",
"magna",
"non"
]
},
{
"_id": "57ef9cd891a61ccfd176aeef",
"index": 58,
"guid": "80295d78-5ce6-4dfe-b945-50e2ce602b44",
"isActive": true,
"balance": "$2,992.55",
"picture": "http://placehold.it/32x32",
"age": 25,
"eyeColor": "blue",
"name": "Peck Schneider",
"gender": "male",
"company": "COFINE",
"email": "peckschneider@cofine.com",
"phone": "+1 (913) 428-3201",
"address": {
"street": "441 Harbor Lane",
"city": "Tolu",
"state": "Pennsylvania"
},
"registered": "2016-05-29",
"tags": [
"Lorem",
"voluptate",
"ipsum",
"dolore",
"aliquip",
"ad",
"consequat"
]
},
{
"_id": "57ef9cd8e58b17c583b460a7",
"index": 59,
"guid": "0b18fc0c-f18f-46e3-845a-cd7b15c55865",
"isActive": false,
"balance": "$1,502.40",
"picture": "http://placehold.it/32x32",
"age": 23,
"eyeColor": "green",
"name": "Mcclain Rhodes",
"gender": "male",
"company": "RODEOCEAN",
"email": "mcclainrhodes@rodeocean.com",
"phone": "+1 (842) 446-2464",
"address": {
"street": "374 Amersfort Place",
"city": "Romeville",
"state": "Maine"
},
"registered": "2014-03-19",
"tags": [
"dolor",
"eiusmod",
"ad",
"voluptate",
"ea",
"deserunt",
"et"
]
},
{
"_id": "57ef9cd8724c03c5ad8e4a8e",
"index": 60,
"guid": "326dce0c-4b47-499b-9489-36acd6dadff8",
"isActive": true,
"balance": "$1,747.38",
"picture": "http://placehold.it/32x32",
"age": 25,
"eyeColor": "blue",
"name": "Cervantes Bright",
"gender": "male",
"company": "VALPREAL",
"email": "cervantesbright@valpreal.com",
"phone": "+1 (873) 587-2025",
"address": {
"street": "132 Bliss Terrace",
"city": "Winesburg",
"state": "American Samoa"
},
"registered": "2016-03-18",
"tags": [
"magna",
"dolore",
"veniam",
"veniam",
"sint",
"quis",
"id"
]
},
{
"_id": "57ef9cd8b398ed2934e4a722",
"index": 61,
"guid": "4b744dd7-3c86-4bce-a3c8-9eb4359ceed5",
"isActive": false,
"balance": "$3,697.92",
"picture": "http://placehold.it/32x32",
"age": 34,
"eyeColor": "blue",
"name": "Hardin Pittman",
"gender": "male",
"company": "SKINSERVE",
"email": "hardinpittman@skinserve.com",
"phone": "+1 (887) 454-3837",
"address": {
"street": "617 Robert Street",
"city": "Stevens",
"state": "Oregon"
},
"registered": "2015-04-25",
"tags": [
"sit",
"anim",
"proident",
"minim",
"adipisicing",
"duis",
"cillum"
]
},
{
"_id": "57ef9cd89a9aa77a634b1a47",
"index": 62,
"guid": "971cfb58-9d8e-4a06-ab1c-c6bc120c1865",
"isActive": false,
"balance": "$1,121.41",
"picture": "http://placehold.it/32x32",
"age": 35,
"eyeColor": "blue",
"name": "Anna Ortega",
"gender": "female",
"company": "PHUEL",
"email": "annaortega@phuel.com",
"phone": "+1 (887) 422-3308",
"address": {
"street": "809 Vandervoort Place",
"city": "Gibsonia",
"state": "Connecticut"
},
"registered": "2016-06-11",
"tags": [
"veniam",
"commodo",
"incididunt",
"commodo",
"ut",
"irure",
"aliqua"
]
},
{
"_id": "57ef9cd8d4ea52c7b0fce734",
"index": 63,
"guid": "3e62c184-2c7d-4620-be08-4a10ac9f1bce",
"isActive": true,
"balance": "$3,080.98",
"picture": "http://placehold.it/32x32",
"age": 37,
"eyeColor": "brown",
"name": "Juliana Rios",
"gender": "female",
"company": "FIREWAX",
"email": "julianarios@firewax.com",
"phone": "+1 (978) 409-2654",
"address": {
"street": "893 Heyward Street",
"city": "Fedora",
"state": "Mississippi"
},
"registered": "2015-07-21",
"tags": [
"sit",
"sint",
"eu",
"quis",
"do",
"mollit",
"magna"
]
},
{
"_id": "57ef9cd8faa17dc8818830e9",
"index": 64,
"guid": "d3de53e8-6012-43ea-8c6b-1546739f9455",
"isActive": true,
"balance": "$3,162.09",
"picture": "http://placehold.it/32x32",
"age": 24,
"eyeColor": "green",
"name": "Allison Collier",
"gender": "male",
"company": "ISOLOGICS",
"email": "allisoncollier@isologics.com",
"phone": "+1 (961) 458-2654",
"address": {
"street": "987 Story Street",
"city": "Fairview",
"state": "Hawaii"
},
"registered": "2014-04-11",
"tags": [
"nulla",
"labore",
"anim",
"tempor",
"enim",
"aliqua",
"culpa"
]
},
{
"_id": "57ef9cd8414f04a3dafce7ef",
"index": 65,
"guid": "d45fc8d9-2f09-42cf-918c-5d9c9b9049fb",
"isActive": false,
"balance": "$2,228.33",
"picture": "http://placehold.it/32x32",
"age": 33,
"eyeColor": "brown",
"name": "Laurel Raymond",
"gender": "female",
"company": "FREAKIN",
"email": "laurelraymond@freakin.com",
"phone": "+1 (845) 411-2269",
"address": {
"street": "270 Alice Court",
"city": "Bynum",
"state": "Colorado"
},
"registered": "2014-09-18",
"tags": [
"sit",
"dolore",
"eiusmod",
"dolor",
"aliquip",
"est",
"reprehenderit"
]
},
{
"_id": "57ef9cd8e744f8d49ef6d406",
"index": 66,
"guid": "8fd91938-f5a5-409d-8a97-bf4e683d76a1",
"isActive": true,
"balance": "$3,892.91",
"picture": "http://placehold.it/32x32",
"age": 38,
"eyeColor": "brown",
"name": "Althea Horn",
"gender": "female",
"company": "FILODYNE",
"email": "altheahorn@filodyne.com",
"phone": "+1 (950) 526-2536",
"address": {
"street": "666 Taylor Street",
"city": "Driftwood",
"state": "North Dakota"
},
"registered": "2016-01-13",
"tags": [
"cillum",
"fugiat",
"incididunt",
"sunt",
"proident",
"et",
"amet"
]
},
{
"_id": "57ef9cd80d3bd026a5b14c3d",
"index": 67,
"guid": "4a617fa7-dc5a-440a-ab0b-13f6e6ad34fe",
"isActive": false,
"balance": "$1,371.59",
"picture": "http://placehold.it/32x32",
"age": 22,
"eyeColor": "blue",
"name": "Potter Cannon",
"gender": "male",
"company": "MONDICIL",
"email": "pottercannon@mondicil.com",
"phone": "+1 (913) 431-3765",
"address": {
"street": "762 Drew Street",
"city": "Riceville",
"state": "Michigan"
},
"registered": "2015-08-31",
"tags": [
"velit",
"velit",
"ex",
"aliqua",
"consequat",
"esse",
"irure"
]
},
{
"_id": "57ef9cd8218b984cbcc2fcee",
"index": 68,
"guid": "ebe26092-53b1-4fd9-b48f-37f68a7008b9",
"isActive": true,
"balance": "$2,799.55",
"picture": "http://placehold.it/32x32",
"age": 23,
"eyeColor": "brown",
"name": "Alyson Calhoun",
"gender": "female",
"company": "ZEPITOPE",
"email": "alysoncalhoun@zepitope.com",
"phone": "+1 (820) 510-3098",
"address": {
"street": "804 Rodney Street",
"city": "Hatteras",
"state": "Virginia"
},
"registered": "2014-09-25",
"tags": [
"occaecat",
"officia",
"enim",
"eu",
"ullamco",
"eu",
"pariatur"
]
},
{
"_id": "57ef9cd88e11ec366ca17611",
"index": 69,
"guid": "2bb46e78-c42a-449c-93b2-204091ec8296",
"isActive": false,
"balance": "$3,754.62",
"picture": "http://placehold.it/32x32",
"age": 27,
"eyeColor": "brown",
"name": "Zimmerman Hudson",
"gender": "male",
"company": "OVERPLEX",
"email": "zimmermanhudson@overplex.com",
"phone": "+1 (810) 589-3217",
"address": {
"street": "710 Lombardy Street",
"city": "Tampico",
"state": "New York"
},
"registered": "2015-12-05",
"tags": [
"aute",
"Lorem",
"magna",
"ut",
"esse",
"tempor",
"voluptate"
]
},
{
"_id": "57ef9cd8c663c704beb3ba0f",
"index": 70,
"guid": "3fe808f0-0757-4862-93e1-033724b2d61e",
"isActive": false,
"balance": "$3,403.56",
"picture": "http://placehold.it/32x32",
"age": 38,
"eyeColor": "green",
"name": "Sharon Vargas",
"gender": "female",
"company": "SYNKGEN",
"email": "sharonvargas@synkgen.com",
"phone": "+1 (837) 452-3719",
"address": {
"street": "451 Eckford Street",
"city": "Wyano",
"state": "South Dakota"
},
"registered": "2015-11-19",
"tags": [
"consectetur",
"sint",
"ad",
"sunt",
"ea",
"velit",
"officia"
]
},
{
"_id": "57ef9cd8c23f68e4099957d1",
"index": 71,
"guid": "79f80e61-d92e-4b97-bea7-0016fb3fbcdc",
"isActive": false,
"balance": "$1,738.35",
"picture": "http://placehold.it/32x32",
"age": 22,
"eyeColor": "blue",
"name": "Herman House",
"gender": "male",
"company": "FRENEX",
"email": "hermanhouse@frenex.com",
"phone": "+1 (928) 579-3978",
"address": {
"street": "770 Wyckoff Avenue",
"city": "Trail",
"state": "Louisiana"
},
"registered": "2015-03-20",
"tags": [
"elit",
"voluptate",
"sint",
"laboris",
"et",
"nisi",
"ad"
]
},
{
"_id": "57ef9cd8f684a162c8263ed1",
"index": 72,
"guid": "3a82a0ae-ffaa-4833-a4c1-1947eaf2a22a",
"isActive": false,
"balance": "$3,451.10",
"picture": "http://placehold.it/32x32",
"age": 30,
"eyeColor": "green",
"name": "Lenore Hahn",
"gender": "female",
"company": "EXOSIS",
"email": "lenorehahn@exosis.com",
"phone": "+1 (917) 524-3275",
"address": {
"street": "838 Gold Street",
"city": "Watchtower",
"state": "Rhode Island"
},
"registered": "2015-05-28",
"tags": [
"id",
"proident",
"velit",
"consequat",
"non",
"duis",
"consectetur"
]
},
{
"_id": "57ef9cd8a220db71c82724b6",
"index": 73,
"guid": "3715858a-2b15-40b2-bd25-4c5f27f8a242",
"isActive": false,
"balance": "$2,007.02",
"picture": "http://placehold.it/32x32",
"age": 40,
"eyeColor": "brown",
"name": "Mcfadden Stark",
"gender": "male",
"company": "GEEKOLA",
"email": "mcfaddenstark@geekola.com",
"phone": "+1 (996) 480-2189",
"address": {
"street": "422 Livonia Avenue",
"city": "Allendale",
"state": "Alabama"
},
"registered": "2016-06-04",
"tags": [
"qui",
"consequat",
"mollit",
"magna",
"Lorem",
"officia",
"reprehenderit"
]
},
{
"_id": "57ef9cd8ce39d98040920aca",
"index": 74,
"guid": "015bb1b1-90c7-47a7-8439-1382355e2198",
"isActive": false,
"balance": "$2,762.45",
"picture": "http://placehold.it/32x32",
"age": 39,
"eyeColor": "brown",
"name": "Haney Schwartz",
"gender": "male",
"company": "GEOSTELE",
"email": "haneyschwartz@geostele.com",
"phone": "+1 (845) 531-2525",
"address": {
"street": "308 Poplar Avenue",
"city": "Wolcott",
"state": "Palau"
},
"registered": "2016-05-11",
"tags": [
"proident",
"enim",
"sunt",
"laborum",
"exercitation",
"dolore",
"cillum"
]
},
{
"_id": "57ef9cd890c774293d1b0fb4",
"index": 75,
"guid": "d073457d-da93-48aa-8c60-02d9d72ef8fb",
"isActive": false,
"balance": "$1,206.03",
"picture": "http://placehold.it/32x32",
"age": 34,
"eyeColor": "brown",
"name": "Bobbie Livingston",
"gender": "female",
"company": "CORPULSE",
"email": "bobbielivingston@corpulse.com",
"phone": "+1 (836) 495-2861",
"address": {
"street": "655 Laurel Avenue",
"city": "Eastmont",
"state": "Indiana"
},
"registered": "2015-09-02",
"tags": [
"proident",
"laboris",
"ut",
"exercitation",
"labore",
"proident",
"adipisicing"
]
},
{
"_id": "57ef9cd8e27b869852bce881",
"index": 76,
"guid": "8f740d74-174c-4383-bf25-d97b57bae01d",
"isActive": false,
"balance": "$2,399.50",
"picture": "http://placehold.it/32x32",
"age": 35,
"eyeColor": "brown",
"name": "Ball Talley",
"gender": "male",
"company": "GOKO",
"email": "balltalley@goko.com",
"phone": "+1 (994) 551-2840",
"address": {
"street": "271 Hanover Place",
"city": "Kipp",
"state": "Iowa"
},
"registered": "2016-04-07",
"tags": [
"nisi",
"consequat",
"labore",
"occaecat",
"magna",
"duis",
"ullamco"
]
},
{
"_id": "57ef9cd8971d5bf7c2ba6a2e",
"index": 77,
"guid": "df18fc2c-8480-4396-93ea-4db26c228f7e",
"isActive": true,
"balance": "$3,772.45",
"picture": "http://placehold.it/32x32",
"age": 20,
"eyeColor": "brown",
"name": "Tara Mcknight",
"gender": "female",
"company": "COMTENT",
"email": "taramcknight@comtent.com",
"phone": "+1 (932) 574-3393",
"address": {
"street": "619 Argyle Road",
"city": "Roulette",
"state": "Northern Mariana Islands"
},
"registered": "2015-11-21",
"tags": [
"reprehenderit",
"occaecat",
"culpa",
"anim",
"eiusmod",
"labore",
"fugiat"
]
},
{
"_id": "57ef9cd890abec4d44010eea",
"index": 78,
"guid": "74ee47e9-0a58-4a57-80d9-98571e613ae0",
"isActive": true,
"balance": "$1,971.96",
"picture": "http://placehold.it/32x32",
"age": 21,
"eyeColor": "brown",
"name": "Ebony Miller",
"gender": "female",
"company": "TETRATREX",
"email": "ebonymiller@tetratrex.com",
"phone": "+1 (953) 596-3683",
"address": {
"street": "451 Landis Court",
"city": "Elrama",
"state": "Tennessee"
},
"registered": "2015-05-06",
"tags": [
"reprehenderit",
"voluptate",
"ipsum",
"Lorem",
"ea",
"deserunt",
"duis"
]
},
{
"_id": "57ef9cd8e8a49916e0eef4a3",
"index": 79,
"guid": "1a5eb28e-ba61-4abf-95d1-cf69373ac673",
"isActive": true,
"balance": "$3,136.92",
"picture": "http://placehold.it/32x32",
"age": 35,
"eyeColor": "green",
"name": "Sexton James",
"gender": "male",
"company": "XLEEN",
"email": "sextonjames@xleen.com",
"phone": "+1 (886) 443-3743",
"address": {
"street": "565 Dobbin Street",
"city": "Hessville",
"state": "District Of Columbia"
},
"registered": "2016-03-23",
"tags": [
"ea",
"veniam",
"ut",
"aute",
"aliquip",
"ea",
"consectetur"
]
},
{
"_id": "57ef9cd89c8e57302ca806f7",
"index": 80,
"guid": "ad19546d-5b93-4dd0-a19f-53e4eb4d79aa",
"isActive": true,
"balance": "$2,174.53",
"picture": "http://placehold.it/32x32",
"age": 40,
"eyeColor": "brown",
"name": "Barr Espinoza",
"gender": "male",
"company": "PETICULAR",
"email": "barrespinoza@peticular.com",
"phone": "+1 (863) 570-3563",
"address": {
"street": "492 Underhill Avenue",
"city": "Gratton",
"state": "Marshall Islands"
},
"registered": "2016-08-18",
"tags": [
"ullamco",
"cillum",
"ullamco",
"exercitation",
"irure",
"esse",
"aliquip"
]
},
{
"_id": "57ef9cd84211c7823bf419cf",
"index": 81,
"guid": "9c75ad58-fbf9-49c3-a3cc-ec0e747cbc2c",
"isActive": true,
"balance": "$2,401.76",
"picture": "http://placehold.it/32x32",
"age": 29,
"eyeColor": "green",
"name": "Christa Lawson",
"gender": "female",
"company": "ENTALITY",
"email": "christalawson@entality.com",
"phone": "+1 (887) 449-2183",
"address": {
"street": "625 Grafton Street",
"city": "Cresaptown",
"state": "Florida"
},
"registered": "2014-03-09",
"tags": [
"in",
"ea",
"elit",
"sit",
"elit",
"laboris",
"labore"
]
},
{
"_id": "57ef9cd8deb2a837eee99361",
"index": 82,
"guid": "439349b3-b4e5-4e22-b074-d3d8d053986c",
"isActive": true,
"balance": "$3,718.44",
"picture": "http://placehold.it/32x32",
"age": 38,
"eyeColor": "blue",
"name": "Carla Gray",
"gender": "female",
"company": "NETPLODE",
"email": "carlagray@netplode.com",
"phone": "+1 (831) 547-3290",
"address": {
"street": "129 Mill Street",
"city": "Austinburg",
"state": "Texas"
},
"registered": "2014-03-23",
"tags": [
"non",
"tempor",
"eu",
"ipsum",
"voluptate",
"exercitation",
"officia"
]
},
{
"_id": "57ef9cd846d6320f8ee38cd6",
"index": 83,
"guid": "ff535f76-d5ed-4d07-9e5d-1426a6a649f1",
"isActive": true,
"balance": "$2,427.75",
"picture": "http://placehold.it/32x32",
"age": 23,
"eyeColor": "blue",
"name": "Aurora Banks",
"gender": "female",
"company": "BEDDER",
"email": "aurorabanks@bedder.com",
"phone": "+1 (936) 433-3077",
"address": {
"street": "498 Louis Place",
"city": "Canby",
"state": "South Carolina"
},
"registered": "2015-08-29",
"tags": [
"eu",
"mollit",
"et",
"mollit",
"laborum",
"incididunt",
"aute"
]
},
{
"_id": "57ef9cd893f2a82424d8f6ee",
"index": 84,
"guid": "8b007ae2-3474-4eff-bdad-17cd7c378867",
"isActive": true,
"balance": "$2,206.37",
"picture": "http://placehold.it/32x32",
"age": 28,
"eyeColor": "green",
"name": "Ruth Maxwell",
"gender": "female",
"company": "ZEAM",
"email": "ruthmaxwell@zeam.com",
"phone": "+1 (831) 492-3070",
"address": {
"street": "106 Utica Avenue",
"city": "Norfolk",
"state": "Nevada"
},
"registered": "2015-11-12",
"tags": [
"consectetur",
"aliqua",
"sit",
"magna",
"voluptate",
"esse",
"non"
]
},
{
"_id": "57ef9cd8f8c3e6032c08eab0",
"index": 85,
"guid": "b9872ffe-a6dc-4525-ac91-75b356a43ac2",
"isActive": false,
"balance": "$1,234.70",
"picture": "http://placehold.it/32x32",
"age": 20,
"eyeColor": "brown",
"name": "Mayer Edwards",
"gender": "male",
"company": "POWERNET",
"email": "mayeredwards@powernet.com",
"phone": "+1 (823) 411-3607",
"address": {
"street": "539 Jay Street",
"city": "Sena",
"state": "Delaware"
},
"registered": "2015-06-07",
"tags": [
"officia",
"occaecat",
"proident",
"Lorem",
"aute",
"et",
"sit"
]
},
{
"_id": "57ef9cd886542a15d66dc2a6",
"index": 86,
"guid": "a959a4e6-7e0c-41a8-912c-c1280609f486",
"isActive": true,
"balance": "$1,686.52",
"picture": "http://placehold.it/32x32",
"age": 23,
"eyeColor": "blue",
"name": "Caroline Bass",
"gender": "female",
"company": "ARTWORLDS",
"email": "carolinebass@artworlds.com",
"phone": "+1 (932) 419-2973",
"address": {
"street": "858 Pershing Loop",
"city": "Sidman",
"state": "Kansas"
},
"registered": "2015-04-24",
"tags": [
"ea",
"veniam",
"nulla",
"sint",
"proident",
"esse",
"nisi"
]
},
{
"_id": "57ef9cd8f1adf135eb8b5d4f",
"index": 87,
"guid": "1ae041da-fddc-4df5-8485-aff3eacbdcf4",
"isActive": false,
"balance": "$2,991.87",
"picture": "http://placehold.it/32x32",
"age": 27,
"eyeColor": "green",
"name": "Walsh Mccarthy",
"gender": "male",
"company": "FARMAGE",
"email": "walshmccarthy@farmage.com",
"phone": "+1 (921) 500-3805",
"address": {
"street": "930 Banker Street",
"city": "Nicholson",
"state": "California"
},
"registered": "2014-10-18",
"tags": [
"laboris",
"ad",
"adipisicing",
"esse",
"sit",
"consequat",
"magna"
]
},
{
"_id": "57ef9cd8e292916e52e972ec",
"index": 88,
"guid": "9207f1d2-870c-466e-a1ad-ed2b9af4ad65",
"isActive": true,
"balance": "$1,310.82",
"picture": "http://placehold.it/32x32",
"age": 37,
"eyeColor": "brown",
"name": "Natalie Bond",
"gender": "female",
"company": "GYNKO",
"email": "nataliebond@gynko.com",
"phone": "+1 (908) 587-2856",
"address": {
"street": "698 Madoc Avenue",
"city": "Outlook",
"state": "New Jersey"
},
"registered": "2016-03-30",
"tags": [
"aute",
"magna",
"eiusmod",
"est",
"officia",
"adipisicing",
"amet"
]
},
{
"_id": "57ef9cd8ff15e5092584605b",
"index": 89,
"guid": "1cf9890d-2d89-4a98-ac4c-488b47f33ec7",
"isActive": false,
"balance": "$1,664.41",
"picture": "http://placehold.it/32x32",
"age": 32,
"eyeColor": "green",
"name": "Watts Kramer",
"gender": "male",
"company": "MARKETOID",
"email": "wattskramer@marketoid.com",
"phone": "+1 (981) 572-3764",
"address": {
"street": "460 Caton Place",
"city": "Southmont",
"state": "Wyoming"
},
"registered": "2015-02-16",
"tags": [
"occaecat",
"sit",
"amet",
"non",
"sit",
"enim",
"ex"
]
},
{
"_id": "57ef9cd85d843de02021c7a4",
"index": 90,
"guid": "095bf361-65f5-42ae-aa51-1973d6ad6a2c",
"isActive": true,
"balance": "$1,981.37",
"picture": "http://placehold.it/32x32",
"age": 20,
"eyeColor": "green",
"name": "Iva Brady",
"gender": "female",
"company": "COMDOM",
"email": "ivabrady@comdom.com",
"phone": "+1 (942) 514-2261",
"address": {
"street": "525 Hoyts Lane",
"city": "Waterloo",
"state": "Massachusetts"
},
"registered": "2015-12-22",
"tags": [
"nisi",
"quis",
"adipisicing",
"et",
"quis",
"esse",
"consequat"
]
},
{
"_id": "57ef9cd8bf5b4c18438c890c",
"index": 91,
"guid": "bfb1f645-a63e-4fc0-9a94-a208396e32f7",
"isActive": true,
"balance": "$2,694.33",
"picture": "http://placehold.it/32x32",
"age": 39,
"eyeColor": "blue",
"name": "Estella Moses",
"gender": "female",
"company": "UNDERTAP",
"email": "estellamoses@undertap.com",
"phone": "+1 (999) 418-3031",
"address": {
"street": "127 Liberty Avenue",
"city": "Roy",
"state": "Kentucky"
},
"registered": "2014-08-10",
"tags": [
"ipsum",
"ea",
"eu",
"duis",
"enim",
"consequat",
"veniam"
]
},
{
"_id": "57ef9cd895135c80288cf57e",
"index": 92,
"guid": "6470c22d-0086-4acf-9fdf-7d1762a17e08",
"isActive": true,
"balance": "$3,995.47",
"picture": "http://placehold.it/32x32",
"age": 40,
"eyeColor": "brown",
"name": "Anthony Knight",
"gender": "male",
"company": "EQUICOM",
"email": "anthonyknight@equicom.com",
"phone": "+1 (873) 569-3224",
"address": {
"street": "654 Greene Avenue",
"city": "Chamizal",
"state": "Arizona"
},
"registered": "2014-02-08",
"tags": [
"Lorem",
"duis",
"incididunt",
"nulla",
"Lorem",
"dolor",
"adipisicing"
]
},
{
"_id": "57ef9cd8ca4056877bc2cb23",
"index": 93,
"guid": "fc8ea442-c629-42a1-87dd-c58609c0ebdb",
"isActive": false,
"balance": "$3,017.70",
"picture": "http://placehold.it/32x32",
"age": 40,
"eyeColor": "blue",
"name": "Russell Gilliam",
"gender": "male",
"company": "BLUEGRAIN",
"email": "russellgilliam@bluegrain.com",
"phone": "+1 (996) 465-2053",
"address": {
"street": "400 Columbia Place",
"city": "Summerset",
"state": "Maryland"
},
"registered": "2015-01-19",
"tags": [
"sit",
"eu",
"qui",
"Lorem",
"enim",
"aliquip",
"enim"
]
},
{
"_id": "57ef9cd8723a1463115cbf16",
"index": 94,
"guid": "282ddfb3-7c52-4732-80a2-be8c436ee0c9",
"isActive": true,
"balance": "$1,448.23",
"picture": "http://placehold.it/32x32",
"age": 35,
"eyeColor": "brown",
"name": "Mcmahon Reynolds",
"gender": "male",
"company": "PANZENT",
"email": "mcmahonreynolds@panzent.com",
"phone": "+1 (877) 512-2213",
"address": {
"street": "452 Kathleen Court",
"city": "Barronett",
"state": "Illinois"
},
"registered": "2015-04-03",
"tags": [
"qui",
"in",
"qui",
"laboris",
"et",
"nulla",
"id"
]
},
{
"_id": "57ef9cd8d99535859969e271",
"index": 95,
"guid": "ac088fe2-019a-4fd7-bd8c-5d21eeb5e731",
"isActive": false,
"balance": "$2,204.60",
"picture": "http://placehold.it/32x32",
"age": 20,
"eyeColor": "green",
"name": "Rosa Myers",
"gender": "female",
"company": "LUNCHPAD",
"email": "rosamyers@lunchpad.com",
"phone": "+1 (847) 423-3501",
"address": {
"street": "913 Trucklemans Lane",
"city": "Lynn",
"state": "West Virginia"
},
"registered": "2016-06-10",
"tags": [
"veniam",
"consectetur",
"dolor",
"quis",
"anim",
"do",
"sit"
]
},
{
"_id": "57ef9cd802b0ae83a4ed2495",
"index": 96,
"guid": "0507ff39-d0be-4f4d-afc0-01458a66d7a9",
"isActive": true,
"balance": "$3,655.93",
"picture": "http://placehold.it/32x32",
"age": 28,
"eyeColor": "brown",
"name": "Angeline Schroeder",
"gender": "female",
"company": "ZORROMOP",
"email": "angelineschroeder@zorromop.com",
"phone": "+1 (852) 421-2895",
"address": {
"street": "195 Sumpter Street",
"city": "Washington",
"state": "Alaska"
},
"registered": "2015-05-21",
"tags": [
"dolor",
"dolor",
"nulla",
"id",
"mollit",
"eiusmod",
"ut"
]
},
{
"_id": "57ef9cd82e8295c9e6edee99",
"index": 97,
"guid": "322617dc-ac2f-4076-bec9-7539ec959ad2",
"isActive": true,
"balance": "$1,675.25",
"picture": "http://placehold.it/32x32",
"age": 24,
"eyeColor": "brown",
"name": "Hall Atkinson",
"gender": "male",
"company": "UNIA",
"email": "hallatkinson@unia.com",
"phone": "+1 (847) 412-2997",
"address": {
"street": "864 Pierrepont Street",
"city": "Caroleen",
"state": "Oklahoma"
},
"registered": "2016-01-02",
"tags": [
"quis",
"id",
"quis",
"consequat",
"enim",
"esse",
"elit"
]
},
{
"_id": "57ef9cd8864bcc1330fa009c",
"index": 98,
"guid": "3c336f09-140a-423b-963d-e49a0864b214",
"isActive": false,
"balance": "$2,141.56",
"picture": "http://placehold.it/32x32",
"age": 28,
"eyeColor": "brown",
"name": "Paulette Sellers",
"gender": "female",
"company": "ARCTIQ",
"email": "paulettesellers@arctiq.com",
"phone": "+1 (937) 462-3359",
"address": {
"street": "130 Ovington Court",
"city": "Diaperville",
"state": "Federated States Of Micronesia"
},
"registered": "2014-10-28",
"tags": [
"aliqua",
"occaecat",
"ut",
"dolor",
"dolor",
"irure",
"pariatur"
]
},
{
"_id": "57ef9cd88bbbbcdd7e59618f",
"index": 99,
"guid": "6854d791-09f7-46c2-b66c-bcc0ba82d654",
"isActive": true,
"balance": "$1,683.05",
"picture": "http://placehold.it/32x32",
"age": 31,
"eyeColor": "brown",
"name": "Key Black",
"gender": "male",
"company": "MAINELAND",
"email": "keyblack@maineland.com",
"phone": "+1 (920) 536-2044",
"address": {
"street": "326 Melrose Street",
"city": "Denio",
"state": "Vermont"
},
"registered": "2016-08-06",
"tags": [
"tempor",
"enim",
"elit",
"cupidatat",
"ipsum",
"ipsum",
"in"
]
}
]
================================================
FILE: docs/.vuepress/config.js
================================================
module.exports = {
title: 'VueJs Smart Table',
base: '/vuejs-smart-table/',
description: 'Simple yet powerful Data Table for Vue',
configurewebpack: {
resolve: {
alias: {
'vue-smart-table': '../../src'
}
}
},
themeConfig: {
repo: 'tochoromero/vuejs-smart-table',
docsDir: 'docs',
editLinks: true,
sidebarDepth: 1,
sidebar: [
'/',
'the-basics/',
'filtering/',
'sorting/',
'pagination/',
'selection/'
]
}
}
================================================
FILE: docs/README.md
================================================
# Introduction
Vue Smart Table was created out of the need for a simple highly customizable data table plugin
that could take advantage of Vue's slots. It has no dependencies but Vue and because it
renders as a standard HTML table it is compatible with CSS Frameworks such as Bootstrap and Foundation.
Out of the box you will get filtering, column sorting, client side pagination and row selection.
## Installation
To install simply run
```
npm add vuejs-smart-table
```
or
```
yarn add vuejs-smart-table
```
Then in your `main.js`
```js
import SmartTable from 'vuejs-smart-table'
Vue.use(SmartTable)
```
This will globally register four Components: `v-table`, `v-th`, `v-tr` and `smart-pagination`
================================================
FILE: docs/filtering/README.md
================================================
# Filtering
Smart Table is only on charge of the actual row filtering based on the provided configuration.
The visual aspect of it are in your control, allowing you to use any UI Elements to interact while it frees you
from the actual filtering computation.
## Filters
To enable filtering you need to provide the `filters` property on the `v-table` component.
The `filters` configuration object has the following form:
```js
{
name: {value: '', keys: ['name']}
}
```
The entry Key is just for you, so you can reference any of the filters by its name.
It is the entry Value Object what Smart Table will use to perform the filtering.
### value
This String is the value of the filter, you would normally bind it to the `v-model` of an input element. As you type,
the rows will be filtered.
Keep in mind that an empty `value` means there is no filter.
### keys
This is an Array of Strings indicating what fields of each row the filter `value` will apply to.
You must provide at least one key. If more than one key is provided as long as one of the row fields matches the filter,
the row will be displayed.
#### Example
```js
import users from './users.json'
export default {
name: 'BasicFiltering',
data: () => ({
users,
filters: {
name: { value: '', keys: ['name'] }
}
})
}
```
```html
Filter by Name:
Name
Age
Email
Address
{{ row.name }}
{{ row.age }}
{{ row.email }}
{{ row.address.street }},
{{ row.address.city }}
{{ row.address.state}}
```
## Custom Filters
You also have the option to provide a custom filter for more complex situations.
A Custom Filter is a function with two arguments: `filterValue` and `row`.
It should return `true` if the row should be displayed and `false` otherwise.
### custom
To use a custom filter provide the filtering function on the `custom` property on the filter configuration object:
### value
With custom filtering the `value` property is not limited to Strings, you can provide anything as the `value`,
it will just get passed along to your custom function.
#### Example
```js
```
```html
Min Age:
Max Age:
Name
Age
Email
Address
{{ row.name }}
{{ row.age }}
{{ row.email }}
{{ row.address.street }},
{{ row.address.city }}
{{ row.address.state}}
```
::: tip
Please think of the `InputSpinner` as a fancy `Input` with validation. The important bit is its `v-model`.
:::
================================================
FILE: docs/pagination/README.md
================================================
# Pagination
Vue Smart Table supports client side pagination.
To enable it, you need to provide the `pageSize` and `currentPage` properties on the `v-table` Component.
## Page Size
The `pageSize` property specify the amount of items each page should contain.
If this property is present, client side pagination will be enabled.
## Current Page
The `currentPage` property indicates the current active page.
This property should be bound with a `sync` modifier, since the `v-table` itself
may update its value, e.g. if a new filter is applied and the amount of available items decreases
so the current active page is no longer valid.
::: tip
The `currentPage` property index starts at `1`,
this is to avoid confusion since visually the page links start at `1` not `0`.
:::
## Total pages
The total amount of pages is calculated using the Total Items and the Page Size.
As the Total Items changes the Total Pages will also change and a `totalPagesChanged` event
will be emitted with the new amount as its payload.
## Total Items
The total amount of items changes as the Filters change. When it changes `v-table` will emit a `totalItemsChanged` Event.
This event will also be emitted when the `v-table` mounts so it will have the right amount from the start.
## Pagination Controls
The pagination controls are handled outside of `v-table`, you can use whatever you want to control it, but we provide
a `SmartPagination` component so you can have it working out of the box.
The component requires the following properties:
### Current Page
This should be the same `currentPage` property used for the `v-table` component
and it should also use the `sync` modifier, that way whenever either of them changes it the other one will be notified.
### Total Pages
The `v-table` component emits a `totalPagesChanged` event, when the event happens we should save the event payload and
use it for the `totalPages` property on the `SmartPagination` component.
## Example
```html
Name
Age
State
Registered
{{ row.name }}
{{ row.age }}
{{ row.address.state }}
{{ row.registered }}
```
```js
```
## Customizing Smart Pagination
Besides the `currentPage` and `totalPages` properties, there are many others used to configure the behaviour and look
and feel of the pagination controls.
### Hide Single Page
Determines whether or not we show the pagination controls when there is only a single page.
### Max Page Links
By default we will show every single page link, but you can use the `maxPageLinks` property to limit the amount of visible links.
### Boundary Links
Determines whether or not we should show two links to navigate to the First and Last page.
### First Text
Specify the text for the First Page link.
### Last Text
Specify the text for the Last Page link.
### Direction Links
Determines whether or not we should have direction links to navigate back and forth between pages.
### CSS Customization
The HTML structure for the Smart Pagination component is as follows:
```html
```
This structure is compatible with Bootstrap's Pagination. But you can easily customize it with your own Styles.
================================================
FILE: docs/selection/README.md
================================================
# Row Selection
## Table Row
To enable row selection you need to use the `v-tr` component. It only has one property: `row`
### Row
You must provide the `row` property with the current Object for the row.
## Selection Options
You can configure the Selection Mode and the Selected Class in the `v-table` component.
### Selection Mode
By default the selection mode is `single`, meaning only one row at a time can be selected.
You can use the `selectionMode` property in the `v-table` component to set it to `multiple`, so multiple rows
can be selected.
### Selected Class
When a row is selected a class is added to the `tr` element, by default it is `vt-selected` byt you can change it to
something else with the `selectedClass` property in the `v-table` component.
## Selection Changed
When the selected items changes the `v-table` component will emit a `selectionChanged` event with the
list of selected items as its payload.
## Example
```html
Name
Age
State
Registered
{{ row.name }}
{{ row.age }}
{{ row.address.state }}
{{ row.registered }}
Selected:
No Rows Selected
```
```js
```
================================================
FILE: docs/sorting/README.md
================================================
# Sorting
To enable column sorting, instead of using vanilla `th` elements we will use `v-th` Components for the columns
that will allow sorting.
## Table Header
The `v-th` component renders to a regular `th` element but it allows you to sort the table, it has three properties:
`sortKey`, `customSort` and `defaultSort`.
### Sort Key
The `sortKey` property is used to get the Row value we will sort by it can either be a `String` or a `Function`.
#### String
As a `String`, it represents the path to the property in the Row we want to sort. You can even use nested paths.
```html
Name
State
```
#### Function
If you instead pass a `Function`, we will call it with the current `row` as a parameter and expect to get back
the value used for sorting.
```html
Name
```
```js
methods: {
nameLength (row) {
return `row.name.length`
}
}
```
Once we have used the `key` property to get the column values, we will compare them.
If the values are number we will just compare them by subtraction.
Otherwise we will call `toString()` on them and compare them with `localCompare`.
### Custom Sort
In some cases you need more control over sorting,
for instance if you have a complex object or your sorting depends in two or more values.
For those instances instead of providing a `key` property you can use the `custom` property to provide a sorting function.
The function will receive the 2 rows being compared and a third parameter with the sort order
where `1` represents ascending and `-1` represents descending.
The function needs to return `1` if the first row is greater, `-1` if the second row is greater
or `0` if they are the same.
```html
Registered
```
```js
methods: {
dateSort(a, b) {
let date1 = new Date(a.registered).getTime();
let date2 = new Date(b.registered).getTime();
return date1 - date2;
}
}
```
### Default Sort
You should provide this for the one column you want the table to be sorted by default.
The possible values are: `asc` for ascending ordering and `desc` for descending order.
```html
Name
```
### Example
```html
Name
Age
State
Registered
{{ row.name }}
{{ row.age }}
{{ row.address.state }}
{{ row.registered }}
```
```js
```
## CSS icons
By default we include three SVG icons to indicate the sorting state of a column.
But you can use CSS Styles to change the sort icons.
The first thing you need to do is to disable the default sort icons with the `hideSortIcons` property on the `v-table` component:
```html
...
```
Then you will get 4 CSS classes for `th` elements with sorting enabled:
* `vt-sort`: This class is always present, its purpose is to provide a constant CSS class for the columns with sorting.
* `vt-sortable`: This class indicates the column can be sorted and it is present when the column is not currently sorted.
* `vt-asc`: This class indicates the column is being sorted by an ascending order.
* `vt-desc`: This class indicates the column is being sorted by a descending order.
For this example we will use FontAwesome icons:
```css
.vt-sort:before{
font-family: FontAwesome;
padding-right: 0.5em;
width: 1.28571429em;
display: inline-block;
text-align: center;
}
.vt-sortable:before{
content: "\f0dc";
}
.vt-asc:before{
content: "\f160";
}
.vt-desc:before{
content: "\f161";
}
```
================================================
FILE: docs/the-basics/README.md
================================================
# The Basics
The main goal for Vue Smart Table is to be intuitive to use while offering powerful features out of the box.
To achieve this we mix Vue Components and vanilla HTML Elements with the output being the same as a traditional HTML Table.
This will allow you to easily customize your tables with CSS or with a framework such as Bootstrap or Foundation.
For our examples we decided to use Bootstrap and Font Awesome, but you can use whatever your heart desires.
Here is the code for the simplest table you can create:
```js
```
```html
Name
Age
Email
Address
{{ row.name }}
{{ row.age }}
{{ row.email }}
{{ row.address.street }},
{{ row.address.city }}
{{ row.address.state}}
```
## Table
The `v-table` component is the main element of Smart Table, here you will provide most of the configuration and listen for events.
But for now we will just focus on the `data` attribute.
### Data
Each `v-table` requires a `data` property, it must be an `array` even if it is initially empty.
Each entry in the array represents a row in the table.
It is important to note the array will not be mutated by Smart Table, internally it will create a shallow copy of it to perform
the operations.
## Head
The `head` slot is for the table `thead`, other than specifying the slot name with `slot="head"` there is nothing special about this.
You just need to provide vanilla `th` elements for each of your columns.
```html
Name
Age
...
```
## Body
The `body` slot is for the table `tbody`. This is a scoped slot which provides a `displayData` property.
### Display Data
The `display-data` property provided by the `body` scoped slot is a shallow copy of the `data` array provided to the `v-table` component.
This array has all the plugins applied to it, for example, if filtering is enabled, this array will only contain the rows that pass the filters.
You will want to use a `v-for` directive to render the `tr` elements, remember, each entry in the `display-data` array represents a row.
```html
{{ row.name }}
{{ row.age }}
...
```
All right, this is the simplest table you can create, but right now Smart Table is effectively doing nothing you might as well just use a vanilla Html Table.
Keep browsing to discover how powerful Smart Table is out of the box.
================================================
FILE: package.json
================================================
{
"name": "vuejs-smart-table",
"keywords": [
"vue",
"table",
"grid",
"datagrid"
],
"version": "0.0.8",
"private": false,
"main": "src/main.js",
"author": "Hector Romero Granillo",
"repository": "https://github.com/tochoromero/vuejs-smart-table",
"license": "MIT",
"scripts": {
"build": "vue-cli-service build --target lib --name smart-table src/main.js",
"lint": "vue-cli-service lint",
"test:unit": "vue-cli-service test:unit --reporter mocha-junit-reporter --reporter-options mochaFile=./tests/results/test_results.xml",
"docs:dev": "vuepress dev docs",
"docs:build": "vuepress build docs"
},
"dependencies": {
"vue": "^2.5.17"
},
"devDependencies": {
"@fortawesome/fontawesome-free": "^5.6.3",
"@vue/cli-plugin-babel": "^3.1.1",
"@vue/cli-plugin-eslint": "^3.1.5",
"@vue/cli-plugin-unit-mocha": "^3.1.1",
"@vue/cli-service": "^3.1.4",
"@vue/eslint-config-standard": "^4.0.0",
"@vue/test-utils": "^1.0.0-beta.20",
"babel-eslint": "^10.0.1",
"bootstrap": "^4.2.1",
"chai": "^4.1.2",
"eslint": "^5.8.0",
"eslint-plugin-vue": "^5.0.0-0",
"lint-staged": "^7.2.2",
"mocha-junit-reporter": "^1.18.0",
"sass": "^1.30.0",
"sass-loader": "^10.1.0",
"vue-template-compiler": "^2.5.17",
"vuepress": "^0.14.8"
},
"gitHooks": {
"pre-commit": "lint-staged"
},
"lint-staged": {
"*.js": [
"vue-cli-service lint",
"git add"
],
"*.vue": [
"vue-cli-service lint",
"git add"
]
}
}
================================================
FILE: postcss.config.js
================================================
module.exports = {
plugins: {
autoprefixer: {}
}
}
================================================
FILE: src/SmartPagination.vue
================================================
================================================
FILE: src/VTable.vue
================================================
================================================
FILE: src/VTh.vue
================================================
================================================
FILE: src/VTr.vue
================================================
================================================
FILE: src/main.js
================================================
import VTable from './VTable.vue'
import VTh from './VTh.vue'
import VTr from './VTr.vue'
import SmartPagination from './SmartPagination.vue'
export {
VTable,
VTh,
VTr,
SmartPagination
}
/**/
export default {
install (Vue) {
Vue.component('v-table', VTable)
Vue.component('v-th', VTh)
Vue.component('v-tr', VTr)
Vue.component('smart-pagination', SmartPagination)
}
}
================================================
FILE: src/store.js
================================================
export default {
data: () => ({
selectedRows: [],
selectionMode: 'single',
customSelection: null,
selectedClass: null,
hideSortIcons: null,
sortId: null,
sortKey: null,
customSort: null,
sortOrder: null
}),
methods: {
selectRow (row) {
if (this.selectionMode === 'single') {
this.selectedRows = [row]
return
}
const index = this.selectedRows.indexOf(row)
if (index === -1) {
this.selectedRows.push(row)
}
},
selectRows (rows) {
for (let row of rows) {
this.selectRow(row)
}
},
deselectRow (row) {
const index = this.selectedRows.indexOf(row)
if (index > -1) {
this.selectedRows.splice(index, 1)
}
},
deselectRows (rows) {
for (let row of rows) {
this.deselectRow(row)
}
},
selectAll (all) {
this.selectedRows = all
},
deselectAll () {
this.selectedRows = []
},
setSort ({ sortKey, customSort, sortOrder, sortId }) {
this.sortKey = sortKey
this.customSort = customSort
this.sortOrder = sortOrder
this.sortId = sortId
}
}
}
================================================
FILE: src/table-utils.js
================================================
export function doSort (toSort, sortKey, customSort, sortOrder) {
let local = [...toSort]
return local.sort((a, b) => {
if (typeof customSort === 'function') {
return customSort(a, b) * sortOrder
}
let val1
let val2
if (typeof sortKey === 'function') {
val1 = sortKey(a, sortOrder)
val2 = sortKey(b, sortOrder)
} else {
val1 = getPropertyValue(a, sortKey)
val2 = getPropertyValue(b, sortKey)
}
if (val1 === null || val1 === undefined) val1 = ''
if (val2 === null || val2 === undefined) val2 = ''
if (isNumeric(val1) && isNumeric(val2)) {
return (val1 - val2) * sortOrder
}
const str1 = val1.toString()
const str2 = val2.toString()
return str1.localeCompare(str2) * sortOrder
})
}
export function doFilter (toFilter, filters) {
let filteredData = []
for (let item of toFilter) {
let passed = true
for (let filterName in filters) {
if (!filters.hasOwnProperty(filterName)) {
continue
}
let filter = filters[filterName]
if (!passFilter(item, filter)) {
passed = false
break
}
}
if (passed) {
filteredData.push(item)
}
}
return filteredData
}
export function doPaginate (toPaginate, pageSize, currentPage) {
if (toPaginate.length <= pageSize || pageSize <= 0 || currentPage <= 0) {
return toPaginate
}
const start = (currentPage - 1) * pageSize
const end = start + pageSize
return [...toPaginate].slice(start, end)
}
export function calculateTotalPages (totalItems, pageSize) {
return totalItems <= pageSize ? 1 : Math.ceil(totalItems / pageSize)
}
export function passFilter (item, filter) {
if (typeof filter.custom === 'function' && !filter.custom(filter.value, item)) {
return false
}
if (filter.value === null || filter.value === undefined || filter.value.length === 0 || !Array.isArray(filter.keys)) {
return true
}
for (let key of filter.keys) {
const value = getPropertyValue(item, key)
if (value !== null && value !== undefined) {
const filterStrings = Array.isArray(filter.value) ? filter.value : [filter.value]
for (const filterString of filterStrings) {
if (filter.exact) {
if (value.toString() === filterString.toString()) {
return true
}
} else {
if (value.toString().toLowerCase().includes(filterString.toString().toLowerCase())) {
return true
}
}
}
}
}
return false
}
export function getPropertyValue (object, keyPath) {
keyPath = keyPath.replace(/\[(\w+)\]/g, '.$1')
keyPath = keyPath.replace(/^\./, '')
const a = keyPath.split('.')
for (let i = 0, n = a.length; i < n; ++i) {
let k = a[i]
if (k in object) {
object = object[k]
} else {
return
}
}
return object
}
export function isNumeric (toCheck) {
return !Array.isArray(toCheck) && !isNaN(parseFloat(toCheck)) && isFinite(toCheck)
}
export function uuid () {
return '_' + Math.random().toString(36).substr(2, 9)
}
================================================
FILE: tests/unit/.eslintrc.js
================================================
module.exports = {
env: {
mocha: true
}
}
================================================
FILE: tests/unit/table-utils.spec.js
================================================
import { expect } from 'chai'
import { calculateTotalPages, isNumeric, getPropertyValue, doPaginate } from '../../src/table-utils.js'
let scenario = [
{ totalItems: 10, pageSize: 5, result: 2 },
{ totalItems: 1, pageSize: 10, result: 1 },
{ totalItems: 11, pageSize: 10, result: 2 },
{ totalItems: 200, pageSize: 200, result: 1 },
{ totalItems: 200, pageSize: 1, result: 200 }
]
scenario.forEach(({ totalItems, pageSize, result }) => {
describe('calculateTotalPages', () => {
it(`Should be ${result} pages when totalItems is ${totalItems} and pageSize: is ${pageSize}`, () => {
expect(calculateTotalPages(totalItems, pageSize))
.to.equal(result)
})
})
})
scenario = [
{ toCheck: 5, result: true },
{ toCheck: 1.0, result: true },
{ toCheck: -1.0, result: true },
// eslint-disable-next-line no-floating-decimal
{ toCheck: .5, result: true },
{ toCheck: 0.8, result: true },
{ toCheck: '0.5', result: true },
{ toCheck: '-0.5', result: true },
{ toCheck: 'asd', result: false },
{ toCheck: '5,2', result: false },
{ toCheck: [1], result: false },
{ toCheck: [], result: false },
{ toCheck: { value: 1 }, result: false }
]
scenario.forEach(({ toCheck, result }) => {
describe('isNumeric', () => {
it(`${toCheck} should ${result ? '' : 'not'} be numeric`, () => {
expect(isNumeric(toCheck))
.to.equal(result)
})
})
})
scenario = [
{ object: { value: 'asd', values: 123 }, path: 'value', result: 'asd' },
{ object: { value: 'asd', values: 123 }, path: '[value]', result: 'asd' },
{ object: { a: { b: { c: 13 } } }, path: 'a.b.c', result: 13 },
{ object: { a: { b: { c: 13 } } }, path: 'a[b].c', result: 13 },
{ object: { value: 'asd' }, path: 'none', result: undefined },
{ object: {}, path: 'empty', result: undefined }
]
scenario.forEach(({ object, path, result }) => {
describe('getPropertyValue', () => {
it(`path '${path}' should be ${result}`, () => {
expect(getPropertyValue(object, path))
.to.equal(result)
})
})
})
let toPaginate = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
scenario = [
{ pageSize: 3, currentPage: 1, result: [1, 2, 3] },
{ pageSize: 5, currentPage: 2, result: [6, 7, 8, 9, 10] },
{ pageSize: 2, currentPage: 3, result: [5, 6] },
{ pageSize: 5, currentPage: 3, result: [] },
{ pageSize: 50, currentPage: 1, result: toPaginate },
{ pageSize: 0, currentPage: 1, result: toPaginate },
{ pageSize: 5, currentPage: 0, result: toPaginate }
]
scenario.forEach(({ pageSize, currentPage, result }) => {
describe('doPaginate', () => {
it(`With size: ${pageSize} and currentPage: ${currentPage} it should return ${result}`, () => {
expect(doPaginate(toPaginate, pageSize, currentPage))
.to.eql(result)
})
})
})