mirror of
https://github.com/andwati/zitadel.git
synced 2026-10-22 23:42:16 +00:00
# Which Problems Are Solved # How the Problems Are Solved # Additional Changes # Additional Context - Closes #10690
This commit is contained in:
@@ -38,6 +38,7 @@ interface V1AndV2Session {
|
||||
selector: 'cnsl-accounts-card',
|
||||
templateUrl: './accounts-card.component.html',
|
||||
styleUrls: ['./accounts-card.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class AccountsCardComponent {
|
||||
@Input({ required: true })
|
||||
|
||||
@@ -16,6 +16,7 @@ export enum ActionKeysType {
|
||||
selector: 'cnsl-action-keys',
|
||||
templateUrl: './action-keys.component.html',
|
||||
styleUrls: ['./action-keys.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class ActionKeysComponent implements AfterViewInit {
|
||||
@Input() type: ActionKeysType = ActionKeysType.ADD;
|
||||
|
||||
+1
@@ -11,6 +11,7 @@ import { CorrectlyTypedExecution } from '../../actions-two-add-action/actions-tw
|
||||
templateUrl: './actions-two-actions-table.component.html',
|
||||
styleUrls: ['./actions-two-actions-table.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: false,
|
||||
})
|
||||
export class ActionsTwoActionsTableComponent {
|
||||
@Output()
|
||||
|
||||
+1
@@ -23,6 +23,7 @@ import { ExecutionFieldName } from '@zitadel/proto/zitadel/action/v2beta/query_p
|
||||
templateUrl: './actions-two-actions.component.html',
|
||||
styleUrls: ['./actions-two-actions.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: false,
|
||||
})
|
||||
export class ActionsTwoActionsComponent {
|
||||
protected readonly refresh$ = new Subject<true>();
|
||||
|
||||
-1
@@ -29,7 +29,6 @@ class Filter implements PipeTransform {
|
||||
selector: 'cnsl-actions-two-add-action-autocomplete-input',
|
||||
templateUrl: './actions-two-add-action-autocomplete-input.component.html',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: true,
|
||||
imports: [
|
||||
AsyncPipe,
|
||||
Filter,
|
||||
|
||||
-1
@@ -28,7 +28,6 @@ export type ConditionTypeValue<T extends ConditionType> = Omit<
|
||||
>;
|
||||
|
||||
@Component({
|
||||
standalone: true,
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
selector: 'cnsl-actions-two-add-action-condition',
|
||||
templateUrl: './actions-two-add-action-condition.component.html',
|
||||
|
||||
-1
@@ -53,7 +53,6 @@ export type ActionTwoAddActionDialogResult = MessageInitShape<typeof SetExecutio
|
||||
selector: 'cnsl-actions-two-add-action-dialog',
|
||||
templateUrl: './actions-two-add-action-dialog.component.html',
|
||||
styleUrls: ['./actions-two-add-action-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
CommonModule,
|
||||
MatButtonModule,
|
||||
|
||||
-1
@@ -35,7 +35,6 @@ import { MatTooltipModule } from '@angular/material/tooltip';
|
||||
import { TableActionsModule } from 'src/app/modules/table-actions/table-actions.module';
|
||||
|
||||
@Component({
|
||||
standalone: true,
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
selector: 'cnsl-actions-two-add-action-target',
|
||||
templateUrl: './actions-two-add-action-target.component.html',
|
||||
|
||||
-1
@@ -16,7 +16,6 @@ import { ConditionType } from '../actions-two-add-action-condition/actions-two-a
|
||||
// }
|
||||
|
||||
@Component({
|
||||
standalone: true,
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
selector: 'cnsl-actions-two-add-action-type',
|
||||
templateUrl: './actions-two-add-action-type.component.html',
|
||||
|
||||
-1
@@ -22,7 +22,6 @@ type TargetTypes = ActionTwoAddTargetDialogComponent['targetTypes'][number];
|
||||
selector: 'cnsl-actions-two-add-target-dialog',
|
||||
templateUrl: './actions-two-add-target-dialog.component.html',
|
||||
styleUrls: ['./actions-two-add-target-dialog.component.scss'],
|
||||
standalone: true,
|
||||
imports: [
|
||||
CommonModule,
|
||||
MatButtonModule,
|
||||
|
||||
+1
@@ -10,6 +10,7 @@ import { toSignal } from '@angular/core/rxjs-interop';
|
||||
templateUrl: './actions-two-targets-table.component.html',
|
||||
styleUrls: ['./actions-two-targets-table.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: false,
|
||||
})
|
||||
export class ActionsTwoTargetsTableComponent {
|
||||
@Output()
|
||||
|
||||
+1
@@ -19,6 +19,7 @@ import { InfoSectionType } from '../../info-section/info-section.component';
|
||||
templateUrl: './actions-two-targets.component.html',
|
||||
styleUrls: ['./actions-two-targets.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: false,
|
||||
})
|
||||
export class ActionsTwoTargetsComponent {
|
||||
protected readonly targets$: Observable<Target[]>;
|
||||
|
||||
@@ -12,6 +12,7 @@ export enum AddKeyDialogType {
|
||||
selector: 'cnsl-add-key-dialog',
|
||||
templateUrl: './add-key-dialog.component.html',
|
||||
styleUrls: ['./add-key-dialog.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class AddKeyDialogComponent {
|
||||
public startDate: Date = new Date();
|
||||
|
||||
@@ -21,6 +21,7 @@ export enum CreationType {
|
||||
selector: 'cnsl-member-create-dialog',
|
||||
templateUrl: './member-create-dialog.component.html',
|
||||
styleUrls: ['./member-create-dialog.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class MemberCreateDialogComponent {
|
||||
private projectId: string = '';
|
||||
|
||||
@@ -6,6 +6,7 @@ import { getMembershipColor } from 'src/app/utils/color';
|
||||
selector: 'cnsl-add-member-roles-dialog',
|
||||
templateUrl: './add-member-roles-dialog.component.html',
|
||||
styleUrls: ['./add-member-roles-dialog.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class AddMemberRolesDialogComponent {
|
||||
public allRoles: string[] = [];
|
||||
|
||||
@@ -6,6 +6,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
selector: 'cnsl-add-token-dialog',
|
||||
templateUrl: './add-token-dialog.component.html',
|
||||
styleUrls: ['./add-token-dialog.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class AddTokenDialogComponent {
|
||||
public startDate: Date = new Date();
|
||||
|
||||
@@ -5,6 +5,7 @@ import { OIDCAppType } from 'src/app/proto/generated/zitadel/app_pb';
|
||||
selector: 'cnsl-app-card',
|
||||
templateUrl: './app-card.component.html',
|
||||
styleUrls: ['./app-card.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class AppCardComponent {
|
||||
@Input() public outline: boolean = false;
|
||||
|
||||
+1
@@ -25,6 +25,7 @@ export interface RadioItemAuthType {
|
||||
selector: 'cnsl-auth-method-radio',
|
||||
templateUrl: './app-auth-method-radio.component.html',
|
||||
styleUrls: ['./app-auth-method-radio.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class AppAuthMethodRadioComponent {
|
||||
@Input() current: string = '';
|
||||
|
||||
@@ -5,6 +5,7 @@ import { RadioItemAppType, WEB_TYPE } from 'src/app/pages/projects/apps/authtype
|
||||
selector: 'cnsl-type-radio',
|
||||
templateUrl: './app-type-radio.component.html',
|
||||
styleUrls: ['./app-type-radio.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class AppTypeRadioComponent {
|
||||
@Input() selected: RadioItemAppType = WEB_TYPE;
|
||||
|
||||
@@ -6,6 +6,7 @@ import { Color, getColorHash } from 'src/app/utils/color';
|
||||
selector: 'cnsl-avatar',
|
||||
templateUrl: './avatar.component.html',
|
||||
styleUrls: ['./avatar.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class AvatarComponent implements OnInit {
|
||||
@Input() name: string = '';
|
||||
|
||||
@@ -5,6 +5,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
||||
templateUrl: './card.component.html',
|
||||
styleUrls: ['./card.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: false,
|
||||
})
|
||||
export class CardComponent {
|
||||
@Input() public title: string = '';
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<div class="scroll-container">
|
||||
<li class="item" *ngFor="let hist of data | async; index as histindex">
|
||||
<span *ngIf="hist.values[0].dates[0]" class="date">
|
||||
{{ hist.values[0].dates[0] | timestampToDate | localizedDate: 'dd. MMM YYYY' }}
|
||||
{{ hist.values[0].dates[0] | timestampToDate | localizedDate: 'dd. MMM yyyy' }}
|
||||
</span>
|
||||
<div class="item" *ngFor="let dayelement of hist.values; index as i">
|
||||
<div class="row">
|
||||
@@ -28,7 +28,7 @@
|
||||
<span class="msg">{{ action.localizedMessage }}</span>
|
||||
<span
|
||||
class="block"
|
||||
matTooltip="{{ dayelement.dates[j] | timestampToDate | localizedDate: 'dd. MM YYYY, HH:mm:ss.SSS' }}"
|
||||
matTooltip="{{ dayelement.dates[j] | timestampToDate | localizedDate: 'dd. MM yyyy, HH:mm:ss.SSS' }}"
|
||||
>{{ dayelement.dates[j] | timestampToDate | localizedDate: 'HH:mm' }}</span
|
||||
>
|
||||
</div>
|
||||
|
||||
@@ -51,6 +51,7 @@ type ListChanges =
|
||||
selector: 'cnsl-changes',
|
||||
templateUrl: './changes.component.html',
|
||||
styleUrls: ['./changes.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class ChangesComponent implements OnInit {
|
||||
@Input({ required: true }) public changeType!: ChangeType;
|
||||
|
||||
@@ -19,6 +19,7 @@ import { PageEvent, PaginatorComponent } from '../paginator/paginator.component'
|
||||
selector: 'cnsl-client-keys',
|
||||
templateUrl: './client-keys.component.html',
|
||||
styleUrls: ['./client-keys.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class ClientKeysComponent implements OnInit {
|
||||
@Input() projectId!: string;
|
||||
|
||||
@@ -25,6 +25,7 @@ import { Type } from 'src/app/proto/generated/zitadel/user_pb';
|
||||
]),
|
||||
]),
|
||||
],
|
||||
standalone: false,
|
||||
})
|
||||
export class ContributorsComponent {
|
||||
@Input() title: string = '';
|
||||
|
||||
@@ -4,6 +4,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
|
||||
selector: 'cnsl-create-layout',
|
||||
templateUrl: './create-layout.component.html',
|
||||
styleUrls: ['./create-layout.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class CreateLayoutComponent {
|
||||
@Input() currentCreateStep: number = 1;
|
||||
|
||||
@@ -4,6 +4,7 @@ import { Component, Input } from '@angular/core';
|
||||
selector: 'cnsl-detail-layout',
|
||||
templateUrl: './detail-layout.component.html',
|
||||
styleUrls: ['./detail-layout.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class DetailLayoutComponent {
|
||||
@Input() hasBackButton: boolean = true;
|
||||
|
||||
@@ -7,6 +7,7 @@ import { Event } from 'src/app/proto/generated/zitadel/event_pb';
|
||||
selector: 'cnsl-display-json-dialog',
|
||||
templateUrl: './display-json-dialog.component.html',
|
||||
styleUrls: ['./display-json-dialog.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class DisplayJsonDialogComponent {
|
||||
public event?: Event;
|
||||
|
||||
@@ -5,6 +5,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
selector: 'cnsl-add-domain-dialog',
|
||||
templateUrl: './add-domain-dialog.component.html',
|
||||
styleUrls: ['./add-domain-dialog.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class AddDomainDialogComponent {
|
||||
public newdomain: string = '';
|
||||
|
||||
@@ -11,6 +11,7 @@ import { ToastService } from 'src/app/services/toast.service';
|
||||
selector: 'cnsl-domain-verification',
|
||||
templateUrl: './domain-verification.component.html',
|
||||
styleUrls: ['./domain-verification.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class DomainVerificationComponent {
|
||||
public domain?: Domain.AsObject;
|
||||
|
||||
@@ -14,6 +14,7 @@ import { DomainVerificationComponent } from './domain-verification/domain-verifi
|
||||
selector: 'cnsl-domains',
|
||||
templateUrl: './domains.component.html',
|
||||
styleUrls: ['./domains.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class DomainsComponent implements OnInit {
|
||||
public domains: Domain.AsObject[] = [];
|
||||
|
||||
@@ -9,6 +9,7 @@ import { InfoSectionType } from '../info-section/info-section.component';
|
||||
selector: 'cnsl-edit-text',
|
||||
templateUrl: './edit-text.component.html',
|
||||
styleUrls: ['./edit-text.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class EditTextComponent implements OnInit, OnDestroy {
|
||||
@Input() label: string = '';
|
||||
|
||||
@@ -31,6 +31,7 @@ type LoadRequest = {
|
||||
selector: 'cnsl-events',
|
||||
templateUrl: './events.component.html',
|
||||
styleUrls: ['./events.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class EventsComponent implements OnDestroy {
|
||||
public INITPAGESIZE = 20;
|
||||
|
||||
@@ -12,6 +12,7 @@ import { ToastService } from 'src/app/services/toast.service';
|
||||
selector: 'cnsl-iam-failed-events',
|
||||
templateUrl: './failed-events.component.html',
|
||||
styleUrls: ['./failed-events.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class FailedEventsComponent implements AfterViewInit {
|
||||
@ViewChild(MatPaginator) public eventPaginator!: MatPaginator;
|
||||
|
||||
@@ -34,6 +34,7 @@ function dateToTs(date: Date): Timestamp {
|
||||
selector: 'cnsl-filter-events',
|
||||
templateUrl: './filter-events.component.html',
|
||||
styleUrls: ['./filter-events.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class FilterEventsComponent implements OnInit {
|
||||
// Make enum available in template
|
||||
|
||||
@@ -26,6 +26,7 @@ enum SubQuery {
|
||||
selector: 'cnsl-filter-org',
|
||||
templateUrl: './filter-org.component.html',
|
||||
styleUrls: ['./filter-org.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class FilterOrgComponent extends FilterComponent implements OnInit {
|
||||
public SubQuery: any = SubQuery;
|
||||
|
||||
@@ -17,6 +17,7 @@ enum SubQuery {
|
||||
selector: 'cnsl-filter-project',
|
||||
templateUrl: './filter-project.component.html',
|
||||
styleUrls: ['./filter-project.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class FilterProjectComponent extends FilterComponent implements OnInit {
|
||||
public SubQuery: any = SubQuery;
|
||||
|
||||
@@ -24,6 +24,7 @@ enum SubQuery {
|
||||
selector: 'cnsl-filter-user-grants',
|
||||
templateUrl: './filter-user-grants.component.html',
|
||||
styleUrls: ['./filter-user-grants.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class FilterUserGrantsComponent extends FilterComponent implements OnInit {
|
||||
public SubQuery: any = SubQuery;
|
||||
|
||||
@@ -26,6 +26,7 @@ enum SubQuery {
|
||||
selector: 'cnsl-filter-user',
|
||||
templateUrl: './filter-user.component.html',
|
||||
styleUrls: ['./filter-user.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class FilterUserComponent extends FilterComponent implements OnInit {
|
||||
public SubQuery: any = SubQuery;
|
||||
|
||||
@@ -22,6 +22,7 @@ type FilterSearchQueryAsObject =
|
||||
selector: 'cnsl-filter',
|
||||
templateUrl: './filter.component.html',
|
||||
styleUrls: ['./filter.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class FilterComponent {
|
||||
@Output() public filterChanged: EventEmitter<FilterSearchQuery[]> = new EventEmitter();
|
||||
|
||||
@@ -7,6 +7,7 @@ import { faXTwitter } from '@fortawesome/free-brands-svg-icons';
|
||||
selector: 'cnsl-footer',
|
||||
templateUrl: './footer.component.html',
|
||||
styleUrls: ['./footer.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class FooterComponent {
|
||||
public faXTwitter = faXTwitter;
|
||||
|
||||
@@ -12,6 +12,7 @@ export const CNSL_ERROR = new InjectionToken<CnslErrorDirective>('CnslError');
|
||||
'[attr.id]': 'id',
|
||||
},
|
||||
providers: [{ provide: CNSL_ERROR, useExisting: CnslErrorDirective }],
|
||||
standalone: false,
|
||||
})
|
||||
export class CnslErrorDirective {
|
||||
@Input() id: string = `cnsl-error-${nextUniqueId++}`;
|
||||
|
||||
@@ -60,6 +60,7 @@ interface ValidationError {
|
||||
encapsulation: ViewEncapsulation.None,
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
animations: [cnslFormFieldAnimations.transitionMessages],
|
||||
standalone: false,
|
||||
})
|
||||
export class CnslFormFieldComponent extends CnslFormFieldBase implements OnDestroy, AfterContentInit, AfterViewInit {
|
||||
focused: boolean = false;
|
||||
|
||||
@@ -13,6 +13,7 @@ import { Organization } from '@zitadel/proto/zitadel/org/v2/org_pb';
|
||||
selector: 'cnsl-header',
|
||||
templateUrl: './header.component.html',
|
||||
styleUrls: ['./header.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class HeaderComponent {
|
||||
@Input() public isDarkTheme: boolean = true;
|
||||
|
||||
@@ -12,6 +12,7 @@ import { Breadcrumb, BreadcrumbService, BreadcrumbType } from 'src/app/services/
|
||||
selector: 'cnsl-iam-views',
|
||||
templateUrl: './iam-views.component.html',
|
||||
styleUrls: ['./iam-views.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class IamViewsComponent implements AfterViewInit {
|
||||
@ViewChild(MatSort) sort!: MatSort;
|
||||
|
||||
@@ -43,6 +43,7 @@ import { first } from 'rxjs/operators';
|
||||
selector: 'cnsl-idp-table',
|
||||
templateUrl: './idp-table.component.html',
|
||||
styleUrls: ['./idp-table.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class IdpTableComponent implements OnInit, OnDestroy {
|
||||
@Input() public serviceType!: PolicyComponentServiceType;
|
||||
|
||||
@@ -7,6 +7,7 @@ import { InfoSectionType } from '../info-section/info-section.component';
|
||||
selector: 'cnsl-info-dialog',
|
||||
templateUrl: './info-dialog.component.html',
|
||||
styleUrls: ['./info-dialog.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class InfoDialogComponent {
|
||||
public confirm: string = '';
|
||||
|
||||
@@ -7,6 +7,7 @@ export const OVERLAY_DATA = new InjectionToken<any>('OVERLAY_DATA');
|
||||
selector: 'cnsl-info-overlay',
|
||||
templateUrl: './info-overlay.component.html',
|
||||
styleUrls: ['./info-overlay.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class InfoOverlayComponent {
|
||||
constructor(
|
||||
|
||||
@@ -21,14 +21,14 @@
|
||||
<div class="info-wrapper">
|
||||
<p class="info-row-title">{{ 'USER.DETAILS.DATECREATED' | translate }}</p>
|
||||
<p *ngIf="creationDate" class="info-row-desc">
|
||||
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
|
||||
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="info-wrapper">
|
||||
<p class="info-row-title">{{ 'USER.DETAILS.DATECHANGED' | translate }}</p>
|
||||
<p *ngIf="changeDate" class="info-row-desc">
|
||||
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
|
||||
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -97,14 +97,14 @@
|
||||
<div class="info-wrapper">
|
||||
<p class="info-row-title">{{ 'ORG.PAGES.CREATIONDATE' | translate }}</p>
|
||||
<p *ngIf="instance?.details?.creationDate as creationDate" class="info-row-desc">
|
||||
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
|
||||
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="info-wrapper">
|
||||
<p class="info-row-title">{{ 'ORG.PAGES.DATECHANGED' | translate }}</p>
|
||||
<p *ngIf="instance?.details?.changeDate as changeDate" class="info-row-desc">
|
||||
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
|
||||
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -144,14 +144,14 @@
|
||||
<div class="info-wrapper">
|
||||
<p class="info-row-title">{{ 'ORG.PAGES.CREATIONDATE' | translate }}</p>
|
||||
<p *ngIf="org?.details?.creationDate as creationDate" class="info-row-desc">
|
||||
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
|
||||
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="info-wrapper">
|
||||
<p class="info-row-title">{{ 'ORG.PAGES.DATECHANGED' | translate }}</p>
|
||||
<p *ngIf="org?.details?.changeDate as changeDate" class="info-row-desc">
|
||||
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
|
||||
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -179,14 +179,14 @@
|
||||
<div class="info-wrapper">
|
||||
<p class="info-row-title">{{ 'PROJECT.PAGES.CREATEDON' | translate }}</p>
|
||||
<p *ngIf="project?.details?.creationDate as creationDate" class="info-row-desc">
|
||||
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
|
||||
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="info-wrapper">
|
||||
<p class="info-row-title">{{ 'PROJECT.PAGES.LASTMODIFIED' | translate }}</p>
|
||||
<p *ngIf="project?.details?.changeDate as changeDate" class="info-row-desc">
|
||||
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
|
||||
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -219,14 +219,14 @@
|
||||
<div class="info-wrapper">
|
||||
<p class="info-row-title">{{ 'PROJECT.PAGES.CREATEDON' | translate }}</p>
|
||||
<p *ngIf="grantedProject?.details?.creationDate as creationDate" class="info-row-desc">
|
||||
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
|
||||
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="info-wrapper">
|
||||
<p class="info-row-title">{{ 'PROJECT.PAGES.LASTMODIFIED' | translate }}</p>
|
||||
<p *ngIf="grantedProject?.details?.changeDate as changeDate" class="info-row-desc">
|
||||
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
|
||||
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -265,14 +265,14 @@
|
||||
<div class="info-wrapper">
|
||||
<p class="info-row-title">{{ 'APP.PAGES.DATECREATED' | translate }}</p>
|
||||
<p *ngIf="app?.details?.creationDate as creationDate" class="info-row-desc">
|
||||
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
|
||||
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="info-wrapper">
|
||||
<p class="info-row-title">{{ 'APP.PAGES.DATECHANGED' | translate }}</p>
|
||||
<p *ngIf="app?.details?.changeDate as changeDate" class="info-row-desc">
|
||||
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
|
||||
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -318,14 +318,14 @@
|
||||
<div class="info-wrapper">
|
||||
<p class="info-row-title">{{ 'IDP.DETAIL.DATECREATED' | translate }}</p>
|
||||
<p class="info-row-desc" *ngIf="idp?.details?.creationDate as creationDate">
|
||||
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
|
||||
{{ creationDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="info-wrapper">
|
||||
<p class="info-row-title">{{ 'IDP.DETAIL.DATECHANGED' | translate }}</p>
|
||||
<p class="info-row-desc" *ngIf="idp?.details?.changeDate as changeDate">
|
||||
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }}
|
||||
{{ changeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm' }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ import { Organization as OrgV2 } from '@zitadel/proto/zitadel/org/v2/org_pb';
|
||||
selector: 'cnsl-info-row',
|
||||
templateUrl: './info-row.component.html',
|
||||
styleUrls: ['./info-row.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class InfoRowComponent {
|
||||
@Input() public user?: User.AsObject | UserV2 | UserV1;
|
||||
|
||||
@@ -11,6 +11,7 @@ export enum InfoSectionType {
|
||||
templateUrl: './info-section.component.html',
|
||||
styleUrls: ['./info-section.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: false,
|
||||
})
|
||||
export class InfoSectionComponent {
|
||||
@Input() type: InfoSectionType = InfoSectionType.INFO;
|
||||
|
||||
@@ -12,6 +12,7 @@ import { By } from '@angular/platform-browser';
|
||||
|
||||
@Component({
|
||||
template: `<input appInputDirective />`,
|
||||
standalone: false,
|
||||
})
|
||||
class TestHostComponent {}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ import {
|
||||
Self,
|
||||
} from '@angular/core';
|
||||
import { FormGroupDirective, NgControl, NgForm } from '@angular/forms';
|
||||
import { CanUpdateErrorState, ErrorStateMatcher, mixinErrorState } from '@angular/material/core';
|
||||
import { _ErrorStateTracker, ErrorStateMatcher } from '@angular/material/core';
|
||||
import { MatFormField, MatFormFieldControl, MAT_FORM_FIELD } from '@angular/material/form-field';
|
||||
import { getMatInputUnsupportedTypeError, MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';
|
||||
import { Subject } from 'rxjs';
|
||||
@@ -26,24 +26,6 @@ const MAT_INPUT_INVALID_TYPES = ['button', 'checkbox', 'file', 'hidden', 'image'
|
||||
|
||||
let nextUniqueId = 0;
|
||||
|
||||
const _MatInputBase = mixinErrorState(
|
||||
class {
|
||||
readonly stateChanges = new Subject<void>();
|
||||
|
||||
constructor(
|
||||
public _defaultErrorStateMatcher: ErrorStateMatcher,
|
||||
public _parentForm: NgForm,
|
||||
public _parentFormGroup: FormGroupDirective,
|
||||
/**
|
||||
* Form control bound to the component.
|
||||
* Implemented as part of `MatFormFieldControl`.
|
||||
* @docs-private
|
||||
*/
|
||||
public ngControl: NgControl,
|
||||
) {}
|
||||
},
|
||||
);
|
||||
|
||||
/** Directive that allows a native input to work inside a `MatFormField`. */
|
||||
@Directive({
|
||||
selector: `input[cnslInput], textarea[cnslInput], select[cnslNativeControl]`,
|
||||
@@ -68,11 +50,9 @@ const _MatInputBase = mixinErrorState(
|
||||
'[attr.aria-required]': 'required.toString()',
|
||||
},
|
||||
providers: [{ provide: MatFormFieldControl, useExisting: InputDirective }],
|
||||
standalone: false,
|
||||
})
|
||||
export class InputDirective
|
||||
extends _MatInputBase
|
||||
implements MatFormFieldControl<any>, OnChanges, CanUpdateErrorState, OnDestroy, AfterViewInit, DoCheck, CanUpdateErrorState
|
||||
{
|
||||
export class InputDirective implements MatFormFieldControl<any>, OnChanges, OnDestroy, AfterViewInit, DoCheck {
|
||||
protected _uid: string = `cnsl-input-${nextUniqueId++}`;
|
||||
protected _previousNativeValue: any;
|
||||
private _inputValueAccessor: { value: any };
|
||||
@@ -97,7 +77,14 @@ export class InputDirective
|
||||
* Implemented as part of MatFormFieldControl.
|
||||
* @docs-private
|
||||
*/
|
||||
override readonly stateChanges: Subject<void> = new Subject<void>();
|
||||
readonly stateChanges: Subject<void> = new Subject<void>();
|
||||
|
||||
get errorState() {
|
||||
return this._errorStateTracker.errorState;
|
||||
}
|
||||
set errorState(value: boolean) {
|
||||
this._errorStateTracker.errorState = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implemented as part of MatFormFieldControl.
|
||||
@@ -184,9 +171,6 @@ export class InputDirective
|
||||
}
|
||||
protected _type: string = 'text';
|
||||
|
||||
/** An object used to control when error messages are shown. */
|
||||
@Input() override errorStateMatcher!: ErrorStateMatcher;
|
||||
|
||||
/**
|
||||
* Implemented as part of MatFormFieldControl.
|
||||
* @docs-private
|
||||
@@ -223,24 +207,40 @@ export class InputDirective
|
||||
getSupportedInputTypes().has(t),
|
||||
);
|
||||
|
||||
@Input()
|
||||
get errorStateMatcher() {
|
||||
return this._errorStateTracker.matcher;
|
||||
}
|
||||
set errorStateMatcher(value: ErrorStateMatcher) {
|
||||
this._errorStateTracker.matcher = value;
|
||||
}
|
||||
|
||||
private _errorStateTracker: _ErrorStateTracker;
|
||||
|
||||
constructor(
|
||||
protected _elementRef: ElementRef<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>,
|
||||
protected _platform: Platform,
|
||||
/** @docs-private */
|
||||
@Optional() @Self() public override ngControl: NgControl,
|
||||
@Optional() _parentForm: NgForm,
|
||||
@Optional() _parentFormGroup: FormGroupDirective,
|
||||
_defaultErrorStateMatcher: ErrorStateMatcher,
|
||||
@Optional() @Self() public ngControl: NgControl,
|
||||
@Optional() parentForm: NgForm,
|
||||
@Optional() parentFormGroup: FormGroupDirective,
|
||||
defaultErrorStateMatcher: ErrorStateMatcher,
|
||||
@Optional() @Self() @Inject(MAT_INPUT_VALUE_ACCESSOR) inputValueAccessor: any,
|
||||
private _autofillMonitor: AutofillMonitor,
|
||||
ngZone: NgZone,
|
||||
@Optional() @Inject(MAT_FORM_FIELD) private _formField?: MatFormField,
|
||||
) {
|
||||
super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);
|
||||
|
||||
const element = this._elementRef.nativeElement;
|
||||
const nodeName = element.nodeName.toLowerCase();
|
||||
|
||||
this._errorStateTracker = new _ErrorStateTracker(
|
||||
defaultErrorStateMatcher,
|
||||
ngControl,
|
||||
parentFormGroup,
|
||||
parentForm,
|
||||
this.stateChanges,
|
||||
);
|
||||
|
||||
// If no input value accessor was explicitly specified, use the element as the input value
|
||||
// accessor.
|
||||
this._inputValueAccessor = inputValueAccessor || element;
|
||||
@@ -317,6 +317,10 @@ export class InputDirective
|
||||
this._dirtyCheckPlaceholder();
|
||||
}
|
||||
|
||||
updateErrorState() {
|
||||
this._errorStateTracker.updateErrorState();
|
||||
}
|
||||
|
||||
/** Focuses the input. */
|
||||
focus(options?: FocusOptions): void {
|
||||
this._elementRef.nativeElement.focus(options);
|
||||
|
||||
@@ -7,6 +7,7 @@ import { KeyboardShortcut, ORGSHORTCUTS, SIDEWIDESHORTCUTS } from 'src/app/servi
|
||||
selector: 'cnsl-keyboard-shortcuts',
|
||||
templateUrl: './keyboard-shortcuts.component.html',
|
||||
styleUrls: ['./keyboard-shortcuts.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class KeyboardShortcutsComponent {
|
||||
public orgShortcuts: KeyboardShortcut[] = ORGSHORTCUTS;
|
||||
|
||||
@@ -4,6 +4,7 @@ import { Component } from '@angular/core';
|
||||
selector: 'cnsl-label',
|
||||
templateUrl: './label.component.html',
|
||||
styleUrls: ['./label.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class LabelComponent {
|
||||
constructor() {}
|
||||
|
||||
@@ -20,6 +20,7 @@ import { WarnDialogComponent } from '../warn-dialog/warn-dialog.component';
|
||||
selector: 'cnsl-machine-keys',
|
||||
templateUrl: './machine-keys.component.html',
|
||||
styleUrls: ['./machine-keys.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class MachineKeysComponent implements OnInit {
|
||||
@Input() userId?: string;
|
||||
|
||||
@@ -26,6 +26,7 @@ type MemberDatasource =
|
||||
selector: 'cnsl-members-table',
|
||||
templateUrl: './members-table.component.html',
|
||||
styleUrls: ['./members-table.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class MembersTableComponent implements OnInit, OnDestroy {
|
||||
public INITIALPAGESIZE: number = 25;
|
||||
|
||||
@@ -22,6 +22,7 @@ import { Organization } from '@zitadel/proto/zitadel/org/v2/org_pb';
|
||||
selector: 'cnsl-memberships-table',
|
||||
templateUrl: './memberships-table.component.html',
|
||||
styleUrls: ['./memberships-table.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class MembershipsTableComponent implements OnInit, OnDestroy {
|
||||
public INITIALPAGESIZE: number = 25;
|
||||
|
||||
@@ -7,6 +7,7 @@ import { map } from 'rxjs/operators';
|
||||
selector: 'cnsl-meta-layout',
|
||||
templateUrl: './meta-layout.component.html',
|
||||
styleUrls: ['./meta-layout.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class MetaLayoutComponent {
|
||||
constructor(private breakpointObserver: BreakpointObserver) {
|
||||
|
||||
@@ -15,6 +15,7 @@ export type MetadataDialogData = {
|
||||
selector: 'cnsl-metadata-dialog',
|
||||
templateUrl: './metadata-dialog.component.html',
|
||||
styleUrls: ['./metadata-dialog.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class MetadataDialogComponent {
|
||||
public metadata: { key: string; value: string }[] = [];
|
||||
|
||||
@@ -15,6 +15,7 @@ type StringMetadata = {
|
||||
selector: 'cnsl-metadata',
|
||||
templateUrl: './metadata.component.html',
|
||||
styleUrls: ['./metadata.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class MetadataComponent implements OnInit {
|
||||
@Input({ required: true }) public set metadata(metadata: (Metadata.AsObject | MetadataV2)[]) {
|
||||
|
||||
@@ -5,6 +5,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
selector: 'cnsl-name-dialog',
|
||||
templateUrl: './name-dialog.component.html',
|
||||
styleUrls: ['./name-dialog.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class NameDialogComponent {
|
||||
public name: string = '';
|
||||
|
||||
@@ -4,6 +4,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
|
||||
selector: 'cnsl-nav-toggle',
|
||||
templateUrl: './nav-toggle.component.html',
|
||||
styleUrls: ['./nav-toggle.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class NavToggleComponent {
|
||||
@Input() public label: string = '';
|
||||
|
||||
@@ -69,6 +69,7 @@ import { Organization } from '@zitadel/proto/zitadel/org/v2/org_pb';
|
||||
]),
|
||||
]),
|
||||
],
|
||||
standalone: false,
|
||||
})
|
||||
export class NavComponent implements OnDestroy {
|
||||
@ViewChild('input', { static: false }) input!: ElementRef;
|
||||
|
||||
@@ -7,7 +7,6 @@ import { MatRippleModule } from '@angular/material/core';
|
||||
selector: 'cnsl-header-button',
|
||||
templateUrl: './header-button.component.html',
|
||||
styleUrls: ['./header-button.component.scss'],
|
||||
standalone: true,
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
imports: [NgIconComponent, MatRippleModule],
|
||||
providers: [provideIcons({ heroChevronUpDown })],
|
||||
|
||||
@@ -23,7 +23,6 @@ import { ReplaySubject } from 'rxjs';
|
||||
selector: 'cnsl-header-dropdown',
|
||||
templateUrl: './header-dropdown.component.html',
|
||||
styleUrls: ['./header-dropdown.component.scss'],
|
||||
standalone: true,
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
imports: [CdkConnectedOverlay, NgIf, AsyncPipe],
|
||||
})
|
||||
@@ -59,15 +58,12 @@ export class HeaderDropdownComponent implements OnInit {
|
||||
// to make sure the dropdown will be rendered in the correct position
|
||||
runInInjectionContext(this.injector, () => {
|
||||
const isOpen = toSignal(this.isOpen$, { requireSync: true });
|
||||
effect(
|
||||
() => {
|
||||
this.isHandset();
|
||||
if (untracked(() => isOpen())) {
|
||||
this.closed.emit();
|
||||
}
|
||||
},
|
||||
{ allowSignalWrites: true },
|
||||
);
|
||||
effect(() => {
|
||||
this.isHandset();
|
||||
if (untracked(() => isOpen())) {
|
||||
this.closed.emit();
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import { ChangeDetectionStrategy, Component, EventEmitter, Output, Input } from '@angular/core';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { Router, RouterLink } from '@angular/router';
|
||||
import { InstanceDetail } from '@zitadel/proto/zitadel/instance_pb';
|
||||
import { NgIconComponent, provideIcons } from '@ng-icons/core';
|
||||
import { heroCog8ToothSolid } from '@ng-icons/heroicons/solid';
|
||||
@@ -14,9 +13,8 @@ import { CommonModule } from '@angular/common';
|
||||
selector: 'cnsl-instance-selector',
|
||||
templateUrl: './instance-selector.component.html',
|
||||
styleUrls: ['./instance-selector.component.scss'],
|
||||
standalone: true,
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
imports: [TranslateModule, MatButtonModule, RouterLink, NgIconComponent, CommonModule],
|
||||
imports: [TranslateModule, MatButtonModule, NgIconComponent, CommonModule],
|
||||
providers: [provideIcons({ heroCog8ToothSolid, heroChevronRight })],
|
||||
})
|
||||
export class InstanceSelectorComponent {
|
||||
|
||||
@@ -25,7 +25,6 @@ import { MatRippleModule } from '@angular/material/core';
|
||||
selector: 'cnsl-new-header',
|
||||
templateUrl: './new-header.component.html',
|
||||
styleUrls: ['./new-header.component.scss'],
|
||||
standalone: true,
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
imports: [
|
||||
MatToolbarModule,
|
||||
|
||||
-1
@@ -48,7 +48,6 @@ const QUERY_LIMIT = 20;
|
||||
selector: 'cnsl-organization-selector',
|
||||
templateUrl: './organization-selector.component.html',
|
||||
styleUrls: ['./organization-selector.component.scss'],
|
||||
standalone: true,
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
imports: [
|
||||
NgForOf,
|
||||
|
||||
@@ -7,6 +7,7 @@ import { ONBOARDING_MILESTONES } from 'src/app/utils/onboarding';
|
||||
selector: 'cnsl-onboarding-card',
|
||||
templateUrl: './onboarding-card.component.html',
|
||||
styleUrls: ['./onboarding-card.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class OnboardingCardComponent implements OnInit {
|
||||
public percentageChanged: EventEmitter<number> = new EventEmitter<number>();
|
||||
|
||||
@@ -7,6 +7,7 @@ import { ONBOARDING_MILESTONES } from 'src/app/utils/onboarding';
|
||||
selector: 'cnsl-onboarding',
|
||||
templateUrl: './onboarding.component.html',
|
||||
styleUrls: ['./onboarding.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class OnboardingComponent {
|
||||
public actions = this.adminService.progressMilestones;
|
||||
|
||||
@@ -15,6 +15,7 @@ const ORG_QUERY_LIMIT = 100;
|
||||
selector: 'cnsl-org-context',
|
||||
templateUrl: './org-context.component.html',
|
||||
styleUrls: ['./org-context.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class OrgContextComponent implements OnInit {
|
||||
public pinned: SelectionModel<Org.AsObject> = new SelectionModel<Org.AsObject>(true, []);
|
||||
|
||||
@@ -26,6 +26,7 @@ type SearchQuery = NonNullable<MessageInitShape<typeof ListOrganizationsRequestS
|
||||
selector: 'cnsl-org-table',
|
||||
templateUrl: './org-table.component.html',
|
||||
styleUrls: ['./org-table.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class OrgTableComponent {
|
||||
public displayedColumns: string[] = ['name', 'state', 'primaryDomain', 'creationDate', 'changeDate', 'actions'];
|
||||
|
||||
@@ -13,6 +13,7 @@ export interface PageEvent {
|
||||
selector: 'cnsl-paginator',
|
||||
templateUrl: './paginator.component.html',
|
||||
styleUrls: ['./paginator.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class PaginatorComponent {
|
||||
@Input() public timestamp: Timestamp.AsObject | ConnectTimestamp | undefined = undefined;
|
||||
|
||||
+4
-4
@@ -30,22 +30,22 @@
|
||||
}})
|
||||
</span>
|
||||
</div>
|
||||
<div class="val" *ngIf="this.policy.hasSymbol">
|
||||
<div class="val" *ngIf="policy.hasSymbol">
|
||||
<i *ngIf="password?.pristine || password?.errors?.['errorssymbolerror']" class="las la-times red"></i>
|
||||
<i *ngIf="password?.dirty && !password?.errors?.['errorssymbolerror']" class="las la-check green"></i>
|
||||
<span class="cnsl-secondary-text"> {{ 'ERRORS.SYMBOLERROR' | translate }}</span>
|
||||
</div>
|
||||
<div class="val" *ngIf="this.policy.hasNumber">
|
||||
<div class="val" *ngIf="policy.hasNumber">
|
||||
<i *ngIf="password?.pristine || password?.errors?.['errorsnumbererror']" class="las la-times red"></i>
|
||||
<i *ngIf="password?.dirty && !password?.errors?.['errorsnumbererror']" class="las la-check green"></i>
|
||||
<span class="cnsl-secondary-text"> {{ 'ERRORS.NUMBERERROR' | translate }}</span>
|
||||
</div>
|
||||
<div class="val" *ngIf="this.policy.hasUppercase">
|
||||
<div class="val" *ngIf="policy.hasUppercase">
|
||||
<i *ngIf="password?.pristine || password?.errors?.['errorsuppercasemissing']" class="las la-times red"></i>
|
||||
<i *ngIf="password?.dirty && !password?.errors?.['errorsuppercasemissing']" class="las la-check green"></i>
|
||||
<span class="cnsl-secondary-text"> {{ 'ERRORS.UPPERCASEMISSING' | translate }}</span>
|
||||
</div>
|
||||
<div class="val" *ngIf="this.policy.hasLowercase">
|
||||
<div class="val" *ngIf="policy.hasLowercase">
|
||||
<i *ngIf="password?.pristine || password?.errors?.['errorslowercasemissing']" class="las la-times red"></i>
|
||||
<i *ngIf="password?.dirty && !password?.errors?.['errorslowercasemissing']" class="las la-check green"></i>
|
||||
<span class="cnsl-secondary-text">{{ 'ERRORS.LOWERCASEMISSING' | translate }}</span>
|
||||
|
||||
@@ -6,6 +6,7 @@ import { PasswordComplexityPolicy } from '@zitadel/proto/zitadel/policy_pb';
|
||||
selector: 'cnsl-password-complexity-view',
|
||||
templateUrl: './password-complexity-view.component.html',
|
||||
styleUrls: ['./password-complexity-view.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class PasswordComplexityViewComponent {
|
||||
@Input() public password: AbstractControl | null = null;
|
||||
|
||||
@@ -20,6 +20,7 @@ import { WarnDialogComponent } from '../warn-dialog/warn-dialog.component';
|
||||
selector: 'cnsl-personal-access-tokens',
|
||||
templateUrl: './personal-access-tokens.component.html',
|
||||
styleUrls: ['./personal-access-tokens.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class PersonalAccessTokensComponent implements OnInit {
|
||||
@Input() userId!: string;
|
||||
|
||||
@@ -21,6 +21,7 @@ import { NewOrganizationService } from '../../../services/new-organization.servi
|
||||
selector: 'cnsl-domain-policy',
|
||||
templateUrl: './domain-policy.component.html',
|
||||
styleUrls: ['./domain-policy.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class DomainPolicyComponent implements OnInit, OnDestroy {
|
||||
private managementService!: ManagementService;
|
||||
|
||||
@@ -8,6 +8,7 @@ import { PolicyComponentServiceType } from '../policy-component-types.enum';
|
||||
selector: 'cnsl-idp-settings',
|
||||
templateUrl: './idp-settings.component.html',
|
||||
styleUrls: ['./idp-settings.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class IdpSettingsComponent implements OnInit {
|
||||
@Input() public serviceType!: PolicyComponentServiceType;
|
||||
|
||||
@@ -17,6 +17,7 @@ interface State {
|
||||
selector: 'cnsl-language-settings',
|
||||
templateUrl: './language-settings.component.html',
|
||||
styleUrls: ['./language-settings.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class LanguageSettingsComponent {
|
||||
public canWriteRestrictions$: Observable<boolean> = this.authService.isAllowed(['iam.restrictions.write']);
|
||||
|
||||
+1
@@ -11,6 +11,7 @@ enum LoginMethodComponentType {
|
||||
selector: 'cnsl-dialog-add-type',
|
||||
templateUrl: './dialog-add-type.component.html',
|
||||
styleUrls: ['./dialog-add-type.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class DialogAddTypeComponent {
|
||||
public LoginMethodComponentType: any = LoginMethodComponentType;
|
||||
|
||||
@@ -33,6 +33,7 @@ export enum LoginMethodComponentType {
|
||||
selector: 'cnsl-factor-table',
|
||||
templateUrl: './factor-table.component.html',
|
||||
styleUrls: ['./factor-table.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class FactorTableComponent {
|
||||
public LoginMethodComponentType: any = LoginMethodComponentType;
|
||||
|
||||
@@ -37,6 +37,7 @@ const minValueValidator = (minValue: number) => (control: AbstractControl) => {
|
||||
selector: 'cnsl-login-policy',
|
||||
templateUrl: './login-policy.component.html',
|
||||
styleUrls: ['./login-policy.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class LoginPolicyComponent implements OnInit, OnDestroy {
|
||||
public LoginMethodComponentType: any = LoginMethodComponentType;
|
||||
|
||||
@@ -13,11 +13,11 @@
|
||||
<p class="newer-title" *ngIf="newerVersionExists">{{ 'POLICY.LOGIN_TEXTS.NEWERVERSIONEXISTS' | translate }}</p>
|
||||
<p *ngIf="newerPolicyChangeDate && newerVersionExists">
|
||||
{{ 'POLICY.LOGIN_TEXTS.CHANGEDATE' | translate }}:
|
||||
{{ newerPolicyChangeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm:ss' }}
|
||||
{{ newerPolicyChangeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm:ss' }}
|
||||
</p>
|
||||
<p class="cnsl-secondary-text" *ngIf="currentPolicyChangeDate">
|
||||
{{ 'POLICY.LOGIN_TEXTS.CURRENTDATE' | translate }}:
|
||||
{{ currentPolicyChangeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm:ss' }}
|
||||
{{ currentPolicyChangeDate | timestampToDate | localizedDate: 'dd. MMMM yyyy, HH:mm:ss' }}
|
||||
</p>
|
||||
</div>
|
||||
<button [disabled]="!newerVersionExists" color="primary" mat-raised-button (click)="loadData()">
|
||||
|
||||
@@ -94,6 +94,7 @@ const REQUESTMAP = {
|
||||
selector: 'cnsl-login-texts',
|
||||
templateUrl: './login-texts.component.html',
|
||||
styleUrls: ['./login-texts.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class LoginTextsComponent implements OnInit, OnDestroy {
|
||||
public loading: boolean = false;
|
||||
|
||||
@@ -419,6 +419,7 @@ const REQUESTMAP = {
|
||||
selector: 'cnsl-message-texts',
|
||||
templateUrl: './message-texts.component.html',
|
||||
styleUrls: ['./message-texts.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class MessageTextsComponent implements OnInit, OnDestroy {
|
||||
public loading: boolean = false;
|
||||
|
||||
@@ -22,6 +22,7 @@ import { PolicyComponentServiceType } from '../policy-component-types.enum';
|
||||
selector: 'cnsl-notification-policy',
|
||||
templateUrl: './notification-policy.component.html',
|
||||
styleUrls: ['./notification-policy.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class NotificationPolicyComponent implements OnInit {
|
||||
@Input() public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT;
|
||||
|
||||
+1
@@ -20,6 +20,7 @@ enum SMSProviderType {
|
||||
selector: 'cnsl-dialog-add-sms-provider',
|
||||
templateUrl: './dialog-add-sms-provider.component.html',
|
||||
styleUrls: ['./dialog-add-sms-provider.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class DialogAddSMSProviderComponent {
|
||||
public SMSProviderType: any = SMSProviderType;
|
||||
|
||||
+1
@@ -14,6 +14,7 @@ import { DialogAddSMSProviderComponent } from './dialog-add-sms-provider/dialog-
|
||||
selector: 'cnsl-notification-sms-provider',
|
||||
templateUrl: './notification-sms-provider.component.html',
|
||||
styleUrls: ['./notification-sms-provider.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class NotificationSMSProviderComponent implements OnInit {
|
||||
@Input() public serviceType!: PolicyComponentServiceType;
|
||||
|
||||
+1
@@ -5,6 +5,7 @@ import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
||||
selector: 'cnsl-password-dialog-sms-provider',
|
||||
templateUrl: './password-dialog-sms-provider.component.html',
|
||||
styleUrls: ['./password-dialog-sms-provider.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class PasswordDialogSMSProviderComponent {
|
||||
public password: string = '';
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
|
||||
@mixin smtp-settings-theme($theme) {
|
||||
$primary: map-get($theme, primary);
|
||||
$primary-color: mat.get-color-from-palette($primary, 500);
|
||||
$primary-color: mat.m2-get-color-from-palette($primary, 500);
|
||||
$is-dark-theme: map-get($theme, is-dark);
|
||||
$background: map-get($theme, background);
|
||||
$foreground: map-get($theme, foreground);
|
||||
|
||||
+1
@@ -9,6 +9,7 @@ import { SMTPKnownProviders } from '../../smtp-provider/known-smtp-providers-set
|
||||
selector: 'cnsl-notification-smtp-provider',
|
||||
templateUrl: './notification-smtp-provider.component.html',
|
||||
styleUrls: ['./notification-smtp-provider.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class NotificationSMTPProviderComponent implements OnInit {
|
||||
@Input() public serviceType!: PolicyComponentServiceType;
|
||||
|
||||
@@ -18,6 +18,7 @@ import { requiredValidator } from '../../form-field/validators/validators';
|
||||
selector: 'cnsl-oidc-configuration',
|
||||
templateUrl: './oidc-configuration.component.html',
|
||||
styleUrls: ['./oidc-configuration.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class OIDCConfigurationComponent implements OnInit {
|
||||
public oidcSettings!: OIDCSettings.AsObject;
|
||||
|
||||
+1
@@ -10,6 +10,7 @@ type RawValue<T extends FormGroup> = ReturnType<T['getRawValue']>;
|
||||
selector: 'cnsl-oidc-webkeys-create',
|
||||
templateUrl: './oidc-webkeys-create.component.html',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: false,
|
||||
})
|
||||
export class OidcWebKeysCreateComponent {
|
||||
protected readonly keyType: WritableSignal<NonNullable<WebKey['key']['case']>> = signal('rsa');
|
||||
|
||||
+1
@@ -8,6 +8,7 @@ import { WebKey } from '@zitadel/proto/zitadel/webkey/v2beta/key_pb';
|
||||
selector: 'cnsl-oidc-webkeys-inactive-table',
|
||||
templateUrl: './oidc-webkeys-inactive-table.component.html',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: false,
|
||||
})
|
||||
export class OidcWebKeysInactiveTableComponent {
|
||||
@Input({ required: true })
|
||||
|
||||
+1
@@ -9,6 +9,7 @@ import { State, WebKey } from '@zitadel/proto/zitadel/webkey/v2beta/key_pb';
|
||||
templateUrl: './oidc-webkeys-table.component.html',
|
||||
styleUrls: ['./oidc-webkeys-table.component.scss'],
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: false,
|
||||
})
|
||||
export class OidcWebKeysTableComponent {
|
||||
@Output()
|
||||
|
||||
@@ -19,6 +19,7 @@ const CACHE_WARNING_MS = 5 * 60 * 1000; // 5 minutes
|
||||
selector: 'cnsl-oidc-webkeys',
|
||||
templateUrl: './oidc-webkeys.component.html',
|
||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||
standalone: false,
|
||||
})
|
||||
export class OidcWebKeysComponent {
|
||||
protected readonly refresh = new Subject<true>();
|
||||
|
||||
@@ -6,6 +6,7 @@ import { CdkCellDef } from '@angular/cdk/table';
|
||||
@Directive({
|
||||
selector: '[cnslCellDef]',
|
||||
providers: [{ provide: CdkCellDef, useExisting: TypeSafeCellDefDirective }],
|
||||
standalone: false,
|
||||
})
|
||||
export class TypeSafeCellDefDirective<T> extends MatCellDef {
|
||||
@Input({ required: true }) cnslCellDefDataSource!: DataSource<T>;
|
||||
|
||||
@@ -20,6 +20,7 @@ import { take } from 'rxjs/operators';
|
||||
selector: 'cnsl-password-age-policy',
|
||||
templateUrl: './password-age-policy.component.html',
|
||||
styleUrls: ['./password-age-policy.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class PasswordAgePolicyComponent implements OnInit {
|
||||
@Input() public service!: ManagementService | AdminService;
|
||||
|
||||
+1
@@ -15,6 +15,7 @@ import { PolicyComponentServiceType } from '../policy-component-types.enum';
|
||||
selector: 'cnsl-password-complexity-policy',
|
||||
templateUrl: './password-complexity-policy.component.html',
|
||||
styleUrls: ['./password-complexity-policy.component.scss'],
|
||||
standalone: false,
|
||||
})
|
||||
export class PasswordComplexityPolicyComponent implements OnInit {
|
||||
@Input() public serviceType: PolicyComponentServiceType = PolicyComponentServiceType.MGMT;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user