Skip to content

[$125] Unmask Close Account dialog in FullStory #58223

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

Open
puneetlath opened this issue Mar 11, 2025 · 53 comments
Open

[$125] Unmask Close Account dialog in FullStory #58223

puneetlath opened this issue Mar 11, 2025 · 53 comments
Assignees
Labels
Bug Something is broken. Auto assigns a BugZero manager. Daily KSv2 External Added to denote the issue can be worked on by a contributor

Comments

@puneetlath
Copy link
Contributor

puneetlath commented Mar 11, 2025

Currently the fields in the Close Account dialog are masked when viewed in FullStory. Let's unmask them to make it easier to see why users are closing their accounts when they do.

Image

Slack convo: https://expensify.slack.com/archives/C07NZ8B1VTQ/p1741617150467889

Issue OwnerCurrent Issue Owner: @
Upwork Automation - Do Not Edit
  • Upwork Job URL: https://www.upwork.com/jobs/~021901654478018442389
  • Upwork Job ID: 1901654478018442389
  • Last Price Increase: 2025-03-17
Issue OwnerCurrent Issue Owner: @abekkala
@puneetlath puneetlath added Bug Something is broken. Auto assigns a BugZero manager. External Added to denote the issue can be worked on by a contributor labels Mar 11, 2025
@melvin-bot melvin-bot bot added the Help Wanted Apply this label when an issue is open to proposals by contributors label Mar 11, 2025
@puneetlath puneetlath self-assigned this Mar 11, 2025
Copy link

melvin-bot bot commented Mar 11, 2025

Triggered auto assignment to Contributor-plus team member for initial proposal review - @akinwale (External)

Copy link

melvin-bot bot commented Mar 11, 2025

Triggered auto assignment to @joekaufmanexpensify (Bug), see https://stackoverflow.com/c/expensify/questions/14418 for more details. Please add this bug to a GH project, as outlined in the SO.

@puneetlath puneetlath changed the title Unmask Close Account dialog in FullStory [$125] Unmask Close Account dialog in FullStory Mar 11, 2025
Copy link

melvin-bot bot commented Mar 11, 2025

⚠️ Could not update price automatically because there is no linked Upwork Job ID. The BZ team member will need to update the price manually in Upwork.

@mkzie2
Copy link
Contributor

mkzie2 commented Mar 11, 2025

Proposal

Please re-state the problem that we are trying to solve in this issue.

Unmask Close Account dialog in FullStory

What is the root cause of that problem?

Feature request

What changes do you think we should make in order to solve the problem?

Add these:

fsClass={CONST.FULL_STORY.UNMASK}
testID={CONST.FULL_STORY.UNMASK}

To CloseAccountPage here.

What specific scenarios should we cover in automated tests to prevent reintroducing this issue in the future?

None

What alternative solutions did you explore? (Optional)

None

Copy link
Contributor

⚠️ Thanks for your proposal. Please update it to follow the proposal template, as proposals are only reviewed if they follow that format (note the mandatory sections).

@akinwale
Copy link
Contributor

@mkzie2 Could you post a video demonstrating your solution?

@nyomanjyotisa
Copy link
Contributor

nyomanjyotisa commented Mar 11, 2025

🚨 Edited by proposal-police: This proposal was edited at 2025-03-11 16:00:49 UTC.

Proposal

Please re-state the problem that we are trying to solve in this issue.

Unmask Close Account dialog in FullStory

What is the root cause of that problem?

Update request

What changes do you think we should make in order to solve the problem?

In my opinion we should keep the second input field and its text/label masked since it contains user email/default contact method

Image

So, only unmask the first input field here

<InputWrapper
InputComponent={TextInput}
inputID={INPUT_IDS.REASON_FOR_LEAVING}
autoGrowHeight
maxAutoGrowHeight={variables.textInputAutoGrowMaxHeight}
label={translate('closeAccountPage.enterMessageHere')}
aria-label={translate('closeAccountPage.enterMessageHere')}
role={CONST.ROLE.PRESENTATION}
containerStyles={[styles.mt5]}
/>

<InputWrapper
    ...
    fsClass={CONST.FULL_STORY.UNMASK}
    testID={CONST.FULL_STORY.UNMASK}
/>

and add useLayoutEffect(parseFSAttributes, []); on CloseAccountPage

Also unmask the first input label/text as well if needed here

What specific scenarios should we cover in automated tests to prevent reintroducing this issue in the future?

None

What alternative solutions did you explore? (Optional)

@mkzie2
Copy link
Contributor

mkzie2 commented Mar 11, 2025

@akinwale AFAIK, these FullStory unmask issues are labelled Internal QA as we don't have access to FullStory. Only internal engineers can test it.

@Shahidullah-Muffakir
Copy link
Contributor

Shahidullah-Muffakir commented Mar 11, 2025

🚨 Edited by proposal-police: This proposal was edited at 2025-03-11 16:03:17 UTC.

Proposal

Please re-state the problem that we are trying to solve in this issue.

Unmask Close Account dialog in FullStory

What is the root cause of that problem?

The fsClass is not used here:

<View style={[styles.flexGrow1]}>

What changes do you think we should make in order to solve the problem?

We should add

   fsClass={CONST.FULL_STORY.UNMASK}
    testID={CONST.FULL_STORY.UNMASK}

to the wrapper <View> that contains the input fields Here This will unmask all its chilren, no need for separately unmasking. Additionally, we should call useLayoutEffect(parseFSAttributes, []) to make sure FullStory processes these attributes correctly at runtime.
the same way it is done here:

// Parse Fullstory attributes on initial render
useLayoutEffect(parseFSAttributes, []);

What specific scenarios should we cover in automated tests to prevent reintroducing this issue in the future?

For the testing, we will mock the Fullstory library dependency the same way it is done here:

jest.mock('@libs/Fullstory', () => ({
default: {
consentAndIdentify: jest.fn(),
},
parseFSAttributes: jest.fn(),
}));

What alternative solutions did you explore? (Optional)

Copy link
Contributor

⚠️ @Shahidullah-Muffakir Thanks for your proposal. Please update it to follow the proposal template, as proposals are only reviewed if they follow that format (note the mandatory sections).

@akinwale
Copy link
Contributor

@Shahidullah-Muffakir's proposal offers a complete solution here.

🎀👀🎀 C+ reviewed.

Copy link

melvin-bot bot commented Mar 12, 2025

Current assignee @puneetlath is eligible for the choreEngineerContributorManagement assigner, not assigning anyone new.

@melvin-bot melvin-bot bot removed the Help Wanted Apply this label when an issue is open to proposals by contributors label Mar 12, 2025
@melvin-bot melvin-bot bot added Reviewing Has a PR in review Weekly KSv2 and removed Daily KSv2 labels Mar 12, 2025
@Shahidullah-Muffakir
Copy link
Contributor

@akinwale PR is ready for your review.

@melvin-bot melvin-bot bot added Weekly KSv2 Awaiting Payment Auto-added when associated PR is deployed to production and removed Weekly KSv2 labels Mar 17, 2025
@joekaufmanexpensify
Copy link
Contributor

@akinwale please request payment at your earliest convenience. Closing as this is otherwise all set. Thanks everyone!

@JmillsExpensify
Copy link

$125 approved for @akinwale

@arosiclair
Copy link
Contributor

@puneetlath just a heads up, it doesn't look like the PR for this worked: #55512 (comment)

@puneetlath puneetlath reopened this Apr 23, 2025
@puneetlath
Copy link
Contributor Author

@Shahidullah-Muffakir @akinwale would you be able to look into that?

@Shahidullah-Muffakir
Copy link
Contributor

@Shahidullah-Muffakir @akinwale would you be able to look into that?

It's strange, the fs-class="fs-unmask" is correctly attached to the textarea on the Close Account page, but it's still showing as masked in FullStory. I'll check it out and share an update soon.

Image

@joekaufmanexpensify
Copy link
Contributor

@Shahidullah-Muffakir have you had a chance to look into this more?

@Shahidullah-Muffakir
Copy link
Contributor

@Shahidullah-Muffakir have you had a chance to look into this more?

I haven’t found the exact cause yet. since we use the same fsClass="fs-unmask" in other parts of the app, does it work there? that might help us figure this out.

according to the FullStory docs for React Native, we’re correctly using fsClass="fs-unmask". I’m wondering if this might be something specific to how it runs in the web environment.

@joekaufmanexpensify
Copy link
Contributor

I haven’t found the exact cause yet. since we use the same fsClass="fs-unmask" in other parts of the app, does it work there? that might help us figure this out.

Is there somewhere else specific we use it? Happy to try and see if i can determine this.

@joekaufmanexpensify joekaufmanexpensify changed the title [Due for payment 2025-03-28] [$125] Unmask Close Account dialog in FullStory [$125] Unmask Close Account dialog in FullStory Apr 29, 2025
@Shahidullah-Muffakir
Copy link
Contributor

Is there somewhere else specific we use it? Happy to try and see if i can determine this.

Yes, it's used in a few places, but not on any TextInput components. It's mainly used to unmask text.

for ex, here:

fsClass={CONST.FULL_STORY.UNMASK}

It's used to unmask the educational tooltip. Maybe we can test if it works there.

that said, our current case is a bit different, we're trying to unmask a textarea, so the behavior might not be exactly the same.

also, one thing I’m wondering, could it be that TextInputs are globally masked from the FullStory settings? Is that possible?

@joekaufmanexpensify
Copy link
Contributor

Hmm, I am not super familiar with how FullStory masking works. Maybe @puneetlath knows, I have seen him involved in some prior discussions on it. Otherwise, I can try to loop someone else in to try and figure out the TextInputs thing.

@joekaufmanexpensify
Copy link
Contributor

Started discussion

@joekaufmanexpensify
Copy link
Contributor

Still discussing in slack how to proceed.

@joekaufmanexpensify
Copy link
Contributor

Reached out to fullstory support

@joekaufmanexpensify
Copy link
Contributor

I heard back from FullStory. We seem to have a path forward.

@joekaufmanexpensify
Copy link
Contributor

Working on unmasking text area in FS settings.

@joekaufmanexpensify
Copy link
Contributor

Bumped the slack thread

@joekaufmanexpensify
Copy link
Contributor

Still discussing in slack

@joekaufmanexpensify
Copy link
Contributor

Bumped slack thread

@joekaufmanexpensify joekaufmanexpensify removed Awaiting Payment Auto-added when associated PR is deployed to production Reviewing Has a PR in review labels May 20, 2025
@joekaufmanexpensify joekaufmanexpensify removed their assignment May 20, 2025
@joekaufmanexpensify joekaufmanexpensify added Bug Something is broken. Auto assigns a BugZero manager. and removed Bug Something is broken. Auto assigns a BugZero manager. labels May 20, 2025
Copy link

melvin-bot bot commented May 20, 2025

Triggered auto assignment to @abekkala (Bug), see https://stackoverflow.com/c/expensify/questions/14418 for more details. Please add this bug to a GH project, as outlined in the SO.

@joekaufmanexpensify
Copy link
Contributor

As an FYI, I'm going to be OOO from May 21st - May 30th. Assigning another BZ during that time to help push this forward. Here is a summary:

  • We tried to unmask the close account dialog in FullStory with this PR.
  • It didn't work. So we emailed fullstory who advised we need to do this by setting a privacy rule.
  • We tried that and it also didn't work.
  • We are investigating further here whether there is a path forward to do this.

Next step is to keep bumping that thread above to move this forward. I will take it back over if it's still open when I get back!

@joekaufmanexpensify joekaufmanexpensify self-assigned this May 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Something is broken. Auto assigns a BugZero manager. Daily KSv2 External Added to denote the issue can be worked on by a contributor
Projects
None yet
Development

No branches or pull requests

9 participants