Merge remote-tracking branch 'origin/main' into feature/tinymce-servervariables

This commit is contained in:
Jacob Overgaard
2023-12-19 16:07:35 +01:00
11 changed files with 115 additions and 89 deletions

View File

@@ -40,7 +40,7 @@ jobs:
- run: npx playwright install --with-deps
- run: npm test
- name: Upload Code Coverage reports
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
if: always()
with:
name: code-coverage

View File

@@ -42,7 +42,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -53,4 +53,4 @@ jobs:
# queries: security-extended,security-and-quality
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
uses: github/codeql-action/analyze@v3

View File

@@ -31,6 +31,6 @@ jobs:
ignore-globs: "**/.git/**,*.md,*.mdx,*.stories.ts,*.js"
- name: Upload DevSkim scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v2
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: devskim-results.sarif

View File

@@ -23,6 +23,7 @@ export class UmbLogViewerDateRangeSelectorElement extends UmbLitElement {
horizontal = false;
#logViewerContext?: UmbLogViewerWorkspaceContext;
constructor() {
super();
this.addEventListener('input', this.#setDates);
@@ -31,13 +32,21 @@ export class UmbLogViewerDateRangeSelectorElement extends UmbLitElement {
this.#observeStuff();
});
}
disconnectedCallback(): void {
super.disconnectedCallback();
this.removeEventListener('input', this.#setDates);
}
#observeStuff() {
if (!this.#logViewerContext) return;
this.observe(this.#logViewerContext.dateRange, (dateRange: LogViewerDateRange) => {
this._startDate = dateRange?.startDate;
this._endDate = dateRange?.endDate;
});
this.observe(
this.#logViewerContext.dateRange,
(dateRange: LogViewerDateRange) => {
this._startDate = dateRange.startDate;
this._endDate = dateRange.endDate;
},
'_observeDateRange',
);
}
#setDates() {
@@ -48,6 +57,7 @@ export class UmbLogViewerDateRangeSelectorElement extends UmbLitElement {
this._endDate = input.value;
}
});
this.#logViewerContext?.setDateRange({ startDate: this._startDate, endDate: this._endDate });
const query = getQuery();
const qs = toQueryString({
@@ -61,35 +71,32 @@ export class UmbLogViewerDateRangeSelectorElement extends UmbLitElement {
render() {
return html`
<div class="input-container">
<uui-label for="start-date">From:</uui-label>
<input
@click=${(e: Event) => {
(e.target as HTMLInputElement).showPicker();
}}
id="start-date"
type="date"
label="From"
.max=${this.#logViewerContext?.today ?? ''}
.value=${this._startDate}>
</input>
</div>
<div class="input-container">
<uui-label for="end-date">To: </uui-label>
<input
@click=${(e: Event) => {
(e.target as HTMLInputElement).showPicker();
}}
id="end-date"
type="date"
label="To"
.min=${this._startDate}
.max=${this.#logViewerContext?.today ?? ''}
.value=${this._endDate}>
</input>
</div>
`;
<div class="input-container">
<uui-label for="start-date">From:</uui-label>
<input
@click=${(e: Event) => {
(e.target as HTMLInputElement).showPicker();
}}
id="start-date"
type="date"
label="From"
.max=${this.#logViewerContext?.today ?? ''}
.value=${this._startDate} />
</div>
<div class="input-container">
<uui-label for="end-date">To: </uui-label>
<input
@click=${(e: Event) => {
(e.target as HTMLInputElement).showPicker();
}}
id="end-date"
type="date"
label="To"
.min=${this._startDate}
.max=${this.#logViewerContext?.today ?? ''}
.value=${this._endDate} />
</div>
`;
}
static styles = [

View File

@@ -134,17 +134,12 @@ export class UmbLogViewerWorkspaceContext extends UmbBaseController implements U
}
this.setLogLevelsFilter(validLogLevels);
const dateRange: Partial<LogViewerDateRange> = {};
const dateRange: LogViewerDateRange = this.getDateRange() as LogViewerDateRange;
if (searchQuery.startDate) {
dateRange.startDate = searchQuery.startDate;
}
if (searchQuery.endDate) {
dateRange.endDate = searchQuery.endDate;
}
this.setDateRange(dateRange);
this.setDateRange({
startDate: searchQuery.startDate || dateRange.startDate,
endDate: searchQuery.endDate || dateRange.endDate,
});
this.setCurrentPage(searchQuery.page ? Number(searchQuery.page) : 1);
@@ -169,6 +164,10 @@ export class UmbLogViewerWorkspaceContext extends UmbBaseController implements U
this.getMessageTemplates(0, 10);
}
getDateRange() {
return this.#dateRange.getValue();
}
async getSavedSearches() {
const { data } = await this.#repository.getSavedSearches({ skip: 0, take: 100 });
if (data) {

View File

@@ -37,7 +37,7 @@ export class UmbLogViewerMessageTemplatesOverviewElement extends UmbLitElement {
<uui-button
label="${searchListItem.name ?? ''}"
title="${searchListItem.name ?? ''}"
href=${`section/settings/workspace/logviewer/search/?lq=${searchListItem.query}`}>
href=${`section/settings/workspace/logviewer/view/search/?lq=${searchListItem.query}`}>
<uui-icon name="icon-search"></uui-icon>${searchListItem.name}
</uui-button>
</li>`;
@@ -59,7 +59,7 @@ export class UmbLogViewerMessageTemplatesOverviewElement extends UmbLitElement {
html`<uui-table-row>
<uui-table-cell>
<a
href=${`section/settings/workspace/logviewer/search/?lq=${encodeURIComponent(
href=${`section/settings/workspace/logviewer/view/search/?lq=${encodeURIComponent(
`@MessageTemplate='${template.messageTemplate}'`,
)}`}>
<span>${template.messageTemplate}</span> <span>${template.count}</span>

View File

@@ -7,7 +7,7 @@ import { UmbLitElement } from '@umbraco-cms/internal/lit-element';
@customElement('umb-log-viewer-overview-view')
export class UmbLogViewerOverviewViewElement extends UmbLitElement {
@state()
private _errorCount = 0;
private _errorCount?: number;
@state()
private _logLevelCount: LogLevelCountsReponseModel | null = null;
@@ -30,7 +30,7 @@ export class UmbLogViewerOverviewViewElement extends UmbLitElement {
if (!this.#logViewerContext) return;
this.observe(this.#logViewerContext.logCount, (logLevelCount) => {
this._errorCount = logLevelCount?.error ?? 0;
this._errorCount = logLevelCount?.error;
});
}
@@ -52,11 +52,13 @@ export class UmbLogViewerOverviewViewElement extends UmbLitElement {
<uui-box id="errors" headline="Number of Errors">
<uui-button
label="Show error logs"
href=${`section/settings/workspace/logviewer/search/?lq=${encodeURIComponent(
href=${`section/settings/workspace/logviewer/view/search/?lq=${encodeURIComponent(
`@Level='Fatal' or @Level='Error' or Has(@Exception)`,
)}`}>
<h2 id="error-count">${this._errorCount}</h2></uui-button
>
<h2 id="error-count">
${this._errorCount === undefined ? html`<uui-loader></uui-loader>` : this._errorCount}
</h2>
</uui-button>
</uui-box>
<uui-box id="level" headline="Log level">

View File

@@ -170,7 +170,9 @@ export class UmbLogViewerMessageElement extends UmbLitElement {
look="secondary"
label="Find logs with ${property.name}"
title="Find logs with ${property.name}"
href=${`section/settings/workspace/logviewer/search/?${this._findLogsWithProperty(property)}`}>
href=${`section/settings/workspace/logviewer/view/search/?${this._findLogsWithProperty(
property,
)}`}>
<uui-icon name="icon-search"></uui-icon>
</uui-button>`
: ''}

View File

@@ -88,41 +88,46 @@ export class UmbLogViewerMessagesListElement extends UmbLitElement {
.exception=${log.exception ?? ''}
.messageTemplate=${log.messageTemplate ?? ''}></umb-log-viewer-message>`,
)}`
: html`<umb-empty-state size="small"
><span id="empty">
: html`<umb-empty-state size="small">
<span id="empty">
<uui-icon name="icon-search"></uui-icon>Sorry, we cannot find what you are looking for.
</span></umb-empty-state
>`}`;
</span>
</umb-empty-state>`}`;
}
render() {
// TODO: the table should scroll instead of the whole main div
return html`
<div id="header" slot="header">
<div id="timestamp">
Timestamp
<uui-button compact @click=${this.#sortLogs} label="Sort logs">
<uui-symbol-sort
?descending=${this._sortingDirection === DirectionModel.DESCENDING}
active></uui-symbol-sort>
</uui-button>
return html`<uui-box>
<div id="header" slot="header">
<div id="timestamp">
Timestamp
<uui-button compact @click=${this.#sortLogs} label="Sort logs">
<uui-symbol-sort
?descending=${this._sortingDirection === DirectionModel.DESCENDING}
active></uui-symbol-sort>
</uui-button>
</div>
<div id="level">Level</div>
<div id="machine">Machine name</div>
<div id="message">Message</div>
</div>
<div id="level">Level</div>
<div id="machine">Machine name</div>
<div id="message">Message</div>
</div>
<div id="main">
${this._isLoading
? html`<umb-empty-state size="small"
><span id="empty"> <uui-loader-circle></uui-loader-circle>Loading log messages... </span></umb-empty-state
>`
: html`${this.#renderLogs()}${this._renderPagination()}`}
</div>
`;
<div id="main">
${this._isLoading
? html`<umb-empty-state size="small">
<span id="empty"> <uui-loader-circle></uui-loader-circle>Loading log messages... </span>
</umb-empty-state>`
: html`${this.#renderLogs()}`}
</div>
</uui-box>
${this._renderPagination()} `;
}
static styles = [
css`
uui-box {
--uui-box-default-padding: 0;
}
:host {
height: 100%;
display: flex;
@@ -168,6 +173,7 @@ export class UmbLogViewerMessagesListElement extends UmbLitElement {
}
#pagination {
display: block;
margin: var(--uui-size-space-5, 18px) 0;
}
`,

View File

@@ -10,6 +10,7 @@ import {
UmbModalManagerContext,
UmbModalContext,
UmbModalToken,
UMB_CONFIRM_MODAL,
} from '@umbraco-cms/backoffice/modal';
import './log-viewer-search-input-modal.element.js';
@@ -130,7 +131,19 @@ export class UmbLogViewerSearchInputElement extends UmbLitElement {
}
#removeSearch(name: string) {
this.#logViewerContext?.removeSearch({ name });
const modalContext = this._modalContext?.open(UMB_CONFIRM_MODAL, {
data: {
headline: this.localize.term('logViewer_deleteSavedSearch'),
content: `${this.localize.term('defaultdialogs_confirmdelete')} ${name}?`,
color: 'danger',
confirmLabel: 'Delete',
},
});
modalContext?.onSubmit().then(() => {
this.#logViewerContext?.removeSearch({ name });
//this.dispatchEvent(new UmbDeleteEvent());
});
}
#openSaveSearchDialog() {
@@ -168,8 +181,8 @@ export class UmbLogViewerSearchInputElement extends UmbLitElement {
><uui-icon name="icon-delete"></uui-icon
></uui-button>`
: html``}
<umb-dropdown id="search-dropdown" slot="append" label="Saved searches">
<span slot="label">Saved searches</span>
<umb-dropdown id="search-dropdown" slot="append" label=${this.localize.term('logViewer_savedSearches')}>
<span slot="label"><umb-localize key="logViewer_savedSearches">Saved searches</umb-localize></span>
<uui-scroll-container id="saved-searches-container" role="list">
${this._savedSearches.map(
(search) =>

View File

@@ -46,12 +46,9 @@ export class UmbLogViewerSearchViewElement extends UmbLitElement {
</div>
</div>
<uui-box>
${this._canShowLogs
? html`<umb-log-viewer-messages-list></umb-log-viewer-messages-list>`
: html`<umb-log-viewer-to-many-logs-warning
id="to-many-logs-warning"></umb-log-viewer-to-many-logs-warning>`}
</uui-box>
${this._canShowLogs
? html`<umb-log-viewer-messages-list></umb-log-viewer-messages-list>`
: html`<umb-log-viewer-to-many-logs-warning id="to-many-logs-warning"></umb-log-viewer-to-many-logs-warning>`}
</umb-body-layout>
`;
}