Skip to content

Commit dbd4688

Browse files
committed
Revert "fix: remove AppCues (#1043)"
This reverts commit d3a7597.
1 parent b3ad044 commit dbd4688

File tree

5 files changed

+110
-0
lines changed

5 files changed

+110
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { TestBed } from '@angular/core/testing';
2+
3+
import { AppcuesService } from './appcues.service';
4+
import { HttpClientTestingModule } from '@angular/common/http/testing';
5+
import { of } from 'rxjs';
6+
import { UserService } from '../misc/user.service';
7+
import { minimalUser } from '../../interceptor/jwt.fixture';
8+
9+
describe('AppcuesService', () => {
10+
let service: AppcuesService;
11+
12+
beforeEach(() => {
13+
const service2 = {
14+
getUserProfile: () => of(minimalUser)
15+
};
16+
TestBed.configureTestingModule({
17+
imports: [HttpClientTestingModule],
18+
providers: [AppcuesService,
19+
{ provide: UserService, useValue: service2 }
20+
]
21+
});
22+
service = TestBed.inject(AppcuesService);
23+
(window as any).Appcues = {
24+
identify: () => undefined
25+
};
26+
});
27+
28+
it('should be created', () => {
29+
expect(service).toBeTruthy();
30+
});
31+
32+
it('get function check', () => {
33+
expect(service.appcues).toBeDefined();
34+
});
35+
36+
it('initialiseAppcues function check', () => {
37+
// @ts-ignore: force this private property value for testing.
38+
expect(service.initialiseAppcues()).toBeUndefined();
39+
});
40+
});
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { Injectable } from '@angular/core';
2+
import { UserService } from '../misc/user.service';
3+
import { AppName } from '../../models/enum/enum.model';
4+
import { SiWorkspaceService } from '../si/si-core/si-workspace.service';
5+
import { MinimalUser } from '../../models/db/user.model';
6+
import { IntacctWorkspace } from '../../models/intacct/db/workspaces.model';
7+
8+
@Injectable({
9+
providedIn: 'root'
10+
})
11+
export class AppcuesService {
12+
13+
user: MinimalUser = this.userService.getUserProfile();
14+
15+
constructor(
16+
private userService: UserService
17+
) { }
18+
19+
get appcues() {
20+
return (window as any).Appcues;
21+
}
22+
23+
initialiseAppcues(appName: AppName, workspace_created_at: Date): void {
24+
workspace_created_at = new Date(workspace_created_at);
25+
if (this.appcues) {
26+
const user = this.userService.getUserProfile();
27+
this.appcues.identify(user.user_id, {
28+
email: user.email,
29+
name: user.full_name,
30+
'Org ID': user.org_id,
31+
'Workspace Name': user.org_name,
32+
source: 'Fyle Integration Settings',
33+
'App Name': appName,
34+
'Flow Version': workspace_created_at > new Date('2023-10-03T07:30:00.000Z') ? 'NEW' : 'OLD'
35+
});
36+
}
37+
}
38+
}

src/app/integrations/intacct/intacct.component.spec.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { IntacctComponent } from './intacct.component';
55
import { HelperService } from 'src/app/core/services/common/helper.service';
66
import { StorageService } from 'src/app/core/services/common/storage.service';
77
import { WindowService } from 'src/app/core/services/common/window.service';
8+
import { AppcuesService } from 'src/app/core/services/integration/appcues.service';
89
import { UserService } from 'src/app/core/services/misc/user.service';
910
import { SiWorkspaceService } from 'src/app/core/services/si/si-core/si-workspace.service';
1011
import { AppUrl, IntacctOnboardingState } from 'src/app/core/models/enum/enum.model';
@@ -22,13 +23,15 @@ describe('IntacctComponent', () => {
2223
let helperServiceSpy: jasmine.SpyObj<HelperService>;
2324
let storageServiceSpy: jasmine.SpyObj<StorageService>;
2425
let windowServiceMock: Partial<WindowService>;
26+
let appcuesServiceSpy: jasmine.SpyObj<AppcuesService>;
2527
let router: Router;
2628

2729
beforeEach(async () => {
2830
const userSpy = jasmine.createSpyObj('UserService', ['getUserProfile']);
2931
const workspaceSpy = jasmine.createSpyObj('SiWorkspaceService', ['getWorkspace', 'postWorkspace', 'syncFyleDimensions', 'syncIntacctDimensions']);
3032
const helperSpy = jasmine.createSpyObj('HelperService', ['setBaseApiURL']);
3133
const storageSpy = jasmine.createSpyObj('StorageService', ['set']);
34+
const appcuesSpy = jasmine.createSpyObj('AppcuesService', ['initialiseAppcues']);
3235

3336
windowServiceMock = {
3437
get nativeWindow() {
@@ -45,6 +48,7 @@ describe('IntacctComponent', () => {
4548
imports: [SharedModule],
4649
providers: [
4750
{ provide: HelperService, useValue: helperSpy },
51+
{ provide: AppcuesService, useValue: appcuesSpy },
4852
{ provide: StorageService, useValue: storageSpy },
4953
{ provide: UserService, useValue: userSpy },
5054
{ provide: SiWorkspaceService, useValue: workspaceSpy },
@@ -60,6 +64,7 @@ describe('IntacctComponent', () => {
6064
helperServiceSpy = TestBed.inject(HelperService) as jasmine.SpyObj<HelperService>;
6165
storageServiceSpy = TestBed.inject(StorageService) as jasmine.SpyObj<StorageService>;
6266
router = TestBed.inject(Router);
67+
appcuesServiceSpy = TestBed.inject(AppcuesService) as jasmine.SpyObj<AppcuesService>;
6368

6469
spyOn(router, 'navigateByUrl');
6570
spyOnProperty(router, 'events').and.returnValue(of(new NavigationEnd(0, '', '')));
@@ -120,4 +125,15 @@ describe('IntacctComponent', () => {
120125

121126
expect(router.navigateByUrl).not.toHaveBeenCalled();
122127
});
128+
129+
it('should initialise Appcues', () => {
130+
(window as any).Appcues = {
131+
page: jasmine.createSpy('Appcues.page')
132+
};
133+
134+
fixture.detectChanges();
135+
136+
expect(appcuesServiceSpy.initialiseAppcues).toHaveBeenCalled();
137+
expect((window as any).Appcues.page).toHaveBeenCalled();
138+
});
123139
});

src/app/integrations/intacct/intacct.component.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { IntacctWorkspace } from 'src/app/core/models/intacct/db/workspaces.mode
66
import { HelperService } from 'src/app/core/services/common/helper.service';
77
import { StorageService } from 'src/app/core/services/common/storage.service';
88
import { WindowService } from 'src/app/core/services/common/window.service';
9+
import { AppcuesService } from 'src/app/core/services/integration/appcues.service';
910
import { UserService } from 'src/app/core/services/misc/user.service';
1011
import { SiWorkspaceService } from 'src/app/core/services/si/si-core/si-workspace.service';
1112
import { SiAuthService } from 'src/app/core/services/si/si-core/si-auth.service';
@@ -26,6 +27,7 @@ export class IntacctComponent implements OnInit {
2627
windowReference: Window;
2728

2829
constructor(
30+
private appcuesService: AppcuesService,
2931
private helperService: HelperService,
3032
private router: Router,
3133
private route: ActivatedRoute,
@@ -57,6 +59,7 @@ export class IntacctComponent implements OnInit {
5759
this.workspace = workspace;
5860
this.storageService.set('workspaceId', this.workspace.id);
5961
this.storageService.set('onboarding-state', this.workspace.onboarding_state);
62+
this.appcuesService.initialiseAppcues(AppName.INTACCT, this.workspace.created_at);
6063
this.workspaceService.syncFyleDimensions().subscribe();
6164
this.workspaceService.syncIntacctDimensions().subscribe();
6265
this.isLoading = false;
@@ -91,6 +94,11 @@ export class IntacctComponent implements OnInit {
9194
}
9295

9396
ngOnInit(): void {
97+
this.router.events.subscribe((event) => {
98+
if (event instanceof NavigationEnd) {
99+
(window as any).Appcues && (window as any).Appcues.page();
100+
}
101+
});
94102
this.handleAuthParameters();
95103
}
96104

src/index.html

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,14 @@
2525
}
2626
</script>
2727

28+
<!-- appcues -->
29+
<script type="text/javascript">
30+
window.AppcuesSettings = {
31+
enableURLDetection: true
32+
};
33+
</script>
34+
<script src="https://fast.appcues.com/71692.js"></script>
35+
2836
<!-- refiner.io -->
2937
<script type="text/javascript">
3038
if (window.location.hostname !== "localhost") {

0 commit comments

Comments
 (0)