diff --git a/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml b/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml
index 215ee2f386..8e77e1488c 100644
--- a/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml
+++ b/src/Umbraco.Web.UI.Client/.github/workflows/build_test.yml
@@ -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
diff --git a/src/Umbraco.Web.UI.Client/.github/workflows/codeql.yml b/src/Umbraco.Web.UI.Client/.github/workflows/codeql.yml
index 88da8bd514..013b41e58f 100644
--- a/src/Umbraco.Web.UI.Client/.github/workflows/codeql.yml
+++ b/src/Umbraco.Web.UI.Client/.github/workflows/codeql.yml
@@ -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
diff --git a/src/Umbraco.Web.UI.Client/.github/workflows/devskim.yml b/src/Umbraco.Web.UI.Client/.github/workflows/devskim.yml
index 9e564ac12f..de22a81deb 100644
--- a/src/Umbraco.Web.UI.Client/.github/workflows/devskim.yml
+++ b/src/Umbraco.Web.UI.Client/.github/workflows/devskim.yml
@@ -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
diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/components/log-viewer-date-range-selector.element.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/components/log-viewer-date-range-selector.element.ts
index 23e3587136..7c074e8518 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/components/log-viewer-date-range-selector.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/components/log-viewer-date-range-selector.element.ts
@@ -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`
-
- From:
- {
- (e.target as HTMLInputElement).showPicker();
- }}
-
- id="start-date"
- type="date"
- label="From"
- .max=${this.#logViewerContext?.today ?? ''}
- .value=${this._startDate}>
-
-
-
- To:
- {
- (e.target as HTMLInputElement).showPicker();
- }}
- id="end-date"
- type="date"
- label="To"
- .min=${this._startDate}
- .max=${this.#logViewerContext?.today ?? ''}
- .value=${this._endDate}>
-
-
- `;
+
+ From:
+ {
+ (e.target as HTMLInputElement).showPicker();
+ }}
+ id="start-date"
+ type="date"
+ label="From"
+ .max=${this.#logViewerContext?.today ?? ''}
+ .value=${this._startDate} />
+
+
+ To:
+ {
+ (e.target as HTMLInputElement).showPicker();
+ }}
+ id="end-date"
+ type="date"
+ label="To"
+ .min=${this._startDate}
+ .max=${this.#logViewerContext?.today ?? ''}
+ .value=${this._endDate} />
+
+ `;
}
static styles = [
diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/logviewer.context.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/logviewer.context.ts
index 5824382518..3bb56112d7 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/logviewer.context.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/logviewer.context.ts
@@ -134,17 +134,12 @@ export class UmbLogViewerWorkspaceContext extends UmbBaseController implements U
}
this.setLogLevelsFilter(validLogLevels);
- const dateRange: Partial = {};
+ 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) {
diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/overview/components/log-viewer-message-templates-overview.element.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/overview/components/log-viewer-message-templates-overview.element.ts
index 8064a1f091..d8d63e3f8c 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/overview/components/log-viewer-message-templates-overview.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/overview/components/log-viewer-message-templates-overview.element.ts
@@ -37,7 +37,7 @@ export class UmbLogViewerMessageTemplatesOverviewElement extends UmbLitElement {
+ href=${`section/settings/workspace/logviewer/view/search/?lq=${searchListItem.query}`}>
${searchListItem.name}
`;
@@ -59,7 +59,7 @@ export class UmbLogViewerMessageTemplatesOverviewElement extends UmbLitElement {
html`
${template.messageTemplate} ${template.count}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/overview/log-overview-view.element.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/overview/log-overview-view.element.ts
index f0f66462d7..9c5babed5a 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/overview/log-overview-view.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/overview/log-overview-view.element.ts
@@ -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 {
- ${this._errorCount}
+
+ ${this._errorCount === undefined ? html`` : this._errorCount}
+
+
diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-message.element.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-message.element.ts
index 6eb6fb9b9b..de30d985da 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-message.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-message.element.ts
@@ -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,
+ )}`}>
`
: ''}
diff --git a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-messages-list.element.ts b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-messages-list.element.ts
index 24514ffe97..2449327280 100644
--- a/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-messages-list.element.ts
+++ b/src/Umbraco.Web.UI.Client/src/packages/log-viewer/workspace/views/search/components/log-viewer-messages-list.element.ts
@@ -88,41 +88,46 @@ export class UmbLogViewerMessagesListElement extends UmbLitElement {
.exception=${log.exception ?? ''}
.messageTemplate=${log.messageTemplate ?? ''}>`,
)}`
- : html`
+ : html`
+
Sorry, we cannot find what you are looking for.
- `}`;
+
+ `}`;
}
render() {
// TODO: the table should scroll instead of the whole main div
- return html`
-
-
- ${this._canShowLogs
- ? html``
- : html``}
-
+ ${this._canShowLogs
+ ? html``
+ : html``}
`;
}