Skip to content

feat: dismissible billable import alert#1771

Merged
JustARatherRidiculouslyLongUsername merged 1 commit intomasterfrom
intacct-dismissible-billable-alert
Mar 3, 2026
Merged

feat: dismissible billable import alert#1771
JustARatherRidiculouslyLongUsername merged 1 commit intomasterfrom
intacct-dismissible-billable-alert

Conversation

@JustARatherRidiculouslyLongUsername
Copy link
Contributor

@JustARatherRidiculouslyLongUsername JustARatherRidiculouslyLongUsername commented Mar 3, 2026

Description

image image

Clickup

app.clickup.com

https://fylein.slack.com/archives/C0A6AA874T1/p1772098660797649

Summary by CodeRabbit

  • New Features

    • Added close icon to dismissible info label tooltips for enhanced user control.
    • Dismissed tooltip states are now persisted, improving the user experience across sessions.
  • Style

    • Updated layout spacing for better visual presentation of closable tooltips.

@github-actions github-actions bot added the size/M Medium PR label Mar 3, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 3, 2026

Walkthrough

A tooltip dismissal feature is implemented for the import billable fields. A new flag import_billable_tooltip_dismissed is added to feature configuration, a new service method enables updating this flag, and both export and import settings components now support dismissing the tooltip via a handler that persists the dismissal state.

Changes

Cohort / File(s) Summary
Feature Configuration Model
src/app/core/models/intacct/db/feature-config.model.ts
Added import_billable_tooltip_dismissed: boolean field to FeatureConfig and new FeatureConfigUpdate type for request payloads.
Workspace Service
src/app/core/services/si/si-core/si-workspace.service.ts
Added updateFeatureConfigs() method with CacheBuster decorator to PATCH feature configs. Updated getFeatureConfigs() with cache-busting observer for consistency.
Export Settings Component
src/app/integrations/intacct/intacct-shared/intacct-export-settings/intacct-export-settings.component.*
Added handleTooltipDismiss() method and integrated close icon bindings into templates. Updated initialization to respect import_billable_tooltip_dismissed state.
Import Settings Component
src/app/integrations/intacct/intacct-shared/intacct-import-settings/intacct-import-settings.component.*
Added handleTooltipDismiss() method and integrated close icon bindings into templates. Added gating condition to show tooltip only when not previously dismissed.
Configuration Info Label Component
src/app/shared/components/configuration/configuration-info-label/configuration-info-label.component.html
Added layout spacer div (tw-grow) to position close icon properly in the template.

Sequence Diagram

sequenceDiagram
    participant User
    participant Component as Export/Import<br/>Settings Component
    participant Service as SiWorkspaceService
    participant API as Backend API
    participant Config as Feature Config

    User->>Component: Clicks close icon on tooltip
    Component->>Component: handleTooltipDismiss()
    Component->>Service: updateFeatureConfigs({<br/>import_billable_tooltip_dismissed: true<br/>})
    Service->>API: PATCH /feature_configs
    API->>Config: Update import_billable_tooltip_dismissed
    Config-->>API: Confirm update
    API-->>Service: Return updated FeatureConfig
    Service->>Component: Emit updated config
    Component->>Component: Update local state & hide tooltip
    Component-->>User: Tooltip dismissed
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

🐰 A tooltip dismissed with a click,
The state now remembered, so slick!
Through features we store,
What users explore—
One dismissal, one update, one trick! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is incomplete and largely lacks substantive detail about the changes made. Provide a detailed description of what the feature does, why it was implemented, and how users will interact with the dismissible billable import alert. Include implementation details and link the ClickUp task.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: dismissible billable import alert' directly reflects the main change: adding dismissible functionality to the billable import alert/tooltip across the codebase.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch intacct-dismissible-billable-alert

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link

github-actions bot commented Mar 3, 2026

🔁 Code Duplication Report - Angular

Format Files analyzed Total lines Total tokens Clones found Duplicated lines Duplicated tokens
typescript 791 59333 542928 351 5798 (9.77%) -0.01% 🚀 54514 (10.04%) -0.01% 🚀
scss 70 3808 20591 7 148 (3.89%) 769 (3.73%)
markup 357 18237 170711 160 2127 (11.66%) -0.01% 🚀 18071 (10.59%)
python 4 727 5680 3 32 (4.40%) 368 (6.48%)
yaml 3 155 905 0 0 (0.00%) 0 (0.00%)
javascript 6 397 3497 0 0 (0.00%) 0 (0.00%)
markdown 2 96 366 0 0 (0.00%) 0 (0.00%)
bash 2 69 804 0 0 (0.00%) 0 (0.00%)
Total: 1235 82822 745482 521 8105 (9.79%) 73722 (9.89%)

📊 No significant change in code duplication.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
src/app/core/models/intacct/db/feature-config.model.ts (1)

10-12: Prefer deriving FeatureConfigUpdate from FeatureConfig to avoid drift.

This keeps the update contract in sync if the field is ever renamed.

DRY type definition
-export type FeatureConfigUpdate = {
-    import_billable_tooltip_dismissed: boolean;
-};
+export type FeatureConfigUpdate = Pick<FeatureConfig, 'import_billable_tooltip_dismissed'>;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/app/core/models/intacct/db/feature-config.model.ts` around lines 10 - 12,
Replace the hard-coded FeatureConfigUpdate type with a type derived from the
existing FeatureConfig so the update shape stays in sync; specifically, change
FeatureConfigUpdate to derive its property(ies) from FeatureConfig (e.g., using
Pick or Partial on FeatureConfig for import_billable_tooltip_dismissed) and
update references to use the new derived type name FeatureConfigUpdate to avoid
future drift between FeatureConfig and the update type.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/app/core/services/si/si-core/si-workspace.service.ts`:
- Around line 83-88: getFeatureConfigs is cached without the workspaceId so it
returns stale data when StorageService's workspace changes; change the method
signature of SiWorkspaceService#getFeatureConfigs to accept workspaceId (e.g.,
getFeatureConfigs(workspaceId: string): Observable<FeatureConfig>), use that
workspaceId to build the request path
(`/workspaces/${workspaceId}/feature_configs/`), keep the `@Cacheable` decorator
so the cache key now includes the argument, and update all call sites to pass
the current workspace id (from StorageService.getWorkspaceId() or equivalent)
when invoking getFeatureConfigs; also update any tests or mocks that call this
method.

In
`@src/app/integrations/intacct/intacct-shared/intacct-export-settings/intacct-export-settings.component.ts`:
- Around line 675-678: The current handleTooltipDismiss method hides
importProjectBillableToPlatform optimistically while firing
workspaceService.updateFeatureConfigs({ import_billable_tooltip_dismissed: true
}).subscribe(); — change this so UI only flips after the PATCH succeeds (or if
you keep optimistic UI, revert on error). Concretely, update
handleTooltipDismiss to call workspaceService.updateFeatureConfigs(...) and in
the subscribe success callback set this.importProjectBillableToPlatform = false,
and in the error callback revert/notify (e.g., keep it true and show an error)
and ensure the request includes the same feature key
import_billable_tooltip_dismissed; handle unsubscribe or use take(1)/pipe
operators as needed to avoid leaks.

---

Nitpick comments:
In `@src/app/core/models/intacct/db/feature-config.model.ts`:
- Around line 10-12: Replace the hard-coded FeatureConfigUpdate type with a type
derived from the existing FeatureConfig so the update shape stays in sync;
specifically, change FeatureConfigUpdate to derive its property(ies) from
FeatureConfig (e.g., using Pick or Partial on FeatureConfig for
import_billable_tooltip_dismissed) and update references to use the new derived
type name FeatureConfigUpdate to avoid future drift between FeatureConfig and
the update type.

ℹ️ Review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0a620b8 and 0d1b2b2.

📒 Files selected for processing (7)
  • src/app/core/models/intacct/db/feature-config.model.ts
  • src/app/core/services/si/si-core/si-workspace.service.ts
  • src/app/integrations/intacct/intacct-shared/intacct-export-settings/intacct-export-settings.component.html
  • src/app/integrations/intacct/intacct-shared/intacct-export-settings/intacct-export-settings.component.ts
  • src/app/integrations/intacct/intacct-shared/intacct-import-settings/intacct-import-settings.component.html
  • src/app/integrations/intacct/intacct-shared/intacct-import-settings/intacct-import-settings.component.ts
  • src/app/shared/components/configuration/configuration-info-label/configuration-info-label.component.html

@JustARatherRidiculouslyLongUsername JustARatherRidiculouslyLongUsername added the staging_deploy Triggers deployment of active branch to Staging label Mar 3, 2026
@JustARatherRidiculouslyLongUsername JustARatherRidiculouslyLongUsername merged commit a1ab4a4 into master Mar 3, 2026
13 checks passed
JustARatherRidiculouslyLongUsername added a commit that referenced this pull request Mar 3, 2026
JustARatherRidiculouslyLongUsername added a commit that referenced this pull request Mar 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/M Medium PR staging_deploy Triggers deployment of active branch to Staging

Development

Successfully merging this pull request may close these issues.

2 participants