AI Implementation feature(889): Admin Area General Settings and Categories 1.07 (#29)

This commit was merged in pull request #29.
This commit is contained in:
2026-07-22 14:53:01 +00:00
parent 3cf86b6233
commit 282fcbab94
11 changed files with 359 additions and 115 deletions
@@ -11,6 +11,7 @@ import {
deriveEventState,
endAfterStartValidator,
endBeforeStartMessage,
eventEndFieldMessage,
isoDatetimeValidator,
normalizePageTitle,
pageTitleMessage,
@@ -114,17 +115,12 @@ import {
type="datetime-local"
formControlName="eventEndUtc"
data-testid="general-eventEnd"
[attr.aria-invalid]="showEventEndError() || eventEndCrossFieldError() ? 'true' : null"
[attr.aria-describedby]="(showEventEndError() || eventEndCrossFieldError())
? 'general-eventEnd-error general-endBeforeStart'
: null"
[attr.title]="(showEventEndError() ? eventEndMessage() : eventEndCrossFieldError() ? endBeforeStartMessage : null)"
[attr.aria-invalid]="eventEndFieldMessageText() ? 'true' : null"
[attr.aria-describedby]="eventEndFieldMessageText() ? 'general-eventEnd-error' : null"
[attr.title]="eventEndFieldMessageText()"
/>
@if (showEventEndError()) {
<div class="field-error" id="general-eventEnd-error" data-testid="general-eventEnd-error">{{ eventEndMessage() }}</div>
}
@if (eventEndCrossFieldError()) {
<div class="field-error" id="general-endBeforeStart" data-testid="general-endBeforeStart">{{ endBeforeStartMessage }}</div>
@if (eventEndFieldMessageText(); as msg) {
<div class="field-error" id="general-eventEnd-error" data-testid="general-eventEnd-error">{{ msg }}</div>
}
</div>
@@ -260,9 +256,11 @@ export class AdminGeneralComponent implements OnInit {
datetimeMessage('Event end', this.eventEndValue(), this.form.controls.eventEndUtc.errors),
);
readonly eventEndCrossFieldError = computed(
() => !!this.form.errors?.['endBeforeStart'],
);
readonly eventEndFieldMessageText = computed(() => {
const fieldErrs = this.eventEndTouchedOrDirty() ? this.form.controls.eventEndUtc.errors : null;
const crossErrs = this.form.errors;
return eventEndFieldMessage(fieldErrs, crossErrs);
});
constructor() {
this.form.controls.welcomeMarkdown.valueChanges