1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-11-10 01:19:53 +01:00
Commit Graph

295 Commits

Author SHA1 Message Date
kwasniew
92d03d2058
fix: switch to new change milestone endpoint 2025-10-22 14:55:11 +02:00
FredrikOseberg
0e2c57ed87
feat: initial spike on refactoring to change 2025-10-22 13:58:16 +02:00
Fredrik Strand Oseberg
866441a1b6
feat: change request progression view (#10835) 2025-10-22 12:27:24 +02:00
Thomas Heartman
b9d81e5f59
chore: align text to cell top (#10837)
First part of UI refactoring for the change requests table: align
content to the top of the cell to facilitate scanning the table.

To facilitate this, I've mad the paginated table stylable by adding a
class name.

Before:
<img width="1810" height="1500" alt="image"
src="https://github.com/user-attachments/assets/febc9471-5d57-4afa-a9b0-0d22044fcd92"
/>

After:
<img width="1809" height="1326" alt="image"
src="https://github.com/user-attachments/assets/e6aea2e9-0f1d-42f9-bd09-ad7317acbd4e"
/>
2025-10-21 14:08:03 +02:00
Mateusz Kwasniewski
f37fde2a27
feat: release plan cr conflict (#10831) 2025-10-20 15:39:06 +02:00
Gastón Fournier
91ecf2fabd
chore: remove uuid from the frontend (#10808)
Frontend only of: https://github.com/Unleash/unleash/pull/10806

## About the changes
This PR drops the uuid package from node modules and replaces it with
standard randomUUID usage that is available from 14.17 onwards, and we
have a minimum requirement of node 20 at Unleash.

[Node.js
crypto](https://nodejs.org/api/crypto.html#cryptorandomuuidoptions)
[Web
crypto](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/randomUUID)

Co-authored-by: Anastasiia Hladina <anastasiia.hladina@gmail.com>
2025-10-17 10:31:48 +02:00
Fredrik Strand Oseberg
795b674133
feat: add change request support for updating milestone progressions (#10819) 2025-10-16 16:52:02 +02:00
Fredrik Strand Oseberg
154dc6f5eb
feat: add change request support for milestone progressions (#10814) 2025-10-16 11:57:28 +02:00
Fredrik Strand Oseberg
bc740bbe2f
feat: add milestone progression UI with projected start times (#10790) 2025-10-13 17:02:30 +02:00
Fredrik Strand Oseberg
386c7d5bc6
chore: get release plans from features endpoint (#10764) 2025-10-09 10:12:56 +02:00
Tymoteusz Czech
44882d52b4
chore: update openapi frontend types (#10739) 2025-10-06 13:26:56 +00:00
Tymoteusz Czech
b409cc8034
feat: add placeholder for empty change requests table (#10706) 2025-10-01 14:22:04 +02:00
Thomas Heartman
99c4f7111a
feat: add change request table filter buttons (#10679)
Adds filter buttons for filtering between "CRs created by me" and "CRs
where I've been requested as an approver".

The current implementation is fairly simplistic and the buttons are not
connected to the actual table state directly (instead being set up with
their own simple state and onChange hooks), but it covers the simple
scenario. I want to defer a more complex solution until we know we need
it and until we know exactly what we need. The implementation is based
on the lifecycle filters that we have on the project flags page.

The current logic is such that: when you land on the page, there's no
query params in the URL, but the data fetch applies `createdBy:IS<your
user>`. If you switch to "approval requested" (and back again), the URL
will reflect this.

For reference, the github workflow works like this, where each URL has a
set of default filters, e.g.:
- `/pulls`: `is:open is:pr assignee:thomasheartman archived:false`
- `/pulls/review-requested`: `is:open is:pr
review-requested:thomasheartman archived:false`

But if you change the default filters or add new ones, the URL will
update to `pulls?<query-string>` (e.g.
`/pulls?q=is%3Aopen+is%3Apr+review-requested%3Athomasheartman+archived%3Atrue`)

So this takes a similar approach, but better suited to the way we do
tables in general.

Rendered:

<img width="1816" height="791" alt="image"
src="https://github.com/user-attachments/assets/60935900-488d-4ca9-b110-39f3568a08a6"
/>

<img width="1855" height="329" alt="image"
src="https://github.com/user-attachments/assets/5e865a2e-8fdc-41ab-ba38-bbe6776d04ad"
/>
2025-09-26 12:42:47 +02:00
Thomas Heartman
4dd97b97f4
chore: use paginated table for change request list (#10660)
Adds a paginated table to the change request overview page and
integrates it with the search API hook.

The current implementation still has some rough edges to work out, but
it's getting closer.

There's no sort buttons in this implementation. I've got it working on
the side, but TS is complaining about types not matching up, so I'm
spinning that out to a separate PR.

<img width="1808" height="1400" alt="image"
src="https://github.com/user-attachments/assets/bdee97b7-ee2a-46c0-8460-a8b8e14d3c92"
/>
2025-09-23 12:05:11 +00:00
Thomas Heartman
6be5e6c969
fix: don't call location hook conditionally in CR badge (#10676)
Fixes a bug where I added a conditional hook call in
https://github.com/Unleash/unleash/pull/10651.
2025-09-23 10:46:23 +02:00
Thomas Heartman
fabf76e12c
feat: global change requests table (#10650)
Adds basic table layout for the global change requests page and makes
the page accessible at `/change-requests`.

The table is based on the project-based change request table, but with a
slightly different set of columns.

Uses mock data for now. 

There's still some styling to be done for the column widths and handling
narrower screens.

<img width="1386" height="671" alt="image"
src="https://github.com/user-attachments/assets/b24ed625-d3f6-4281-ba44-30744d5063f3"
/>

If the flag is disabled, we render nothing useful.
<img width="1429" height="287" alt="image"
src="https://github.com/user-attachments/assets/289b5707-4389-4c08-bf68-55d63e186ba5"
/>


closes 1-4076
2025-09-11 10:15:57 +03:00
Thomas Heartman
d3e7e67b91
Fix: use locale string for change request time badge. (#10651)
Uses the user's preferred date / time formatting for the scheduled at
time in CR schedule badges.

Before (en-US formatting):
<img width="291" height="58" alt="image"
src="https://github.com/user-attachments/assets/edb04292-4678-4bfd-93a1-8fd2a3f01a1f"
/>

After (ja formatting):
<img width="308" height="106" alt="image"
src="https://github.com/user-attachments/assets/9828355f-0c23-4b8f-bef3-a0173e92c306"
/>
2025-09-11 09:13:26 +02:00
Thomas Heartman
aec3461159
chore: change from "change requests" to "open" in project change request tabs (#10648)
For some reason, the two change request tabs are called "Change
Requests" and "Closed", instead of "Open" and "Closed".

I suspect this may be an error, but this fixes it. 

Before:
<img width="383" height="176" alt="image"
src="https://github.com/user-attachments/assets/faf95827-f384-4187-bc0b-f32b8fbbef41"
/>

After:
<img width="372" height="166" alt="image"
src="https://github.com/user-attachments/assets/67528024-7783-42e3-b014-bad4f7bc871b"
/>
2025-09-10 16:05:22 +02:00
Thomas Heartman
509dd80f86
chore: Update from "toggles" to "flags" (#10647)
Updates the features cell text when you have lots of flags affected.

Looks like we missed this one in a previous renaming attempt.

Before:
<img width="245" height="154" alt="image"
src="https://github.com/user-attachments/assets/922334f4-a0f1-4dee-9d14-3c9b3f77f32c"
/>

After:
<img width="275" height="170" alt="image"
src="https://github.com/user-attachments/assets/7fa0f454-e695-46aa-918b-c22b97e94187"
/>
2025-09-10 16:05:18 +02:00
Jaanus
6c11b57c53
fix: remove lifecycle backfill on every startup 2025-09-02 13:55:18 +03:00
unleash-bot[bot]
547f7ac14e
chore(AI): changeRequestApproverEmails flag cleanup (#10572) 2025-09-02 08:51:00 +02:00
Thomas Heartman
b321bfba99
Add .vite to biome's ignore lists (formatting and linting) (#10518)
Also fixes an auto-fixable issue reported by biome.
2025-08-22 07:36:56 +00:00
unleash-bot[bot]
d2452b91f2
chore(AI): crDiffView flag cleanup (#10487)
This PR cleans up the crDiffView flag. These changes were automatically
generated by AI and should be reviewed carefully.

Fixes #10484



🧹 AI Flag Cleanup Summary

This PR removes the crDiffView feature flag and its associated legacy
components
for displaying changes in a Change Request. The flag has been enabled
and the
new diff view is now permanent.

This involved removing the feature flag from the configuration and code,
deleting several legacy components, and updating the components that
used them
to only use the new versions.

🚮 Removed

• Feature Flag Logic
• All checks for the crDiffView flag.
• The flag definition in uiConfig.ts, experimental.ts, and
server-dev.ts.
• Legacy Components
• LegacyStrategyChange.tsx
• StrategyTooltipLink.tsx
• LegacyReleasePlanChange.tsx
• SegmentTooltipLink.tsx
• LegacySegmentChangeDetails.tsx
• LegacyArchiveFeatureChange from ArchiveFeatureChange.tsx
• LegacyDependencyChange from DependencyChange.tsx
• LegacyToggleStatusChange from ToggleStatusChange.tsx

🛠 Kept

• New Components
• The new change request diff view components (StrategyChange,
ReleasePlanChange, etc.) are now used directly.
• The UI for displaying changes in a Change Request now consistently
uses
the improved diff view.

📝 Why

The crDiffView feature flag was deemed complete and ready for permanent
implementation. The cleanup follows standard procedure to remove the
flag and
associated dead code, simplifying the codebase and making it easier to
maintain.
This change makes the improved diff view for change requests the only
available
view.

---------

Co-authored-by: unleash-bot <194219037+unleash-bot[bot]@users.noreply.github.com>
Co-authored-by: Thomas Heartman <thomas@getunleash.io>
2025-08-21 12:33:19 +02:00
unleash-bot[bot]
d6ddc95c1e
chore(AI): improvedJsonDiff flag cleanup (#10486)
This PR cleans up the improvedJsonDiff flag. These changes were
automatically generated by AI and should be reviewed carefully.

Fixes #10483

## 🧹 AI Flag Cleanup Summary
This PR removes the `improvedJsonDiff` feature flag, making the enhanced
JSON
diffing component the default and only option. The now-unused legacy
diff
component and all related feature flag logic have been removed to
streamline the
codebase.
### 🚮 Removed
- **Components**
- `OldEventDiff` component was removed, along with its helper types and
constants.
- **Flag Logic**
- All conditional rendering based on the `improvedJsonDiff` flag was
removed.
- The `sort` prop from `EventDiff` was removed as it was only used by
the
legacy component.
- **Configuration**
- `improvedJsonDiff` flag definition was removed from `uiConfig.ts`,
`experimental.ts`, and `server-dev.ts`.
- **Tests**
- Mock configuration for `improvedJsonDiff` in tests was removed.
### 🛠 Kept
- **Components**
- `NewEventDiff` was renamed to `EventDiff` and is now the standard
implementation.
### 📝 Why
The `improvedJsonDiff` feature flag was marked as completed with its
outcome
being "kept". This cleanup finalizes the feature rollout by removing the
flag
and associated legacy code, simplifying the implementation and reducing
code
complexity.

---------

Co-authored-by: unleash-bot <194219037+unleash-bot[bot]@users.noreply.github.com>
Co-authored-by: Thomas Heartman <thomas@getunleash.io>
2025-08-21 09:50:48 +00:00
Fredrik Strand Oseberg
a99e5bc4b4
feat: add truncation and tooltips (#10498)
This PR uses the existing Truncator component to add truncation and
tooltips for long names.
2025-08-18 13:16:52 +02:00
David Leek
f94801ab45
fix: move update approvers after cr change state (#10490) 2025-08-12 09:16:07 +02:00
Thomas Heartman
c7fe43db71
Update stateTransitions property in UI to match new API prop (#10438)
We renamed the property returned from the API, so we also need to update
the UI.
2025-07-30 12:13:19 +02:00
Thomas Heartman
d48d1df095
test: Ensure that timestamps in future states aren't shown (#10426) 2025-07-29 12:36:57 +02:00
Thomas Heartman
663f30c8db
feat: Timeline for cancelled CRs (#10421)
Shows the cancelled state in the timeline for cancelled CRs. Extracts
steps into a separate file.

Also, if timestamps are present, it will dynamically show the steps we
have times for for rejected and cancelled CRs.

If we do not have timestamps, it'll use the old behavior for displaying
rejected steps, but does add a new one for cancelled steps, which
includes 'Draft', 'In review', 'Approved', 'Cancelled'.

CRs can be cancelled after:
- In review
- Approved

CRs can be rejected after:
- In review
- Schedule

For other states, use the existing steps. Cancelled and Rejected are
both terminal states, so there's no future steps to show.

Regardless of what we have timestamps for, always show 'Draft', 'In
review' and the final state (Rejected | Cancelled).

## Gallery

Cancellations
<img width="381" height="241" alt="image"
src="https://github.com/user-attachments/assets/a6af70c5-ef09-4aeb-ae53-0e3ff4b25446"
/>


<img width="396" height="320" alt="image"
src="https://github.com/user-attachments/assets/699c2594-8c0c-44d9-bf50-22a8bdda3d00"
/>


Rejections 
<img width="397" height="244" alt="image"
src="https://github.com/user-attachments/assets/20887a23-e453-49ce-bc5c-738ba4180868"
/>


<img width="388" height="384" alt="image"
src="https://github.com/user-attachments/assets/e3c5842b-254d-47b8-a8f6-3721643c4223"
/>


New cancelled steps without timestamps:
<img width="387" height="309" alt="image"
src="https://github.com/user-attachments/assets/5fba979d-cb5b-4aba-b652-7c5ac89a3e37"
/>
2025-07-29 12:21:30 +02:00
Thomas Heartman
0a9d6437c5
Place schedule information first and change color of schedule info (#10419)
As per UX's requests, this updates the placement and styling of the
schedule information for scheduled change requests. Instead of being
below the "stage entered time" and in "secondary" color, we place it
above that timestamp and in the same color as the stage name.

This change is not behind a flag, so the color change will go out
immediately upon release.

Before:

<img width="244" height="376" alt="image"
src="https://github.com/user-attachments/assets/2c5f380d-8d05-4078-93cc-d451eb9fdabe"
/>

After:
<img width="201" height="333" alt="image"
src="https://github.com/user-attachments/assets/d26c2c6f-5fc9-4db2-b52e-ff26e6f03a61"
/>

Same for failed/suspended. Before:
<img width="280" height="378" alt="image"
src="https://github.com/user-attachments/assets/71c7a201-dfd7-47f3-a45b-c33a47be1e3c"
/>

After:

<img width="258" height="369" alt="image"
src="https://github.com/user-attachments/assets/9a3ab53f-bda1-4ce5-a127-bceaa3436fef"
/>
2025-07-28 14:45:06 +02:00
Thomas Heartman
d2e2378481
Show change request stage timestamps in UI (#10388)
Adds a timestamp for each state we have time (and that isn't a state
downstream from the current state) in the CR timeline.

<img width="437" height="318" alt="image"
src="https://github.com/user-attachments/assets/a499e73f-c506-46a0-8d1a-7e4eb5ec4f7d"
/>

The timestamp respects the user's preferred locale and uses the `time`
element.

I've used the current name of the API payload's timestamps as it stands
on the enterprise main branch for now. This name is not set in any
schemas yet, so it is likely to change. Because it's not currently
exposed to any users, that will not cause any issues. Name suggestions
are welcome if you have them.

We only show timestamps for states up to and including the current
state. Timestamps for downstream states (such as "approved" if you're in
the "in review" state), will not be shown, even if they exist in the
payload. (There are some decisions to make on whether to include these
in the payload at all or not.)

There's no flags in this PR. They're not necessary If the API payload
doesn't contain the timestamp, we just don't render the timestamp, and
the timeline looks the way it always did:
<img width="447" height="399" alt="image"
src="https://github.com/user-attachments/assets/0062393a-190c-4099-bc16-29f9da82e7ea"
/>


## Bonus work

In the `ChangeRequestTimeline.tsx` file, I've made a few extra changes:
- `createTimelineItem` and `createScheduledTimelineItem` have become
normal React components (`TimelineItem` and `ScheduledTimelineItem`) and
are being called as such (in accordance with [React
recommendations](https://react.dev/reference/rules/react-calls-components-and-hooks#never-call-component-functions-directly)).
- I've updated the subtitles for schedules to also use the time element,
to improve HTML structure.

## Outstanding work

There's a few things that still need to be sorted out (primarily with
UX). Mainly about how we handle scheduled items, which already have time
information. For now, it looks like this:

<img width="426" height="394" alt="image"
src="https://github.com/user-attachments/assets/4bfc4ca2-c738-4954-9251-8d063143371e"
/>

<img width="700" height="246" alt="image"
src="https://github.com/user-attachments/assets/fe688b08-c5c8-40f8-a9d0-fe455e44665f"
/>
2025-07-24 12:42:29 +00:00
Thomas Heartman
bfd82015d1
Fix each child in a list should have a key error. (#10393)
The console was complaining. I suspect it was because of the wrapping
fragment. So instead of doing everything within react, I switched to
using a standard case statement.

Also: because name is optional and not guaranteed to be unique, let's
use id for the key instead.
2025-07-22 13:03:33 +00:00
David Leek
068ef585be
feat: move apply button to a separate section (#10324) 2025-07-08 09:23:48 +02:00
Thomas Heartman
8e0e9c834e
chore: Use fixed-width sidebar instead of dynamic modal. (#10315)
Uses a fixed-width sidebar component instead of the dynamic sidebar
component for the change request sidebar. This fixes a case where the
modal would suddenly grow narrower when a change was sent to review
(introduced in https://github.com/Unleash/unleash/pull/10307):

Before submitting (in main)

![image](https://github.com/user-attachments/assets/a8409cf1-b066-4f97-8e28-cd2470646a9f)

After submission (in main)

![image](https://github.com/user-attachments/assets/1735a07f-5792-452f-9a22-2309da9e28fa)

Before submitting (on this branch)

![image](https://github.com/user-attachments/assets/4ffff55d-cb8a-4cb6-a22e-54da8182771b)

After submission (on this branch)

![image](https://github.com/user-attachments/assets/1569163a-a8d6-4e2c-8239-6e99b9dcfdd0)

I don't see any reason why the CR sidebar should be dynamic, so making
it fixed width with the solution we already have seems pretty sensible
to me. Keeps things consistent and prevents us from solving the same
problem multiple times in multiple ways.

Yes this change makes the sidebar a little wider, but I think that's
fine. It's also closer to what it was previously, I think. Again, we can
rethink this if necessary. And of course, the modal still smooshes
together when it needs to:
<img width="431" alt="image"
src="https://github.com/user-attachments/assets/54f31284-75a4-4038-9943-c3b42363ecb4"
/>
2025-07-04 13:44:17 +02:00
Thomas Heartman
e516bbf14c
chore: renames "Change" tab to "View change" to align with "View diff". (#10314)
There was some confusion whether the options were related or not. This
is a quick and easy solution that may solve the problem. If it doesn't,
we can make further changes later.

<img width="1045" alt="image"
src="https://github.com/user-attachments/assets/6b186b24-c4a7-491b-acbf-0e022a94493c"
/>
2025-07-04 13:32:46 +02:00
Thomas Heartman
51a895b660
Chore(1-3894): update old/new name display + remove strategy type names (#10305)
This PR updates how we show old/new strategy/segment names in change
requests, and also removes the name of the strategy type from the
change.

For the old/new names: instead of showing them stacked vertically, we
show them side by side (old name first, then new name).

Compare before:
<img width="967" alt="image"
src="https://github.com/user-attachments/assets/d3e36f49-4abc-4cd4-8ba9-752515740185"
/>


with after:

<img width="974" alt="image"
src="https://github.com/user-attachments/assets/d0f85264-b055-4c44-b985-f992f09d8dab"
/>


Only affects the new components (legacy CR view is untouched). If we get
negative feedback while rolling it out because the strat type name is
missing, we can always add it back.
2025-07-03 12:58:13 +00:00
Thomas Heartman
2b780e0120
Set a max width on the CR sidebar instead of a min width. (#10307)
The max width is set to `max(40vw, 1000px)`, so that if you're on a very
wide window, then it'll take up at most 40% of the horizontal space.
Once your window is smaller than 2500px, however, the sidebar will stop
shrinking and stay at 1000px (or as close to that as the window allows).
It'll keep shrinking with the window size.

This came up because in certain cases, such as if you have a release
template with a long description, the modal would just keep growing
until it took up 98% of the window width.

I have not set a min width for now. I don't think there is any need for
it, but if we find there is, we can add it back later.

Before:

![image](https://github.com/user-attachments/assets/815b014b-765f-4670-8724-dc70a71b3c17)


After: 

![image](https://github.com/user-attachments/assets/d2b59410-0907-4606-81b3-8103dfbcb44c)
2025-07-03 12:49:36 +00:00
Thomas Heartman
dcce90ccb1
fix segment changed name not showing (#10304)
Fixes a bug where we wouldn't show the changed segment name in segment
changes. This bug appears to have been around for a while, but this fix
does not touch the legacy version. Reintroduces the ChangeSegmentName
component to make the names stack correctly (vertically instead of
horizontally)

Before: 
<img width="993" alt="image"
src="https://github.com/user-attachments/assets/4bc24ad4-f754-4015-ba7b-4793c570fae8"
/>


After:
<img width="1010" alt="image"
src="https://github.com/user-attachments/assets/0e4d5956-3553-4ef2-979c-bdbb89b3c376"
/>
2025-07-03 13:58:56 +02:00
Thomas Heartman
44d778f7a5
Add "feature status will change" (#10302)
Updates handling of default changes by letting the change components
themselves handle adding necessary text instead of passing it down as
"actions" (when text isn't really an action ...).

There's two cases where we add default changes to a CR:
1. If you enable an environment that has no strategies, then we add the
default strategy.
2. If you disable or remove the last strategy on an active environment
(such that the environment would now have 0 active strategies), then we
disable the environment too and add that to the change request.

Here's what they look like in the new design:
<img width="985" alt="image"
src="https://github.com/user-attachments/assets/e986e79f-041a-43d2-bfae-e5ecff11012d"
/>

<img width="981" alt="image"
src="https://github.com/user-attachments/assets/6a0dfe69-899f-4bc9-ae36-9553673dba06"
/>


And because it seemed the easiest way to do it, I've also updated the
old design to do the same thing. It looks the same as it used to:
<img width="998" alt="image"
src="https://github.com/user-attachments/assets/b41612ab-22f3-4225-be24-092ca8584d9c"
/>


<img width="995" alt="image"
src="https://github.com/user-attachments/assets/3d00be93-1347-491f-a689-328178d9a8c3"
/>
2025-07-03 13:35:03 +02:00
Thomas Heartman
2dc7cbaa31
chore: prepend changes with "change:" (#10276)
Adds "change:" to the beginning of all changes and does some work to
align the use of compononents and structure across them (supersedes
https://github.com/Unleash/unleash/pull/10260).

In doing so, I have also added new and legacy variants for all different
change components, because this has required some hierarchy
restructuring every now and then. A reason for doing that was adding the
correct wrapping behavior for components, such that on smaller screens,
we wouldn't entirely blow out and make the kebab menu invisible and
inaccessible.

It also makes it so that we switch to full-width change view earlier (at
breakpoint md instead of sm), because at sm, a lot of stuff got hidden
before we switched to full-width.

Most changes are trivial updates; I've called out bits of the code that
are not in comments.

Rendered, it looks like this:
<img width="1203" alt="image"
src="https://github.com/user-attachments/assets/36bed974-99da-4d8d-a881-ea9df7797210"
/>

One interesting and potentially quite useful side-effect, is that all
change types now use the exact same set of components in the same
fashion, as evidenced by this screenie where I've added outlines to the
hierarchy:

<img width="1020" alt="image"
src="https://github.com/user-attachments/assets/685fefcc-af7e-4697-b8f3-8260af1e2a84"
/>

The one difference is that components without a diff place the "more"
kebab menu one layer further inside to facilitate prettier wrapping (the
kebab menu can stay on the same line as the other text when wrapping):
<img width="238" alt="image"
src="https://github.com/user-attachments/assets/2b8d3174-06a8-4ad4-b366-cea97720deda"
/>
2025-07-03 11:14:04 +02:00
David Leek
bed467520d
chore: limit requested approver count to 10 (#10279) 2025-07-03 09:25:58 +02:00
Thomas Heartman
bb473001c0
chore: remove view diff links in new components + remove colons (#10262)
Removes the view diff hover links (and strategy icons) in the new views
and removes trailing colons.

In removing the hover links, I have split up the content of their files
(`StrategyTooltipLink` and `SegmentTooltipLink`) into
`Change{Segment|Strategy}Name` and `{Segment|Strategy}Diff`. I have
reverted the existing tooltip files to their state before I began
changing this and added deprecation notices. These old tooltips are only
used by the old components, so we don't need to work on them after all.

In doing this work, I've also updated the strategy change diff to handle
the new functionality (tabs instead of hover)

The removal of the trailing colons (so that it's `adding strategy
gradual rollout` instead of `adding strategy: gradual rollout` is in
preparation for the remaining changes to the header that we're
introducing with this change. The removal of these is not behind a flag,
so I've also done it in the legacy components. This feels like a very
low risk change, so it felt like more work to have to check a flag for
each of the different instances where we use it.

<img width="839" alt="image"
src="https://github.com/user-attachments/assets/b29b8073-c282-4b4b-948f-9a545082ac31"
/>
2025-07-02 09:42:59 +02:00
Thomas Heartman
f6ab7460c6
Remove the red coloration of deleted strategy change boxes (#10246)
We don't want deleted strategies to have the red background color
anymore with the new change/diff view. As such, we can remove it in the
new component and add a todo to delete the css for it after it's gone.

<img width="1050" alt="image"
src="https://github.com/user-attachments/assets/083cbcac-5df9-47cd-bd78-2501c3bbf64e"
/>
2025-06-30 14:56:15 +02:00
Thomas Heartman
88514077f5
Chore(1-3882)/add diff border (#10244)
Adds a border around all the JSON diffs panels to align better with the
sketches and to mesh better with the existing change cards in CRs.

<img width="1051" alt="image"
src="https://github.com/user-attachments/assets/b4e81c34-630b-436b-8de2-9e6e6893b3fb"
/>
2025-06-30 14:17:49 +02:00
Thomas Heartman
f18509665d
add tabs to strategy sort order (#10243)
Adds the same tab interface to env execution order changes as to other
diffable changes. Instead of creating a new file, this one just
duplicates and changes the component that we wanna touch.

Change 
<img width="799" alt="image"
src="https://github.com/user-attachments/assets/2cd54f50-c4e6-43ef-a413-ed61973cf889"
/>

Diff
<img width="997" alt="image"
src="https://github.com/user-attachments/assets/ef0379f5-0084-4c38-a713-373ccfacee0e"
/>
2025-06-30 11:40:28 +00:00
Thomas Heartman
7c0bd12a24
add tabs to milestone start (#10237)
Adds changes/view diff tabs to release plan changes that show diffs. The
only instances I found where we show JSON diffs today was starting
milestones and adding a new release plan if you already have one.

I've moved the old file into a legacy file because we're touching two
out of three internal components, so it seemed like leaving it all in
one file would be a bit of a hassle. plus, this way it's consistent with
segments and strategies.

Start milestone:
<img width="1035" alt="image"
src="https://github.com/user-attachments/assets/2b4616f6-8452-4976-8101-11a94d6d5828"
/>

<img width="1054" alt="image"
src="https://github.com/user-attachments/assets/0ba58c72-b3dc-48fa-95bf-a3980dc620fe"
/>

Plan replacement:
<img width="1006" alt="image"
src="https://github.com/user-attachments/assets/9381a48f-e23e-435e-8fa5-02fcb5050bfd"
/>

<img width="818" alt="image"
src="https://github.com/user-attachments/assets/c5ceb9db-b095-4d05-88e8-fd8a70776479"
/>
2025-06-30 13:18:18 +02:00
Thomas Heartman
e2bb894f68
feat(1-3878)/diffable segment changes (#10234)
Adds change / view diff tab buttons to segment changes too. Extracts the
tab definitions and stylings into its own file so that it's easier to
share across CR change components. Moves the old segment change details
into the legacy segment change file.

Change views:
<img width="999" alt="image"
src="https://github.com/user-attachments/assets/26e2a987-f582-449d-b61c-bf2ec5c1edd4"
/>

Diff views:
<img width="1011" alt="image"
src="https://github.com/user-attachments/assets/95621234-1352-4164-8f74-775bdb0e61dd"
/>
2025-06-30 09:53:21 +00:00
Thomas Heartman
8ade5b5dbb
feat: add tab switcher for change to json diff view in CR (#10179)
Updates the strategy change component used in change requests to have a
"tab"-like functionality, where you can switch between "Change" (the
rendered strategy) and "View diff" (the JSON diff). This is a tab
switcher, so you navigate it with arrow keys if on a keyboard, and I've
set selection to follow focus for now. This is my preference as it saves
you extra space/enter taps, but we can remove it later if we want.

Most of the changes in this PR is wrapping the existing strategy change
components/sections in tab panels and tab context providers.

Later changes in this project will remove the existing "view diff" hover
link in favor of this view.

There is some work to do on the design front (in terms of spacing,
borders, etc), but this covers the core functionality.

The pre-existing strategy change component has been moved into the
"LegacyStrategyChange" file with no changes beyond a deprecation
comment. The existing tests now test the new component instead with no
breakage. (I anticipate breaking when we remove the view diff link,
though)



Change with strategy variants:
<img width="991" alt="image"
src="https://github.com/user-attachments/assets/ac28912f-5b08-4a9c-96da-81bfd0b2e68e"
/>

<img width="1005" alt="image"
src="https://github.com/user-attachments/assets/4addaacc-101c-46cb-888f-95dc3b1cac25"
/>


## Edge case: deleted strat with no reference strategy

There is a case in the code where "reference strategy" can be undefined
for a deleted strategy. It is defined as follows:

```ts
    const referenceStrategy =
        changeRequestState === 'Applied'
            ? change.payload.snapshot
            : currentStrategy;

```

I've decided to still show the "(no changes)" json diff in that setting,
so that the tabs actually affect something. I don't know how often this
happens, though: probably not anymore unless your CR is _ancient_, as we
introduced the snapshot quite a while ago, and `currentStrategy`
shouldn't really be undefined here, I should think.

Deleted strategy with no reference strategy:

Change:
<img width="1013" alt="image"
src="https://github.com/user-attachments/assets/352eaec9-c0ef-4d5a-b765-11304daf4474"
/>

Diff:
<img width="1029" alt="image"
src="https://github.com/user-attachments/assets/e69c81a6-1ef7-47ff-853a-9fb900b26303"
/>
2025-06-30 11:04:44 +02:00
David Leek
28caa82ad1
feat(changerequests): add requested approvers to overview (#10232) 2025-06-30 08:51:51 +02:00
Thomas Heartman
f2766b6b3b
Add various fixes to the CR view (#10231)
Adds a number of small corrections and fixes to (mainly) CR-related
component. Discovered as part of adding the new JSON diff view. Refer to
the various inline comments for explanations.

---------

Co-authored-by: Tymoteusz Czech <2625371+Tymek@users.noreply.github.com>
2025-06-27 12:16:11 +02:00