mirror of
https://github.com/Unleash/unleash.git
synced 2025-07-26 13:48:33 +02:00
Fix: feature schema (#3456)
This commit is contained in:
parent
2949db161f
commit
8f278cb726
@ -1,368 +0,0 @@
|
||||
// Vitest Snapshot v1
|
||||
|
||||
exports[`renders correctly with one feature 1`] = `
|
||||
[
|
||||
<div>
|
||||
<div
|
||||
className="makeStyles-searchBarContainer-3"
|
||||
>
|
||||
<form
|
||||
className="makeStyles-container-6"
|
||||
role="search"
|
||||
>
|
||||
<div
|
||||
className="makeStyles-search-7 makeStyles-searchBar-4"
|
||||
>
|
||||
<svg
|
||||
aria-hidden={true}
|
||||
className="MuiSvgIcon-root makeStyles-searchIcon-8"
|
||||
focusable="false"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"
|
||||
/>
|
||||
</svg>
|
||||
<div
|
||||
className="MuiInputBase-root makeStyles-inputRoot-9"
|
||||
onClick={[Function]}
|
||||
onKeyPress={[Function]}
|
||||
>
|
||||
<input
|
||||
aria-label="search"
|
||||
className="MuiInputBase-input MuiInputBase-inputTypeSearch"
|
||||
onAnimationStart={[Function]}
|
||||
onBlur={[Function]}
|
||||
onChange={[Function]}
|
||||
onFocus={[Function]}
|
||||
placeholder="Search..."
|
||||
type="search"
|
||||
value=""
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<a
|
||||
href="/archive"
|
||||
onClick={[Function]}
|
||||
>
|
||||
Archive
|
||||
</a>
|
||||
</div>
|
||||
<div
|
||||
className="MuiPaper-root MuiPaper-elevation1 MuiPaper-rounded"
|
||||
style={
|
||||
{
|
||||
"borderRadius": "10px",
|
||||
"boxShadow": "none",
|
||||
}
|
||||
}
|
||||
>
|
||||
<div
|
||||
className="makeStyles-headerContainer-10"
|
||||
>
|
||||
<div
|
||||
className="makeStyles-headerTitleContainer-14"
|
||||
>
|
||||
<div
|
||||
className=""
|
||||
data-loading={true}
|
||||
>
|
||||
<h1
|
||||
className="MuiTypography-root makeStyles-headerTitle-15 MuiTypography-h1"
|
||||
>
|
||||
Feature toggles
|
||||
</h1>
|
||||
</div>
|
||||
<div
|
||||
className="makeStyles-headerActions-16"
|
||||
>
|
||||
<div
|
||||
className="makeStyles-actionsContainer-1"
|
||||
>
|
||||
<div
|
||||
className="makeStyles-actions-17"
|
||||
>
|
||||
<p
|
||||
className="MuiTypography-root MuiTypography-body2"
|
||||
data-loading={true}
|
||||
>
|
||||
Sorted by:
|
||||
</p>
|
||||
<button
|
||||
aria-controls="sorting"
|
||||
aria-haspopup="true"
|
||||
className="MuiButtonBase-root MuiButton-root MuiButton-text"
|
||||
data-loading={true}
|
||||
disabled={false}
|
||||
id="sorting"
|
||||
onBlur={[Function]}
|
||||
onClick={[Function]}
|
||||
onDragLeave={[Function]}
|
||||
onFocus={[Function]}
|
||||
onKeyDown={[Function]}
|
||||
onKeyUp={[Function]}
|
||||
onMouseDown={[Function]}
|
||||
onMouseLeave={[Function]}
|
||||
onMouseUp={[Function]}
|
||||
onTouchEnd={[Function]}
|
||||
onTouchMove={[Function]}
|
||||
onTouchStart={[Function]}
|
||||
style={
|
||||
{
|
||||
"fontWeight": "normal",
|
||||
"textTransform": "lowercase",
|
||||
}
|
||||
}
|
||||
tabIndex={0}
|
||||
title="Sort by"
|
||||
type="button"
|
||||
>
|
||||
<span
|
||||
className="MuiButton-label"
|
||||
>
|
||||
By Name
|
||||
<span
|
||||
className="MuiButton-endIcon MuiButton-iconSizeMedium"
|
||||
>
|
||||
<span
|
||||
aria-hidden={true}
|
||||
className="material-icons MuiIcon-root"
|
||||
>
|
||||
<svg
|
||||
className="MuiSvgIcon-root"
|
||||
focusable="false"
|
||||
role="img"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M7 10l5 5 5-5z"
|
||||
/>
|
||||
<title>
|
||||
Toggle
|
||||
</title>
|
||||
</svg>
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className="makeStyles-bodyContainer-11"
|
||||
>
|
||||
<ul
|
||||
className="MuiList-root MuiList-padding"
|
||||
>
|
||||
<ListItem
|
||||
feature={
|
||||
{
|
||||
"name": "Another",
|
||||
"reviveName": "Another",
|
||||
}
|
||||
}
|
||||
flags={{}}
|
||||
hasAccess={[Function]}
|
||||
/>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>,
|
||||
<div
|
||||
aria-atomic={true}
|
||||
aria-live="polite"
|
||||
className="makeStyles-container-18"
|
||||
data-testid="ANNOUNCER_ELEMENT_TEST_ID"
|
||||
role="status"
|
||||
/>,
|
||||
]
|
||||
`;
|
||||
|
||||
exports[`renders correctly with one feature without permissions 1`] = `
|
||||
[
|
||||
<div>
|
||||
<div
|
||||
className="makeStyles-searchBarContainer-3"
|
||||
>
|
||||
<form
|
||||
className="makeStyles-container-6"
|
||||
role="search"
|
||||
>
|
||||
<div
|
||||
className="makeStyles-search-7 makeStyles-searchBar-4"
|
||||
>
|
||||
<svg
|
||||
aria-hidden={true}
|
||||
className="MuiSvgIcon-root makeStyles-searchIcon-8"
|
||||
focusable="false"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"
|
||||
/>
|
||||
</svg>
|
||||
<div
|
||||
className="MuiInputBase-root makeStyles-inputRoot-9"
|
||||
onClick={[Function]}
|
||||
onKeyPress={[Function]}
|
||||
>
|
||||
<input
|
||||
aria-label="search"
|
||||
className="MuiInputBase-input MuiInputBase-inputTypeSearch"
|
||||
onAnimationStart={[Function]}
|
||||
onBlur={[Function]}
|
||||
onChange={[Function]}
|
||||
onFocus={[Function]}
|
||||
placeholder="Search..."
|
||||
type="search"
|
||||
value=""
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<a
|
||||
href="/archive"
|
||||
onClick={[Function]}
|
||||
>
|
||||
Archive
|
||||
</a>
|
||||
</div>
|
||||
<div
|
||||
className="MuiPaper-root MuiPaper-elevation1 MuiPaper-rounded"
|
||||
style={
|
||||
{
|
||||
"borderRadius": "10px",
|
||||
"boxShadow": "none",
|
||||
}
|
||||
}
|
||||
>
|
||||
<div
|
||||
className="makeStyles-headerContainer-10"
|
||||
>
|
||||
<div
|
||||
className="makeStyles-headerTitleContainer-14"
|
||||
>
|
||||
<div
|
||||
className=""
|
||||
data-loading={true}
|
||||
>
|
||||
<h1
|
||||
className="MuiTypography-root makeStyles-headerTitle-15 MuiTypography-h1"
|
||||
>
|
||||
Feature toggles
|
||||
</h1>
|
||||
</div>
|
||||
<div
|
||||
className="makeStyles-headerActions-16"
|
||||
>
|
||||
<div
|
||||
className="makeStyles-actionsContainer-1"
|
||||
>
|
||||
<div
|
||||
className="makeStyles-actions-17"
|
||||
>
|
||||
<p
|
||||
className="MuiTypography-root MuiTypography-body2"
|
||||
data-loading={true}
|
||||
>
|
||||
Sorted by:
|
||||
</p>
|
||||
<button
|
||||
aria-controls="sorting"
|
||||
aria-haspopup="true"
|
||||
className="MuiButtonBase-root MuiButton-root MuiButton-text"
|
||||
data-loading={true}
|
||||
disabled={false}
|
||||
id="sorting"
|
||||
onBlur={[Function]}
|
||||
onClick={[Function]}
|
||||
onDragLeave={[Function]}
|
||||
onFocus={[Function]}
|
||||
onKeyDown={[Function]}
|
||||
onKeyUp={[Function]}
|
||||
onMouseDown={[Function]}
|
||||
onMouseLeave={[Function]}
|
||||
onMouseUp={[Function]}
|
||||
onTouchEnd={[Function]}
|
||||
onTouchMove={[Function]}
|
||||
onTouchStart={[Function]}
|
||||
style={
|
||||
{
|
||||
"fontWeight": "normal",
|
||||
"textTransform": "lowercase",
|
||||
}
|
||||
}
|
||||
tabIndex={0}
|
||||
title="Sort by"
|
||||
type="button"
|
||||
>
|
||||
<span
|
||||
className="MuiButton-label"
|
||||
>
|
||||
By Name
|
||||
<span
|
||||
className="MuiButton-endIcon MuiButton-iconSizeMedium"
|
||||
>
|
||||
<span
|
||||
aria-hidden={true}
|
||||
className="material-icons MuiIcon-root"
|
||||
>
|
||||
<svg
|
||||
className="MuiSvgIcon-root"
|
||||
focusable="false"
|
||||
role="img"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
d="M7 10l5 5 5-5z"
|
||||
/>
|
||||
<title>
|
||||
Toggle
|
||||
</title>
|
||||
</svg>
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
<span
|
||||
className="MuiTouchRipple-root"
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className="makeStyles-bodyContainer-11"
|
||||
>
|
||||
<ul
|
||||
className="MuiList-root MuiList-padding"
|
||||
>
|
||||
<ListItem
|
||||
feature={
|
||||
{
|
||||
"name": "Another",
|
||||
"reviveName": "Another",
|
||||
}
|
||||
}
|
||||
flags={{}}
|
||||
hasAccess={[Function]}
|
||||
/>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>,
|
||||
<div
|
||||
aria-atomic={true}
|
||||
aria-live="polite"
|
||||
className="makeStyles-container-18"
|
||||
data-testid="ANNOUNCER_ELEMENT_TEST_ID"
|
||||
role="status"
|
||||
>
|
||||
Navigated to Feature toggles
|
||||
</div>,
|
||||
]
|
||||
`;
|
@ -3,9 +3,14 @@
|
||||
* Do not edit manually.
|
||||
* See `gen:api` script in package.json
|
||||
*/
|
||||
import type { CreateProjectSchemaMode } from './createProjectSchemaMode';
|
||||
|
||||
export interface CreateProjectSchema {
|
||||
id: string;
|
||||
name: string;
|
||||
description?: string;
|
||||
/** A mode of the project affecting what actions are possible in this project */
|
||||
mode?: CreateProjectSchemaMode;
|
||||
/** A default stickiness for the project affecting the default stickiness value for variants and Gradual Rollout strategy */
|
||||
defaultStickiness?: string;
|
||||
}
|
||||
|
17
frontend/src/openapi/models/createProjectSchemaMode.ts
Normal file
17
frontend/src/openapi/models/createProjectSchemaMode.ts
Normal file
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Generated by Orval
|
||||
* Do not edit manually.
|
||||
* See `gen:api` script in package.json
|
||||
*/
|
||||
|
||||
/**
|
||||
* A mode of the project affecting what actions are possible in this project
|
||||
*/
|
||||
export type CreateProjectSchemaMode =
|
||||
typeof CreateProjectSchemaMode[keyof typeof CreateProjectSchemaMode];
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
export const CreateProjectSchemaMode = {
|
||||
open: 'open',
|
||||
protected: 'protected',
|
||||
} as const;
|
@ -4,12 +4,22 @@
|
||||
* See `gen:api` script in package.json
|
||||
*/
|
||||
|
||||
/**
|
||||
* Describes a project's configuration in a given environment.
|
||||
*/
|
||||
export interface EnvironmentProjectSchema {
|
||||
/** The name of the environment */
|
||||
name: string;
|
||||
/** The [type of environment](https://docs.getunleash.io/reference/environments#environment-types). */
|
||||
type: string;
|
||||
/** `true` if the environment is enabled for the project, otherwise `false` */
|
||||
enabled: boolean;
|
||||
protected?: boolean;
|
||||
sortOrder?: number;
|
||||
projectApiTokenCount?: number | null;
|
||||
projectEnabledToggleCount?: number | null;
|
||||
/** `true` if the environment is protected, otherwise `false`. A *protected* environment can not be deleted. */
|
||||
protected: boolean;
|
||||
/** Priority of the environment in a list of environments, the lower the value, the higher up in the list the environment will appear */
|
||||
sortOrder: number;
|
||||
/** The number of client and front-end API tokens that have access to this project */
|
||||
projectApiTokenCount?: number;
|
||||
/** The number of features enabled in this environment for this project */
|
||||
projectEnabledToggleCount?: number;
|
||||
}
|
||||
|
@ -10,13 +10,14 @@
|
||||
export interface EnvironmentSchema {
|
||||
/** The name of the environment */
|
||||
name: string;
|
||||
/** The type of the environment */
|
||||
/** The [type of environment](https://docs.getunleash.io/reference/environments#environment-types). */
|
||||
type: string;
|
||||
/** `true` if the environment is enabled for the project, otherwise `false`. */
|
||||
enabled: boolean;
|
||||
protected?: boolean;
|
||||
/** The sort order of the environment in the environments list */
|
||||
sortOrder?: number;
|
||||
/** `true` if the environment is protected, otherwise `false`. A *protected* environment can not be deleted. */
|
||||
protected: boolean;
|
||||
/** Priority of the environment in a list of environments, the lower the value, the higher up in the list the environment will appear. Needs to be an integer */
|
||||
sortOrder: number;
|
||||
/** The number of projects with this environment */
|
||||
projectCount?: number | null;
|
||||
/** The number of API tokens for the project environment */
|
||||
|
@ -5,6 +5,9 @@
|
||||
*/
|
||||
import type { EnvironmentProjectSchema } from './environmentProjectSchema';
|
||||
|
||||
/**
|
||||
* Environments defined for a given project
|
||||
*/
|
||||
export interface EnvironmentsProjectSchema {
|
||||
version: number;
|
||||
environments: EnvironmentProjectSchema[];
|
||||
|
@ -31,9 +31,15 @@ export interface FeatureSchema {
|
||||
lastSeenAt?: string | null;
|
||||
/** The list of environments where the feature can be used */
|
||||
environments?: FeatureEnvironmentSchema[];
|
||||
/** The list of feature variants */
|
||||
/**
|
||||
* The list of feature variants
|
||||
* @deprecated
|
||||
*/
|
||||
variants?: VariantSchema[];
|
||||
/** This is a legacy field that will be deprecated */
|
||||
/**
|
||||
* This is a legacy field that will be deprecated
|
||||
* @deprecated
|
||||
*/
|
||||
strategies?: FeatureSchemaStrategiesItem[];
|
||||
/** The list of feature tags */
|
||||
tags?: TagSchema[] | null;
|
||||
|
@ -3,7 +3,6 @@
|
||||
* Do not edit manually.
|
||||
* See `gen:api` script in package.json
|
||||
*/
|
||||
import type { HealthOverviewSchemaDefaultStickiness } from './healthOverviewSchemaDefaultStickiness';
|
||||
import type { HealthOverviewSchemaMode } from './healthOverviewSchemaMode';
|
||||
import type { FeatureSchema } from './featureSchema';
|
||||
import type { ProjectStatsSchema } from './projectStatsSchema';
|
||||
@ -13,8 +12,8 @@ export interface HealthOverviewSchema {
|
||||
name: string;
|
||||
description?: string | null;
|
||||
/** A default stickiness for the project affecting the default stickiness value for variants and Gradual Rollout strategy */
|
||||
defaultStickiness?: HealthOverviewSchemaDefaultStickiness;
|
||||
/** A mode of the project affecting what actions are possible in this project. During a rollout of project modes this feature can be optional or `null` */
|
||||
defaultStickiness?: string;
|
||||
/** The project's [collaboration mode](https://docs.getunleash.io/reference/project-collaboration-mode). Determines whether non-project members can submit change requests or not. */
|
||||
mode?: HealthOverviewSchemaMode;
|
||||
members?: number;
|
||||
health?: number;
|
||||
|
@ -1,19 +0,0 @@
|
||||
/**
|
||||
* Generated by Orval
|
||||
* Do not edit manually.
|
||||
* See `gen:api` script in package.json
|
||||
*/
|
||||
|
||||
/**
|
||||
* A default stickiness for the project affecting the default stickiness value for variants and Gradual Rollout strategy
|
||||
*/
|
||||
export type HealthOverviewSchemaDefaultStickiness =
|
||||
typeof HealthOverviewSchemaDefaultStickiness[keyof typeof HealthOverviewSchemaDefaultStickiness];
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
export const HealthOverviewSchemaDefaultStickiness = {
|
||||
default: 'default',
|
||||
userId: 'userId',
|
||||
sessionId: 'sessionId',
|
||||
random: 'random',
|
||||
} as const;
|
@ -5,7 +5,7 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* A mode of the project affecting what actions are possible in this project. During a rollout of project modes this feature can be optional or `null`
|
||||
* The project's [collaboration mode](https://docs.getunleash.io/reference/project-collaboration-mode). Determines whether non-project members can submit change requests or not.
|
||||
*/
|
||||
export type HealthOverviewSchemaMode =
|
||||
typeof HealthOverviewSchemaMode[keyof typeof HealthOverviewSchemaMode];
|
||||
@ -14,5 +14,4 @@ export type HealthOverviewSchemaMode =
|
||||
export const HealthOverviewSchemaMode = {
|
||||
open: 'open',
|
||||
protected: 'protected',
|
||||
null: null,
|
||||
} as const;
|
||||
|
@ -3,7 +3,6 @@
|
||||
* Do not edit manually.
|
||||
* See `gen:api` script in package.json
|
||||
*/
|
||||
import type { HealthReportSchemaDefaultStickiness } from './healthReportSchemaDefaultStickiness';
|
||||
import type { HealthReportSchemaMode } from './healthReportSchemaMode';
|
||||
import type { FeatureSchema } from './featureSchema';
|
||||
import type { ProjectStatsSchema } from './projectStatsSchema';
|
||||
@ -13,8 +12,8 @@ export interface HealthReportSchema {
|
||||
name: string;
|
||||
description?: string | null;
|
||||
/** A default stickiness for the project affecting the default stickiness value for variants and Gradual Rollout strategy */
|
||||
defaultStickiness?: HealthReportSchemaDefaultStickiness;
|
||||
/** A mode of the project affecting what actions are possible in this project. During a rollout of project modes this feature can be optional or `null` */
|
||||
defaultStickiness?: string;
|
||||
/** The project's [collaboration mode](https://docs.getunleash.io/reference/project-collaboration-mode). Determines whether non-project members can submit change requests or not. */
|
||||
mode?: HealthReportSchemaMode;
|
||||
members?: number;
|
||||
health?: number;
|
||||
|
@ -1,19 +0,0 @@
|
||||
/**
|
||||
* Generated by Orval
|
||||
* Do not edit manually.
|
||||
* See `gen:api` script in package.json
|
||||
*/
|
||||
|
||||
/**
|
||||
* A default stickiness for the project affecting the default stickiness value for variants and Gradual Rollout strategy
|
||||
*/
|
||||
export type HealthReportSchemaDefaultStickiness =
|
||||
typeof HealthReportSchemaDefaultStickiness[keyof typeof HealthReportSchemaDefaultStickiness];
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
export const HealthReportSchemaDefaultStickiness = {
|
||||
default: 'default',
|
||||
userId: 'userId',
|
||||
sessionId: 'sessionId',
|
||||
random: 'random',
|
||||
} as const;
|
@ -5,7 +5,7 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* A mode of the project affecting what actions are possible in this project. During a rollout of project modes this feature can be optional or `null`
|
||||
* The project's [collaboration mode](https://docs.getunleash.io/reference/project-collaboration-mode). Determines whether non-project members can submit change requests or not.
|
||||
*/
|
||||
export type HealthReportSchemaMode =
|
||||
typeof HealthReportSchemaMode[keyof typeof HealthReportSchemaMode];
|
||||
@ -14,5 +14,4 @@ export type HealthReportSchemaMode =
|
||||
export const HealthReportSchemaMode = {
|
||||
open: 'open',
|
||||
protected: 'protected',
|
||||
null: null,
|
||||
} as const;
|
||||
|
@ -78,6 +78,7 @@ export * from './createFeatureSchema';
|
||||
export * from './createFeatureStrategySchema';
|
||||
export * from './createInvitedUserSchema';
|
||||
export * from './createProjectSchema';
|
||||
export * from './createProjectSchemaMode';
|
||||
export * from './createRoleWithPermissionsSchema';
|
||||
export * from './createRoleWithPermissionsSchemaPermissionsItem';
|
||||
export * from './createServiceAccountSchema';
|
||||
@ -120,10 +121,8 @@ export * from './groupsSchema';
|
||||
export * from './healthCheckSchema';
|
||||
export * from './healthCheckSchemaHealth';
|
||||
export * from './healthOverviewSchema';
|
||||
export * from './healthOverviewSchemaDefaultStickiness';
|
||||
export * from './healthOverviewSchemaMode';
|
||||
export * from './healthReportSchema';
|
||||
export * from './healthReportSchemaDefaultStickiness';
|
||||
export * from './healthReportSchemaMode';
|
||||
export * from './idSchema';
|
||||
export * from './importTogglesSchema';
|
||||
@ -179,11 +178,14 @@ export * from './playgroundStrategySchemaResultAnyOfFourEvaluationStatus';
|
||||
export * from './profileSchema';
|
||||
export * from './projectAccessSchema';
|
||||
export * from './projectCreatedSchema';
|
||||
export * from './projectCreatedSchemaMode';
|
||||
export * from './projectEnvironmentSchema';
|
||||
export * from './projectOverviewSchema';
|
||||
export * from './projectSchema';
|
||||
export * from './projectSchemaDefaultStickiness';
|
||||
export * from './projectSchemaMode';
|
||||
export * from './projectSettingsSchema';
|
||||
export * from './projectSettingsSchemaDefaultStickiness';
|
||||
export * from './projectSettingsSchemaMode';
|
||||
export * from './projectStatsSchema';
|
||||
export * from './projectUsers';
|
||||
export * from './projectsSchema';
|
||||
|
@ -3,6 +3,7 @@
|
||||
* Do not edit manually.
|
||||
* See `gen:api` script in package.json
|
||||
*/
|
||||
import type { ProjectCreatedSchemaMode } from './projectCreatedSchemaMode';
|
||||
|
||||
/**
|
||||
* Details about the newly created project.
|
||||
@ -14,4 +15,8 @@ export interface ProjectCreatedSchema {
|
||||
name: string;
|
||||
/** The project's description. */
|
||||
description?: string | null;
|
||||
/** A mode of the project affecting what actions are possible in this project */
|
||||
mode?: ProjectCreatedSchemaMode;
|
||||
/** A default stickiness for the project affecting the default stickiness value for variants and Gradual Rollout strategy */
|
||||
defaultStickiness?: string;
|
||||
}
|
||||
|
17
frontend/src/openapi/models/projectCreatedSchemaMode.ts
Normal file
17
frontend/src/openapi/models/projectCreatedSchemaMode.ts
Normal file
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* Generated by Orval
|
||||
* Do not edit manually.
|
||||
* See `gen:api` script in package.json
|
||||
*/
|
||||
|
||||
/**
|
||||
* A mode of the project affecting what actions are possible in this project
|
||||
*/
|
||||
export type ProjectCreatedSchemaMode =
|
||||
typeof ProjectCreatedSchemaMode[keyof typeof ProjectCreatedSchemaMode];
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
export const ProjectCreatedSchemaMode = {
|
||||
open: 'open',
|
||||
protected: 'protected',
|
||||
} as const;
|
@ -4,7 +4,6 @@
|
||||
* See `gen:api` script in package.json
|
||||
*/
|
||||
import type { ProjectSchemaMode } from './projectSchemaMode';
|
||||
import type { ProjectSchemaDefaultStickiness } from './projectSchemaDefaultStickiness';
|
||||
|
||||
/**
|
||||
* A definition of the project used for projects listing purposes
|
||||
@ -26,8 +25,8 @@ export interface ProjectSchema {
|
||||
updatedAt?: string | null;
|
||||
/** `true` if the project was favorited, otherwise `false`. */
|
||||
favorite?: boolean;
|
||||
/** A mode of the project affecting what actions are possible in this project */
|
||||
/** The project's [collaboration mode](https://docs.getunleash.io/reference/project-collaboration-mode). Determines whether non-project members can submit change requests or not. */
|
||||
mode?: ProjectSchemaMode;
|
||||
/** A default stickiness for the project affecting the default stickiness value for variants and Gradual Rollout strategy */
|
||||
defaultStickiness?: ProjectSchemaDefaultStickiness;
|
||||
defaultStickiness?: string;
|
||||
}
|
||||
|
@ -1,19 +0,0 @@
|
||||
/**
|
||||
* Generated by Orval
|
||||
* Do not edit manually.
|
||||
* See `gen:api` script in package.json
|
||||
*/
|
||||
|
||||
/**
|
||||
* A default stickiness for the project affecting the default stickiness value for variants and Gradual Rollout strategy
|
||||
*/
|
||||
export type ProjectSchemaDefaultStickiness =
|
||||
typeof ProjectSchemaDefaultStickiness[keyof typeof ProjectSchemaDefaultStickiness];
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
export const ProjectSchemaDefaultStickiness = {
|
||||
default: 'default',
|
||||
userId: 'userId',
|
||||
sessionId: 'sessionId',
|
||||
random: 'random',
|
||||
} as const;
|
@ -5,7 +5,7 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* A mode of the project affecting what actions are possible in this project
|
||||
* The project's [collaboration mode](https://docs.getunleash.io/reference/project-collaboration-mode). Determines whether non-project members can submit change requests or not.
|
||||
*/
|
||||
export type ProjectSchemaMode =
|
||||
typeof ProjectSchemaMode[keyof typeof ProjectSchemaMode];
|
||||
|
13
frontend/src/openapi/models/projectSettingsSchema.ts
Normal file
13
frontend/src/openapi/models/projectSettingsSchema.ts
Normal file
@ -0,0 +1,13 @@
|
||||
/**
|
||||
* Generated by Orval
|
||||
* Do not edit manually.
|
||||
* See `gen:api` script in package.json
|
||||
*/
|
||||
import type { ProjectSettingsSchemaDefaultStickiness } from './projectSettingsSchemaDefaultStickiness';
|
||||
import type { ProjectSettingsSchemaMode } from './projectSettingsSchemaMode';
|
||||
|
||||
export interface ProjectSettingsSchema {
|
||||
/** Default stickiness for project */
|
||||
defaultStickiness: ProjectSettingsSchemaDefaultStickiness;
|
||||
mode: ProjectSettingsSchemaMode;
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
/**
|
||||
* Generated by Orval
|
||||
* Do not edit manually.
|
||||
* See `gen:api` script in package.json
|
||||
*/
|
||||
|
||||
/**
|
||||
* Default stickiness for project
|
||||
*/
|
||||
export type ProjectSettingsSchemaDefaultStickiness =
|
||||
typeof ProjectSettingsSchemaDefaultStickiness[keyof typeof ProjectSettingsSchemaDefaultStickiness];
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
export const ProjectSettingsSchemaDefaultStickiness = {
|
||||
default: 'default',
|
||||
sessionId: 'sessionId',
|
||||
userId: 'userId',
|
||||
random: 'random',
|
||||
null: null,
|
||||
} as const;
|
15
frontend/src/openapi/models/projectSettingsSchemaMode.ts
Normal file
15
frontend/src/openapi/models/projectSettingsSchemaMode.ts
Normal file
@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Generated by Orval
|
||||
* Do not edit manually.
|
||||
* See `gen:api` script in package.json
|
||||
*/
|
||||
|
||||
export type ProjectSettingsSchemaMode =
|
||||
typeof ProjectSettingsSchemaMode[keyof typeof ProjectSettingsSchemaMode];
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
||||
export const ProjectSettingsSchemaMode = {
|
||||
open: 'open',
|
||||
protected: 'protected',
|
||||
null: null,
|
||||
} as const;
|
@ -466,10 +466,12 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {
|
||||
|
||||
let selectColumns = [
|
||||
'features.name as feature_name',
|
||||
'features.description as description',
|
||||
'features.type as type',
|
||||
'features.created_at as created_at',
|
||||
'features.last_seen_at as last_seen_at',
|
||||
'features.stale as stale',
|
||||
'features.impression_data as impression_data',
|
||||
'feature_environments.enabled as enabled',
|
||||
'feature_environments.environment as environment',
|
||||
'feature_environments.variants as variants',
|
||||
@ -499,28 +501,30 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {
|
||||
const rows = await query;
|
||||
|
||||
if (rows.length > 0) {
|
||||
const overview = rows.reduce((acc, r) => {
|
||||
if (acc[r.feature_name] !== undefined) {
|
||||
acc[r.feature_name].environments.push(
|
||||
FeatureStrategiesStore.getEnvironment(r),
|
||||
const overview = rows.reduce((acc, row) => {
|
||||
if (acc[row.feature_name] !== undefined) {
|
||||
acc[row.feature_name].environments.push(
|
||||
FeatureStrategiesStore.getEnvironment(row),
|
||||
);
|
||||
if (this.isNewTag(acc[r.feature_name], r)) {
|
||||
this.addTag(acc[r.feature_name], r);
|
||||
if (this.isNewTag(acc[row.feature_name], row)) {
|
||||
this.addTag(acc[row.feature_name], row);
|
||||
}
|
||||
} else {
|
||||
acc[r.feature_name] = {
|
||||
type: r.type,
|
||||
favorite: r.favorite,
|
||||
name: r.feature_name,
|
||||
createdAt: r.created_at,
|
||||
lastSeenAt: r.last_seen_at,
|
||||
stale: r.stale,
|
||||
acc[row.feature_name] = {
|
||||
type: row.type,
|
||||
description: row.description,
|
||||
favorite: row.favorite,
|
||||
name: row.feature_name,
|
||||
createdAt: row.created_at,
|
||||
lastSeenAt: row.last_seen_at,
|
||||
stale: row.stale,
|
||||
impressionData: row.impression_data,
|
||||
environments: [
|
||||
FeatureStrategiesStore.getEnvironment(r),
|
||||
FeatureStrategiesStore.getEnvironment(row),
|
||||
],
|
||||
};
|
||||
if (this.isNewTag(acc[r.feature_name], r)) {
|
||||
this.addTag(acc[r.feature_name], r);
|
||||
if (this.isNewTag(acc[row.feature_name], row)) {
|
||||
this.addTag(acc[row.feature_name], row);
|
||||
}
|
||||
}
|
||||
return acc;
|
||||
|
@ -34,8 +34,7 @@ export const featureSchema = {
|
||||
archived: {
|
||||
type: 'boolean',
|
||||
example: true,
|
||||
description:
|
||||
'`true` if the feature is archived, otherwise `false`.',
|
||||
description: '`true` if the feature is archived',
|
||||
},
|
||||
project: {
|
||||
type: 'string',
|
||||
@ -96,6 +95,7 @@ export const featureSchema = {
|
||||
$ref: '#/components/schemas/variantSchema',
|
||||
},
|
||||
description: 'The list of feature variants',
|
||||
deprecated: true,
|
||||
},
|
||||
strategies: {
|
||||
type: 'array',
|
||||
@ -103,6 +103,7 @@ export const featureSchema = {
|
||||
type: 'object',
|
||||
},
|
||||
description: 'This is a legacy field that will be deprecated',
|
||||
deprecated: true,
|
||||
},
|
||||
tags: {
|
||||
type: 'array',
|
||||
|
@ -417,7 +417,10 @@ export default class ProjectFeaturesController extends Controller {
|
||||
): Promise<void> {
|
||||
const { projectId } = req.params;
|
||||
const query = await this.prepQuery(req.query, projectId);
|
||||
const features = await this.featureService.getFeatureOverview(query);
|
||||
const features = await this.featureService.getFeatureOverview({
|
||||
...query,
|
||||
userId: req.user.id,
|
||||
});
|
||||
this.openApiService.respondWithValidation(
|
||||
200,
|
||||
res,
|
||||
|
@ -1459,7 +1459,7 @@ exports[`should serve the OpenAPI spec 1`] = `
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"archived": {
|
||||
"description": "\`true\` if the feature is archived, otherwise \`false\`.",
|
||||
"description": "\`true\` if the feature is archived",
|
||||
"example": true,
|
||||
"type": "boolean",
|
||||
},
|
||||
@ -1524,6 +1524,7 @@ exports[`should serve the OpenAPI spec 1`] = `
|
||||
"type": "boolean",
|
||||
},
|
||||
"strategies": {
|
||||
"deprecated": true,
|
||||
"description": "This is a legacy field that will be deprecated",
|
||||
"items": {
|
||||
"type": "object",
|
||||
@ -1544,6 +1545,7 @@ exports[`should serve the OpenAPI spec 1`] = `
|
||||
"type": "string",
|
||||
},
|
||||
"variants": {
|
||||
"deprecated": true,
|
||||
"description": "The list of feature variants",
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/variantSchema",
|
||||
|
Loading…
Reference in New Issue
Block a user