Skip to content

Commit d719aa4

Browse files
authored
refactor: Remove getFuxSettings (#634)
1 parent b7971c9 commit d719aa4

File tree

12 files changed

+78
-92
lines changed

12 files changed

+78
-92
lines changed

web_ui/src/hooks/use-fux-notifications/use-fux-notifications.hook.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@ import { useCallback } from 'react';
55

66
import { FUX_NOTIFICATION_KEYS, FUX_SETTINGS_KEYS } from '../../core/user-settings/dtos/user-settings.interface';
77
import { useUserGlobalSettings } from '../../core/user-settings/hooks/use-global-settings.hook';
8-
import { getFuxSetting } from '../../shared/components/tutorials/utils';
98

109
export const useFuxNotifications = () => {
1110
const settings = useUserGlobalSettings();
1211

1312
const handleFirstAnnotation = () => {
14-
const hasNeverAnnotated = getFuxSetting(FUX_SETTINGS_KEYS.NEVER_ANNOTATED, settings.config);
13+
const hasNeverAnnotated = settings.config[FUX_SETTINGS_KEYS.NEVER_ANNOTATED].value;
1514

1615
if (hasNeverAnnotated) {
1716
settings.saveConfig({
@@ -24,7 +23,7 @@ export const useFuxNotifications = () => {
2423

2524
const handleFirstAutoTraining = useCallback(
2625
async (projectId: string, jobId: string) => {
27-
const hasNeverAutotrained = getFuxSetting(FUX_SETTINGS_KEYS.NEVER_AUTOTRAINED, settings.config);
26+
const hasNeverAutotrained = settings.config[FUX_SETTINGS_KEYS.NEVER_AUTOTRAINED].value;
2827

2928
if (hasNeverAutotrained) {
3029
await settings.saveConfig({
@@ -41,10 +40,7 @@ export const useFuxNotifications = () => {
4140
);
4241

4342
const handleFirstSuccessfulAutoTraining = async (trainedModelId: string) => {
44-
const hasNeverSuccessfullyAutotrained = getFuxSetting(
45-
FUX_SETTINGS_KEYS.NEVER_SUCCESSFULLY_AUTOTRAINED,
46-
settings.config
47-
);
43+
const hasNeverSuccessfullyAutotrained = settings.config[FUX_SETTINGS_KEYS.NEVER_SUCCESSFULLY_AUTOTRAINED].value;
4844

4945
const settingToDisable = settings.config[FUX_NOTIFICATION_KEYS.AUTO_TRAINING_MODAL].isEnabled
5046
? FUX_NOTIFICATION_KEYS.AUTO_TRAINING_MODAL
@@ -63,7 +59,7 @@ export const useFuxNotifications = () => {
6359
}
6460
};
6561
const handleFirstVisitToPredictionMode = () => {
66-
const neverCheckedPredictions = getFuxSetting(FUX_SETTINGS_KEYS.NEVER_CHECKED_PREDICTIONS, settings.config);
62+
const neverCheckedPredictions = settings.config[FUX_SETTINGS_KEYS.NEVER_CHECKED_PREDICTIONS].value;
6763

6864
if (neverCheckedPredictions) {
6965
settings.saveConfig({

web_ui/src/hooks/use-fux-notifications/use-fux-notifications.test.tsx

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ import { renderHook } from '@testing-library/react';
66
import { FUX_NOTIFICATION_KEYS, FUX_SETTINGS_KEYS } from '../../core/user-settings/dtos/user-settings.interface';
77
import { useUserGlobalSettings } from '../../core/user-settings/hooks/use-global-settings.hook';
88
import { INITIAL_GLOBAL_SETTINGS } from '../../core/user-settings/utils';
9-
import { getMockedUserGlobalSettingsObject } from '../../test-utils/mocked-items-factory/mocked-settings';
9+
import {
10+
getMockedUserGlobalSettings,
11+
getMockedUserGlobalSettingsObject,
12+
} from '../../test-utils/mocked-items-factory/mocked-settings';
1013
import { useFuxNotifications } from './use-fux-notifications.hook';
1114

1215
const mockSaveConfig = jest.fn();
@@ -92,12 +95,20 @@ describe('useFuxNotifications', () => {
9295
it('should never update settings', () => {
9396
jest.mocked(useUserGlobalSettings).mockImplementationOnce(() => ({
9497
...mockSettings,
95-
config: {
96-
...mockSettings.config,
97-
[FUX_SETTINGS_KEYS.USER_DISMISSED_ALL]: {
98-
value: true,
98+
config: getMockedUserGlobalSettings({
99+
[FUX_SETTINGS_KEYS.NEVER_ANNOTATED]: {
100+
value: false,
99101
},
100-
},
102+
[FUX_SETTINGS_KEYS.NEVER_AUTOTRAINED]: {
103+
value: false,
104+
},
105+
[FUX_SETTINGS_KEYS.NEVER_SUCCESSFULLY_AUTOTRAINED]: {
106+
value: false,
107+
},
108+
[FUX_SETTINGS_KEYS.NEVER_CHECKED_PREDICTIONS]: {
109+
value: false,
110+
},
111+
}),
101112
}));
102113

103114
const { result } = renderHook(() => useFuxNotifications());

web_ui/src/pages/annotator/annotator-layout.component.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import { UpgradeBanner } from '../../routes/upgrade-banner/upgrade-banner.compon
2020
import { CoachMark } from '../../shared/components/coach-mark/coach-mark.component';
2121
import { SuccessfullyAutotrainedNotification } from '../../shared/components/coach-mark/fux-notifications/successfully-auto-trained-notification.component';
2222
import { TutorialCardBuilder } from '../../shared/components/tutorial-card/tutorial-card-builder.component';
23-
import { getFuxSetting } from '../../shared/components/tutorials/utils';
2423
import { useTutorialEnablement } from '../../shared/hooks/use-tutorial-enablement.hook';
2524
import { ErrorBoundary } from '../errors/error-boundary.component';
2625
import { useProject } from '../project-details/providers/project-provider/project-provider.component';
@@ -108,11 +107,8 @@ export const AnnotatorLayout = (): JSX.Element => {
108107
FUX_NOTIFICATION_KEYS.ANNOTATE_INTERACTIVELY
109108
);
110109

111-
const hasPreviouslyAutoTrained = !getFuxSetting(FUX_SETTINGS_KEYS.NEVER_AUTOTRAINED, userGlobalSettings.config);
112-
const firstAutoTrainedProjectId = getFuxSetting(
113-
FUX_SETTINGS_KEYS.FIRST_AUTOTRAINED_PROJECT_ID,
114-
userGlobalSettings.config
115-
);
110+
const hasPreviouslyAutoTrained = !userGlobalSettings.config[FUX_SETTINGS_KEYS.NEVER_AUTOTRAINED].value;
111+
const firstAutoTrainedProjectId = userGlobalSettings.config[FUX_SETTINGS_KEYS.FIRST_AUTOTRAINED_PROJECT_ID].value;
116112

117113
const filteredLabels = project.tasks.some(isKeypointTask) ? [] : labels;
118114

web_ui/src/pages/annotator/notification/auto-training-credits-modal/auto-training-credits-modal.component.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import { FUX_NOTIFICATION_KEYS, FUX_SETTINGS_KEYS } from '../../../../core/user-
1717
import { useUserGlobalSettings } from '../../../../core/user-settings/hooks/use-global-settings.hook';
1818
import { UserGlobalSettings, UseSettings } from '../../../../core/user-settings/services/user-settings.interface';
1919
import { CreditsToConsume } from '../../../../shared/components/header/credit-balance/credits-to-consume.component';
20-
import { getFuxSetting } from '../../../../shared/components/tutorials/utils';
2120
import { useProject } from '../../../project-details/providers/project-provider/project-provider.component';
2221
import { useIsAutoTrainingOn } from '../../hooks/use-is-auto-training-on.hook';
2322
import { onFirstScheduledOrRunningAutoTrainingJob } from './util';
@@ -76,7 +75,7 @@ export const AutoTrainingCreditsModal = ({ settings }: AutoTrainingCreditsModalP
7675
const [isOpen, setIsOpen] = useState(false);
7776

7877
const isAutoTrainingOn = useIsAutoTrainingOn({ project, projectIdentifier });
79-
const hasNeverAutotrained = getFuxSetting(FUX_SETTINGS_KEYS.NEVER_AUTOTRAINED, settings.config);
78+
const hasNeverAutotrained = settings.config[FUX_SETTINGS_KEYS.NEVER_AUTOTRAINED].value;
8079
const isQueryEnabled = Boolean(isAutoTrainingOn && !settings.isSavingConfig && hasNeverAutotrained);
8180

8281
const handleDisplayModal = async (jobId: string) => {

web_ui/src/pages/annotator/notification/auto-training-credits-modal/auto-training-credits-modal.test.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import { FUX_NOTIFICATION_KEYS, FUX_SETTINGS_KEYS } from '../../../../core/user-
1010
import { UserGlobalSettings, UseSettings } from '../../../../core/user-settings/services/user-settings.interface';
1111
import { INITIAL_GLOBAL_SETTINGS } from '../../../../core/user-settings/utils';
1212
import { useActiveLearningConfiguration } from '../../../../shared/components/header/active-learning-configuration/use-active-learning-configuration.hook';
13-
import { getFuxSetting } from '../../../../shared/components/tutorials/utils';
1413
import { getMockedJob, getMockedJobCount } from '../../../../test-utils/mocked-items-factory/mocked-jobs';
1514
import {
1615
getMockedUserGlobalSettings,
@@ -115,7 +114,6 @@ describe('AutoTrainingCreditsModal', () => {
115114

116115
it('modal is open and disabled by dismissing', async () => {
117116
const mockedSaveSettings = jest.fn();
118-
jest.mocked(getFuxSetting).mockReturnValue(true);
119117

120118
await renderApp({ mockedSaveSettings });
121119

web_ui/src/pages/annotator/notification/auto-training-credits-modal/util.test.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
import { GETI_SYSTEM_AUTHOR_ID, JobState } from '../../../../core/jobs/jobs.const';
55
import { Job, JobCount } from '../../../../core/jobs/jobs.interface';
6-
import { getFuxSetting } from '../../../../shared/components/tutorials/utils';
76
import { getMockedJob } from '../../../../test-utils/mocked-items-factory/mocked-jobs';
87
import { getMockedUserGlobalSettingsObject } from '../../../../test-utils/mocked-items-factory/mocked-settings';
98
import { onFirstScheduledOrRunningAutoTrainingJob } from './util';
@@ -47,7 +46,6 @@ describe('auto-training-credits-modal utils', () => {
4746
});
4847

4948
it('it is first scheduled auto-training job', () => {
50-
jest.mocked(getFuxSetting).mockReturnValue(true);
5149
onFirstScheduledOrRunningAutoTrainingJob(
5250
getMockedUserGlobalSettingsObject(),
5351
mockedCallback
@@ -61,7 +59,6 @@ describe('auto-training-credits-modal utils', () => {
6159
});
6260

6361
it('it is first running auto-training job', () => {
64-
jest.mocked(getFuxSetting).mockReturnValue(true);
6562
onFirstScheduledOrRunningAutoTrainingJob(
6663
getMockedUserGlobalSettingsObject(),
6764
mockedCallback
@@ -75,7 +72,6 @@ describe('auto-training-credits-modal utils', () => {
7572
});
7673

7774
it('it is scheduled job but user has previously auto-trained', () => {
78-
jest.mocked(getFuxSetting).mockReturnValue(false);
7975
onFirstScheduledOrRunningAutoTrainingJob(
8076
getMockedUserGlobalSettingsObject(),
8177
mockedCallback
@@ -97,7 +93,6 @@ describe('auto-training-credits-modal utils', () => {
9793
});
9894

9995
it('no scheduled jobs', () => {
100-
jest.mocked(getFuxSetting).mockReturnValue(true);
10196
onFirstScheduledOrRunningAutoTrainingJob(
10297
getMockedUserGlobalSettingsObject(),
10398
mockedCallback
@@ -112,7 +107,6 @@ describe('auto-training-credits-modal utils', () => {
112107
['numberOfCancelledJobs'],
113108
['numberOfFailedJobs'],
114109
];
115-
jest.mocked(getFuxSetting).mockReturnValue(true);
116110
test.each(testData)('%s', (jobName) => {
117111
onFirstScheduledOrRunningAutoTrainingJob(
118112
getMockedUserGlobalSettingsObject(),

web_ui/src/pages/annotator/notification/auto-training-credits-modal/util.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { GETI_SYSTEM_AUTHOR_ID, JobState } from '../../../../core/jobs/jobs.cons
77
import { JobsResponse } from '../../../../core/jobs/services/jobs-service.interface';
88
import { FUX_SETTINGS_KEYS } from '../../../../core/user-settings/dtos/user-settings.interface';
99
import { UserGlobalSettings, UseSettings } from '../../../../core/user-settings/services/user-settings.interface';
10-
import { getFuxSetting } from '../../../../shared/components/tutorials/utils';
1110

1211
export const onFirstScheduledOrRunningAutoTrainingJob =
1312
(settings: UseSettings<UserGlobalSettings>, callback: (jobId: string) => void) =>
@@ -20,7 +19,7 @@ export const onFirstScheduledOrRunningAutoTrainingJob =
2019
const totalScheduledJobs = Number(jobsCount.numberOfScheduledJobs);
2120
const totalRunningJobs = Number(jobsCount.numberOfRunningJobs);
2221
const hasScheduledOrRunningTrainingJobs = totalScheduledJobs > 0 || totalRunningJobs > 0;
23-
const neverAutoTrained = getFuxSetting(FUX_SETTINGS_KEYS.NEVER_AUTOTRAINED, settings.config);
22+
const neverAutoTrained = settings.config[FUX_SETTINGS_KEYS.NEVER_AUTOTRAINED].value;
2423
const isAutoTrainingJob = jobs.find((job) => {
2524
return (
2625
(job.state === JobState.SCHEDULED || job.state === JobState.RUNNING) &&

web_ui/src/shared/components/coach-mark/fux-notifications/auto-training-coach-mark.component.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import { useFuxNotifications } from '../../../../hooks/use-fux-notifications/use
1616
import { useIsAutoTrainingOn } from '../../../../pages/annotator/hooks/use-is-auto-training-on.hook';
1717
import { onFirstScheduledOrRunningAutoTrainingJob } from '../../../../pages/annotator/notification/auto-training-credits-modal/util';
1818
import { useProject } from '../../../../pages/project-details/providers/project-provider/project-provider.component';
19-
import { getFuxSetting } from '../../tutorials/utils';
2019
import { CoachMark } from '../coach-mark.component';
2120

2221
const useAutoTrainingCoachMarkJobs = () => {
@@ -27,7 +26,7 @@ const useAutoTrainingCoachMarkJobs = () => {
2726
const { useGetJobs } = useJobs(projectIdentifier);
2827

2928
const isAutoTrainingOn = useIsAutoTrainingOn({ project, projectIdentifier });
30-
const neverAutoTrained = getFuxSetting(FUX_SETTINGS_KEYS.NEVER_AUTOTRAINED, settings.config);
29+
const neverAutoTrained = settings.config[FUX_SETTINGS_KEYS.NEVER_AUTOTRAINED].value;
3130
const isQueryEnabled = Boolean(!FEATURE_FLAG_CREDIT_SYSTEM && isAutoTrainingOn && neverAutoTrained);
3231

3332
const handleSuccess = useCallback(

web_ui/src/shared/components/coach-mark/fux-notifications/successfully-auto-trained-notification.component.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import { useUserGlobalSettings } from '../../../../core/user-settings/hooks/use-
1818
import { useFuxNotifications } from '../../../../hooks/use-fux-notifications/use-fux-notifications.hook';
1919
import { useProjectIdentifier } from '../../../../hooks/use-project-identifier/use-project-identifier';
2020
import { useProject } from '../../../../pages/project-details/providers/project-provider/project-provider.component';
21-
import { getFuxSetting } from '../../tutorials/utils';
2221
import { CoachMark } from '../coach-mark.component';
2322
import { onFirstSuccessfulAutoTrainingJob } from '../utils';
2423

@@ -62,11 +61,8 @@ export const SuccessfullyAutotrainedNotification = () => {
6261
const { data: modelsData = [] } = useProjectModelsQuery({ refetchInterval: 15000 });
6362
const isAnomalous = isAnomalyDomain(project.domains[0]);
6463

65-
const neverSuccessfullyAutoTrained = getFuxSetting(
66-
FUX_SETTINGS_KEYS.NEVER_SUCCESSFULLY_AUTOTRAINED,
67-
settings.config
68-
);
69-
const firstAutoTrainedModelId = getFuxSetting(FUX_SETTINGS_KEYS.FIRST_AUTOTRAINED_MODEL_ID, settings.config);
64+
const neverSuccessfullyAutoTrained = settings.config[FUX_SETTINGS_KEYS.NEVER_SUCCESSFULLY_AUTOTRAINED].value;
65+
const firstAutoTrainedModelId = settings.config[FUX_SETTINGS_KEYS.FIRST_AUTOTRAINED_MODEL_ID].value;
7066
const isQueryEnabled = Boolean(neverSuccessfullyAutoTrained);
7167

7268
const trainedModel = modelsData.find((model) =>

web_ui/src/shared/components/coach-mark/utils.test.ts

Lines changed: 47 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@ import { GETI_SYSTEM_AUTHOR_ID, JobState } from '../../../core/jobs/jobs.const';
55
import { Job, JobCount } from '../../../core/jobs/jobs.interface';
66
import { FUX_SETTINGS_KEYS } from '../../../core/user-settings/dtos/user-settings.interface';
77
import { getMockedJob } from '../../../test-utils/mocked-items-factory/mocked-jobs';
8-
import { getMockedUserGlobalSettingsObject } from '../../../test-utils/mocked-items-factory/mocked-settings';
9-
import { getFuxSetting } from '../tutorials/utils';
8+
import {
9+
getMockedUserGlobalSettings,
10+
getMockedUserGlobalSettingsObject,
11+
} from '../../../test-utils/mocked-items-factory/mocked-settings';
1012
import { onFirstSuccessfulAutoTrainingJob } from './utils';
1113

1214
const getJobResponse = (jobCount: Partial<JobCount> = {}, mockedJobs: Job[] = []) => ({
@@ -27,10 +29,6 @@ const getJobResponse = (jobCount: Partial<JobCount> = {}, mockedJobs: Job[] = []
2729
],
2830
});
2931

30-
jest.mock('../tutorials/utils', () => ({
31-
getFuxSetting: jest.fn(),
32-
}));
33-
3432
describe('CoachMark utils', () => {
3533
beforeEach(() => {
3634
jest.clearAllMocks();
@@ -44,48 +42,51 @@ describe('CoachMark utils', () => {
4442
getMockedUserGlobalSettingsObject({}),
4543
mockedCallback
4644
)({ pageParams: [undefined], pages: [] });
47-
expect(mockedCallback).toBeCalledTimes(0);
45+
expect(mockedCallback).toHaveBeenCalledTimes(0);
4846
});
4947

5048
it('will not call callback when no finished jobs', () => {
5149
onFirstSuccessfulAutoTrainingJob(getMockedUserGlobalSettingsObject({}), mockedCallback)(getJobResponse());
52-
expect(mockedCallback).toBeCalledTimes(0);
50+
expect(mockedCallback).toHaveBeenCalledTimes(0);
5351
});
5452

5553
it('will not call callback when previously autotrained', () => {
56-
jest.mocked(getFuxSetting).mockImplementationOnce((setting) => {
57-
if (setting === FUX_SETTINGS_KEYS.NEVER_SUCCESSFULLY_AUTOTRAINED) {
58-
return false;
59-
} else {
60-
return true;
61-
}
62-
});
63-
onFirstSuccessfulAutoTrainingJob(getMockedUserGlobalSettingsObject({}), mockedCallback)(getJobResponse());
64-
expect(mockedCallback).toBeCalledTimes(0);
54+
onFirstSuccessfulAutoTrainingJob(
55+
getMockedUserGlobalSettingsObject({
56+
config: getMockedUserGlobalSettings({
57+
[FUX_SETTINGS_KEYS.NEVER_SUCCESSFULLY_AUTOTRAINED]: {
58+
value: false,
59+
},
60+
}),
61+
}),
62+
mockedCallback
63+
)(getJobResponse());
64+
expect(mockedCallback).toHaveBeenCalledTimes(0);
6565
});
6666

6767
it('will not call callback when first scheduled autotraining job id doesnt match finished job id', () => {
68-
jest.mocked(getFuxSetting).mockImplementationOnce((setting) => {
69-
if (setting === FUX_SETTINGS_KEYS.FIRST_AUTOTRAINING_JOB_ID) {
70-
return 'random-job-id';
71-
} else {
72-
return true;
73-
}
74-
});
75-
onFirstSuccessfulAutoTrainingJob(getMockedUserGlobalSettingsObject({}), mockedCallback)(getJobResponse());
76-
expect(mockedCallback).toBeCalledTimes(0);
68+
onFirstSuccessfulAutoTrainingJob(
69+
getMockedUserGlobalSettingsObject({
70+
config: getMockedUserGlobalSettings({
71+
[FUX_SETTINGS_KEYS.FIRST_AUTOTRAINING_JOB_ID]: {
72+
value: 'random-job-id',
73+
},
74+
}),
75+
}),
76+
mockedCallback
77+
)(getJobResponse());
78+
expect(mockedCallback).toHaveBeenCalledTimes(0);
7779
});
7880

7981
it('will not call callback when first scheduled job id was not autotrained', () => {
80-
jest.mocked(getFuxSetting).mockImplementation((setting) => {
81-
if (setting === FUX_SETTINGS_KEYS.FIRST_AUTOTRAINING_JOB_ID) {
82-
return 'first-autotrained-job-id';
83-
} else {
84-
return true;
85-
}
86-
});
8782
onFirstSuccessfulAutoTrainingJob(
88-
getMockedUserGlobalSettingsObject({}),
83+
getMockedUserGlobalSettingsObject({
84+
config: getMockedUserGlobalSettings({
85+
[FUX_SETTINGS_KEYS.FIRST_AUTOTRAINING_JOB_ID]: {
86+
value: 'first-autotrained-job-id',
87+
},
88+
}),
89+
}),
8990
mockedCallback
9091
)(
9192
getJobResponse({ numberOfFinishedJobs: 1 }, [
@@ -97,12 +98,21 @@ describe('CoachMark utils', () => {
9798
])
9899
);
99100

100-
expect(mockedCallback).toBeCalledTimes(0);
101+
expect(mockedCallback).toHaveBeenCalledTimes(0);
101102
});
102103

103104
it('will call callback ', () => {
104105
onFirstSuccessfulAutoTrainingJob(
105-
getMockedUserGlobalSettingsObject({}),
106+
getMockedUserGlobalSettingsObject({
107+
config: getMockedUserGlobalSettings({
108+
[FUX_SETTINGS_KEYS.NEVER_SUCCESSFULLY_AUTOTRAINED]: {
109+
value: true,
110+
},
111+
[FUX_SETTINGS_KEYS.FIRST_AUTOTRAINING_JOB_ID]: {
112+
value: 'first-autotrained-job-id',
113+
},
114+
}),
115+
}),
106116
mockedCallback
107117
)(
108118
getJobResponse({ numberOfFinishedJobs: 1 }, [
@@ -114,7 +124,7 @@ describe('CoachMark utils', () => {
114124
])
115125
);
116126

117-
expect(mockedCallback).toBeCalledTimes(1);
127+
expect(mockedCallback).toHaveBeenCalledTimes(1);
118128
});
119129
});
120130
});

0 commit comments

Comments
 (0)