This reverts the following commits:
- 62314aa66: fix: don't attempt to get fetch strategies for new context fields on every key stroke (#11152)
- 7369977b2: chore: update the UI to use project-based context endpoints when on a project endpoint (#11153)
- 4ef205066: make context field fetch differentiate based on project ID (#11151)
These changes are being reverted to address issues with the context field implementation.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Only renders the "ContextFieldUsage" component in the context form when
the form is in edit mode. It doesn't make sense to render it for context
fields that don't exist yet.
Rendering this in the create form caused the Unleash to send a request
to `/api/admin/context/:contextName/strategies` every time the name of
the context field changes (i.e. every key stroke).
Update the context field hooks to accept a project ID and to change
their API endpoints and cache keys based on the project ID.
Updating the URL in this many places (API example, multiple hooks, form
actions) feels kinda brittle and I wish there was a better way to do
this, but I don't have any bright ideas right at this moment. We could,
of course, extract a function that creates it, but that's also brittle
because they're all a little different 🤔
Adds a splash overlay that we can to App.tsx, it will look for active
splash ids defined in splash.tsx and append a query parameter that will
trigger the modal content. Once a splash is triggered it will be marked
as seen in the backend. This PR only adds the functionality, it does not
add it to the application just yet.
Setup the intial splash screen in the current framework. For now we are
only adding the component on a path you can navigate to, there are
currently no triggers set up.
Allows you to create, edit, and delete project context fields from the
project context field page.
Follows the same way of doing dynamic routing on the buttons as we did
for segments (checking if projectId exists, and if so, route there).
The current impl blindly inserts project if the edit/create form is open
under a project path, but we probably want to parameterize this later
(or before merging), so as to make it easier to control.
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.0 to 4.1.1.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md">js-yaml's
changelog</a>.</em></p>
<blockquote>
<h2>[4.1.1] - 2025-11-12</h2>
<h3>Security</h3>
<ul>
<li>Fix prototype pollution issue in yaml merge (<<)
operator.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="cc482e7759"><code>cc482e7</code></a>
4.1.1 released</li>
<li><a
href="50968b862e"><code>50968b8</code></a>
dist rebuild</li>
<li><a
href="d092d86603"><code>d092d86</code></a>
lint fix</li>
<li><a
href="383665ff42"><code>383665f</code></a>
fix prototype pollution in merge (<<)</li>
<li><a
href="0d3ca7a27b"><code>0d3ca7a</code></a>
README.md: HTTP => HTTPS (<a
href="https://redirect.github.com/nodeca/js-yaml/issues/678">#678</a>)</li>
<li><a
href="49baadd52a"><code>49baadd</code></a>
doc: 'empty' style option for !!null</li>
<li><a
href="ba3460eb9d"><code>ba3460e</code></a>
Fix demo link (<a
href="https://redirect.github.com/nodeca/js-yaml/issues/618">#618</a>)</li>
<li>See full diff in <a
href="https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/Unleash/unleash/network/alerts).
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [glob](https://github.com/isaacs/node-glob) from 10.4.2 to 10.5.0.
<details>
<summary>Commits</summary>
<ul>
<li><a
href="56774ef73b"><code>56774ef</code></a>
10.5.0</li>
<li><a
href="1e4e297342"><code>1e4e297</code></a>
bin: Do not expose filenames to shell expansion</li>
<li><a
href="1f0c1ca01a"><code>1f0c1ca</code></a>
10.4.5</li>
<li><a
href="eaf31dcb14"><code>eaf31dc</code></a>
whatever, just allow any engines</li>
<li><a
href="78275168e1"><code>7827516</code></a>
10.4.4</li>
<li><a
href="d06c8f8c82"><code>d06c8f8</code></a>
restore support for node 14.latest and 16.latest</li>
<li><a
href="c14b787771"><code>c14b787</code></a>
10.4.3</li>
<li><a
href="8a69def3ca"><code>8a69def</code></a>
node 14 no longer supported</li>
<li>See full diff in <a
href="https://github.com/isaacs/node-glob/compare/v10.4.2...v10.5.0">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/Unleash/unleash/network/alerts).
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This PR cleans up the enterpriseEdgeUI flag. These changes were
automatically generated by AI and should be reviewed carefully.
Fixes#11123
## 🧹 AI Flag Cleanup Summary
This change removes the `enterpriseEdgeUI` feature flag and makes the
Enterprise
Edge UI permanently available. All conditional logic related to the flag
has
been removed, simplifying the codebase.
### 🚮 Removed
- **Flag Definition**
- Removed `enterpriseEdgeUI` flag from `experimental.ts` and
`uiConfig.ts`.
- Removed the flag from the development server configuration
(`server-dev.ts`).
- **Conditional Logic**
- Removed `useUiFlag('enterpriseEdgeUI')` hook calls and conditional
rendering
in `EnterpriseEdgeDismissibleAlert.tsx` and `Network.tsx`.
- Removed menu items from `adminRoutes.ts` that were conditional on the
`enterpriseEdgeUI` flag. The "Connected edges" link was removed as it
was only
shown when the flag was disabled.
### 🛠 Kept
- **Enterprise Edge UI**
- The Enterprise Edge page and related UI components are now always
enabled.
- The "Enterprise Edge" link in the admin navigation is now permanently
visible.
- The redirect from `/admin/network/connected-edges` to
`/admin/enterprise-edge` is now permanent.
### 📝 Why
The `enterpriseEdgeUI` feature flag was marked as completed with its
feature
kept. This cleanup removes the obsolete flag and hardcodes its behavior,
which
is a standard part of our development lifecycle to reduce code
complexity.
Co-authored-by: unleash-bot <194219037+unleash-bot[bot]@users.noreply.github.com>
Fixed threshold input UX by storing the input value as a string during
editing, allowing users to clear the field completely with backspace.
Threshold value converts to a number only on blur/Enter, matching the
pattern used in `RolloutSlider` and preserving the number input type for
proper numeric keyboard and spinner controls.
<img width="905" height="403" alt="image"
src="https://github.com/user-attachments/assets/e07881d0-2fc3-4ed1-9c5d-108d72e7126d"
/>
This PR reverts https://github.com/Unleash/unleash/pull/11037 and then
increases the set sidebar width by 16px when it's expanded.
The reason is that if the width is set to auto, then selecting the
various sub-items of the "configure" route results in the sidebar width
changing. I had a look, but couldn't figure out why. The strange thing
is that shorter page names appear to cause wider sidebars.
For instance, here's release templates:
<img width="289" height="647" alt="image"
src="https://github.com/user-attachments/assets/581e381e-4db4-47a3-b21a-f56220aea64c"
/>
Here's applications (look at the new in Unleash component):
<img width="330" height="652" alt="image"
src="https://github.com/user-attachments/assets/fc812d40-bf40-4860-9a4e-0fa0275ed76e"
/>
I've increased the sidebar width a little bit, such that the submenu
doesn't jump out of the main menu as described in #11037. It now looks
like this for release plans with the new badge:
<img width="305" height="395" alt="image"
src="https://github.com/user-attachments/assets/39f882e2-0489-44a4-be8a-74934202ccfc"
/>
Ideally, I'd like to find a better solution to this (by finding out
what's causing the jumping), but there's more important issues to look
at at the moment, and this will work fine.
This is primarily a wrapper component that finds which item to show for
"new in unleash" and then passes that wrapper to the toast.
Also adds tests for the check whether an item should be displayed or
not.
Adds a new hook for UI flag evaluation that returns an evaluation
function.
This solves a frequent pain point where we can't check if a flag is
enabled conditionally (e.g. if we don't know if we have a flag yet)
because it's implemented as a hook.
The new implementation uses the same evaluation as the old one, but
returns the eval function after calling the hook, thereby circumventing
the issue and allowing you to eval a flag anywhere in the function body.
Adds a "new in unleash" toast (*snackbar* in MUI parlance) to the app.
The component is not hooked up to anything, so it will not show anywhere
in the app just yet.
Because we want this to show regardless of whether the sidebar is open
or not and whether the user is on mobile or not, the new components need
to be mounted outside of the sidebar hierarchy. Because they're on top
of everything, I've used the main layout in dev, but that can be
adjusted if necessary. Nothing is mounted there at the moment, though.
The toast acts like a "card" in many ways, where the entire thing is
clickable and will open up the modal. There is no implementation for
modal-less items for now because the current thing we're highlighting
(release plans) uses a modal. We can add support for modal-less items
later.
On component mount, there is a 500 ms timeout before the toast slides
in.
Stacked on top of https://github.com/Unleash/unleash/pull/11087
---
Close-up of toast + with focus styles:
<img width="330" height="119" alt="image"
src="https://github.com/user-attachments/assets/0997d772-3174-48dc-b0c0-affedd2c1815"
/>
<img width="315" height="118" alt="image"
src="https://github.com/user-attachments/assets/ae643d30-1434-4879-a294-24b5375c5c37"
/>
The toast goes behind the overlay when the modal shows (snackbars have a
higher z-index than modals do in MUI by default):
<img width="1490" height="1253" alt="image"
src="https://github.com/user-attachments/assets/97ee2216-8991-47f6-bf32-764bbe230e74"
/>
## Up next
Add a wrapper component that checks which news item (if any) to show and
that will be mounted in the main layout.
+ Add a flag to control which version of the new in Unleash we're
showing.
## Dark mode
The colors aren't correct in dark mode. Or rather, the `common.black`
theme color isn't very black. Because it's not wired up anywhere, I'm
happy to leave it like this for now while we wait for UX to get back to
us with what they wanna do.
<img width="322" height="125" alt="image"
src="https://github.com/user-attachments/assets/461b1c1e-3886-41ac-abb0-806a06f9b554"
/>
## Hover colors
There's also no hover indicator at the moment. I'm waiting for input
from UX for that too, but that's a small thing to add.
Updates the `NewInUnleashDialog` to accept elements that have an
`appLink` prop as well as elements with an `onCheckItOut` prop, allowing
for the changes in #11086 to be displayed the same as the old items. For
items with an `appLink` prop, the "check it out" button will be rendered
as a link instead of a button.
The dialog otherwise looks and acts exactly the same.
Builds on https://github.com/Unleash/unleash/pull/11086
Adds a NewInUnleashItems file. This file will supplant the list of items
coded into the existing `NewInUnleash.tsx`. Because we can use links
instead of onClick navigation handlers for app navigation, we also don't
need it to be stateful. If there is a need for this later, we can add it
in then.
The file also exports a type for the items.
Also, removes the previous items (lifecycle 2.0, and signals and
actions) from the list (or rather: doesn't port them over) because
they're out of date now anyway.
This PR cleans up the edgeObservability flag. These changes were
automatically generated by AI and should be reviewed carefully.
Fixes#11078
## 🧹 AI Flag Cleanup Summary
This pull request removes the `edgeObservability` feature flag and
integrates
its functionality into the codebase permanently. The feature has been
kept, so
all related components and logic are now always enabled.
### 🚮 Removed
- **Flag definitions**:
- `edgeObservability` flag from `UiFlags` interface
(`frontend/src/interfaces/uiConfig.ts`).
- `edgeObservability` flag from `IFlagKey` and the `flags` object
(`src/lib/types/experimental.ts`).
- **Conditional logic**:
- `useUiFlag('edgeObservability')` calls and related conditional
rendering
logic in
`frontend/src/hooks/api/getters/useConnectedEdges/useConnectedEdges.ts`
and `frontend/src/component/admin/network/Network.tsx`.
- The `flag: 'edgeObservability'` property from the route definition in
`frontend/src/component/admin/adminRoutes.ts`.
### 🛠 Kept
- **Feature functionality**:
- The "Connected edges" page and its corresponding navigation tab are
now
permanently available in the admin network section, controlled only by
other
flags like `enterpriseEdgeUI`.
- The `useConnectedEdges` hook now unconditionally fetches data.
### 📝 Why
The `edgeObservability` feature flag has been marked as completed with
its
feature kept. This cleanup removes the flag and its associated
conditional
logic, simplifying the code and making the feature a permanent part of
the
application, as per the desired outcome.
---------
Co-authored-by: unleash-bot <194219037+unleash-bot[bot]@users.noreply.github.com>
Co-authored-by: Nuno Góis <github@nunogois.com>