Git Product home page Git Product logo

ios's Introduction

5calls

Quicknav

Automated testing

CircleCI

Cross-browser testing

BrowserStack Status

Table of Contents

Development Notes

The frontend is written in React with Redux for state management and Typescript for type safety and documentation. The application server back end -- for data processing -- is written in Go.

To build the application, you need to install Yarn and run the following commands:

# install dependencies and
#   compile .scss files to .css:
yarn

# Run unit tests in watch mode
yarn test

# Run unit tests with a code coverage report
yarn test:coverage

# start the app running in the
#   webpack development server:
yarn start

# start the app running in https mode
#   (needed for browser geolocation):
yarn start:https

# build the app into build folder
#  for server deployment:
yarn build

# any updates to .scss files need
#  to be compiled to css using:
yarn clean-build-css

Using yarn add to add new dependencies will throw an error related to node-sass-chokidar, which can be ignored.

For the best development experience, you should install both the React and Redux Development Tools extensions into your browser. Both browser extensions are available for Chrome and Firefox.

Unit testing

Unit testing in this repository is done using Jest with Enzyme in addition to the redux-mock-store library to support Redux-related tests.

End-to-end Integration Tests

E2E testing for this project is done using TestCafe with testcafe-react-selectors. This provides a web scraping test bed that provides an assertion library to ensure that the expected elements appear on each page under test.

Running the tests

Before running the tests, the development server must be running using the command yarn start Once the test server is running, you may either run all the tests on your local browser using one of the following commands

testcafe <browsername> web-tests/*.ts
yarn web-tests:all

Or if you have access to browserstack, you may run on multiple browsers using the command

yarn web-tests:browserstack

Running on browserstack

To run on browserstack, ensure that you have environment variables set for BROWSERSTACK_ACCESS_KEY and BROWSERSTACK_USERNAME to the values of your browserstack account You may view test results on the dashboard

Debugging and running individual tests

You may run specific tests by running testcafe with the -t or -T option -t -T <partial test name, must meet grep search criteria. Ex. Tests that start with donate may be found with "Donate.*">

Tests may be run in debug mode with the --inspect-brk option.

testcafe --inspect-brk chrome web-tests/test.ts 

Breakpoints may be put in the test with the following syntax

// tslint:disable-next-line:no-debugger
debugger;

Then in chrome, navigate to chrome://inspect On this page, under Remote Target there will be an inspect link, click to start the debugger.

Architecture, Data Flow and Strong Typing

A selection of files in this repository include code comments describing the architecture, data flow and strong typing conventions used in developing the React-Redux-TypeScript version of the 5 Calls application. These include files that illustrate the following (see the individual files for more details):

Use of TypeScript to Strongly Type Request Parameters Passed by React-Router

Also illustrates the use of Redux to loosely couple a component to data passed to its props.
CallPageContainer.tsx
CallPage.tsx

Data Flow through a Component Heirarcy

Also note the TypeScript conventions used in these files.
CallPageContainer.tsx
CallPage.tsx
Why5calls.tsx

Redux Data Flow

See code comments containing the token 'REDUX DATA FLOW'. Also note the use of TypeScript in these files.
CallPageContainer.tsx
redux/callState/action.ts
redux/callState/actionCreator.ts
redux/callState/reducer.ts

Contributor Guidelines

Contributions to this repository are welcome. Please see the Contributing.md file in the 5calls/5calls repository for information on contributing to this repository.

Contributors

Other Client Projects

Create React App Code Generation

This project was created with create-react-app (CRA, react-scripts ver 1.0.0) using react-scripts-ts (ver 2.2.0) to add TypeScript support. In addition, the node-sass-chokidar library was added for preprocessing of SASS (.scss files) to CSS.

Subsequently, the CRA-created configurations were exposed using the eject command (yarn eject). This created the config and scripts folders and added dependencies and other configurations to package.json.

CRA_README.md is the original README.md file created when the create-react-app command was run.

ios's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ios's Issues

Fix scrollToBottom crash

 # Crashlytics - plaintext stacktrace downloaded by Ben Scheirman at Tue, 07 Feb 2017 19:31:02 GMT
# URL: https://fabric.io/fickle-bits/ios/apps/org.fivecalls.fivecalls-ios/issues/589a1dfb0aeb16625b02e58e/sessions/a65ebab513d945a489e94dc545bba5a0_74e893e8f3e64c04b8d47824b7fa3572_0_v1
# Organization: FICKLE BITS, LLC
# Platform: ios
# Application: 5 Calls
# Version: 1.0 (4)
# Bundle Identifier: org.fivecalls.FiveCalls-ios
# Issue #: 1
# Issue ID: 589a1dfb0aeb16625b02e58e
# Session ID: a65ebab513d945a489e94dc545bba5a0_74e893e8f3e64c04b8d47824b7fa3572_0_v1
# Date: 2017-02-07T19:20:39Z
# OS Version: 10.2.1 (14D27)
# Device: iPhone 6s
# RAM Free: 10.3%
# Disk Free: 15.7%

#0. Crashed: com.twitter.crashlytics.ios.exception
0  FiveCalls                      0x1000c0ec0 CLSProcessRecordAllThreads + 4295577280
1  FiveCalls                      0x1000c0ec0 CLSProcessRecordAllThreads + 4295577280
2  FiveCalls                      0x1000c0d7c CLSProcessRecordAllThreads + 4295576956
3  FiveCalls                      0x1000b152c CLSHandler + 4295513388
4  FiveCalls                      0x1000bef84 __CLSExceptionRecord_block_invoke + 4295569284
5  libdispatch.dylib              0x18ec321bc _dispatch_client_callout + 16
6  libdispatch.dylib              0x18ec3f7f0 _dispatch_barrier_sync_f_invoke + 84
7  FiveCalls                      0x1000bea28 CLSExceptionRecord + 4295567912
8  FiveCalls                      0x1000be85c CLSExceptionRecordNSException + 4295567452
9  FiveCalls                      0x1000be47c CLSTerminateHandler() + 4295566460
10 libc++abi.dylib                0x18e7cf66c std::__terminate(void (*)()) + 16
11 libc++abi.dylib                0x18e7cef84 __cxxabiv1::exception_cleanup_func(_Unwind_Reason_Code, _Unwind_Exception*) + 134
12 libobjc.A.dylib                0x18e7e0690 _objc_exception_destructor(void*) + 362
13 CoreFoundation                 0x18fda908c +[NSException raise:format:] + 102
14 Foundation                     0x19086102c -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 112
15 UIKit                          0x19612fb4c -[UITableViewRowData _assertValidIndexPath:allowEmptySection:] + 904
16 UIKit                          0x19612fbc4 -[UITableViewRowData ensureHeightsFaultedInForIndexPath:availHeight:edgeInset:scrollPosition:] + 84
17 UIKit                          0x195e7b4f8 -[UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:] + 1792
18 UIKit                          0x195e7acb0 -[UITableView scrollToRowAtIndexPath:atScrollPosition:animated:] + 52
19 FiveCalls                      0x100095818 IssueDetailViewController.scrollToBottom() -> () (IssueDetailViewController.swift)
20 FiveCalls                      0x100095874 @objc IssueDetailViewController.scrollToBottom() -> () (IssueDetailViewController.swift)
21 FiveCalls                      0x100097334 specialized IssueDetailViewController.(editLocationViewController(EditLocationViewController, didUpdateLocation : UserLocation) -> ()).(closure #1) (IssueDetailViewController.swift)
22 FiveCalls                      0x100096f4c partial apply for IssueDetailViewController.(editLocationViewController(EditLocationViewController, didUpdateLocation : UserLocation) -> ()).(closure #1) (IssueDetailViewController.swift)
23 libdispatch.dylib              0x18ec321fc _dispatch_call_block_and_release + 24
24 libdispatch.dylib              0x18ec321bc _dispatch_client_callout + 16
25 libdispatch.dylib              0x18ec36d68 _dispatch_main_queue_callback_4CF + 1000
26 CoreFoundation                 0x18fd56810 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
27 CoreFoundation                 0x18fd543fc __CFRunLoopRun + 1660
28 CoreFoundation                 0x18fc822b8 CFRunLoopRunSpecific + 444
29 GraphicsServices               0x191736198 GSEventRunModal + 180
30 UIKit                          0x195cc97fc -[UIApplication _run] + 684
31 UIKit                          0x195cc4534 UIApplicationMain + 208
32 FiveCalls                      0x1000728a4 main (AppDelegate.swift:14)
33 libdispatch.dylib              0x18ec655b8 (Missing)

--

Fatal Exception: NSInternalInconsistencyException
0  CoreFoundation                 0x18fda91b8 __exceptionPreprocess
1  libobjc.A.dylib                0x18e7e055c objc_exception_throw
2  CoreFoundation                 0x18fda908c +[NSException raise:format:]
3  Foundation                     0x19086102c -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:]
4  UIKit                          0x19612fb4c -[UITableViewRowData _assertValidIndexPath:allowEmptySection:]
5  UIKit                          0x19612fbc4 -[UITableViewRowData ensureHeightsFaultedInForIndexPath:availHeight:edgeInset:scrollPosition:]
6  UIKit                          0x195e7b4f8 -[UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:]
7  UIKit                          0x195e7acb0 -[UITableView scrollToRowAtIndexPath:atScrollPosition:animated:]
8  FiveCalls                      0x100095818 IssueDetailViewController.scrollToBottom() -> () (IssueDetailViewController.swift)
9  FiveCalls                      0x100095874 @objc IssueDetailViewController.scrollToBottom() -> () (IssueDetailViewController.swift)
10 FiveCalls                      0x100097334 specialized IssueDetailViewController.(editLocationViewController(EditLocationViewController, didUpdateLocation : UserLocation) -> ()).(closure #1) (IssueDetailViewController.swift)
11 FiveCalls                      0x100096f4c partial apply for IssueDetailViewController.(editLocationViewController(EditLocationViewController, didUpdateLocation : UserLocation) -> ()).(closure #1) (IssueDetailViewController.swift)
12 libdispatch.dylib              0x18ec321fc _dispatch_call_block_and_release
13 libdispatch.dylib              0x18ec321bc _dispatch_client_callout
14 libdispatch.dylib              0x18ec36d68 _dispatch_main_queue_callback_4CF
15 CoreFoundation                 0x18fd56810 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
16 CoreFoundation                 0x18fd543fc __CFRunLoopRun
17 CoreFoundation                 0x18fc822b8 CFRunLoopRunSpecific
18 GraphicsServices               0x191736198 GSEventRunModal
19 UIKit                          0x195cc97fc -[UIApplication _run]
20 UIKit                          0x195cc4534 UIApplicationMain
21 FiveCalls                      0x1000728a4 main (AppDelegate.swift:14)
22 libdispatch.dylib              0x18ec655b8 (Missing)

#0. Crashed: com.twitter.crashlytics.ios.exception
0  FiveCalls                      0x1000c0ec0 CLSProcessRecordAllThreads + 4295577280
1  FiveCalls                      0x1000c0ec0 CLSProcessRecordAllThreads + 4295577280
2  FiveCalls                      0x1000c0d7c CLSProcessRecordAllThreads + 4295576956
3  FiveCalls                      0x1000b152c CLSHandler + 4295513388
4  FiveCalls                      0x1000bef84 __CLSExceptionRecord_block_invoke + 4295569284
5  libdispatch.dylib              0x18ec321bc _dispatch_client_callout + 16
6  libdispatch.dylib              0x18ec3f7f0 _dispatch_barrier_sync_f_invoke + 84
7  FiveCalls                      0x1000bea28 CLSExceptionRecord + 4295567912
8  FiveCalls                      0x1000be85c CLSExceptionRecordNSException + 4295567452
9  FiveCalls                      0x1000be47c CLSTerminateHandler() + 4295566460
10 libc++abi.dylib                0x18e7cf66c std::__terminate(void (*)()) + 16
11 libc++abi.dylib                0x18e7cef84 __cxxabiv1::exception_cleanup_func(_Unwind_Reason_Code, _Unwind_Exception*) + 134
12 libobjc.A.dylib                0x18e7e0690 _objc_exception_destructor(void*) + 362
13 CoreFoundation                 0x18fda908c +[NSException raise:format:] + 102
14 Foundation                     0x19086102c -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 112
15 UIKit                          0x19612fb4c -[UITableViewRowData _assertValidIndexPath:allowEmptySection:] + 904
16 UIKit                          0x19612fbc4 -[UITableViewRowData ensureHeightsFaultedInForIndexPath:availHeight:edgeInset:scrollPosition:] + 84
17 UIKit                          0x195e7b4f8 -[UITableView _contentOffsetForScrollingToRowAtIndexPath:atScrollPosition:] + 1792
18 UIKit                          0x195e7acb0 -[UITableView scrollToRowAtIndexPath:atScrollPosition:animated:] + 52
19 FiveCalls                      0x100095818 IssueDetailViewController.scrollToBottom() -> () (IssueDetailViewController.swift)
20 FiveCalls                      0x100095874 @objc IssueDetailViewController.scrollToBottom() -> () (IssueDetailViewController.swift)
21 FiveCalls                      0x100097334 specialized IssueDetailViewController.(editLocationViewController(EditLocationViewController, didUpdateLocation : UserLocation) -> ()).(closure #1) (IssueDetailViewController.swift)
22 FiveCalls                      0x100096f4c partial apply for IssueDetailViewController.(editLocationViewController(EditLocationViewController, didUpdateLocation : UserLocation) -> ()).(closure #1) (IssueDetailViewController.swift)
23 libdispatch.dylib              0x18ec321fc _dispatch_call_block_and_release + 24
24 libdispatch.dylib              0x18ec321bc _dispatch_client_callout + 16
25 libdispatch.dylib              0x18ec36d68 _dispatch_main_queue_callback_4CF + 1000
26 CoreFoundation                 0x18fd56810 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
27 CoreFoundation                 0x18fd543fc __CFRunLoopRun + 1660
28 CoreFoundation                 0x18fc822b8 CFRunLoopRunSpecific + 444
29 GraphicsServices               0x191736198 GSEventRunModal + 180
30 UIKit                          0x195cc97fc -[UIApplication _run] + 684
31 UIKit                          0x195cc4534 UIApplicationMain + 208
32 FiveCalls                      0x1000728a4 main (AppDelegate.swift:14)
33 libdispatch.dylib              0x18ec655b8 (Missing)

#1. Thread
0  libsystem_kernel.dylib         0x18ed77a88 __workq_kernreturn + 8
1  libsystem_pthread.dylib        0x18ee3b344 _pthread_wqthread + 1452
2  libsystem_pthread.dylib        0x18ee3ad8c start_wqthread + 4

#2. com.apple.uikit.eventfetch-thread
0  libsystem_kernel.dylib         0x18ed59188 mach_msg_trap + 8
1  libsystem_kernel.dylib         0x18ed58ff8 mach_msg + 72
2  CoreFoundation                 0x18fd565d0 __CFRunLoopServiceMachPort + 192
3  CoreFoundation                 0x18fd541ec __CFRunLoopRun + 1132
4  CoreFoundation                 0x18fc822b8 CFRunLoopRunSpecific + 444
5  Foundation                     0x1907bf26c -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 304
6  Foundation                     0x1907dfdd0 -[NSRunLoop(NSRunLoop) runUntilDate:] + 96
7  UIKit                          0x19663dc38 -[UIEventFetcher threadMain] + 136
8  Foundation                     0x1908bce68 __NSThread__start__ + 1024
9  libsystem_pthread.dylib        0x18ee3d850 <redacted> + 240
10 libsystem_pthread.dylib        0x18ee3d760 _pthread_start + 282
11 libsystem_pthread.dylib        0x18ee3ad94 thread_start + 4

#3. Thread
0  libsystem_kernel.dylib         0x18ed77a88 __workq_kernreturn + 8
1  libsystem_pthread.dylib        0x18ee3b344 _pthread_wqthread + 1452
2  libsystem_pthread.dylib        0x18ee3ad8c start_wqthread + 4

#4. com.twitter.crashlytics.ios.MachExceptionServer
0  libsystem_kernel.dylib         0x18ed59188 mach_msg_trap + 8
1  libsystem_kernel.dylib         0x18ed58ff8 mach_msg + 72
2  FiveCalls                      0x1000ac38c CLSMachExceptionServer + 4295492492
3  libsystem_pthread.dylib        0x18ee3d850 <redacted> + 240
4  libsystem_pthread.dylib        0x18ee3d760 _pthread_start + 282
5  libsystem_pthread.dylib        0x18ee3ad94 thread_start + 4

#5. Thread
0  libsystem_kernel.dylib         0x18ed77a88 __workq_kernreturn + 8
1  libsystem_pthread.dylib        0x18ee3b344 _pthread_wqthread + 1452
2  libsystem_pthread.dylib        0x18ee3ad8c start_wqthread + 4

#6. Thread
0  libsystem_pthread.dylib        0x18ee3ad88 pthread_workqueue_addthreads_np + 126

#7. com.apple.NSURLConnectionLoader
0  libsystem_kernel.dylib         0x18ed59188 mach_msg_trap + 8
1  libsystem_kernel.dylib         0x18ed58ff8 mach_msg + 72
2  CoreFoundation                 0x18fd565d0 __CFRunLoopServiceMachPort + 192
3  CoreFoundation                 0x18fd541ec __CFRunLoopRun + 1132
4  CoreFoundation                 0x18fc822b8 CFRunLoopRunSpecific + 444
5  CFNetwork                      0x190487a70 <redacted> + 336
6  Foundation                     0x1908bce68 __NSThread__start__ + 1024
7  libsystem_pthread.dylib        0x18ee3d850 <redacted> + 240
8  libsystem_pthread.dylib        0x18ee3d760 _pthread_start + 282
9  libsystem_pthread.dylib        0x18ee3ad94 thread_start + 4


[email protected] on build #108: When leaving call feedback on iPad, it's not possible to…

Feedback from [email protected] : When leaving call feedback on iPad, it's not possible to navigate back to the issue detail (in order to choose a different candidate. Also, when you finish making your calls, the issue list isn't updated to reflect the check mark.

CreatedMon Feb 20 2017 02:09:09 GMT+0000 (UTC)
CFBundleShortVersion1.1
CFBundleVersion11
App uptime142.9053
Build108
Device typeiPad Air 2
Device nameBen’s iPad
Screen size1024
Screen size1024px by 768px
Battery54% Unplugged
Memory free44 MB / 1588 MB
Disk free9344 MB / 116397 MB
Network IP192.168.1.78

Link to buddybuild feedback from build 108

Beta Feedback

Some feedback from the slack channel:

  • "What's important to you?" header on issues list
  • On the issue page before location is set, don't show the "Call your representatives" header. Consider using the ghost text from the location box on the web in place of "Set location".
  • The share issue button in the top right was no op for me.
  • Left aligning the issue title will look better with this layout
  • The background color for the reps under the choose a rep header is pretty dark, consider using the same background that is behind the header or that you're using in the list view

Dynamic height rows seems to cause the issues list to shuffle

I noticed that once we supported dynamic height on the issues list, the table reshuffles strangely when scrolling.

Another (probably related) thing is this occasionally causes our labels to no longer wrap & cause their cell to increase in height, instead reverting to truncating with ellipses ('...').

Extract strings in preparation for localization

Currently the app uses hard-coded strings. We're prepping to localize everything into some other languages. The first step is to extract the strings in the app into strings files so we can hand these off to translators.

Fully Transparent Header on Issues List

Not sure why or how this happened, but @nickoneill reported this.

pasted image at 2017_02_09 10_37 pm 1

I thought it was maybe Transparency turned off in Accessibility but that wasn't it. Hopefully someone has seen similar and can help reproduce this one.

Split Congressional District alert with Use My Location option

I'm getting the Split Congressional District alert even when I use the Core Location option in lieu of entering my Zip code. If there's something about my location that makes the lookup unreliable, perhaps the dialog should be reworded?

I can see about collecting some additional info later for you folks.

Save location by GPS

Tap Edit Location, tap "Use My Location".

  • prompt to use location w/ CLLocationManager
  • on callback, use lat/lng and reverse geocode to get address
  • save these values to UserDefaults, preferrably under a single key w/ a dictionary value
  • clear any saved zip code
  • trigger a refresh (via notification or callback) when upon change
  • IssuesViewController reads the saved location / address and passes to the fetch operation when loading issues.
  • location button title should be changed to match the city from the saved location

Fastlane setup

Thinking ahead, I'd like to get fastlane setup to automatically manage some of the tedium around distribution.

For now, a task to build & submit to Testflight would be a good first step.

Reporting outcome of a call

HTTP POST to /report including

  • result (must be one of 'unavailable', 'vm', 'contacted')
  • contact id
  • issue id

Then save to local persistence (a plist, or maybe Pantry? 😄 ) the outcome of this issue.

Issues that have a saved result show up w/ a green checkmark on the issues list. This can be done in IssuesViewController by setting the isChecked flag on IssueCell.

Weird image caching issue

Pretty sure that is NOT Tammy Duckworth's picture:

screen shot 2017-02-20 at 5 31 27 am

(note: iPad isn't doing anything funky in this view, so it's doubtful this is an iPad-related bug, but not, of course, impossible.)

Show Checkmark On Call Script Screen

There is no indicator on that screen to show if you've contacted that contact or not.

One suggestion is a CheckboxView in a titleView along with Contact X of Y.

Record stats

Need to record:

  • date/time of call
  • result
  • save contact id, issue id, and number used

This will be used to provide info for a screen called "My Impact", as well as possibly serve future efforts to determine which numbers get through the most, etc.

Setup CI Server

I'd be happy to help get the build going on a CI server. Any preference on what to use? Travis or Buddy Build seem like the most likely candidates.

Messaging for first call

I'd like to add a one-time alert when the user calls to give them some quick instructions about the need to double-tap & come back so they can read the script.

First time user calls, present an alert:

We're about to place the call. When it starts dialing, turn on Speaker phone, then double tap the home button come back to this app so you can read the script.

OK, Got it | Cancel

When we press this button:

  • Save an entry in user defaults so we know not to present this alert again
  • Call the system dialer

After selecting a method of contact, further selections are ignored

You can see this with PR #69 which updates the Method of Contact buttons to reflect previous choices. If I go into a contact, select a method of contact (say, "Unavailable"), exit, and re-enter, if I select a different method, the next time I go back in, "Unavailable" is still selected.

Save location by zip code

Tap Edit Location, type a zip.

Zip code is validated (5-digits for now) and saved to UserDefaults.

  • trigger a refresh (via notification or callback) when it changes
  • IssuesViewController reads the saved and passes to the fetch operation when loading issues.
  • location button title should be changed to match the selected zip code

Change app font to Roboto

In matching the style of the website, I'd like to embed the Roboto font and use it where appropriate.

Definitely for the copy in the walkthrough, but probably for all labels, buttons, view controller titles, etc. (we can probably accomplish most of this w/ appearance proxies).

Here's a link on how to embed fonts on iOS.

Support Field Offices

The API was just updated to include field offices for contacts. It currently looks like this:

                {
                    "area": "Senate",
                    "field_offices": [
                        {
                            "city": "Central Texas",
                            "phone": "512-916-5834"
                        },
                        {
                            "city": "East Texas",
                            "phone": "903-593-5130"
                        },
                        {
                            "city": "North Texas",
                            "phone": "214-599-8749"
                        },
                        {
                            "city": "South Texas",
                            "phone": "956-686-7339"
                        },
                        {
                            "city": "South/Central Texas",
                            "phone": "210-340-2885"
                        },
                        {
                            "city": "Southeast Texas",
                            "phone": "713-718-3057"
                        }
                    ],
                    "id": "TX-TedCruz",
                    "name": "Ted Cruz",
                    "party": "Republican",
                    "phone": "202-224-5922",
                    "photoURL": "http://www.cruz.senate.gov/files/images/OfficialPortrait.jpg",
                    "reason": "This is one of your two senators",
                    "state": "TX"
                }

We need a similar mechanism for choosing which number to call on the CallScriptViewController

Load contact photos

Right now we have static images for the contacts. Need to remotely load in images for the contact cell and the CallScriptViewController

Add phone numbers for local offices

I often call my representatives' local offices for a few reasons:

  • They're open later locally due to the time zone difference.
  • Sometimes when the DC office voice mailbox is full, the local office's mailbox will not be (and vice versa).

It would be nice if 5Calls would show all office numbers for each representative, not just the DC offices. Not sure if the API being used provides this info.

[email protected] on build #108: This button doesn't feel like a button (no tint color, no…

Feedback from [email protected] : This button doesn't feel like a button (no tint color, no change in color when tapped)

CreatedMon Feb 20 2017 02:34:38 GMT+0000 (UTC)
CFBundleShortVersion1.1
CFBundleVersion11
App uptime1671.638
Build108
Device typeiPad Air 2
Device nameBen’s iPad
Screen size1024
Screen size1024px by 768px
Battery49% Unplugged
Memory free55 MB / 1558 MB
Disk free9338 MB / 116397 MB
Network IP192.168.1.78

Link to buddybuild feedback from build 108

[email protected] on build #108: Possible to have blur w/ this header in split view?

Feedback from [email protected] : Possible to have blur w/ this header in split view?

CreatedMon Feb 20 2017 02:12:00 GMT+0000 (UTC)
CFBundleShortVersion1.1
CFBundleVersion11
App uptime317.3621
Build108
Device typeiPad Air 2
Device nameBen’s iPad
Screen size1024
Screen size1024px by 768px
Battery53% Unplugged
Memory free60 MB / 1586 MB
Disk free9341 MB / 116397 MB
Network IP192.168.1.78

Link to buddybuild feedback from build 108

Smaller Screen Issues

  • Welcome Screens don't fully fit on an iPhone 4S and SE
  • Location Screen doesn't fit an iPhone 4S

simulator screen shot feb 10 2017 9 14 44 am
simulator screen shot feb 10 2017 9 12 01 am
pasted image at 2017_02_09 10_37 pm

README

Need README with:

  • link to main site
  • development dependencies
  • setup instructions
  • contribution guidelines
  • license

My Impact

Use the stats we're collecting from ContactLogs to build the My Impact screen (launched via the footer button).

Here's the Android equivalent:

Show Representatives when present on Issue Detail Screen

Data looks like this:

{
  "id":"TX-JohnCornyn",
  "name":"John Cornyn",
  "phone":"202-224-2934",
  "photoURL":"http://bioguide.congress.gov/bioguide/photo/C/C001056.jpg",
  "party":"Republican",
  "state":"TX",
  "reason":"This is one of your two senators",
  "area":"Senate"
}

This is already parsed into the Contact struct.

Show the contact information for the first contact (or random?) as well as the issue script. Looks like this:

Buttons to report the outcome of the call:

  • Unavailable
  • Left Voicemail
  • Made Contact
  • Skip

Settings / About screen

Want to include:

  • 5calls organizers / creators
  • 5calls iOS contributors
  • any open source projects used
  • feedback link
  • rate app link

Not quite sure where to surface the button for this, maybe a tiny (i) button in the header? Open to suggestions.

Issue Detail doesn't always show Contacts after setting Zipcode

On a fresh install sometimes the Issues Detail screen doesn't show the contacts after setting the location from the Issues Detail screen.

I don't think this bug needs to be fixed for 1.0 as I can't reproduce it reliably.

Partial Steps To Reproduce:

  1. Delete app and install fresh
  2. Launch app and get through tutorial
  3. Open random issue
  4. Scroll to bottom to touch the "Set your location..." red text to open the Location Edit screen
  5. Enter a zip code and hit SUBMIT

Instead of your Reps you'll sometimes see the "Set your location..." text again.

To get this I did Steps 3 & 4 a few times but exiting the location screen before actually entering it and got it to reproduce. May be related to that sequence.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.