fix(teasers): updated muted styles from qa feedback [EE-6035] (#10391)

* fix(teasers): updated muted styles from qa feedback [EE-6035]
pull/10413/head
Ali 2023-09-28 11:32:48 +01:00 committed by GitHub
parent d9a3b98275
commit 6163aaa577
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 288 additions and 301 deletions

View File

@ -351,7 +351,7 @@
></save-auth-settings-button> ></save-auth-settings-button>
</div> </div>
<div ng-if="$ctrl.state.provider != 'custom'" class="limited-be"> <div ng-if="$ctrl.state.provider != 'custom'" class="limited-be be-indicator-container">
<div class="limited-be-link vertical-center"><be-feature-indicator feature="$ctrl.limitedFeature"></be-feature-indicator></div> <div class="limited-be-link vertical-center"><be-feature-indicator feature="$ctrl.limitedFeature"></be-feature-indicator></div>
<div class="limited-be-content"> <div class="limited-be-content">
<div class="col-sm-12 form-section-title">OAuth Configuration</div> <div class="col-sm-12 form-section-title">OAuth Configuration</div>

View File

@ -1,10 +1,10 @@
<div class="col-sm-12" style="margin-bottom: 0px"> <div class="col-sm-12" style="margin-bottom: 0px">
<div class="be-indicator-container limited-be">
<div class="limited-be-link vertical-center"><be-feature-indicator feature="$ctrl.limitedFeature"></be-feature-indicator></div>
<div class="limited-be-content">
<rd-widget> <rd-widget>
<rd-widget-header icon="user-x"> <rd-widget-header icon="user-x">
<header-title> <header-title> Effective access viewer </header-title>
Effective access viewer
<be-feature-indicator feature="$ctrl.limitedFeature" class="space-left"></be-feature-indicator>
</header-title>
</rd-widget-header> </rd-widget-header>
<rd-widget-body> <rd-widget-body>
<form class="form-horizontal"> <form class="form-horizontal">
@ -22,3 +22,5 @@
</rd-widget-body> </rd-widget-body>
</rd-widget> </rd-widget>
</div> </div>
</div>
</div>

View File

@ -1,5 +1,5 @@
<ng-form class="ad-settings" limited-feature-dir="{{::$ctrl.limitedFeatureId}}" limited-feature-class="limited-be"> <ng-form class="ad-settings" limited-feature-dir="{{::$ctrl.limitedFeatureId}}" limited-feature-class="limited-be">
<div> <div class="be-indicator-container">
<div class="limited-be-link vertical-center"><be-feature-indicator feature="$ctrl.limitedFeatureId"></be-feature-indicator></div> <div class="limited-be-link vertical-center"><be-feature-indicator feature="$ctrl.limitedFeatureId"></be-feature-indicator></div>
<div class="limited-be-content"> <div class="limited-be-content">
<auto-user-provision-toggle ng-model="$ctrl.settings.AutoCreateUsers"> <auto-user-provision-toggle ng-model="$ctrl.settings.AutoCreateUsers">

View File

@ -1,8 +1,10 @@
<div class="col-sm-12 form-section-title ldap-custom-admin-group-title" ng-style="$ctrl.isLimitedFeatureSelfContained && { 'padding-bottom': '15px' }"> <div class="col-sm-12 form-section-title flex items-center" style="float: initial">
Auto-populate team admins <be-feature-indicator feature="$ctrl.limitedFeatureId" class="space-left" ng-if="$ctrl.isLimitedFeatureSelfContained"></be-feature-indicator> Auto-populate team admins <be-feature-indicator feature="$ctrl.limitedFeatureId" class="space-left" ng-if="$ctrl.isLimitedFeatureSelfContained"></be-feature-indicator>
</div> </div>
<div class="w-full px-5 pt-3" ng-repeat="config in $ctrl.settings.AdminGroupSearchSettings | limitTo: (1 - $ctrl.settings.AdminGroupSearchSettings)"> <rd-widget>
<rd-widget-body>
<div class="w-full pt-3" ng-repeat="config in $ctrl.settings.AdminGroupSearchSettings | limitTo: (1 - $ctrl.settings.AdminGroupSearchSettings)">
<div class="form-group mb-3" ng-if="$index > 0"> <div class="form-group mb-3" ng-if="$index > 0">
<span class="col-sm-12 text-muted small"> Extra search configuration </span> <span class="col-sm-12 text-muted small"> Extra search configuration </span>
</div> </div>
@ -70,20 +72,14 @@
<div class="form-group mt-3"> <div class="form-group mt-3">
<div class="col-sm-12"> <div class="col-sm-12">
<button <button disabled class="btn btn-sm btn-light vertical-center !ml-0" ng-click="$ctrl.onAddClick()">
class="label label-default interactive no-border vertical-center" <pr-icon icon="'plus'"></pr-icon>
ng-click="$ctrl.onAddClick()" Add group search configuration
limited-feature-dir="{{ $ctrl.limitedFeatureId }}"
limited-feature-class=" {{ $ctrl.isLimitedFeatureSelfContained && 'limited-be' }}"
limited-feature-disabled
>
<pr-icon icon="'plus-circle'"></pr-icon>
add group search configuration
</button> </button>
</div> </div>
<div class="col-sm-12 vertical-center mt-2"> <div class="col-sm-12 vertical-center mt-2">
<button <button
class="btn btm-sm btn-primary" class="btn btm-sm btn-primary !ml-0"
type="button" type="button"
ng-click="$ctrl.search()" ng-click="$ctrl.search()"
limited-feature-dir="{{ $ctrl.limitedFeatureId }}" limited-feature-dir="{{ $ctrl.limitedFeatureId }}"
@ -127,3 +123,5 @@
</por-select> </por-select>
</div> </div>
</div> </div>
</rd-widget-body>
</rd-widget>

View File

@ -51,24 +51,19 @@
<div class="form-group" style="margin-top: 10px"> <div class="form-group" style="margin-top: 10px">
<div class="col-sm-12"> <div class="col-sm-12">
<button class="label label-default interactive vertical-center" style="border: 0" ng-click="$ctrl.onAddClick()"> <button class="btn btn-sm btn-light vertical-center !ml-0" ng-click="$ctrl.onAddClick()">
<pr-icon icon="'plus-circle'"></pr-icon> <pr-icon icon="'plus'"></pr-icon>
add group search configuration Add group search configuration
</button> </button>
</div> </div>
<div class="col-sm-12" style="margin-top: 10px"> <div class="col-sm-12" style="margin-top: 10px">
<button <be-teaser-button
class="btn btm-sm btn-primary" feature-id="$ctrl.limitedFeatureId"
type="button" heading="'Display User/Group matching'"
ng-click="$ctrl.search()" message="'Show the list of users and groups that match the Portainer search configurations'"
limited-feature-dir="{{ $ctrl.limitedFeatureId }}" button-text="'Display User/Group matching'"
limited-feature-tabindex="-1" button-class-name="'!ml-0'"
limited-feature-disabled ></be-teaser-button>
limited-feature-class="limited-be"
>
Display User/Group matching
</button>
<be-feature-indicator feature="$ctrl.limitedFeatureId" class="space-left"></be-feature-indicator>
</div> </div>
</div> </div>

View File

@ -40,24 +40,19 @@
<div class="form-group" style="margin-top: 10px"> <div class="form-group" style="margin-top: 10px">
<div class="col-sm-12"> <div class="col-sm-12">
<button class="label label-default interactive vertical-center" style="border: 0" ng-click="$ctrl.onAddClick()"> <button class="btn btn-sm btn-light vertical-center !ml-0" ng-click="$ctrl.onAddClick()">
<pr-icon icon="'plus-circle'"></pr-icon> <pr-icon icon="'plus'"></pr-icon>
add user search configuration Add user search configuration
</button> </button>
</div> </div>
<div class="col-sm-12" style="margin-top: 10px"> <div class="col-sm-12" style="margin-top: 10px">
<button <be-teaser-button
class="btn btm-sm btn-primary" feature-id="$ctrl.limitedFeatureId"
type="button" heading="'Display Users'"
ng-click="$ctrl.search()" message="'Allows you to display users from your LDAP server'"
limited-feature-dir="{{ $ctrl.limitedFeatureId }}" button-text="'Display Users'"
limited-feature-disabled button-class-name="'!ml-0'"
limited-feature-class="limited-be" ></be-teaser-button>
limited-feature-tabindex="-1"
>
Display Users
</button>
<be-feature-indicator feature="$ctrl.limitedFeatureId" class="space-left"></be-feature-indicator>
</div> </div>
</div> </div>

View File

@ -13,15 +13,9 @@
<div class="form-group" style="margin-top: 10px"> <div class="form-group" style="margin-top: 10px">
<div class="col-sm-12"> <div class="col-sm-12">
<button <button class="btn btn-sm btn-light vertical-center !ml-0" ng-click="$ctrl.onAddClick()" disabled>
class="label label-default interactive vertical-center" <pr-icon icon="'plus'"></pr-icon>
style="border: 0" Add group search configuration
ng-click="$ctrl.onAddClick()"
limited-feature-dir="{{::$ctrl.limitedFeatureId}}"
limited-feature-tabindex="-1"
>
<pr-icon icon="'plus-circle'"></pr-icon>
add group search configuration
</button> </button>
</div> </div>
<div class="col-sm-12" style="margin-top: 10px"> <div class="col-sm-12" style="margin-top: 10px">

View File

@ -18,20 +18,7 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="ldap_url" class="col-sm-3 col-lg-2 control-label flex flex-wrap text-left"> <label for="ldap_url" class="col-sm-3 col-lg-2 control-label flex flex-wrap text-left"> LDAP Server </label>
LDAP Server
<button
type="button"
class="label label-default interactive no-border vertical-center"
ng-click="$ctrl.addLDAPUrl()"
limited-feature-dir="{{ $ctrl.limitedFeatureId }}"
limited-feature-disabled
limited-feature-class="limited-be"
>
<pr-icon icon="'plus-circle'"></pr-icon>
Add additional server
</button>
</label>
<div class="col-sm-9 col-lg-10"> <div class="col-sm-9 col-lg-10">
<div class="mb-3 flex" ng-repeat="url in $ctrl.settings.URLs track by $index"> <div class="mb-3 flex" ng-repeat="url in $ctrl.settings.URLs track by $index">
<input type="text" class="form-control" id="ldap_url" ng-model="$ctrl.settings.URLs[$index]" placeholder="e.g. 10.0.0.10:389 or myldap.domain.tld:389" required /> <input type="text" class="form-control" id="ldap_url" ng-model="$ctrl.settings.URLs[$index]" placeholder="e.g. 10.0.0.10:389 or myldap.domain.tld:389" required />
@ -40,6 +27,15 @@
</button> </button>
</div> </div>
</div> </div>
<div class="col-sm-12">
<be-teaser-button
feature-id="$ctrl.limitedFeatureId"
heading="'Add additional server'"
message="'Allows you to add an additional LDAP server'"
button-text="'Add additional server'"
button-class-name="'!ml-0'"
></be-teaser-button>
</div>
</div> </div>
<div class="form-group"> <div class="form-group">

View File

@ -1,5 +1,5 @@
<ng-form limited-feature-dir="{{::$ctrl.limitedFeatureId}}" limited-feature-class="limited-be" class="ldap-settings-openldap"> <ng-form limited-feature-dir="{{::$ctrl.limitedFeatureId}}" limited-feature-class="limited-be" class="ldap-settings-openldap">
<div> <div class="be-indicator-container">
<div class="limited-be-link vertical-center"><be-feature-indicator feature="$ctrl.limitedFeatureId"></be-feature-indicator></div> <div class="limited-be-link vertical-center"><be-feature-indicator feature="$ctrl.limitedFeatureId"></be-feature-indicator></div>
<div class="limited-be-content"> <div class="limited-be-content">
<div> <div>

View File

@ -1,4 +1,4 @@
<div class="col-sm-12 form-section-title" ng-style="$ctrl.isLimitedFeatureSelfContained && { 'padding-bottom': '15px' }"> <div class="col-sm-12 form-section-title flex items-center" style="float: initial">
Test login Test login
<be-feature-indicator <be-feature-indicator
ng-if="$ctrl.showBeIndicatorIfNeeded" ng-if="$ctrl.showBeIndicatorIfNeeded"
@ -7,6 +7,9 @@
ng-if="$ctrl.isLimitedFeatureSelfContained" ng-if="$ctrl.isLimitedFeatureSelfContained"
></be-feature-indicator> ></be-feature-indicator>
</div> </div>
<rd-widget>
<rd-widget-body>
<div class="form-inline"> <div class="form-inline">
<div class="form-group" style="margin: 0"> <div class="form-group" style="margin: 0">
<label for="ldap_test_username" style="font-size: 0.9em; margin-right: 5px"> Username </label> <label for="ldap_test_username" style="font-size: 0.9em; margin-right: 5px"> Username </label>
@ -56,3 +59,5 @@
</div> </div>
</div> </div>
</div> </div>
</rd-widget-body>
</rd-widget>

View File

@ -22,7 +22,7 @@
limited-feature-tabindex="-1" limited-feature-tabindex="-1"
> >
<pr-icon icon="'plus-circle'"></pr-icon> <pr-icon icon="'plus-circle'"></pr-icon>
add user search configuration Add user search configuration
</button> </button>
</div> </div>
<div class="col-sm-12" style="margin-top: 10px"> <div class="col-sm-12" style="margin-top: 10px">

View File

@ -3,7 +3,7 @@
<div class="col-sm-12"> <div class="col-sm-12">
<button <button
type="button" type="button"
ng-class="[$ctrl.className, 'btn btn-primary btn-sm']" ng-class="[$ctrl.className, 'btn btn-primary btn-sm !ml-0']"
ng-click="$ctrl.onSaveSettings()" ng-click="$ctrl.onSaveSettings()"
ng-disabled="$ctrl.saveButtonDisabled || $ctrl.saveButtonState" ng-disabled="$ctrl.saveButtonDisabled || $ctrl.saveButtonState"
button-spinner="$ctrl.saveButtonState" button-spinner="$ctrl.saveButtonState"

View File

@ -6,9 +6,7 @@
<div class="widget-icon space-right"> <div class="widget-icon space-right">
<pr-icon icon="'history'"></pr-icon> <pr-icon icon="'history'"></pr-icon>
</div> </div>
Activity Logs Activity Logs
<be-feature-indicator feature="$ctrl.feature"></be-feature-indicator>
</div> </div>
<div class="vertical-center"> <div class="vertical-center">
<datatable-searchbar on-change="($ctrl.onChangeKeyword)" value="$ctrl.keyword"></datatable-searchbar> <datatable-searchbar on-change="($ctrl.onChangeKeyword)" value="$ctrl.keyword"></datatable-searchbar>

View File

@ -26,15 +26,7 @@
</div> </div>
</rd-widget-body> </rd-widget-body>
</rd-widget> </rd-widget>
</div> <div class="row mt-5">
</div>
</div>
<div class="be-indicator-container limited-be mx-4">
<div>
<div class="limited-be-link vertical-center"><be-feature-indicator feature="$ctrl.limitedFeature"></be-feature-indicator></div>
<div class="limited-be-content">
<div class="row">
<activity-logs-datatable <activity-logs-datatable
logs="$ctrl.state.logs" logs="$ctrl.state.logs"
keyword="$ctrl.state.keyword" keyword="$ctrl.state.keyword"

View File

@ -6,9 +6,7 @@
<div class="widget-icon space-right"> <div class="widget-icon space-right">
<pr-icon icon="'history'"></pr-icon> <pr-icon icon="'history'"></pr-icon>
</div> </div>
Authentication Events Authentication Events
<be-feature-indicator feature="$ctrl.feature"></be-feature-indicator>
</div> </div>
<div class="vertical-center"> <div class="vertical-center">
<datatable-searchbar on-change="($ctrl.onChangeKeyword)"></datatable-searchbar> <datatable-searchbar on-change="($ctrl.onChangeKeyword)"></datatable-searchbar>

View File

@ -25,15 +25,7 @@
</div> </div>
</rd-widget-body> </rd-widget-body>
</rd-widget> </rd-widget>
</div> <div class="row mt-5">
</div>
</div>
<div class="be-indicator-container limited-be mx-4">
<div>
<div class="limited-be-link vertical-center"><be-feature-indicator feature="$ctrl.limitedFeature"></be-feature-indicator></div>
<div class="limited-be-content">
<div class="row">
<auth-logs-datatable <auth-logs-datatable
logs="$ctrl.state.logs" logs="$ctrl.state.logs"
keyword="$ctrl.state.keyword" keyword="$ctrl.state.keyword"

View File

@ -23,5 +23,5 @@
} }
.be-indicator-container { .be-indicator-container {
@apply border border-solid border-gray-6; @apply relative;
} }

View File

@ -57,7 +57,13 @@ export function BoxSelectorItem<T extends Value>({
type={type} type={type}
checkIcon={checkIcon} checkIcon={checkIcon}
> >
{limitedToBE && <LimitedToBeBoxSelectorIndicator url={featureUrl} />} {limitedToBE && (
<LimitedToBeBoxSelectorIndicator
url={featureUrl}
// show tooltip only for radio type options because be-only checkbox options can't be selected
showTooltip={type === 'radio'}
/>
)}
<div <div
className={clsx('flex min-w-[140px] gap-2', { className={clsx('flex min-w-[140px] gap-2', {
'opacity-30': limitedToBE, 'opacity-30': limitedToBE,

View File

@ -5,9 +5,13 @@ import { Tooltip } from '@@/Tip/Tooltip';
interface Props { interface Props {
url?: string; url?: string;
showTooltip?: boolean;
} }
export function LimitedToBeBoxSelectorIndicator({ url }: Props) { export function LimitedToBeBoxSelectorIndicator({
url,
showTooltip = true,
}: Props) {
return ( return (
<div className="absolute left-0 top-0 w-full"> <div className="absolute left-0 top-0 w-full">
<div className="mx-auto flex max-w-fit items-center rounded-b-lg border border-t-0 border-solid border-gray-6 bg-transparent px-3 py-1 text-gray-6"> <div className="mx-auto flex max-w-fit items-center rounded-b-lg border border-t-0 border-solid border-gray-6 bg-transparent px-3 py-1 text-gray-6">
@ -20,10 +24,12 @@ export function LimitedToBeBoxSelectorIndicator({ url }: Props) {
<Icon icon={Briefcase} className="!mr-1" /> <Icon icon={Briefcase} className="!mr-1" />
<span>Business Feature</span> <span>Business Feature</span>
</a> </a>
{showTooltip && (
<Tooltip <Tooltip
size="sm" size="sm"
message="Select this option to preview this business feature." message="Select this option to preview this business feature."
/> />
)}
</div> </div>
</div> </div>
); );

View File

@ -11,6 +11,7 @@ import { Icon } from '@@/Icon';
import { confirm } from '@@/modals/confirm'; import { confirm } from '@@/modals/confirm';
import { ModalType } from '@@/modals'; import { ModalType } from '@@/modals';
import { buildConfirmButton } from '@@/modals/utils'; import { buildConfirmButton } from '@@/modals/utils';
import { TooltipWithChildren } from '@@/Tip/TooltipWithChildren';
import { import {
useApplicationRevisionList, useApplicationRevisionList,
@ -60,27 +61,38 @@ export function RollbackApplicationButton({
appName appName
); );
return ( const isRollbackNotAvailable =
<Authorized authorizations="K8sApplicationDetailsW"> !app ||
!appRevisions ||
appRevisions?.length < 2 ||
appDeployMethod !== 'application form' ||
patchAppMutation.isLoading;
const rollbackButton = (
<Button <Button
ng-if="!ctrl.isExternalApplication()" ng-if="!ctrl.isExternalApplication()"
type="button" type="button"
color="light" color="light"
size="small" size="small"
className="!ml-0" className="!ml-0"
disabled={ disabled={isRollbackNotAvailable}
!app ||
!appRevisions ||
appRevisions?.length < 2 ||
appDeployMethod !== 'application form' ||
patchAppMutation.isLoading
}
onClick={() => rollbackApplication()} onClick={() => rollbackApplication()}
data-cy="k8sAppDetail-rollbackButton" data-cy="k8sAppDetail-rollbackButton"
> >
<Icon icon={RotateCcw} className="mr-1" /> <Icon icon={RotateCcw} className="mr-1" />
Rollback to previous configuration Rollback to previous configuration
</Button> </Button>
);
return (
<Authorized authorizations="K8sApplicationDetailsW">
{isRollbackNotAvailable ? (
<TooltipWithChildren message="Cannot roll back to previous configuration as none currently exists">
<span>{rollbackButton}</span>
</TooltipWithChildren>
) : (
rollbackButton
)}
</Authorized> </Authorized>
); );

View File

@ -21,9 +21,8 @@ export function KubeConfigTeaserForm() {
return ( return (
<Formik initialValues={initialValues} onSubmit={() => {}} validateOnMount> <Formik initialValues={initialValues} onSubmit={() => {}} validateOnMount>
{() => ( {() => (
<Form className="mt-5"> <Form>
<FormSectionTitle>Environment details</FormSectionTitle> <FormSectionTitle>Environment details</FormSectionTitle>
<div className="form-group"> <div className="form-group">
<div className="col-sm-12"> <div className="col-sm-12">
<TextTip color="blue"> <TextTip color="blue">
@ -32,10 +31,9 @@ export function KubeConfigTeaserForm() {
href="https://docs.portainer.io/admin/environments/add/kubernetes/import" href="https://docs.portainer.io/admin/environments/add/kubernetes/import"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
className="mx-1"
> >
Import the kubeconfig file Import the kubeconfig file
</a> </a>{' '}
of an existing Kubernetes cluster located on-premise or on a of an existing Kubernetes cluster located on-premise or on a
cloud platform. This will create a corresponding environment cloud platform. This will create a corresponding environment
in Portainer and install the agent on the cluster. Please in Portainer and install the agent on the cluster. Please
@ -43,7 +41,7 @@ export function KubeConfigTeaserForm() {
</span> </span>
</TextTip> </TextTip>
</div> </div>
<div className="col-sm-12 text-muted small"> <div className="col-sm-12 text-muted text-xs">
<ul className="p-2 pl-4"> <ul className="p-2 pl-4">
<li>You have a load balancer enabled in your cluster</li> <li>You have a load balancer enabled in your cluster</li>
<li>You specify current-context in your kubeconfig</li> <li>You specify current-context in your kubeconfig</li>

View File

@ -30,14 +30,14 @@ div.limited-be {
} }
.limited-be-content { .limited-be-content {
@apply border-gray-6 p-2.5 text-xs opacity-50; @apply border-gray-6 p-2.5 opacity-50;
} }
.limited-be-link { .limited-be-link {
padding: 10px; padding: 10px;
width: inherit; width: inherit;
z-index: 5; z-index: 5;
position: relative; position: absolute;
top: 0px; top: 0px;
right: 0px; right: 0px;
float: right; float: right;