letters-organizations-client's People
letters-organizations-client's Issues
Account Page
- Number of Volunteers
- Letters Sent
- Newsletters Sent
- Unpaid Balance
[Backend] Represent "legal" orgs on our database
- Create migration adding "type" to orgs model: "legal" | "regular"
- Default all other organizations "regular"
- Turn PLAP into a "legal" after deploy (ask Gabe or Jesse for help with this)
[API Request Feedback] Show feedback to users once we're done processing large API requests
- When users upload their contacts, they want to see how many contacts were uploaded successfully and how many failed (TOAST)
- When the admin sends a newsletter, they want to see how many letters were sent successfully and how many failed (TOAST)
[Newsletter] Add an "invisible" status column to the Newsletter table
Current Behavior
No feedback is shown.
Related to #41
Expected Behavior
- Add empty string column (we don't wanna name it as this is more of an "edge case" column) at the end of the table
- If the newsletter "status" is "error", display an error badge using Bootstrap's
Integrate Contacts page
- Load org contacts
- Load tags
[Contact] Admins and volunteers can add notes to the incarcerated contact
- When admin is on the Contact Details page, they can add a note to the contact's profile so they can keep track of logs/small comments / etc
- Would need to add an optional "notes" blurb to contact
Volunteers page fixes
- Fix how letters are marked as 'delivered'
- Add buttons/toggles for removing volunteers and changing roles
- Integrate remove volunteer/change role
[Edit Contacts] Once you create a tag, it cannot be automatically added to the contacts you're editing
Expected Behavior
Current Behavior
Possible Solution
Steps to Reproduce (for bugs)
- Create a tag on the Edit Tags flow
- Try to update
- Fail
Context
Your Environment
- Version used:
- Environment name and version (e.g. Python 3.8, MongoDB 4.2.7):
- Server type and version:
- Operating System and version:
- Link to your project:
Volunteers Page
Invite Volunteer
- Share Link
- Input Email
Volunteer Edit
- Edit Permissions
- Remove
- Add Contact
Volunteer Card
- Name
- Edit Properties
Volunteer Detail View
- Contacts
- Drafts
- Past Letters
[Legal Envelope] Add support to legal envelopes
Current Behavior
If it's a PLAP member, we always use a "confidential" legal envelope (hardcoded solution)
Depends on #27
To-Do
- When a legal org member sends a letter to an individual contact, they want the option to use a custom envelope
[Tags] Complex Contact Selectors
- And Or support
- When admins are sending a newsletter, they want to specify complex logical operations between tags
- When admins are searching contacts, they want to specify complex logical operations between tags
[Newsletter] Add support to templates
- When users are about to upload a PDF, they can pick from a gallery of previously uploaded templates that they can frequently use
- When users are on the templates page, they want to be able to add and delete existing templates
[ENG] Support pagination to contact page
Context
Right now, we only display the 50 first results. We don't have any pagination logic :(
Given that it will take a while for orgs to onboard more than 50 volunteers / send more than 50 newsletters/ for a contact to receive more than 50 letters, we can just focus on adding pagination to the contact page (which will very quickly have more than 50 contacts)
To-Do
- When users scroll to the bottom, we want to issue another request to fetch the next page
- You'll probably need to add a page number to the redux store
- Once users hit the bottom of the page, we want to show a spinner and issue the fetch request, passing in the page we are requesting
Displaying information about letters' states
Expected Behavior
Lob has 4 different states for letters that we have requested to be sent:
- In processing
- In transit
- Delivered
- Returned
Each of these states is tracked on the letters database & available via the letters api.
Newsletters table should have a column for each of the 4 states. Volunteers' letters window should have a column for In processing, In Transit, and Delivered.
Current Behavior
Volunteers only has a column for "In Transit" and "Delivered" - this leads to confusion for our orgs users - who see letters disappear for a few days while they are "In processing" before being put into transit. It also makes it impossible for these users to distinguish between a letter that is in processing and one that has failed to send.
Newsletters has a column for each state except for "In processing" - again this results in confusion as letters appear to vanish for a few days before they are sent and makes it impossible to distinguish between letters that are in processing and ones that have failed.
Possible Solution
Steps to Reproduce (for bugs)
Context
When Adam had to send 1700 letters for the Maine voting campaign there were a few cases where some, but not all letters were sent. This led to some confusion around how many had been processed - which we were only able to determine by going into the Lob console - something that our orgs users would not be able to do if they encounter the same issue.
Some live usability testing with Defy ventures indicated that their dashboard manager was unable to determine where letters went for a few days while they were "in processing" making them look as if they had disappeared.
Your Environment
- Version used:
- Environment name and version (e.g. Python 3.8, MongoDB 4.2.7):
- Server type and version:
- Operating System and version:
- Link to your project:
Integrate to API
- Authentication Route
- Volunteers Endpoints
- Newsletter Endpoints
[Contact] Tagging Existing Contacts
- When users are on the contacts page, they can select existing contacts so that they can perform key actions
- When users select contact(s), they can add or remove tags
- When users select contact(s), they can remove the contact
Send Newsletter Flow
- Upload PDFs
- Validate PDF
- Preview PDF
- Test Letter
[Feature] Newsletter Detail
- When the user is on the newsletter history page, they want to see a breakdown of the letter status (in transit, delivered, returned to sender)
- When the user is on the newsletter page, they want to see the tracking for all letters that were sent
- When the user is on the newsletter history page, they want to see all the errors that occurred while sending the letter
- When there are errors sending the newsletter to certain recipients, the user wants to know what went wrong so that they can edit the contact information
- When there are errors sending the newsletter to certain recipients, the user wants to be able to retry sending the letter after something went wrong
[Newsletter] Newsletter Creation Enhancements
- When user is creating the newsletter, they want to choose between first class and standard
- When users change their option, they want to see how the changes will affect the total pricing
- When users are simulating the pricing, they can see a breakdown of how every factor influences pricing so that we give them full visibility over our pricing (Single-sided vs double-sided, Cost/page color or black and white, First class price vs standard mail)
- Add support to first class vs standard mail on the backend and frontend
- Add summary line on review newsletter pagee
[Multiple OrgUser] Users can be admins for multiple dashboards
[Newsletter][High-Effort] Add Support Liquid Tags
When users are editing a template, they can insert liquid tags that will be replaced by the contact’s information
E.g Hello {{ $first_name ]}
[Bug] Contact addition
Expected Behavior
When adding contacts allow users to see errors.
Current Behavior
Possible Solution
Steps to Reproduce (for bugs)
Context
Your Environment
- Version used:
- Environment name and version (e.g. Python 3.8, MongoDB 4.2.7):
- Server type and version:
- Operating System and version:
- Link to your project:
[Refactoring] Make all modals dummy components
so this is also a technical debt that we accumulated, but ideally, our components should never have to access the store.
Ideally this would be passed down from the respective container (index.ts) and all components are dummy.
Sarah took a stab but she was struggling to pass down the function from the container.
This is an example of how I did it on Connect: https://github.com/Ameelio/connect-videoconferencing-client/pull/1/files#diff-c0502a25855c2a8f255cec809139f3f2R42
Let me know what u think!
Originally posted by @gabrielsaruhashi in #44 (comment)
[Volunteer Privilege] Create dashboard for volunteers to send letters to their Ameelio contacts
- When volunteers are added to an organization, they want to be able to access the org dashboard with restricted privilege
- When volunteers sign in, they want to see a list of all contacts that were added to their accounts
- When volunteers click on one of the contacts, they can upload a pdf
[Newsletter] Filter out newsletters with status "ERROR" after 24 hours of the attempt to send
[Tag] Manage Tags
- When admins are on the account page, they can delete tags
- When admins are on the account page, they can rename tags
Integrate Newsletters page
Newsletter History
[UI] Choosing another volunteer
Expected Behavior
When we choose an individual volunteer from a list of volunteers, only the volunteer detail container should show a spinner to show the info is being loaded. The sidebar and navbar should still be visible
Current Behavior
Every time you pick a volunteer, the screen goes blank for a second before loading the information.
Code Pointers
- index.ts on Volunteer folder
- instead of wrapping the entire
with the condition (volunteers.selected_volunteer.details && ), we move it to just the content part so we display the boxes - remove the volunteers.selected_volunteer.details conditional from the sidebar. there's no reason to hide that there
[Contact][Letter] Admin can Send PDF to Single Contact
- When users select an individual org contact, they can send a PDF to a specific contact
- When users send the letter, they want it to be added to the contact's history
- Decide on how to support to PDFs. We'll probably have to create a File table with pdfs, add a 'content_type' property to the Letter model ('pdf' | 'letter'), backfill all letters so far to be 'letter' --- def worth discussign
[Refactoring] Make org on user state a non-nullable
oh is org nullable ?
we should probably change this interface in the future. Everyone that reaches this page should be affiliated with an org
Originally posted by @gabrielsaruhashi in #45 (comment)
Integrate Volunteers page
- Load volunteers
- Load selected volunteer details (letters, contacts)
- Invite by email
Integrate Upload Contacts flow
[Backend] Add support to confidential letters
To-Do
- If it's a "legal" org sending a letter, don't store the content of the letter on our database
- [STRETCH] Wipe out the Lob record (need to ask Dan Zhao if this is possible programmatically)
Newsletter Detail Page
[Volunteer] Assigning existing contact to volunteer
Current Behavior
Admins have to create a new contact with no ties to the organization
Changing this is pretty high-effort bc right now contacts has a one-to-one relationship with a user. This change would require us to create a belongs-to-many logic bc every contact could potentially belong to multiple users
Expected Behavior
When admins are on the volunteer detailed view, they want to be able to assign an org contact to the volunteer
[Refactoring] Storing token
would love to hear ur thoughts on this one as well. Think we could do some refactoring here on a fast-follow PR.
It seems to be bad code design to have to pass down token everywhere. I was researching some better ways to do I: https://michaelwashburnjr.com/2017/11/21/best-way-to-store-tokens-redux/
Would love to hear ur thoughts
Originally posted by @gabrielsaruhashi in #44 (comment)
[Contact] Contact Details Page
Current Behavior
We don't have this page yet 😿
Design
https://www.figma.com/file/eSncMj77U8wk9O0DKclgOl/Letters-for-Organizations?node-id=732%3A179
Expected Behavior
- When I click on one of the contacts, I can see logs of past letters that were sent to that contact
- When I click on one of the contacts, I can edit their personal information
- When I am on the contact page, I want to be able to delete a contact
- When I am on the contact page, I want to be able to edit their tags
Possible Solution
- Add selectedContact to the contact redux store (check out the selectedVoluteer logic on the volunteer store - it's pretty much the same)
- Add action creators, constants and redux store update
- Add API changes to the project (Jesse and Gabe can help with this)
- Add API calls to API folder
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.