mirror of
https://github.com/Unleash/unleash.git
synced 2025-09-24 17:51:14 +02:00
feat: add plausible change-requests-conflicts (#6024)
This commit is contained in:
parent
936fa44ec5
commit
b0ecfd4d34
@ -35,6 +35,7 @@ import {
|
|||||||
} from './ChangeRequestScheduledDialogs/changeRequestScheduledDialogs';
|
} from './ChangeRequestScheduledDialogs/changeRequestScheduledDialogs';
|
||||||
import { ScheduleChangeRequestDialog } from './ChangeRequestScheduledDialogs/ScheduleChangeRequestDialog';
|
import { ScheduleChangeRequestDialog } from './ChangeRequestScheduledDialogs/ScheduleChangeRequestDialog';
|
||||||
import { usePlausibleTracker } from 'hooks/usePlausibleTracker';
|
import { usePlausibleTracker } from 'hooks/usePlausibleTracker';
|
||||||
|
import { PlausibleChangeRequestState } from '../changeRequest.types';
|
||||||
|
|
||||||
const StyledAsideBox = styled(Box)(({ theme }) => ({
|
const StyledAsideBox = styled(Box)(({ theme }) => ({
|
||||||
width: '30%',
|
width: '30%',
|
||||||
@ -114,13 +115,18 @@ export const ChangeRequestOverview: FC = () => {
|
|||||||
changeRequest.environment,
|
changeRequest.environment,
|
||||||
);
|
);
|
||||||
|
|
||||||
const hasSchedule = Boolean(
|
const getCurrentState = (): PlausibleChangeRequestState => {
|
||||||
'schedule' in changeRequest && changeRequest.schedule?.scheduledAt,
|
switch (changeRequest.state) {
|
||||||
);
|
case 'Scheduled':
|
||||||
|
return `${changeRequest.state} ${changeRequest.schedule.status}`;
|
||||||
|
default:
|
||||||
|
return changeRequest.state;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const onApplyChanges = async () => {
|
const onApplyChanges = async () => {
|
||||||
try {
|
try {
|
||||||
await changeState(projectId, Number(id), {
|
await changeState(projectId, Number(id), getCurrentState(), {
|
||||||
state: 'Applied',
|
state: 'Applied',
|
||||||
});
|
});
|
||||||
setShowApplyScheduledDialog(false);
|
setShowApplyScheduledDialog(false);
|
||||||
@ -131,24 +137,14 @@ export const ChangeRequestOverview: FC = () => {
|
|||||||
title: 'Success',
|
title: 'Success',
|
||||||
text: 'Changes applied',
|
text: 'Changes applied',
|
||||||
});
|
});
|
||||||
if (hasSchedule) {
|
|
||||||
trackEvent('scheduled-configuration-changes', {
|
|
||||||
props: {
|
|
||||||
action: 'scheduled-applied',
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} catch (error: unknown) {
|
} catch (error: unknown) {
|
||||||
setToastApiError(formatUnknownError(error));
|
setToastApiError(formatUnknownError(error));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const onScheduleChangeRequest = async (scheduledDate: Date) => {
|
const onScheduleChangeRequest = async (scheduledDate: Date) => {
|
||||||
const plausibleAction = hasSchedule
|
|
||||||
? 'scheduled-updated'
|
|
||||||
: 'scheduled-created';
|
|
||||||
try {
|
try {
|
||||||
await changeState(projectId, Number(id), {
|
await changeState(projectId, Number(id), getCurrentState(), {
|
||||||
state: 'Scheduled',
|
state: 'Scheduled',
|
||||||
scheduledAt: scheduledDate.toISOString(),
|
scheduledAt: scheduledDate.toISOString(),
|
||||||
});
|
});
|
||||||
@ -160,11 +156,6 @@ export const ChangeRequestOverview: FC = () => {
|
|||||||
title: 'Success',
|
title: 'Success',
|
||||||
text: 'Changes scheduled',
|
text: 'Changes scheduled',
|
||||||
});
|
});
|
||||||
trackEvent('scheduled-configuration-changes', {
|
|
||||||
props: {
|
|
||||||
action: plausibleAction,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
} catch (error: unknown) {
|
} catch (error: unknown) {
|
||||||
setToastApiError(formatUnknownError(error));
|
setToastApiError(formatUnknownError(error));
|
||||||
}
|
}
|
||||||
@ -187,7 +178,7 @@ export const ChangeRequestOverview: FC = () => {
|
|||||||
|
|
||||||
const onCancelChanges = async () => {
|
const onCancelChanges = async () => {
|
||||||
try {
|
try {
|
||||||
await changeState(projectId, Number(id), {
|
await changeState(projectId, Number(id), getCurrentState(), {
|
||||||
state: 'Cancelled',
|
state: 'Cancelled',
|
||||||
});
|
});
|
||||||
setShowCancelDialog(false);
|
setShowCancelDialog(false);
|
||||||
@ -205,7 +196,7 @@ export const ChangeRequestOverview: FC = () => {
|
|||||||
|
|
||||||
const onReject = async (comment?: string) => {
|
const onReject = async (comment?: string) => {
|
||||||
try {
|
try {
|
||||||
await changeState(projectId, Number(id), {
|
await changeState(projectId, Number(id), getCurrentState(), {
|
||||||
state: 'Rejected',
|
state: 'Rejected',
|
||||||
comment,
|
comment,
|
||||||
});
|
});
|
||||||
@ -217,13 +208,6 @@ export const ChangeRequestOverview: FC = () => {
|
|||||||
});
|
});
|
||||||
refetchChangeRequest();
|
refetchChangeRequest();
|
||||||
refetchChangeRequestOpen();
|
refetchChangeRequestOpen();
|
||||||
if (hasSchedule) {
|
|
||||||
trackEvent('scheduled-configuration-changes', {
|
|
||||||
props: {
|
|
||||||
action: 'scheduled-rejected',
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} catch (error: unknown) {
|
} catch (error: unknown) {
|
||||||
setToastApiError(formatUnknownError(error));
|
setToastApiError(formatUnknownError(error));
|
||||||
}
|
}
|
||||||
@ -231,7 +215,7 @@ export const ChangeRequestOverview: FC = () => {
|
|||||||
|
|
||||||
const onApprove = async () => {
|
const onApprove = async () => {
|
||||||
try {
|
try {
|
||||||
await changeState(projectId, Number(id), {
|
await changeState(projectId, Number(id), getCurrentState(), {
|
||||||
state: 'Approved',
|
state: 'Approved',
|
||||||
});
|
});
|
||||||
refetchChangeRequest();
|
refetchChangeRequest();
|
||||||
|
@ -81,7 +81,7 @@ export const ChangeRequestSidebar: VFC<IChangeRequestSidebarProps> = ({
|
|||||||
|
|
||||||
const onReview = async (draftId: number, comment?: string) => {
|
const onReview = async (draftId: number, comment?: string) => {
|
||||||
try {
|
try {
|
||||||
await changeState(project, draftId, {
|
await changeState(project, draftId, 'Draft', {
|
||||||
state: 'In review',
|
state: 'In review',
|
||||||
comment,
|
comment,
|
||||||
});
|
});
|
||||||
|
@ -100,6 +100,12 @@ export interface IChangeRequestChangeBase {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type PlausibleChangeRequestState =
|
||||||
|
| Exclude<ChangeRequestState, 'Scheduled'>
|
||||||
|
| 'Scheduled pending'
|
||||||
|
| 'Scheduled failed'
|
||||||
|
| 'Scheduled suspended';
|
||||||
|
|
||||||
export type ChangeRequestState =
|
export type ChangeRequestState =
|
||||||
| 'Draft'
|
| 'Draft'
|
||||||
| 'Approved'
|
| 'Approved'
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import useAPI from '../useApi/useApi';
|
import useAPI from '../useApi/useApi';
|
||||||
import { usePlausibleTracker } from '../../../usePlausibleTracker';
|
import { usePlausibleTracker } from '../../../usePlausibleTracker';
|
||||||
|
import { PlausibleChangeRequestState } from 'component/changeRequest/changeRequest.types';
|
||||||
|
|
||||||
export interface IChangeSchema {
|
export interface IChangeSchema {
|
||||||
feature: string | null;
|
feature: string | null;
|
||||||
@ -54,6 +55,7 @@ export const useChangeRequestApi = () => {
|
|||||||
const changeState = async (
|
const changeState = async (
|
||||||
project: string,
|
project: string,
|
||||||
changeRequestId: number,
|
changeRequestId: number,
|
||||||
|
previousState: PlausibleChangeRequestState,
|
||||||
payload: {
|
payload: {
|
||||||
state:
|
state:
|
||||||
| 'Approved'
|
| 'Approved'
|
||||||
@ -69,6 +71,7 @@ export const useChangeRequestApi = () => {
|
|||||||
trackEvent('change_request', {
|
trackEvent('change_request', {
|
||||||
props: {
|
props: {
|
||||||
eventType: payload.state,
|
eventType: payload.state,
|
||||||
|
previousState,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -52,7 +52,6 @@ export type CustomEvents =
|
|||||||
| 'dependent_features'
|
| 'dependent_features'
|
||||||
| 'playground_token_input_used'
|
| 'playground_token_input_used'
|
||||||
| 'search-filter'
|
| 'search-filter'
|
||||||
| 'scheduled-configuration-changes'
|
|
||||||
| 'search-feature-buttons'
|
| 'search-feature-buttons'
|
||||||
| 'new-strategy-form'
|
| 'new-strategy-form'
|
||||||
| 'feedback'
|
| 'feedback'
|
||||||
|
Loading…
Reference in New Issue
Block a user