1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-10-27 11:02:16 +01:00

refactor: update/create progression to change progression (#10843)

This commit is contained in:
Mateusz Kwasniewski 2025-10-22 15:40:30 +02:00 committed by GitHub
parent 866441a1b6
commit 0919b7b925
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
61 changed files with 310 additions and 611 deletions

View File

@ -2,8 +2,7 @@ import type { FC } from 'react';
import { styled } from '@mui/material'; import { styled } from '@mui/material';
import type { import type {
ChangeRequestState, ChangeRequestState,
IChangeRequestCreateMilestoneProgression, IChangeRequestChangeMilestoneProgression,
IChangeRequestUpdateMilestoneProgression,
IChangeRequestDeleteMilestoneProgression, IChangeRequestDeleteMilestoneProgression,
IChangeRequestFeature, IChangeRequestFeature,
} from 'component/changeRequest/changeRequest.types'; } from 'component/changeRequest/changeRequest.types';
@ -15,7 +14,7 @@ import {
ChangeItemWrapper, ChangeItemWrapper,
Deleted, Deleted,
} from './Change.styles.tsx'; } from './Change.styles.tsx';
import type { UpdateMilestoneProgressionSchema } from 'openapi'; import type { ChangeMilestoneProgressionSchema } from 'openapi';
import { MilestoneListRenderer } from './MilestoneListRenderer.tsx'; import { MilestoneListRenderer } from './MilestoneListRenderer.tsx';
import { applyProgressionChanges } from './applyProgressionChanges.js'; import { applyProgressionChanges } from './applyProgressionChanges.js';
import { EventDiff } from 'component/events/EventDiff/EventDiff'; import { EventDiff } from 'component/events/EventDiff/EventDiff';
@ -27,33 +26,15 @@ const StyledTabs = styled(Tabs)(({ theme }) => ({
})); }));
type ProgressionChange = type ProgressionChange =
| IChangeRequestCreateMilestoneProgression | IChangeRequestChangeMilestoneProgression
| IChangeRequestUpdateMilestoneProgression
| IChangeRequestDeleteMilestoneProgression; | IChangeRequestDeleteMilestoneProgression;
const getFirstChangeWithSnapshot = (
progressionChanges: ProgressionChange[],
) => {
return (
progressionChanges.find(
(change) =>
change.payload?.snapshot &&
(change.action === 'createMilestoneProgression' ||
change.action === 'updateMilestoneProgression'),
) || progressionChanges.find((change) => change.payload?.snapshot)
);
};
const getMilestonesWithAutomation = ( const getMilestonesWithAutomation = (
progressionChanges: ProgressionChange[], progressionChanges: ProgressionChange[],
): Set<string> => { ): Set<string> => {
return new Set( return new Set(
progressionChanges progressionChanges
.filter( .filter((change) => change.action === 'changeMilestoneProgression')
(change) =>
change.action === 'createMilestoneProgression' ||
change.action === 'updateMilestoneProgression',
)
.map((change) => change.payload.sourceMilestone) .map((change) => change.payload.sourceMilestone)
.filter((id): id is string => Boolean(id)), .filter((id): id is string => Boolean(id)),
); );
@ -80,11 +61,9 @@ const getChangeDescriptions = (
basePlan.milestones.find((milestone) => milestone.id === sourceId) basePlan.milestones.find((milestone) => milestone.id === sourceId)
?.name || sourceId; ?.name || sourceId;
const action = const action =
change.action === 'createMilestoneProgression' change.action === 'changeMilestoneProgression'
? 'Adding' ? 'Changing'
: change.action === 'deleteMilestoneProgression' : 'Deleting';
? 'Deleting'
: 'Updating';
return `${action} automation for ${sourceName}`; return `${action} automation for ${sourceName}`;
}); });
}; };
@ -95,7 +74,7 @@ export const ConsolidatedProgressionChanges: FC<{
changeRequestState: ChangeRequestState; changeRequestState: ChangeRequestState;
onUpdateChangeRequestSubmit?: ( onUpdateChangeRequestSubmit?: (
sourceMilestoneId: string, sourceMilestoneId: string,
payload: UpdateMilestoneProgressionSchema, payload: ChangeMilestoneProgressionSchema,
) => Promise<void>; ) => Promise<void>;
onDeleteChangeRequestSubmit?: (sourceMilestoneId: string) => Promise<void>; onDeleteChangeRequestSubmit?: (sourceMilestoneId: string) => Promise<void>;
}> = ({ }> = ({
@ -110,20 +89,15 @@ export const ConsolidatedProgressionChanges: FC<{
( (
change, change,
): change is ): change is
| IChangeRequestCreateMilestoneProgression | IChangeRequestChangeMilestoneProgression
| IChangeRequestUpdateMilestoneProgression
| IChangeRequestDeleteMilestoneProgression => | IChangeRequestDeleteMilestoneProgression =>
change.action === 'createMilestoneProgression' || change.action === 'changeMilestoneProgression' ||
change.action === 'updateMilestoneProgression' ||
change.action === 'deleteMilestoneProgression', change.action === 'deleteMilestoneProgression',
); );
if (progressionChanges.length === 0) return null; if (progressionChanges.length === 0) return null;
const firstChangeWithSnapshot = const basePlan = currentReleasePlan;
getFirstChangeWithSnapshot(progressionChanges);
const basePlan =
firstChangeWithSnapshot?.payload?.snapshot || currentReleasePlan;
if (!basePlan) { if (!basePlan) {
return null; return null;

View File

@ -207,8 +207,7 @@ export const FeatureChange: FC<{
{(change.action === 'addReleasePlan' || {(change.action === 'addReleasePlan' ||
change.action === 'deleteReleasePlan' || change.action === 'deleteReleasePlan' ||
change.action === 'startMilestone' || change.action === 'startMilestone' ||
change.action === 'createMilestoneProgression' || change.action === 'changeMilestoneProgression' ||
change.action === 'updateMilestoneProgression' ||
change.action === 'deleteMilestoneProgression') && ( change.action === 'deleteMilestoneProgression') && (
<ReleasePlanChange <ReleasePlanChange
actions={actions} actions={actions}

View File

@ -1,6 +1,6 @@
import { styled } from '@mui/material'; import { styled } from '@mui/material';
import type { IReleasePlan } from 'interfaces/releasePlans'; import type { IReleasePlan } from 'interfaces/releasePlans';
import type { UpdateMilestoneProgressionSchema } from 'openapi'; import type { ChangeMilestoneProgressionSchema } from 'openapi';
import type { ChangeRequestState } from 'component/changeRequest/changeRequest.types'; import type { ChangeRequestState } from 'component/changeRequest/changeRequest.types';
import { ReleasePlanMilestone } from 'component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/ReleasePlanMilestone'; import { ReleasePlanMilestone } from 'component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/ReleasePlanMilestone';
import { MilestoneAutomationSection } from 'component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/MilestoneAutomationSection.tsx'; import { MilestoneAutomationSection } from 'component/feature/FeatureView/FeatureOverview/ReleasePlan/ReleasePlanMilestone/MilestoneAutomationSection.tsx';
@ -22,7 +22,7 @@ interface MilestoneListRendererProps {
milestonesWithDeletedAutomation?: Set<string>; milestonesWithDeletedAutomation?: Set<string>;
onUpdateAutomation?: ( onUpdateAutomation?: (
sourceMilestoneId: string, sourceMilestoneId: string,
payload: UpdateMilestoneProgressionSchema, payload: ChangeMilestoneProgressionSchema,
) => Promise<void>; ) => Promise<void>;
onDeleteAutomation?: (sourceMilestoneId: string) => void; onDeleteAutomation?: (sourceMilestoneId: string) => void;
} }
@ -44,6 +44,7 @@ export const MilestoneListRenderer = ({
<> <>
{plan.milestones.map((milestone, index) => { {plan.milestones.map((milestone, index) => {
const isNotLastMilestone = index < plan.milestones.length - 1; const isNotLastMilestone = index < plan.milestones.length - 1;
const nextMilestoneId = plan.milestones[index + 1]?.id || '';
const shouldShowAutomation = const shouldShowAutomation =
milestonesWithAutomation.has(milestone.id) || milestonesWithAutomation.has(milestone.id) ||
milestonesWithDeletedAutomation.has(milestone.id); milestonesWithDeletedAutomation.has(milestone.id);
@ -67,6 +68,7 @@ export const MilestoneListRenderer = ({
milestone.transitionCondition milestone.transitionCondition
.intervalMinutes .intervalMinutes
} }
targetMilestoneId={nextMilestoneId}
onSave={async (payload) => { onSave={async (payload) => {
await onUpdateAutomation?.( await onUpdateAutomation?.(
milestone.id, milestone.id,

View File

@ -2,19 +2,13 @@ import type { FC, ReactNode } from 'react';
import { Typography } from '@mui/material'; import { Typography } from '@mui/material';
import type { import type {
ChangeRequestState, ChangeRequestState,
IChangeRequestCreateMilestoneProgression, IChangeRequestChangeMilestoneProgression,
IChangeRequestUpdateMilestoneProgression,
} from 'component/changeRequest/changeRequest.types'; } from 'component/changeRequest/changeRequest.types';
import type { IReleasePlan } from 'interfaces/releasePlans'; import type { IReleasePlan } from 'interfaces/releasePlans';
import type { UpdateMilestoneProgressionSchema } from 'openapi'; import type { ChangeMilestoneProgressionSchema } from 'openapi';
import { EventDiff } from 'component/events/EventDiff/EventDiff'; import { EventDiff } from 'component/events/EventDiff/EventDiff';
import { Tab, TabList, TabPanel, Tabs } from './ChangeTabComponents.tsx'; import { Tab, TabList, TabPanel, Tabs } from './ChangeTabComponents.tsx';
import { import { Action, ChangeItemInfo, ChangeItemWrapper } from './Change.styles.tsx';
Action,
Added,
ChangeItemInfo,
ChangeItemWrapper,
} from './Change.styles.tsx';
import { styled } from '@mui/material'; import { styled } from '@mui/material';
import { MilestoneListRenderer } from './MilestoneListRenderer.tsx'; import { MilestoneListRenderer } from './MilestoneListRenderer.tsx';
import { applyProgressionChanges } from './applyProgressionChanges.ts'; import { applyProgressionChanges } from './applyProgressionChanges.ts';
@ -26,15 +20,13 @@ const StyledTabs = styled(Tabs)(({ theme }) => ({
})); }));
interface ProgressionChangeProps { interface ProgressionChangeProps {
change: change: IChangeRequestChangeMilestoneProgression;
| IChangeRequestCreateMilestoneProgression
| IChangeRequestUpdateMilestoneProgression;
currentReleasePlan?: IReleasePlan; currentReleasePlan?: IReleasePlan;
actions?: ReactNode; actions?: ReactNode;
changeRequestState: ChangeRequestState; changeRequestState: ChangeRequestState;
onUpdateChangeRequestSubmit?: ( onUpdateChangeRequestSubmit?: (
sourceMilestoneId: string, sourceMilestoneId: string,
payload: UpdateMilestoneProgressionSchema, payload: ChangeMilestoneProgressionSchema,
) => Promise<void>; ) => Promise<void>;
onDeleteChangeRequestSubmit?: (sourceMilestoneId: string) => void; onDeleteChangeRequestSubmit?: (sourceMilestoneId: string) => void;
} }
@ -47,12 +39,10 @@ export const ProgressionChange: FC<ProgressionChangeProps> = ({
onUpdateChangeRequestSubmit, onUpdateChangeRequestSubmit,
onDeleteChangeRequestSubmit, onDeleteChangeRequestSubmit,
}) => { }) => {
const basePlan = change.payload.snapshot || currentReleasePlan; const basePlan = currentReleasePlan;
if (!basePlan) return null; if (!basePlan) return null;
const isCreate = change.action === 'createMilestoneProgression';
const sourceId = change.payload.sourceMilestone; const sourceId = change.payload.sourceMilestone;
if (!sourceId) return null; if (!sourceId) return null;
const sourceMilestone = basePlan.milestones.find( const sourceMilestone = basePlan.milestones.find(
@ -60,11 +50,10 @@ export const ProgressionChange: FC<ProgressionChangeProps> = ({
); );
const sourceMilestoneName = sourceMilestone?.name || sourceId; const sourceMilestoneName = sourceMilestone?.name || sourceId;
const targetMilestoneName = isCreate const targetMilestoneName =
? basePlan.milestones.find( basePlan.milestones.find(
(milestone) => milestone.id === change.payload.targetMilestone, (milestone) => milestone.id === change.payload.targetMilestone,
)?.name || change.payload.targetMilestone )?.name || change.payload.targetMilestone;
: undefined;
const modifiedPlan = applyProgressionChanges(basePlan, [change]); const modifiedPlan = applyProgressionChanges(basePlan, [change]);
@ -77,21 +66,10 @@ export const ProgressionChange: FC<ProgressionChangeProps> = ({
<StyledTabs> <StyledTabs>
<ChangeItemWrapper> <ChangeItemWrapper>
<ChangeItemInfo> <ChangeItemInfo>
{isCreate ? ( <Action>Changing automation in release plan</Action>
<> <Typography component='span'>
<Added>Adding automation to release plan</Added> {sourceMilestoneName} {targetMilestoneName}
<Typography component='span'> </Typography>
{sourceMilestoneName} {targetMilestoneName}
</Typography>
</>
) : (
<>
<Action>Updating automation in release plan</Action>
<Typography component='span'>
{sourceMilestoneName}
</Typography>
</>
)}
</ChangeItemInfo> </ChangeItemInfo>
<div> <div>
<TabList> <TabList>
@ -105,7 +83,9 @@ export const ProgressionChange: FC<ProgressionChangeProps> = ({
<MilestoneListRenderer <MilestoneListRenderer
plan={modifiedPlan} plan={modifiedPlan}
changeRequestState={changeRequestState} changeRequestState={changeRequestState}
milestonesWithAutomation={new Set([sourceId])} milestonesWithAutomation={
new Set([sourceId].filter(Boolean))
}
onUpdateAutomation={onUpdateChangeRequestSubmit} onUpdateAutomation={onUpdateChangeRequestSubmit}
onDeleteAutomation={onDeleteChangeRequestSubmit} onDeleteAutomation={onDeleteChangeRequestSubmit}
/> />

View File

@ -5,8 +5,7 @@ import type {
IChangeRequestAddReleasePlan, IChangeRequestAddReleasePlan,
IChangeRequestDeleteReleasePlan, IChangeRequestDeleteReleasePlan,
IChangeRequestStartMilestone, IChangeRequestStartMilestone,
IChangeRequestCreateMilestoneProgression, IChangeRequestChangeMilestoneProgression,
IChangeRequestUpdateMilestoneProgression,
IChangeRequestDeleteMilestoneProgression, IChangeRequestDeleteMilestoneProgression,
} from 'component/changeRequest/changeRequest.types'; } from 'component/changeRequest/changeRequest.types';
import { useReleasePlanPreview } from 'hooks/useReleasePlanPreview'; import { useReleasePlanPreview } from 'hooks/useReleasePlanPreview';
@ -27,7 +26,7 @@ import {
import { useChangeRequestApi } from 'hooks/api/actions/useChangeRequestApi/useChangeRequestApi'; import { useChangeRequestApi } from 'hooks/api/actions/useChangeRequestApi/useChangeRequestApi';
import { usePendingChangeRequests } from 'hooks/api/getters/usePendingChangeRequests/usePendingChangeRequests'; import { usePendingChangeRequests } from 'hooks/api/getters/usePendingChangeRequests/usePendingChangeRequests';
import useToast from 'hooks/useToast'; import useToast from 'hooks/useToast';
import type { UpdateMilestoneProgressionSchema } from 'openapi'; import type { ChangeMilestoneProgressionSchema } from 'openapi';
import { ProgressionChange } from './ProgressionChange.tsx'; import { ProgressionChange } from './ProgressionChange.tsx';
import { ConsolidatedProgressionChanges } from './ConsolidatedProgressionChanges.tsx'; import { ConsolidatedProgressionChanges } from './ConsolidatedProgressionChanges.tsx';
@ -245,8 +244,7 @@ export const ReleasePlanChange: FC<{
| IChangeRequestAddReleasePlan | IChangeRequestAddReleasePlan
| IChangeRequestDeleteReleasePlan | IChangeRequestDeleteReleasePlan
| IChangeRequestStartMilestone | IChangeRequestStartMilestone
| IChangeRequestCreateMilestoneProgression | IChangeRequestChangeMilestoneProgression
| IChangeRequestUpdateMilestoneProgression
| IChangeRequestDeleteMilestoneProgression; | IChangeRequestDeleteMilestoneProgression;
environmentName: string; environmentName: string;
featureName: string; featureName: string;
@ -277,11 +275,11 @@ export const ReleasePlanChange: FC<{
const handleUpdateChangeRequestSubmit = async ( const handleUpdateChangeRequestSubmit = async (
sourceMilestoneId: string, sourceMilestoneId: string,
payload: UpdateMilestoneProgressionSchema, payload: ChangeMilestoneProgressionSchema,
) => { ) => {
await addChange(projectId, environmentName, { await addChange(projectId, environmentName, {
feature: featureName, feature: featureName,
action: 'updateMilestoneProgression', action: 'changeMilestoneProgression',
payload: { payload: {
sourceMilestone: sourceMilestoneId, sourceMilestone: sourceMilestoneId,
...payload, ...payload,
@ -321,19 +319,16 @@ export const ReleasePlanChange: FC<{
// check if we should consolidate with other progression changes // check if we should consolidate with other progression changes
if ( if (
feature && feature &&
(change.action === 'createMilestoneProgression' || (change.action === 'changeMilestoneProgression' ||
change.action === 'updateMilestoneProgression' ||
change.action === 'deleteMilestoneProgression') change.action === 'deleteMilestoneProgression')
) { ) {
const progressionChanges = feature.changes.filter( const progressionChanges = feature.changes.filter(
( (
change, change,
): change is ): change is
| IChangeRequestCreateMilestoneProgression | IChangeRequestChangeMilestoneProgression
| IChangeRequestUpdateMilestoneProgression
| IChangeRequestDeleteMilestoneProgression => | IChangeRequestDeleteMilestoneProgression =>
change.action === 'createMilestoneProgression' || change.action === 'changeMilestoneProgression' ||
change.action === 'updateMilestoneProgression' ||
change.action === 'deleteMilestoneProgression', change.action === 'deleteMilestoneProgression',
); );
@ -383,8 +378,7 @@ export const ReleasePlanChange: FC<{
actions={actions} actions={actions}
/> />
)} )}
{(change.action === 'createMilestoneProgression' || {change.action === 'changeMilestoneProgression' && (
change.action === 'updateMilestoneProgression') && (
<ProgressionChange <ProgressionChange
change={change} change={change}
currentReleasePlan={currentReleasePlan} currentReleasePlan={currentReleasePlan}

View File

@ -1,13 +1,11 @@
import type { IReleasePlan } from 'interfaces/releasePlans'; import type { IReleasePlan } from 'interfaces/releasePlans';
import type { import type {
IChangeRequestCreateMilestoneProgression, IChangeRequestChangeMilestoneProgression,
IChangeRequestUpdateMilestoneProgression,
IChangeRequestDeleteMilestoneProgression, IChangeRequestDeleteMilestoneProgression,
} from 'component/changeRequest/changeRequest.types'; } from 'component/changeRequest/changeRequest.types';
type ProgressionChange = type ProgressionChange =
| IChangeRequestCreateMilestoneProgression | IChangeRequestChangeMilestoneProgression
| IChangeRequestUpdateMilestoneProgression
| IChangeRequestDeleteMilestoneProgression; | IChangeRequestDeleteMilestoneProgression;
export const applyProgressionChanges = ( export const applyProgressionChanges = (
@ -17,14 +15,9 @@ export const applyProgressionChanges = (
return { return {
...basePlan, ...basePlan,
milestones: basePlan.milestones.map((milestone) => { milestones: basePlan.milestones.map((milestone) => {
const createChange = progressionChanges.find( const changeProgression = progressionChanges.find(
(change): change is IChangeRequestCreateMilestoneProgression => (change): change is IChangeRequestChangeMilestoneProgression =>
change.action === 'createMilestoneProgression' && change.action === 'changeMilestoneProgression' &&
change.payload.sourceMilestone === milestone.id,
);
const updateChange = progressionChanges.find(
(change): change is IChangeRequestUpdateMilestoneProgression =>
change.action === 'updateMilestoneProgression' &&
change.payload.sourceMilestone === milestone.id, change.payload.sourceMilestone === milestone.id,
); );
const deleteChange = progressionChanges.find( const deleteChange = progressionChanges.find(
@ -40,11 +33,11 @@ export const applyProgressionChanges = (
}; };
} }
const change = updateChange || createChange; if (changeProgression) {
if (change) {
return { return {
...milestone, ...milestone,
transitionCondition: change.payload.transitionCondition, transitionCondition:
changeProgression.payload.transitionCondition,
}; };
} }
return milestone; return milestone;

View File

@ -2,11 +2,7 @@ import type { IFeatureVariant } from 'interfaces/featureToggle';
import type { ISegment } from 'interfaces/segment'; import type { ISegment } from 'interfaces/segment';
import type { IFeatureStrategy } from '../../interfaces/strategy.js'; import type { IFeatureStrategy } from '../../interfaces/strategy.js';
import type { IUser } from '../../interfaces/user.js'; import type { IUser } from '../../interfaces/user.js';
import type { import type { SetStrategySortOrderSchema } from 'openapi';
SetStrategySortOrderSchema,
CreateMilestoneProgressionSchema,
UpdateMilestoneProgressionSchema,
} from 'openapi';
import type { IReleasePlan } from 'interfaces/releasePlans'; import type { IReleasePlan } from 'interfaces/releasePlans';
type BaseChangeRequest = { type BaseChangeRequest = {
@ -136,8 +132,7 @@ type ChangeRequestPayload =
| ChangeRequestAddReleasePlan | ChangeRequestAddReleasePlan
| ChangeRequestDeleteReleasePlan | ChangeRequestDeleteReleasePlan
| ChangeRequestStartMilestone | ChangeRequestStartMilestone
| ChangeRequestCreateMilestoneProgression | ChangeRequestChangeMilestoneProgression
| ChangeRequestUpdateMilestoneProgression
| ChangeRequestDeleteMilestoneProgression; | ChangeRequestDeleteMilestoneProgression;
export interface IChangeRequestAddStrategy extends IChangeRequestChangeBase { export interface IChangeRequestAddStrategy extends IChangeRequestChangeBase {
@ -195,16 +190,10 @@ export interface IChangeRequestStartMilestone extends IChangeRequestChangeBase {
payload: ChangeRequestStartMilestone; payload: ChangeRequestStartMilestone;
} }
export interface IChangeRequestCreateMilestoneProgression export interface IChangeRequestChangeMilestoneProgression
extends IChangeRequestChangeBase { extends IChangeRequestChangeBase {
action: 'createMilestoneProgression'; action: 'changeMilestoneProgression';
payload: ChangeRequestCreateMilestoneProgression; payload: ChangeRequestChangeMilestoneProgression;
}
export interface IChangeRequestUpdateMilestoneProgression
extends IChangeRequestChangeBase {
action: 'updateMilestoneProgression';
payload: ChangeRequestUpdateMilestoneProgression;
} }
export interface IChangeRequestDeleteMilestoneProgression export interface IChangeRequestDeleteMilestoneProgression
@ -261,8 +250,7 @@ export type IFeatureChange =
| IChangeRequestAddReleasePlan | IChangeRequestAddReleasePlan
| IChangeRequestDeleteReleasePlan | IChangeRequestDeleteReleasePlan
| IChangeRequestStartMilestone | IChangeRequestStartMilestone
| IChangeRequestCreateMilestoneProgression | IChangeRequestChangeMilestoneProgression
| IChangeRequestUpdateMilestoneProgression
| IChangeRequestDeleteMilestoneProgression; | IChangeRequestDeleteMilestoneProgression;
export type ISegmentChange = export type ISegmentChange =
@ -296,22 +284,14 @@ type ChangeRequestStartMilestone = {
snapshot?: IReleasePlan; snapshot?: IReleasePlan;
}; };
type ChangeRequestCreateMilestoneProgression = type ChangeRequestChangeMilestoneProgression = {
CreateMilestoneProgressionSchema & { sourceMilestone: string;
snapshot?: IReleasePlan; targetMilestone: string;
}; transitionCondition: { intervalMinutes: number };
};
type ChangeRequestUpdateMilestoneProgression =
UpdateMilestoneProgressionSchema & {
sourceMilestoneId?: string;
sourceMilestone?: string; // Backward compatibility for existing change requests
snapshot?: IReleasePlan;
};
type ChangeRequestDeleteMilestoneProgression = { type ChangeRequestDeleteMilestoneProgression = {
sourceMilestoneId?: string; sourceMilestone: string;
sourceMilestone?: string; // Backward compatibility for existing change requests
snapshot?: IReleasePlan;
}; };
export type ChangeRequestAddStrategy = Pick< export type ChangeRequestAddStrategy = Pick<
@ -352,6 +332,5 @@ export type ChangeRequestAction =
| 'addReleasePlan' | 'addReleasePlan'
| 'deleteReleasePlan' | 'deleteReleasePlan'
| 'startMilestone' | 'startMilestone'
| 'createMilestoneProgression' | 'changeMilestoneProgression'
| 'updateMilestoneProgression'
| 'deleteMilestoneProgression'; | 'deleteMilestoneProgression';

View File

@ -4,10 +4,7 @@ import type {
IReleasePlan, IReleasePlan,
IReleasePlanMilestone, IReleasePlanMilestone,
} from 'interfaces/releasePlans'; } from 'interfaces/releasePlans';
import type { import type { ChangeMilestoneProgressionSchema } from 'openapi';
CreateMilestoneProgressionSchema,
UpdateMilestoneProgressionSchema,
} from 'openapi';
import { getTimeValueAndUnitFromMinutes } from '../hooks/useMilestoneProgressionForm.js'; import { getTimeValueAndUnitFromMinutes } from '../hooks/useMilestoneProgressionForm.js';
const StyledBoldSpan = styled('span')(({ theme }) => ({ const StyledBoldSpan = styled('span')(({ theme }) => ({
@ -24,13 +21,8 @@ type ChangeRequestAction =
milestone: IReleasePlanMilestone; milestone: IReleasePlanMilestone;
} }
| { | {
type: 'createMilestoneProgression'; type: 'changeMilestoneProgression';
payload: CreateMilestoneProgressionSchema; payload: ChangeMilestoneProgressionSchema;
}
| {
type: 'updateMilestoneProgression';
sourceMilestoneId: string;
payload: UpdateMilestoneProgressionSchema;
} }
| { | {
type: 'deleteMilestoneProgression'; type: 'deleteMilestoneProgression';
@ -91,7 +83,7 @@ export const ReleasePlanChangeRequestDialog = ({
</p> </p>
); );
case 'createMilestoneProgression': { case 'changeMilestoneProgression': {
const sourceMilestone = releasePlan.milestones.find( const sourceMilestone = releasePlan.milestones.find(
(milestone) => (milestone) =>
milestone.id === action.payload.sourceMilestone, milestone.id === action.payload.sourceMilestone,
@ -108,7 +100,7 @@ export const ReleasePlanChangeRequestDialog = ({
return ( return (
<p> <p>
Create automation to proceed from{' '} Configure automation to proceed from{' '}
<StyledBoldSpan>{sourceMilestone?.name}</StyledBoldSpan>{' '} <StyledBoldSpan>{sourceMilestone?.name}</StyledBoldSpan>{' '}
to{' '} to{' '}
<StyledBoldSpan>{targetMilestone?.name}</StyledBoldSpan>{' '} <StyledBoldSpan>{targetMilestone?.name}</StyledBoldSpan>{' '}
@ -118,27 +110,6 @@ export const ReleasePlanChangeRequestDialog = ({
); );
} }
case 'updateMilestoneProgression': {
const milestone = releasePlan.milestones.find(
(milestone) => milestone.id === action.sourceMilestoneId,
);
const { value, unit } = getTimeValueAndUnitFromMinutes(
action.payload.transitionCondition.intervalMinutes,
);
const timeInterval = `${value} ${unit}`;
return (
<p>
Update automation for{' '}
<StyledBoldSpan>{milestone?.name}</StyledBoldSpan> to
proceed after{' '}
<StyledBoldSpan>{timeInterval}</StyledBoldSpan> in{' '}
{environmentId}
</p>
);
}
case 'deleteMilestoneProgression': { case 'deleteMilestoneProgression': {
const milestone = releasePlan.milestones.find( const milestone = releasePlan.milestones.find(
(milestone) => milestone.id === action.sourceMilestoneId, (milestone) => milestone.id === action.sourceMilestoneId,

View File

@ -2,7 +2,7 @@ import { Button, styled } from '@mui/material';
import BoltIcon from '@mui/icons-material/Bolt'; import BoltIcon from '@mui/icons-material/Bolt';
import { useMilestoneProgressionForm } from '../hooks/useMilestoneProgressionForm.js'; import { useMilestoneProgressionForm } from '../hooks/useMilestoneProgressionForm.js';
import { MilestoneProgressionTimeInput } from './MilestoneProgressionTimeInput.tsx'; import { MilestoneProgressionTimeInput } from './MilestoneProgressionTimeInput.tsx';
import type { CreateMilestoneProgressionSchema } from 'openapi'; import type { ChangeMilestoneProgressionSchema } from 'openapi';
const StyledFormContainer = styled('div')(({ theme }) => ({ const StyledFormContainer = styled('div')(({ theme }) => ({
display: 'flex', display: 'flex',
@ -55,7 +55,9 @@ const StyledErrorMessage = styled('span')(({ theme }) => ({
interface IMilestoneProgressionFormProps { interface IMilestoneProgressionFormProps {
sourceMilestoneId: string; sourceMilestoneId: string;
targetMilestoneId: string; targetMilestoneId: string;
onSubmit: (payload: CreateMilestoneProgressionSchema) => Promise<void>; onSubmit: (
payload: ChangeMilestoneProgressionSchema,
) => Promise<{ shouldReset?: boolean }>;
onCancel: () => void; onCancel: () => void;
} }

View File

@ -22,10 +22,7 @@ import { Truncator } from 'component/common/Truncator/Truncator';
import { useUiFlag } from 'hooks/useUiFlag'; import { useUiFlag } from 'hooks/useUiFlag';
import { useMilestoneProgressionsApi } from 'hooks/api/actions/useMilestoneProgressionsApi/useMilestoneProgressionsApi'; import { useMilestoneProgressionsApi } from 'hooks/api/actions/useMilestoneProgressionsApi/useMilestoneProgressionsApi';
import { DeleteProgressionDialog } from './DeleteProgressionDialog.tsx'; import { DeleteProgressionDialog } from './DeleteProgressionDialog.tsx';
import type { import type { ChangeMilestoneProgressionSchema } from 'openapi';
CreateMilestoneProgressionSchema,
UpdateMilestoneProgressionSchema,
} from 'openapi';
import { ReleasePlanMilestoneItem } from './ReleasePlanMilestoneItem/ReleasePlanMilestoneItem.tsx'; import { ReleasePlanMilestoneItem } from './ReleasePlanMilestoneItem/ReleasePlanMilestoneItem.tsx';
const StyledContainer = styled('div')(({ theme }) => ({ const StyledContainer = styled('div')(({ theme }) => ({
@ -111,13 +108,8 @@ export const ReleasePlan = ({
| { type: 'removeReleasePlan'; environmentActive: boolean } | { type: 'removeReleasePlan'; environmentActive: boolean }
| { type: 'startMilestone'; milestone: IReleasePlanMilestone } | { type: 'startMilestone'; milestone: IReleasePlanMilestone }
| { | {
type: 'createMilestoneProgression'; type: 'changeMilestoneProgression';
payload: CreateMilestoneProgressionSchema; payload: ChangeMilestoneProgressionSchema;
}
| {
type: 'updateMilestoneProgression';
sourceMilestoneId: string;
payload: UpdateMilestoneProgressionSchema;
} }
| { | {
type: 'deleteMilestoneProgression'; type: 'deleteMilestoneProgression';
@ -201,25 +193,14 @@ export const ReleasePlan = ({
}); });
break; break;
case 'createMilestoneProgression': case 'changeMilestoneProgression':
await addChange(projectId, environment, { await addChange(projectId, environment, {
feature: featureName, feature: featureName,
action: 'createMilestoneProgression', action: 'changeMilestoneProgression',
payload: changeRequestAction.payload, payload: changeRequestAction.payload,
}); });
break; break;
case 'updateMilestoneProgression':
await addChange(projectId, environment, {
feature: featureName,
action: 'updateMilestoneProgression',
payload: {
sourceMilestone: changeRequestAction.sourceMilestoneId,
...changeRequestAction.payload,
},
});
break;
case 'deleteMilestoneProgression': case 'deleteMilestoneProgression':
await addChange(projectId, environment, { await addChange(projectId, environment, {
feature: featureName, feature: featureName,
@ -314,18 +295,10 @@ export const ReleasePlan = ({
}); });
}; };
const handleAddToChangeRequest = ( const handleAddToChangeRequest = (action: {
action: type: 'changeMilestoneProgression';
| { payload: ChangeMilestoneProgressionSchema;
type: 'createMilestoneProgression'; }) => {
payload: CreateMilestoneProgressionSchema;
}
| {
type: 'updateMilestoneProgression';
sourceMilestoneId: string;
payload: UpdateMilestoneProgressionSchema;
},
) => {
setChangeRequestAction(action); setChangeRequestAction(action);
}; };

View File

@ -7,7 +7,7 @@ import {
useMilestoneProgressionForm, useMilestoneProgressionForm,
getTimeValueAndUnitFromMinutes, getTimeValueAndUnitFromMinutes,
} from '../hooks/useMilestoneProgressionForm.js'; } from '../hooks/useMilestoneProgressionForm.js';
import type { UpdateMilestoneProgressionSchema } from 'openapi'; import type { ChangeMilestoneProgressionSchema } from 'openapi';
import type { ReactNode } from 'react'; import type { ReactNode } from 'react';
import { useEffect } from 'react'; import { useEffect } from 'react';
@ -58,8 +58,9 @@ const StyledButtonGroup = styled('div')(({ theme }) => ({
interface IMilestoneTransitionDisplayProps { interface IMilestoneTransitionDisplayProps {
intervalMinutes: number; intervalMinutes: number;
targetMilestoneId: string;
onSave: ( onSave: (
payload: UpdateMilestoneProgressionSchema, payload: ChangeMilestoneProgressionSchema,
) => Promise<{ shouldReset?: boolean }>; ) => Promise<{ shouldReset?: boolean }>;
onDelete: () => void; onDelete: () => void;
milestoneName: string; milestoneName: string;
@ -69,6 +70,7 @@ interface IMilestoneTransitionDisplayProps {
export const MilestoneTransitionDisplay = ({ export const MilestoneTransitionDisplay = ({
intervalMinutes, intervalMinutes,
targetMilestoneId,
onSave, onSave,
onDelete, onDelete,
milestoneName, milestoneName,
@ -97,7 +99,8 @@ export const MilestoneTransitionDisplay = ({
const handleSave = async () => { const handleSave = async () => {
if (!hasChanged) return; if (!hasChanged) return;
const payload: UpdateMilestoneProgressionSchema = { const payload: ChangeMilestoneProgressionSchema = {
targetMilestone: targetMilestoneId,
transitionCondition: { transitionCondition: {
intervalMinutes: currentIntervalMinutes, intervalMinutes: currentIntervalMinutes,
}, },

View File

@ -2,10 +2,7 @@ import Add from '@mui/icons-material/Add';
import { Button, styled } from '@mui/material'; import { Button, styled } from '@mui/material';
import { Badge } from 'component/common/Badge/Badge'; import { Badge } from 'component/common/Badge/Badge';
import type { IReleasePlanMilestone } from 'interfaces/releasePlans'; import type { IReleasePlanMilestone } from 'interfaces/releasePlans';
import type { import type { ChangeMilestoneProgressionSchema } from 'openapi';
CreateMilestoneProgressionSchema,
UpdateMilestoneProgressionSchema,
} from 'openapi';
import { MilestoneAutomationSection } from '../ReleasePlanMilestone/MilestoneAutomationSection.tsx'; import { MilestoneAutomationSection } from '../ReleasePlanMilestone/MilestoneAutomationSection.tsx';
import { MilestoneTransitionDisplay } from '../ReleasePlanMilestone/MilestoneTransitionDisplay.tsx'; import { MilestoneTransitionDisplay } from '../ReleasePlanMilestone/MilestoneTransitionDisplay.tsx';
import type { MilestoneStatus } from '../ReleasePlanMilestone/ReleasePlanMilestoneStatus.tsx'; import type { MilestoneStatus } from '../ReleasePlanMilestone/ReleasePlanMilestoneStatus.tsx';
@ -57,11 +54,8 @@ interface MilestoneAutomationProps {
pendingProgressionChange: PendingProgressionChange | null; pendingProgressionChange: PendingProgressionChange | null;
onOpenProgressionForm: () => void; onOpenProgressionForm: () => void;
onCloseProgressionForm: () => void; onCloseProgressionForm: () => void;
onCreateProgression: ( onChangeProgression: (
payload: CreateMilestoneProgressionSchema, payload: ChangeMilestoneProgressionSchema,
) => Promise<void>;
onUpdateProgression: (
payload: UpdateMilestoneProgressionSchema,
) => Promise<{ shouldReset?: boolean }>; ) => Promise<{ shouldReset?: boolean }>;
onDeleteProgression: (milestone: IReleasePlanMilestone) => void; onDeleteProgression: (milestone: IReleasePlanMilestone) => void;
} }
@ -78,8 +72,7 @@ export const MilestoneAutomation = ({
pendingProgressionChange, pendingProgressionChange,
onOpenProgressionForm, onOpenProgressionForm,
onCloseProgressionForm, onCloseProgressionForm,
onCreateProgression, onChangeProgression,
onUpdateProgression,
onDeleteProgression, onDeleteProgression,
}: MilestoneAutomationProps) => { }: MilestoneAutomationProps) => {
const showAutomation = const showAutomation =
@ -108,7 +101,7 @@ export const MilestoneAutomation = ({
<MilestoneProgressionForm <MilestoneProgressionForm
sourceMilestoneId={milestone.id} sourceMilestoneId={milestone.id}
targetMilestoneId={nextMilestoneId} targetMilestoneId={nextMilestoneId}
onSubmit={onCreateProgression} onSubmit={onChangeProgression}
onCancel={onCloseProgressionForm} onCancel={onCloseProgressionForm}
/> />
) : effectiveTransitionCondition ? ( ) : effectiveTransitionCondition ? (
@ -116,7 +109,8 @@ export const MilestoneAutomation = ({
intervalMinutes={ intervalMinutes={
effectiveTransitionCondition.intervalMinutes effectiveTransitionCondition.intervalMinutes
} }
onSave={onUpdateProgression} targetMilestoneId={nextMilestoneId}
onSave={onChangeProgression}
onDelete={() => onDeleteProgression(milestone)} onDelete={() => onDeleteProgression(milestone)}
milestoneName={milestone.name} milestoneName={milestone.name}
status={status} status={status}

View File

@ -1,10 +1,7 @@
import { styled } from '@mui/material'; import { styled } from '@mui/material';
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender'; import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
import type { IReleasePlanMilestone } from 'interfaces/releasePlans'; import type { IReleasePlanMilestone } from 'interfaces/releasePlans';
import type { import type { ChangeMilestoneProgressionSchema } from 'openapi';
CreateMilestoneProgressionSchema,
UpdateMilestoneProgressionSchema,
} from 'openapi';
import { ReleasePlanMilestone } from '../ReleasePlanMilestone/ReleasePlanMilestone.tsx'; import { ReleasePlanMilestone } from '../ReleasePlanMilestone/ReleasePlanMilestone.tsx';
import { useMilestoneProgressionsApi } from 'hooks/api/actions/useMilestoneProgressionsApi/useMilestoneProgressionsApi'; import { useMilestoneProgressionsApi } from 'hooks/api/actions/useMilestoneProgressionsApi/useMilestoneProgressionsApi';
import { useChangeRequestsEnabled } from 'hooks/useChangeRequestsEnabled'; import { useChangeRequestsEnabled } from 'hooks/useChangeRequestsEnabled';
@ -44,18 +41,10 @@ export interface IReleasePlanMilestoneItemProps {
onSetProgressionFormOpenIndex: (index: number | null) => void; onSetProgressionFormOpenIndex: (index: number | null) => void;
onStartMilestone?: (milestone: IReleasePlanMilestone) => void; onStartMilestone?: (milestone: IReleasePlanMilestone) => void;
onDeleteProgression: (milestone: IReleasePlanMilestone) => void; onDeleteProgression: (milestone: IReleasePlanMilestone) => void;
onAddToChangeRequest: ( onAddToChangeRequest: (action: {
action: type: 'changeMilestoneProgression';
| { payload: ChangeMilestoneProgressionSchema;
type: 'createMilestoneProgression'; }) => void;
payload: CreateMilestoneProgressionSchema;
}
| {
type: 'updateMilestoneProgression';
sourceMilestoneId: string;
payload: UpdateMilestoneProgressionSchema;
},
) => void;
getPendingProgressionChange: ( getPendingProgressionChange: (
sourceMilestoneId: string, sourceMilestoneId: string,
) => PendingProgressionChange | null; ) => PendingProgressionChange | null;
@ -85,8 +74,7 @@ export const ReleasePlanMilestoneItem = ({
featureName, featureName,
onUpdate, onUpdate,
}: IReleasePlanMilestoneItemProps) => { }: IReleasePlanMilestoneItemProps) => {
const { createMilestoneProgression, updateMilestoneProgression } = const { changeMilestoneProgression } = useMilestoneProgressionsApi();
useMilestoneProgressionsApi();
const { isChangeRequestConfigured } = useChangeRequestsEnabled(projectId); const { isChangeRequestConfigured } = useChangeRequestsEnabled(projectId);
const { setToastData, setToastApiError } = useToast(); const { setToastData, setToastApiError } = useToast();
@ -98,50 +86,22 @@ export const ReleasePlanMilestoneItem = ({
const handleCloseProgressionForm = () => const handleCloseProgressionForm = () =>
onSetProgressionFormOpenIndex(null); onSetProgressionFormOpenIndex(null);
const handleCreateProgression = async ( const handleChangeProgression = async (
payload: CreateMilestoneProgressionSchema, payload: ChangeMilestoneProgressionSchema,
) => {
if (isChangeRequestConfigured(environment)) {
onAddToChangeRequest({
type: 'createMilestoneProgression',
payload,
});
handleCloseProgressionForm();
return;
}
try {
await createMilestoneProgression(
projectId,
environment,
featureName,
payload,
);
setToastData({
type: 'success',
text: 'Automation configured successfully',
});
handleCloseProgressionForm();
await onUpdate();
} catch (error: unknown) {
setToastApiError(formatUnknownError(error));
}
};
const handleUpdateProgression = async (
payload: UpdateMilestoneProgressionSchema,
): Promise<{ shouldReset?: boolean }> => { ): Promise<{ shouldReset?: boolean }> => {
if (isChangeRequestConfigured(environment)) { if (isChangeRequestConfigured(environment)) {
onAddToChangeRequest({ onAddToChangeRequest({
type: 'updateMilestoneProgression', type: 'changeMilestoneProgression',
sourceMilestoneId: milestone.id, payload: {
payload, ...payload,
sourceMilestone: milestone.id,
},
}); });
return { shouldReset: true }; return { shouldReset: true };
} }
try { try {
await updateMilestoneProgression( await changeMilestoneProgression(
projectId, projectId,
environment, environment,
featureName, featureName,
@ -150,8 +110,9 @@ export const ReleasePlanMilestoneItem = ({
); );
setToastData({ setToastData({
type: 'success', type: 'success',
text: 'Automation updated successfully', text: 'Automation configured successfully',
}); });
handleCloseProgressionForm();
await onUpdate(); await onUpdate();
return {}; return {};
} catch (error: unknown) { } catch (error: unknown) {
@ -187,8 +148,7 @@ export const ReleasePlanMilestoneItem = ({
pendingProgressionChange={pendingProgressionChange} pendingProgressionChange={pendingProgressionChange}
onOpenProgressionForm={handleOpenProgressionForm} onOpenProgressionForm={handleOpenProgressionForm}
onCloseProgressionForm={handleCloseProgressionForm} onCloseProgressionForm={handleCloseProgressionForm}
onCreateProgression={handleCreateProgression} onChangeProgression={handleChangeProgression}
onUpdateProgression={handleUpdateProgression}
onDeleteProgression={onDeleteProgression} onDeleteProgression={onDeleteProgression}
/> />
) : undefined; ) : undefined;

View File

@ -22,8 +22,7 @@ export interface IChangeSchema {
| 'addReleasePlan' | 'addReleasePlan'
| 'deleteReleasePlan' | 'deleteReleasePlan'
| 'startMilestone' | 'startMilestone'
| 'createMilestoneProgression' | 'changeMilestoneProgression'
| 'updateMilestoneProgression'
| 'deleteMilestoneProgression'; | 'deleteMilestoneProgression';
payload: string | boolean | object | number | undefined; payload: string | boolean | object | number | undefined;
} }

View File

@ -1,40 +1,19 @@
import useAPI from '../useApi/useApi.js'; import useAPI from '../useApi/useApi.js';
import type { CreateMilestoneProgressionSchema } from 'openapi/models/createMilestoneProgressionSchema'; import type { ChangeMilestoneProgressionSchema } from 'openapi/models/changeMilestoneProgressionSchema';
import type { UpdateMilestoneProgressionSchema } from 'openapi/models/updateMilestoneProgressionSchema';
export const useMilestoneProgressionsApi = () => { export const useMilestoneProgressionsApi = () => {
const { makeRequest, createRequest, errors, loading } = useAPI({ const { makeRequest, createRequest, errors, loading } = useAPI({
propagateErrors: true, propagateErrors: true,
}); });
const createMilestoneProgression = async ( const changeMilestoneProgression = async (
projectId: string,
environment: string,
featureName: string,
body: CreateMilestoneProgressionSchema,
): Promise<void> => {
const requestId = 'createMilestoneProgression';
const path = `api/admin/projects/${projectId}/features/${featureName}/environments/${environment}/progressions`;
const req = createRequest(
path,
{
method: 'POST',
body: JSON.stringify(body),
},
requestId,
);
await makeRequest(req.caller, req.id);
};
const updateMilestoneProgression = async (
projectId: string, projectId: string,
environment: string, environment: string,
featureName: string, featureName: string,
sourceMilestoneId: string, sourceMilestoneId: string,
body: UpdateMilestoneProgressionSchema, body: ChangeMilestoneProgressionSchema,
): Promise<void> => { ): Promise<void> => {
const requestId = 'updateMilestoneProgression'; const requestId = 'changeMilestoneProgression';
const path = `api/admin/projects/${projectId}/features/${featureName}/environments/${environment}/progressions/${sourceMilestoneId}`; const path = `api/admin/projects/${projectId}/features/${featureName}/environments/${environment}/progressions/${sourceMilestoneId}`;
const req = createRequest( const req = createRequest(
path, path,
@ -68,8 +47,7 @@ export const useMilestoneProgressionsApi = () => {
}; };
return { return {
createMilestoneProgression, changeMilestoneProgression,
updateMilestoneProgression,
deleteMilestoneProgression, deleteMilestoneProgression,
errors, errors,
loading, loading,

View File

@ -4,7 +4,7 @@
* See `gen:api` script in package.json * See `gen:api` script in package.json
*/ */
export type CreateMilestoneProgression403 = { export type ChangeMilestoneProgression401 = {
/** The ID of the error instance */ /** The ID of the error instance */
id?: string; id?: string;
/** A description of what went wrong. */ /** A description of what went wrong. */

View File

@ -4,7 +4,7 @@
* See `gen:api` script in package.json * See `gen:api` script in package.json
*/ */
export type CreateMilestoneProgression401 = { export type ChangeMilestoneProgression403 = {
/** The ID of the error instance */ /** The ID of the error instance */
id?: string; id?: string;
/** A description of what went wrong. */ /** A description of what went wrong. */

View File

@ -5,9 +5,13 @@
*/ */
import type { TransitionConditionSchema } from './transitionConditionSchema.js'; import type { TransitionConditionSchema } from './transitionConditionSchema.js';
export type ChangeRequestOneOrManyCreateSchemaOneOfThreesevenPayload = { /**
/** The ID of the source milestone with progression to update. */ * Request body to create or update a milestone progression
sourceMilestone: string; */
export interface ChangeMilestoneProgressionSchema {
/** The ID of the target milestone */
targetMilestone: string;
/** The condition configuration for the transition */ /** The condition configuration for the transition */
transitionCondition: TransitionConditionSchema; transitionCondition: TransitionConditionSchema;
}; [key: string]: unknown;
}

View File

@ -16,8 +16,7 @@ import type { ChangeRequestCreateFeatureSchemaOneOfTwotwo } from './changeReques
import type { ChangeRequestCreateFeatureSchemaOneOfTwofour } from './changeRequestCreateFeatureSchemaOneOfTwofour.js'; import type { ChangeRequestCreateFeatureSchemaOneOfTwofour } from './changeRequestCreateFeatureSchemaOneOfTwofour.js';
import type { ChangeRequestCreateFeatureSchemaOneOfTwoseven } from './changeRequestCreateFeatureSchemaOneOfTwoseven.js'; import type { ChangeRequestCreateFeatureSchemaOneOfTwoseven } from './changeRequestCreateFeatureSchemaOneOfTwoseven.js';
import type { ChangeRequestCreateFeatureSchemaOneOfThreezero } from './changeRequestCreateFeatureSchemaOneOfThreezero.js'; import type { ChangeRequestCreateFeatureSchemaOneOfThreezero } from './changeRequestCreateFeatureSchemaOneOfThreezero.js';
import type { ChangeRequestCreateFeatureSchemaOneOfThreetwo } from './changeRequestCreateFeatureSchemaOneOfThreetwo.js'; import type { ChangeRequestCreateFeatureSchemaOneOfThreethree } from './changeRequestCreateFeatureSchemaOneOfThreethree.js';
import type { ChangeRequestCreateFeatureSchemaOneOfThreefive } from './changeRequestCreateFeatureSchemaOneOfThreefive.js';
/** /**
* Data used to create a [change request](https://docs.getunleash.io/reference/change-requests) for a single feature change. * Data used to create a [change request](https://docs.getunleash.io/reference/change-requests) for a single feature change.
@ -36,5 +35,4 @@ export type ChangeRequestCreateFeatureSchema =
| ChangeRequestCreateFeatureSchemaOneOfTwofour | ChangeRequestCreateFeatureSchemaOneOfTwofour
| ChangeRequestCreateFeatureSchemaOneOfTwoseven | ChangeRequestCreateFeatureSchemaOneOfTwoseven
| ChangeRequestCreateFeatureSchemaOneOfThreezero | ChangeRequestCreateFeatureSchemaOneOfThreezero
| ChangeRequestCreateFeatureSchemaOneOfThreetwo | ChangeRequestCreateFeatureSchemaOneOfThreethree;
| ChangeRequestCreateFeatureSchemaOneOfThreefive;

View File

@ -1,18 +0,0 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
import type { ChangeRequestCreateFeatureSchemaOneOfThreefiveAction } from './changeRequestCreateFeatureSchemaOneOfThreefiveAction.js';
import type { ChangeRequestCreateFeatureSchemaOneOfThreefivePayload } from './changeRequestCreateFeatureSchemaOneOfThreefivePayload.js';
/**
* Delete milestone progression.
*/
export type ChangeRequestCreateFeatureSchemaOneOfThreefive = {
/** The name of this action. */
action: ChangeRequestCreateFeatureSchemaOneOfThreefiveAction;
/** The name of the feature that this change applies to. */
feature: string;
payload: ChangeRequestCreateFeatureSchemaOneOfThreefivePayload;
};

View File

@ -1,16 +0,0 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
/**
* The name of this action.
*/
export type ChangeRequestCreateFeatureSchemaOneOfThreefiveAction =
(typeof ChangeRequestCreateFeatureSchemaOneOfThreefiveAction)[keyof typeof ChangeRequestCreateFeatureSchemaOneOfThreefiveAction];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const ChangeRequestCreateFeatureSchemaOneOfThreefiveAction = {
deleteMilestoneProgression: 'deleteMilestoneProgression',
} as const;

View File

@ -0,0 +1,18 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
import type { ChangeRequestCreateFeatureSchemaOneOfThreethreeAction } from './changeRequestCreateFeatureSchemaOneOfThreethreeAction.js';
import type { ChangeRequestCreateFeatureSchemaOneOfThreethreePayload } from './changeRequestCreateFeatureSchemaOneOfThreethreePayload.js';
/**
* Delete milestone progression.
*/
export type ChangeRequestCreateFeatureSchemaOneOfThreethree = {
/** The name of this action. */
action: ChangeRequestCreateFeatureSchemaOneOfThreethreeAction;
/** The name of the feature that this change applies to. */
feature: string;
payload: ChangeRequestCreateFeatureSchemaOneOfThreethreePayload;
};

View File

@ -7,10 +7,10 @@
/** /**
* The name of this action. * The name of this action.
*/ */
export type ChangeRequestOneOrManyCreateSchemaOneOfFourzeroAction = export type ChangeRequestCreateFeatureSchemaOneOfThreethreeAction =
(typeof ChangeRequestOneOrManyCreateSchemaOneOfFourzeroAction)[keyof typeof ChangeRequestOneOrManyCreateSchemaOneOfFourzeroAction]; (typeof ChangeRequestCreateFeatureSchemaOneOfThreethreeAction)[keyof typeof ChangeRequestCreateFeatureSchemaOneOfThreethreeAction];
// eslint-disable-next-line @typescript-eslint/no-redeclare // eslint-disable-next-line @typescript-eslint/no-redeclare
export const ChangeRequestOneOrManyCreateSchemaOneOfFourzeroAction = { export const ChangeRequestCreateFeatureSchemaOneOfThreethreeAction = {
deleteMilestoneProgression: 'deleteMilestoneProgression', deleteMilestoneProgression: 'deleteMilestoneProgression',
} as const; } as const;

View File

@ -4,7 +4,7 @@
* See `gen:api` script in package.json * See `gen:api` script in package.json
*/ */
export type ChangeRequestOneOrManyCreateSchemaOneOfFourzeroPayload = { export type ChangeRequestCreateFeatureSchemaOneOfThreethreePayload = {
/** The ID of the source milestone with progression to delete. */ /** The ID of the source milestone with progression to delete. */
sourceMilestone: string; sourceMilestone: string;
}; };

View File

@ -1,18 +0,0 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
import type { ChangeRequestCreateFeatureSchemaOneOfThreetwoAction } from './changeRequestCreateFeatureSchemaOneOfThreetwoAction.js';
import type { ChangeRequestCreateFeatureSchemaOneOfThreetwoPayload } from './changeRequestCreateFeatureSchemaOneOfThreetwoPayload.js';
/**
* Update milestone progression transition condition.
*/
export type ChangeRequestCreateFeatureSchemaOneOfThreetwo = {
/** The name of this action. */
action: ChangeRequestCreateFeatureSchemaOneOfThreetwoAction;
/** The name of the feature that this change applies to. */
feature: string;
payload: ChangeRequestCreateFeatureSchemaOneOfThreetwoPayload;
};

View File

@ -1,16 +0,0 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
/**
* The name of this action.
*/
export type ChangeRequestCreateFeatureSchemaOneOfThreetwoAction =
(typeof ChangeRequestCreateFeatureSchemaOneOfThreetwoAction)[keyof typeof ChangeRequestCreateFeatureSchemaOneOfThreetwoAction];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const ChangeRequestCreateFeatureSchemaOneOfThreetwoAction = {
updateMilestoneProgression: 'updateMilestoneProgression',
} as const;

View File

@ -4,15 +4,15 @@
* See `gen:api` script in package.json * See `gen:api` script in package.json
*/ */
import type { ChangeRequestCreateFeatureSchemaOneOfThreezeroAction } from './changeRequestCreateFeatureSchemaOneOfThreezeroAction.js'; import type { ChangeRequestCreateFeatureSchemaOneOfThreezeroAction } from './changeRequestCreateFeatureSchemaOneOfThreezeroAction.js';
import type { CreateMilestoneProgressionSchema } from './createMilestoneProgressionSchema.js'; import type { ChangeRequestCreateFeatureSchemaOneOfThreezeroPayload } from './changeRequestCreateFeatureSchemaOneOfThreezeroPayload.js';
/** /**
* Create milestone progression from one milestone to another. * Create or update milestone progression from one milestone to another.
*/ */
export type ChangeRequestCreateFeatureSchemaOneOfThreezero = { export type ChangeRequestCreateFeatureSchemaOneOfThreezero = {
/** The name of this action. */ /** The name of this action. */
action: ChangeRequestCreateFeatureSchemaOneOfThreezeroAction; action: ChangeRequestCreateFeatureSchemaOneOfThreezeroAction;
/** The name of the feature that this change applies to. */ /** The name of the feature that this change applies to. */
feature: string; feature: string;
payload: CreateMilestoneProgressionSchema; payload: ChangeRequestCreateFeatureSchemaOneOfThreezeroPayload;
}; };

View File

@ -12,5 +12,5 @@ export type ChangeRequestCreateFeatureSchemaOneOfThreezeroAction =
// eslint-disable-next-line @typescript-eslint/no-redeclare // eslint-disable-next-line @typescript-eslint/no-redeclare
export const ChangeRequestCreateFeatureSchemaOneOfThreezeroAction = { export const ChangeRequestCreateFeatureSchemaOneOfThreezeroAction = {
createMilestoneProgression: 'createMilestoneProgression', changeMilestoneProgression: 'changeMilestoneProgression',
} as const; } as const;

View File

@ -5,14 +5,11 @@
*/ */
import type { TransitionConditionSchema } from './transitionConditionSchema.js'; import type { TransitionConditionSchema } from './transitionConditionSchema.js';
/** export type ChangeRequestCreateFeatureSchemaOneOfThreezeroPayload = {
* Request body to create a milestone progression
*/
export interface CreateMilestoneProgressionSchema {
/** The ID of the source milestone */ /** The ID of the source milestone */
sourceMilestone: string; sourceMilestone: string;
/** The ID of the target milestone */ /** The ID of the target milestone */
targetMilestone: string; targetMilestone: string;
/** The condition configuration for the transition */ /** The condition configuration for the transition */
transitionCondition: TransitionConditionSchema; transitionCondition: TransitionConditionSchema;
} };

View File

@ -18,8 +18,7 @@ import type { ChangeRequestCreateSchemaOneOfTwoseven } from './changeRequestCrea
import type { ChangeRequestCreateSchemaOneOfTwonine } from './changeRequestCreateSchemaOneOfTwonine.js'; import type { ChangeRequestCreateSchemaOneOfTwonine } from './changeRequestCreateSchemaOneOfTwonine.js';
import type { ChangeRequestCreateSchemaOneOfThreetwo } from './changeRequestCreateSchemaOneOfThreetwo.js'; import type { ChangeRequestCreateSchemaOneOfThreetwo } from './changeRequestCreateSchemaOneOfThreetwo.js';
import type { ChangeRequestCreateSchemaOneOfThreefive } from './changeRequestCreateSchemaOneOfThreefive.js'; import type { ChangeRequestCreateSchemaOneOfThreefive } from './changeRequestCreateSchemaOneOfThreefive.js';
import type { ChangeRequestCreateSchemaOneOfThreeseven } from './changeRequestCreateSchemaOneOfThreeseven.js'; import type { ChangeRequestCreateSchemaOneOfThreeeight } from './changeRequestCreateSchemaOneOfThreeeight.js';
import type { ChangeRequestCreateSchemaOneOfFourzero } from './changeRequestCreateSchemaOneOfFourzero.js';
/** /**
* Data used to create a [change request](https://docs.getunleash.io/reference/change-requests) for a single feature or segment change. * Data used to create a [change request](https://docs.getunleash.io/reference/change-requests) for a single feature or segment change.
@ -40,5 +39,4 @@ export type ChangeRequestCreateSchema =
| ChangeRequestCreateSchemaOneOfTwonine | ChangeRequestCreateSchemaOneOfTwonine
| ChangeRequestCreateSchemaOneOfThreetwo | ChangeRequestCreateSchemaOneOfThreetwo
| ChangeRequestCreateSchemaOneOfThreefive | ChangeRequestCreateSchemaOneOfThreefive
| ChangeRequestCreateSchemaOneOfThreeseven | ChangeRequestCreateSchemaOneOfThreeeight;
| ChangeRequestCreateSchemaOneOfFourzero;

View File

@ -1,18 +0,0 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
import type { ChangeRequestCreateSchemaOneOfFourzeroAction } from './changeRequestCreateSchemaOneOfFourzeroAction.js';
import type { ChangeRequestCreateSchemaOneOfFourzeroPayload } from './changeRequestCreateSchemaOneOfFourzeroPayload.js';
/**
* Delete milestone progression.
*/
export type ChangeRequestCreateSchemaOneOfFourzero = {
/** The name of this action. */
action: ChangeRequestCreateSchemaOneOfFourzeroAction;
/** The name of the feature that this change applies to. */
feature: string;
payload: ChangeRequestCreateSchemaOneOfFourzeroPayload;
};

View File

@ -0,0 +1,18 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
import type { ChangeRequestCreateSchemaOneOfThreeeightAction } from './changeRequestCreateSchemaOneOfThreeeightAction.js';
import type { ChangeRequestCreateSchemaOneOfThreeeightPayload } from './changeRequestCreateSchemaOneOfThreeeightPayload.js';
/**
* Delete milestone progression.
*/
export type ChangeRequestCreateSchemaOneOfThreeeight = {
/** The name of this action. */
action: ChangeRequestCreateSchemaOneOfThreeeightAction;
/** The name of the feature that this change applies to. */
feature: string;
payload: ChangeRequestCreateSchemaOneOfThreeeightPayload;
};

View File

@ -7,10 +7,10 @@
/** /**
* The name of this action. * The name of this action.
*/ */
export type ChangeRequestCreateSchemaOneOfFourzeroAction = export type ChangeRequestCreateSchemaOneOfThreeeightAction =
(typeof ChangeRequestCreateSchemaOneOfFourzeroAction)[keyof typeof ChangeRequestCreateSchemaOneOfFourzeroAction]; (typeof ChangeRequestCreateSchemaOneOfThreeeightAction)[keyof typeof ChangeRequestCreateSchemaOneOfThreeeightAction];
// eslint-disable-next-line @typescript-eslint/no-redeclare // eslint-disable-next-line @typescript-eslint/no-redeclare
export const ChangeRequestCreateSchemaOneOfFourzeroAction = { export const ChangeRequestCreateSchemaOneOfThreeeightAction = {
deleteMilestoneProgression: 'deleteMilestoneProgression', deleteMilestoneProgression: 'deleteMilestoneProgression',
} as const; } as const;

View File

@ -4,7 +4,7 @@
* See `gen:api` script in package.json * See `gen:api` script in package.json
*/ */
export type ChangeRequestCreateSchemaOneOfFourzeroPayload = { export type ChangeRequestCreateSchemaOneOfThreeeightPayload = {
/** The ID of the source milestone with progression to delete. */ /** The ID of the source milestone with progression to delete. */
sourceMilestone: string; sourceMilestone: string;
}; };

View File

@ -4,15 +4,15 @@
* See `gen:api` script in package.json * See `gen:api` script in package.json
*/ */
import type { ChangeRequestCreateSchemaOneOfThreefiveAction } from './changeRequestCreateSchemaOneOfThreefiveAction.js'; import type { ChangeRequestCreateSchemaOneOfThreefiveAction } from './changeRequestCreateSchemaOneOfThreefiveAction.js';
import type { CreateMilestoneProgressionSchema } from './createMilestoneProgressionSchema.js'; import type { ChangeRequestCreateSchemaOneOfThreefivePayload } from './changeRequestCreateSchemaOneOfThreefivePayload.js';
/** /**
* Create milestone progression from one milestone to another. * Create or update milestone progression from one milestone to another.
*/ */
export type ChangeRequestCreateSchemaOneOfThreefive = { export type ChangeRequestCreateSchemaOneOfThreefive = {
/** The name of this action. */ /** The name of this action. */
action: ChangeRequestCreateSchemaOneOfThreefiveAction; action: ChangeRequestCreateSchemaOneOfThreefiveAction;
/** The name of the feature that this change applies to. */ /** The name of the feature that this change applies to. */
feature: string; feature: string;
payload: CreateMilestoneProgressionSchema; payload: ChangeRequestCreateSchemaOneOfThreefivePayload;
}; };

View File

@ -12,5 +12,5 @@ export type ChangeRequestCreateSchemaOneOfThreefiveAction =
// eslint-disable-next-line @typescript-eslint/no-redeclare // eslint-disable-next-line @typescript-eslint/no-redeclare
export const ChangeRequestCreateSchemaOneOfThreefiveAction = { export const ChangeRequestCreateSchemaOneOfThreefiveAction = {
createMilestoneProgression: 'createMilestoneProgression', changeMilestoneProgression: 'changeMilestoneProgression',
} as const; } as const;

View File

@ -5,9 +5,11 @@
*/ */
import type { TransitionConditionSchema } from './transitionConditionSchema.js'; import type { TransitionConditionSchema } from './transitionConditionSchema.js';
export type ChangeRequestCreateFeatureSchemaOneOfThreetwoPayload = { export type ChangeRequestCreateSchemaOneOfThreefivePayload = {
/** The ID of the source milestone with progression to update. */ /** The ID of the source milestone */
sourceMilestone: string; sourceMilestone: string;
/** The ID of the target milestone */
targetMilestone: string;
/** The condition configuration for the transition */ /** The condition configuration for the transition */
transitionCondition: TransitionConditionSchema; transitionCondition: TransitionConditionSchema;
}; };

View File

@ -1,18 +0,0 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
import type { ChangeRequestCreateSchemaOneOfThreesevenAction } from './changeRequestCreateSchemaOneOfThreesevenAction.js';
import type { ChangeRequestCreateSchemaOneOfThreesevenPayload } from './changeRequestCreateSchemaOneOfThreesevenPayload.js';
/**
* Update milestone progression transition condition.
*/
export type ChangeRequestCreateSchemaOneOfThreeseven = {
/** The name of this action. */
action: ChangeRequestCreateSchemaOneOfThreesevenAction;
/** The name of the feature that this change applies to. */
feature: string;
payload: ChangeRequestCreateSchemaOneOfThreesevenPayload;
};

View File

@ -1,16 +0,0 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
/**
* The name of this action.
*/
export type ChangeRequestCreateSchemaOneOfThreesevenAction =
(typeof ChangeRequestCreateSchemaOneOfThreesevenAction)[keyof typeof ChangeRequestCreateSchemaOneOfThreesevenAction];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const ChangeRequestCreateSchemaOneOfThreesevenAction = {
updateMilestoneProgression: 'updateMilestoneProgression',
} as const;

View File

@ -18,8 +18,7 @@ import type { ChangeRequestOneOrManyCreateSchemaOneOfTwoseven } from './changeRe
import type { ChangeRequestOneOrManyCreateSchemaOneOfTwonine } from './changeRequestOneOrManyCreateSchemaOneOfTwonine.js'; import type { ChangeRequestOneOrManyCreateSchemaOneOfTwonine } from './changeRequestOneOrManyCreateSchemaOneOfTwonine.js';
import type { ChangeRequestOneOrManyCreateSchemaOneOfThreetwo } from './changeRequestOneOrManyCreateSchemaOneOfThreetwo.js'; import type { ChangeRequestOneOrManyCreateSchemaOneOfThreetwo } from './changeRequestOneOrManyCreateSchemaOneOfThreetwo.js';
import type { ChangeRequestOneOrManyCreateSchemaOneOfThreefive } from './changeRequestOneOrManyCreateSchemaOneOfThreefive.js'; import type { ChangeRequestOneOrManyCreateSchemaOneOfThreefive } from './changeRequestOneOrManyCreateSchemaOneOfThreefive.js';
import type { ChangeRequestOneOrManyCreateSchemaOneOfThreeseven } from './changeRequestOneOrManyCreateSchemaOneOfThreeseven.js'; import type { ChangeRequestOneOrManyCreateSchemaOneOfThreeeight } from './changeRequestOneOrManyCreateSchemaOneOfThreeeight.js';
import type { ChangeRequestOneOrManyCreateSchemaOneOfFourzero } from './changeRequestOneOrManyCreateSchemaOneOfFourzero.js';
import type { ChangeRequestCreateSchema } from './changeRequestCreateSchema.js'; import type { ChangeRequestCreateSchema } from './changeRequestCreateSchema.js';
/** /**
@ -41,6 +40,5 @@ export type ChangeRequestOneOrManyCreateSchema =
| ChangeRequestOneOrManyCreateSchemaOneOfTwonine | ChangeRequestOneOrManyCreateSchemaOneOfTwonine
| ChangeRequestOneOrManyCreateSchemaOneOfThreetwo | ChangeRequestOneOrManyCreateSchemaOneOfThreetwo
| ChangeRequestOneOrManyCreateSchemaOneOfThreefive | ChangeRequestOneOrManyCreateSchemaOneOfThreefive
| ChangeRequestOneOrManyCreateSchemaOneOfThreeseven | ChangeRequestOneOrManyCreateSchemaOneOfThreeeight
| ChangeRequestOneOrManyCreateSchemaOneOfFourzero
| ChangeRequestCreateSchema[]; | ChangeRequestCreateSchema[];

View File

@ -1,18 +0,0 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
import type { ChangeRequestOneOrManyCreateSchemaOneOfFourzeroAction } from './changeRequestOneOrManyCreateSchemaOneOfFourzeroAction.js';
import type { ChangeRequestOneOrManyCreateSchemaOneOfFourzeroPayload } from './changeRequestOneOrManyCreateSchemaOneOfFourzeroPayload.js';
/**
* Delete milestone progression.
*/
export type ChangeRequestOneOrManyCreateSchemaOneOfFourzero = {
/** The name of this action. */
action: ChangeRequestOneOrManyCreateSchemaOneOfFourzeroAction;
/** The name of the feature that this change applies to. */
feature: string;
payload: ChangeRequestOneOrManyCreateSchemaOneOfFourzeroPayload;
};

View File

@ -0,0 +1,18 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
import type { ChangeRequestOneOrManyCreateSchemaOneOfThreeeightAction } from './changeRequestOneOrManyCreateSchemaOneOfThreeeightAction.js';
import type { ChangeRequestOneOrManyCreateSchemaOneOfThreeeightPayload } from './changeRequestOneOrManyCreateSchemaOneOfThreeeightPayload.js';
/**
* Delete milestone progression.
*/
export type ChangeRequestOneOrManyCreateSchemaOneOfThreeeight = {
/** The name of this action. */
action: ChangeRequestOneOrManyCreateSchemaOneOfThreeeightAction;
/** The name of the feature that this change applies to. */
feature: string;
payload: ChangeRequestOneOrManyCreateSchemaOneOfThreeeightPayload;
};

View File

@ -0,0 +1,16 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
/**
* The name of this action.
*/
export type ChangeRequestOneOrManyCreateSchemaOneOfThreeeightAction =
(typeof ChangeRequestOneOrManyCreateSchemaOneOfThreeeightAction)[keyof typeof ChangeRequestOneOrManyCreateSchemaOneOfThreeeightAction];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const ChangeRequestOneOrManyCreateSchemaOneOfThreeeightAction = {
deleteMilestoneProgression: 'deleteMilestoneProgression',
} as const;

View File

@ -4,7 +4,7 @@
* See `gen:api` script in package.json * See `gen:api` script in package.json
*/ */
export type ChangeRequestCreateFeatureSchemaOneOfThreefivePayload = { export type ChangeRequestOneOrManyCreateSchemaOneOfThreeeightPayload = {
/** The ID of the source milestone with progression to delete. */ /** The ID of the source milestone with progression to delete. */
sourceMilestone: string; sourceMilestone: string;
}; };

View File

@ -4,15 +4,15 @@
* See `gen:api` script in package.json * See `gen:api` script in package.json
*/ */
import type { ChangeRequestOneOrManyCreateSchemaOneOfThreefiveAction } from './changeRequestOneOrManyCreateSchemaOneOfThreefiveAction.js'; import type { ChangeRequestOneOrManyCreateSchemaOneOfThreefiveAction } from './changeRequestOneOrManyCreateSchemaOneOfThreefiveAction.js';
import type { CreateMilestoneProgressionSchema } from './createMilestoneProgressionSchema.js'; import type { ChangeRequestOneOrManyCreateSchemaOneOfThreefivePayload } from './changeRequestOneOrManyCreateSchemaOneOfThreefivePayload.js';
/** /**
* Create milestone progression from one milestone to another. * Create or update milestone progression from one milestone to another.
*/ */
export type ChangeRequestOneOrManyCreateSchemaOneOfThreefive = { export type ChangeRequestOneOrManyCreateSchemaOneOfThreefive = {
/** The name of this action. */ /** The name of this action. */
action: ChangeRequestOneOrManyCreateSchemaOneOfThreefiveAction; action: ChangeRequestOneOrManyCreateSchemaOneOfThreefiveAction;
/** The name of the feature that this change applies to. */ /** The name of the feature that this change applies to. */
feature: string; feature: string;
payload: CreateMilestoneProgressionSchema; payload: ChangeRequestOneOrManyCreateSchemaOneOfThreefivePayload;
}; };

View File

@ -12,5 +12,5 @@ export type ChangeRequestOneOrManyCreateSchemaOneOfThreefiveAction =
// eslint-disable-next-line @typescript-eslint/no-redeclare // eslint-disable-next-line @typescript-eslint/no-redeclare
export const ChangeRequestOneOrManyCreateSchemaOneOfThreefiveAction = { export const ChangeRequestOneOrManyCreateSchemaOneOfThreefiveAction = {
createMilestoneProgression: 'createMilestoneProgression', changeMilestoneProgression: 'changeMilestoneProgression',
} as const; } as const;

View File

@ -5,9 +5,11 @@
*/ */
import type { TransitionConditionSchema } from './transitionConditionSchema.js'; import type { TransitionConditionSchema } from './transitionConditionSchema.js';
export type ChangeRequestCreateSchemaOneOfThreesevenPayload = { export type ChangeRequestOneOrManyCreateSchemaOneOfThreefivePayload = {
/** The ID of the source milestone with progression to update. */ /** The ID of the source milestone */
sourceMilestone: string; sourceMilestone: string;
/** The ID of the target milestone */
targetMilestone: string;
/** The condition configuration for the transition */ /** The condition configuration for the transition */
transitionCondition: TransitionConditionSchema; transitionCondition: TransitionConditionSchema;
}; };

View File

@ -1,18 +0,0 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
import type { ChangeRequestOneOrManyCreateSchemaOneOfThreesevenAction } from './changeRequestOneOrManyCreateSchemaOneOfThreesevenAction.js';
import type { ChangeRequestOneOrManyCreateSchemaOneOfThreesevenPayload } from './changeRequestOneOrManyCreateSchemaOneOfThreesevenPayload.js';
/**
* Update milestone progression transition condition.
*/
export type ChangeRequestOneOrManyCreateSchemaOneOfThreeseven = {
/** The name of this action. */
action: ChangeRequestOneOrManyCreateSchemaOneOfThreesevenAction;
/** The name of the feature that this change applies to. */
feature: string;
payload: ChangeRequestOneOrManyCreateSchemaOneOfThreesevenPayload;
};

View File

@ -1,16 +0,0 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
/**
* The name of this action.
*/
export type ChangeRequestOneOrManyCreateSchemaOneOfThreesevenAction =
(typeof ChangeRequestOneOrManyCreateSchemaOneOfThreesevenAction)[keyof typeof ChangeRequestOneOrManyCreateSchemaOneOfThreesevenAction];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const ChangeRequestOneOrManyCreateSchemaOneOfThreesevenAction = {
updateMilestoneProgression: 'updateMilestoneProgression',
} as const;

View File

@ -22,7 +22,7 @@ export interface DetailedInvoicesLineSchema {
/** Optional start date for the metered period */ /** Optional start date for the metered period */
startDate?: string; startDate?: string;
/** Total amount for this line item in minor currency units */ /** Total amount for this line item in minor currency units */
totalAmount: number; totalAmount?: number;
/** Unit price for usage line items */ /** Unit price for the line item */
unitPrice?: number; unitPrice?: number;
} }

View File

@ -27,7 +27,7 @@ export type DetailedInvoicesSchemaInvoicesItem = {
/** Tax amount for the invoice */ /** Tax amount for the invoice */
taxAmount: number; taxAmount: number;
/** Tax percentage for the invoice */ /** Tax percentage for the invoice */
taxPercentage?: number; taxPercentage: number;
/** Total amount for the invoice */ /** Total amount for the invoice */
totalAmount: number; totalAmount: number;
/** Usage line items (traffic, consumption usage, overages) */ /** Usage line items (traffic, consumption usage, overages) */

View File

@ -4,7 +4,7 @@
* See `gen:api` script in package.json * See `gen:api` script in package.json
*/ */
export type UpdateMilestoneProgression401 = { export type EdgeInstanceHeartbeat400 = {
/** The ID of the error instance */ /** The ID of the error instance */
id?: string; id?: string;
/** A description of what went wrong. */ /** A description of what went wrong. */

View File

@ -0,0 +1,14 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
import type { EdgeLicenseStateSchemaEdgeLicenseState } from './edgeLicenseStateSchemaEdgeLicenseState.js';
/**
* A model representing the Edge license state response.
*/
export interface EdgeLicenseStateSchema {
/** State of the current Enterprise Edge license */
edgeLicenseState: EdgeLicenseStateSchemaEdgeLicenseState;
}

View File

@ -0,0 +1,18 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
/**
* State of the current Enterprise Edge license
*/
export type EdgeLicenseStateSchemaEdgeLicenseState =
(typeof EdgeLicenseStateSchemaEdgeLicenseState)[keyof typeof EdgeLicenseStateSchemaEdgeLicenseState];
// eslint-disable-next-line @typescript-eslint/no-redeclare
export const EdgeLicenseStateSchemaEdgeLicenseState = {
Valid: 'Valid',
Invalid: 'Invalid',
Expired: 'Expired',
} as const;

View File

@ -173,6 +173,7 @@ export const EventSchemaType = {
'milestone-progression-created': 'milestone-progression-created', 'milestone-progression-created': 'milestone-progression-created',
'milestone-progression-updated': 'milestone-progression-updated', 'milestone-progression-updated': 'milestone-progression-updated',
'milestone-progression-deleted': 'milestone-progression-deleted', 'milestone-progression-deleted': 'milestone-progression-deleted',
'milestone-progression-changed': 'milestone-progression-changed',
'user-preference-updated': 'user-preference-updated', 'user-preference-updated': 'user-preference-updated',
'scim-users-deleted': 'scim-users-deleted', 'scim-users-deleted': 'scim-users-deleted',
'scim-groups-deleted': 'scim-groups-deleted', 'scim-groups-deleted': 'scim-groups-deleted',

View File

@ -141,6 +141,9 @@ export * from './bulkToggleFeaturesEnvironmentOn415.js';
export * from './bulkToggleFeaturesSchema.js'; export * from './bulkToggleFeaturesSchema.js';
export * from './cdnApiTokenSchema.js'; export * from './cdnApiTokenSchema.js';
export * from './cdnApiTokensSchema.js'; export * from './cdnApiTokensSchema.js';
export * from './changeMilestoneProgression401.js';
export * from './changeMilestoneProgression403.js';
export * from './changeMilestoneProgressionSchema.js';
export * from './changePassword401.js'; export * from './changePassword401.js';
export * from './changePassword403.js'; export * from './changePassword403.js';
export * from './changePassword415.js'; export * from './changePassword415.js';
@ -185,14 +188,12 @@ export * from './changeRequestCreateFeatureSchemaOneOfOnethreePayload.js';
export * from './changeRequestCreateFeatureSchemaOneOfPayload.js'; export * from './changeRequestCreateFeatureSchemaOneOfPayload.js';
export * from './changeRequestCreateFeatureSchemaOneOfSix.js'; export * from './changeRequestCreateFeatureSchemaOneOfSix.js';
export * from './changeRequestCreateFeatureSchemaOneOfSixAction.js'; export * from './changeRequestCreateFeatureSchemaOneOfSixAction.js';
export * from './changeRequestCreateFeatureSchemaOneOfThreefive.js'; export * from './changeRequestCreateFeatureSchemaOneOfThreethree.js';
export * from './changeRequestCreateFeatureSchemaOneOfThreefiveAction.js'; export * from './changeRequestCreateFeatureSchemaOneOfThreethreeAction.js';
export * from './changeRequestCreateFeatureSchemaOneOfThreefivePayload.js'; export * from './changeRequestCreateFeatureSchemaOneOfThreethreePayload.js';
export * from './changeRequestCreateFeatureSchemaOneOfThreetwo.js';
export * from './changeRequestCreateFeatureSchemaOneOfThreetwoAction.js';
export * from './changeRequestCreateFeatureSchemaOneOfThreetwoPayload.js';
export * from './changeRequestCreateFeatureSchemaOneOfThreezero.js'; export * from './changeRequestCreateFeatureSchemaOneOfThreezero.js';
export * from './changeRequestCreateFeatureSchemaOneOfThreezeroAction.js'; export * from './changeRequestCreateFeatureSchemaOneOfThreezeroAction.js';
export * from './changeRequestCreateFeatureSchemaOneOfThreezeroPayload.js';
export * from './changeRequestCreateFeatureSchemaOneOfTwofour.js'; export * from './changeRequestCreateFeatureSchemaOneOfTwofour.js';
export * from './changeRequestCreateFeatureSchemaOneOfTwofourAction.js'; export * from './changeRequestCreateFeatureSchemaOneOfTwofourAction.js';
export * from './changeRequestCreateFeatureSchemaOneOfTwofourPayload.js'; export * from './changeRequestCreateFeatureSchemaOneOfTwofourPayload.js';
@ -206,9 +207,6 @@ export * from './changeRequestCreateFeatureSchemaOneOfTwozeroAction.js';
export * from './changeRequestCreateSchema.js'; export * from './changeRequestCreateSchema.js';
export * from './changeRequestCreateSchemaOneOf.js'; export * from './changeRequestCreateSchemaOneOf.js';
export * from './changeRequestCreateSchemaOneOfAction.js'; export * from './changeRequestCreateSchemaOneOfAction.js';
export * from './changeRequestCreateSchemaOneOfFourzero.js';
export * from './changeRequestCreateSchemaOneOfFourzeroAction.js';
export * from './changeRequestCreateSchemaOneOfFourzeroPayload.js';
export * from './changeRequestCreateSchemaOneOfNine.js'; export * from './changeRequestCreateSchemaOneOfNine.js';
export * from './changeRequestCreateSchemaOneOfNineAction.js'; export * from './changeRequestCreateSchemaOneOfNineAction.js';
export * from './changeRequestCreateSchemaOneOfOneeight.js'; export * from './changeRequestCreateSchemaOneOfOneeight.js';
@ -227,11 +225,12 @@ export * from './changeRequestCreateSchemaOneOfSixPayload.js';
export * from './changeRequestCreateSchemaOneOfThree.js'; export * from './changeRequestCreateSchemaOneOfThree.js';
export * from './changeRequestCreateSchemaOneOfThreeAction.js'; export * from './changeRequestCreateSchemaOneOfThreeAction.js';
export * from './changeRequestCreateSchemaOneOfThreePayload.js'; export * from './changeRequestCreateSchemaOneOfThreePayload.js';
export * from './changeRequestCreateSchemaOneOfThreeeight.js';
export * from './changeRequestCreateSchemaOneOfThreeeightAction.js';
export * from './changeRequestCreateSchemaOneOfThreeeightPayload.js';
export * from './changeRequestCreateSchemaOneOfThreefive.js'; export * from './changeRequestCreateSchemaOneOfThreefive.js';
export * from './changeRequestCreateSchemaOneOfThreefiveAction.js'; export * from './changeRequestCreateSchemaOneOfThreefiveAction.js';
export * from './changeRequestCreateSchemaOneOfThreeseven.js'; export * from './changeRequestCreateSchemaOneOfThreefivePayload.js';
export * from './changeRequestCreateSchemaOneOfThreesevenAction.js';
export * from './changeRequestCreateSchemaOneOfThreesevenPayload.js';
export * from './changeRequestCreateSchemaOneOfThreetwo.js'; export * from './changeRequestCreateSchemaOneOfThreetwo.js';
export * from './changeRequestCreateSchemaOneOfThreetwoAction.js'; export * from './changeRequestCreateSchemaOneOfThreetwoAction.js';
export * from './changeRequestCreateSchemaOneOfThreetwoPayload.js'; export * from './changeRequestCreateSchemaOneOfThreetwoPayload.js';
@ -259,9 +258,6 @@ export * from './changeRequestFeatureSchema.js';
export * from './changeRequestOneOrManyCreateSchema.js'; export * from './changeRequestOneOrManyCreateSchema.js';
export * from './changeRequestOneOrManyCreateSchemaOneOf.js'; export * from './changeRequestOneOrManyCreateSchemaOneOf.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfAction.js'; export * from './changeRequestOneOrManyCreateSchemaOneOfAction.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfFourzero.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfFourzeroAction.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfFourzeroPayload.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfNine.js'; export * from './changeRequestOneOrManyCreateSchemaOneOfNine.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfNineAction.js'; export * from './changeRequestOneOrManyCreateSchemaOneOfNineAction.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfOneeight.js'; export * from './changeRequestOneOrManyCreateSchemaOneOfOneeight.js';
@ -280,11 +276,12 @@ export * from './changeRequestOneOrManyCreateSchemaOneOfSixPayload.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfThree.js'; export * from './changeRequestOneOrManyCreateSchemaOneOfThree.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfThreeAction.js'; export * from './changeRequestOneOrManyCreateSchemaOneOfThreeAction.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfThreePayload.js'; export * from './changeRequestOneOrManyCreateSchemaOneOfThreePayload.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfThreeeight.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfThreeeightAction.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfThreeeightPayload.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfThreefive.js'; export * from './changeRequestOneOrManyCreateSchemaOneOfThreefive.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfThreefiveAction.js'; export * from './changeRequestOneOrManyCreateSchemaOneOfThreefiveAction.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfThreeseven.js'; export * from './changeRequestOneOrManyCreateSchemaOneOfThreefivePayload.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfThreesevenAction.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfThreesevenPayload.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfThreetwo.js'; export * from './changeRequestOneOrManyCreateSchemaOneOfThreetwo.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfThreetwoAction.js'; export * from './changeRequestOneOrManyCreateSchemaOneOfThreetwoAction.js';
export * from './changeRequestOneOrManyCreateSchemaOneOfThreetwoPayload.js'; export * from './changeRequestOneOrManyCreateSchemaOneOfThreetwoPayload.js';
@ -464,9 +461,6 @@ export * from './createImpactMetricsConfigSchemaLabelSelectors.js';
export * from './createImpactMetricsConfigSchemaTimeRange.js'; export * from './createImpactMetricsConfigSchemaTimeRange.js';
export * from './createImpactMetricsConfigSchemaYAxisMin.js'; export * from './createImpactMetricsConfigSchemaYAxisMin.js';
export * from './createInvitedUserSchema.js'; export * from './createInvitedUserSchema.js';
export * from './createMilestoneProgression401.js';
export * from './createMilestoneProgression403.js';
export * from './createMilestoneProgressionSchema.js';
export * from './createPat401.js'; export * from './createPat401.js';
export * from './createPat403.js'; export * from './createPat403.js';
export * from './createPat404.js'; export * from './createPat404.js';
@ -642,12 +636,15 @@ export * from './doraFeaturesSchema.js';
export * from './edgeEndpointTrafficSchema.js'; export * from './edgeEndpointTrafficSchema.js';
export * from './edgeInstanceDataSchema.js'; export * from './edgeInstanceDataSchema.js';
export * from './edgeInstanceDataSchemaHosting.js'; export * from './edgeInstanceDataSchemaHosting.js';
export * from './edgeInstanceHeartbeat400.js';
export * from './edgeInstanceTrafficSchema.js'; export * from './edgeInstanceTrafficSchema.js';
export * from './edgeInstanceTrafficSchemaAccessDenied.js'; export * from './edgeInstanceTrafficSchemaAccessDenied.js';
export * from './edgeInstanceTrafficSchemaCachedResponses.js'; export * from './edgeInstanceTrafficSchemaCachedResponses.js';
export * from './edgeInstanceTrafficSchemaGet.js'; export * from './edgeInstanceTrafficSchemaGet.js';
export * from './edgeInstanceTrafficSchemaPost.js'; export * from './edgeInstanceTrafficSchemaPost.js';
export * from './edgeLatencyMetricsSchema.js'; export * from './edgeLatencyMetricsSchema.js';
export * from './edgeLicenseStateSchema.js';
export * from './edgeLicenseStateSchemaEdgeLicenseState.js';
export * from './edgeProcessMetricsSchema.js'; export * from './edgeProcessMetricsSchema.js';
export * from './edgeRequestStatsSchema.js'; export * from './edgeRequestStatsSchema.js';
export * from './edgeTokenSchema.js'; export * from './edgeTokenSchema.js';
@ -988,6 +985,7 @@ export * from './legalValueSchema.js';
export * from './licenseCheckSchema.js'; export * from './licenseCheckSchema.js';
export * from './licenseCheckSchemaMessageType.js'; export * from './licenseCheckSchemaMessageType.js';
export * from './licenseReadSchema.js'; export * from './licenseReadSchema.js';
export * from './licenseReadSchemaResources.js';
export * from './licenseUpdateSchema.js'; export * from './licenseUpdateSchema.js';
export * from './licensedUserSchema.js'; export * from './licensedUserSchema.js';
export * from './licensedUsersSchema.js'; export * from './licensedUsersSchema.js';
@ -1504,10 +1502,6 @@ export * from './updateLicense400.js';
export * from './updateLicense401.js'; export * from './updateLicense401.js';
export * from './updateLicense403.js'; export * from './updateLicense403.js';
export * from './updateLicense415.js'; export * from './updateLicense415.js';
export * from './updateMilestoneProgression401.js';
export * from './updateMilestoneProgression403.js';
export * from './updateMilestoneProgression404.js';
export * from './updateMilestoneProgressionSchema.js';
export * from './updateMilestoneStrategy401.js'; export * from './updateMilestoneStrategy401.js';
export * from './updateMilestoneStrategy403.js'; export * from './updateMilestoneStrategy403.js';
export * from './updateMilestoneStrategy404.js'; export * from './updateMilestoneStrategy404.js';

View File

@ -3,6 +3,7 @@
* Do not edit manually. * Do not edit manually.
* See `gen:api` script in package.json * See `gen:api` script in package.json
*/ */
import type { LicenseReadSchemaResources } from './licenseReadSchemaResources.js';
/** /**
* A model representing a license response. * A model representing a license response.
@ -22,10 +23,8 @@ export interface LicenseReadSchema {
isValid: boolean; isValid: boolean;
/** Name of plan that the license is for. */ /** Name of plan that the license is for. */
plan?: string; plan?: string;
/** Number of release templates in the license. */ /** The resources available in the license. */
releaseTemplates?: number; resources?: LicenseReadSchemaResources;
/** Number of seats in the license. */
seats?: number;
/** The actual license token. */ /** The actual license token. */
token?: string; token?: string;
/** Type of license. */ /** Type of license. */

View File

@ -0,0 +1,17 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
/**
* The resources available in the license.
*/
export type LicenseReadSchemaResources = {
/** Number of Edge instances in the license. */
edgeInstances?: number;
/** Number of release templates in the license. */
releaseTemplates?: number;
/** Number of seats in the license. */
seats?: number;
};

View File

@ -1,14 +0,0 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
export type UpdateMilestoneProgression403 = {
/** The ID of the error instance */
id?: string;
/** A description of what went wrong. */
message?: string;
/** The name of the error kind */
name?: string;
};

View File

@ -1,14 +0,0 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
export type UpdateMilestoneProgression404 = {
/** The ID of the error instance */
id?: string;
/** A description of what went wrong. */
message?: string;
/** The name of the error kind */
name?: string;
};

View File

@ -1,14 +0,0 @@
/**
* Generated by Orval
* Do not edit manually.
* See `gen:api` script in package.json
*/
import type { TransitionConditionSchema } from './transitionConditionSchema.js';
/**
* Request body to update a milestone progression transition condition
*/
export interface UpdateMilestoneProgressionSchema {
/** The updated condition configuration for the transition */
transitionCondition: TransitionConditionSchema;
}