mirror of
https://github.com/zitadel/zitadel.git
synced 2025-02-28 16:17:23 +00:00
fix: Custom texts (#2875)
* feat: delete org * fix: return is default on custom message text * fix(projeciton): print stack trace on recover panic * chore: print panic line * fix: custom message text retunr nil, nil * fix: custom message text template * fix: remove isDefault from selection (#2876) * fix: custom message text query Co-authored-by: adlerhurst <silvan.reusser@gmail.com> Co-authored-by: Max Peintner <max@caos.ch>
This commit is contained in:
parent
fc08229679
commit
cf727b7fff
@ -12,14 +12,14 @@ import { InfoSectionType } from '../info-section/info-section.component';
|
||||
})
|
||||
export class EditTextComponent implements OnInit, OnDestroy {
|
||||
@Input() label: string = '';
|
||||
@Input() current$!: Observable<{ [key: string]: any | string; }>;
|
||||
@Input() default$!: Observable<{ [key: string]: any | string; }>;
|
||||
@Input() current$!: Observable<{ [key: string]: any | string }>;
|
||||
@Input() default$!: Observable<{ [key: string]: any | string }>;
|
||||
@Input() currentlyDragged: string = '';
|
||||
@Output() changedValues: EventEmitter<{ [key: string]: string; }> = new EventEmitter();
|
||||
public currentMap: { [key: string]: string; } = {};
|
||||
@Output() changedValues: EventEmitter<{ [key: string]: string }> = new EventEmitter();
|
||||
public currentMap: { [key: string]: string } = {};
|
||||
private destroy$: Subject<void> = new Subject();
|
||||
public form!: FormGroup;
|
||||
public warnText: { [key: string]: string | undefined; } = {};
|
||||
public warnText: { [key: string]: string | undefined } = {};
|
||||
|
||||
@Input() public chips: any[] = [];
|
||||
@Input() public disabled: boolean = true;
|
||||
@ -28,17 +28,18 @@ export class EditTextComponent implements OnInit, OnDestroy {
|
||||
public InfoSectionType: any = InfoSectionType;
|
||||
|
||||
public ngOnInit(): void {
|
||||
this.current$.pipe(takeUntil(this.destroy$)).subscribe(value => {
|
||||
this.current$.pipe(takeUntil(this.destroy$)).subscribe((value) => {
|
||||
this.currentMap = value;
|
||||
this.form = new FormGroup({});
|
||||
Object.keys(value).map(key => {
|
||||
const control = new FormControl({ value: value[key], disabled: this.disabled });
|
||||
this.form.addControl(key, control);
|
||||
Object.keys(value).map((key) => {
|
||||
if (key !== 'isDefault') {
|
||||
const control = new FormControl({ value: value[key], disabled: this.disabled });
|
||||
this.form.addControl(key, control);
|
||||
}
|
||||
});
|
||||
|
||||
this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(values => this.changedValues.emit(values));
|
||||
this.form.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((values) => this.changedValues.emit(values));
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public ngOnDestroy(): void {
|
||||
|
@ -233,7 +233,7 @@ Changes the username
|
||||
|
||||
|
||||
|
||||
GET: /users/{user_id}/username
|
||||
PUT: /users/{user_id}/username
|
||||
|
||||
|
||||
### SetUserMetadata
|
||||
|
@ -343,6 +343,7 @@ title: zitadel/text.proto
|
||||
| text | string | - | |
|
||||
| button_text | string | - | |
|
||||
| footer_text | string | - | |
|
||||
| is_default | bool | - | |
|
||||
|
||||
|
||||
|
||||
|
@ -22,24 +22,7 @@ func ModelCustomMessageTextToPb(msg *query.MessageText) *text_pb.MessageCustomTe
|
||||
msg.ChangeDate,
|
||||
msg.AggregateID,
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
func DomainCustomMsgTextToPb(msg *domain.CustomMessageText) *text_pb.MessageCustomText {
|
||||
return &text_pb.MessageCustomText{
|
||||
Title: msg.Title,
|
||||
PreHeader: msg.PreHeader,
|
||||
Subject: msg.Subject,
|
||||
Greeting: msg.Greeting,
|
||||
Text: msg.Text,
|
||||
ButtonText: msg.ButtonText,
|
||||
FooterText: msg.FooterText,
|
||||
Details: object.ToViewDetailsPb(
|
||||
msg.Sequence,
|
||||
msg.CreationDate,
|
||||
msg.ChangeDate,
|
||||
"", //TODO: resourceowner
|
||||
),
|
||||
IsDefault: msg.AggregateID == domain.IAMID,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@ package handler
|
||||
|
||||
import (
|
||||
"context"
|
||||
"runtime/debug"
|
||||
"sort"
|
||||
"sync"
|
||||
"time"
|
||||
@ -106,7 +107,7 @@ func (h *ProjectionHandler) Process(
|
||||
//handle panic
|
||||
defer func() {
|
||||
cause := recover()
|
||||
logging.LogWithFields("HANDL-utWkv", "projection", h.ProjectionName, "cause", cause).Error("projection handler paniced")
|
||||
logging.LogWithFields("HANDL-utWkv", "projection", h.ProjectionName, "cause", cause, "stack", string(debug.Stack())).Error("projection handler paniced")
|
||||
}()
|
||||
|
||||
execBulk := h.prepareExecuteBulk(query, reduce, update)
|
||||
|
@ -161,12 +161,24 @@ func (q *Queries) DefaultMessageTextByTypeAndLanguageFromFileSystem(messageType,
|
||||
func (q *Queries) CustomMessageTextByTypeAndLanguage(ctx context.Context, aggregateID, messageType, language string) (*MessageText, error) {
|
||||
stmt, scan := prepareMessageTextQuery()
|
||||
query, args, err := stmt.Where(
|
||||
sq.Eq{
|
||||
MessageTextColAggregateID.identifier(): aggregateID,
|
||||
MessageTextColType.identifier(): messageType,
|
||||
MessageTextColLanguage.identifier(): language,
|
||||
sq.And{
|
||||
sq.Eq{
|
||||
MessageTextColLanguage.identifier(): language,
|
||||
},
|
||||
sq.Eq{
|
||||
MessageTextColType.identifier(): messageType,
|
||||
},
|
||||
sq.Or{
|
||||
sq.Eq{
|
||||
MessageTextColAggregateID.identifier(): aggregateID,
|
||||
},
|
||||
sq.Eq{
|
||||
MessageTextColAggregateID.identifier(): domain.IAMID,
|
||||
},
|
||||
},
|
||||
},
|
||||
).
|
||||
OrderBy(MessageTextColAggregateID.identifier()).
|
||||
Limit(1).ToSql()
|
||||
if err != nil {
|
||||
return nil, errors.ThrowInternal(err, "QUERY-1b9mf", "Errors.Query.SQLStatement")
|
||||
|
@ -147,7 +147,7 @@ func (p *MessageTextProjection) reduceRemoved(event eventstore.EventReader) (*ha
|
||||
return nil, errors.ThrowInvalidArgument(nil, "PROJE-fm0ge", "reduce.wrong.event.type")
|
||||
}
|
||||
if !isMessageTemplate(templateEvent.Template) {
|
||||
return nil, nil
|
||||
return crdb.NewNoOpStatement(event), nil
|
||||
}
|
||||
cols := []handler.Column{
|
||||
handler.NewCol(MessageTextChangeDateCol, templateEvent.CreationDate()),
|
||||
@ -186,16 +186,21 @@ func (p *MessageTextProjection) reduceRemoved(event eventstore.EventReader) (*ha
|
||||
}
|
||||
|
||||
func (p *MessageTextProjection) reduceTemplateRemoved(event eventstore.EventReader) (*handler.Statement, error) {
|
||||
templateEvent, ok := event.(*org.CustomTextTemplateRemovedEvent)
|
||||
if !ok {
|
||||
var templateEvent policy.CustomTextTemplateRemovedEvent
|
||||
switch e := event.(type) {
|
||||
case *org.CustomTextTemplateRemovedEvent:
|
||||
templateEvent = e.CustomTextTemplateRemovedEvent
|
||||
case *iam.CustomTextTemplateRemovedEvent:
|
||||
templateEvent = e.CustomTextTemplateRemovedEvent
|
||||
default:
|
||||
logging.LogWithFields("PROJE-m03ng", "seq", event.Sequence(), "expectedType", org.CustomTextTemplateRemovedEventType).Error("wrong event type")
|
||||
return nil, errors.ThrowInvalidArgument(nil, "PROJE-2n9rs", "reduce.wrong.event.type")
|
||||
}
|
||||
if !isMessageTemplate(templateEvent.Template) {
|
||||
return nil, nil
|
||||
return crdb.NewNoOpStatement(event), nil
|
||||
}
|
||||
return crdb.NewDeleteStatement(
|
||||
templateEvent,
|
||||
event,
|
||||
[]handler.Condition{
|
||||
handler.NewCond(MessageTextAggregateIDCol, templateEvent.Aggregate().ID),
|
||||
handler.NewCond(MessageTextTypeCol, templateEvent.Template),
|
||||
|
@ -45,6 +45,7 @@ message MessageCustomText {
|
||||
description: "custom text for email footer_text"
|
||||
}
|
||||
];
|
||||
bool is_default = 9;
|
||||
}
|
||||
|
||||
message LoginCustomText {
|
||||
|
Loading…
x
Reference in New Issue
Block a user