Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[$250] Give users on a domain the ability to join their colleagues when the company is already using Expensify #48189

Open
anmurali opened this issue Aug 28, 2024 · 149 comments
Assignees
Labels
Awaiting Payment Auto-added when associated PR is deployed to production Daily KSv2 Engineering External Added to denote the issue can be worked on by a contributor NewFeature Something to build that is a new item.

Comments

@anmurali
Copy link

anmurali commented Aug 28, 2024

Proposal: Allow a private domain sign up, whose company is already using Expensify to request to join relevant workspace(s)

Problem: One of the cool things about Expensify is that anyone can sign up without their company's permission or invitation. But this means when an employee signs up independently they are not aware their company is already using Expensify and so end up creating their own workspaces in error, causing a lot of confusion for themselves and their company

Solution: Mirror Classic when it comes to an employee that signs up with a private domain email of a company that already has one or more workspaces. It goes like this:

  1. Sign-up with an email address on a private domain that has existing workspace owners
  2. We ask for their first name/last name (Ice breaker)
  3. Next, we show a step that:
  • Let’s them know people on derp.com are already using Expensify.
  • We’ve sent a magic code to validate their account so they can join them
  • An input for said magic code to validate the account
  • An option to skip and move on with onboarding as normal if they prefer
  1. If they validate the account, the next step shown is a list of all the workspaces owned by members of their private domain.
  • The CTA is Ask to join or Join based on the workspace JSON's automaticJoiningEnabled parameter being set to false or true respectivey
  • They can only pick one workspace in the list
  1. If they click on the CTA we do one of two things depending on if the workspace pre-approves join requests (Join), or an admin needs to accept (Ask to join):
  • Pre-approval not required:
    • Add them to the workspace
    • Drop them in the LHN
    • populate their onboarding/ConciergeDM with the invited member set of tasks
  • Pre-approval required:
    • Drop them in the LHN to continue exploring the product
    • Send the actionable message in the #admins room to accept or decline (just like policy join links that require approval)
    • On the workspaces page, show the workspace row they’re pending to be accepted to join with the “[Requested]” badge (just like a policy join request that needs to be approved)
    • If they select New Workspace in the + menu or Workspace page, have a warning just to let them know we’re waiting on their colleagues to still accept the request to join
    • Once accepted, they’ll get an email as they’re added to the workspace and we populate their onboarding/ConciergeDM with the invited member set of tasks.
Upwork Automation - Do Not Edit
  • Upwork Job URL: https://www.upwork.com/jobs/~021832414536636098293
  • Upwork Job ID: 1832414536636098293
  • Last Price Increase: 2024-10-11
Issue OwnerCurrent Issue Owner: @
Issue OwnerCurrent Issue Owner: @allroundexperts
Copy link

melvin-bot bot commented Aug 29, 2024

Current assignee @dubielzyk-expensify is eligible for the Design assigner, not assigning anyone new.

@dubielzyk-expensify
Copy link
Contributor

dubielzyk-expensify commented Aug 29, 2024

Here's the overall flow:

CleanShot 2024-08-29 at 14 46 54@2x

Included workspace member count and owner after feedback in Slack. Btw, if there's no existing workspace that they can join, we continue with the intent picker like normal onboarding

cc @Expensify/design for thoughts and feelz

@shawnborton
Copy link
Contributor

Looks solid to me!

@shawnborton
Copy link
Contributor

How does this look on desktop?

@dannymcclain
Copy link
Contributor

Looks solid to me!

Same!

How does this look on desktop?

Also curious 🙃 👀

@dubielzyk-expensify
Copy link
Contributor

Here's the desktop mocks:

image
image

Do you think it's better if I don't stretch the validation code to be full-width with the modal?
image

@trjExpensify
Copy link
Contributor

I like the full width version, personally! ❤️

@shawnborton
Copy link
Contributor

Yeah, the full width does look nice. Thanks for the desktop mocks, they check out nicely ✅

@dannymcclain
Copy link
Contributor

Agree! Stretch it baby! Desktop mocks looking good. 🫶

@dubielzyk-expensify
Copy link
Contributor

The jury has spoken. Final Figma files can be found here: https://www.figma.com/design/ir27daDKHaB1g4iZCT22K5/Onboarding-v2?node-id=7147-9183

@anmurali
Copy link
Author

anmurali commented Sep 4, 2024

@trjExpensify - can this be built by the contributor or do we need BE code? Curious for a second set of eyes. Asking you as you wrote down the steps in the solution

@trjExpensify
Copy link
Contributor

I think this is mostly FE, but we might need some BE work for the "Select a workspace" page to get that list of accessibleDomainPolicies - I'm not quite sure if we have that available to NewDot.

@luacmartins & @mountiny we built the request to join stuff in simplified collect with the Share policyJoinLink a while back, so the #admins message to accept or decline (if pre-approval is required) should be in place and usable here already, right?

@luacmartins
Copy link
Contributor

Yes, we have the system message in #admins when users try to join via the link
Screenshot 2024-09-05 at 8 59 07 AM

@trjExpensify
Copy link
Contributor

Cool, so should be reusable to call that request to join from here when needed with Ask to join:

image

but we might need some BE work for the "Select a workspace" page to get that list of accessibleDomainPolicies - I'm not quite sure if we have that available to NewDot

Do you have any idea if we'd have a list of accessibleDomainPolicies available in NewDot or if that's going to need BE work here?

@luacmartins
Copy link
Contributor

Do you have any idea if we'd have a list of accessibleDomainPolicies available in NewDot or if that's going to need BE work here?

AFAIK we don't have this data in NewDot yet, so we'd need to fetch it when we open that page.

@trjExpensify
Copy link
Contributor

Kewl, so we do need BE here then yes?

@luacmartins
Copy link
Contributor

yes

@mountiny
Copy link
Contributor

mountiny commented Sep 6, 2024

Yeah, agreed we will need to fetch that; also, somehow, indicate which one is "Join now" and which one is "Ask to join". couple questions:

  1. How do the "Join Now" and "Ask to join" changes when you click on them?
  2. If user clicks skip for now, where will they access this modal/ list of workspaces to join with buttons later in the product?

@trjExpensify
Copy link
Contributor

trjExpensify commented Sep 6, 2024

How do the "Join Now" and "Ask to join" changes when you click on them?

Join now = workspace doesn't require approval to join
Ask to join = workspace needs admin approval to join

That's the distinction between the two buttons, so I assume that's something on the policy object we store for use with policy join links.

As for what happens when you click them, that's outlined in the OP in step 5. Let me know if you have any qs on that!

If user clicks skip for now, where will they access this modal/ list of workspaces to join with buttons later in the product?

If we're mirroring the Inbox on OldDot, they don't. So maybe "Skip" is better than "Skip for now" which implies you can get back to it. We could look at something on the workspaces page with a list of available workspaces to join instead of the empty state when applicable, but I'm also fine to descope that to start and keep it to this one-time onboarding modal flow.

@anmurali
Copy link
Author

anmurali commented Sep 7, 2024

That's the distinction between the two buttons, so I assume that's something on the policy object we store for use with policy join links.

I have clarified the exact workspace setting in the original description!

@anmurali
Copy link
Author

anmurali commented Sep 7, 2024

Final mockuops

Mobile - Employee
image

Web - Employee
image

Actionable whisper in # admins (Exists)

image

@parasharrajat
Copy link
Member

I noticed a issue on main, the onboarding modal does not move to next step from personal details step when login with a private domain user. I believe it is temporary as we are going to create a new PR soon. Posted for tracking...

@allroundexperts How soon can we get the next PR? Are we waiting on the backend?

@melvin-bot melvin-bot bot added Weekly KSv2 and removed Daily KSv2 labels Dec 19, 2024
@allroundexperts
Copy link
Contributor

@allroundexperts How soon can we get the next PR? Are we waiting on the backend?

Waiting for the issues to be created.

@allroundexperts
Copy link
Contributor

I noticed a issue on main, the onboarding modal does not move to next step from personal details step when login with a private domain user. I believe it is temporary as we are going to create a new PR soon. Posted for tracking...

Fixed it here

@parasharrajat
Copy link
Member

parasharrajat commented Dec 19, 2024

@allroundexperts We can create the PR on this issue itself and increase the job price here.. cc: @isabelastisser

This #48189 (comment) can still be other issues where other contributors can work.

@allroundexperts
Copy link
Contributor

@marcaaron Are the changes you mentioned here completed?

Copy link

melvin-bot bot commented Dec 19, 2024

⚠️ Looks like this issue was linked to a Deploy Blocker here

If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.

If a regression has occurred and you are the assigned CM follow the instructions here.

If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.

@marcaaron
Copy link
Contributor

@allroundexperts Still in review, but ready soon!

@melvin-bot melvin-bot bot added Weekly KSv2 Awaiting Payment Auto-added when associated PR is deployed to production and removed Weekly KSv2 labels Dec 23, 2024
@melvin-bot melvin-bot bot changed the title [$250] Give users on a domain the ability to join their colleagues when the company is already using Expensify [HOLD for payment 2024-12-30] [$250] Give users on a domain the ability to join their colleagues when the company is already using Expensify Dec 23, 2024
Copy link

melvin-bot bot commented Dec 23, 2024

Reviewing label has been removed, please complete the "BugZero Checklist".

@melvin-bot melvin-bot bot removed the Reviewing Has a PR in review label Dec 23, 2024
Copy link

melvin-bot bot commented Dec 23, 2024

The solution for this issue has been 🚀 deployed to production 🚀 in version 9.0.77-6 and is now subject to a 7-day regression period 📆. Here is the list of pull requests that resolve this issue:

If no regressions arise, payment will be issued on 2024-12-30. 🎊

For reference, here are some details about the assignees on this issue:

Copy link

melvin-bot bot commented Dec 23, 2024

BugZero Checklist: The PR adding this new feature has been merged! The following checklist (instructions) will need to be completed before the issue can be closed:

Copy link

melvin-bot bot commented Dec 30, 2024

Payment Summary

Upwork Job

BugZero Checklist (@isabelastisser)

  • I have verified the correct assignees and roles are listed above and updated the neccesary manual offers
  • I have verified that there are no duplicate or incorrect contracts on Upwork for this job (https://www.upwork.com/ab/applicants/1832414536636098293/hired)
  • I have paid out the Upwork contracts or cancelled the ones that are incorrect
  • I have verified the payment summary above is correct

@marcaaron
Copy link
Contributor

@allroundexperts the changes are on production now!

@marcaaron
Copy link
Contributor

We can create one more PR and then this should be ready to close once deployed. I am going OOO for some time so we will likely need an internal engineer to take this one over.

@marcaaron
Copy link
Contributor

@isabelastisser I think we ignore the above comment until the final PR is merged. So, taking this off HOLD.

@marcaaron marcaaron changed the title [HOLD for payment 2024-12-30] [$250] Give users on a domain the ability to join their colleagues when the company is already using Expensify [$250] Give users on a domain the ability to join their colleagues when the company is already using Expensify Dec 31, 2024
@parasharrajat
Copy link
Member

@allroundexperts Please ping me when PR is ready. Thanks.

@anmurali
Copy link
Author

Then we can create a final PR to check hasAccessibleDomainPolicies instead of looking at whether the account is on a private domain.

Is this the final PR that @allroundexperts is working on?

@parasharrajat
Copy link
Member

Yeah, it is supposed to be the last which enables the private domain flow for users with tweaks as suggested above.

@allroundexperts
Copy link
Contributor

@allroundexperts Please ping me when PR is ready. Thanks.

It will be ready on the weekend. I am out of office today and tomorrow.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Awaiting Payment Auto-added when associated PR is deployed to production Daily KSv2 Engineering External Added to denote the issue can be worked on by a contributor NewFeature Something to build that is a new item.
Projects
Development

No branches or pull requests