From e4c819039f52d30d04f888114133b3ced5ede65e Mon Sep 17 00:00:00 2001 From: Will Olson Date: Thu, 2 Nov 2017 11:54:39 -0700 Subject: [PATCH 01/16] chore: Update the devDependencies for the linter --- package.json | 9 ++++----- yarn.lock | 19 +++++-------------- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index b3ae761..dc4f129 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,7 @@ "classnames": "^2.2.5" }, "peerDependencies": { - "react": "^15.x.x || ^16.x.x", - "eslint-config-react-tools": "^1.0.10" + "react": "^15.x.x || ^16.x.x" }, "devDependencies": { "autoprefixer": "^6.7.0", @@ -52,11 +51,11 @@ "babel-preset-react": "6.11.1", "babel-preset-stage-2": "6.13.0", "eslint": "^4.1.1", - "eslint-config-standard": "^10.2.1", + "eslint-config-react-tools": "^1.0.10", + "eslint-plugin-class-property": "^1.0.6", "eslint-plugin-import": "^2.7.0", - "eslint-plugin-node": "^5.2.0", + "eslint-plugin-jsx-a11y": "^6.0.2", "eslint-plugin-react": "^7.4.0", - "eslint-plugin-standard": "^3.0.1", "match-sorter": "^1.8.0", "npm-run-all": "^3.1.1", "onchange": "^3.0.2", diff --git a/yarn.lock b/yarn.lock index 3d0f598..bf9cc86 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1719,7 +1719,7 @@ eslint-config-standard-jsx@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz#009e53c4ddb1e9ee70b4650ffe63a7f39f8836e1" -eslint-config-standard@10.2.1, eslint-config-standard@^10.2.1: +eslint-config-standard@10.2.1: version "10.2.1" resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz#c061e4d066f379dc17cd562c64e819b4dd454591" @@ -1800,15 +1800,6 @@ eslint-plugin-jsx-a11y@^6.0.2: emoji-regex "^6.1.0" jsx-ast-utils "^1.4.0" -eslint-plugin-node@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-5.2.0.tgz#e1efca04a385516cff3f2f04027ce8c5ae6db749" - dependencies: - ignore "^3.3.3" - minimatch "^3.0.4" - resolve "^1.3.3" - semver "5.3.0" - eslint-plugin-node@~4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-4.2.2.tgz#82959ca9aed79fcbd28bb1b188d05cac04fb3363" @@ -1842,7 +1833,7 @@ eslint-plugin-react@~6.10.0: jsx-ast-utils "^1.3.4" object.assign "^4.0.4" -eslint-plugin-standard@^3.0.1, eslint-plugin-standard@~3.0.1: +eslint-plugin-standard@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz#34d0c915b45edc6f010393c7eef3823b08565cf2" @@ -1940,8 +1931,8 @@ eslint@^4.1.1: text-table "~0.2.0" eslint@^4.3.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.9.0.tgz#76879d274068261b191fe0f2f56c74c2f4208e8b" + version "4.10.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.10.0.tgz#f25d0d7955c81968c2309aa5c9a229e045176bb7" dependencies: ajv "^5.2.0" babel-code-frame "^6.22.0" @@ -3822,7 +3813,7 @@ resolve@^1.1.6, resolve@^1.1.7: version "1.2.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.2.0.tgz#9589c3f2f6149d1417a40becc1663db6ec6bc26c" -resolve@^1.2.0, resolve@^1.3.3: +resolve@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" dependencies: From 710891f0c079a9cfacfdf6cb9795f72eaac0f360 Mon Sep 17 00:00:00 2001 From: Gary Menzel Date: Sun, 12 Nov 2017 16:32:29 +1100 Subject: [PATCH 02/16] A few HOC examples for react-table. Not really integrated with the whole codesandbox.io approach. --- docs/public/au_500_tree.json | 6502 +++++++++++++++++++ docs/src/App.js | 18 +- docs/src/examples/checkbox/checkboxHOC.js | 88 + docs/src/examples/checkbox/index.js | 160 + docs/src/examples/index.js | 8 + docs/src/examples/treetable/index.js | 80 + docs/src/examples/treetable/treeTableHOC.js | 58 + docs/src/examples/utils.js | 34 + 8 files changed, 6945 insertions(+), 3 deletions(-) create mode 100644 docs/public/au_500_tree.json create mode 100644 docs/src/examples/checkbox/checkboxHOC.js create mode 100644 docs/src/examples/checkbox/index.js create mode 100644 docs/src/examples/index.js create mode 100644 docs/src/examples/treetable/index.js create mode 100644 docs/src/examples/treetable/treeTableHOC.js create mode 100644 docs/src/examples/utils.js diff --git a/docs/public/au_500_tree.json b/docs/public/au_500_tree.json new file mode 100644 index 0000000..e67eed6 --- /dev/null +++ b/docs/public/au_500_tree.json @@ -0,0 +1,6502 @@ +[ + { + "first_name": "Soledad", + "last_name": "Mockus", + "company_name": "Sinclair Machine Products Inc", + "address": "75 Elm Rd #1190", + "state": "ACT", + "post": 2600, + "city": "Barton", + "phone1": "02-1291-8182", + "phone2": "0444-126-746", + "email": "soledad_mockus@yahoo.com", + "web": "http://www.sinclairmachineproductsinc.com.au" + }, + { + "first_name": "Dana", + "last_name": "Vock", + "company_name": "Fried, Monte Esq", + "address": "49 Walnut St", + "state": "ACT", + "post": 2600, + "city": "Yarralumla", + "phone1": "02-6689-1150", + "phone2": "0411-398-917", + "email": "dana_vock@yahoo.com", + "web": "http://www.friedmonteesq.com.au" + }, + { + "first_name": "Roy", + "last_name": "Nybo", + "company_name": "Phoenix Phototype", + "address": "823 Fishers Ln", + "state": "ACT", + "post": 2603, + "city": "Red Hill", + "phone1": "02-5311-7778", + "phone2": "0416-394-795", + "email": "rnybo@nybo.net.au", + "web": "http://www.phoenixphototype.com.au" + }, + { + "first_name": "Annamae", + "last_name": "Lothridge", + "company_name": "Highland Meadows Golf Club", + "address": "584 Meridian St #997", + "state": "ACT", + "post": 2608, + "city": "Civic Square", + "phone1": "02-1919-3941", + "phone2": "0495-759-817", + "email": "alothridge@hotmail.com", + "web": "http://www.highlandmeadowsgolfclub.com.au" + }, + { + "first_name": "Katheryn", + "last_name": "Lamers", + "company_name": "Sonoco Products Co", + "address": "62171 E 6th Ave", + "state": "ACT", + "post": 2609, + "city": "Fyshwick", + "phone1": "02-4885-1611", + "phone2": "0497-455-126", + "email": "katheryn_lamers@gmail.com", + "web": "http://www.sonocoproductsco.com.au" + }, + { + "first_name": "Jamie", + "last_name": "Kushnir", + "company_name": "Bell Electric Co", + "address": "3216 W Wabansia Ave", + "state": "ACT", + "post": 2901, + "city": "Tuggeranong Dc", + "phone1": "02-4623-8120", + "phone2": "0426-830-817", + "email": "jamie@kushnir.net.au", + "web": "http://www.bellelectricco.com.au" + }, + { + "first_name": "Wenona", + "last_name": "Carmel", + "company_name": "Maier, Kristine M", + "address": "44 Bush St", + "state": "NSW", + "post": 1220, + "city": "Grosvenor Place", + "phone1": "02-2832-1545", + "phone2": "0439-849-209", + "email": "wenona@gmail.com", + "web": "http://www.maierkristinem.com.au" + }, + { + "first_name": "Deane", + "last_name": "Haag", + "company_name": "Malsbary Mfg Co", + "address": "9 Hamilton Blvd #299", + "state": "NSW", + "post": 1235, + "city": "Sydney South", + "phone1": "02-9718-2944", + "phone2": "0453-828-758", + "email": "dhaag@hotmail.com", + "web": "http://www.malsbarymfgco.com.au" + }, + { + "first_name": "Nenita", + "last_name": "Mckenna", + "company_name": "Southern Imperial Inc", + "address": "709 New Market St", + "state": "NSW", + "post": 1455, + "city": "Botany", + "phone1": "02-5059-2649", + "phone2": "0419-730-349", + "email": "nmckenna@yahoo.com", + "web": "http://www.southernimperialinc.com.au" + }, + { + "first_name": "Mayra", + "last_name": "Bena", + "company_name": "Buelt, David L Esq", + "address": "808 Glen Cove Ave", + "state": "NSW", + "post": 1595, + "city": "Lane Cove", + "phone1": "02-1455-6085", + "phone2": "0453-666-885", + "email": "mayra.bena@gmail.com", + "web": "http://www.bueltdavidlesq.com.au" + }, + { + "first_name": "Samuel", + "last_name": "Arellanes", + "company_name": "Ryan, Barry M Esq", + "address": "286 Santa Rosa Ave", + "state": "NSW", + "post": 1595, + "city": "Lane Cove", + "phone1": "02-7995-6787", + "phone2": "0446-710-661", + "email": "samuel.arellanes@arellanes.net.au", + "web": "http://www.ryanbarrymesq.com.au" + }, + { + "first_name": "Princess", + "last_name": "Saffo", + "company_name": "Asian Jewelry", + "address": "12398 Duluth St", + "state": "NSW", + "post": 1835, + "city": "Auburn", + "phone1": "02-2656-6234", + "phone2": "0467-758-219", + "email": "princess_saffo@hotmail.com", + "web": "http://www.asianjewelry.com.au" + }, + { + "first_name": "Michael", + "last_name": "Orehek", + "company_name": "Robinson, Michael C Esq", + "address": "892 Sw Broadway #8", + "state": "NSW", + "post": 2000, + "city": "Millers Point", + "phone1": "02-1919-1709", + "phone2": "0482-613-598", + "email": "michael_orehek@gmail.com", + "web": "http://www.robinsonmichaelcesq.com.au" + }, + { + "first_name": "Casandra", + "last_name": "Gordis", + "company_name": "Carlyle Abstract Co", + "address": "6 Walnut St", + "state": "NSW", + "post": 2008, + "city": "Chippendale", + "phone1": "02-5808-6388", + "phone2": "0418-327-906", + "email": "casandra_gordis@gordis.com.au", + "web": "http://www.carlyleabstractco.com.au" + }, + { + "first_name": "Leonor", + "last_name": "Prez", + "company_name": "Vinco Furniture Inc", + "address": "968 Delaware Ave", + "state": "NSW", + "post": 2017, + "city": "Waterloo", + "phone1": "02-7463-8776", + "phone2": "0466-155-348", + "email": "lprez@prez.com.au", + "web": "http://www.vincofurnitureinc.com.au" + }, + { + "first_name": "Bernadine", + "last_name": "Elamin", + "company_name": "Tarix Printing", + "address": "61550 S Figueroa St", + "state": "NSW", + "post": 2024, + "city": "Waverley", + "phone1": "02-1815-8700", + "phone2": "0448-195-542", + "email": "bernadine_elamin@yahoo.com", + "web": "http://www.tarixprinting.com.au" + }, + { + "first_name": "Cherilyn", + "last_name": "Fraize", + "company_name": "Witchs Brew", + "address": "84826 Plaza Dr", + "state": "NSW", + "post": 2030, + "city": "Rose Bay North", + "phone1": "02-4873-1914", + "phone2": "0468-743-337", + "email": "cherilyn_fraize@fraize.net.au", + "web": "http://www.witchsbrew.com.au" + }, + { + "first_name": "Katie", + "last_name": "Magro", + "company_name": "Jones, Andrew D Esq", + "address": "8 E North Ave", + "state": "NSW", + "post": 2035, + "city": "Pagewood", + "phone1": "02-7265-9702", + "phone2": "0439-832-641", + "email": "katie_magro@gmail.com", + "web": "http://www.jonesandrewdesq.com.au" + }, + { + "first_name": "Beckie", + "last_name": "Apodace", + "company_name": "Reich, Richard J Esq", + "address": "26 Ripley St #5444", + "state": "NSW", + "post": 2068, + "city": "Middle Cove", + "phone1": "02-5630-3114", + "phone2": "0469-490-273", + "email": "bapodace@gmail.com", + "web": "http://www.reichrichardjesq.com.au" + }, + { + "first_name": "Nickole", + "last_name": "Derenzis", + "company_name": "Lehigh Furn Divsn Lehigh", + "address": "2 Pompton Ave", + "state": "NSW", + "post": 2082, + "city": "Berowra Heights", + "phone1": "02-5573-6627", + "phone2": "0480-120-597", + "email": "nderenzis@hotmail.com", + "web": "http://www.lehighfurndivsnlehigh.com.au" + }, + { + "first_name": "Fidelia", + "last_name": "Dampier", + "company_name": "Signs Now", + "address": "947 W Harrison St #640", + "state": "NSW", + "post": 2083, + "city": "Dangar Island", + "phone1": "02-8035-9997", + "phone2": "0478-179-538", + "email": "fidelia_dampier@gmail.com", + "web": "http://www.signsnow.com.au" + }, + { + "first_name": "Oren", + "last_name": "Lobosco", + "company_name": "Vei Inc", + "address": "1585 Salem Church Rd #59", + "state": "NSW", + "post": 2083, + "city": "Dangar Island", + "phone1": "02-5046-1307", + "phone2": "0495-838-492", + "email": "olobosco@hotmail.com", + "web": "http://www.veiinc.com.au" + }, + { + "first_name": "Lou", + "last_name": "Kriner", + "company_name": "Joondeph, Jerome J Esq", + "address": "39 Broad St", + "state": "NSW", + "post": 2092, + "city": "Seaforth", + "phone1": "02-7328-3350", + "phone2": "0496-387-592", + "email": "lou.kriner@hotmail.com", + "web": "http://www.joondephjeromejesq.com.au" + }, + { + "first_name": "Lachelle", + "last_name": "Andrzejewski", + "company_name": "Lucas Cntrl Systems Prod Deeco", + "address": "262 Montauk Blvd", + "state": "NSW", + "post": 2126, + "city": "Cherrybrook", + "phone1": "02-3416-9617", + "phone2": "0453-493-910", + "email": "lachelle.andrzejewski@andrzejewski.com.au", + "web": "http://www.lucascntrlsystemsproddeeco.com.au" + }, + { + "first_name": "Tommy", + "last_name": "Gennusa", + "company_name": "Cooper And Raley", + "address": "2 New Brooklyn Rd", + "state": "NSW", + "post": 2138, + "city": "Concord West", + "phone1": "02-5444-1961", + "phone2": "0498-290-826", + "email": "tommy@hotmail.com", + "web": "http://www.cooperandraley.com.au" + }, + { + "first_name": "Aide", + "last_name": "Ghera", + "company_name": "Nathaniel Electronics", + "address": "22 Livingston Ave", + "state": "NSW", + "post": 2138, + "city": "Rhodes", + "phone1": "02-3738-7508", + "phone2": "0443-448-467", + "email": "aide.ghera@ghera.com.au", + "web": "http://www.nathanielelectronics.com.au" + }, + { + "first_name": "Novella", + "last_name": "Fritch", + "company_name": "Voils, Otis V", + "address": "5 Ellestad Dr", + "state": "NSW", + "post": 2145, + "city": "Girraween", + "phone1": "02-2612-1455", + "phone2": "0458-731-791", + "email": "nfritch@fritch.com.au", + "web": "http://www.voilsotisv.com.au" + }, + { + "first_name": "Sherman", + "last_name": "Mahmud", + "company_name": "Gencheff, Nelson E Do", + "address": "9 Memorial Pky Nw", + "state": "NSW", + "post": 2150, + "city": "Harris Park", + "phone1": "02-2621-3361", + "phone2": "0468-488-918", + "email": "sherman@mahmud.com.au", + "web": "http://www.gencheffnelsonedo.com.au" + }, + { + "first_name": "Madelyn", + "last_name": "Maestri", + "company_name": "Mervis Steel Co", + "address": "60 S 4th St", + "state": "NSW", + "post": 2155, + "city": "Rouse Hill", + "phone1": "02-2129-8131", + "phone2": "0413-115-438", + "email": "madelyn.maestri@yahoo.com", + "web": "http://www.mervissteelco.com.au" + }, + { + "first_name": "Ben", + "last_name": "Kellman", + "company_name": "Anderson, Julie A Esq", + "address": "30024 Whipple Ave Nw", + "state": "NSW", + "post": 2159, + "city": "Berrilee", + "phone1": "02-7968-9243", + "phone2": "0441-733-809", + "email": "ben_kellman@kellman.net.au", + "web": "http://www.andersonjulieaesq.com.au" + }, + { + "first_name": "Sharita", + "last_name": "Kruk", + "company_name": "Long, Robert B Jr", + "address": "8808 Northern Blvd", + "state": "NSW", + "post": 2160, + "city": "Merrylands", + "phone1": "02-7386-4544", + "phone2": "0442-976-132", + "email": "sharita_kruk@gmail.com", + "web": "http://www.longrobertbjr.com.au" + }, + { + "first_name": "Maryrose", + "last_name": "Cove", + "company_name": "Brown Bear Bait Company", + "address": "1 Vogel Rd", + "state": "NSW", + "post": 2166, + "city": "Cabramatta", + "phone1": "02-8010-8344", + "phone2": "0440-811-454", + "email": "mcove@hotmail.com", + "web": "http://www.brownbearbaitcompany.com.au" + }, + { + "first_name": "Johanna", + "last_name": "Saffer", + "company_name": "Springer Industrial Equip Inc", + "address": "750 Lancaster Ave", + "state": "NSW", + "post": 2194, + "city": "Campsie", + "phone1": "02-5970-1748", + "phone2": "0477-424-229", + "email": "johanna@yahoo.com", + "web": "http://www.springerindustrialequipinc.com.au" + }, + { + "first_name": "Kimberely", + "last_name": "Weyman", + "company_name": "Scientific Agrcltl Svc Inc", + "address": "7721 Harrison St", + "state": "NSW", + "post": 2208, + "city": "Kingsway West", + "phone1": "02-7091-8948", + "phone2": "0441-151-810", + "email": "kweyman@weyman.com.au", + "web": "http://www.scientificagrcltlsvcinc.com.au" + }, + { + "first_name": "Claudia", + "last_name": "Gawrych", + "company_name": "Abe Goldstein Ofc Furn", + "address": "3 Wall St #26", + "state": "NSW", + "post": 2229, + "city": "Lilli Pilli", + "phone1": "02-4246-3092", + "phone2": "0465-885-293", + "email": "claudia@gmail.com", + "web": "http://www.abegoldsteinofcfurn.com.au" + }, + { + "first_name": "German", + "last_name": "Dones", + "company_name": "Oaz Communications", + "address": "9 N Nevada Ave", + "state": "NSW", + "post": 2232, + "city": "Woronora", + "phone1": "02-2393-3289", + "phone2": "0495-882-447", + "email": "german@gmail.com", + "web": "http://www.oazcommunications.com.au" + }, + { + "first_name": "Rupert", + "last_name": "Hinkson", + "company_name": "Northwestern Mutual Life Ins", + "address": "1 E 17th St", + "state": "NSW", + "post": 2250, + "city": "East Gosford", + "phone1": "02-7160-2066", + "phone2": "0489-430-358", + "email": "rupert_hinkson@hinkson.net.au", + "web": "http://www.northwesternmutuallifeins.com.au" + }, + { + "first_name": "Darnell", + "last_name": "Moothart", + "company_name": "Melco Embroidery Systems", + "address": "40 E 19th Ave", + "state": "NSW", + "post": 2257, + "city": "Empire Bay", + "phone1": "02-3996-9188", + "phone2": "0419-656-117", + "email": "darnell_moothart@yahoo.com", + "web": "http://www.melcoembroiderysystems.com.au" + }, + { + "first_name": "Cordie", + "last_name": "Meikle", + "company_name": "Shapiro Bag Company", + "address": "40809 Rockburn Hill Rd", + "state": "NSW", + "post": 2259, + "city": "Hamlyn Terrace", + "phone1": "02-8727-4906", + "phone2": "0441-386-796", + "email": "cordie.meikle@hotmail.com", + "web": "http://www.shapirobagcompany.com.au" + }, + { + "first_name": "Camellia", + "last_name": "Pylant", + "company_name": "Blackley, William J Pa", + "address": "570 W Pine St", + "state": "NSW", + "post": 2259, + "city": "Tuggerawong", + "phone1": "02-5171-4345", + "phone2": "0423-446-913", + "email": "camellia_pylant@gmail.com", + "web": "http://www.blackleywilliamjpa.com.au" + }, + { + "first_name": "Jamal", + "last_name": "Korczynski", + "company_name": "Helricks Inc", + "address": "404 Broxton Ave", + "state": "NSW", + "post": 2261, + "city": "Bateau Bay", + "phone1": "02-3877-9654", + "phone2": "0427-970-674", + "email": "jamal_korczynski@gmail.com", + "web": "http://www.helricksinc.com.au" + }, + { + "first_name": "Holley", + "last_name": "Worland", + "company_name": "Lord Aeck & Sargent Architects", + "address": "2 Route 9", + "state": "NSW", + "post": 2262, + "city": "Blue Haven", + "phone1": "02-9885-9593", + "phone2": "0469-808-491", + "email": "holley.worland@hotmail.com", + "web": "http://www.lordaecksargentarchitects.com.au" + }, + { + "first_name": "Julio", + "last_name": "Puccini", + "company_name": "Streator Onized Fed Crdt Un", + "address": "2244 Franquette Ave", + "state": "NSW", + "post": 2263, + "city": "Gorokan", + "phone1": "02-5632-9914", + "phone2": "0452-766-262", + "email": "julio@gmail.com", + "web": "http://www.streatoronizedfedcrdtun.com.au" + }, + { + "first_name": "Lauran", + "last_name": "Tovmasyan", + "company_name": "United Christian Cmnty Crdt Un", + "address": "199 Maple Ave", + "state": "NSW", + "post": 2284, + "city": "Boolaroo", + "phone1": "02-2546-5344", + "phone2": "0459-680-488", + "email": "ltovmasyan@tovmasyan.net.au", + "web": "http://www.unitedchristiancmntycrdtun.com.au" + }, + { + "first_name": "Jacklyn", + "last_name": "Wojnar", + "company_name": "Nationwide Insurance", + "address": "16949 Harristown Rd", + "state": "NSW", + "post": 2287, + "city": "Summer Hill", + "phone1": "02-6287-8787", + "phone2": "0434-382-805", + "email": "jacklyn@hotmail.com", + "web": "http://www.nationwideinsurance.com.au" + }, + { + "first_name": "Norah", + "last_name": "Daleo", + "company_name": "Gateway Refrigeration", + "address": "754 Sammis Ave", + "state": "NSW", + "post": 2289, + "city": "Kotara Fair", + "phone1": "02-5322-6127", + "phone2": "0462-327-613", + "email": "ndaleo@daleo.net.au", + "web": "http://www.gatewayrefrigeration.com.au" + }, + { + "first_name": "Anastacia", + "last_name": "Carranzo", + "company_name": "Debbies Golden Touch", + "address": "654 Se 29th St", + "state": "NSW", + "post": 2298, + "city": "Waratah West", + "phone1": "02-6078-3417", + "phone2": "0481-193-115", + "email": "anastacia@yahoo.com", + "web": "http://www.debbiesgoldentouch.com.au" + }, + { + "first_name": "Lashawn", + "last_name": "Urion", + "company_name": "U Stor", + "address": "6 Argyle Rd", + "state": "NSW", + "post": 2300, + "city": "Bar Beach", + "phone1": "02-4794-6673", + "phone2": "0436-337-750", + "email": "lurion@yahoo.com", + "web": "http://www.ustor.com.au" + }, + { + "first_name": "Dorinda", + "last_name": "Markoff", + "company_name": "Alumi Span Inc", + "address": "5 Columbia Pike", + "state": "NSW", + "post": 2304, + "city": "Mayfield East", + "phone1": "02-6529-9317", + "phone2": "0412-153-776", + "email": "dorinda_markoff@hotmail.com", + "web": "http://www.alumispaninc.com.au" + }, + { + "first_name": "Florinda", + "last_name": "Gudgel", + "company_name": "Transit Cargo Services Inc", + "address": "53597 W Clarendon Ave", + "state": "NSW", + "post": 2311, + "city": "Halton", + "phone1": "02-2501-8301", + "phone2": "0444-376-606", + "email": "fgudgel@gudgel.com.au", + "web": "http://www.transitcargoservicesinc.com.au" + }, + { + "first_name": "Keva", + "last_name": "Moehring", + "company_name": "Rapid Reproductions Printing", + "address": "37564 Grace Ln", + "state": "NSW", + "post": 2317, + "city": "Salamander Bay", + "phone1": "02-9187-4769", + "phone2": "0448-465-944", + "email": "keva.moehring@moehring.net.au", + "web": "http://www.rapidreproductionsprinting.com.au" + }, + { + "first_name": "Della", + "last_name": "Selestewa", + "company_name": "Aztech Controls Inc", + "address": "64 Prairie Ave", + "state": "NSW", + "post": 2321, + "city": "Gillieston Heights", + "phone1": "02-4885-8382", + "phone2": "0456-162-659", + "email": "della.selestewa@gmail.com", + "web": "http://www.aztechcontrolsinc.com.au" + }, + { + "first_name": "Verdell", + "last_name": "Garness", + "company_name": "Ronald Massingill Pc", + "address": "39 Plummer St", + "state": "NSW", + "post": 2322, + "city": "Thornton", + "phone1": "02-6291-7620", + "phone2": "0474-367-875", + "email": "verdell.garness@yahoo.com", + "web": "http://www.ronaldmassingillpc.com.au" + }, + { + "first_name": "Karima", + "last_name": "Cheever", + "company_name": "Kwik Kopy Printing & Copying", + "address": "20907 65s S", + "state": "NSW", + "post": 2322, + "city": "Woodberry", + "phone1": "02-5977-8561", + "phone2": "0416-963-557", + "email": "karima_cheever@hotmail.com", + "web": "http://www.kwikkopyprintingcopying.com.au" + }, + { + "first_name": "Micheal", + "last_name": "Ocken", + "company_name": "New Orleans Credit Service Inc", + "address": "4 E Aven #284", + "state": "NSW", + "post": 2323, + "city": "Freemans Waterhole", + "phone1": "02-9828-4921", + "phone2": "0449-668-295", + "email": "micheal.ocken@ocken.net.au", + "web": "http://www.neworleanscreditserviceinc.com.au" + }, + { + "first_name": "Jerrod", + "last_name": "Luening", + "company_name": "Mcmillan, Regina E Esq", + "address": "6629 Main St", + "state": "NSW", + "post": 2324, + "city": "Tea Gardens", + "phone1": "02-9554-9632", + "phone2": "0451-857-511", + "email": "jerrod_luening@luening.com.au", + "web": "http://www.mcmillanreginaeesq.com.au" + }, + { + "first_name": "Ramonita", + "last_name": "Picotte", + "company_name": "Art Material Services Inc", + "address": "504 Steve Dr", + "state": "NSW", + "post": 2326, + "city": "Weston", + "phone1": "02-4360-8467", + "phone2": "0479-654-997", + "email": "ramonita_picotte@yahoo.com", + "web": "http://www.artmaterialservicesinc.com.au" + }, + { + "first_name": "Tori", + "last_name": "Tepley", + "company_name": "Mcwhirter Realty Corp", + "address": "1036 Malone Rd", + "state": "NSW", + "post": 2329, + "city": "Uarbry", + "phone1": "02-2493-1870", + "phone2": "0449-807-281", + "email": "tori@tepley.net.au", + "web": "http://www.mcwhirterrealtycorp.com.au" + }, + { + "first_name": "Jodi", + "last_name": "Naifeh", + "company_name": "Cahill, Steven J Esq", + "address": "89 N Himes Ave", + "state": "NSW", + "post": 2330, + "city": "Dural", + "phone1": "02-6193-5184", + "phone2": "0488-646-644", + "email": "jodi@hotmail.com", + "web": "http://www.cahillstevenjesq.com.au" + }, + { + "first_name": "Elliot", + "last_name": "Scatton", + "company_name": "Nilad Machining", + "address": "5 W Allen St", + "state": "NSW", + "post": 2333, + "city": "Mccullys Gap", + "phone1": "02-3647-9507", + "phone2": "0481-878-290", + "email": "elliot.scatton@hotmail.com", + "web": "http://www.niladmachining.com.au" + }, + { + "first_name": "Veronika", + "last_name": "Buchauer", + "company_name": "Adkins, Russell Esq", + "address": "6 Flex Ave", + "state": "NSW", + "post": 2339, + "city": "Willow Tree", + "phone1": "02-4202-5191", + "phone2": "0434-402-895", + "email": "veronika.buchauer@buchauer.net.au", + "web": "http://www.adkinsrussellesq.com.au" + }, + { + "first_name": "Rosamond", + "last_name": "Amlin", + "company_name": "Donovan, William P Esq", + "address": "5399 Mcwhorter Rd", + "state": "NSW", + "post": 2340, + "city": "Calala", + "phone1": "02-8007-5034", + "phone2": "0438-251-615", + "email": "rosamond.amlin@gmail.com", + "web": "http://www.donovanwilliampesq.com.au" + }, + { + "first_name": "Tamekia", + "last_name": "Kajder", + "company_name": "Santek Inc", + "address": "16 Talmadge Rd", + "state": "NSW", + "post": 2340, + "city": "West Tamworth", + "phone1": "02-7498-8576", + "phone2": "0418-218-423", + "email": "tamekia_kajder@yahoo.com", + "web": "http://www.santekinc.com.au" + }, + { + "first_name": "Janessa", + "last_name": "Ruthers", + "company_name": "Mackraft Signs", + "address": "1255 W Passaic St #1553", + "state": "NSW", + "post": 2372, + "city": "Bolivia", + "phone1": "02-2367-6845", + "phone2": "0410-358-989", + "email": "janessa@yahoo.com", + "web": "http://www.mackraftsigns.com.au" + }, + { + "first_name": "Quinn", + "last_name": "Weissbrodt", + "company_name": "Economy Stainless Supl Co Inc", + "address": "7659 Market St", + "state": "NSW", + "post": 2381, + "city": "Premer", + "phone1": "02-7239-9923", + "phone2": "0432-253-912", + "email": "qweissbrodt@weissbrodt.com.au", + "web": "http://www.economystainlesssuplcoinc.com.au" + }, + { + "first_name": "Julio", + "last_name": "Mikel", + "company_name": "Lombardi Bros Inc", + "address": "2803 N Catalina Ave", + "state": "NSW", + "post": 2388, + "city": "Pilliga", + "phone1": "02-6995-9902", + "phone2": "0464-594-316", + "email": "julio.mikel@mikel.net.au", + "web": "http://www.lombardibrosinc.com.au" + }, + { + "first_name": "Winifred", + "last_name": "Kingshott", + "company_name": "Remc South Eastern", + "address": "532 Saint Marks Ct", + "state": "NSW", + "post": 2420, + "city": "Marshdale", + "phone1": "02-5318-1342", + "phone2": "0471-558-187", + "email": "winifred.kingshott@yahoo.com", + "web": "http://www.remcsoutheastern.com.au" + }, + { + "first_name": "Colene", + "last_name": "Tolbent", + "company_name": "Saw Repair & Supply Co", + "address": "891 Union Pacific Ave #8463", + "state": "NSW", + "post": 2422, + "city": "Gloucester", + "phone1": "02-4376-1104", + "phone2": "0466-541-467", + "email": "colene.tolbent@tolbent.net.au", + "web": "http://www.sawrepairsupplyco.com.au" + }, + { + "first_name": "Santos", + "last_name": "Wisenbaker", + "company_name": "Brattleboro Printing Inc", + "address": "67729 180th St", + "state": "NSW", + "post": 2425, + "city": "Allworth", + "phone1": "02-2957-4812", + "phone2": "0411-294-588", + "email": "swisenbaker@wisenbaker.net.au", + "web": "http://www.brattleboroprintinginc.com.au" + }, + { + "first_name": "Desmond", + "last_name": "Amuso", + "company_name": "Carson, Scott W Esq", + "address": "79 Runamuck Pl", + "state": "NSW", + "post": 2429, + "city": "Caparra", + "phone1": "02-1706-8506", + "phone2": "0427-106-677", + "email": "desmond@hotmail.com", + "web": "http://www.carsonscottwesq.com.au" + }, + { + "first_name": "Patria", + "last_name": "Popa", + "company_name": "Blaney Sheet Metal", + "address": "21 W 2nd St", + "state": "NSW", + "post": 2429, + "city": "Killabakh", + "phone1": "02-6522-3993", + "phone2": "0493-319-728", + "email": "patria.popa@gmail.com", + "web": "http://www.blaneysheetmetal.com.au" + }, + { + "first_name": "Ben", + "last_name": "Majorga", + "company_name": "Voyager Travel Service", + "address": "13904 S 35th St", + "state": "NSW", + "post": 2429, + "city": "Wherrol Flat", + "phone1": "02-8171-9051", + "phone2": "0462-648-621", + "email": "ben.majorga@hotmail.com", + "web": "http://www.voyagertravelservice.com.au" + }, + { + "first_name": "Clarence", + "last_name": "Gabbert", + "company_name": "M C Publishing", + "address": "35983 Daubert St", + "state": "NSW", + "post": 2440, + "city": "Verges Creek", + "phone1": "02-4776-1384", + "phone2": "0486-302-652", + "email": "clarence.gabbert@gmail.com", + "web": "http://www.mcpublishing.com.au" + }, + { + "first_name": "Carlota", + "last_name": "Gephardt", + "company_name": "Ultimate In Womens Apparel The", + "address": "96605 Pioneer Rd", + "state": "NSW", + "post": 2441, + "city": "Kundabung", + "phone1": "02-5078-4389", + "phone2": "0415-230-654", + "email": "carlota.gephardt@gephardt.com.au", + "web": "http://www.ultimateinwomensapparelthe.com.au" + }, + { + "first_name": "Crista", + "last_name": "Padua", + "company_name": "Breathitt Fnrl Home & Mnmt Co", + "address": "1607 Laurel St", + "state": "NSW", + "post": 2443, + "city": "North Haven", + "phone1": "02-9472-5814", + "phone2": "0471-602-916", + "email": "crista_padua@gmail.com", + "web": "http://www.breathittfnrlhomemnmtco.com.au" + }, + { + "first_name": "Genevive", + "last_name": "Sanborn", + "company_name": "Central Hudson Ent Corp", + "address": "78 31st St", + "state": "NSW", + "post": 2446, + "city": "Bellangry", + "phone1": "02-6246-5711", + "phone2": "0431-413-930", + "email": "genevive@hotmail.com", + "web": "http://www.centralhudsonentcorp.com.au" + }, + { + "first_name": "Victor", + "last_name": "Laroia", + "company_name": "Midwest Marketing Inc", + "address": "166 N Maple Dr", + "state": "NSW", + "post": 2447, + "city": "Scotts Head", + "phone1": "02-8156-6969", + "phone2": "0421-987-667", + "email": "victor@laroia.net.au", + "web": "http://www.midwestmarketinginc.com.au" + }, + { + "first_name": "Johnson", + "last_name": "Mcenery", + "company_name": "Overseas General Business Co", + "address": "7 Hall St", + "state": "NSW", + "post": 2448, + "city": "Nambucca Heads", + "phone1": "02-1718-4983", + "phone2": "0446-721-262", + "email": "johnson@gmail.com", + "web": "http://www.overseasgeneralbusinessco.com.au" + }, + { + "first_name": "Keena", + "last_name": "Rebich", + "company_name": "Affilated Consulting Group Inc", + "address": "3713 Poway Rd", + "state": "NSW", + "post": 2452, + "city": "Sawtell", + "phone1": "02-4972-3570", + "phone2": "0468-708-802", + "email": "krebich@rebich.net.au", + "web": "http://www.affilatedconsultinggroupinc.com.au" + }, + { + "first_name": "Magda", + "last_name": "Lindbeck", + "company_name": "Thomas Torto Constr Corp", + "address": "6 Kings St #4790", + "state": "NSW", + "post": 2456, + "city": "Emerald Beach", + "phone1": "02-3713-3646", + "phone2": "0451-383-562", + "email": "magda_lindbeck@yahoo.com", + "web": "http://www.thomastortoconstrcorp.com.au" + }, + { + "first_name": "Earlean", + "last_name": "Suffern", + "company_name": "Booster Farms", + "address": "5351 E Thousand Oaks Blvd", + "state": "NSW", + "post": 2463, + "city": "Woodford", + "phone1": "02-9653-2199", + "phone2": "0452-941-575", + "email": "earlean.suffern@suffern.net.au", + "web": "http://www.boosterfarms.com.au" + }, + { + "first_name": "Karol", + "last_name": "Sarkissian", + "company_name": "Pep Boys Manny Moe & Jack", + "address": "9296 Prince Rodgers Ave", + "state": "NSW", + "post": 2469, + "city": "Chatsworth", + "phone1": "02-3490-2407", + "phone2": "0419-430-467", + "email": "ksarkissian@yahoo.com", + "web": "http://www.pepboysmannymoejack.com.au" + }, + { + "first_name": "Tegan", + "last_name": "Ebershoff", + "company_name": "Multiform Business Printing", + "address": "28 Aaronwood Ave Ne", + "state": "NSW", + "post": 2470, + "city": "Coombell", + "phone1": "02-6604-9720", + "phone2": "0499-760-910", + "email": "tegan_ebershoff@hotmail.com", + "web": "http://www.multiformbusinessprinting.com.au" + }, + { + "first_name": "Alica", + "last_name": "Alerte", + "company_name": "Valley Hi Bank", + "address": "9892 Hernando W", + "state": "NSW", + "post": 2474, + "city": "Grevillia", + "phone1": "02-6974-7785", + "phone2": "0423-831-803", + "email": "aalerte@alerte.com.au", + "web": "http://www.valleyhibank.com.au" + }, + { + "first_name": "Hester", + "last_name": "Dollins", + "company_name": "Eagle Plywood & Door Mfrs Inc", + "address": "4864 N 168th Ave", + "state": "NSW", + "post": 2474, + "city": "The Risk", + "phone1": "02-1622-6412", + "phone2": "0473-268-319", + "email": "hester_dollins@gmail.com", + "web": "http://www.eagleplywooddoormfrsinc.com.au" + }, + { + "first_name": "Fredric", + "last_name": "Johanningmeie", + "company_name": "Galaxie Displays Inc", + "address": "23 S Orange Ave #55", + "state": "NSW", + "post": 2477, + "city": "Wardell", + "phone1": "02-1827-1736", + "phone2": "0425-214-447", + "email": "fredric@hotmail.com", + "web": "http://www.galaxiedisplaysinc.com.au" + }, + { + "first_name": "Temeka", + "last_name": "Bodine", + "company_name": "Consolidated Manufacturing Inc", + "address": "407 E 57th Ave", + "state": "NSW", + "post": 2480, + "city": "Clunes", + "phone1": "02-2581-7479", + "phone2": "0452-835-388", + "email": "temeka.bodine@gmail.com", + "web": "http://www.consolidatedmanufacturinginc.com.au" + }, + { + "first_name": "Jesus", + "last_name": "Liversedge", + "company_name": "White, Mark A Cpa", + "address": "18514 E 4th St #8", + "state": "NSW", + "post": 2481, + "city": "Broken Head", + "phone1": "02-4418-5927", + "phone2": "0467-331-796", + "email": "jesus.liversedge@hotmail.com", + "web": "http://www.whitemarkacpa.com.au" + }, + { + "first_name": "Annice", + "last_name": "Kunich", + "company_name": "Hassanein, Nesa E Esq", + "address": "406 E 4th St", + "state": "NSW", + "post": 2481, + "city": "Tyagarah", + "phone1": "02-6769-6153", + "phone2": "0449-775-616", + "email": "annice_kunich@kunich.net.au", + "web": "http://www.hassaneinnesaeesq.com.au" + }, + { + "first_name": "Eliseo", + "last_name": "Mikovec", + "company_name": "Air Flow Co Inc", + "address": "25488 Brickell Ave", + "state": "NSW", + "post": 2483, + "city": "Ocean Shores", + "phone1": "02-9829-2371", + "phone2": "0497-955-472", + "email": "emikovec@mikovec.com.au", + "web": "http://www.airflowcoinc.com.au" + }, + { + "first_name": "Nancey", + "last_name": "Whal", + "company_name": "National Mortgage Co", + "address": "398 Fort Campbell Blvd #923", + "state": "NSW", + "post": 2484, + "city": "Cudgera Creek", + "phone1": "02-3248-3283", + "phone2": "0426-612-418", + "email": "nancey@whal.net.au", + "web": "http://www.nationalmortgageco.com.au" + }, + { + "first_name": "Rolf", + "last_name": "Gene", + "company_name": "Jolley, Mark A Cpa", + "address": "99968 Merced St #79", + "state": "NSW", + "post": 2529, + "city": "Flinders", + "phone1": "02-4458-2810", + "phone2": "0482-882-653", + "email": "rolf_gene@gene.com.au", + "web": "http://www.jolleymarkacpa.com.au" + }, + { + "first_name": "Sherrell", + "last_name": "Sprowl", + "company_name": "Country Comfort", + "address": "2 State Hwy", + "state": "NSW", + "post": 2529, + "city": "Oak Flats", + "phone1": "02-4074-4461", + "phone2": "0417-795-558", + "email": "sherrell_sprowl@hotmail.com", + "web": "http://www.countrycomfort.com.au" + }, + { + "first_name": "Barabara", + "last_name": "Amedro", + "company_name": "Unicircuit Inc", + "address": "95412 16th St #6", + "state": "NSW", + "post": 2530, + "city": "Yallah", + "phone1": "02-3449-6894", + "phone2": "0467-209-469", + "email": "barabara@amedro.net.au", + "web": "http://www.unicircuitinc.com.au" + }, + { + "first_name": "Reuben", + "last_name": "Hegland", + "company_name": "Welders Supply Service Inc", + "address": "6 W 39th St", + "state": "NSW", + "post": 2538, + "city": "Milton", + "phone1": "02-1402-5215", + "phone2": "0489-476-500", + "email": "reuben@yahoo.com", + "web": "http://www.welderssupplyserviceinc.com.au" + }, + { + "first_name": "Wava", + "last_name": "Ochs", + "company_name": "Knights Inn", + "address": "9 Chandler Ave #355", + "state": "NSW", + "post": 2539, + "city": "Bawley Point", + "phone1": "02-1222-7812", + "phone2": "0445-285-375", + "email": "wava.ochs@gmail.com", + "web": "http://www.knightsinn.com.au" + }, + { + "first_name": "Rodrigo", + "last_name": "Schuh", + "company_name": "Hospitality Design Group", + "address": "512 E Idaho St", + "state": "NSW", + "post": 2540, + "city": "Burrier", + "phone1": "02-3869-4096", + "phone2": "0430-503-397", + "email": "rodrigo_schuh@gmail.com", + "web": "http://www.hospitalitydesigngroup.com.au" + }, + { + "first_name": "Scot", + "last_name": "Jarva", + "company_name": "Biancas La Petite French Bkry", + "address": "68 Camden Rd", + "state": "NSW", + "post": 2550, + "city": "Kingswood", + "phone1": "02-9676-4462", + "phone2": "0445-480-672", + "email": "scot.jarva@jarva.com.au", + "web": "http://www.biancaslapetitefrenchbkry.com.au" + }, + { + "first_name": "Emmanuel", + "last_name": "Avera", + "company_name": "Bank Of New York Na", + "address": "3883 N Central Ave", + "state": "NSW", + "post": 2560, + "city": "Appin", + "phone1": "02-1987-8525", + "phone2": "0498-489-459", + "email": "emmanuel@yahoo.com", + "web": "http://www.bankofnewyorkna.com.au" + }, + { + "first_name": "Isreal", + "last_name": "Calizo", + "company_name": "Milner Inn", + "address": "2 Landmeier Rd", + "state": "NSW", + "post": 2580, + "city": "Wombeyan Caves", + "phone1": "02-3494-3282", + "phone2": "0455-472-994", + "email": "isreal_calizo@gmail.com", + "web": "http://www.milnerinn.com.au" + }, + { + "first_name": "Gracia", + "last_name": "Pecot", + "company_name": "Kern Valley Printing", + "address": "2452 Bango Rd", + "state": "NSW", + "post": 2620, + "city": "Gundaroo", + "phone1": "02-8081-3883", + "phone2": "0472-903-534", + "email": "gpecot@hotmail.com", + "web": "http://www.kernvalleyprinting.com.au" + }, + { + "first_name": "Gerardo", + "last_name": "Woodka", + "company_name": "Morris Downing & Sherred", + "address": "69206 Jackson Ave", + "state": "NSW", + "post": 2640, + "city": "Talmalmo", + "phone1": "02-6044-4682", + "phone2": "0443-795-912", + "email": "gerardo_woodka@hotmail.com", + "web": "http://www.morrisdowningsherred.com.au" + }, + { + "first_name": "Son", + "last_name": "Magnotta", + "company_name": "Lisko, Roy K Esq", + "address": "8 Collins Ave", + "state": "NSW", + "post": 2650, + "city": "Collingullie", + "phone1": "02-2376-7653", + "phone2": "0446-520-807", + "email": "son.magnotta@magnotta.net.au", + "web": "http://www.liskoroykesq.com.au" + }, + { + "first_name": "Onita", + "last_name": "Milbrandt", + "company_name": "Fairfield Inn By Marriott", + "address": "93 Bloomfield Ave #829", + "state": "NSW", + "post": 2650, + "city": "Wagga Wagga South", + "phone1": "02-1157-3829", + "phone2": "0485-105-744", + "email": "onita.milbrandt@milbrandt.com.au", + "web": "http://www.fairfieldinnbymarriott.com.au" + }, + { + "first_name": "Stephania", + "last_name": "Connon", + "company_name": "Printing Delite", + "address": "297 8th Ave S #9", + "state": "NSW", + "post": 2652, + "city": "Gumly Gumly", + "phone1": "02-5725-5992", + "phone2": "0416-443-185", + "email": "stephania.connon@connon.com.au", + "web": "http://www.printingdelite.com.au" + }, + { + "first_name": "Katy", + "last_name": "Saltourides", + "company_name": "J C S Iron Works Inc", + "address": "5040 Teague Rd #65", + "state": "NSW", + "post": 2663, + "city": "Junee", + "phone1": "02-3003-1369", + "phone2": "0481-278-876", + "email": "katy_saltourides@yahoo.com", + "web": "http://www.jcsironworksinc.com.au" + }, + { + "first_name": "Rebeca", + "last_name": "Baley", + "company_name": "R A C E Enterprises Inc", + "address": "9591 Bayshore Rd #637", + "state": "NSW", + "post": 2665, + "city": "Mirrool", + "phone1": "02-7049-7728", + "phone2": "0486-736-129", + "email": "rebeca_baley@hotmail.com", + "web": "http://www.raceenterprisesinc.com.au" + }, + { + "first_name": "Alysa", + "last_name": "Lehoux", + "company_name": "Signs Of The Times", + "address": "186 Geary Blvd #923", + "state": "NSW", + "post": 2666, + "city": "Trungley Hall", + "phone1": "02-1385-3480", + "phone2": "0475-366-466", + "email": "alysa@hotmail.com", + "web": "http://www.signsofthetimes.com.au" + }, + { + "first_name": "Anna", + "last_name": "Ovit", + "company_name": "Georgia Business Machines", + "address": "722 E Liberty St", + "state": "NSW", + "post": 2669, + "city": "Bygalorie", + "phone1": "02-4649-5341", + "phone2": "0459-496-184", + "email": "anna.ovit@hotmail.com", + "web": "http://www.georgiabusinessmachines.com.au" + }, + { + "first_name": "Craig", + "last_name": "Vandersloot", + "company_name": "Maverik Country Stores Inc", + "address": "3 S Willow St #82", + "state": "NSW", + "post": 2669, + "city": "Bygalorie", + "phone1": "02-5487-7528", + "phone2": "0492-408-109", + "email": "craig_vandersloot@yahoo.com", + "web": "http://www.maverikcountrystoresinc.com.au" + }, + { + "first_name": "Francene", + "last_name": "Skursky", + "company_name": "Cullen, Jack J Esq", + "address": "5 30w W #3083", + "state": "NSW", + "post": 2675, + "city": "Hillston", + "phone1": "02-5941-3178", + "phone2": "0485-944-417", + "email": "francene.skursky@skursky.net.au", + "web": "http://www.cullenjackjesq.com.au" + }, + { + "first_name": "Arlie", + "last_name": "Borra", + "company_name": "Analytical Laboratories", + "address": "59215 W 80th St", + "state": "NSW", + "post": 2700, + "city": "Morundah", + "phone1": "02-1211-3823", + "phone2": "0423-740-512", + "email": "arlie.borra@gmail.com", + "web": "http://www.analyticallaboratories.com.au" + }, + { + "first_name": "Susana", + "last_name": "Baumgarter", + "company_name": "Leigh, Lewis R Esq", + "address": "7 Elm Ave", + "state": "NSW", + "post": 2703, + "city": "Yanco", + "phone1": "02-5410-5137", + "phone2": "0491-209-954", + "email": "susana.baumgarter@yahoo.com", + "web": "http://www.leighlewisresq.com.au" + }, + { + "first_name": "Jacquelyne", + "last_name": "Rosso", + "company_name": "Barragar, Anne L Esq", + "address": "6940 Prospect Pl", + "state": "NSW", + "post": 2710, + "city": "Caldwell", + "phone1": "02-4565-6425", + "phone2": "0464-763-350", + "email": "jacquelyne.rosso@yahoo.com", + "web": "http://www.barragarannelesq.com.au" + }, + { + "first_name": "Marsha", + "last_name": "Farnham", + "company_name": "Comfort Inn Of Revere", + "address": "577 Cleveland Ave", + "state": "NSW", + "post": 2745, + "city": "Glenmore Park", + "phone1": "02-5402-8024", + "phone2": "0470-386-894", + "email": "marsha@farnham.com.au", + "web": "http://www.comfortinnofrevere.com.au" + }, + { + "first_name": "Magnolia", + "last_name": "Overbough", + "company_name": "Marin Sun Printing", + "address": "65484 Bainbridge Rd", + "state": "NSW", + "post": 2750, + "city": "Penrith", + "phone1": "02-7947-2980", + "phone2": "0488-624-111", + "email": "moverbough@overbough.com.au", + "web": "http://www.marinsunprinting.com.au" + }, + { + "first_name": "Shawnta", + "last_name": "Woodhams", + "company_name": "Leo, Frank M", + "address": "9 Gunnison St", + "state": "NSW", + "post": 2761, + "city": "Oakhurst", + "phone1": "02-5770-8546", + "phone2": "0410-116-435", + "email": "shawnta@woodhams.com.au", + "web": "http://www.leofrankm.com.au" + }, + { + "first_name": "Sanjuana", + "last_name": "Goodness", + "company_name": "Woods Manufactured Housing", + "address": "343 E Main St", + "state": "NSW", + "post": 2765, + "city": "Maraylya", + "phone1": "02-2208-2711", + "phone2": "0436-444-424", + "email": "sgoodness@goodness.net.au", + "web": "http://www.woodsmanufacturedhousing.com.au" + }, + { + "first_name": "Dorian", + "last_name": "Eischens", + "company_name": "Thomas Somerville Co", + "address": "1 Rock Island Rd #8", + "state": "NSW", + "post": 2786, + "city": "Bell", + "phone1": "02-7739-6600", + "phone2": "0428-946-162", + "email": "deischens@gmail.com", + "web": "http://www.thomassomervilleco.com.au" + }, + { + "first_name": "Annalee", + "last_name": "Graleski", + "company_name": "Lescure Company Inc", + "address": "9 Green Rd #5877", + "state": "NSW", + "post": 2793, + "city": "Darbys Falls", + "phone1": "02-6118-8773", + "phone2": "0447-563-450", + "email": "annalee.graleski@hotmail.com", + "web": "http://www.lescurecompanyinc.com.au" + }, + { + "first_name": "Jonell", + "last_name": "Biasi", + "company_name": "Pestmaster Services Inc", + "address": "75 Ryan Dr #70", + "state": "NSW", + "post": 2795, + "city": "Duramana", + "phone1": "02-5095-2983", + "phone2": "0486-778-453", + "email": "jbiasi@biasi.net.au", + "web": "http://www.pestmasterservicesinc.com.au" + }, + { + "first_name": "Aliza", + "last_name": "Akiyama", + "company_name": "Kelly, Charles G Esq", + "address": "700 Wilmson Rd", + "state": "NSW", + "post": 2798, + "city": "Forest Reefs", + "phone1": "02-9324-7803", + "phone2": "0445-609-538", + "email": "aliza@yahoo.com", + "web": "http://www.kellycharlesgesq.com.au" + }, + { + "first_name": "Ena", + "last_name": "Desjardiws", + "company_name": "Selsor, Robert J Esq", + "address": "60562 Ky Rt 321", + "state": "NSW", + "post": 2803, + "city": "Bendick Murrell", + "phone1": "02-5226-9402", + "phone2": "0415-961-606", + "email": "ena_desjardiws@desjardiws.com.au", + "web": "http://www.selsorrobertjesq.com.au" + }, + { + "first_name": "Hayley", + "last_name": "Taghon", + "company_name": "Biltmore Textile Co Inc", + "address": "72 Wyoming Ave", + "state": "NSW", + "post": 2806, + "city": "Eugowra", + "phone1": "02-1638-4380", + "phone2": "0491-976-291", + "email": "htaghon@taghon.net.au", + "web": "http://www.biltmoretextilecoinc.com.au" + }, + { + "first_name": "Reita", + "last_name": "Tabar", + "company_name": "Cooper Myers Y Co", + "address": "79620 Timber Dr", + "state": "NSW", + "post": 2820, + "city": "Arthurville", + "phone1": "02-3518-7078", + "phone2": "0431-669-863", + "email": "rtabar@hotmail.com", + "web": "http://www.coopermyersyco.com.au" + }, + { + "first_name": "Bettina", + "last_name": "Diciano", + "company_name": "Greater Ky Corp", + "address": "11999 Main St", + "state": "NSW", + "post": 2820, + "city": "Dripstone", + "phone1": "02-3566-7608", + "phone2": "0472-631-448", + "email": "bdiciano@diciano.com.au", + "web": "http://www.greaterkycorp.com.au" + }, + { + "first_name": "Jeannetta", + "last_name": "Vonstaden", + "company_name": "Burlington Homes Of Maine", + "address": "269 Executive Dr", + "state": "NSW", + "post": 2850, + "city": "Ilford", + "phone1": "02-8222-9319", + "phone2": "0435-530-318", + "email": "jvonstaden@gmail.com", + "web": "http://www.burlingtonhomesofmaine.com.au" + }, + { + "first_name": "Lenora", + "last_name": "Delacruz", + "company_name": "Stilling, William J Esq", + "address": "5400 Market St", + "state": "NSW", + "post": 2850, + "city": "Turill", + "phone1": "02-7862-5151", + "phone2": "0454-434-110", + "email": "lenora@delacruz.net.au", + "web": "http://www.stillingwilliamjesq.com.au" + }, + { + "first_name": "Elmer", + "last_name": "Redlon", + "company_name": "Kdhl Am Radio", + "address": "53 Euclid Ave", + "state": "NSW", + "post": 2871, + "city": "Forbes", + "phone1": "02-1075-4690", + "phone2": "0463-757-229", + "email": "elmer@hotmail.com", + "web": "http://www.kdhlamradio.com.au" + }, + { + "first_name": "Cassie", + "last_name": "Digregorio", + "company_name": "Musgrave, R Todd Esq", + "address": "8650 S Valley View Bld #6941", + "state": "NSW", + "post": 2877, + "city": "Condobolin", + "phone1": "02-7922-5417", + "phone2": "0433-677-495", + "email": "cdigregorio@digregorio.net.au", + "web": "http://www.musgravertoddesq.com.au" + }, + { + "first_name": "Adaline", + "last_name": "Galagher", + "company_name": "Debbie Reynolds Hotel", + "address": "32716 N Michigan Ave #82", + "state": "NSW", + "post": 3644, + "city": "Barooga", + "phone1": "02-3225-1954", + "phone2": "0416-156-336", + "email": "adaline.galagher@galagher.com.au", + "web": "http://www.debbiereynoldshotel.com.au" + }, + { + "first_name": "Rossana", + "last_name": "Biler", + "company_name": "Norfolk County Newton Lung", + "address": "60481 N Clark St", + "state": "NT", + "post": 810, + "city": "Lee Point", + "phone1": "08-9855-2125", + "phone2": "0461-569-843", + "email": "rossana.biler@biler.net.au", + "web": "http://www.norfolkcountynewtonlung.com.au" + }, + { + "first_name": "Kristian", + "last_name": "Ellerbusch", + "company_name": "Butler, Frank B Esq", + "address": "71585 S Ayon Ave #9", + "state": "NT", + "post": 810, + "city": "Wanguri", + "phone1": "08-2748-1250", + "phone2": "0442-982-316", + "email": "kristian@yahoo.com", + "web": "http://www.butlerfrankbesq.com.au" + }, + { + "first_name": "Annita", + "last_name": "Lek", + "company_name": "Busada Manufacturing Corp", + "address": "86274 Howell Mill Rd Nw", + "state": "NT", + "post": 812, + "city": "Karama", + "phone1": "08-3384-3181", + "phone2": "0426-888-203", + "email": "annita.lek@lek.net.au", + "web": "http://www.busadamanufacturingcorp.com.au" + }, + { + "first_name": "Barb", + "last_name": "Latina", + "company_name": "Die Craft Stamping", + "address": "1 National Plac #6619", + "state": "NT", + "post": 820, + "city": "Larrakeyah", + "phone1": "08-8506-7259", + "phone2": "0443-657-148", + "email": "blatina@hotmail.com", + "web": "http://www.diecraftstamping.com.au" + }, + { + "first_name": "Louis", + "last_name": "Brueck", + "company_name": "Sassy Lassie Dolls", + "address": "73 12th St", + "state": "NT", + "post": 820, + "city": "Larrakeyah", + "phone1": "08-5228-3628", + "phone2": "0471-229-188", + "email": "louis.brueck@brueck.net.au", + "web": "http://www.sassylassiedolls.com.au" + }, + { + "first_name": "Lorenza", + "last_name": "Schoenleber", + "company_name": "Mail Boxes Etc", + "address": "562 Nw Cornell Rd", + "state": "NT", + "post": 836, + "city": "Humpty Doo", + "phone1": "08-8081-7779", + "phone2": "0445-830-408", + "email": "lorenza.schoenleber@schoenleber.com.au", + "web": "http://www.mailboxesetc.com.au" + }, + { + "first_name": "Keshia", + "last_name": "Wasp", + "company_name": "Cole, Gary D Esq", + "address": "75 E Main", + "state": "NT", + "post": 846, + "city": "Adelaide River", + "phone1": "08-1683-9243", + "phone2": "0439-885-729", + "email": "kwasp@wasp.net.au", + "web": "http://www.colegarydesq.com.au" + }, + { + "first_name": "Catrice", + "last_name": "Fowlkes", + "company_name": "Kappus Co", + "address": "39828 Abbott Rd", + "state": "QLD", + "post": 4001, + "city": "Waterfront Place", + "phone1": "07-9032-5149", + "phone2": "0418-429-485", + "email": "cfowlkes@hotmail.com", + "web": "http://www.kappusco.com.au" + }, + { + "first_name": "Arleen", + "last_name": "Kane", + "company_name": "Colosi, Darryl J Esq", + "address": "78717 Graves Ln", + "state": "QLD", + "post": 4009, + "city": "Eagle Farm", + "phone1": "07-3476-2066", + "phone2": "0430-271-168", + "email": "arleen.kane@hotmail.com", + "web": "http://www.colosidarryljesq.com.au" + }, + { + "first_name": "Rose", + "last_name": "Jebb", + "company_name": "Old Cider Mill Grove", + "address": "27916 Tarrytown Rd", + "state": "QLD", + "post": 4030, + "city": "Wooloowin", + "phone1": "07-4941-9471", + "phone2": "0496-441-929", + "email": "rose@jebb.net.au", + "web": "http://www.oldcidermillgrove.com.au" + }, + { + "first_name": "Glory", + "last_name": "Carlo", + "company_name": "Swanson Travel", + "address": "50808 A Pamalee Dr", + "state": "QLD", + "post": 4051, + "city": "Grange", + "phone1": "07-9265-7183", + "phone2": "0490-570-424", + "email": "glory_carlo@gmail.com", + "web": "http://www.swansontravel.com.au" + }, + { + "first_name": "Veda", + "last_name": "Mishkin", + "company_name": "Smith, Sean O Esq", + "address": "98247 Russell Blvd", + "state": "QLD", + "post": 4053, + "city": "Stafford Heights", + "phone1": "07-6034-2422", + "phone2": "0474-823-917", + "email": "veda.mishkin@mishkin.com.au", + "web": "http://www.smithseanoesq.com.au" + }, + { + "first_name": "Merrilee", + "last_name": "Fajen", + "company_name": "Gazette Record", + "address": "1 Jenks Ave", + "state": "QLD", + "post": 4055, + "city": "Upper Kedron", + "phone1": "07-9104-1459", + "phone2": "0489-493-308", + "email": "merrilee@fajen.net.au", + "web": "http://www.gazetterecord.com.au" + }, + { + "first_name": "Ryann", + "last_name": "Riston", + "company_name": "Best Western Gloucester Inn", + "address": "38494 Port Reading Ave", + "state": "QLD", + "post": 4064, + "city": "Milton", + "phone1": "07-9920-3550", + "phone2": "0423-341-752", + "email": "ryann@hotmail.com", + "web": "http://www.bestwesterngloucesterinn.com.au" + }, + { + "first_name": "Zana", + "last_name": "Ploszaj", + "company_name": "Community Insurance Agy Inc", + "address": "25 Swift Ave", + "state": "QLD", + "post": 4066, + "city": "Auchenflower", + "phone1": "07-7991-8880", + "phone2": "0430-656-502", + "email": "zana_ploszaj@ploszaj.net.au", + "web": "http://www.communityinsuranceagyinc.com.au" + }, + { + "first_name": "Honey", + "last_name": "Lymaster", + "company_name": "Joiner & Goudeau Law Offices", + "address": "7 Wilshire Blvd", + "state": "QLD", + "post": 4068, + "city": "Taringa", + "phone1": "07-8087-2603", + "phone2": "0411-717-109", + "email": "honey_lymaster@lymaster.net.au", + "web": "http://www.joinergoudeaulawoffices.com.au" + }, + { + "first_name": "Nida", + "last_name": "Fitz", + "company_name": "Star Limousine", + "address": "17720 Beach Blvd", + "state": "QLD", + "post": 4075, + "city": "Oxley", + "phone1": "07-7445-2572", + "phone2": "0473-495-435", + "email": "nfitz@hotmail.com", + "web": "http://www.starlimousine.com.au" + }, + { + "first_name": "Adelaide", + "last_name": "Ender", + "company_name": "Williams Design Group", + "address": "175 N Central Ave", + "state": "QLD", + "post": 4120, + "city": "Greenslopes", + "phone1": "07-7538-5504", + "phone2": "0473-505-816", + "email": "aender@gmail.com", + "web": "http://www.williamsdesigngroup.com.au" + }, + { + "first_name": "Tabetha", + "last_name": "Bai", + "company_name": "Howard Johnson", + "address": "2 Gateway Ctr", + "state": "QLD", + "post": 4122, + "city": "Upper Mount Gravatt", + "phone1": "07-6813-6477", + "phone2": "0438-141-107", + "email": "tabetha.bai@gmail.com", + "web": "http://www.howardjohnson.com.au" + }, + { + "first_name": "Tashia", + "last_name": "Charney", + "company_name": "Gallagher, Owen Esq", + "address": "9 13th Ave S", + "state": "QLD", + "post": 4128, + "city": "Shailer Park", + "phone1": "07-7659-5711", + "phone2": "0450-769-383", + "email": "tashia.charney@charney.net.au", + "web": "http://www.gallagherowenesq.com.au" + }, + { + "first_name": "Adrianna", + "last_name": "Poncio", + "company_name": "H T Communications Group Ltd", + "address": "9 34th Ave #69", + "state": "QLD", + "post": 4205, + "city": "Bethania", + "phone1": "07-6113-9653", + "phone2": "0432-130-553", + "email": "adrianna@poncio.com.au", + "web": "http://www.htcommunicationsgroupltd.com.au" + }, + { + "first_name": "Shantell", + "last_name": "Lizama", + "company_name": "Astromatic", + "address": "9787 Dunksferry Rd", + "state": "QLD", + "post": 4207, + "city": "Logan Village", + "phone1": "07-5346-5917", + "phone2": "0459-937-449", + "email": "shantell.lizama@gmail.com", + "web": "http://www.astromatic.com.au" + }, + { + "first_name": "Wilford", + "last_name": "Pata", + "company_name": "Era Mclachlan John Morgan Real", + "address": "8855 North Ave", + "state": "QLD", + "post": 4214, + "city": "Ashmore", + "phone1": "07-7445-2538", + "phone2": "0445-797-121", + "email": "wilford_pata@pata.net.au", + "web": "http://www.eramclachlanjohnmorganreal.com.au" + }, + { + "first_name": "Theresia", + "last_name": "Salomone", + "company_name": "Curran, Carol N Esq", + "address": "1337 N 26th St", + "state": "QLD", + "post": 4217, + "city": "Bundall", + "phone1": "07-8250-2277", + "phone2": "0437-687-429", + "email": "theresia_salomone@gmail.com", + "web": "http://www.currancarolnesq.com.au" + }, + { + "first_name": "Carli", + "last_name": "Bame", + "company_name": "Hampton Inn Hotel", + "address": "6584 S Bascom Ave #371", + "state": "QLD", + "post": 4221, + "city": "Elanora", + "phone1": "07-5354-7251", + "phone2": "0499-207-236", + "email": "carli@yahoo.com", + "web": "http://www.hamptoninnhotel.com.au" + }, + { + "first_name": "Dante", + "last_name": "Freiman", + "company_name": "Gaylord", + "address": "76 Daylight Way #7", + "state": "QLD", + "post": 4227, + "city": "Varsity Lakes", + "phone1": "07-1964-4238", + "phone2": "0432-682-937", + "email": "dante_freiman@freiman.net.au", + "web": "http://www.gaylord.com.au" + }, + { + "first_name": "Gladis", + "last_name": "Kazemi", + "company_name": "Dippin Flavors", + "address": "3266 Welsh Rd", + "state": "QLD", + "post": 4227, + "city": "Varsity Lakes", + "phone1": "07-6444-3666", + "phone2": "0444-157-156", + "email": "gkazemi@kazemi.net.au", + "web": "http://www.dippinflavors.com.au" + }, + { + "first_name": "Paris", + "last_name": "Kinnison", + "company_name": "Saratoga Land Office", + "address": "2 Old Corlies Ave", + "state": "QLD", + "post": 4305, + "city": "Eastern Heights", + "phone1": "07-4518-4450", + "phone2": "0454-257-906", + "email": "paris.kinnison@gmail.com", + "web": "http://www.saratogalandoffice.com.au" + }, + { + "first_name": "Jackie", + "last_name": "Kellebrew", + "company_name": "Senior Village Nursing Home", + "address": "25 Sw End Blvd #609", + "state": "QLD", + "post": 4311, + "city": "Coominya", + "phone1": "07-9840-6419", + "phone2": "0448-206-407", + "email": "jackie.kellebrew@kellebrew.com.au", + "web": "http://www.seniorvillagenursinghome.com.au" + }, + { + "first_name": "Pearlene", + "last_name": "Boudrie", + "company_name": "Design Rite Homes Inc", + "address": "8978 W Henrietta Rd", + "state": "QLD", + "post": 4311, + "city": "Minden", + "phone1": "07-4463-7223", + "phone2": "0462-627-260", + "email": "pboudrie@boudrie.net.au", + "web": "http://www.designritehomesinc.com.au" + }, + { + "first_name": "Dorethea", + "last_name": "Taketa", + "company_name": "Fraser Dante Ltd", + "address": "7 N 4th St", + "state": "QLD", + "post": 4313, + "city": "Lower Cressbrook", + "phone1": "07-2209-2731", + "phone2": "0436-606-487", + "email": "dtaketa@taketa.net.au", + "web": "http://www.fraserdanteltd.com.au" + }, + { + "first_name": "Trina", + "last_name": "Oto", + "company_name": "N Amer Plast & Chemls Co Inc", + "address": "6149 Kapiolani Blvd #6", + "state": "QLD", + "post": 4343, + "city": "Placid Hills", + "phone1": "07-1153-8567", + "phone2": "0460-377-727", + "email": "trina@oto.com.au", + "web": "http://www.namerplastchemlscoinc.com.au" + }, + { + "first_name": "Shawna", + "last_name": "Albrough", + "company_name": "Wood, J Scott Esq", + "address": "43157 Cypress St", + "state": "QLD", + "post": 4343, + "city": "Ringwood", + "phone1": "07-7977-6039", + "phone2": "0441-255-802", + "email": "shawna.albrough@albrough.com.au", + "web": "http://www.woodjscottesq.com.au" + }, + { + "first_name": "Amira", + "last_name": "Chudej", + "company_name": "Public Works Department", + "address": "3684 N Wacker Dr", + "state": "QLD", + "post": 4343, + "city": "Rockside", + "phone1": "07-8135-3271", + "phone2": "0478-867-289", + "email": "amira.chudej@chudej.net.au", + "web": "http://www.publicworksdepartment.com.au" + }, + { + "first_name": "Dylan", + "last_name": "Chaleun", + "company_name": "Berhanu International Foods", + "address": "5 Montana Ave", + "state": "QLD", + "post": 4344, + "city": "Lilydale", + "phone1": "07-2319-2889", + "phone2": "0412-631-864", + "email": "dylan_chaleun@hotmail.com", + "web": "http://www.berhanuinternationalfoods.com.au" + }, + { + "first_name": "Leigha", + "last_name": "Capelli", + "company_name": "Saturn Of Delray", + "address": "8039 Howard Ave", + "state": "QLD", + "post": 4350, + "city": "East Toowoomba", + "phone1": "07-4823-9785", + "phone2": "0432-580-634", + "email": "leigha.capelli@capelli.com.au", + "web": "http://www.saturnofdelray.com.au" + }, + { + "first_name": "Malcolm", + "last_name": "Gohlke", + "company_name": "Imagelink", + "address": "53247 Montgomery St #36", + "state": "QLD", + "post": 4350, + "city": "Southtown", + "phone1": "07-9826-3950", + "phone2": "0450-887-422", + "email": "malcolm@yahoo.com", + "web": "http://www.imagelink.com.au" + }, + { + "first_name": "Gerri", + "last_name": "Perra", + "company_name": "Byrne, Beth Hobbs", + "address": "15126 Goldenwest St", + "state": "QLD", + "post": 4350, + "city": "Toowoomba South", + "phone1": "07-6019-7861", + "phone2": "0416-887-937", + "email": "gerri@yahoo.com", + "web": "http://www.byrnebethhobbs.com.au" + }, + { + "first_name": "Linette", + "last_name": "Summerfield", + "company_name": "Mortenson Broadcasting Co", + "address": "78 S Robson", + "state": "QLD", + "post": 4355, + "city": "Crows Nest", + "phone1": "07-7489-7577", + "phone2": "0453-580-611", + "email": "linette.summerfield@hotmail.com", + "web": "http://www.mortensonbroadcastingco.com.au" + }, + { + "first_name": "Gerald", + "last_name": "Kloepper", + "company_name": "Pleasantville Finance Dept", + "address": "42 United Dr", + "state": "QLD", + "post": 4355, + "city": "Pierces Creek", + "phone1": "07-4297-4607", + "phone2": "0437-819-518", + "email": "gerald@yahoo.com", + "web": "http://www.pleasantvillefinancedept.com.au" + }, + { + "first_name": "Alfreda", + "last_name": "Delsoin", + "company_name": "Harris, Eric C Esq", + "address": "4373 Washington St", + "state": "QLD", + "post": 4356, + "city": "Bongeen", + "phone1": "07-7369-8849", + "phone2": "0419-246-570", + "email": "adelsoin@yahoo.com", + "web": "http://www.harrisericcesq.com.au" + }, + { + "first_name": "Vince", + "last_name": "Siena", + "company_name": "Vincent J Petti & Co", + "address": "70 S 18th Pl", + "state": "QLD", + "post": 4356, + "city": "Purrawunda", + "phone1": "07-3184-9989", + "phone2": "0411-732-965", + "email": "vince_siena@yahoo.com", + "web": "http://www.vincentjpettico.com.au" + }, + { + "first_name": "Alease", + "last_name": "Strawbridge", + "company_name": "Marscher, William F Iii", + "address": "35673 Annapolis Rd #190", + "state": "QLD", + "post": 4359, + "city": "Ascot", + "phone1": "07-3760-1546", + "phone2": "0497-868-525", + "email": "alease_strawbridge@strawbridge.com.au", + "web": "http://www.marscherwilliamfiii.com.au" + }, + { + "first_name": "Major", + "last_name": "Studwell", + "company_name": "Wood Sign & Banner Co", + "address": "5 Buford Hwy Ne #3", + "state": "QLD", + "post": 4362, + "city": "Allora", + "phone1": "07-1377-6898", + "phone2": "0426-784-480", + "email": "major@gmail.com", + "web": "http://www.woodsignbannerco.com.au" + }, + { + "first_name": "Nicholle", + "last_name": "Hulme", + "company_name": "Oxner Vallerie", + "address": "7 N Glenn Rd", + "state": "QLD", + "post": 4387, + "city": "Whetstone", + "phone1": "07-7144-4719", + "phone2": "0476-915-729", + "email": "nicholle_hulme@hulme.com.au", + "web": "http://www.oxnervallerie.com.au" + }, + { + "first_name": "Bea", + "last_name": "Iida", + "company_name": "Reliance Credit Union", + "address": "72 W Ripley Ave", + "state": "QLD", + "post": 4401, + "city": "Oakey", + "phone1": "07-6984-9278", + "phone2": "0493-653-304", + "email": "bea_iida@iida.net.au", + "web": "http://www.reliancecreditunion.com.au" + }, + { + "first_name": "Ines", + "last_name": "Tokich", + "company_name": "De Woskin, Alan E Esq", + "address": "192 N Sheffield Ave", + "state": "QLD", + "post": 4405, + "city": "Bunya Mountains", + "phone1": "07-5017-7337", + "phone2": "0481-799-605", + "email": "ines_tokich@tokich.net.au", + "web": "http://www.dewoskinalaneesq.com.au" + }, + { + "first_name": "Fanny", + "last_name": "Stoneking", + "company_name": "Di Giacomo, Richard F Esq", + "address": "50968 Kurtz St #45", + "state": "QLD", + "post": 4411, + "city": "Warra", + "phone1": "07-3721-9123", + "phone2": "0465-778-983", + "email": "fstoneking@hotmail.com", + "web": "http://www.digiacomorichardfesq.com.au" + }, + { + "first_name": "Mica", + "last_name": "Simco", + "company_name": "Katz Brothers Market Inc", + "address": "5610 Holliday Rd", + "state": "QLD", + "post": 4412, + "city": "Brigalow", + "phone1": "07-1037-3391", + "phone2": "0471-169-302", + "email": "msimco@gmail.com", + "web": "http://www.katzbrothersmarketinc.com.au" + }, + { + "first_name": "Muriel", + "last_name": "Drozdowski", + "company_name": "Harfred Oil Co", + "address": "1 S Maryland Pky", + "state": "QLD", + "post": 4454, + "city": "Durham Downs", + "phone1": "07-5686-8088", + "phone2": "0473-213-595", + "email": "muriel_drozdowski@hotmail.com", + "web": "http://www.harfredoilco.com.au" + }, + { + "first_name": "Ruth", + "last_name": "Niglio", + "company_name": "Amberley Suite Hotels", + "address": "6 W Cornelia Ave", + "state": "QLD", + "post": 4455, + "city": "Orange Hill", + "phone1": "07-5128-8956", + "phone2": "0428-843-553", + "email": "ruth.niglio@hotmail.com", + "web": "http://www.amberleysuitehotels.com.au" + }, + { + "first_name": "Hailey", + "last_name": "Kopet", + "company_name": "Stokes, Fred J Esq", + "address": "5 France Ave S", + "state": "QLD", + "post": 4481, + "city": "Tanbar", + "phone1": "07-3799-1667", + "phone2": "0443-979-875", + "email": "hailey_kopet@kopet.com.au", + "web": "http://www.stokesfredjesq.com.au" + }, + { + "first_name": "Louann", + "last_name": "Susmilch", + "company_name": "M Sorkin Sanford Associates", + "address": "6 Lafayette St #3034", + "state": "QLD", + "post": 4489, + "city": "Wyandra", + "phone1": "07-5035-4889", + "phone2": "0489-594-290", + "email": "louann_susmilch@yahoo.com", + "web": "http://www.msorkinsanfordassociates.com.au" + }, + { + "first_name": "Miles", + "last_name": "Feldner", + "company_name": "Antietam Cable Television", + "address": "28465 Downey Ave #4238", + "state": "QLD", + "post": 4490, + "city": "Barringun", + "phone1": "07-8561-5894", + "phone2": "0475-337-188", + "email": "miles@hotmail.com", + "web": "http://www.antietamcabletelevision.com.au" + }, + { + "first_name": "Mose", + "last_name": "Vonseggern", + "company_name": "Art Concepts", + "address": "1 E Main St", + "state": "QLD", + "post": 4493, + "city": "Hungerford", + "phone1": "07-5769-8004", + "phone2": "0467-531-601", + "email": "mose_vonseggern@hotmail.com", + "web": "http://www.artconcepts.com.au" + }, + { + "first_name": "Lynette", + "last_name": "Beaureguard", + "company_name": "Young, Craig C Md", + "address": "630 E Plano Pky", + "state": "QLD", + "post": 4494, + "city": "Tarawera", + "phone1": "07-6679-3722", + "phone2": "0417-544-301", + "email": "lynette.beaureguard@hotmail.com", + "web": "http://www.youngcraigcmd.com.au" + }, + { + "first_name": "Felicitas", + "last_name": "Gong", + "company_name": "Telcom Communication Center", + "address": "173 Howard Ave", + "state": "QLD", + "post": 4497, + "city": "Weengallon", + "phone1": "07-8516-6453", + "phone2": "0470-655-661", + "email": "fgong@gong.com.au", + "web": "http://www.telcomcommunicationcenter.com.au" + }, + { + "first_name": "Rosina", + "last_name": "Sidhu", + "company_name": "Anchorage Yamaha", + "address": "660 N Green St", + "state": "QLD", + "post": 4505, + "city": "Burpengary", + "phone1": "07-6460-4488", + "phone2": "0458-753-924", + "email": "rosina_sidhu@gmail.com", + "web": "http://www.anchorageyamaha.com.au" + }, + { + "first_name": "Emeline", + "last_name": "Sotelo", + "company_name": "Reporters Inc", + "address": "46 Broadway St", + "state": "QLD", + "post": 4516, + "city": "Elimbah", + "phone1": "07-7240-6480", + "phone2": "0451-790-704", + "email": "emeline@gmail.com", + "web": "http://www.reportersinc.com.au" + }, + { + "first_name": "Kent", + "last_name": "Ivans", + "company_name": "Demer Normann Smith Ltd", + "address": "56710 Euclid Ave", + "state": "QLD", + "post": 4520, + "city": "Camp Mountain", + "phone1": "07-8661-4016", + "phone2": "0429-746-524", + "email": "kent_ivans@yahoo.com", + "web": "http://www.demernormannsmithltd.com.au" + }, + { + "first_name": "Mabelle", + "last_name": "Ramero", + "company_name": "Mchale, Joseph G Esq", + "address": "15258 W Charleston Blvd", + "state": "QLD", + "post": 4551, + "city": "Aroona", + "phone1": "07-8857-6463", + "phone2": "0427-579-588", + "email": "mabelle.ramero@ramero.net.au", + "web": "http://www.mchalejosephgesq.com.au" + }, + { + "first_name": "Katlyn", + "last_name": "Flitcroft", + "company_name": "Bill, Michael M", + "address": "7177 E 14th St", + "state": "QLD", + "post": 4552, + "city": "Maleny", + "phone1": "07-1778-9968", + "phone2": "0465-519-356", + "email": "kflitcroft@hotmail.com", + "web": "http://www.billmichaelm.com.au" + }, + { + "first_name": "Anthony", + "last_name": "Stever", + "company_name": "Burton & Davis", + "address": "91114 Grand Ave", + "state": "QLD", + "post": 4555, + "city": "Hunchy", + "phone1": "07-7092-8542", + "phone2": "0495-801-419", + "email": "anthony.stever@hotmail.com", + "web": "http://www.burtondavis.com.au" + }, + { + "first_name": "Lacey", + "last_name": "Francis", + "company_name": "Anthony & Langford", + "address": "44 105th Ave", + "state": "QLD", + "post": 4555, + "city": "Hunchy", + "phone1": "07-4119-3981", + "phone2": "0415-135-989", + "email": "lacey.francis@francis.net.au", + "web": "http://www.anthonylangford.com.au" + }, + { + "first_name": "Maybelle", + "last_name": "Bewley", + "company_name": "Angelo International", + "address": "387 Airway Cir #62", + "state": "QLD", + "post": 4560, + "city": "Mapleton", + "phone1": "07-9387-7293", + "phone2": "0448-221-640", + "email": "mbewley@yahoo.com", + "web": "http://www.angelointernational.com.au" + }, + { + "first_name": "Stephaine", + "last_name": "Manin", + "company_name": "Malmon, Alvin S Esq", + "address": "8202 Cornwall Rd", + "state": "QLD", + "post": 4562, + "city": "Eumundi", + "phone1": "07-2031-6566", + "phone2": "0438-847-885", + "email": "stephaine_manin@yahoo.com", + "web": "http://www.malmonalvinsesq.com.au" + }, + { + "first_name": "Isadora", + "last_name": "Yurick", + "company_name": "J M Edmunds Co Inc", + "address": "6 Mahler Rd", + "state": "QLD", + "post": 4564, + "city": "Pacific Paradise", + "phone1": "07-9595-6042", + "phone2": "0412-855-847", + "email": "iyurick@hotmail.com", + "web": "http://www.jmedmundscoinc.com.au" + }, + { + "first_name": "Tijuana", + "last_name": "Mesch", + "company_name": "Rochelle Cold Storage", + "address": "61 Center St #8", + "state": "QLD", + "post": 4570, + "city": "Corella", + "phone1": "07-1415-9307", + "phone2": "0444-393-673", + "email": "tijuana_mesch@gmail.com", + "web": "http://www.rochellecoldstorage.com.au" + }, + { + "first_name": "Twanna", + "last_name": "Sieber", + "company_name": "Rudolph, William S Cpa", + "address": "66094 Pioneer Rd", + "state": "QLD", + "post": 4570, + "city": "Upper Glastonbury", + "phone1": "07-5235-7319", + "phone2": "0451-406-157", + "email": "twanna@yahoo.com", + "web": "http://www.rudolphwilliamscpa.com.au" + }, + { + "first_name": "Catherin", + "last_name": "Aguele", + "company_name": "Hanna, Robert J Esq", + "address": "75962 E Drinker St", + "state": "QLD", + "post": 4605, + "city": "Sunny Nook", + "phone1": "07-6476-1399", + "phone2": "0444-150-950", + "email": "caguele@gmail.com", + "web": "http://www.hannarobertjesq.com.au" + }, + { + "first_name": "Albert", + "last_name": "Sonier", + "company_name": "Quartzite Processing Inc", + "address": "4 Brookcrest Dr #7786", + "state": "QLD", + "post": 4610, + "city": "Inverlaw", + "phone1": "07-9354-2612", + "phone2": "0420-575-355", + "email": "albert.sonier@gmail.com", + "web": "http://www.quartziteprocessinginc.com.au" + }, + { + "first_name": "Julieta", + "last_name": "Cropsey", + "company_name": "Atrium Marketing Inc", + "address": "9 Commerce Cir", + "state": "QLD", + "post": 4610, + "city": "Kingaroy", + "phone1": "07-4217-6258", + "phone2": "0420-286-404", + "email": "julieta@yahoo.com", + "web": "http://www.atriummarketinginc.com.au" + }, + { + "first_name": "Stevie", + "last_name": "Hallo", + "company_name": "Landrum Temporary Services", + "address": "22222 Acoma St", + "state": "QLD", + "post": 4613, + "city": "Proston", + "phone1": "07-9997-3366", + "phone2": "0497-622-620", + "email": "stevie.hallo@hotmail.com", + "web": "http://www.landrumtemporaryservices.com.au" + }, + { + "first_name": "Wilbert", + "last_name": "Beckes", + "company_name": "Alvis, John W Esq", + "address": "2799 Cajon Blvd", + "state": "QLD", + "post": 4615, + "city": "East Nanango", + "phone1": "07-9178-6430", + "phone2": "0455-947-547", + "email": "wilbert@hotmail.com", + "web": "http://www.alvisjohnwesq.com.au" + }, + { + "first_name": "Deeann", + "last_name": "Nicklous", + "company_name": "Philip Kingsley Trichological", + "address": "79 Mechanic St", + "state": "QLD", + "post": 4615, + "city": "Pimpimbudgee", + "phone1": "07-6382-5073", + "phone2": "0440-980-784", + "email": "deeann_nicklous@gmail.com", + "web": "http://www.philipkingsleytrichological.com.au" + }, + { + "first_name": "Ardella", + "last_name": "Dieterich", + "company_name": "Custom Jig Grinding", + "address": "94 Delta Fair Blvd #2702", + "state": "QLD", + "post": 4615, + "city": "Runnymede", + "phone1": "07-3581-9462", + "phone2": "0426-488-593", + "email": "ardella.dieterich@yahoo.com", + "web": "http://www.customjiggrinding.com.au" + }, + { + "first_name": "Alpha", + "last_name": "Prudhomme", + "company_name": "Davis, J Mark Esq", + "address": "979 S La Cienega Blvd #627", + "state": "QLD", + "post": 4615, + "city": "Tarong", + "phone1": "07-9053-8045", + "phone2": "0464-687-686", + "email": "aprudhomme@hotmail.com", + "web": "http://www.davisjmarkesq.com.au" + }, + { + "first_name": "Ira", + "last_name": "Zihal", + "company_name": "American Express Publshng Corp", + "address": "6 W Meadow St", + "state": "QLD", + "post": 4621, + "city": "Degilbo", + "phone1": "07-4724-9987", + "phone2": "0466-603-340", + "email": "ira.zihal@yahoo.com", + "web": "http://www.americanexpresspublshngcorp.com.au" + }, + { + "first_name": "Jill", + "last_name": "Davoren", + "company_name": "Broaches Inc", + "address": "26 Old William Penn Hwy", + "state": "QLD", + "post": 4626, + "city": "Boynewood", + "phone1": "07-1698-9047", + "phone2": "0468-451-905", + "email": "jill_davoren@davoren.net.au", + "web": "http://www.broachesinc.com.au" + }, + { + "first_name": "Ling", + "last_name": "Dibello", + "company_name": "Reese Press Inc", + "address": "6 Monte Ave", + "state": "QLD", + "post": 4659, + "city": "Beelbi Creek", + "phone1": "07-1330-6750", + "phone2": "0444-175-406", + "email": "ling_dibello@yahoo.com", + "web": "http://www.reesepressinc.com.au" + }, + { + "first_name": "Mary", + "last_name": "Dingler", + "company_name": "Autocrat Inc", + "address": "470 W Irving Park Rd", + "state": "QLD", + "post": 4670, + "city": "Bundaberg North", + "phone1": "07-3963-4469", + "phone2": "0452-920-972", + "email": "mary.dingler@gmail.com", + "web": "http://www.autocratinc.com.au" + }, + { + "first_name": "Jamey", + "last_name": "Tetter", + "company_name": "Vicon Corporation", + "address": "28 Standiford Ave #6", + "state": "QLD", + "post": 4670, + "city": "Bundaberg West", + "phone1": "07-6073-5039", + "phone2": "0481-690-589", + "email": "jamey.tetter@gmail.com", + "web": "http://www.viconcorporation.com.au" + }, + { + "first_name": "Nilsa", + "last_name": "Pawell", + "company_name": "Jersey Wholesale Fence Co Inc", + "address": "57 N Weinbach Ave", + "state": "QLD", + "post": 4670, + "city": "Bundaberg West", + "phone1": "07-8997-8513", + "phone2": "0486-504-582", + "email": "npawell@pawell.net.au", + "web": "http://www.jerseywholesalefencecoinc.com.au" + }, + { + "first_name": "Vanesa", + "last_name": "Glockner", + "company_name": "Nelson, Michael J Esq", + "address": "28220 Park Avenue W", + "state": "QLD", + "post": 4680, + "city": "Taragoola", + "phone1": "07-7052-4547", + "phone2": "0496-610-278", + "email": "vanesa@glockner.com.au", + "web": "http://www.nelsonmichaeljesq.com.au" + }, + { + "first_name": "Samira", + "last_name": "Heninger", + "company_name": "Alb Inc", + "address": "40490 Morrow St", + "state": "QLD", + "post": 4702, + "city": "Bluff", + "phone1": "07-9512-2457", + "phone2": "0443-539-658", + "email": "sheninger@yahoo.com", + "web": "http://www.albinc.com.au" + }, + { + "first_name": "Mickie", + "last_name": "Upton", + "company_name": "Oakey & Oakey Abstrct Burnett", + "address": "900 W Wood St", + "state": "QLD", + "post": 4703, + "city": "Barmaryee", + "phone1": "07-7647-5420", + "phone2": "0499-576-666", + "email": "mickie.upton@yahoo.com", + "web": "http://www.oakeyoakeyabstrctburnett.com.au" + }, + { + "first_name": "Tracie", + "last_name": "Huro", + "company_name": "Jin Shin Travel Agency", + "address": "39701 6th Ave #1485", + "state": "QLD", + "post": 4703, + "city": "Pacific Heights", + "phone1": "07-1951-6787", + "phone2": "0494-620-234", + "email": "thuro@gmail.com", + "web": "http://www.jinshintravelagency.com.au" + }, + { + "first_name": "Torie", + "last_name": "Deras", + "company_name": "Reynolds, Stephen R Esq", + "address": "700 Factory Ave #5649", + "state": "QLD", + "post": 4703, + "city": "Yeppoon", + "phone1": "07-8371-4719", + "phone2": "0426-991-115", + "email": "torie_deras@yahoo.com", + "web": "http://www.reynoldsstephenresq.com.au" + }, + { + "first_name": "Lindy", + "last_name": "Vandermeer", + "company_name": "Southern National Bank S Car", + "address": "4244 Lucas Creek Rd", + "state": "QLD", + "post": 4710, + "city": "Emu Park", + "phone1": "07-9407-9202", + "phone2": "0417-325-352", + "email": "lindy@vandermeer.com.au", + "web": "http://www.southernnationalbankscar.com.au" + }, + { + "first_name": "Trina", + "last_name": "Bakey", + "company_name": "Dewitt Cnty Fed Svngs & Ln", + "address": "31 Guilford Rd #7904", + "state": "QLD", + "post": 4712, + "city": "Duaringa", + "phone1": "07-5922-1983", + "phone2": "0495-376-112", + "email": "tbakey@bakey.com.au", + "web": "http://www.dewittcntyfedsvngsln.com.au" + }, + { + "first_name": "Julian", + "last_name": "Laprade", + "company_name": "Forsyth Steel Co", + "address": "5 Pittsburg St", + "state": "QLD", + "post": 4718, + "city": "Mungabunda", + "phone1": "07-2627-9976", + "phone2": "0419-587-898", + "email": "jlaprade@laprade.net.au", + "web": "http://www.forsythsteelco.com.au" + }, + { + "first_name": "Luz", + "last_name": "Broccoli", + "company_name": "Wynn, Mary Ellen Esq", + "address": "4 S Main St #285", + "state": "QLD", + "post": 4719, + "city": "Glenmoral", + "phone1": "07-2679-1774", + "phone2": "0416-525-908", + "email": "luz_broccoli@hotmail.com", + "web": "http://www.wynnmaryellenesq.com.au" + }, + { + "first_name": "Suzan", + "last_name": "Landa", + "company_name": "Vista Grande Baptist Church", + "address": "15 Campville Rd #191", + "state": "QLD", + "post": 4721, + "city": "Clermont", + "phone1": "07-1576-1412", + "phone2": "0471-251-939", + "email": "suzan.landa@gmail.com", + "web": "http://www.vistagrandebaptistchurch.com.au" + }, + { + "first_name": "Kirby", + "last_name": "Litherland", + "company_name": "Cross Western Store", + "address": "92 South St", + "state": "QLD", + "post": 4740, + "city": "Alligator Creek", + "phone1": "07-5284-3845", + "phone2": "0480-676-186", + "email": "kirby.litherland@hotmail.com", + "web": "http://www.crosswesternstore.com.au" + }, + { + "first_name": "Desmond", + "last_name": "Tarkowski", + "company_name": "Body Part Connection", + "address": "5920 E Arapahoe Rd", + "state": "QLD", + "post": 4740, + "city": "Andergrove", + "phone1": "07-6793-5954", + "phone2": "0445-121-372", + "email": "desmond_tarkowski@hotmail.com", + "web": "http://www.bodypartconnection.com.au" + }, + { + "first_name": "Cherri", + "last_name": "Miccio", + "company_name": "Hong Iwai Hulbert & Kawano", + "address": "3 Bustleton Ave", + "state": "QLD", + "post": 4740, + "city": "Balnagowan", + "phone1": "07-5626-7937", + "phone2": "0476-736-800", + "email": "cherri_miccio@gmail.com", + "web": "http://www.hongiwaihulbertkawano.com.au" + }, + { + "first_name": "Jonelle", + "last_name": "Epps", + "company_name": "Kvoo Radio", + "address": "52347 San Fernando Rd", + "state": "QLD", + "post": 4741, + "city": "Coppabella", + "phone1": "07-8085-8351", + "phone2": "0461-339-731", + "email": "jepps@hotmail.com", + "web": "http://www.kvooradio.com.au" + }, + { + "first_name": "Alida", + "last_name": "Helger", + "company_name": "Ballinger, Maria Chan Esq", + "address": "6 Hope Rd #10", + "state": "QLD", + "post": 4741, + "city": "Pinnacle", + "phone1": "07-1642-3251", + "phone2": "0412-699-567", + "email": "alida@helger.com.au", + "web": "http://www.ballingermariachanesq.com.au" + }, + { + "first_name": "Dana", + "last_name": "Ladeau", + "company_name": "Higgins, Daniel B Esq", + "address": "63 W 41st Ave #93", + "state": "QLD", + "post": 4741, + "city": "Pinnacle", + "phone1": "07-3511-9233", + "phone2": "0480-125-331", + "email": "dana@ladeau.net.au", + "web": "http://www.higginsdanielbesq.com.au" + }, + { + "first_name": "Tomas", + "last_name": "Fults", + "company_name": "Test Tools Inc", + "address": "3 Hwy 61 #2491", + "state": "QLD", + "post": 4754, + "city": "Mirani", + "phone1": "07-1536-4805", + "phone2": "0473-757-584", + "email": "tomas_fults@fults.net.au", + "web": "http://www.testtoolsinc.com.au" + }, + { + "first_name": "Dan", + "last_name": "Platz", + "company_name": "Ny Stat Trial Lawyers Assn", + "address": "5210 E Airy St #2", + "state": "QLD", + "post": 4800, + "city": "Brandy Creek", + "phone1": "07-4306-1623", + "phone2": "0441-978-907", + "email": "dan_platz@hotmail.com", + "web": "http://www.nystattriallawyersassn.com.au" + }, + { + "first_name": "Gerald", + "last_name": "Chrusciel", + "company_name": "Prusax, Maximilian M Esq", + "address": "76596 Pleasant Hill Rd", + "state": "QLD", + "post": 4813, + "city": "Townsville Milpo", + "phone1": "07-7446-6315", + "phone2": "0426-833-750", + "email": "gerald@chrusciel.net.au", + "web": "http://www.prusaxmaximilianmesq.com.au" + }, + { + "first_name": "Aaron", + "last_name": "Kloska", + "company_name": "Radecker, H Philip Jr", + "address": "423 S Navajo St #56", + "state": "QLD", + "post": 4816, + "city": "Brookhill", + "phone1": "07-9896-4827", + "phone2": "0473-600-733", + "email": "aaron_kloska@kloska.net.au", + "web": "http://www.radeckerhphilipjr.com.au" + }, + { + "first_name": "Linsey", + "last_name": "Gedman", + "company_name": "Eagle Computer Services Inc", + "address": "1529 Prince Rodgers Ave", + "state": "QLD", + "post": 4816, + "city": "Kennedy", + "phone1": "07-4785-3781", + "phone2": "0433-965-131", + "email": "lgedman@gedman.net.au", + "web": "http://www.eaglecomputerservicesinc.com.au" + }, + { + "first_name": "Nidia", + "last_name": "Horr", + "company_name": "Goodknight, David R", + "address": "2 W Henrietta Rd #6", + "state": "QLD", + "post": 4816, + "city": "Paluma", + "phone1": "07-8441-8214", + "phone2": "0437-170-488", + "email": "nidia@gmail.com", + "web": "http://www.goodknightdavidr.com.au" + }, + { + "first_name": "Osvaldo", + "last_name": "Falvey", + "company_name": "Avila, Edward G Esq", + "address": "6434 Westchester Ave #28", + "state": "QLD", + "post": 4820, + "city": "Queenton", + "phone1": "07-4854-5045", + "phone2": "0437-545-265", + "email": "osvaldo.falvey@yahoo.com", + "web": "http://www.avilaedwardgesq.com.au" + }, + { + "first_name": "Lillian", + "last_name": "Dominique", + "company_name": "West Pac Environmental Inc", + "address": "92417 Arbuckle Ct", + "state": "QLD", + "post": 4823, + "city": "Julia Creek", + "phone1": "07-3594-6592", + "phone2": "0490-548-561", + "email": "lillian@hotmail.com", + "web": "http://www.westpacenvironmentalinc.com.au" + }, + { + "first_name": "Dannette", + "last_name": "Heimbaugh", + "company_name": "Accent Copy Center Inc", + "address": "5 Carpenter Ave", + "state": "QLD", + "post": 4825, + "city": "Breakaway", + "phone1": "07-8738-4205", + "phone2": "0422-884-614", + "email": "dannette@gmail.com", + "web": "http://www.accentcopycenterinc.com.au" + }, + { + "first_name": "Josefa", + "last_name": "Oakland", + "company_name": "Duncan & Associates", + "address": "259 1st Ave", + "state": "QLD", + "post": 4856, + "city": "Mccutcheon", + "phone1": "07-5404-6221", + "phone2": "0493-826-469", + "email": "josefa_oakland@oakland.com.au", + "web": "http://www.duncanassociates.com.au" + }, + { + "first_name": "Shawn", + "last_name": "Vugteveen", + "company_name": "Shine", + "address": "81 Us Highway 9", + "state": "QLD", + "post": 4858, + "city": "Etty Bay", + "phone1": "07-3103-8372", + "phone2": "0480-561-819", + "email": "svugteveen@vugteveen.net.au", + "web": "http://www.shine.com.au" + }, + { + "first_name": "Annette", + "last_name": "Breyer", + "company_name": "Xyvision Inc", + "address": "26921 Vassar St", + "state": "QLD", + "post": 4860, + "city": "Daradgee", + "phone1": "07-5417-9612", + "phone2": "0484-806-405", + "email": "abreyer@hotmail.com", + "web": "http://www.xyvisioninc.com.au" + }, + { + "first_name": "William", + "last_name": "Devol", + "company_name": "Low Country Kitchen & Bath", + "address": "35 Jefferson Ave", + "state": "QLD", + "post": 4860, + "city": "Goondi Hill", + "phone1": "07-4963-5297", + "phone2": "0485-183-917", + "email": "wdevol@devol.net.au", + "web": "http://www.lowcountrykitchenbath.com.au" + }, + { + "first_name": "Elenor", + "last_name": "Siefken", + "company_name": "Chateau Sonesta Hotel", + "address": "136 2nd Ave N", + "state": "QLD", + "post": 4870, + "city": "Cairns City", + "phone1": "07-5085-8138", + "phone2": "0419-509-353", + "email": "elenor.siefken@yahoo.com", + "web": "http://www.chateausonestahotel.com.au" + }, + { + "first_name": "Ludivina", + "last_name": "Calamarino", + "company_name": "Components & Equipment Co", + "address": "1456 Hill Rd", + "state": "QLD", + "post": 4871, + "city": "Croydon", + "phone1": "07-5378-4498", + "phone2": "0482-267-844", + "email": "lcalamarino@yahoo.com", + "web": "http://www.componentsequipmentco.com.au" + }, + { + "first_name": "Misty", + "last_name": "Leriche", + "company_name": "K J N Advertising Inc", + "address": "5289 Ramblewood Dr", + "state": "QLD", + "post": 4871, + "city": "Glen Boughton", + "phone1": "07-5486-1002", + "phone2": "0414-661-490", + "email": "mleriche@yahoo.com", + "web": "http://www.kjnadvertisinginc.com.au" + }, + { + "first_name": "Sunny", + "last_name": "Catton", + "company_name": "Highway Rentals Inc", + "address": "79346 Firestone Blvd", + "state": "QLD", + "post": 4871, + "city": "Gununa", + "phone1": "07-1217-9907", + "phone2": "0450-440-670", + "email": "scatton@catton.com.au", + "web": "http://www.highwayrentalsinc.com.au" + }, + { + "first_name": "Anglea", + "last_name": "Andrion", + "company_name": "Engelbrecht, William H Esq", + "address": "910 21st St", + "state": "QLD", + "post": 4871, + "city": "Laura", + "phone1": "07-3239-2830", + "phone2": "0442-946-694", + "email": "anglea.andrion@andrion.com.au", + "web": "http://www.engelbrechtwilliamhesq.com.au" + }, + { + "first_name": "Royal", + "last_name": "Costeira", + "company_name": "Wynns Precision Inc Az Div", + "address": "970 Waterloo Rd", + "state": "QLD", + "post": 4879, + "city": "Ellis Beach", + "phone1": "07-5338-6357", + "phone2": "0480-443-612", + "email": "royal_costeira@costeira.com.au", + "web": "http://www.wynnsprecisionincazdiv.com.au" + }, + { + "first_name": "Donte", + "last_name": "Resureccion", + "company_name": "N E Industrial Distr Inc", + "address": "65898 E St Nw", + "state": "QLD", + "post": 4887, + "city": "Watsonville", + "phone1": "07-2373-6048", + "phone2": "0478-459-448", + "email": "donte.resureccion@yahoo.com", + "web": "http://www.neindustrialdistrinc.com.au" + }, + { + "first_name": "Latricia", + "last_name": "Schmoyer", + "company_name": "Flanagan Lieberman Hoffman", + "address": "6 Central Ave #4", + "state": "SA", + "post": 5011, + "city": "Woodville", + "phone1": "08-5444-3296", + "phone2": "0459-945-995", + "email": "latricia_schmoyer@hotmail.com", + "web": "http://www.flanaganliebermanhoffman.com.au" + }, + { + "first_name": "Stefan", + "last_name": "Mongolo", + "company_name": "Keith Altizer & Company Pa", + "address": "2 Pennington St", + "state": "SA", + "post": 5015, + "city": "Port Adelaide", + "phone1": "08-4563-6214", + "phone2": "0495-777-435", + "email": "stefan_mongolo@mongolo.net.au", + "web": "http://www.keithaltizercompanypa.com.au" + }, + { + "first_name": "Paris", + "last_name": "Tuccio", + "company_name": "Nancy Brandon Realtor", + "address": "2677 S Jackson St", + "state": "SA", + "post": 5025, + "city": "Kidman Park", + "phone1": "08-8868-2010", + "phone2": "0417-281-870", + "email": "paris.tuccio@hotmail.com", + "web": "http://www.nancybrandonrealtor.com.au" + }, + { + "first_name": "Elin", + "last_name": "Koerner", + "company_name": "Theos Software Corp", + "address": "8 Cabot Rd", + "state": "SA", + "post": 5034, + "city": "Wayville", + "phone1": "08-5221-9700", + "phone2": "0472-281-671", + "email": "elin_koerner@koerner.com.au", + "web": "http://www.theossoftwarecorp.com.au" + }, + { + "first_name": "Hyman", + "last_name": "Hegeman", + "company_name": "Jerico Group", + "address": "1 S Marginal Rd", + "state": "SA", + "post": 5042, + "city": "Flinders University", + "phone1": "08-9280-9177", + "phone2": "0413-650-821", + "email": "hyman@hotmail.com", + "web": "http://www.jericogroup.com.au" + }, + { + "first_name": "Brent", + "last_name": "Ahlborn", + "company_name": "Apex Bottle Co", + "address": "86351 Pine Ave", + "state": "SA", + "post": 5046, + "city": "Oaklands Park", + "phone1": "08-4563-9520", + "phone2": "0492-994-709", + "email": "bahlborn@ahlborn.com.au", + "web": "http://www.apexbottleco.com.au" + }, + { + "first_name": "Buck", + "last_name": "Pascucci", + "company_name": "A B C Pattern & Foundry Co", + "address": "5 Shakespeare Ave", + "state": "SA", + "post": 5062, + "city": "Kingswood", + "phone1": "08-9279-1731", + "phone2": "0453-818-566", + "email": "buck@yahoo.com", + "web": "http://www.abcpatternfoundryco.com.au" + }, + { + "first_name": "Tyisha", + "last_name": "Layland", + "company_name": "Freitag Pc", + "address": "270 5th Ave", + "state": "SA", + "post": 5063, + "city": "Eastwood", + "phone1": "08-2158-6758", + "phone2": "0490-478-206", + "email": "tyisha@yahoo.com", + "web": "http://www.freitagpc.com.au" + }, + { + "first_name": "Zack", + "last_name": "Warman", + "company_name": "Roswell Honda Partners", + "address": "9181 E 26th St", + "state": "SA", + "post": 5068, + "city": "Kensington Park", + "phone1": "08-9948-2940", + "phone2": "0414-749-850", + "email": "zwarman@gmail.com", + "web": "http://www.roswellhondapartners.com.au" + }, + { + "first_name": "Micaela", + "last_name": "Shiflett", + "company_name": "W R Grace & Co", + "address": "4 Commerce Center Dr", + "state": "SA", + "post": 5083, + "city": "Nailsworth", + "phone1": "08-8856-8589", + "phone2": "0451-514-152", + "email": "micaela_shiflett@shiflett.com.au", + "web": "http://www.wrgraceco.com.au" + }, + { + "first_name": "Francoise", + "last_name": "Byon", + "company_name": "H P Stran & Co", + "address": "5496 Ne Columbia Blvd", + "state": "SA", + "post": 5087, + "city": "Klemzig", + "phone1": "08-3914-9404", + "phone2": "0430-357-187", + "email": "francoise@hotmail.com", + "web": "http://www.hpstranco.com.au" + }, + { + "first_name": "Michel", + "last_name": "Hoyne", + "company_name": "B & B Environmental Inc", + "address": "11408 Green St", + "state": "SA", + "post": 5113, + "city": "Elizabeth West", + "phone1": "08-6183-9260", + "phone2": "0481-466-206", + "email": "michel@hoyne.com.au", + "web": "http://www.bbenvironmentalinc.com.au" + }, + { + "first_name": "Jesusita", + "last_name": "Druck", + "company_name": "House Of Ing", + "address": "9526 Lincoln St", + "state": "SA", + "post": 5115, + "city": "Munno Para", + "phone1": "08-3605-3943", + "phone2": "0424-741-530", + "email": "jesusita@druck.net.au", + "web": "http://www.houseofing.com.au" + }, + { + "first_name": "Tora", + "last_name": "Telch", + "company_name": "Shamrock Food Service", + "address": "6139 Contractors Dr #450", + "state": "SA", + "post": 5120, + "city": "Buckland Park", + "phone1": "08-8808-8104", + "phone2": "0429-419-390", + "email": "tora@telch.net.au", + "web": "http://www.shamrockfoodservice.com.au" + }, + { + "first_name": "Fairy", + "last_name": "Burket", + "company_name": "Walker & Brehn Pa", + "address": "20 Sw 28th Ter", + "state": "SA", + "post": 5126, + "city": "Fairview Park", + "phone1": "08-9159-7562", + "phone2": "0472-806-350", + "email": "fairy_burket@burket.com.au", + "web": "http://www.walkerbrehnpa.com.au" + }, + { + "first_name": "Leah", + "last_name": "Milsap", + "company_name": "Schwartz, Seymour I Md", + "address": "45 Mountain View Ave", + "state": "SA", + "post": 5131, + "city": "Lower Hermitage", + "phone1": "08-4040-9192", + "phone2": "0452-193-155", + "email": "leah@milsap.com.au", + "web": "http://www.schwartzseymourimd.com.au" + }, + { + "first_name": "Hildred", + "last_name": "Eilbeck", + "company_name": "Plastic Supply Inc", + "address": "83 Longhurst Rd", + "state": "SA", + "post": 5153, + "city": "Longwood", + "phone1": "08-2922-4115", + "phone2": "0463-881-817", + "email": "hildred_eilbeck@eilbeck.net.au", + "web": "http://www.plasticsupplyinc.com.au" + }, + { + "first_name": "Carin", + "last_name": "Georgiades", + "company_name": "Dgstv Diseases Cnslnts", + "address": "95830 Webster Dr", + "state": "SA", + "post": 5158, + "city": "Trott Park", + "phone1": "08-8343-3550", + "phone2": "0475-701-279", + "email": "cgeorgiades@gmail.com", + "web": "http://www.dgstvdiseasescnslnts.com.au" + }, + { + "first_name": "Ronald", + "last_name": "Grube", + "company_name": "Deep Creek Pharmacy", + "address": "73778 Battery St", + "state": "SA", + "post": 5159, + "city": "Happy Valley", + "phone1": "08-3305-5436", + "phone2": "0457-126-909", + "email": "ronald.grube@yahoo.com", + "web": "http://www.deepcreekpharmacy.com.au" + }, + { + "first_name": "Jeffrey", + "last_name": "Leuenberger", + "company_name": "Walter W Lawrence Ink", + "address": "564 Almeria Ave #7474", + "state": "SA", + "post": 5171, + "city": "Pedler Creek", + "phone1": "08-1267-4421", + "phone2": "0436-612-609", + "email": "jleuenberger@yahoo.com", + "web": "http://www.walterwlawrenceink.com.au" + }, + { + "first_name": "Alfred", + "last_name": "Pacleb", + "company_name": "Roundys Pole Fence Co", + "address": "523 N Prince St", + "state": "SA", + "post": 5172, + "city": "Willunga", + "phone1": "08-9450-7978", + "phone2": "0453-896-533", + "email": "alfred@pacleb.net.au", + "web": "http://www.roundyspolefenceco.com.au" + }, + { + "first_name": "Shayne", + "last_name": "Sundahl", + "company_name": "Jaywork, John Terence Esq", + "address": "5614 Public Sq", + "state": "SA", + "post": 5204, + "city": "Normanville", + "phone1": "08-8587-1196", + "phone2": "0443-386-213", + "email": "shayne.sundahl@gmail.com", + "web": "http://www.jayworkjohnterenceesq.com.au" + }, + { + "first_name": "Huey", + "last_name": "Bukovac", + "company_name": "Venino And Venino", + "address": "6 Jefferson St", + "state": "SA", + "post": 5213, + "city": "Middleton", + "phone1": "08-5236-2143", + "phone2": "0486-924-555", + "email": "huey.bukovac@hotmail.com", + "web": "http://www.veninoandvenino.com.au" + }, + { + "first_name": "Aretha", + "last_name": "Bodle", + "company_name": "Palmetto Food Equipment Co Inc", + "address": "9561 Chartres St", + "state": "SA", + "post": 5220, + "city": "Parndana", + "phone1": "08-7385-2716", + "phone2": "0481-452-729", + "email": "aretha_bodle@hotmail.com", + "web": "http://www.palmettofoodequipmentcoinc.com.au" + }, + { + "first_name": "Valda", + "last_name": "Levay", + "company_name": "Branom Instrument Co", + "address": "7463 Elmwood Park Blvd", + "state": "SA", + "post": 5236, + "city": "Tungkillo", + "phone1": "08-2401-5672", + "phone2": "0434-637-971", + "email": "vlevay@levay.net.au", + "web": "http://www.branominstrumentco.com.au" + }, + { + "first_name": "Stefany", + "last_name": "Figueras", + "company_name": "Burke, Jonathan H Esq", + "address": "37 Saint Louis Ave #292", + "state": "SA", + "post": 5240, + "city": "Lenswood", + "phone1": "08-2209-8647", + "phone2": "0474-975-307", + "email": "stefany@figueras.net.au", + "web": "http://www.burkejonathanhesq.com.au" + }, + { + "first_name": "Gennie", + "last_name": "Pastorino", + "company_name": "Henry, Robert J Esq", + "address": "5 Austin Ave", + "state": "SA", + "post": 5244, + "city": "Charleston", + "phone1": "08-4753-2870", + "phone2": "0425-685-933", + "email": "gennie.pastorino@gmail.com", + "web": "http://www.henryrobertjesq.com.au" + }, + { + "first_name": "Lindsey", + "last_name": "Rathmann", + "company_name": "Pakzad Advertising", + "address": "5 Main St", + "state": "SA", + "post": 5291, + "city": "Kongorong", + "phone1": "08-1269-1489", + "phone2": "0499-741-651", + "email": "lindsey_rathmann@rathmann.com.au", + "web": "http://www.pakzadadvertising.com.au" + }, + { + "first_name": "Launa", + "last_name": "Vanauken", + "company_name": "Tripuraneni, Prabhakar Md", + "address": "30338 S Dunworth St", + "state": "SA", + "post": 5301, + "city": "Peake", + "phone1": "08-9808-2647", + "phone2": "0423-125-880", + "email": "launa@gmail.com", + "web": "http://www.tripuraneniprabhakarmd.com.au" + }, + { + "first_name": "Brice", + "last_name": "Bogacz", + "company_name": "Thurmon, Steven P", + "address": "76 San Pablo Ave", + "state": "SA", + "post": 5353, + "city": "Sedan", + "phone1": "08-5203-2193", + "phone2": "0467-821-930", + "email": "bbogacz@hotmail.com", + "web": "http://www.thurmonstevenp.com.au" + }, + { + "first_name": "Theron", + "last_name": "Jarding", + "company_name": "Prentiss, Paul F Esq", + "address": "8839 Ventura Blvd", + "state": "SA", + "post": 5357, + "city": "Blanchetown", + "phone1": "08-6890-4661", + "phone2": "0461-862-457", + "email": "tjarding@hotmail.com", + "web": "http://www.prentisspaulfesq.com.au" + }, + { + "first_name": "Edison", + "last_name": "Sumera", + "company_name": "Mcclier Corp", + "address": "52404 S Clinton Ave", + "state": "SA", + "post": 5374, + "city": "Bower", + "phone1": "08-9114-1763", + "phone2": "0463-377-181", + "email": "edison.sumera@sumera.net.au", + "web": "http://www.mccliercorp.com.au" + }, + { + "first_name": "Rene", + "last_name": "Burnsworth", + "company_name": "Nurses Ofr Newborns", + "address": "80289 Victory Ave #9", + "state": "SA", + "post": 5416, + "city": "Farrell Flat", + "phone1": "08-8222-3171", + "phone2": "0422-183-541", + "email": "rene@burnsworth.net.au", + "web": "http://www.nursesofrnewborns.com.au" + }, + { + "first_name": "Halina", + "last_name": "Dellen", + "company_name": "Roane, Matthew H Esq", + "address": "3318 Buckelew Ave", + "state": "SA", + "post": 5480, + "city": "Appila", + "phone1": "08-6742-2308", + "phone2": "0478-235-293", + "email": "halina.dellen@dellen.com.au", + "web": "http://www.roanematthewhesq.com.au" + }, + { + "first_name": "Cary", + "last_name": "Orazine", + "company_name": "Para Laboratories", + "address": "16 Governors Dr Sw", + "state": "SA", + "post": 5483, + "city": "Melrose", + "phone1": "08-7718-8495", + "phone2": "0419-720-227", + "email": "cary.orazine@hotmail.com", + "web": "http://www.paralaboratories.com.au" + }, + { + "first_name": "Charolette", + "last_name": "Turk", + "company_name": "Weil Mclain Co", + "address": "1 Wyckoff Ave", + "state": "SA", + "post": 5485, + "city": "Wilmington", + "phone1": "08-4735-5054", + "phone2": "0430-400-899", + "email": "cturk@yahoo.com", + "web": "http://www.weilmclainco.com.au" + }, + { + "first_name": "Dominga", + "last_name": "Barchacky", + "company_name": "South Side Machine Works Inc", + "address": "3 Ridge Rd W #949", + "state": "SA", + "post": 5495, + "city": "Port Flinders", + "phone1": "08-3087-9658", + "phone2": "0412-225-824", + "email": "dominga.barchacky@hotmail.com", + "web": "http://www.southsidemachineworksinc.com.au" + }, + { + "first_name": "Sommer", + "last_name": "Agar", + "company_name": "Poole Publications Inc", + "address": "3 N Ridge Ave", + "state": "SA", + "post": 5554, + "city": "Kadina", + "phone1": "08-9130-3372", + "phone2": "0486-599-199", + "email": "sagar@agar.net.au", + "web": "http://www.poolepublicationsinc.com.au" + }, + { + "first_name": "Alexis", + "last_name": "Morguson", + "company_name": "Carrera Casting Corp", + "address": "9 Old York Rd #418", + "state": "SA", + "post": 5573, + "city": "Weetulta", + "phone1": "08-1895-1457", + "phone2": "0475-760-952", + "email": "amorguson@morguson.com.au", + "web": "http://www.carreracastingcorp.com.au" + }, + { + "first_name": "Moira", + "last_name": "Qadir", + "company_name": "Airnetics Engineering Co", + "address": "661 Plummer St #963", + "state": "SA", + "post": 5603, + "city": "Arno Bay", + "phone1": "08-7687-4883", + "phone2": "0471-106-909", + "email": "moira.qadir@gmail.com", + "web": "http://www.airneticsengineeringco.com.au" + }, + { + "first_name": "Ngoc", + "last_name": "Guglielmina", + "company_name": "Verde, Louis J Esq", + "address": "156 Morris St", + "state": "SA", + "post": 5642, + "city": "Darke Peak", + "phone1": "08-2264-5559", + "phone2": "0490-128-503", + "email": "ngoc_guglielmina@hotmail.com", + "web": "http://www.verdelouisjesq.com.au" + }, + { + "first_name": "Gladys", + "last_name": "Schmale", + "company_name": "Amercn Spdy Printg Ctrs Ocala", + "address": "514 Glenn Way", + "state": "SA", + "post": 5661, + "city": "Wirrulla", + "phone1": "08-4564-2338", + "phone2": "0410-812-931", + "email": "gschmale@schmale.net.au", + "web": "http://www.amercnspdyprintgctrsocala.com.au" + }, + { + "first_name": "Audria", + "last_name": "Piccinich", + "company_name": "Kuhio Photo", + "address": "13 Blanchard St #996", + "state": "SA", + "post": 5723, + "city": "Coober Pedy", + "phone1": "08-9757-2379", + "phone2": "0426-175-813", + "email": "audria.piccinich@gmail.com", + "web": "http://www.kuhiophoto.com.au" + }, + { + "first_name": "Domingo", + "last_name": "Mckale", + "company_name": "Fables Gallery", + "address": "80968 Armitage Ave", + "state": "SA", + "post": 5724, + "city": "Marla", + "phone1": "08-9919-7850", + "phone2": "0418-290-707", + "email": "domingo_mckale@mckale.net.au", + "web": "http://www.fablesgallery.com.au" + }, + { + "first_name": "Hyman", + "last_name": "Phinazee", + "company_name": "Als Village Stationers", + "address": "42741 Anania Dr", + "state": "SA", + "post": 5730, + "city": "Beltana", + "phone1": "08-5756-9456", + "phone2": "0446-460-955", + "email": "hphinazee@yahoo.com", + "web": "http://www.alsvillagestationers.com.au" + }, + { + "first_name": "Candra", + "last_name": "Deritis", + "company_name": "Girling Health Care Inc", + "address": "43 Nolan St", + "state": "TAS", + "post": 7004, + "city": "Battery Point", + "phone1": "03-4231-3633", + "phone2": "0439-769-439", + "email": "candra@deritis.net.au", + "web": "http://www.girlinghealthcareinc.com.au" + }, + { + "first_name": "Ashton", + "last_name": "Sutherburg", + "company_name": "Southwark Corporation", + "address": "960 S Arroyo Pkwy", + "state": "TAS", + "post": 7004, + "city": "South Hobart", + "phone1": "03-9215-3224", + "phone2": "0427-327-492", + "email": "asutherburg@gmail.com", + "web": "http://www.southwarkcorporation.com.au" + }, + { + "first_name": "Ronald", + "last_name": "Gayner", + "company_name": "Moorhead, Michael D Esq", + "address": "438 E Reynolds Rd #239", + "state": "TAS", + "post": 7005, + "city": "University Of Tasmania", + "phone1": "03-7734-9557", + "phone2": "0499-737-220", + "email": "rgayner@hotmail.com", + "web": "http://www.moorheadmichaeldesq.com.au" + }, + { + "first_name": "Kris", + "last_name": "Medich", + "company_name": "Chieftain Four Inc", + "address": "94843 Trabold Rd #59", + "state": "TAS", + "post": 7030, + "city": "Shannon", + "phone1": "03-6589-2556", + "phone2": "0469-243-477", + "email": "kris.medich@hotmail.com", + "web": "http://www.chieftainfourinc.com.au" + }, + { + "first_name": "Kenny", + "last_name": "Leicht", + "company_name": "Gaddis Court Reporting", + "address": "245 5th Ave", + "state": "TAS", + "post": 7112, + "city": "Nicholls Rivulet", + "phone1": "03-6240-8274", + "phone2": "0486-712-822", + "email": "kenny@leicht.com.au", + "web": "http://www.gaddiscourtreporting.com.au" + }, + { + "first_name": "Buffy", + "last_name": "Stitely", + "company_name": "Stylecraft Corporation", + "address": "5 Madison St #4651", + "state": "TAS", + "post": 7116, + "city": "Police Point", + "phone1": "03-1600-5230", + "phone2": "0451-121-905", + "email": "buffy_stitely@stitely.com.au", + "web": "http://www.stylecraftcorporation.com.au" + }, + { + "first_name": "Robt", + "last_name": "Blanck", + "company_name": "Elan Techlgy A Divsn Mansol", + "address": "790 E Wisconsin Ave", + "state": "TAS", + "post": 7120, + "city": "Woodbury", + "phone1": "03-6517-9318", + "phone2": "0415-690-961", + "email": "robt.blanck@yahoo.com", + "web": "http://www.elantechlgyadivsnmansol.com.au" + }, + { + "first_name": "Marica", + "last_name": "Tarbor", + "company_name": "Prudential Lighting Corp", + "address": "68828 S 32nd St #6", + "state": "TAS", + "post": 7140, + "city": "Rosegarland", + "phone1": "03-1174-6817", + "phone2": "0494-982-617", + "email": "marica.tarbor@hotmail.com", + "web": "http://www.prudentiallightingcorp.com.au" + }, + { + "first_name": "Melinda", + "last_name": "Fellhauer", + "company_name": "Sterling Institute", + "address": "8275 Calle De Industrias", + "state": "TAS", + "post": 7140, + "city": "Wayatinah", + "phone1": "03-4387-3800", + "phone2": "0493-258-647", + "email": "melinda_fellhauer@fellhauer.com.au", + "web": "http://www.sterlinginstitute.com.au" + }, + { + "first_name": "Dorathy", + "last_name": "Miskelly", + "company_name": "Perrysburg Animal Care Inc", + "address": "73 Robert S", + "state": "TAS", + "post": 7140, + "city": "Westerway", + "phone1": "03-6340-9772", + "phone2": "0432-706-521", + "email": "dorathy.miskelly@gmail.com", + "web": "http://www.perrysburganimalcareinc.com.au" + }, + { + "first_name": "Frederick", + "last_name": "Tamburello", + "company_name": "Signs By Berry", + "address": "262 8th St", + "state": "TAS", + "post": 7150, + "city": "Simpsons Bay", + "phone1": "03-4800-7102", + "phone2": "0466-921-460", + "email": "frederick.tamburello@hotmail.com", + "web": "http://www.signsbyberry.com.au" + }, + { + "first_name": "Bettye", + "last_name": "Meray", + "company_name": "Sako, Bradley T Esq", + "address": "248 Academy Rd", + "state": "TAS", + "post": 7163, + "city": "Middleton", + "phone1": "03-9424-2956", + "phone2": "0420-742-142", + "email": "bmeray@yahoo.com", + "web": "http://www.sakobradleytesq.com.au" + }, + { + "first_name": "Leandro", + "last_name": "Bolka", + "company_name": "Classic Video Duplication Inc", + "address": "1886 2nd Ave", + "state": "TAS", + "post": 7172, + "city": "Wattle Hill", + "phone1": "03-8157-4609", + "phone2": "0413-530-467", + "email": "leandro_bolka@hotmail.com", + "web": "http://www.classicvideoduplicationinc.com.au" + }, + { + "first_name": "Linwood", + "last_name": "Wessner", + "company_name": "Moorhead Associates Inc", + "address": "9634 South St", + "state": "TAS", + "post": 7186, + "city": "Saltwater River", + "phone1": "03-6053-2447", + "phone2": "0487-913-509", + "email": "linwood.wessner@hotmail.com", + "web": "http://www.moorheadassociatesinc.com.au" + }, + { + "first_name": "Karon", + "last_name": "Etzler", + "company_name": "Rachmel & Company Cpa Pa", + "address": "97539 Connecticut Ave Nw #3586", + "state": "TAS", + "post": 7190, + "city": "Buckland", + "phone1": "03-6698-8416", + "phone2": "0432-184-936", + "email": "karon@hotmail.com", + "web": "http://www.rachmelcompanycpapa.com.au" + }, + { + "first_name": "Luis", + "last_name": "Yerry", + "company_name": "On Your Feet", + "address": "72984 W 1st St", + "state": "TAS", + "post": 7250, + "city": "Summerhill", + "phone1": "03-4492-4927", + "phone2": "0490-571-461", + "email": "luis@hotmail.com", + "web": "http://www.onyourfeet.com.au" + }, + { + "first_name": "Matilda", + "last_name": "Peleg", + "company_name": "A & D Pallet Co", + "address": "708 S Wilson Way", + "state": "TAS", + "post": 7252, + "city": "Weymouth", + "phone1": "03-1130-5685", + "phone2": "0481-222-272", + "email": "matilda.peleg@hotmail.com", + "web": "http://www.adpalletco.com.au" + }, + { + "first_name": "Page", + "last_name": "Entzi", + "company_name": "Roland Ashcroft", + "address": "63154 Artesia Blvd", + "state": "TAS", + "post": 7255, + "city": "Blue Rocks", + "phone1": "03-2484-5500", + "phone2": "0497-335-342", + "email": "page@entzi.net.au", + "web": "http://www.rolandashcroft.com.au" + }, + { + "first_name": "Dortha", + "last_name": "Vrieze", + "company_name": "Art In Forms", + "address": "654 Seguine Ave", + "state": "TAS", + "post": 7258, + "city": "White Hills", + "phone1": "03-1981-6209", + "phone2": "0430-222-319", + "email": "dortha@vrieze.net.au", + "web": "http://www.artinforms.com.au" + }, + { + "first_name": "Ariel", + "last_name": "Stavely", + "company_name": "Grand Rapids Right To Life", + "address": "6 7th St", + "state": "TAS", + "post": 7260, + "city": "Scottsdale", + "phone1": "03-6510-4788", + "phone2": "0441-579-823", + "email": "ariel_stavely@stavely.com.au", + "web": "http://www.grandrapidsrighttolife.com.au" + }, + { + "first_name": "Laura", + "last_name": "Bourbonnais", + "company_name": "Kansas Association Ins Agtts", + "address": "2 N Valley Mills Dr", + "state": "TAS", + "post": 7264, + "city": "Cape Portland", + "phone1": "03-6543-6688", + "phone2": "0491-455-112", + "email": "laura.bourbonnais@yahoo.com", + "web": "http://www.kansasassociationinsagtts.com.au" + }, + { + "first_name": "Kanisha", + "last_name": "Reyelts", + "company_name": "American Board Of Surgery", + "address": "9 Taylor Ave", + "state": "TAS", + "post": 7275, + "city": "Holwell", + "phone1": "03-2921-8418", + "phone2": "0423-358-965", + "email": "kreyelts@yahoo.com", + "web": "http://www.americanboardofsurgery.com.au" + }, + { + "first_name": "Margurite", + "last_name": "Okon", + "company_name": "Kent, Wendy M Esq", + "address": "32 Broadway St", + "state": "TAS", + "post": 7275, + "city": "Lanena", + "phone1": "03-9721-7313", + "phone2": "0442-360-982", + "email": "margurite.okon@hotmail.com", + "web": "http://www.kentwendymesq.com.au" + }, + { + "first_name": "Phung", + "last_name": "Krome", + "company_name": "Pacific Scientific Co", + "address": "847 Norristown Rd", + "state": "TAS", + "post": 7301, + "city": "Longford", + "phone1": "03-9617-5392", + "phone2": "0417-815-258", + "email": "pkrome@yahoo.com", + "web": "http://www.pacificscientificco.com.au" + }, + { + "first_name": "Julene", + "last_name": "Lauretta", + "company_name": "Convum Internatl Corp", + "address": "1881 Market St", + "state": "TAS", + "post": 7304, + "city": "Mole Creek", + "phone1": "03-1036-9594", + "phone2": "0451-946-241", + "email": "julene.lauretta@gmail.com", + "web": "http://www.convuminternatlcorp.com.au" + }, + { + "first_name": "Amos", + "last_name": "Limberg", + "company_name": "Pioneer Telephone Paging", + "address": "8 2nd St", + "state": "TAS", + "post": 7310, + "city": "Don", + "phone1": "03-4539-9131", + "phone2": "0492-444-651", + "email": "alimberg@limberg.com.au", + "web": "http://www.pioneertelephonepaging.com.au" + }, + { + "first_name": "Rebbecca", + "last_name": "Didio", + "company_name": "Brandt, Jonathan F Esq", + "address": "171 E 24th St", + "state": "TAS", + "post": 7315, + "city": "Leith", + "phone1": "03-8174-9123", + "phone2": "0458-665-290", + "email": "rebbecca.didio@didio.com.au", + "web": "http://www.brandtjonathanfesq.com.au" + }, + { + "first_name": "Brittney", + "last_name": "Lolley", + "company_name": "Brown Chiropractic", + "address": "2391 Pacific Blvd", + "state": "TAS", + "post": 7315, + "city": "Ulverstone", + "phone1": "03-4072-7094", + "phone2": "0451-120-660", + "email": "brittney@lolley.net.au", + "web": "http://www.brownchiropractic.com.au" + }, + { + "first_name": "Shawn", + "last_name": "Weibe", + "company_name": "Feutz, James F Esq", + "address": "4 Middletown Blvd #33", + "state": "TAS", + "post": 7316, + "city": "Camena", + "phone1": "03-9480-9611", + "phone2": "0456-595-946", + "email": "shawn@hotmail.com", + "web": "http://www.feutzjamesfesq.com.au" + }, + { + "first_name": "Ashleigh", + "last_name": "Rimmer", + "company_name": "Palmer Publications Inc", + "address": "15 W 11mile Rd", + "state": "TAS", + "post": 7321, + "city": "Boat Harbour Beach", + "phone1": "03-5354-9557", + "phone2": "0467-120-854", + "email": "ashleigh.rimmer@hotmail.com", + "web": "http://www.palmerpublicationsinc.com.au" + }, + { + "first_name": "Alonso", + "last_name": "Popper", + "company_name": "Sunrise Cirby Animal Hospital", + "address": "3175 Northwestern Hwy", + "state": "TAS", + "post": 7321, + "city": "Ridgley", + "phone1": "03-7036-7071", + "phone2": "0448-235-525", + "email": "alonso_popper@hotmail.com", + "web": "http://www.sunrisecirbyanimalhospital.com.au" + }, + { + "first_name": "Lajuana", + "last_name": "Vonderahe", + "company_name": "Milwaukee Courier Inc", + "address": "7 Wiley Post Way", + "state": "TAS", + "post": 7330, + "city": "Trowutta", + "phone1": "03-5661-2424", + "phone2": "0430-111-686", + "email": "lajuana.vonderahe@yahoo.com", + "web": "http://www.milwaukeecourierinc.com.au" + }, + { + "first_name": "Lavonne", + "last_name": "Esco", + "company_name": "Ansaring Answering Service", + "address": "377 Excalibur Dr", + "state": "VIC", + "post": 3002, + "city": "East Melbourne", + "phone1": "03-3474-2120", + "phone2": "0444-359-546", + "email": "lavonne.esco@yahoo.com", + "web": "http://www.ansaringansweringservice.com.au" + }, + { + "first_name": "Ellsworth", + "last_name": "Guenther", + "company_name": "Performance Consulting Grp Inc", + "address": "27730 American Ave", + "state": "VIC", + "post": 3008, + "city": "Docklands", + "phone1": "03-2749-1381", + "phone2": "0442-173-327", + "email": "eguenther@hotmail.com", + "web": "http://www.performanceconsultinggrpinc.com.au" + }, + { + "first_name": "Terina", + "last_name": "Wildeboer", + "company_name": "Burress, S Paige Esq", + "address": "462 Morris Ave", + "state": "VIC", + "post": 3011, + "city": "Seddon", + "phone1": "03-9107-7349", + "phone2": "0438-810-326", + "email": "terina_wildeboer@wildeboer.com.au", + "web": "http://www.burressspaigeesq.com.au" + }, + { + "first_name": "Laine", + "last_name": "Killean", + "company_name": "Bussard, Vicki L Esq", + "address": "767 9th Ave Sw", + "state": "VIC", + "post": 3019, + "city": "Braybrook", + "phone1": "03-2813-6426", + "phone2": "0411-276-383", + "email": "laine@gmail.com", + "web": "http://www.bussardvickilesq.com.au" + }, + { + "first_name": "Rosenda", + "last_name": "Petteway", + "company_name": "Choo Choo Caboose At Jade Bbq", + "address": "66 Congress St", + "state": "VIC", + "post": 3023, + "city": "Caroline Springs", + "phone1": "03-9599-4122", + "phone2": "0438-478-951", + "email": "rosenda@gmail.com", + "web": "http://www.choochoocabooseatjadebbq.com.au" + }, + { + "first_name": "Arthur", + "last_name": "Diniz", + "company_name": "American Western Mortgage", + "address": "79819 Palmetto Ave", + "state": "VIC", + "post": 3032, + "city": "Travancore", + "phone1": "03-2517-3453", + "phone2": "0429-206-122", + "email": "arthur@gmail.com", + "web": "http://www.americanwesternmortgage.com.au" + }, + { + "first_name": "Christene", + "last_name": "Cisney", + "company_name": "Danform Shoe Stores", + "address": "21058 Massillon Rd", + "state": "VIC", + "post": 3038, + "city": "Keilor Downs", + "phone1": "03-3630-2467", + "phone2": "0451-465-174", + "email": "christene@hotmail.com", + "web": "http://www.danformshoestores.com.au" + }, + { + "first_name": "Raelene", + "last_name": "Legeyt", + "company_name": "Barter Systems Inc", + "address": "8818 Century Park E #33", + "state": "VIC", + "post": 3046, + "city": "Oak Park", + "phone1": "03-4878-1766", + "phone2": "0463-745-755", + "email": "raelene@gmail.com", + "web": "http://www.bartersystemsinc.com.au" + }, + { + "first_name": "Shizue", + "last_name": "Hayduk", + "company_name": "R M Sloan Co Inc", + "address": "47 Hall St", + "state": "VIC", + "post": 3072, + "city": "Regent West", + "phone1": "03-2297-9891", + "phone2": "0456-480-906", + "email": "shayduk@gmail.com", + "web": "http://www.rmsloancoinc.com.au" + }, + { + "first_name": "Ivette", + "last_name": "Servantes", + "company_name": "Albright, Alexandra W Esq", + "address": "446 Woodward Ave #1", + "state": "VIC", + "post": 3073, + "city": "Reservoir", + "phone1": "03-9801-9429", + "phone2": "0488-109-742", + "email": "ivette_servantes@servantes.com.au", + "web": "http://www.albrightalexandrawesq.com.au" + }, + { + "first_name": "Zena", + "last_name": "Daria", + "company_name": "Kszl Am Radio", + "address": "57245 W Union Blvd #25", + "state": "VIC", + "post": 3079, + "city": "Ivanhoe East", + "phone1": "03-2822-8156", + "phone2": "0466-820-981", + "email": "zdaria@gmail.com", + "web": "http://www.kszlamradio.com.au" + }, + { + "first_name": "Francis", + "last_name": "Senters", + "company_name": "Middendorf Meat Quality Foods", + "address": "4562 Aurora Ave N", + "state": "VIC", + "post": 3081, + "city": "Heidelberg Rgh", + "phone1": "03-5933-7288", + "phone2": "0463-965-946", + "email": "fsenters@gmail.com", + "web": "http://www.middendorfmeatqualityfoods.com.au" + }, + { + "first_name": "Sang", + "last_name": "Weigner", + "company_name": "Hander, Deborah G Esq", + "address": "9 W Passaic St", + "state": "VIC", + "post": 3081, + "city": "Heidelberg Rgh", + "phone1": "03-8912-5755", + "phone2": "0419-565-485", + "email": "sweigner@gmail.com", + "web": "http://www.handerdeborahgesq.com.au" + }, + { + "first_name": "Antonio", + "last_name": "Eighmy", + "company_name": "Corporex Companies Inc", + "address": "1758 Park Pl", + "state": "VIC", + "post": 3084, + "city": "Eaglemont", + "phone1": "03-6144-7318", + "phone2": "0438-100-197", + "email": "antonio.eighmy@yahoo.com", + "web": "http://www.corporexcompaniesinc.com.au" + }, + { + "first_name": "Miesha", + "last_name": "Decelles", + "company_name": "L M H Inc", + "address": "457 St Sebastian Way #189", + "state": "VIC", + "post": 3095, + "city": "Eltham", + "phone1": "03-5185-6258", + "phone2": "0440-277-657", + "email": "mdecelles@decelles.net.au", + "web": "http://www.lmhinc.com.au" + }, + { + "first_name": "Javier", + "last_name": "Osmer", + "company_name": "Milgo Industrial Inc", + "address": "6 Ackerman Rd", + "state": "VIC", + "post": 3109, + "city": "Doncaster East", + "phone1": "03-8369-6924", + "phone2": "0489-202-570", + "email": "javier@osmer.com.au", + "web": "http://www.milgoindustrialinc.com.au" + }, + { + "first_name": "Eveline", + "last_name": "Brickhouse", + "company_name": "First Express", + "address": "288 N 168th Ave #266", + "state": "VIC", + "post": 3124, + "city": "Camberwell West", + "phone1": "03-9517-9800", + "phone2": "0463-242-525", + "email": "eveline@yahoo.com", + "web": "http://www.firstexpress.com.au" + }, + { + "first_name": "Marylou", + "last_name": "Lofts", + "company_name": "Lally, Lawrence D Esq", + "address": "812 Berry Blvd #96", + "state": "VIC", + "post": 3128, + "city": "Houston", + "phone1": "03-1765-4584", + "phone2": "0473-727-909", + "email": "marylou_lofts@lofts.com.au", + "web": "http://www.lallylawrencedesq.com.au" + }, + { + "first_name": "Farrah", + "last_name": "Malboeuf", + "company_name": "Slachter, David Esq", + "address": "803 Tupper Ln", + "state": "VIC", + "post": 3134, + "city": "Ringwood", + "phone1": "03-7139-6376", + "phone2": "0472-511-112", + "email": "farrah@malboeuf.com.au", + "web": "http://www.slachterdavidesq.com.au" + }, + { + "first_name": "Edda", + "last_name": "Mcquaide", + "company_name": "Eagles Nest", + "address": "9 Cron Hill Dr", + "state": "VIC", + "post": 3155, + "city": "Boronia", + "phone1": "03-1465-8645", + "phone2": "0416-330-811", + "email": "emcquaide@yahoo.com", + "web": "http://www.eaglesnest.com.au" + }, + { + "first_name": "Werner", + "last_name": "Hermens", + "company_name": "Community Health Law Project", + "address": "302 N 10th St #3896", + "state": "VIC", + "post": 3167, + "city": "Oakleigh South", + "phone1": "03-9085-5714", + "phone2": "0462-625-869", + "email": "whermens@hermens.net.au", + "web": "http://www.communityhealthlawproject.com.au" + }, + { + "first_name": "Burma", + "last_name": "Noa", + "company_name": "Saum, Scott J Esq", + "address": "79 State Route 35", + "state": "VIC", + "post": 3185, + "city": "Ripponlea", + "phone1": "03-6438-4586", + "phone2": "0448-770-746", + "email": "burma.noa@gmail.com", + "web": "http://www.saumscottjesq.com.au" + }, + { + "first_name": "Denae", + "last_name": "Saeteun", + "company_name": "Domurad, John M Esq", + "address": "52680 W Hwy 55 #59", + "state": "VIC", + "post": 3194, + "city": "Moorabbin Airport", + "phone1": "03-2802-7434", + "phone2": "0410-539-386", + "email": "denae_saeteun@hotmail.com", + "web": "http://www.domuradjohnmesq.com.au" + }, + { + "first_name": "Alberta", + "last_name": "Motter", + "company_name": "Turl Engineering Works", + "address": "33108 S Yosemite Ct", + "state": "VIC", + "post": 3207, + "city": "Port Melbourne", + "phone1": "03-1248-8221", + "phone2": "0491-832-907", + "email": "alberta_motter@hotmail.com", + "web": "http://www.turlengineeringworks.com.au" + }, + { + "first_name": "Nikita", + "last_name": "Novosel", + "company_name": "Universal Granite & Marble Inc", + "address": "70 W Market St #20", + "state": "VIC", + "post": 3215, + "city": "Hamlyn Heights", + "phone1": "03-5716-1053", + "phone2": "0470-886-805", + "email": "nikita_novosel@novosel.net.au", + "web": "http://www.universalgranitemarbleinc.com.au" + }, + { + "first_name": "Jackie", + "last_name": "Borchelt", + "company_name": "Community Communication Servs", + "address": "80896 South Ave", + "state": "VIC", + "post": 3216, + "city": "Grovedale", + "phone1": "03-8055-8668", + "phone2": "0423-545-966", + "email": "jackie_borchelt@hotmail.com", + "web": "http://www.communitycommunicationservs.com.au" + }, + { + "first_name": "Breana", + "last_name": "Cassi", + "company_name": "Gormley Lore Murphy", + "address": "405 W Lee St", + "state": "VIC", + "post": 3221, + "city": "Stonehaven", + "phone1": "03-2305-8627", + "phone2": "0495-644-883", + "email": "breana@yahoo.com", + "web": "http://www.gormleyloremurphy.com.au" + }, + { + "first_name": "Kathrine", + "last_name": "Francoise", + "company_name": "Jackson, Brian C", + "address": "30691 Poplar Ave #4", + "state": "VIC", + "post": 3223, + "city": "Indented Head", + "phone1": "03-8791-9436", + "phone2": "0449-461-650", + "email": "kathrine@yahoo.com", + "web": "http://www.jacksonbrianc.com.au" + }, + { + "first_name": "Ming", + "last_name": "Thaxton", + "company_name": "Chem Aqua", + "address": "8 N Town East Blvd", + "state": "VIC", + "post": 3236, + "city": "Forrest", + "phone1": "03-4010-1900", + "phone2": "0486-557-304", + "email": "mthaxton@gmail.com", + "web": "http://www.chemaqua.com.au" + }, + { + "first_name": "Iraida", + "last_name": "Sionesini", + "company_name": "Arc Of Montgomery County Inc", + "address": "94 S Jefferson Rd", + "state": "VIC", + "post": 3240, + "city": "Modewarre", + "phone1": "03-4812-5654", + "phone2": "0490-625-307", + "email": "iraida.sionesini@yahoo.com", + "web": "http://www.arcofmontgomerycountyinc.com.au" + }, + { + "first_name": "Lettie", + "last_name": "Hessenthaler", + "company_name": "Sullivan, John M Esq", + "address": "76542 W Bijou St", + "state": "VIC", + "post": 3241, + "city": "Wurdiboluc", + "phone1": "03-5855-5156", + "phone2": "0454-956-810", + "email": "lettie_hessenthaler@hessenthaler.net.au", + "web": "http://www.sullivanjohnmesq.com.au" + }, + { + "first_name": "Gwen", + "last_name": "Julye", + "company_name": "Alphagraphics Printshops", + "address": "8 Old County Rd #3", + "state": "VIC", + "post": 3249, + "city": "Alvie", + "phone1": "03-7063-6734", + "phone2": "0465-547-766", + "email": "gjulye@hotmail.com", + "web": "http://www.alphagraphicsprintshops.com.au" + }, + { + "first_name": "Omega", + "last_name": "Mangino", + "company_name": "Kajo 1270 Am Radio", + "address": "495 Distribution Dr #996", + "state": "VIC", + "post": 3260, + "city": "Gnotuk", + "phone1": "03-6623-5501", + "phone2": "0422-968-757", + "email": "omega.mangino@hotmail.com", + "web": "http://www.kajoamradio.com.au" + }, + { + "first_name": "Jospeh", + "last_name": "Couzens", + "company_name": "M & M Quality Printing", + "address": "2749 Van Nuys Blvd", + "state": "VIC", + "post": 3265, + "city": "Panmure", + "phone1": "03-8451-7537", + "phone2": "0452-605-630", + "email": "jospeh.couzens@couzens.com.au", + "web": "http://www.mmqualityprinting.com.au" + }, + { + "first_name": "Dahlia", + "last_name": "Tummons", + "company_name": "Bare Bones", + "address": "6508 Adams St #32", + "state": "VIC", + "post": 3284, + "city": "Port Fairy", + "phone1": "03-8216-8640", + "phone2": "0430-768-907", + "email": "dahlia.tummons@gmail.com", + "web": "http://www.barebones.com.au" + }, + { + "first_name": "Lynelle", + "last_name": "Koury", + "company_name": "Jean Barbara Ltd", + "address": "7696 Carey Ave", + "state": "VIC", + "post": 3309, + "city": "Digby", + "phone1": "03-5213-8219", + "phone2": "0462-987-152", + "email": "lynelle.koury@koury.net.au", + "web": "http://www.jeanbarbaraltd.com.au" + }, + { + "first_name": "Delsie", + "last_name": "Ducos", + "company_name": "F H Overseas Export Inc", + "address": "17 Kamehameha Hwy", + "state": "VIC", + "post": 3314, + "city": "Cavendish", + "phone1": "03-1361-8465", + "phone2": "0458-548-827", + "email": "dducos@hotmail.com", + "web": "http://www.fhoverseasexportinc.com.au" + }, + { + "first_name": "Jeniffer", + "last_name": "Jezek", + "company_name": "Sheraton Inn Atlanta Northwest", + "address": "1089 Pacific Coast Hwy", + "state": "VIC", + "post": 3341, + "city": "Myrniong", + "phone1": "03-3268-5102", + "phone2": "0493-644-827", + "email": "jeniffer@gmail.com", + "web": "http://www.sheratoninnatlantanorthwest.com.au" + }, + { + "first_name": "Millie", + "last_name": "Pirkl", + "company_name": "Mann, Charles E Esq", + "address": "31 Schuyler Ave", + "state": "VIC", + "post": 3350, + "city": "Sovereign Hill", + "phone1": "03-6023-2680", + "phone2": "0410-688-713", + "email": "millie_pirkl@gmail.com", + "web": "http://www.manncharleseesq.com.au" + }, + { + "first_name": "Shaun", + "last_name": "Rael", + "company_name": "House Of Ing", + "address": "14304 Old Alexandria Ferry Rd", + "state": "VIC", + "post": 3357, + "city": "Buninyong", + "phone1": "03-8998-5485", + "phone2": "0498-627-281", + "email": "shaun.rael@rael.com.au", + "web": "http://www.houseofing.com.au" + }, + { + "first_name": "Juan", + "last_name": "Knudtson", + "company_name": "Newton Clerk", + "address": "466 Lincoln Blvd", + "state": "VIC", + "post": 3370, + "city": "Clunes", + "phone1": "03-9173-6140", + "phone2": "0474-730-764", + "email": "juan@gmail.com", + "web": "http://www.newtonclerk.com.au" + }, + { + "first_name": "Silvana", + "last_name": "Whelpley", + "company_name": "Stamp House", + "address": "548 Charmonie Ln", + "state": "VIC", + "post": 3392, + "city": "Minyip", + "phone1": "03-5175-6193", + "phone2": "0489-343-254", + "email": "swhelpley@yahoo.com", + "web": "http://www.stamphouse.com.au" + }, + { + "first_name": "Ora", + "last_name": "Handrick", + "company_name": "Fennessey Buick Inc", + "address": "466 Hillsdale Ave", + "state": "VIC", + "post": 3401, + "city": "Rocklands", + "phone1": "03-8357-4617", + "phone2": "0411-111-689", + "email": "ora.handrick@gmail.com", + "web": "http://www.fennesseybuickinc.com.au" + }, + { + "first_name": "Tien", + "last_name": "Kinney", + "company_name": "Orco State Empl Fed Crdt Un", + "address": "9 9th St #4", + "state": "VIC", + "post": 3420, + "city": "Lillimur", + "phone1": "03-7767-6169", + "phone2": "0468-244-186", + "email": "tien_kinney@kinney.com.au", + "web": "http://www.orcostateemplfedcrdtun.com.au" + }, + { + "first_name": "Wai", + "last_name": "Raddle", + "company_name": "Dot Pitch Electronics", + "address": "2 Stirrup Dr #4907", + "state": "VIC", + "post": 3442, + "city": "Carlsruhe", + "phone1": "03-4811-3832", + "phone2": "0494-517-582", + "email": "wai.raddle@raddle.com.au", + "web": "http://www.dotpitchelectronics.com.au" + }, + { + "first_name": "Clement", + "last_name": "Chee", + "company_name": "Bark Eater Inn", + "address": "5159 Saint Ann St", + "state": "VIC", + "post": 3451, + "city": "Golden Point", + "phone1": "03-2775-4083", + "phone2": "0485-660-179", + "email": "clement@hotmail.com", + "web": "http://www.barkeaterinn.com.au" + }, + { + "first_name": "Dean", + "last_name": "Vollstedt", + "company_name": "Ship It Packaging Inc", + "address": "4 Grand St", + "state": "VIC", + "post": 3462, + "city": "Muckleford South", + "phone1": "03-6776-1146", + "phone2": "0492-559-630", + "email": "dvollstedt@vollstedt.com.au", + "web": "http://www.shipitpackaginginc.com.au" + }, + { + "first_name": "Chara", + "last_name": "Leveston", + "company_name": "Arthur Andersen & Co", + "address": "72 N Buckeye Ave", + "state": "VIC", + "post": 3465, + "city": "Daisy Hill", + "phone1": "03-2574-8915", + "phone2": "0415-341-310", + "email": "cleveston@gmail.com", + "web": "http://www.arthurandersenco.com.au" + }, + { + "first_name": "Lashonda", + "last_name": "Langanke", + "company_name": "Krausert, Diane D Esq", + "address": "667 S Highland Dr #4", + "state": "VIC", + "post": 3465, + "city": "Simson", + "phone1": "03-9838-7533", + "phone2": "0491-793-730", + "email": "lashonda@langanke.net.au", + "web": "http://www.krausertdianedesq.com.au" + }, + { + "first_name": "Isaiah", + "last_name": "Kueter", + "company_name": "Jordan, Mark D Esq", + "address": "8 W Virginia St", + "state": "VIC", + "post": 3468, + "city": "Amphitheatre", + "phone1": "03-3725-6290", + "phone2": "0494-282-122", + "email": "ikueter@kueter.com.au", + "web": "http://www.jordanmarkdesq.com.au" + }, + { + "first_name": "Andrew", + "last_name": "Keks", + "company_name": "Anthonys", + "address": "51 Bridge Ave", + "state": "VIC", + "post": 3494, + "city": "Carwarp", + "phone1": "03-5251-3153", + "phone2": "0499-155-325", + "email": "andrew@gmail.com", + "web": "http://www.anthonys.com.au" + }, + { + "first_name": "Irving", + "last_name": "Plocica", + "company_name": "Johnston, George M Esq", + "address": "65 Clayton Rd", + "state": "VIC", + "post": 3496, + "city": "Cullulleraine", + "phone1": "03-9050-2741", + "phone2": "0465-434-187", + "email": "irving@hotmail.com", + "web": "http://www.johnstongeorgemesq.com.au" + }, + { + "first_name": "Lina", + "last_name": "Schwiebert", + "company_name": "Chemex Labs Ltd", + "address": "68538 N Bentz St #1451", + "state": "VIC", + "post": 3501, + "city": "Koorlong", + "phone1": "03-3608-5660", + "phone2": "0487-835-113", + "email": "lina@yahoo.com", + "web": "http://www.chemexlabsltd.com.au" + }, + { + "first_name": "Pansy", + "last_name": "Todesco", + "company_name": "Schmidt, Charles E Jr", + "address": "684 William St", + "state": "VIC", + "post": 3551, + "city": "Tarnagulla", + "phone1": "03-3233-4255", + "phone2": "0467-468-894", + "email": "pansy_todesco@gmail.com", + "web": "http://www.schmidtcharlesejr.com.au" + }, + { + "first_name": "Aleta", + "last_name": "Poarch", + "company_name": "Barrett Burke Wilson Castl", + "address": "5 Liberty Ave", + "state": "VIC", + "post": 3557, + "city": "Fosterville", + "phone1": "03-2691-1298", + "phone2": "0419-138-629", + "email": "apoarch@gmail.com", + "web": "http://www.barrettburkewilsoncastl.com.au" + }, + { + "first_name": "Brigette", + "last_name": "Breckenstein", + "company_name": "Blewett, Yvonne S", + "address": "971 Northwest Blvd", + "state": "VIC", + "post": 3630, + "city": "Caniambo", + "phone1": "03-5722-3451", + "phone2": "0462-308-800", + "email": "brigette@breckenstein.com.au", + "web": "http://www.blewettyvonnes.com.au" + }, + { + "first_name": "Eleonore", + "last_name": "Everline", + "company_name": "Psychotherapy Associates", + "address": "1 Us Highway 206", + "state": "VIC", + "post": 3631, + "city": "Kialla East", + "phone1": "03-5355-5505", + "phone2": "0497-442-813", + "email": "eeverline@hotmail.com", + "web": "http://www.psychotherapyassociates.com.au" + }, + { + "first_name": "Geraldine", + "last_name": "Neisius", + "company_name": "Re/max Realty Services", + "address": "96 Armitage Ave", + "state": "VIC", + "post": 3640, + "city": "Katunga", + "phone1": "03-8243-2999", + "phone2": "0440-707-817", + "email": "geraldine@gmail.com", + "web": "http://www.remaxrealtyservices.com.au" + }, + { + "first_name": "Felix", + "last_name": "Bumby", + "company_name": "Epsilon Products Company", + "address": "82 Tremont St #4", + "state": "VIC", + "post": 3670, + "city": "Baddaginnie", + "phone1": "03-1431-3996", + "phone2": "0485-718-212", + "email": "felix.bumby@bumby.com.au", + "web": "http://www.epsilonproductscompany.com.au" + }, + { + "first_name": "Gracie", + "last_name": "Vicente", + "company_name": "Central Nebraska Home Care", + "address": "4 W 18th St", + "state": "VIC", + "post": 3678, + "city": "Oxley", + "phone1": "03-2444-8291", + "phone2": "0420-776-847", + "email": "gracie.vicente@hotmail.com", + "web": "http://www.centralnebraskahomecare.com.au" + }, + { + "first_name": "Skye", + "last_name": "Culcasi", + "company_name": "Sullivan & Associates Ltd", + "address": "82655 Shawnee Mission Pky #5798", + "state": "VIC", + "post": 3688, + "city": "Barnawartha", + "phone1": "03-9075-3104", + "phone2": "0451-601-420", + "email": "skye_culcasi@hotmail.com", + "web": "http://www.sullivanassociatesltd.com.au" + }, + { + "first_name": "Henriette", + "last_name": "Gish", + "company_name": "Parker Bush & Lane Pc", + "address": "43 E Main St", + "state": "VIC", + "post": 3691, + "city": "Baranduda", + "phone1": "03-9935-5135", + "phone2": "0413-952-396", + "email": "henriette.gish@gish.net.au", + "web": "http://www.parkerbushlanepc.com.au" + }, + { + "first_name": "Inocencia", + "last_name": "Angeron", + "company_name": "South Adams Savings Bank", + "address": "13386 Tamarco Dr #20", + "state": "VIC", + "post": 3697, + "city": "Tawonga", + "phone1": "03-6268-2647", + "phone2": "0482-712-669", + "email": "inocencia.angeron@angeron.net.au", + "web": "http://www.southadamssavingsbank.com.au" + }, + { + "first_name": "Marilynn", + "last_name": "Herrera", + "company_name": "Brown, Alan Esq", + "address": "717 Midway Pl", + "state": "VIC", + "post": 3697, + "city": "Tawonga", + "phone1": "03-1447-7041", + "phone2": "0474-199-825", + "email": "marilynn.herrera@herrera.net.au", + "web": "http://www.brownalanesq.com.au" + }, + { + "first_name": "Carman", + "last_name": "Robasciotti", + "company_name": "Vaughan, James J Esq", + "address": "4 Spinning Wheel Ln", + "state": "VIC", + "post": 3701, + "city": "Granya", + "phone1": "03-1570-9956", + "phone2": "0420-704-683", + "email": "carman_robasciotti@hotmail.com", + "web": "http://www.vaughanjamesjesq.com.au" + }, + { + "first_name": "Delbert", + "last_name": "Houben", + "company_name": "Hermann Assocs Inc Safe Mart", + "address": "59 Murray Hill Pky", + "state": "VIC", + "post": 3701, + "city": "Mitta Mitta", + "phone1": "03-1560-6800", + "phone2": "0417-833-905", + "email": "delbert.houben@hotmail.com", + "web": "http://www.hermannassocsincsafemart.com.au" + }, + { + "first_name": "Carylon", + "last_name": "Bayot", + "company_name": "Wzyx 1440 Am", + "address": "5905 S 32nd St", + "state": "VIC", + "post": 3714, + "city": "Alexandra", + "phone1": "03-8858-7088", + "phone2": "0475-926-458", + "email": "carylon@gmail.com", + "web": "http://www.wzyxam.com.au" + }, + { + "first_name": "Glynda", + "last_name": "Sanzenbacher", + "company_name": "Hinkson Cooper Weaver Inc", + "address": "80 Monroe St", + "state": "VIC", + "post": 3757, + "city": "Kinglake West", + "phone1": "03-1051-7865", + "phone2": "0451-639-283", + "email": "glynda@sanzenbacher.com.au", + "web": "http://www.hinksoncooperweaverinc.com.au" + }, + { + "first_name": "Haley", + "last_name": "Vaughn", + "company_name": "Martin Nighswander & Mitchell", + "address": "29 Nottingham Way #926", + "state": "VIC", + "post": 3765, + "city": "Montrose", + "phone1": "03-7035-6484", + "phone2": "0430-736-276", + "email": "haley_vaughn@vaughn.net.au", + "web": "http://www.martinnighswandermitchell.com.au" + }, + { + "first_name": "Georgeanna", + "last_name": "Silverstone", + "company_name": "Emess Professional Svces", + "address": "185 W Guadalupe Rd", + "state": "VIC", + "post": 3775, + "city": "Steels Creek", + "phone1": "03-7416-6750", + "phone2": "0436-793-916", + "email": "georgeanna@silverstone.net.au", + "web": "http://www.emessprofessionalsvces.com.au" + }, + { + "first_name": "Felicitas", + "last_name": "Orlinski", + "company_name": "Jen E Distributing Co", + "address": "9 Beverly Rd #5", + "state": "VIC", + "post": 3782, + "city": "Emerald", + "phone1": "03-2451-1896", + "phone2": "0444-326-506", + "email": "felicitas_orlinski@orlinski.com.au", + "web": "http://www.jenedistributingco.com.au" + }, + { + "first_name": "Marcos", + "last_name": "Seniff", + "company_name": "Arizona Equipment Trnsprt Inc", + "address": "228 S Tyler St", + "state": "VIC", + "post": 3782, + "city": "Emerald", + "phone1": "03-6340-5010", + "phone2": "0464-786-310", + "email": "marcos_seniff@gmail.com", + "web": "http://www.arizonaequipmenttrnsprtinc.com.au" + }, + { + "first_name": "Lore", + "last_name": "Brothers", + "company_name": "American General Finance", + "address": "70086 Division St #3", + "state": "VIC", + "post": 3791, + "city": "Kallista", + "phone1": "03-8780-3473", + "phone2": "0449-337-116", + "email": "lore@hotmail.com", + "web": "http://www.americangeneralfinance.com.au" + }, + { + "first_name": "Malcom", + "last_name": "Leja", + "company_name": "Johnsen, Robert U Esq", + "address": "56232 Hohman Ave", + "state": "VIC", + "post": 3809, + "city": "Officer", + "phone1": "03-2477-9133", + "phone2": "0412-417-394", + "email": "malcom@leja.com.au", + "web": "http://www.johnsenrobertuesq.com.au" + }, + { + "first_name": "Pa", + "last_name": "Badgero", + "company_name": "Korolishin, Michael Esq", + "address": "20 Meadow Ln", + "state": "VIC", + "post": 3810, + "city": "Pakenham Upper", + "phone1": "03-1861-5074", + "phone2": "0480-433-145", + "email": "pa_badgero@badgero.com.au", + "web": "http://www.korolishinmichaelesq.com.au" + }, + { + "first_name": "Artie", + "last_name": "Saine", + "company_name": "Dixon, Eric D Esq", + "address": "41 Washington Blvd", + "state": "VIC", + "post": 3814, + "city": "Cora Lynn", + "phone1": "03-3457-2524", + "phone2": "0433-550-202", + "email": "artie_saine@yahoo.com", + "web": "http://www.dixonericdesq.com.au" + }, + { + "first_name": "Jesus", + "last_name": "Merkt", + "company_name": "Unr Rohn", + "address": "1554 Bracken Crk", + "state": "VIC", + "post": 3858, + "city": "Licola", + "phone1": "03-9341-9757", + "phone2": "0492-739-675", + "email": "jesus_merkt@merkt.net.au", + "web": "http://www.unrrohn.com.au" + }, + { + "first_name": "Reta", + "last_name": "Qazi", + "company_name": "American Pie Co Inc", + "address": "1351 Simpson St", + "state": "VIC", + "post": 3860, + "city": "Maffra", + "phone1": "03-1974-9948", + "phone2": "0446-105-779", + "email": "reta.qazi@yahoo.com", + "web": "http://www.americanpiecoinc.com.au" + }, + { + "first_name": "Gianna", + "last_name": "Eilers", + "company_name": "Cochnower Pest Control", + "address": "7 Valley Blvd", + "state": "VIC", + "post": 3885, + "city": "Buchan", + "phone1": "03-4328-5253", + "phone2": "0418-994-884", + "email": "gianna@yahoo.com", + "web": "http://www.cochnowerpestcontrol.com.au" + }, + { + "first_name": "Alonzo", + "last_name": "Polek", + "company_name": "Braid Electric Co", + "address": "8 S Plaza Dr", + "state": "VIC", + "post": 3888, + "city": "Tubbut", + "phone1": "03-2403-7167", + "phone2": "0419-100-429", + "email": "alonzo_polek@polek.net.au", + "web": "http://www.braidelectricco.com.au" + }, + { + "first_name": "Hector", + "last_name": "Barras", + "company_name": "Vernon Manor Hotel", + "address": "62 J St #450", + "state": "VIC", + "post": 3889, + "city": "Combienbar", + "phone1": "03-3017-8394", + "phone2": "0438-431-666", + "email": "hector.barras@barras.com.au", + "web": "http://www.vernonmanorhotel.com.au" + }, + { + "first_name": "Gabriele", + "last_name": "Frabotta", + "company_name": "Stewart Levine & Davis", + "address": "6 Abbott Rd", + "state": "VIC", + "post": 3895, + "city": "Ensay", + "phone1": "03-2689-6049", + "phone2": "0460-834-526", + "email": "gabriele_frabotta@gmail.com", + "web": "http://www.stewartlevinedavis.com.au" + }, + { + "first_name": "Tamala", + "last_name": "Hickie", + "company_name": "Mister Bagel", + "address": "351 Crooks Rd", + "state": "VIC", + "post": 3900, + "city": "Benambra", + "phone1": "03-3695-2399", + "phone2": "0432-182-830", + "email": "tamala_hickie@yahoo.com", + "web": "http://www.misterbagel.com.au" + }, + { + "first_name": "Kristin", + "last_name": "Shiflet", + "company_name": "Jones, Peter B Esq", + "address": "503 Fulford Ave", + "state": "VIC", + "post": 3927, + "city": "Somers", + "phone1": "03-4529-7210", + "phone2": "0488-223-788", + "email": "kristin@hotmail.com", + "web": "http://www.jonespeterbesq.com.au" + }, + { + "first_name": "Frederic", + "last_name": "Schimke", + "company_name": "Curtis & Curtis Inc", + "address": "705 Stanwix St", + "state": "VIC", + "post": 3934, + "city": "Mount Martha", + "phone1": "03-4829-5695", + "phone2": "0435-982-307", + "email": "fschimke@schimke.com.au", + "web": "http://www.curtiscurtisinc.com.au" + }, + { + "first_name": "Barrie", + "last_name": "Nicley", + "company_name": "Paragon Cable Tv", + "address": "4129 Abbott Dr", + "state": "VIC", + "post": 3959, + "city": "Fish Creek", + "phone1": "03-6443-2786", + "phone2": "0455-270-505", + "email": "bnicley@nicley.com.au", + "web": "http://www.paragoncabletv.com.au" + }, + { + "first_name": "Lynda", + "last_name": "Lazzaro", + "company_name": "Funding Equity Corp", + "address": "20214 W Main St", + "state": "VIC", + "post": 3971, + "city": "Macks Creek", + "phone1": "03-4933-4205", + "phone2": "0472-315-303", + "email": "lynda.lazzaro@gmail.com", + "web": "http://www.fundingequitycorp.com.au" + }, + { + "first_name": "Sabrina", + "last_name": "Rabena", + "company_name": "Joyces Submarine Sandwiches", + "address": "327 Ward Pky", + "state": "VIC", + "post": 3981, + "city": "Bayles", + "phone1": "03-5662-3542", + "phone2": "0486-768-529", + "email": "sabrina_rabena@hotmail.com", + "web": "http://www.joycessubmarinesandwiches.com.au" + }, + { + "first_name": "Dexter", + "last_name": "Prosienski", + "company_name": "Communication Buildings Amer", + "address": "490 Court St", + "state": "VIC", + "post": 3987, + "city": "Nyora", + "phone1": "03-2454-6523", + "phone2": "0472-707-132", + "email": "dexter@prosienski.net.au", + "web": "http://www.communicationbuildingsamer.com.au" + }, + { + "first_name": "Lawana", + "last_name": "Yuasa", + "company_name": "Viking Lodge", + "address": "77818 Prince Drew Rd", + "state": "VIC", + "post": 3995, + "city": "Cape Paterson", + "phone1": "03-2324-3472", + "phone2": "0456-330-756", + "email": "lawana_yuasa@yuasa.net.au", + "web": "http://www.vikinglodge.com.au" + }, + { + "first_name": "Selma", + "last_name": "Elm", + "company_name": "Preston, Anne M Esq", + "address": "6787 Emerson St", + "state": "VIC", + "post": 3995, + "city": "Woolamai", + "phone1": "03-9183-9493", + "phone2": "0418-581-770", + "email": "selm@elm.net.au", + "web": "http://www.prestonannemesq.com.au" + }, + { + "first_name": "Sharan", + "last_name": "Wodicka", + "company_name": "Usa Asbestos Co", + "address": "8454 6 17 M At Bradleys", + "state": "WA", + "post": 6008, + "city": "Shenton Park", + "phone1": "08-4712-2157", + "phone2": "0413-129-424", + "email": "sharan@wodicka.net.au", + "web": "http://www.usaasbestosco.com.au" + }, + { + "first_name": "Grover", + "last_name": "Reynolds", + "company_name": "Okon Inc", + "address": "2867 Industrial Way", + "state": "WA", + "post": 6018, + "city": "Innaloo", + "phone1": "08-7785-3040", + "phone2": "0447-228-633", + "email": "grover.reynolds@gmail.com", + "web": "http://www.okoninc.com.au" + }, + { + "first_name": "Curtis", + "last_name": "Ware", + "company_name": "American Inst Muscl Studies", + "address": "51 Greenwood Ave", + "state": "WA", + "post": 6030, + "city": "Ridgewood", + "phone1": "08-6278-9532", + "phone2": "0484-331-585", + "email": "curtis@ware.net.au", + "web": "http://www.americaninstmusclstudies.com.au" + }, + { + "first_name": "Thomasena", + "last_name": "Graziosi", + "company_name": "Hutchinson Inc", + "address": "5 Jackson St", + "state": "WA", + "post": 6031, + "city": "Neerabup", + "phone1": "08-4849-4417", + "phone2": "0434-497-618", + "email": "thomasena@gmail.com", + "web": "http://www.hutchinsoninc.com.au" + }, + { + "first_name": "Leatha", + "last_name": "Block", + "company_name": "Chadds Ford Winery", + "address": "6926 Orange Ave", + "state": "WA", + "post": 6037, + "city": "Two Rocks", + "phone1": "08-7635-8350", + "phone2": "0445-211-162", + "email": "leatha_block@gmail.com", + "web": "http://www.chaddsfordwinery.com.au" + }, + { + "first_name": "Wilburn", + "last_name": "Lary", + "company_name": "Padrick, Comer W Jr", + "address": "72 Park Ave", + "state": "WA", + "post": 6041, + "city": "Gabbadah", + "phone1": "08-1042-4275", + "phone2": "0431-743-155", + "email": "wlary@lary.net.au", + "web": "http://www.padrickcomerwjr.com.au" + }, + { + "first_name": "Marci", + "last_name": "Aveline", + "company_name": "Richards, Don R Esq", + "address": "58 State St #998", + "state": "WA", + "post": 6056, + "city": "Boya", + "phone1": "08-3342-3889", + "phone2": "0447-443-927", + "email": "marci.aveline@hotmail.com", + "web": "http://www.richardsdonresq.com.au" + }, + { + "first_name": "Virgilio", + "last_name": "Phay", + "company_name": "Reef Encrustaceans", + "address": "8494 E 57th St", + "state": "WA", + "post": 6056, + "city": "Stratton", + "phone1": "08-8147-9584", + "phone2": "0460-368-567", + "email": "vphay@phay.com.au", + "web": "http://www.reefencrustaceans.com.au" + }, + { + "first_name": "Lorita", + "last_name": "Roches", + "company_name": "Village Meadows", + "address": "32 E Poythress St", + "state": "WA", + "post": 6061, + "city": "Westminster", + "phone1": "08-2358-3115", + "phone2": "0436-530-773", + "email": "lorita_roches@roches.net.au", + "web": "http://www.villagemeadows.com.au" + }, + { + "first_name": "Johana", + "last_name": "Conquest", + "company_name": "Henri D Kahn Insurance", + "address": "19 Court St", + "state": "WA", + "post": 6076, + "city": "Paulls Valley", + "phone1": "08-6579-7569", + "phone2": "0442-561-392", + "email": "johana@conquest.net.au", + "web": "http://www.henridkahninsurance.com.au" + }, + { + "first_name": "Alva", + "last_name": "Shoulders", + "company_name": "Warren Leadership", + "address": "461 S Fannin Ave", + "state": "WA", + "post": 6106, + "city": "Welshpool", + "phone1": "08-8329-4211", + "phone2": "0471-940-163", + "email": "alva@gmail.com", + "web": "http://www.warrenleadership.com.au" + }, + { + "first_name": "Daisy", + "last_name": "Kearsey", + "company_name": "Faber Castell Corporation", + "address": "556 Bernardo Cent", + "state": "WA", + "post": 6112, + "city": "Mount Nasura", + "phone1": "08-2127-5977", + "phone2": "0455-503-406", + "email": "dkearsey@yahoo.com", + "web": "http://www.fabercastellcorporation.com.au" + }, + { + "first_name": "Corrina", + "last_name": "Lindblom", + "company_name": "Progressive Machine Co", + "address": "1 Westpark Dr", + "state": "WA", + "post": 6152, + "city": "Salter Point", + "phone1": "08-7915-5110", + "phone2": "0463-118-373", + "email": "clindblom@gmail.com", + "web": "http://www.progressivemachineco.com.au" + }, + { + "first_name": "Yolande", + "last_name": "Scrimsher", + "company_name": "Spclty Fastening Systems Inc", + "address": "71089 Queens Blvd", + "state": "WA", + "post": 6155, + "city": "Canning Vale", + "phone1": "08-2136-2433", + "phone2": "0472-691-355", + "email": "yolande@yahoo.com", + "web": "http://www.spcltyfasteningsystemsinc.com.au" + }, + { + "first_name": "Lauran", + "last_name": "Huntsberger", + "company_name": "Triangle Engineering Inc", + "address": "41 E Jackson St", + "state": "WA", + "post": 6155, + "city": "Willetton", + "phone1": "08-2704-3706", + "phone2": "0476-605-889", + "email": "lhuntsberger@huntsberger.net.au", + "web": "http://www.triangleengineeringinc.com.au" + }, + { + "first_name": "Tammi", + "last_name": "Schiavi", + "company_name": "Crew, Robert B Esq", + "address": "78 Sw Beaverton Hillsdale H", + "state": "WA", + "post": 6155, + "city": "Willetton", + "phone1": "08-9707-2679", + "phone2": "0425-809-254", + "email": "tammi.schiavi@hotmail.com", + "web": "http://www.crewrobertbesq.com.au" + }, + { + "first_name": "Coletta", + "last_name": "Thro", + "company_name": "Hoffman, Carl Esq", + "address": "64865 Main St", + "state": "WA", + "post": 6159, + "city": "North Fremantle", + "phone1": "08-1991-6947", + "phone2": "0444-915-799", + "email": "coletta.thro@thro.net.au", + "web": "http://www.hoffmancarlesq.com.au" + }, + { + "first_name": "Chaya", + "last_name": "Muhlbauer", + "company_name": "Henry D Lederman", + "address": "44009 W 63rd #269", + "state": "WA", + "post": 6207, + "city": "North Dandalup", + "phone1": "08-5943-4352", + "phone2": "0469-609-289", + "email": "chaya_muhlbauer@muhlbauer.net.au", + "web": "http://www.henrydlederman.com.au" + }, + { + "first_name": "Juliann", + "last_name": "Dammeyer", + "company_name": "Wilheim, Kari A Esq", + "address": "6 De Belier Rue", + "state": "WA", + "post": 6210, + "city": "Bouvard", + "phone1": "08-3562-8644", + "phone2": "0492-961-209", + "email": "juliann@gmail.com", + "web": "http://www.wilheimkariaesq.com.au" + }, + { + "first_name": "Clare", + "last_name": "Bortignon", + "company_name": "Sparta Home Center", + "address": "73 Dennison St #70", + "state": "WA", + "post": 6210, + "city": "Herron", + "phone1": "08-9256-6135", + "phone2": "0423-874-910", + "email": "clare_bortignon@hotmail.com", + "web": "http://www.spartahomecenter.com.au" + }, + { + "first_name": "Ettie", + "last_name": "Luckenbach", + "company_name": "S E M A", + "address": "2902 Edison Dr #278", + "state": "WA", + "post": 6210, + "city": "Mandurah East", + "phone1": "08-9378-7021", + "phone2": "0424-568-217", + "email": "ettie@yahoo.com", + "web": "http://www.sema.com.au" + }, + { + "first_name": "Mariko", + "last_name": "Stayer", + "company_name": "Inabinet, Macre Esq", + "address": "534 Schoenborn St #51", + "state": "WA", + "post": 6215, + "city": "Hamel", + "phone1": "08-5558-9019", + "phone2": "0427-885-282", + "email": "mariko_stayer@hotmail.com", + "web": "http://www.inabinetmacreesq.com.au" + }, + { + "first_name": "King", + "last_name": "Picton", + "company_name": "U S Rentals", + "address": "3 W Pioneer Dr", + "state": "WA", + "post": 6215, + "city": "Preston Beach", + "phone1": "08-7605-2080", + "phone2": "0468-322-703", + "email": "king@hotmail.com", + "web": "http://www.usrentals.com.au" + }, + { + "first_name": "Naomi", + "last_name": "Tuamoheloa", + "company_name": "Dayer Real Estate Group", + "address": "85 S Washington Ave", + "state": "WA", + "post": 6225, + "city": "Muja", + "phone1": "08-6137-1726", + "phone2": "0430-962-223", + "email": "naomi@yahoo.com", + "web": "http://www.dayerrealestategroup.com.au" + }, + { + "first_name": "Yuette", + "last_name": "Metevelis", + "company_name": "American Speedy Printing Ctrs", + "address": "8219 Roswell Rd Ne", + "state": "WA", + "post": 6237, + "city": "North Boyanup", + "phone1": "08-4700-8894", + "phone2": "0483-854-984", + "email": "yuette.metevelis@metevelis.net.au", + "web": "http://www.americanspeedyprintingctrs.com.au" + }, + { + "first_name": "Aileen", + "last_name": "Menez", + "company_name": "Cuzzo, Michael J Esq", + "address": "8 S Main St", + "state": "WA", + "post": 6258, + "city": "Manjimup", + "phone1": "08-1196-2822", + "phone2": "0495-852-298", + "email": "aileen_menez@menez.net.au", + "web": "http://www.cuzzomichaeljesq.com.au" + }, + { + "first_name": "Sherill", + "last_name": "Klar", + "company_name": "Midway Hotel", + "address": "87 Sylvan Ave", + "state": "WA", + "post": 6258, + "city": "Nyamup", + "phone1": "08-6522-8931", + "phone2": "0427-991-688", + "email": "sklar@hotmail.com", + "web": "http://www.midwayhotel.com.au" + }, + { + "first_name": "Tamra", + "last_name": "Kenfield", + "company_name": "Mackraft Signs", + "address": "481 925n N #959", + "state": "WA", + "post": 6280, + "city": "Kealy", + "phone1": "08-5614-9153", + "phone2": "0438-378-139", + "email": "tkenfield@kenfield.com.au", + "web": "http://www.mackraftsigns.com.au" + }, + { + "first_name": "Cassie", + "last_name": "Soros", + "company_name": "A B C Tank Co", + "address": "67765 W 11th St", + "state": "WA", + "post": 6280, + "city": "Yelverton", + "phone1": "08-2666-6390", + "phone2": "0423-281-356", + "email": "csoros@gmail.com", + "web": "http://www.abctankco.com.au" + }, + { + "first_name": "Charlena", + "last_name": "Decamp", + "company_name": "Stanco Metal Products Inc", + "address": "8 Allied Dr", + "state": "WA", + "post": 6285, + "city": "Burnside", + "phone1": "08-7615-2416", + "phone2": "0469-445-592", + "email": "charlena@gmail.com", + "web": "http://www.stancometalproductsinc.com.au" + }, + { + "first_name": "Delila", + "last_name": "Buchman", + "company_name": "Frasier Karen L Kolligs", + "address": "361 Via Colinas", + "state": "WA", + "post": 6286, + "city": "Redgate", + "phone1": "08-1791-7668", + "phone2": "0454-544-286", + "email": "delila.buchman@hotmail.com", + "web": "http://www.frasierkarenlkolligs.com.au" + }, + { + "first_name": "Lashawna", + "last_name": "Filan", + "company_name": "South Carolina State Housing F", + "address": "8 Lincoln Way W #6698", + "state": "WA", + "post": 6302, + "city": "Greenhills", + "phone1": "08-6937-4366", + "phone2": "0488-276-458", + "email": "lashawna.filan@filan.net.au", + "web": "http://www.southcarolinastatehousingf.com.au" + }, + { + "first_name": "Rachael", + "last_name": "Crawley", + "company_name": "Stamell Tabacco & Schager", + "address": "82 Hopkins Plz", + "state": "WA", + "post": 6302, + "city": "Inkpen", + "phone1": "08-2089-8553", + "phone2": "0459-738-842", + "email": "rachael@gmail.com", + "web": "http://www.stamelltabaccoschager.com.au" + }, + { + "first_name": "Pearly", + "last_name": "Hedstrom", + "company_name": "G Whitfield Richards Co", + "address": "62296 S Elliott Rd #2", + "state": "WA", + "post": 6308, + "city": "Wandering", + "phone1": "08-3412-6699", + "phone2": "0460-335-582", + "email": "pearly@gmail.com", + "web": "http://www.gwhitfieldrichardsco.com.au" + }, + { + "first_name": "Elenora", + "last_name": "Handler", + "company_name": "A & A Custom Rubber Stamps", + "address": "8 Middletown Blvd #708", + "state": "WA", + "post": 6311, + "city": "Wardering", + "phone1": "08-5671-3318", + "phone2": "0481-367-908", + "email": "ehandler@yahoo.com", + "web": "http://www.aacustomrubberstamps.com.au" + }, + { + "first_name": "Idella", + "last_name": "Scotland", + "company_name": "Artesian Ice & Cold Storage Co", + "address": "373 Lafayette St", + "state": "WA", + "post": 6316, + "city": "Cartmeticup", + "phone1": "08-7868-1355", + "phone2": "0451-966-921", + "email": "idella@hotmail.com", + "web": "http://www.artesianicecoldstorageco.com.au" + }, + { + "first_name": "Tamie", + "last_name": "Hollimon", + "company_name": "Credit Union Of The Rockies", + "address": "3 Cherokee St", + "state": "WA", + "post": 6320, + "city": "Bobalong", + "phone1": "08-7046-5484", + "phone2": "0423-870-900", + "email": "tamie@hollimon.com.au", + "web": "http://www.creditunionoftherockies.com.au" + }, + { + "first_name": "Myrtie", + "last_name": "Korba", + "company_name": "United Mortgage", + "address": "82 W Market St", + "state": "WA", + "post": 6320, + "city": "Dartnall", + "phone1": "08-3174-2706", + "phone2": "0412-679-832", + "email": "mkorba@hotmail.com", + "web": "http://www.unitedmortgage.com.au" + }, + { + "first_name": "Jessenia", + "last_name": "Sarp", + "company_name": "Skyline Lodge & Restaurant", + "address": "5775 Mechanic St #517", + "state": "WA", + "post": 6320, + "city": "Wansbrough", + "phone1": "08-8878-5994", + "phone2": "0422-775-760", + "email": "jsarp@hotmail.com", + "web": "http://www.skylinelodgerestaurant.com.au" + }, + { + "first_name": "Iola", + "last_name": "Baird", + "company_name": "Xandex Inc", + "address": "48 General George Patton Dr #8611", + "state": "WA", + "post": 6330, + "city": "Goode Beach", + "phone1": "08-2325-5905", + "phone2": "0482-635-206", + "email": "ibaird@baird.net.au", + "web": "http://www.xandexinc.com.au" + }, + { + "first_name": "Na", + "last_name": "Hodges", + "company_name": "Automatic Feed Co", + "address": "5 Aquarium Pl #1", + "state": "WA", + "post": 6336, + "city": "Ongerup", + "phone1": "08-8215-1588", + "phone2": "0444-777-459", + "email": "na_hodges@hotmail.com", + "web": "http://www.automaticfeedco.com.au" + }, + { + "first_name": "Alona", + "last_name": "Driesenga", + "company_name": "Redington, Thomas P Esq", + "address": "8961 S Central Expy", + "state": "WA", + "post": 6338, + "city": "Stirling Range National Park", + "phone1": "08-6777-4159", + "phone2": "0428-176-191", + "email": "alona_driesenga@hotmail.com", + "web": "http://www.redingtonthomaspesq.com.au" + }, + { + "first_name": "Nadine", + "last_name": "Okojie", + "company_name": "Hirsch, Walter W Esq", + "address": "56 Tank Farm Rd", + "state": "WA", + "post": 6352, + "city": "Kukerin", + "phone1": "08-9746-2341", + "phone2": "0424-801-736", + "email": "nadine.okojie@okojie.com.au", + "web": "http://www.hirschwalterwesq.com.au" + }, + { + "first_name": "Jarvis", + "last_name": "Nicols", + "company_name": "Thudium Mail Advg Company", + "address": "5656 N Fiesta Blvd", + "state": "WA", + "post": 6355, + "city": "East Newdegate", + "phone1": "08-2117-5217", + "phone2": "0436-246-951", + "email": "jarvis@gmail.com", + "web": "http://www.thudiummailadvgcompany.com.au" + }, + { + "first_name": "Yuonne", + "last_name": "Carabajal", + "company_name": "Hub Manufacturing Company Inc", + "address": "2714 Beach Blvd", + "state": "WA", + "post": 6394, + "city": "Changerup", + "phone1": "08-7432-4632", + "phone2": "0470-345-731", + "email": "ycarabajal@carabajal.com.au", + "web": "http://www.hubmanufacturingcompanyinc.com.au" + }, + { + "first_name": "Francesco", + "last_name": "Kloos", + "company_name": "Borough Clerk", + "address": "82136 Post Rd", + "state": "WA", + "post": 6397, + "city": "Rocky Gully", + "phone1": "08-1687-4873", + "phone2": "0420-185-206", + "email": "fkloos@kloos.com.au", + "web": "http://www.boroughclerk.com.au" + }, + { + "first_name": "Mary", + "last_name": "Irene", + "company_name": "Superior Trading Co", + "address": "3 N Michigan Ave", + "state": "WA", + "post": 6405, + "city": "Warding East", + "phone1": "08-8012-6469", + "phone2": "0411-620-740", + "email": "mirene@gmail.com", + "web": "http://www.superiortradingco.com.au" + }, + { + "first_name": "Armando", + "last_name": "Barkley", + "company_name": "Oregon Handling Equip Co", + "address": "70680 S Rider Trl", + "state": "WA", + "post": 6407, + "city": "Watercarrin", + "phone1": "08-8161-8201", + "phone2": "0465-254-471", + "email": "armando.barkley@yahoo.com", + "web": "http://www.oregonhandlingequipco.com.au" + }, + { + "first_name": "Ernestine", + "last_name": "Paavola", + "company_name": "Northbros Co Divsn Natl Svc", + "address": "6 E Gloria Switch Rd #96", + "state": "WA", + "post": 6409, + "city": "Yorkrakine", + "phone1": "08-1140-6357", + "phone2": "0414-354-955", + "email": "ernestine.paavola@paavola.com.au", + "web": "http://www.northbroscodivsnnatlsvc.com.au" + }, + { + "first_name": "Maryann", + "last_name": "Tates", + "company_name": "Dalbec Agency Inc", + "address": "75700 Academy Rd", + "state": "WA", + "post": 6420, + "city": "Cramphorne", + "phone1": "08-1520-4093", + "phone2": "0479-474-917", + "email": "mtates@yahoo.com", + "web": "http://www.dalbecagencyinc.com.au" + }, + { + "first_name": "Christiane", + "last_name": "Osmanski", + "company_name": "Bennett, Matthew T Esq", + "address": "85 Nw Frontage Rd", + "state": "WA", + "post": 6430, + "city": "Williamstown", + "phone1": "08-9693-9052", + "phone2": "0418-813-310", + "email": "christiane@gmail.com", + "web": "http://www.bennettmatthewtesq.com.au" + }, + { + "first_name": "Cherry", + "last_name": "Roh", + "company_name": "Ulrich, Lawrence M Esq", + "address": "75 Blackington Ave", + "state": "WA", + "post": 6445, + "city": "North Cascade", + "phone1": "08-5175-3585", + "phone2": "0476-917-926", + "email": "cherry_roh@yahoo.com", + "web": "http://www.ulrichlawrencemesq.com.au" + }, + { + "first_name": "Micah", + "last_name": "Shear", + "company_name": "United Water Resources Inc", + "address": "324 Shawnee Mission Pky", + "state": "WA", + "post": 6447, + "city": "Scaddan", + "phone1": "08-6270-6829", + "phone2": "0432-703-516", + "email": "mshear@hotmail.com", + "web": "http://www.unitedwaterresourcesinc.com.au" + }, + { + "first_name": "Edelmira", + "last_name": "Pedregon", + "company_name": "Independence Marine Corp", + "address": "50638 Northwest Blvd", + "state": "WA", + "post": 6450, + "city": "Bandy Creek", + "phone1": "08-8484-3223", + "phone2": "0454-458-365", + "email": "edelmira_pedregon@hotmail.com", + "web": "http://www.independencemarinecorp.com.au" + }, + { + "first_name": "Noelia", + "last_name": "Brackett", + "company_name": "Rodriguez, Joseph A Esq", + "address": "403 Conn Valley Rd", + "state": "WA", + "post": 6450, + "city": "Castletown", + "phone1": "08-3773-3770", + "phone2": "0454-135-614", + "email": "noelia@brackett.net.au", + "web": "http://www.rodriguezjosephaesq.com.au" + }, + { + "first_name": "Richelle", + "last_name": "Remillard", + "company_name": "Terri, Teresa Hutchens Esq", + "address": "2495 Beach Blvd #557", + "state": "WA", + "post": 6452, + "city": "Buraminya", + "phone1": "08-6831-6370", + "phone2": "0416-611-806", + "email": "richelle.remillard@remillard.net.au", + "web": "http://www.territeresahutchensesq.com.au" + }, + { + "first_name": "Brandee", + "last_name": "Svoboda", + "company_name": "Cath Lea For Relig & Cvl Rgts", + "address": "7 10th St W", + "state": "WA", + "post": 6460, + "city": "Walyormouring", + "phone1": "08-3614-5966", + "phone2": "0419-644-936", + "email": "brandee_svoboda@svoboda.net.au", + "web": "http://www.cathleaforreligcvlrgts.com.au" + }, + { + "first_name": "Lisbeth", + "last_name": "Agney", + "company_name": "Dynetics", + "address": "1 El Camino Real #603", + "state": "WA", + "post": 6462, + "city": "Hindmarsh", + "phone1": "08-1184-4145", + "phone2": "0449-675-754", + "email": "lisbeth.agney@agney.net.au", + "web": "http://www.dynetics.com.au" + }, + { + "first_name": "Delfina", + "last_name": "Binnie", + "company_name": "Motel 6", + "address": "8 Austin Bluffs Pky", + "state": "WA", + "post": 6472, + "city": "Bimbijy", + "phone1": "08-3692-5784", + "phone2": "0460-951-322", + "email": "delfina_binnie@binnie.net.au", + "web": "http://www.motel.com.au" + }, + { + "first_name": "Yuriko", + "last_name": "Kazarian", + "company_name": "Doane Products Company", + "address": "3 Davis Blvd", + "state": "WA", + "post": 6472, + "city": "Mouroubra", + "phone1": "08-1109-5346", + "phone2": "0476-877-991", + "email": "yuriko_kazarian@gmail.com", + "web": "http://www.doaneproductscompany.com.au" + }, + { + "first_name": "Kizzy", + "last_name": "Stangle", + "company_name": "Rogers, Clay M Esq", + "address": "8 W Lake St #1", + "state": "WA", + "post": 6477, + "city": "Welbungin", + "phone1": "08-1937-3980", + "phone2": "0474-218-755", + "email": "kizzy.stangle@yahoo.com", + "web": "http://www.rogersclaymesq.com.au" + }, + { + "first_name": "Lamonica", + "last_name": "Princiotta", + "company_name": "Grossman Tuchman & Shah", + "address": "29133 Hammond Dr #1", + "state": "WA", + "post": 6503, + "city": "Beermullah", + "phone1": "08-5227-2620", + "phone2": "0425-628-359", + "email": "lamonica@hotmail.com", + "web": "http://www.grossmantuchmanshah.com.au" + }, + { + "first_name": "Rocco", + "last_name": "Bergstrom", + "company_name": "Postlewaite, Jack A Esq", + "address": "850 Warwick Blvd #58", + "state": "WA", + "post": 6514, + "city": "Leeman", + "phone1": "08-3987-7521", + "phone2": "0457-212-114", + "email": "rocco@yahoo.com", + "web": "http://www.postlewaitejackaesq.com.au" + }, + { + "first_name": "Corazon", + "last_name": "Grafenstein", + "company_name": "Spieker Properties", + "address": "3492 88th St", + "state": "WA", + "post": 6521, + "city": "Hill River", + "phone1": "08-1624-7236", + "phone2": "0481-500-964", + "email": "cgrafenstein@gmail.com", + "web": "http://www.spiekerproperties.com.au" + }, + { + "first_name": "Omer", + "last_name": "Radel", + "company_name": "Phoenix Marketing Rep Inc", + "address": "678 S Main St", + "state": "WA", + "post": 6521, + "city": "Hill River", + "phone1": "08-9919-9540", + "phone2": "0439-808-753", + "email": "omer_radel@radel.net.au", + "web": "http://www.phoenixmarketingrepinc.com.au" + }, + { + "first_name": "Serita", + "last_name": "Barthlow", + "company_name": "Machine Design Service Inc", + "address": "190 34th St #8", + "state": "WA", + "post": 6522, + "city": "Nangetty", + "phone1": "08-2941-7378", + "phone2": "0493-703-129", + "email": "serita_barthlow@gmail.com", + "web": "http://www.machinedesignserviceinc.com.au" + }, + { + "first_name": "Stanford", + "last_name": "Waganer", + "company_name": "Ciba Geigy Corp", + "address": "98021 Harwin Dr", + "state": "WA", + "post": 6532, + "city": "East Nabawa", + "phone1": "08-3200-1670", + "phone2": "0479-127-500", + "email": "stanford_waganer@waganer.net.au", + "web": "http://www.cibageigycorp.com.au" + }, + { + "first_name": "Carri", + "last_name": "Palaspas", + "company_name": "Alexander, David T Esq", + "address": "51255 Tea Town Rd #9", + "state": "WA", + "post": 6532, + "city": "Minnenooka", + "phone1": "08-6069-1579", + "phone2": "0499-165-889", + "email": "carri_palaspas@palaspas.net.au", + "web": "http://www.alexanderdavidtesq.com.au" + }, + { + "first_name": "Bettyann", + "last_name": "Fernades", + "company_name": "Lsr Pokorny Schwartz Friedman", + "address": "54648 Hylan Blvd #883", + "state": "WA", + "post": 6532, + "city": "Tibradden", + "phone1": "08-2901-3421", + "phone2": "0427-971-504", + "email": "bettyann@fernades.com.au", + "web": "http://www.lsrpokornyschwartzfriedman.com.au" + }, + { + "first_name": "Kathryn", + "last_name": "Bonalumi", + "company_name": "State Library", + "address": "86 Worth St #272", + "state": "WA", + "post": 6532, + "city": "Tibradden", + "phone1": "08-3071-2258", + "phone2": "0455-699-311", + "email": "kathryn.bonalumi@yahoo.com", + "web": "http://www.statelibrary.com.au" + }, + { + "first_name": "Desiree", + "last_name": "Englund", + "company_name": "Wrrr Fm", + "address": "9495 Central Hwy #66", + "state": "WA", + "post": 6535, + "city": "East Bowes", + "phone1": "08-5289-4594", + "phone2": "0414-731-630", + "email": "denglund@gmail.com", + "web": "http://www.wrrrfm.com.au" + }, + { + "first_name": "Odelia", + "last_name": "Hutchin", + "company_name": "Mccaffreys Supermarket", + "address": "374 Sunrise Ave", + "state": "WA", + "post": 6556, + "city": "Gorrie", + "phone1": "08-9895-1954", + "phone2": "0472-399-247", + "email": "odelia.hutchin@hutchin.com.au", + "web": "http://www.mccaffreyssupermarket.com.au" + }, + { + "first_name": "Ethan", + "last_name": "Quintero", + "company_name": "Regent Consultants Corp", + "address": "2 Ellis Rd", + "state": "WA", + "post": 6608, + "city": "East Damboring", + "phone1": "08-8280-9492", + "phone2": "0488-425-192", + "email": "ethan_quintero@quintero.com.au", + "web": "http://www.regentconsultantscorp.com.au" + }, + { + "first_name": "Tricia", + "last_name": "Peressini", + "company_name": "Aviation Design", + "address": "3 Industrial Blvd", + "state": "WA", + "post": 6623, + "city": "Pintharuka", + "phone1": "08-4326-1560", + "phone2": "0484-192-990", + "email": "tperessini@yahoo.com", + "web": "http://www.aviationdesign.com.au" + }, + { + "first_name": "Gerry", + "last_name": "Mohrmann", + "company_name": "Howard Winig Realty Assocs Inc", + "address": "8 Glenn Way #3", + "state": "WA", + "post": 6701, + "city": "Brockman", + "phone1": "08-1399-2471", + "phone2": "0490-947-955", + "email": "gerry_mohrmann@mohrmann.net.au", + "web": "http://www.howardwinigrealtyassocsinc.com.au" + }, + { + "first_name": "Jean", + "last_name": "Cecchinato", + "company_name": "Cox, J Thomas Jr", + "address": "7 Hugh Wallis Rd", + "state": "WA", + "post": 6733, + "city": "Koolan Island", + "phone1": "08-5263-2786", + "phone2": "0448-530-536", + "email": "jean.cecchinato@gmail.com", + "web": "http://www.coxjthomasjr.com.au" + }, + { + "first_name": "Laurene", + "last_name": "Bennett", + "company_name": "Elbin Internatl Baskets", + "address": "5 Richmond Ct", + "state": "WA", + "post": 6906, + "city": "North Perth", + "phone1": "08-2969-2908", + "phone2": "0468-234-875", + "email": "laurene_bennett@gmail.com", + "web": "http://www.elbininternatlbaskets.com.au" + }, + { + "first_name": "Emelda", + "last_name": "Geffers", + "company_name": "D L Downing General Contr Inc", + "address": "95431 34th Ave #62", + "state": "WA", + "post": 6909, + "city": "Nedlands", + "phone1": "08-7097-3947", + "phone2": "0454-643-433", + "email": "emelda.geffers@gmail.com", + "web": "http://www.dldowninggeneralcontrinc.com.au" + }, + { + "first_name": "Paulina", + "last_name": "Maker", + "company_name": "Swanson Peterson Fnrl Home Inc", + "address": "6 S Hanover Ave", + "state": "WA", + "post": 6931, + "city": "Maylands", + "phone1": "08-8344-8929", + "phone2": "0420-123-282", + "email": "paulina_maker@maker.net.au", + "web": "http://www.swansonpetersonfnrlhomeinc.com.au" + }, + { + "first_name": "Mertie", + "last_name": "Kazeck", + "company_name": "Electra Gear Divsn Regal", + "address": "35662 S University Blvd", + "state": "WA", + "post": 6935, + "city": "Guildford", + "phone1": "08-5475-6162", + "phone2": "0446-422-535", + "email": "mertie.kazeck@kazeck.com.au", + "web": "http://www.electrageardivsnregal.com.au" + }, + { + "first_name": "Rosendo", + "last_name": "Jelsma", + "company_name": "Dileo, Lucille A Esq", + "address": "94 I 55s S", + "state": "WA", + "post": 6953, + "city": "Applecross", + "phone1": "08-7712-4785", + "phone2": "0477-239-199", + "email": "rosendo_jelsma@hotmail.com", + "web": "http://www.dileolucilleaesq.com.au" + }, + { + "first_name": "Reiko", + "last_name": "Dejarme", + "company_name": "Gilardis Frozen Food", + "address": "57869 Alemany Blvd", + "state": "WA", + "post": 6983, + "city": "Bentley Dc", + "phone1": "08-3733-5261", + "phone2": "0414-715-583", + "email": "rdejarme@dejarme.net.au", + "web": "http://www.gilardisfrozenfood.com.au" + } +] diff --git a/docs/src/App.js b/docs/src/App.js index eeb2668..b30973f 100644 --- a/docs/src/App.js +++ b/docs/src/App.js @@ -7,8 +7,17 @@ import '../../react-table.css' import Readme from './stories/Readme.js' +import { TreeTable, CheckboxTable } from './examples/index' + +const exampleStories = [ + // examples + { name: 'TreeTable', component: TreeTable }, + { name: 'CheckboxTable', component: CheckboxTable }, +]; + const stories = [ { name: 'Readme', component: Readme }, + { name: 'Simple Table', component: CodeSandbox('X6npLXPRW') }, { name: 'Cell Renderers & Custom Components', @@ -51,6 +60,10 @@ const stories = [ name: 'Multiple Pagers (Top and Bottom)', component: CodeSandbox('VEZ8OgvX'), }, + + // other examples + ...exampleStories, + ] export default class App extends React.Component { @@ -63,7 +76,7 @@ export default class App extends React.Component { height: '100%', }} pathPrefix='story/' - StoryWrapper={props => ( + StoryWrapper={props => - - )} + } stories={stories} /> ) diff --git a/docs/src/examples/checkbox/checkboxHOC.js b/docs/src/examples/checkbox/checkboxHOC.js new file mode 100644 index 0000000..0dd0091 --- /dev/null +++ b/docs/src/examples/checkbox/checkboxHOC.js @@ -0,0 +1,88 @@ + + +import React from 'react'; + +export default (Component) => { + + const wrapper = class RTCheckboxTable extends React.Component { + // we only need a Component so we can get the 'ref' - pure components can't get a 'ref' + + rowSelector = (row) => + { + if(!row || !row.hasOwnProperty(this.props.keyField)) return null; + const checked = this.props.isSelected(row[this.props.keyField]); + return ( + { + const { shiftKey } = e; + e.stopPropagation(); + this.props.toggleSelection(row[this.props.keyField],shiftKey,row); + }} + onChange={()=>{}} + value='' + /> + ); + } + + headSelector = (row) => + { + const checked = this.props.selectAll; + return ( + { + e.stopPropagation(); + this.props.toggleAll(); + }} + onChange={()=>{}} + value='' + /> + ); + } + + // this is so we can expose the underlying ReactTable to get at the sortedData for selectAll + getWrappedInstance = ()=>this.wrappedInstance + + render() + { + const { columns:originalCols, isSelected, toggleSelection, toggleAll, keyField, selectAll, ...rest } = this.props; + const { rowSelector, headSelector, } = this; + const select = { + id: '_selector', + accessor: ()=>'x', // this value is not important + Header: headSelector, + Cell: (ci) => { return rowSelector(ci.original); }, + width: 30, + filterable: false, + sortable: false, + resizable: false, + style: { textAlign: 'center' }, + } + const columns = [ + select, + ...originalCols, + ]; + const extra = { + columns, + }; + return ( + this.wrappedInstance=r}/> + ) + } + } + + wrapper.displayName = 'RTCheckboxTable'; + wrapper.defaultProps = + { + keyField: '_id', + isSelected: (key)=>{ console.log('No isSelected handler provided:',{key})}, + selectAll: false, + toggleSelection: (key, shift, row)=>{ console.log('No toggleSelection handler provided:', { key, shift, row }) }, + toggleAll: () => { console.log('No toggleAll handler provided.') }, + } + + return wrapper; +} diff --git a/docs/src/examples/checkbox/index.js b/docs/src/examples/checkbox/index.js new file mode 100644 index 0000000..428fd4d --- /dev/null +++ b/docs/src/examples/checkbox/index.js @@ -0,0 +1,160 @@ + +import React from 'react'; +import shortid from 'shortid'; + +import ReactTable from '../../../../lib/index' +import '../../../../react-table.css' + +import checkboxTableHOC from './checkboxHOC'; + +const CheckboxTable = checkboxTableHOC(ReactTable); + +async function getData() +{ + const result = await ( await fetch('/au_500_tree.json') ).json(); + // we are adding a unique ID to the data for tracking the selected records + return result.map((item)=>{ + const _id = shortid.generate(); + return { + _id, + ...item, + } + }); +} + +function getColumns(data) +{ + const columns = []; + const sample = data[0]; + for(let key in sample) + { + if(key==='_id') continue; + columns.push({ + accessor: key, + Header: key, + }) + } + return columns; +} + +export class ComponentTest extends React.Component { + constructor(props) { + super(props); + this.state = + { + data: null, + columns: null, + selection: [], + selectAll: false, + }; + } + componentDidMount() + { + getData().then((data)=>{ + const columns = getColumns(data); + this.setState({ data, columns }); + }); + } + toggleSelection = (key,shift,row) => { + /* + Implementation of how to manage the selection state is up to the developer. + This implementation uses an array stored in the component state. + Other implementations could use object keys, a Javascript Set, or Redux... etc. + */ + // start off with the existing state + let selection = [ + ...this.state.selection + ]; + const keyIndex = selection.indexOf(key); + // check to see if the key exists + if(keyIndex>=0) { + // it does exist so we will remove it using destructing + selection = [ + ...selection.slice(0,keyIndex), + ...selection.slice(keyIndex+1) + ] + } else { + // it does not exist so add it + selection.push(key); + } + // update the state + this.setState({selection}); + } + toggleAll = () => { + /* + 'toggleAll' is a tricky concept with any filterable table + do you just select ALL the records that are in your data? + OR + do you only select ALL the records that are in the current filtered data? + + The latter makes more sense because 'selection' is a visual thing for the user. + This is especially true if you are going to implement a set of external functions + that act on the selected information (you would not want to DELETE the wrong thing!). + + So, to that end, access to the internals of ReactTable are required to get what is + currently visible in the table (either on the current page or any other page). + + The HOC provides a method call 'getWrappedInstance' to get a ref to the wrapped + ReactTable and then get the internal state and the 'sortedData'. + That can then be iterrated to get all the currently visible records and set + the selection state. + */ + const selectAll = this.state.selectAll?false:true; + const selection = []; + if(selectAll) + { + // we need to get at the internals of ReactTable + const wrappedInstance = this.checkboxTable.getWrappedInstance(); + // the 'sortedData' property contains the currently accessible records based on the filter and sort + const currentRecords = wrappedInstance.getResolvedState().sortedData; + // we just push all the IDs onto the selection array + currentRecords.forEach((item)=>{ + selection.push(item._original._id); + }) + } + this.setState({selectAll,selection}) + } + isSelected = (key) => { + /* + Instead of passing our external selection state we provide an 'isSelected' + callback and detect the selection state ourselves. This allows any implementation + for selection (either an array, object keys, or even a Javascript Set object). + */ + return this.state.selection.includes(key); + } + logSelection = () => { + console.log('selection:',this.state.selection); + } + render(){ + const { toggleSelection, toggleAll, isSelected, logSelection } = this; + const { data, columns, selectAll } = this.state; + const extraProps = + { + selectAll, + isSelected, + toggleAll, + toggleSelection, + } + return ( +
+

react-table - Checkbox Table

+ + {` (${this.state.selection.length}) selected`} + { + data? + this.checkboxTable = r} + className="-striped -highlight" + {...extraProps} + /> + :null + } +
+ ); + } +} + +// export default treeTableHOC(ComponentTest); +export default ComponentTest; diff --git a/docs/src/examples/index.js b/docs/src/examples/index.js new file mode 100644 index 0000000..ffcd74d --- /dev/null +++ b/docs/src/examples/index.js @@ -0,0 +1,8 @@ + +import TreeTable from './treetable'; +import CheckboxTable from './checkbox'; + +export { + TreeTable, + CheckboxTable, +} diff --git a/docs/src/examples/treetable/index.js b/docs/src/examples/treetable/index.js new file mode 100644 index 0000000..34ecc51 --- /dev/null +++ b/docs/src/examples/treetable/index.js @@ -0,0 +1,80 @@ + +import React from 'react'; + +import ReactTable from '../../../../lib/index' +import '../../../../react-table.css' + +import treeTableHOC from './treeTableHOC'; + +async function getData() +{ + const result = await ( await fetch('/au_500_tree.json') ).json(); + return result; +} + +function getColumns(data,pivotBy) +{ + const columns = []; + const sample = data[0]; + for(let key in sample) + { + columns.push({ + accessor: key, + Header: key, + }) + } + return columns; +} + +export class ComponentTest extends React.Component { + constructor(props) { + super(props); + this.state = + { + data: null, + columns: null, + pivotBy: null, // ["firstName", "lastName"], + }; + } + componentDidMount() + { + getData().then((data)=>{ + // console.log('cwm data:',data); + const pivotBy = ['state','post','city']; + const columns = getColumns(data,pivotBy); + // console.log('cwm cols:',columns); + this.setState({data,columns,pivotBy}); + }); + } + showState = ()=> + { + console.log('state:',this.reactTable.getResolvedState()); + } + render(){ + const { data, columns, pivotBy } = this.state; + const extraProps = + { + data, + columns, + pivotBy, + } + const TreeTable = treeTableHOC(ReactTable); + return ( +
+

react-table - Tree Table

+ { + data? + this.reactTable=r} + className="-striped -highlight" + defaultPageSize={5} + {...extraProps} + /> + :null + } +
+ ); + } +} + +export default ComponentTest; diff --git a/docs/src/examples/treetable/treeTableHOC.js b/docs/src/examples/treetable/treeTableHOC.js new file mode 100644 index 0000000..078d808 --- /dev/null +++ b/docs/src/examples/treetable/treeTableHOC.js @@ -0,0 +1,58 @@ + + +import React from 'react'; + +export default (Component) => { + const wrapper = (componentProps) => { + const TrComponent = (props) => { + const { ri, ...rest } = props; + if(ri && ri.groupedByPivot) { + const cell = props.children[ri.level]; + + cell.props.style.flex = 'unset'; + cell.props.style.width = '100%'; + cell.props.style.maxWidth = 'unset'; + cell.props.style.paddingLeft = `${componentProps.treeTableIndent*ri.level}px`; + cell.props.style.backgroundColor = '#DDD'; + cell.props.style.borderBottom = '1px solid rgba(128,128,128,0.2)'; + + return
{cell}
; + } + return ; + } + + const getTrProps = (state,ri,ci,instance) => { + return {ri}; + } + + const { columns, ...rest } = componentProps; + const extra = { + columns: columns.map((col)=>{ + let column = col; + if(rest.pivotBy && rest.pivotBy.includes(col.accessor)) + { + column = { + accessor: col.accessor, + width: `${componentProps.treeTableIndent}px`, + show: false, + Header: '', + } + } + return column; + }), + TrComponent, + getTrProps, + }; + + return ( + + ) + } + wrapper.displayName = 'RTTreeTable'; + wrapper.defaultProps = + { + treeTableRowBackground: '#EEE', + treeTableIndent: 10, + } + return wrapper; +} diff --git a/docs/src/examples/utils.js b/docs/src/examples/utils.js new file mode 100644 index 0000000..cd5d5c6 --- /dev/null +++ b/docs/src/examples/utils.js @@ -0,0 +1,34 @@ + +import namor from "namor"; + +const range = len => { + const arr = []; + for (let i = 0; i < len; i++) { + arr.push(i); + } + return arr; +}; + +const newPerson = () => { + const statusChance = Math.random(); + return { + firstName: namor.generate({ words: 1, numbers: 0 }), + lastName: namor.generate({ words: 1, numbers: 0 }), + age: Math.floor(Math.random() * 30), + visits: Math.floor(Math.random() * 100), + progress: Math.floor(Math.random() * 100), + status: + statusChance > 0.66 + ? "relationship" + : statusChance > 0.33 ? "complicated" : "single" + }; +}; + +export function makeData(len = 5553) { + return range(len).map(d => { + return { + ...newPerson(), + children: range(10).map(newPerson) + }; + }); +} From b585c4b8dbe4793634967bea91032340e1998358 Mon Sep 17 00:00:00 2001 From: Gary Menzel Date: Mon, 13 Nov 2017 08:09:45 +1100 Subject: [PATCH 03/16] Missing dependency - shortid --- docs/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index 39a560d..c33673c 100644 --- a/docs/package.json +++ b/docs/package.json @@ -32,7 +32,8 @@ "react-json-tree": "^0.10.9", "react-script": "^2.0.5", "react-scripts": "^0.9.5", - "react-story": "^0.0.10" + "react-story": "^0.0.10", + "shortid": "^2.2.8" }, "scripts": { "start": "react-scripts start", From 33252adfab2650d58d92eec64a1f83903cff7a41 Mon Sep 17 00:00:00 2001 From: Gary Menzel Date: Tue, 14 Nov 2017 15:38:50 +1100 Subject: [PATCH 04/16] Refactor HOCs to /src/hoc Still have to write the HOCReadme.md (still just a placeholder for now) --- docs/package.json | 9 ++++ docs/src/App.js | 12 +++-- docs/src/examples/index.js | 7 +-- .../{checkbox => selecttable}/index.js | 52 ++++++++++++------- docs/src/examples/treetable/index.js | 2 +- docs/src/stories/HOCReadme.js | 23 ++++++++ docs/yarn.lock | 37 +++++++++++-- src/hoc/README.md | 6 +++ .../hoc/selectTable/index.js | 8 +-- .../hoc/treeTable/index.js | 6 +-- 10 files changed, 125 insertions(+), 37 deletions(-) rename docs/src/examples/{checkbox => selecttable}/index.js (77%) create mode 100644 docs/src/stories/HOCReadme.js create mode 100644 src/hoc/README.md rename docs/src/examples/checkbox/checkboxHOC.js => src/hoc/selectTable/index.js (92%) rename docs/src/examples/treetable/treeTableHOC.js => src/hoc/treeTable/index.js (93%) diff --git a/docs/package.json b/docs/package.json index c33673c..3cc6127 100644 --- a/docs/package.json +++ b/docs/package.json @@ -10,6 +10,15 @@ "babel-preset-react": "6.11.1", "babel-preset-stage-2": "6.13.0", "eslint": "^4.1.1", + "eslint-config-standard": "^10.2.1", + "eslint-plugin-class-property": "^1.0.6", + "eslint-plugin-import": "^2.8.0", + "eslint-plugin-jsx-a11y": "^6.0.2", + "eslint-plugin-node": "^5.2.1", + "eslint-plugin-promise": "^3.6.0", + "eslint-plugin-react": "^7.4.0", + "eslint-plugin-standard": "^3.0.1", + "html-element-attributes": "^1.3.0", "match-sorter": "^1.8.0", "npm-run-all": "^3.1.1", "onchange": "^3.0.2", diff --git a/docs/src/App.js b/docs/src/App.js index b30973f..9f089e3 100644 --- a/docs/src/App.js +++ b/docs/src/App.js @@ -1,3 +1,5 @@ +/* eslint-disable */ + import React from 'react' // import ReactStory, { defaultProps } from 'react-story' @@ -6,18 +8,20 @@ import './stories/utils/prism.css' import '../../react-table.css' import Readme from './stories/Readme.js' +import HOCReadme from './stories/HOCReadme.js' -import { TreeTable, CheckboxTable } from './examples/index' +import { TreeTable, SelectTable } from './examples/index' const exampleStories = [ // examples { name: 'TreeTable', component: TreeTable }, - { name: 'CheckboxTable', component: CheckboxTable }, -]; + { name: 'SelectTable', component: SelectTable }, +] const stories = [ { name: 'Readme', component: Readme }, - + { name: 'HOC Readme', component: HOCReadme }, + { name: 'Simple Table', component: CodeSandbox('X6npLXPRW') }, { name: 'Cell Renderers & Custom Components', diff --git a/docs/src/examples/index.js b/docs/src/examples/index.js index ffcd74d..53f599d 100644 --- a/docs/src/examples/index.js +++ b/docs/src/examples/index.js @@ -1,8 +1,9 @@ +/* eslint-disable */ -import TreeTable from './treetable'; -import CheckboxTable from './checkbox'; +import TreeTable from './treetable' +import SelectTable from './selecttable' export { TreeTable, - CheckboxTable, + SelectTable, } diff --git a/docs/src/examples/checkbox/index.js b/docs/src/examples/selecttable/index.js similarity index 77% rename from docs/src/examples/checkbox/index.js rename to docs/src/examples/selecttable/index.js index 428fd4d..8f8da87 100644 --- a/docs/src/examples/checkbox/index.js +++ b/docs/src/examples/selecttable/index.js @@ -5,9 +5,9 @@ import shortid from 'shortid'; import ReactTable from '../../../../lib/index' import '../../../../react-table.css' -import checkboxTableHOC from './checkboxHOC'; +import selectTableHOC from '../../../../lib/hoc/selectTable' -const CheckboxTable = checkboxTableHOC(ReactTable); +const SelectTable = selectTableHOC(ReactTable); async function getData() { @@ -46,6 +46,7 @@ export class ComponentTest extends React.Component { columns: null, selection: [], selectAll: false, + selectType: 'radio', }; } componentDidMount() @@ -62,23 +63,29 @@ export class ComponentTest extends React.Component { Other implementations could use object keys, a Javascript Set, or Redux... etc. */ // start off with the existing state - let selection = [ - ...this.state.selection - ]; - const keyIndex = selection.indexOf(key); - // check to see if the key exists - if(keyIndex>=0) { - // it does exist so we will remove it using destructing - selection = [ - ...selection.slice(0,keyIndex), - ...selection.slice(keyIndex+1) - ] + if (this.state.selectType === 'radio') { + let selection = []; + if (selection.indexOf(key)<0) selection.push(key); + this.setState({selection}); } else { - // it does not exist so add it - selection.push(key); + let selection = [ + ...this.state.selection + ]; + const keyIndex = selection.indexOf(key); + // check to see if the key exists + if(keyIndex>=0) { + // it does exist so we will remove it using destructing + selection = [ + ...selection.slice(0,keyIndex), + ...selection.slice(keyIndex+1) + ] + } else { + // it does not exist so add it + selection.push(key); + } + // update the state + this.setState({selection}); } - // update the state - this.setState({selection}); } toggleAll = () => { /* @@ -125,24 +132,29 @@ export class ComponentTest extends React.Component { logSelection = () => { console.log('selection:',this.state.selection); } + toggleType = () => { + this.setState({ selectType: this.state.selectType === 'radio' ? 'checkbox' : 'radio', selection: [], selectAll: false, }); + } render(){ - const { toggleSelection, toggleAll, isSelected, logSelection } = this; - const { data, columns, selectAll } = this.state; + const { toggleSelection, toggleAll, isSelected, logSelection, toggleType, } = this; + const { data, columns, selectAll, selectType } = this.state; const extraProps = { selectAll, isSelected, toggleAll, toggleSelection, + selectType, } return (

react-table - Checkbox Table

+ {` (${this.state.selection.length}) selected`} { data? - this.checkboxTable = r} diff --git a/docs/src/examples/treetable/index.js b/docs/src/examples/treetable/index.js index 34ecc51..dc87fa6 100644 --- a/docs/src/examples/treetable/index.js +++ b/docs/src/examples/treetable/index.js @@ -4,7 +4,7 @@ import React from 'react'; import ReactTable from '../../../../lib/index' import '../../../../react-table.css' -import treeTableHOC from './treeTableHOC'; +import treeTableHOC from '../../../../lib/hoc/treeTable' async function getData() { diff --git a/docs/src/stories/HOCReadme.js b/docs/src/stories/HOCReadme.js new file mode 100644 index 0000000..648091d --- /dev/null +++ b/docs/src/stories/HOCReadme.js @@ -0,0 +1,23 @@ +/* eslint-disable */ +import React from 'react' +import marked from 'marked' +// +import HOCReadme from '!raw!../../../src/hoc/README.md' +import 'github-markdown-css/github-markdown.css' +import './utils/prism.js' + +export default class HOCStory extends React.Component { + render () { + return ( +
+ +
+ ) + } + componentDidMount () { + global.Prism && global.Prism.highlightAll() + } +} diff --git a/docs/yarn.lock b/docs/yarn.lock index 4345bba..5cbc695 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -2417,7 +2417,7 @@ eslint-config-standard-jsx@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz#009e53c4ddb1e9ee70b4650ffe63a7f39f8836e1" -eslint-config-standard@10.2.1: +eslint-config-standard@10.2.1, eslint-config-standard@^10.2.1: version "10.2.1" resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz#c061e4d066f379dc17cd562c64e819b4dd454591" @@ -2492,7 +2492,7 @@ eslint-plugin-import@2.0.1: minimatch "^3.0.3" pkg-up "^1.0.0" -eslint-plugin-import@^2.7.0: +eslint-plugin-import@^2.7.0, eslint-plugin-import@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894" dependencies: @@ -2545,6 +2545,15 @@ eslint-plugin-jsx-a11y@^6.0.2: emoji-regex "^6.1.0" jsx-ast-utils "^1.4.0" +eslint-plugin-node@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz#80df3253c4d7901045ec87fa660a284e32bdca29" + dependencies: + ignore "^3.3.6" + minimatch "^3.0.4" + resolve "^1.3.3" + semver "5.3.0" + eslint-plugin-node@~4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-4.2.2.tgz#82959ca9aed79fcbd28bb1b188d05cac04fb3363" @@ -2555,6 +2564,10 @@ eslint-plugin-node@~4.2.2: resolve "^1.1.7" semver "5.3.0" +eslint-plugin-promise@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz#54b7658c8f454813dc2a870aff8152ec4969ba75" + eslint-plugin-promise@~3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca" @@ -2585,7 +2598,7 @@ eslint-plugin-react@~6.10.0: jsx-ast-utils "^1.3.4" object.assign "^4.0.4" -eslint-plugin-standard@~3.0.1: +eslint-plugin-standard@^3.0.1, eslint-plugin-standard@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz#34d0c915b45edc6f010393c7eef3823b08565cf2" @@ -3479,6 +3492,10 @@ html-element-attributes@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/html-element-attributes/-/html-element-attributes-1.2.0.tgz#8b1c7aaf94353fd9b455c27ec7ebaf1583e29fd0" +html-element-attributes@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/html-element-attributes/-/html-element-attributes-1.3.0.tgz#f06ebdfce22de979db82020265cac541fb17d4fc" + html-encoding-sniffer@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" @@ -3612,6 +3629,10 @@ ignore@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" +ignore@^3.3.6: + version "3.3.7" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -6113,6 +6134,12 @@ resolve@^1.1.6, resolve@^1.1.7, resolve@^1.2.0: dependencies: path-parse "^1.0.5" +resolve@^1.3.3: + version "1.5.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" + dependencies: + path-parse "^1.0.5" + restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -6322,6 +6349,10 @@ shellwords@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" +shortid@^2.2.8: + version "2.2.8" + resolved "https://registry.yarnpkg.com/shortid/-/shortid-2.2.8.tgz#033b117d6a2e975804f6f0969dbe7d3d0b355131" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" diff --git a/src/hoc/README.md b/src/hoc/README.md new file mode 100644 index 0000000..8b49fc3 --- /dev/null +++ b/src/hoc/README.md @@ -0,0 +1,6 @@ + +# This is the readme for HOCs with ReactTable + +## TO DO +- Document the HOCs +- Document the standard for writing HOCs with ReactTable diff --git a/docs/src/examples/checkbox/checkboxHOC.js b/src/hoc/selectTable/index.js similarity index 92% rename from docs/src/examples/checkbox/checkboxHOC.js rename to src/hoc/selectTable/index.js index 0dd0091..912c17d 100644 --- a/docs/src/examples/checkbox/checkboxHOC.js +++ b/src/hoc/selectTable/index.js @@ -1,4 +1,4 @@ - +/* eslint-disable */ import React from 'react'; @@ -13,7 +13,7 @@ export default (Component) => { const checked = this.props.isSelected(row[this.props.keyField]); return ( { const { shiftKey } = e; @@ -28,10 +28,11 @@ export default (Component) => { headSelector = (row) => { + if (this.props.selectType === 'radio') return null; const checked = this.props.selectAll; return ( { e.stopPropagation(); @@ -82,6 +83,7 @@ export default (Component) => { selectAll: false, toggleSelection: (key, shift, row)=>{ console.log('No toggleSelection handler provided:', { key, shift, row }) }, toggleAll: () => { console.log('No toggleAll handler provided.') }, + selectType: 'radio', } return wrapper; diff --git a/docs/src/examples/treetable/treeTableHOC.js b/src/hoc/treeTable/index.js similarity index 93% rename from docs/src/examples/treetable/treeTableHOC.js rename to src/hoc/treeTable/index.js index 078d808..5254cb6 100644 --- a/docs/src/examples/treetable/treeTableHOC.js +++ b/src/hoc/treeTable/index.js @@ -1,6 +1,6 @@ +/* eslint-disable */ - -import React from 'react'; +import React from 'react' export default (Component) => { const wrapper = (componentProps) => { @@ -13,7 +13,7 @@ export default (Component) => { cell.props.style.width = '100%'; cell.props.style.maxWidth = 'unset'; cell.props.style.paddingLeft = `${componentProps.treeTableIndent*ri.level}px`; - cell.props.style.backgroundColor = '#DDD'; + // cell.props.style.backgroundColor = '#DDD'; cell.props.style.borderBottom = '1px solid rgba(128,128,128,0.2)'; return
{cell}
; From feec96359b7e6c1ba0ff6f52bd1d5096a71ff823 Mon Sep 17 00:00:00 2001 From: Gary Menzel Date: Wed, 15 Nov 2017 20:43:29 +1100 Subject: [PATCH 05/16] Refactor complete May need to remove some redundant code --- docs/src/App.js | 22 ++- docs/src/examples/index.js | 2 + docs/src/examples/selecttable/index.js | 16 +- docs/src/examples/selecttreetable/index.js | 216 +++++++++++++++++++++ src/hoc/README.md | 124 +++++++++++- src/hoc/selectTable/index.js | 103 ++++++---- src/hoc/treeTable/index.js | 80 +++++--- 7 files changed, 472 insertions(+), 91 deletions(-) create mode 100644 docs/src/examples/selecttreetable/index.js diff --git a/docs/src/App.js b/docs/src/App.js index 9f089e3..2591876 100644 --- a/docs/src/App.js +++ b/docs/src/App.js @@ -10,13 +10,14 @@ import '../../react-table.css' import Readme from './stories/Readme.js' import HOCReadme from './stories/HOCReadme.js' -import { TreeTable, SelectTable } from './examples/index' - -const exampleStories = [ - // examples - { name: 'TreeTable', component: TreeTable }, - { name: 'SelectTable', component: SelectTable }, -] +// import { TreeTable, SelectTable, SelectTreeTable } from './examples/index' +// +// const exampleStories = [ +// // examples +// { name: 'TreeTable', component: TreeTable }, +// { name: 'SelectTable', component: SelectTable }, +// { name: 'SelectTreeTable', component: SelectTreeTable }, +// ] const stories = [ { name: 'Readme', component: Readme }, @@ -64,10 +65,11 @@ const stories = [ name: 'Multiple Pagers (Top and Bottom)', component: CodeSandbox('VEZ8OgvX'), }, - - // other examples - ...exampleStories, + { name: 'Tree Table', component: CodeSandbox('lxmr4wynzq') }, + { name: 'Select Table', component: CodeSandbox('7yq5ylw09j') }, + { name: 'Select Tree Table', component: CodeSandbox('2p7jp4klwp') }, + ] export default class App extends React.Component { diff --git a/docs/src/examples/index.js b/docs/src/examples/index.js index 53f599d..dd9864d 100644 --- a/docs/src/examples/index.js +++ b/docs/src/examples/index.js @@ -2,8 +2,10 @@ import TreeTable from './treetable' import SelectTable from './selecttable' +import SelectTreeTable from './selecttreetable' export { TreeTable, SelectTable, + SelectTreeTable, } diff --git a/docs/src/examples/selecttable/index.js b/docs/src/examples/selecttable/index.js index 8f8da87..4fc0007 100644 --- a/docs/src/examples/selecttable/index.js +++ b/docs/src/examples/selecttable/index.js @@ -46,7 +46,7 @@ export class ComponentTest extends React.Component { columns: null, selection: [], selectAll: false, - selectType: 'radio', + selectType: 'checkbox', }; } componentDidMount() @@ -111,12 +111,15 @@ export class ComponentTest extends React.Component { if(selectAll) { // we need to get at the internals of ReactTable - const wrappedInstance = this.checkboxTable.getWrappedInstance(); + const wrappedInstance = this.selectTable.getWrappedInstance(); // the 'sortedData' property contains the currently accessible records based on the filter and sort const currentRecords = wrappedInstance.getResolvedState().sortedData; // we just push all the IDs onto the selection array currentRecords.forEach((item)=>{ - selection.push(item._original._id); + if(item._original) + { + selection.push(item._original._id); + } }) } this.setState({selectAll,selection}) @@ -136,7 +139,7 @@ export class ComponentTest extends React.Component { this.setState({ selectType: this.state.selectType === 'radio' ? 'checkbox' : 'radio', selection: [], selectAll: false, }); } render(){ - const { toggleSelection, toggleAll, isSelected, logSelection, toggleType, } = this; + const { toggleSelection, toggleAll, isSelected, logSelection, toggleType } = this; const { data, columns, selectAll, selectType } = this.state; const extraProps = { @@ -148,7 +151,7 @@ export class ComponentTest extends React.Component { } return (
-

react-table - Checkbox Table

+

react-table - Select Table

{` (${this.state.selection.length}) selected`} @@ -157,7 +160,7 @@ export class ComponentTest extends React.Component { this.checkboxTable = r} + ref={(r)=>this.selectTable = r} className="-striped -highlight" {...extraProps} /> @@ -168,5 +171,4 @@ export class ComponentTest extends React.Component { } } -// export default treeTableHOC(ComponentTest); export default ComponentTest; diff --git a/docs/src/examples/selecttreetable/index.js b/docs/src/examples/selecttreetable/index.js new file mode 100644 index 0000000..4766777 --- /dev/null +++ b/docs/src/examples/selecttreetable/index.js @@ -0,0 +1,216 @@ + +import React from 'react'; +import shortid from 'shortid'; + +import ReactTable from '../../../../lib/index' +import '../../../../react-table.css' + +import selectTableHOC from '../../../../lib/hoc/selectTable' +import treeTableHOC from '../../../../lib/hoc/treeTable' + +const SelectTreeTable = selectTableHOC(treeTableHOC(ReactTable)); + +async function getData() +{ + const result = await ( await fetch('/au_500_tree.json') ).json(); + // we are adding a unique ID to the data for tracking the selected records + return result.map((item)=>{ + const _id = shortid.generate(); + return { + _id, + ...item, + } + }); +} + +function getColumns(data) +{ + const columns = []; + const sample = data[0]; + for(let key in sample) + { + if(key==='_id') continue; + columns.push({ + accessor: key, + Header: key, + }) + } + return columns; +} + +function getNodes(data,node=[]) +{ + data.forEach((item)=>{ + if(item.hasOwnProperty('_subRows') && item._subRows) + { + node = getNodes(item._subRows,node); + } else { + node.push(item._original); + } + }); + return node; +} + +export class ComponentTest extends React.Component { + constructor(props) { + super(props); + this.state = + { + data: null, + columns: null, + selection: [], + selectAll: false, + selectType: 'checkbox', + }; + } + componentDidMount() + { + getData().then((data)=>{ + const columns = getColumns(data); + const pivotBy = ['state','post']; + this.setState({ data, columns, pivotBy }); + }); + } + toggleSelection = (key,shift,row) => { + /* + Implementation of how to manage the selection state is up to the developer. + This implementation uses an array stored in the component state. + Other implementations could use object keys, a Javascript Set, or Redux... etc. + */ + // start off with the existing state + if (this.state.selectType === 'radio') { + let selection = []; + if (selection.indexOf(key)<0) selection.push(key); + this.setState({selection}); + } else { + let selection = [ + ...this.state.selection + ]; + const keyIndex = selection.indexOf(key); + // check to see if the key exists + if(keyIndex>=0) { + // it does exist so we will remove it using destructing + selection = [ + ...selection.slice(0,keyIndex), + ...selection.slice(keyIndex+1) + ] + } else { + // it does not exist so add it + selection.push(key); + } + // update the state + this.setState({selection}); + } + } + toggleAll = () => { + /* + 'toggleAll' is a tricky concept with any filterable table + do you just select ALL the records that are in your data? + OR + do you only select ALL the records that are in the current filtered data? + + The latter makes more sense because 'selection' is a visual thing for the user. + This is especially true if you are going to implement a set of external functions + that act on the selected information (you would not want to DELETE the wrong thing!). + + So, to that end, access to the internals of ReactTable are required to get what is + currently visible in the table (either on the current page or any other page). + + The HOC provides a method call 'getWrappedInstance' to get a ref to the wrapped + ReactTable and then get the internal state and the 'sortedData'. + That can then be iterrated to get all the currently visible records and set + the selection state. + */ + const selectAll = this.state.selectAll?false:true; + const selection = []; + if(selectAll) + { + // we need to get at the internals of ReactTable + const wrappedInstance = this.selectTable.getWrappedInstance(); + // the 'sortedData' property contains the currently accessible records based on the filter and sort + const currentRecords = wrappedInstance.getResolvedState().sortedData; + // we need to get all the 'real' (original) records out to get at their IDs + const nodes = getNodes(currentRecords); + // we just push all the IDs onto the selection array + nodes.forEach((item)=>{ + selection.push(item._id); + }) + } + this.setState({selectAll,selection}) + } + isSelected = (key) => { + /* + Instead of passing our external selection state we provide an 'isSelected' + callback and detect the selection state ourselves. This allows any implementation + for selection (either an array, object keys, or even a Javascript Set object). + */ + return this.state.selection.includes(key); + } + logSelection = () => { + console.log('selection:',this.state.selection); + } + toggleType = () => { + this.setState({ selectType: this.state.selectType === 'radio' ? 'checkbox' : 'radio', selection: [], selectAll: false, }); + } + toggleTree = () => { + if(this.state.pivotBy.length) { + this.setState({pivotBy:[],expanded:{}}); + } else { + this.setState({pivotBy:['state','post'],expanded:{}}); + } + } + onExpandedChange = (expanded) => { + this.setState({expanded}); + } + render(){ + const { toggleSelection, toggleAll, isSelected, logSelection, toggleType, toggleTree, onExpandedChange, } = this; + const { data, columns, selectAll, selectType, pivotBy, expanded, } = this.state; + const extraProps = + { + selectAll, + isSelected, + toggleAll, + toggleSelection, + selectType, + pivotBy, + expanded, + onExpandedChange, + pageSize: 5, + } + return ( +
+

react-table - Select Tree Table

+

This example combines two HOCs (the TreeTable and the SelectTable) to make a composite component.

+

We'll call it SelectTreeTable!

+

Here is what the buttons do:

+
    +
  • Toggle Tree: enables or disabled the pivotBy on the table.
  • +
  • Select Type: changes from 'checkbox' to 'radio' and back again.
  • +
  • Log Selection to Console: open your console to see what has been selected.
  • +
+

+ NOTE: the selection is maintained when toggling the tree on and off but is cleared + when switching between select types (radio, checkbox). +

+ + + + {` (${this.state.selection.length}) selected`} + { + data? + this.selectTable = r} + className="-striped -highlight" + freezeWhenExpanded={true} + {...extraProps} + /> + :null + } +
+ ); + } +} + +export default ComponentTest; diff --git a/src/hoc/README.md b/src/hoc/README.md index 8b49fc3..69711c0 100644 --- a/src/hoc/README.md +++ b/src/hoc/README.md @@ -1,6 +1,122 @@ -# This is the readme for HOCs with ReactTable +
+ React Table Logo +
-## TO DO -- Document the HOCs -- Document the standard for writing HOCs with ReactTable +# ReactTable - expanding with HOCs +This documentation is about expanding ReactTable using Higher Order Components/Functions. + +## Covered in this README +- A Brief explanation of HOCs and why they are a good approach for ReactTable enhancements +- Documentation of the currently available HOCs + - TreeTable + - SelectTable +- Documentation of the standard for writing HOCs with ReactTable + +## What are HOCs and why use them with ReactTable +HOCs (or Higher Order Components/Functions) are either a React Component (or a function that returns a React Component) +that are used to enhance the functionality of an existing component. How much you can enhance depends on the props that +the component exposes. + +Fortunately, ReactTable exposes a LOT of functionality as props to the component. In some cases there are too many +props to keep track of and that is where HOCs come in. + +You can write a HOC that just focusses on the additional functionality you want to enhance and keep those enhancements to +reuse over and over again when you need them. You don't have to edit the ReactSource code, just wrap ReactTable in one or +more HOCs (more on some issues related to chaining HOCs later) that provide the additional functionality you want to expose. + +The most obvious HOC is one that can add `checkbox` or select functionality. The HOC included provides `select` functionality +that allows the developer to specify if they want a `checkbox` or `radio` style of select column. The implementation of the +selection is recorded (e.g. in component state, Redux, etc.) and how to manage multiple selections. The HOC really only handles +the rendering pieces. + +But there is more documentation on the `select` HOC below. + + +## Currently Available HOCs + +### TreeTable +TreeTable takes over the rendering of the generated pivot rows of ReactTable so that they appear more like an expandable Tree. + +It accomplishes this by rendering a 100% wide div and then only rendering the cell that controls the pivot at that level. + +Using it is as simple as doing the following: +```javascript +import ReactTable from 'react-table' +import treeTableHOC from 'react-table/lib/hoc/treeTable' + +const TreeTable = treeTableHOC(ReactTable) +``` +After you have done the above, you can then use `TreeTable` just as you would `ReactTable` but it will render pivots using +the Tree style described above. + + +### SelectTable +SelectTable is a little trickier. The HOCs attempt to avoid adding additional state and, as there is no internal ID for a row that +can be relied on to be static (ReactTable just reuses indexes when rendering) the developer has to maintain the state outside of even +the wrapped component. So it is largely based on callbacks. + +You include the HOC in the same manner as you would for the treeTableHOC but then need to provide the following overrides: +- isSelected - returns `true` if the key passed is selected otherwise it should return `false` +- selectAll - a property that indicates if the selectAll is set (`true|false`) +- toggleAll - called when the user clicks the `selectAll` checkbox/radio +- toggleSelection - called when the use clicks a specific checkbox/radio in a row +- selectType - either `checkbox|radio` to indicate what type of selection is required + +In the case of `radio` there is no `selectAll` displayed but the developer is responsible for only making one selection in +the controlling component's state. You could select multiple but it wouldn't make sense and you should use `checkbox` instead. + +You also have to decide what `selectAll` means. Given ReactTable is a paged solution there are other records off-page. When someone +selects the `selectAll` checkbox, should it mark every possible record, only what might be visible to due a Filter or only those items +on the current page? + +The example opts for the middle approach so it gets a `ref` to the ReactTable instance and pulls the `sortedData` out of the resolved +state (then walks through those records and pulls their ID into the `selection` state of the controlling component). + +You can also replace the input component that is used to render the select box and select all box: +- SelectAllInputComponent - the checkbox in the top left corner +- SelectInputComponent - the checkbox used on a row + +### SelectTreeTable +SelectTreeTable is a combination of TreeTable and SelectTable. + +To function correctly the chain has to be in the correct order as follows (see the comments in the guid on HOCs below). + +```Javascript +const SelectTreeTable = selectTableHOC(treeTableHOC(ReactTable)); +``` + +In this particular instance it is (probably) because the functions need access to the state on the wrapped component to manage +the selected items. Although that is not totally clearly the issue. + +## HOC Guide for ReactTable +There are a few rules required when writing a HOC for ReactTable (other than meeting the normal lint standards - which are +still being developed). + +Firstly, there are issues with `ref` when you write a HOC. Consider a deeply nested component wrapped in multiple HOCs... + +A HOC in the middle of the chain requires access to the instance of the component it thinks it is wrapping but there is at +least one other wrapper in the way. The challenge is: How do I get to the actual wrapped component? + +Each HOC is required to be a React Class so that a `ref` can be obtained against each component: + +```Javascript + this.wrappedInstance = r} /> +``` +*NOTE:* "Component" can also be the `` instance. + +Then the following method needs +to be placed on the class so that it exposes the correct instance of ReactTable: + +```Javascript +getWrappedInstance() { + if (!this.wrappedInstance) console.warn(' - No wrapped instance') + if (this.wrappedInstance.getWrappedInstance) return this.wrappedInstance.getWrappedInstance() + else return this.wrappedInstance +} +``` +Essentially this will walk down the chain (if there are chained HOCs) and stop when it gets to the end and return the wrapped instance. + +Finally, sometimes the chains need to be in a specific order to function correctly. It is not clear if this is just an architectural +issue or if it would be better solved using a library like `recompose`. Anyone who is able to contribute a reliable solution to this +is welcome to submit a PR. diff --git a/src/hoc/selectTable/index.js b/src/hoc/selectTable/index.js index 912c17d..27ca3b5 100644 --- a/src/hoc/selectTable/index.js +++ b/src/hoc/selectTable/index.js @@ -2,60 +2,79 @@ import React from 'react'; +const defaultSelectInputComponent = (props) => { + return ( + { + const { shiftKey } = e; + e.stopPropagation(); + props.onClick(props.id, shiftKey, props.row); + }} + onChange={()=>{}} + /> + ) +} + export default (Component) => { - const wrapper = class RTCheckboxTable extends React.Component { - // we only need a Component so we can get the 'ref' - pure components can't get a 'ref' + const wrapper = class RTSelectTable extends React.Component { - rowSelector = (row) => + constructor(props) { - if(!row || !row.hasOwnProperty(this.props.keyField)) return null; - const checked = this.props.isSelected(row[this.props.keyField]); - return ( - { - const { shiftKey } = e; - e.stopPropagation(); - this.props.toggleSelection(row[this.props.keyField],shiftKey,row); - }} - onChange={()=>{}} - value='' - /> - ); + super(props); } - headSelector = (row) => - { - if (this.props.selectType === 'radio') return null; - const checked = this.props.selectAll; - return ( - { - e.stopPropagation(); - this.props.toggleAll(); - }} - onChange={()=>{}} - value='' - /> - ); + rowSelector(row) { + if(!row || !row.hasOwnProperty(this.props.keyField)) return null; + const { toggleSelection, selectType, keyField } = this.props; + const checked = this.props.isSelected(row[this.props.keyField]); + const inputProps = + { + checked, + onClick: toggleSelection, + selectType, + id: row[keyField], + row, + } + return React.createElement(this.props.SelectInputComponent,inputProps); + } + + headSelector(row) { + const { selectType } = this.props; + if (selectType === 'radio') return null; + + const { toggleAll, selectAll: checked, SelectAllInputComponent, } = this.props; + const inputProps = + { + checked, + onClick: toggleAll, + selectType, + } + + return React.createElement(SelectAllInputComponent,inputProps); } // this is so we can expose the underlying ReactTable to get at the sortedData for selectAll - getWrappedInstance = ()=>this.wrappedInstance + getWrappedInstance() { + if (!this.wrappedInstance) console.warn('RTSelectTable - No wrapped instance'); + if (this.wrappedInstance.getWrappedInstance) return this.wrappedInstance.getWrappedInstance(); + else return this.wrappedInstance + } render() { - const { columns:originalCols, isSelected, toggleSelection, toggleAll, keyField, selectAll, ...rest } = this.props; - const { rowSelector, headSelector, } = this; + const { + columns:originalCols, isSelected, toggleSelection, toggleAll, keyField, selectAll, + selectType, SelectAllInputComponent, SelectInputComponent, + ...rest + } = this.props; const select = { id: '_selector', accessor: ()=>'x', // this value is not important - Header: headSelector, - Cell: (ci) => { return rowSelector(ci.original); }, + Header: this.headSelector.bind(this), + Cell: (ci) => { return this.rowSelector.bind(this)(ci.original); }, width: 30, filterable: false, sortable: false, @@ -75,7 +94,7 @@ export default (Component) => { } } - wrapper.displayName = 'RTCheckboxTable'; + wrapper.displayName = 'RTSelectTable'; wrapper.defaultProps = { keyField: '_id', @@ -83,7 +102,9 @@ export default (Component) => { selectAll: false, toggleSelection: (key, shift, row)=>{ console.log('No toggleSelection handler provided:', { key, shift, row }) }, toggleAll: () => { console.log('No toggleAll handler provided.') }, - selectType: 'radio', + selectType: 'check', + SelectInputComponent: defaultSelectInputComponent, + SelectAllInputComponent: defaultSelectInputComponent, } return wrapper; diff --git a/src/hoc/treeTable/index.js b/src/hoc/treeTable/index.js index 5254cb6..6c9fa7d 100644 --- a/src/hoc/treeTable/index.js +++ b/src/hoc/treeTable/index.js @@ -3,56 +3,78 @@ import React from 'react' export default (Component) => { - const wrapper = (componentProps) => { - const TrComponent = (props) => { - const { ri, ...rest } = props; + const wrapper = class RTTreeTable extends React.Component { + + constructor(props) + { + super(props); + this.getWrappedInstance.bind(this); + this.TrComponent.bind(this); + this.getTrProps.bind(this); + } + + // this is so we can expose the underlying ReactTable to get at the sortedData for selectAll + getWrappedInstance = () => { + if (!this.wrappedInstance) console.warn('RTTreeTable - No wrapped instance'); + if (this.wrappedInstance.getWrappedInstance) return this.wrappedInstance.getWrappedInstance(); + else return this.wrappedInstance + } + + TrComponent = (props) => { + const { + ri, + ...rest + } = props; if(ri && ri.groupedByPivot) { - const cell = props.children[ri.level]; + const cell = {...props.children[ri.level]}; cell.props.style.flex = 'unset'; cell.props.style.width = '100%'; cell.props.style.maxWidth = 'unset'; - cell.props.style.paddingLeft = `${componentProps.treeTableIndent*ri.level}px`; + cell.props.style.paddingLeft = `${this.props.treeTableIndent*ri.level}px`; // cell.props.style.backgroundColor = '#DDD'; cell.props.style.borderBottom = '1px solid rgba(128,128,128,0.2)'; - return
{cell}
; + return
{cell}
; } return ; } - const getTrProps = (state,ri,ci,instance) => { + getTrProps = (state,ri,ci,instance) => { return {ri}; } - const { columns, ...rest } = componentProps; - const extra = { - columns: columns.map((col)=>{ - let column = col; - if(rest.pivotBy && rest.pivotBy.includes(col.accessor)) - { - column = { - accessor: col.accessor, - width: `${componentProps.treeTableIndent}px`, - show: false, - Header: '', + render() { + const { columns, treeTableIndent, ...rest } = this.props; + const { TrComponent, getTrProps } = this; + const extra = { + columns: columns.map((col)=>{ + let column = col; + if(rest.pivotBy && rest.pivotBy.includes(col.accessor)) + { + column = { + accessor: col.accessor, + width: `${treeTableIndent}px`, + show: false, + Header: '', + } } - } - return column; - }), - TrComponent, - getTrProps, - }; - - return ( - - ) + return column; + }), + TrComponent, + getTrProps, + }; + + return ( + this.wrappedInstance=r }/> + ) + } } wrapper.displayName = 'RTTreeTable'; wrapper.defaultProps = { - treeTableRowBackground: '#EEE', treeTableIndent: 10, } + return wrapper; } From 6df336215d91b7d852f5bf0042a9237142bc17d3 Mon Sep 17 00:00:00 2001 From: Gary Menzel Date: Wed, 15 Nov 2017 20:54:29 +1100 Subject: [PATCH 06/16] Text change for the HOC samples --- docs/src/App.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/src/App.js b/docs/src/App.js index 2591876..fb9ecd4 100644 --- a/docs/src/App.js +++ b/docs/src/App.js @@ -66,9 +66,9 @@ const stories = [ component: CodeSandbox('VEZ8OgvX'), }, - { name: 'Tree Table', component: CodeSandbox('lxmr4wynzq') }, - { name: 'Select Table', component: CodeSandbox('7yq5ylw09j') }, - { name: 'Select Tree Table', component: CodeSandbox('2p7jp4klwp') }, + { name: 'Tree Table (HOC)', component: CodeSandbox('lxmr4wynzq') }, + { name: 'Select Table (HOC)', component: CodeSandbox('7yq5ylw09j') }, + { name: 'Select Tree Table (HOC)', component: CodeSandbox('2p7jp4klwp') }, ] From fc47d4f258e79d40dc2d3072ed887d4a4aea9cbe Mon Sep 17 00:00:00 2001 From: Gary Menzel Date: Thu, 16 Nov 2017 03:05:44 +1100 Subject: [PATCH 07/16] Introduced a 'multiSort' flag Defaults to 'true' A 'false' value will turn multi-sort off. --- README.md | 4 +++ docs/src/App.js | 4 +++ docs/src/examples/expander/index.js | 54 +++++++++++++++++++++++++++++ src/defaultProps.js | 1 + src/index.js | 3 +- 5 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 docs/src/examples/expander/index.js diff --git a/README.md b/README.md index 7778e92..93ce030 100644 --- a/README.md +++ b/README.md @@ -171,6 +171,7 @@ These are all of the available props (and their default values) for the main ` + • +
+ ) + } +} + +class SubComponent extends React.Component { + render() + { + return
Nothing
+ } +} + +export default class ComponentTest extends React.Component { + render() + { + const rtProps = { + data, + columns, + ExpanderComponent: (props)=>, + SubComponent: (props)=>, + multiSort: false, + } + return ( + + ) + } +} diff --git a/src/defaultProps.js b/src/defaultProps.js index 46f8962..838c7f2 100644 --- a/src/defaultProps.js +++ b/src/defaultProps.js @@ -22,6 +22,7 @@ export default { collapseOnDataChange: true, freezeWhenExpanded: false, sortable: true, + multiSort: true, resizable: true, filterable: false, defaultSortDesc: false, diff --git a/src/index.js b/src/index.js index b3d26f1..03bec8f 100644 --- a/src/index.js +++ b/src/index.js @@ -80,6 +80,7 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { loadingText, noDataText, sortable, + multiSort, resizable, filterable, // Pivoting State @@ -382,7 +383,7 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { maxWidth: _.asPx(maxWidth), }} toggleSort={e => { - isSortable && this.sortColumn(column, e.shiftKey) + isSortable && this.sortColumn(column, multiSort ? e.shiftKey : false) }} {...rest} > From a6036004afba997114c20daa0c6ae4b319b2e679 Mon Sep 17 00:00:00 2001 From: Will Olson Date: Wed, 22 Nov 2017 09:07:26 -0800 Subject: [PATCH 08/16] refactor: Fix defaultProps.js linter errors --- src/defaultProps.js | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/defaultProps.js b/src/defaultProps.js index 46f8962..b618c3e 100644 --- a/src/defaultProps.js +++ b/src/defaultProps.js @@ -29,12 +29,14 @@ export default { defaultFiltered: [], defaultResized: [], defaultExpanded: {}, + // eslint-disable-next-line no-unused-vars defaultFilterMethod: (filter, row, column) => { const id = filter.pivotId || filter.id return row[id] !== undefined ? String(row[id]).startsWith(filter.value) : true }, + // eslint-disable-next-line no-unused-vars defaultSortMethod: (a, b, desc) => { // force null and undefined to the bottom a = a === null || a === undefined ? '' : a @@ -49,7 +51,8 @@ export default { if (a < b) { return -1 } - // returning 0, undefined or any falsey value will use subsequent sorts or the index as a tiebreaker + // returning 0, undefined or any falsey value will use subsequent sorts or + // the index as a tiebreaker return 0 }, @@ -176,24 +179,24 @@ export default { TbodyComponent: _.makeTemplateComponent('rt-tbody', 'Tbody'), TrGroupComponent: _.makeTemplateComponent('rt-tr-group', 'TrGroup'), TrComponent: _.makeTemplateComponent('rt-tr', 'Tr'), - ThComponent: ({ toggleSort, className, children, ...rest }) => { - return ( -
{ - toggleSort && toggleSort(e) - }} - {...rest} - > - {children} -
- ) - }, + ThComponent: ({ toggleSort, className, children, ...rest }) => ( +
( + toggleSort && toggleSort(e) + )} + role="button" + tabIndex={0} + {...rest} + > + {children} +
+ ), TdComponent: _.makeTemplateComponent('rt-td', 'Td'), TfootComponent: _.makeTemplateComponent('rt-tfoot', 'Tfoot'), FilterComponent: ({ filter, onChange }) => ( typeof d[column.id] !== 'undefined') .map((row, i) => ( + // eslint-disable-next-line react/no-array-index-key {row[column.id]} {i < subRows.length - 1 ? ', ' : ''} @@ -236,7 +240,7 @@ export default { className={classnames('-loading', { '-active': loading }, className)} {...rest} > -
+
{loadingText}
From 3f1b0d36edbb665b9eaa4405a30f32792009b082 Mon Sep 17 00:00:00 2001 From: Will Olson Date: Wed, 22 Nov 2017 09:13:59 -0800 Subject: [PATCH 09/16] refactor: Fix lifecycle.js linter errors --- src/lifecycle.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lifecycle.js b/src/lifecycle.js index 7020736..18a16e0 100644 --- a/src/lifecycle.js +++ b/src/lifecycle.js @@ -64,7 +64,7 @@ export default Base => if (freezeWhenExpanded) { // if any rows are expanded, freeze the existing data and sorting const keys = Object.keys(newResolvedState.expanded) - for (var i = 0; i < keys.length; i++) { + for (let i = 0; i < keys.length; i += 1) { if (newResolvedState.expanded[keys[i]]) { newResolvedState.frozen = true break @@ -109,18 +109,18 @@ export default Base => newResolvedState.pages = newResolvedState.manual ? newResolvedState.pages : Math.ceil( - newResolvedState.sortedData.length / newResolvedState.pageSize + newResolvedState.sortedData.length / newResolvedState.pageSize, ) newResolvedState.page = Math.max( newResolvedState.page >= newResolvedState.pages ? newResolvedState.pages - 1 : newResolvedState.page, - 0 + 0, ) } return this.setState(newResolvedState, () => { - cb && cb() + if (cb) { cb() } if ( oldState.page !== newResolvedState.page || oldState.pageSize !== newResolvedState.pageSize || From ad151b5ff003709f7fff0a282796b3ca66528837 Mon Sep 17 00:00:00 2001 From: Will Olson Date: Wed, 22 Nov 2017 09:17:21 -0800 Subject: [PATCH 10/16] refactor: Fix pagination.js linter errors --- src/pagination.js | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/src/pagination.js b/src/pagination.js index 496e81d..e5af788 100644 --- a/src/pagination.js +++ b/src/pagination.js @@ -4,7 +4,7 @@ import classnames from 'classnames' // import _ from './utils' const defaultButton = props => ( - ) @@ -42,7 +42,7 @@ export default class ReactTablePagination extends Component { } applyPage (e) { - e && e.preventDefault() + if (e) { e.preventDefault() } const page = this.state.page this.changePage(page === '' ? this.props.page : page) } @@ -70,9 +70,9 @@ export default class ReactTablePagination extends Component { className={classnames(className, '-pagination')} style={this.props.paginationStyle} > -
+
{ + onClick={() => { if (!canPrevious) return this.changePage(page - 1) }} @@ -81,11 +81,11 @@ export default class ReactTablePagination extends Component { {this.props.previousText}
-
- +
+ {this.props.pageText}{' '} {showPageJump - ?
+ ?
{ @@ -105,31 +105,30 @@ export default class ReactTablePagination extends Component { }} />
- : + : {page + 1} }{' '} {this.props.ofText}{' '} - {pages || 1} + {pages || 1} {showPageSizeOptions && - + }
-
+
{ + onClick={() => { if (!canNext) return this.changePage(page + 1) }} From bcfa65825782e267c72d8b48dc156bef85a3d49b Mon Sep 17 00:00:00 2001 From: Will Olson Date: Wed, 22 Nov 2017 09:19:36 -0800 Subject: [PATCH 11/16] refactor: Fix propTypes.js linter errors --- src/propTypes.js | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/propTypes.js b/src/propTypes.js index 227df7e..48b09a8 100644 --- a/src/propTypes.js +++ b/src/propTypes.js @@ -1,4 +1,4 @@ -import PropTypes from "prop-types"; +import PropTypes from 'prop-types' export default { // General @@ -85,37 +85,37 @@ export default { Cell: PropTypes.oneOfType([ PropTypes.element, PropTypes.string, - PropTypes.func + PropTypes.func, ]), Header: PropTypes.oneOfType([ PropTypes.element, PropTypes.string, - PropTypes.func + PropTypes.func, ]), Footer: PropTypes.oneOfType([ PropTypes.element, PropTypes.string, - PropTypes.func + PropTypes.func, ]), Aggregated: PropTypes.oneOfType([ PropTypes.element, PropTypes.string, - PropTypes.func + PropTypes.func, ]), Pivot: PropTypes.oneOfType([ PropTypes.element, PropTypes.string, - PropTypes.func + PropTypes.func, ]), PivotValue: PropTypes.oneOfType([ PropTypes.element, PropTypes.string, - PropTypes.func + PropTypes.func, ]), Expander: PropTypes.oneOfType([ PropTypes.element, PropTypes.string, - PropTypes.func + PropTypes.func, ]), Filter: PropTypes.oneOfType([PropTypes.element, PropTypes.func]), @@ -145,8 +145,8 @@ export default { getFooterProps: PropTypes.object, filterMethod: PropTypes.func, filterAll: PropTypes.bool, - sortMethod: PropTypes.func - }) + sortMethod: PropTypes.func, + }), ), // Global Expander Column Defaults @@ -154,7 +154,7 @@ export default { sortable: PropTypes.bool, resizable: PropTypes.bool, filterable: PropTypes.bool, - width: PropTypes.number + width: PropTypes.number, }), pivotDefaults: PropTypes.object, @@ -181,7 +181,8 @@ export default { ExpanderComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.element]), PivotValueComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.element]), AggregatedComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.element]), - PivotComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.element]), // this is a computed default generated using + // this is a computed default generated using + PivotComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.element]), // the ExpanderComponent and PivotValueComponent at run-time in methods.js PaginationComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.element]), PreviousComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.element]), @@ -189,5 +190,5 @@ export default { LoadingComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.element]), NoDataComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.element]), ResizerComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.element]), - PadRowComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.element]) -}; + PadRowComponent: PropTypes.oneOfType([PropTypes.func, PropTypes.element]), +} From b310a2ebc412c4d93635670a917837a723fc7d5d Mon Sep 17 00:00:00 2001 From: Will Olson Date: Wed, 22 Nov 2017 09:33:10 -0800 Subject: [PATCH 12/16] refactor: Fix utils.js linter errors --- src/utils.js | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/utils.js b/src/utils.js index a99b653..3848f47 100644 --- a/src/utils.js +++ b/src/utils.js @@ -30,7 +30,9 @@ function get (obj, path, def) { let val try { val = pathObj.reduce((current, pathPart) => current[pathPart], obj) - } catch (e) {} + } catch (e) { + // continue regardless of error + } return typeof val !== 'undefined' ? val : def } @@ -59,7 +61,7 @@ function last (arr) { function range (n) { const arr = [] - for (let i = 0; i < n; i++) { + for (let i = 0; i < n; i += 1) { arr.push(n) } return arr @@ -67,7 +69,7 @@ function range (n) { function orderBy (arr, funcs, dirs, indexKey) { return arr.sort((rowA, rowB) => { - for (let i = 0; i < funcs.length; i++) { + for (let i = 0; i < funcs.length; i += 1) { const comp = funcs[i] const desc = dirs[i] === false || dirs[i] === 'desc' const sortInt = comp(rowA, rowB) @@ -83,8 +85,8 @@ function orderBy (arr, funcs, dirs, indexKey) { } function remove (a, b) { - return a.filter(function (o, i) { - var r = b(o) + return a.filter((o, i) => { + const r = b(o) if (r) { a.splice(i, 1) return true @@ -101,7 +103,7 @@ function clone (a) { return value.toString() } return value - }) + }), ) } catch (e) { return a @@ -109,7 +111,7 @@ function clone (a) { } function getFirstDefined (...args) { - for (var i = 0; i < args.length; i++) { + for (let i = 0; i < args.length; i += 1) { if (typeof args[i] !== 'undefined') { return args[i] } @@ -117,9 +119,9 @@ function getFirstDefined (...args) { } function sum (arr) { - return arr.reduce((a, b) => { - return a + b - }, 0) + return arr.reduce((a, b) => ( + a + b + ), 0) } function makeTemplateComponent (compClass, displayName) { @@ -146,7 +148,7 @@ function groupBy (xs, key) { function asPx (value) { value = Number(value) - return Number.isNaN(value) ? null : value + 'px' + return Number.isNaN(value) ? null : `${value}px` } function isArray (a) { @@ -169,7 +171,7 @@ function flattenDeep (arr, newArr = []) { if (!isArray(arr)) { newArr.push(arr) } else { - for (var i = 0; i < arr.length; i++) { + for (let i = 0; i < arr.length; i += 1) { flattenDeep(arr[i], newArr) } } @@ -186,15 +188,16 @@ function splitProps ({ className, style, ...rest }) { function compactObject (obj) { const newObj = {} - for (var key in obj) { + Object.keys(obj).map(key => { if ( - obj.hasOwnProperty(key) && + Object.prototype.hasOwnProperty.call(obj, key) && obj[key] !== undefined && typeof obj[key] !== 'undefined' ) { newObj[key] = obj[key] } - } + return true + }) return newObj } From 80aa2ea7f47806269bf9018d5a72d8f6bf36dc91 Mon Sep 17 00:00:00 2001 From: Will Olson Date: Wed, 22 Nov 2017 09:48:13 -0800 Subject: [PATCH 13/16] refactor: Fix methods.js linter errors --- src/methods.js | 194 ++++++++++++++++++++++++------------------------- 1 file changed, 93 insertions(+), 101 deletions(-) diff --git a/src/methods.js b/src/methods.js index c6a29bf..c473ec1 100644 --- a/src/methods.js +++ b/src/methods.js @@ -42,7 +42,7 @@ export default Base => let expanderColumn = columns.find( col => col.expander || - (col.columns && col.columns.some(col2 => col2.expander)) + (col.columns && col.columns.some(col2 => col2.expander)), ) // The actual expander might be in the columns field of a group column if (expanderColumn && !expanderColumn.expander) { @@ -91,48 +91,48 @@ export default Base => if (dcol.accessor && !dcol.id) { console.warn(dcol) throw new Error( - 'A column id is required if using a non-string accessor for column above.' + 'A column id is required if using a non-string accessor for column above.', ) } // Fall back to an undefined accessor if (!dcol.accessor) { - dcol.accessor = d => undefined + dcol.accessor = () => undefined } return dcol } + const allDecoratedColumns = [] + // Decorate the columns const decorateAndAddToAll = (column, parentColumn) => { const decoratedColumn = makeDecoratedColumn(column, parentColumn) allDecoratedColumns.push(decoratedColumn) return decoratedColumn } - const allDecoratedColumns = [] - const decoratedColumns = columnsWithExpander.map((column, i) => { + + const decoratedColumns = columnsWithExpander.map(column => { if (column.columns) { return { ...column, columns: column.columns.map(d => decorateAndAddToAll(d, column)), } - } else { - return decorateAndAddToAll(column) } + return decorateAndAddToAll(column) }) // Build the visible columns, headers and flat column list let visibleColumns = decoratedColumns.slice() let allVisibleColumns = [] - visibleColumns = visibleColumns.map((column, i) => { + visibleColumns = visibleColumns.map(column => { if (column.columns) { - const visibleSubColumns = column.columns.filter( - d => - pivotBy.indexOf(d.id) > -1 - ? false - : _.getFirstDefined(d.show, true) - ) + const visibleSubColumns = column.columns.filter(d => ( + pivotBy.indexOf(d.id) > -1 + ? false + : _.getFirstDefined(d.show, true) + )) return { ...column, columns: visibleSubColumns, @@ -141,13 +141,13 @@ export default Base => return column }) - visibleColumns = visibleColumns.filter(column => { - return column.columns + visibleColumns = visibleColumns.filter(column => ( + column.columns ? column.columns.length : pivotBy.indexOf(column.id) > -1 ? false : _.getFirstDefined(column.show, true) - }) + )) // Find any custom pivot location const pivotIndex = visibleColumns.findIndex(col => col.pivot) @@ -163,10 +163,10 @@ export default Base => } }) - let PivotParentColumn = pivotColumns.reduce( + const PivotParentColumn = pivotColumns.reduce( (prev, current) => prev && prev === current.parentColumn && current.parentColumn, - pivotColumns[0].parentColumn + pivotColumns[0].parentColumn, ) let PivotGroupHeader = hasHeaderGroups && PivotParentColumn.Header @@ -202,13 +202,13 @@ export default Base => headerGroups.push({ ...this.props.column, ...column, - columns: columns, + columns, }) currentSpan = [] } // Build flast list of allVisibleColumns and HeaderGroups - visibleColumns.forEach((column, i) => { + visibleColumns.forEach(column => { if (column.columns) { allVisibleColumns = allVisibleColumns.concat(column.columns) if (currentSpan.length > 0) { @@ -238,13 +238,18 @@ export default Base => }) if (row[subRowsKey]) { row[subRowsKey] = row[subRowsKey].map((d, i) => - accessRow(d, i, level + 1) + accessRow(d, i, level + 1), ) } return row } let resolvedData = data.map((d, i) => accessRow(d, i)) + // TODO: Make it possible to fabricate nested rows without pivoting + const aggregatingColumns = allVisibleColumns.filter( + d => !d.expander && d.aggregate, + ) + // If pivoting, recursively group the data const aggregate = rows => { const aggregationValues = {} @@ -254,11 +259,6 @@ export default Base => }) return aggregationValues } - - // TODO: Make it possible to fabricate nested rows without pivoting - const aggregatingColumns = allVisibleColumns.filter( - d => !d.expander && d.aggregate - ) if (pivotBy.length) { const groupRecursively = (rows, keys, i = 0) => { // This is the last level, just return the rows @@ -267,20 +267,18 @@ export default Base => } // Group the rows together for this level let groupedRows = Object.entries( - _.groupBy(rows, keys[i]) - ).map(([key, value]) => { - return { - [pivotIDKey]: keys[i], - [pivotValKey]: key, - [keys[i]]: key, - [subRowsKey]: value, - [nestingLevelKey]: i, - [groupedByPivotKey]: true, - } - }) + _.groupBy(rows, keys[i]), + ).map(([key, value]) => ({ + [pivotIDKey]: keys[i], + [pivotValKey]: key, + [keys[i]]: key, + [subRowsKey]: value, + [nestingLevelKey]: i, + [groupedByPivotKey]: true, + })) // Recurse into the subRows groupedRows = groupedRows.map(rowGroup => { - let subRows = groupRecursively(rowGroup[subRowsKey], keys, i + 1) + const subRows = groupRecursively(rowGroup[subRowsKey], keys, i + 1) return { ...rowGroup, [subRowsKey]: subRows, @@ -329,10 +327,10 @@ export default Base => resolvedData, filtered, defaultFilterMethod, - allVisibleColumns + allVisibleColumns, ), sorted, - sortMethodsByColumnID + sortMethodsByColumnID, ), } } @@ -366,11 +364,10 @@ export default Base => // If 'filterAll' is set to true, pass the entire dataset to the filter method if (column.filterAll) { return filterMethod(nextFilter, filteredSoFar, column) - } else { - return filteredSoFar.filter(row => { - return filterMethod(nextFilter, row, column) - }) } + return filteredSoFar.filter(row => ( + filterMethod(nextFilter, row, column) + )) }, filteredData) // Apply the filter to the subrows if we are pivoting, and then @@ -386,7 +383,7 @@ export default Base => row[this.props.subRowsKey], filtered, defaultFilterMethod, - allVisibleColumns + allVisibleColumns, ), } }) @@ -411,16 +408,16 @@ export default Base => sorted.map(sort => { // Support custom sorting methods for each column if (sortMethodsByColumnID[sort.id]) { - return (a, b) => { - return sortMethodsByColumnID[sort.id](a[sort.id], b[sort.id], sort.desc) - } - } - return (a, b) => { - return this.props.defaultSortMethod(a[sort.id], b[sort.id], sort.desc) + return (a, b) => ( + sortMethodsByColumnID[sort.id](a[sort.id], b[sort.id], sort.desc) + ) } + return (a, b) => ( + this.props.defaultSortMethod(a[sort.id], b[sort.id], sort.desc) + ) }), sorted.map(d => !d.desc), - this.props.indexKey + this.props.indexKey, ) sortedData.forEach(row => { @@ -430,7 +427,7 @@ export default Base => row[this.props.subRowsKey] = this.sortData( row[this.props.subRowsKey], sorted, - sortMethodsByColumnID + sortMethodsByColumnID, ) }) @@ -440,7 +437,7 @@ export default Base => getMinRows () { return _.getFirstDefined( this.props.minRows, - this.getStateOrProp('pageSize') + this.getStateOrProp('pageSize'), ) } @@ -452,9 +449,9 @@ export default Base => if (collapseOnPageChange) { newState.expanded = {} } - this.setStateWithData(newState, () => { + this.setStateWithData(newState, () => ( onPageChange && onPageChange(page) - }) + )) } onPageSizeChange (newPageSize) { @@ -470,16 +467,16 @@ export default Base => pageSize: newPageSize, page: newPage, }, - () => { + () => ( onPageSizeChange && onPageSizeChange(newPageSize, newPage) - } + ), ) } sortColumn (column, additive) { const { sorted, skipNextSort, defaultSortDesc } = this.getResolvedState() - const firstSortDirection = column.hasOwnProperty('defaultSortDesc') + const firstSortDirection = Object.prototype.hasOwnProperty.call(column, 'defaultSortDesc') ? column.defaultSortDesc : defaultSortDesc const secondSortDirection = !firstSortDirection @@ -519,20 +516,18 @@ export default Base => newSorted = [existing] } } + } else if (additive) { + newSorted.push({ + id: column.id, + desc: firstSortDirection, + }) } else { - if (additive) { - newSorted.push({ + newSorted = [ + { id: column.id, desc: firstSortDirection, - }) - } else { - newSorted = [ - { - id: column.id, - desc: firstSortDirection, - }, - ] - } + }, + ] } } else { // Multi-Sort @@ -556,21 +551,19 @@ export default Base => if (!additive) { newSorted = newSorted.slice(existingIndex, column.length) } - } else { - // New Sort Column - if (additive) { - newSorted = newSorted.concat( - column.map(d => ({ - id: d.id, - desc: firstSortDirection, - })) - ) - } else { - newSorted = column.map(d => ({ + // New Sort Column + } else if (additive) { + newSorted = newSorted.concat( + column.map(d => ({ id: d.id, desc: firstSortDirection, - })) - } + })), + ) + } else { + newSorted = column.map(d => ({ + id: d.id, + desc: firstSortDirection, + })) } } @@ -582,9 +575,9 @@ export default Base => : this.state.page, sorted: newSorted, }, - () => { + () => ( onSortedChange && onSortedChange(newSorted, column, additive) - } + ), ) } @@ -593,16 +586,14 @@ export default Base => const { onFilteredChange } = this.props // Remove old filter first if it exists - const newFiltering = (filtered || []).filter(x => { - if (x.id !== column.id) { - return true - } - }) + const newFiltering = (filtered || []).filter(x => ( + x.id !== column.id + )) if (value !== '') { newFiltering.push({ id: column.id, - value: value, + value, }) } @@ -610,9 +601,9 @@ export default Base => { filtered: newFiltering, }, - () => { + () => ( onFilteredChange && onFilteredChange(newFiltering, column, value) - } + ), ) } @@ -634,7 +625,7 @@ export default Base => currentlyResizing: { id: column.id, startX: pageX, - parentWidth: parentWidth, + parentWidth, }, }, () => { @@ -647,7 +638,7 @@ export default Base => document.addEventListener('mouseup', this.resizeColumnEnd) document.addEventListener('mouseleave', this.resizeColumnEnd) } - } + }, ) } @@ -667,10 +658,11 @@ export default Base => pageX = event.pageX } - // Set the min size to 10 to account for margin and border or else the group headers don't line up correctly + // Set the min size to 10 to account for margin and border or else the + // group headers don't line up correctly const newWidth = Math.max( currentlyResizing.parentWidth + pageX - currentlyResizing.startX, - 11 + 11, ) newResized.push({ @@ -682,15 +674,15 @@ export default Base => { resized: newResized, }, - () => { + () => ( onResizedChange && onResizedChange(newResized, event) - } + ), ) } resizeColumnEnd (event) { event.stopPropagation() - let isTouch = event.type === 'touchend' || event.type === 'touchcancel' + const isTouch = event.type === 'touchend' || event.type === 'touchcancel' if (isTouch) { document.removeEventListener('touchmove', this.resizeColumnMoving) From ed6dd5af4c006bf6b883e1a5e5cedf861a7d0709 Mon Sep 17 00:00:00 2001 From: Will Olson Date: Wed, 22 Nov 2017 10:04:26 -0800 Subject: [PATCH 14/16] refactor: Fix index.js linter errors --- src/index.js | 468 ++++++++++++++++++++++++++------------------------- 1 file changed, 235 insertions(+), 233 deletions(-) diff --git a/src/index.js b/src/index.js index b3d26f1..3003ab3 100644 --- a/src/index.js +++ b/src/index.js @@ -141,27 +141,25 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { const hasColumnFooter = allVisibleColumns.some(d => d.Footer) const hasFilters = filterable || allVisibleColumns.some(d => d.filterable) - const recurseRowsViewIndex = (rows, path = [], index = -1) => { - return [ - rows.map((row, i) => { - index++ - const rowWithViewIndex = { - ...row, - _viewIndex: index, - } - const newPath = path.concat([i]) - if (rowWithViewIndex[subRowsKey] && _.get(expanded, newPath)) { - ;[rowWithViewIndex[subRowsKey], index] = recurseRowsViewIndex( - rowWithViewIndex[subRowsKey], - newPath, - index - ) - } - return rowWithViewIndex - }), - index, - ] - } + const recurseRowsViewIndex = (rows, path = [], index = -1) => ([ + rows.map((row, i) => { + index += 1 + const rowWithViewIndex = { + ...row, + _viewIndex: index, + } + const newPath = path.concat([i]) + if (rowWithViewIndex[subRowsKey] && _.get(expanded, newPath)) { + [rowWithViewIndex[subRowsKey], index] = recurseRowsViewIndex( + rowWithViewIndex[subRowsKey], + newPath, + index, + ) + } + return rowWithViewIndex + }), + index, + ]) ;[pageRows] = recurseRowsViewIndex(pageRows) const canPrevious = page > 0 @@ -171,7 +169,7 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { allVisibleColumns.map(d => { const resizedColumn = resized.find(x => x.id === d.id) || {} return _.getFirstDefined(resizedColumn.value, d.width, d.minWidth) - }) + }), ) let rowIndex = -1 @@ -189,59 +187,45 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { rowMinWidth, } - // Visual Components + const rootProps = _.splitProps( + getProps(finalState, undefined, undefined, this), + ) + const tableProps = _.splitProps( + getTableProps(finalState, undefined, undefined, this), + ) + const tBodyProps = _.splitProps( + getTbodyProps(finalState, undefined, undefined, this), + ) + const loadingProps = getLoadingProps(finalState, undefined, undefined, this) + const noDataProps = getNoDataProps(finalState, undefined, undefined, this) + const resizerProps = getResizerProps(finalState, undefined, undefined, this) - const makeHeaderGroups = () => { - const theadGroupProps = _.splitProps( - getTheadGroupProps(finalState, undefined, undefined, this) - ) - const theadGroupTrProps = _.splitProps( - getTheadGroupTrProps(finalState, undefined, undefined, this) - ) - return ( - - - {headerGroups.map(makeHeaderGroup)} - - - ) - } + // Visual Components const makeHeaderGroup = (column, i) => { const resizedValue = col => (resized.find(x => x.id === col.id) || {}).value const flex = _.sum( column.columns.map( - col => (col.width || resizedValue(col) ? 0 : col.minWidth) - ) + col => (col.width || resizedValue(col) ? 0 : col.minWidth), + ), ) const width = _.sum( column.columns.map(col => - _.getFirstDefined(resizedValue(col), col.width, col.minWidth) - ) + _.getFirstDefined(resizedValue(col), col.width, col.minWidth), + ), ) const maxWidth = _.sum( column.columns.map(col => - _.getFirstDefined(resizedValue(col), col.width, col.maxWidth) - ) + _.getFirstDefined(resizedValue(col), col.width, col.maxWidth), + ), ) const theadGroupThProps = _.splitProps( - getTheadGroupThProps(finalState, undefined, column, this) + getTheadGroupThProps(finalState, undefined, column, this), ) const columnHeaderProps = _.splitProps( - column.getHeaderProps(finalState, undefined, column, this) + column.getHeaderProps(finalState, undefined, column, this), ) const classes = [ @@ -269,7 +253,7 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { return ( {_.normalizeComponent(column.Header, { data: sortedData, - column: column, + column, })} ) } - const makeHeaders = () => { - const theadProps = _.splitProps( - getTheadProps(finalState, undefined, undefined, this) + const makeHeaderGroups = () => { + const theadGroupProps = _.splitProps( + getTheadGroupProps(finalState, undefined, undefined, this), ) - const theadTrProps = _.splitProps( - getTheadTrProps(finalState, undefined, undefined, this) + const theadGroupTrProps = _.splitProps( + getTheadGroupTrProps(finalState, undefined, undefined, this), ) return ( - {allVisibleColumns.map(makeHeader)} + {headerGroups.map(makeHeaderGroup)} ) @@ -320,18 +304,18 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { const width = _.getFirstDefined( resizedCol.value, column.width, - column.minWidth + column.minWidth, ) const maxWidth = _.getFirstDefined( resizedCol.value, column.width, - column.maxWidth + column.maxWidth, ) const theadThProps = _.splitProps( - getTheadThProps(finalState, undefined, column, this) + getTheadThProps(finalState, undefined, column, this), ) const columnHeaderProps = _.splitProps( - column.getHeaderProps(finalState, undefined, column, this) + column.getHeaderProps(finalState, undefined, column, this), ) const classes = [ @@ -364,7 +348,7 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { return ( { + toggleSort={e => ( isSortable && this.sortColumn(column, e.shiftKey) - }} + )} {...rest} >
{_.normalizeComponent(column.Header, { data: sortedData, - column: column, + column, })}
{resizer} @@ -397,28 +381,28 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { ) } - const makeFilters = () => { - const theadFilterProps = _.splitProps( - getTheadFilterProps(finalState, undefined, undefined, this) + const makeHeaders = () => { + const theadProps = _.splitProps( + getTheadProps(finalState, undefined, undefined, this), ) - const theadFilterTrProps = _.splitProps( - getTheadFilterTrProps(finalState, undefined, undefined, this) + const theadTrProps = _.splitProps( + getTheadTrProps(finalState, undefined, undefined, this), ) return ( - {allVisibleColumns.map(makeFilter)} + {allVisibleColumns.map(makeHeader)} ) @@ -429,18 +413,18 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { const width = _.getFirstDefined( resizedCol.value, column.width, - column.minWidth + column.minWidth, ) const maxWidth = _.getFirstDefined( resizedCol.value, column.width, - column.maxWidth + column.maxWidth, ) const theadFilterThProps = _.splitProps( - getTheadFilterThProps(finalState, undefined, column, this) + getTheadFilterThProps(finalState, undefined, column, this), ) const columnHeaderProps = _.splitProps( - column.getHeaderProps(finalState, undefined, column, this) + column.getHeaderProps(finalState, undefined, column, this), ) const classes = [ @@ -467,12 +451,12 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { const isFilterable = _.getFirstDefined( column.filterable, filterable, - false + false, ) return ( this.filterColumn(column, value), }, - defaultProps.column.Filter + defaultProps.column.Filter, ) : null} ) } + const makeFilters = () => { + const theadFilterProps = _.splitProps( + getTheadFilterProps(finalState, undefined, undefined, this), + ) + const theadFilterTrProps = _.splitProps( + getTheadFilterTrProps(finalState, undefined, undefined, this), + ) + return ( + + + {allVisibleColumns.map(makeFilter)} + + + ) + } + const makePageRow = (row, i, path = []) => { const rowInfo = { original: row[originalKey], - row: row, + row, index: row[indexKey], - viewIndex: ++rowIndex, - pageSize: pageSize, - page: page, + viewIndex: rowIndex += 1, + pageSize, + page, level: path.length, nestingPath: path.concat([i]), aggregated: row[aggregatedKey], @@ -514,14 +525,14 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { const isExpanded = _.get(expanded, rowInfo.nestingPath) const trGroupProps = getTrGroupProps(finalState, rowInfo, undefined, this) const trProps = _.splitProps( - getTrProps(finalState, rowInfo, undefined, this) + getTrProps(finalState, rowInfo, undefined, this), ) return ( { + () => ( onExpandedChange && onExpandedChange(newExpanded, cellInfo.nestingPath, e) - } + ), ) } @@ -605,7 +616,7 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { let resolvedCell = _.normalizeComponent( column.Cell, cellInfo, - value + value, ) // Resolve Renderers @@ -632,7 +643,8 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { // Make it expandable by defualt cellInfo.expandable = true useOnExpanderClick = true - // If pivoted, has no subRows, and does not have a subComponent, do not make expandable + // If pivoted, has no subRows, and does not have a subComponent, + // do not make expandable if (cellInfo.pivoted && !cellInfo.subRows && !SubComponent) { cellInfo.expandable = false } @@ -655,14 +667,14 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { ...cellInfo, value: row[pivotValKey], }, - row[pivotValKey] + row[pivotValKey], ) } else if (isPreview) { // Show the pivot preview resolvedCell = _.normalizeComponent( ResolvedAggregatedComponent, cellInfo, - value + value, ) } else { resolvedCell = null @@ -671,7 +683,7 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { resolvedCell = _.normalizeComponent( ResolvedAggregatedComponent, cellInfo, - value + value, ) } @@ -679,7 +691,7 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { resolvedCell = _.normalizeComponent( ResolvedExpanderComponent, cellInfo, - row[pivotValKey] + row[pivotValKey], ) if (pivotBy) { if (cellInfo.groupedByPivot) { @@ -695,7 +707,9 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { ? onExpanderClick : () => {} - // If there are multiple onClick events, make sure they don't override eachother. This should maybe be expanded to handle all function attributes + // If there are multiple onClick events, make sure they don't + // override eachother. This should maybe be expanded to handle all + // function attributes const interactionProps = { onClick: resolvedOnExpanderClick, } @@ -715,12 +729,13 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { // Return the cell return ( - makePageRow(d, i, rowInfo.nestingPath) + makePageRow(d, i, rowInfo.nestingPath), )} {SubComponent && !rowInfo.subRows && @@ -750,52 +765,26 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { ) } - const makePadRow = (row, i) => { - const trGroupProps = getTrGroupProps( - finalState, - undefined, - undefined, - this - ) - const trProps = _.splitProps( - getTrProps(finalState, undefined, undefined, this) - ) - return ( - - - {allVisibleColumns.map(makePadColumn)} - - - ) - } - const makePadColumn = (column, i) => { const resizedCol = resized.find(x => x.id === column.id) || {} const show = typeof column.show === 'function' ? column.show() : column.show - let width = _.getFirstDefined( + const width = _.getFirstDefined( resizedCol.value, column.width, - column.minWidth + column.minWidth, ) - let flex = width - let maxWidth = _.getFirstDefined( + const flex = width + const maxWidth = _.getFirstDefined( resizedCol.value, column.width, - column.maxWidth + column.maxWidth, ) const tdProps = _.splitProps( - getTdProps(finalState, undefined, column, this) + getTdProps(finalState, undefined, column, this), ) const columnProps = _.splitProps( - column.getProps(finalState, undefined, column, this) + column.getProps(finalState, undefined, column, this), ) const classes = [ @@ -812,7 +801,7 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { return ( { + const trGroupProps = getTrGroupProps( + finalState, + undefined, + undefined, + this, + ) + const trProps = _.splitProps( + getTrProps(finalState, undefined, undefined, this), + ) + return ( + + + {allVisibleColumns.map(makePadColumn)} + + + ) + } + + const makeColumnFooter = (column, i) => { + const resizedCol = resized.find(x => x.id === column.id) || {} + const show = + typeof column.show === 'function' ? column.show() : column.show + const width = _.getFirstDefined( + resizedCol.value, + column.width, + column.minWidth, + ) + const maxWidth = _.getFirstDefined( + resizedCol.value, + column.width, + column.maxWidth, + ) + const tFootTdProps = _.splitProps( + getTfootTdProps(finalState, undefined, undefined, this), + ) + const columnProps = _.splitProps( + column.getProps(finalState, undefined, column, this), + ) + const columnFooterProps = _.splitProps( + column.getFooterProps(finalState, undefined, column, this), + ) + + const classes = [ + tFootTdProps.className, + column.className, + columnProps.className, + columnFooterProps.className, + ] + + const styles = { + ...tFootTdProps.style, + ...column.style, + ...columnProps.style, + ...columnFooterProps.style, + } + + return ( + + {_.normalizeComponent(column.Footer, { + data: sortedData, + column, + })} + + ) + } + const makeColumnFooters = () => { const tFootProps = getTfootProps(finalState, undefined, undefined, this) const tFootTrProps = _.splitProps( - getTfootTrProps(finalState, undefined, undefined, this) + getTfootTrProps(finalState, undefined, undefined, this), ) return ( { - const resizedCol = resized.find(x => x.id === column.id) || {} - const show = - typeof column.show === 'function' ? column.show() : column.show - const width = _.getFirstDefined( - resizedCol.value, - column.width, - column.minWidth - ) - const maxWidth = _.getFirstDefined( - resizedCol.value, - column.width, - column.maxWidth - ) - const tFootTdProps = _.splitProps( - getTfootTdProps(finalState, undefined, undefined, this) - ) - const columnProps = _.splitProps( - column.getProps(finalState, undefined, column, this) - ) - const columnFooterProps = _.splitProps( - column.getFooterProps(finalState, undefined, column, this) - ) - - const classes = [ - tFootTdProps.className, - column.className, - columnProps.className, - columnFooterProps.className, - ] - - const styles = { - ...tFootTdProps.style, - ...column.style, - ...columnProps.style, - ...columnFooterProps.style, - } - - return ( - - {_.normalizeComponent(column.Footer, { - data: sortedData, - column: column, - })} - - ) - } - const makePagination = () => { const paginationProps = _.splitProps( - getPaginationProps(finalState, undefined, undefined, this) + getPaginationProps(finalState, undefined, undefined, this), ) return ( { const pagination = makePagination() return ( @@ -956,14 +958,14 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { {...rootProps.rest} > {showPagination && showPaginationTop - ?
+ ?
{pagination}
: null} {showPagination && showPaginationBottom - ?
+ ?
{pagination}
: null} From 2e8596618a7d32f45113dbb429d9e30da0163094 Mon Sep 17 00:00:00 2001 From: Gary Menzel Date: Thu, 23 Nov 2017 13:53:00 +1100 Subject: [PATCH 15/16] Fix for linter changes + CHANGELOG update --- CHANGELOG.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/index.js | 2 +- 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39d3fa7..41900d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,58 @@ +## 6.7.4 +#### Fixes & Optimizations +- Fix Prop types for columns + +## 6.7.3 +#### Fixes & Optimizations +- Fix the rest of the proptypes + +## 6.7.2 +#### Fixes & Optimizations +- `getPropTypes` proptype check + +## 6.7.1 +#### Fixes & Optimizations +- `eslint-config` moved to dev deps + +## 6.7.0 +## 6.7.0-alpha-0 +#### New Features +- Expose page/pageSize to rows/cells +- Supply sort direction to custom sort methods + +#### Fixes & Optimizations +- README updates +- Linter cleanup +- Added PropTypes node module +- Deps, linting and style upgrades + +## 6.6.0 +#### Fixes & Optimizations +- moved repo to react-tools +- Doc examples moved to codesandbox.io +- README updates +- CSS refacting for rt-tfoot to match rt-thead +- CSS more specific for input and select + +## 6.5.3 +#### Fixes & Optimizations +- `onClick` proxying and eslint + +## 6.5.2 +#### New Features +- Provide onClick handleOriginal function - #406 + +#### Fixes & Optimizations +- README updates +- `makePathArray` in utils - #326 +- Various fixes: #294, #376, #398, #415, + +## 6.5.1 +#### Fixes & Optimizations +- `defaultExpanded` now works correctly - #372 +- `column.getProps().rest` props are now applied correctly +- `makeTemplateComponent` now supports `displayName` - #289 + ## 6.5.0 ##### New Features - `column.filterAll` - defaults to `false`, but when set to `true` will provide the entire array of rows to `filterMethod` as opposed to one row at a time. This allows for more fine-grained filtering using any method you can dream up. See the [Custom Filtering example](https://react-table.js.org/#/story/custom-filtering) for more info. diff --git a/src/index.js b/src/index.js index b6c0b0b..12d3eed 100644 --- a/src/index.js +++ b/src/index.js @@ -367,7 +367,7 @@ export default class ReactTable extends Methods(Lifecycle(Component)) { maxWidth: _.asPx(maxWidth), }} toggleSort={e => { - isSortable && this.sortColumn(column, multiSort ? e.shiftKey : false) + if (isSortable) this.sortColumn(column, multiSort ? e.shiftKey : false) }} {...rest} > From 0443644ccda522f71a75b22062512337f893866e Mon Sep 17 00:00:00 2001 From: Gary Menzel Date: Mon, 27 Nov 2017 09:50:36 +1100 Subject: [PATCH 16/16] Fixes #643 Still requires some basic sanity test to ensure ReactTable does not have any fundamental coding errors. Modified some of the /docs code to help with manual testing. --- docs/src/App.js | 22 ++---- docs/src/examples/expander/index.js | 105 +++++++++++++++------------- docs/src/stories/test.js | 31 ++++++++ src/utils.js | 22 +++--- 4 files changed, 103 insertions(+), 77 deletions(-) create mode 100644 docs/src/stories/test.js diff --git a/docs/src/App.js b/docs/src/App.js index 3efcc39..dcddce8 100644 --- a/docs/src/App.js +++ b/docs/src/App.js @@ -9,31 +9,17 @@ import '../../react-table.css' import Readme from './stories/Readme.js' import HOCReadme from './stories/HOCReadme.js' +// import Test from './stories/test.js' // import Tester from './examples/expander'; -// import { TreeTable, SelectTable, SelectTreeTable } from './examples/index' -// -// const exampleStories = [ -// // examples -// { name: 'TreeTable', component: TreeTable }, -// { name: 'SelectTable', component: SelectTable }, -// { name: 'SelectTreeTable', component: SelectTreeTable }, -// ] - -import { TreeTable, CheckboxTable } from './examples/index' - -const exampleStories = [ - // examples - { name: 'TreeTable', component: TreeTable }, - { name: 'CheckboxTable', component: CheckboxTable }, -]; - const stories = [ { name: 'Readme', component: Readme }, { name: 'HOC Readme', component: HOCReadme }, - // { name: 'Tester', component: Tester }, + // ...exampleStories, + + // { name: 'Tester', component: Test }, { name: 'Simple Table', component: CodeSandbox('X6npLXPRW') }, { name: 'Cell Renderers & Custom Components', diff --git a/docs/src/examples/expander/index.js b/docs/src/examples/expander/index.js index 31c08eb..5403e25 100644 --- a/docs/src/examples/expander/index.js +++ b/docs/src/examples/expander/index.js @@ -1,54 +1,61 @@ -/* eslint-disable */ -import React from 'react'; +import React from 'react' -import ReactTable from '../../../../lib/index' -import '../../../../react-table.css' - -const data = [ - {one:"1.1",two:"1.2"}, - {one:"2.1",two:"2.2"}, - {one:"3.1",two:"3.2"}, - {one:"4.1",two:"4.2"}, -] - -const columns = [ - {accessor:'one', Header: 'One'}, - {accessor:'two', Header: 'Two'}, -] - -class ExpanderComponent extends React.Component { - render() - { - return ( -
- • -
- ) +export default class ComponentTest extends React.component { + render () { + return
Bozo
} } -class SubComponent extends React.Component { - render() - { - return
Nothing
- } -} - -export default class ComponentTest extends React.Component { - render() - { - const rtProps = { - data, - columns, - ExpanderComponent: (props)=>, - SubComponent: (props)=>, - multiSort: false, - } - return ( - - ) - } -} +// import ReactTable from '../../../../lib/index' +// import '../../../../react-table.css' +// +// console.log('ReactTable:',ReactTable) +// +// const data = [ +// {one:"1.1",two:"1.2"}, +// {one:"2.1",two:"2.2"}, +// {one:"3.1",two:"3.2"}, +// {one:"4.1",two:"4.2"}, +// ] +// +// const columns = [ +// {accessor:'one', Header: 'One'}, +// {accessor:'two', Header: 'Two'}, +// ] +// +// class ExpanderComponent extends React.Component { +// render() +// { +// return ( +//
+// • +//
+// ) +// } +// } +// +// class SubComponent extends React.Component { +// render() +// { +// return
Nothing
+// } +// } +// +// export default class ComponentTest extends React.Component { +// render() +// { +// const rtProps = { +// data, +// columns, +// // ExpanderComponent: (props)=>, +// // SubComponent: (props)=>, +// // multiSort: false, +// } +// return ( +// +// ) +// } +// } diff --git a/docs/src/stories/test.js b/docs/src/stories/test.js new file mode 100644 index 0000000..5e98633 --- /dev/null +++ b/docs/src/stories/test.js @@ -0,0 +1,31 @@ + +import React from 'react' + +import ReactTable from '../../../lib/index' +import '../../../react-table.css' + +const data = [ + { one: '1.1', two: '1.2' }, + { one: '2.1', two: '2.2' }, + { one: '3.1', two: '3.2' }, + { one: '4.1', two: '4.2' }, +] + +const columns = [ + { accessor: 'one', Header: 'One' }, + { accessor: 'two', Header: 'Two' }, +] + +export default class Story extends React.Component { + render () { + return ( +
+ Test + +
+ ) + } +} diff --git a/src/utils.js b/src/utils.js index 3848f47..6a46465 100644 --- a/src/utils.js +++ b/src/utils.js @@ -188,16 +188,18 @@ function splitProps ({ className, style, ...rest }) { function compactObject (obj) { const newObj = {} - Object.keys(obj).map(key => { - if ( - Object.prototype.hasOwnProperty.call(obj, key) && - obj[key] !== undefined && - typeof obj[key] !== 'undefined' - ) { - newObj[key] = obj[key] - } - return true - }) + if (obj) { + Object.keys(obj).map(key => { + if ( + Object.prototype.hasOwnProperty.call(obj, key) && + obj[key] !== undefined && + typeof obj[key] !== 'undefined' + ) { + newObj[key] = obj[key] + } + return true + }) + } return newObj }