diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/bs.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/bs.ts index eebc3ee1e5f9..f34276cc6a56 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/bs.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/bs.ts @@ -1910,9 +1910,6 @@ export default { notificationEmailsCheckSuccessMessage: 'E-mail za obavještenje je postavljen na %0%.', notificationEmailsCheckErrorMessage: 'E-pošta za obavještenje je i dalje postavljena na zadanu vrijednost od %0%.', - scheduledHealthCheckEmailBody: - '

Rezultati zakazanih Umbraco provjera zdravlja koji se pokreću na %0% na %1% su sljedeći:

%2%', - scheduledHealthCheckEmailSubject: 'Status provjere zdravlja Umbraco: %0%', checkGroup: 'Provjerite grupu', helpText: '\n

Provjera zdravlja procjenjuje različita područja vaše web lokacije u pogledu postavki najbolje prakse, konfiguracije, potencijalnih problema itd. Možete jednostavno riješiti probleme pritiskom na dugme.\n Možete dodati svoje zdravstvene preglede, pogledajte dokumentaciju za više informacija o prilagođenim zdravstvenim pregledima.

\n ', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/cs-cz.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/cs-cz.ts index 90f89601a6a2..1ddb0b095ad9 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/cs-cz.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/cs-cz.ts @@ -1734,9 +1734,6 @@ export default { notificationEmailsCheckSuccessMessage: 'E-mail s upozorněním byl nastaven na %0%.', notificationEmailsCheckErrorMessage: 'E-mail s oznámením je stále nastaven na výchozí hodnotu %0%.', - scheduledHealthCheckEmailBody: - '

Výsledky plánovaných kontrol Umbraco Health Checks provedených na %0% v %1% jsou následující:

%2%', - scheduledHealthCheckEmailSubject: 'Stav Umbraco Health Check: %0%', checkGroup: 'Zkontrolovat skupinu', helpText: '\n

Kontrola vyhodnocuje různé oblasti vašeho webu z hlediska nastavení osvědčených postupů, konfigurace, potenciálních problémů atd. Problémy lze snadno vyřešit stisknutím tlačítka. Můžete přidat své vlastní kontroly, podívejte se na dokumentaci pro více informací o vlastních kontrolách.

\n ', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/cy-gb.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/cy-gb.ts index a3b0dc27b5b3..abd36148a6d7 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/cy-gb.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/cy-gb.ts @@ -2076,9 +2076,6 @@ export default { "Gosodiadau SMTP wedi ffurfweddu'n gywir ac mae'r gwasanaeth yn gweithio fel y disgwylir.", notificationEmailsCheckSuccessMessage: "Ebost hysbusu wedi'i osod at %0%.", notificationEmailsCheckErrorMessage: "Ebost hysbusu yn dal wedi'i osod at y gwerth diofyn o %0%.", - scheduledHealthCheckEmailBody: - "

Canlyniadau'r gwiriad Statws Iechyd Umbraco ar amserlen rhedwyd ar %0% am %1% fel y ganlyn:

%2%", - scheduledHealthCheckEmailSubject: 'Statws Iechyd Umbraco: %0%', checkGroup: 'Gwiriwch y grŵp', helpText: '\n

Mae\'r gwiriwr iechyd yn gwerthuso gwahanol rannau o\'ch gwefan ar gyfer gosodiadau arfer gorau, cyfluniad, problemau posibl, ac ati. Gallwch chi drwsio problemau yn hawdd trwy wasgu botwm.\n Gallwch chi ychwanegu eich gwiriadau iechyd eich hun, edrych ar y ddogfennaeth i gael mwy o wybodaeth am wiriadau iechyd arferu.

\n ', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/de-de.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/de-de.ts index 7733d6fa34ad..bf2626e9e299 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/de-de.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/de-de.ts @@ -1875,9 +1875,6 @@ export default { 'Die E-Mail-Adresse für Benachrichtigungen wurde auf %0% eingestellt.', notificationEmailsCheckErrorMessage: 'Die E-Mail-Adresse für Benachrichtigungen ist noch auf den Standardwert %0% gestellt.', - scheduledHealthCheckEmailBody: - '\n

\n Die Ergebnisse der geplanten Systemzustandsprüfung läuft am %0% um %1% lauten wie folgt:\n

%2%\n ', - scheduledHealthCheckEmailSubject: 'Status der Umbraco Systemzustand: %0%', }, redirectUrls: { disableUrlTracker: 'URL-Änderungsaufzeichnung abschalten', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts index 8fb0ba271a4d..46e556710715 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/en.ts @@ -294,6 +294,7 @@ export default { notmemberof: 'Not a member of group(s)', childItems: 'Child items', target: 'Target', + scheduledPendingChanges: 'This schedule has changes that will take effect when you click "%0%".', scheduledPublishServerTime: 'This translates to the following time on the server:', scheduledPublishDocumentation: 'What does this mean?', @@ -2211,9 +2212,6 @@ export default { notificationEmailsCheckSuccessMessage: 'Notification email has been set to %0%.', notificationEmailsCheckErrorMessage: 'Notification email is still set to the default value of %0%.', - scheduledHealthCheckEmailBody: - '

Results of the scheduled Umbraco Health Checks run on %0% at %1% are as follows:

%2%', - scheduledHealthCheckEmailSubject: 'Umbraco Health Check Status: %0%', checkGroup: 'Check group', helpText: '\n

The health checker evaluates various areas of your site for best practice settings, configuration, potential problems, etc. You can easily fix problems by pressing a button.\n You can add your own health checks, have a look at the documentation for more information about custom health checks.

\n ', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/es-es.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/es-es.ts index bb2d4bd9b2f3..95b1ec5e9e58 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/es-es.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/es-es.ts @@ -1414,9 +1414,6 @@ export default { notificationEmailsCheckSuccessMessage: 'Email de notificación has sido configurado como %0%.', notificationEmailsCheckErrorMessage: 'El email de notificación está todavía configurado en tuvalor por defecto: %0%.', - scheduledHealthCheckEmailBody: - '

Los resultados de los Chequeos de Salud de Umbraco programados para ejecutarse el %0% a las %1% son:

%2%', - scheduledHealthCheckEmailSubject: 'Status de los Chequeos de Salud de Umbraco: %0%', }, redirectUrls: { disableUrlTracker: 'Desactivar URL tracker', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/fr-fr.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/fr-fr.ts index f62092bceaa5..43f327b56c62 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/fr-fr.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/fr-fr.ts @@ -1784,9 +1784,6 @@ export default { notificationEmailsCheckSuccessMessage: 'Un email de notification a été envoyé à %0%.', notificationEmailsCheckErrorMessage: "L'adresse email de notification est toujours à sa valeur par défaut : %0%.", - scheduledHealthCheckEmailBody: - "

Les résultats de l'exécution du Umbraco Health Checks planifiée le %0% à %1% sont les suivants :

%2%", - scheduledHealthCheckEmailSubject: 'Statut du Umbraco Health Check: %0%', }, redirectUrls: { disableUrlTracker: 'Désactiver URL tracker', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/hr-hr.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/hr-hr.ts index 23ee4b8d213b..2a4226d8fa77 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/hr-hr.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/hr-hr.ts @@ -1970,9 +1970,6 @@ export default { notificationEmailsCheckSuccessMessage: 'E-mail za obavještenje je postavljen na %0%.', notificationEmailsCheckErrorMessage: 'E-pošta za obavještenje je i dalje postavljena na zadanu vrijednost od %0%.', - scheduledHealthCheckEmailBody: - '

Rezultati zakazanih Umbraco provjera zdravlja koji se pokreću na %0% na %1% su sljedeći:

%2%', - scheduledHealthCheckEmailSubject: 'Status provjere zdravlja Umbraco: %0%', checkGroup: 'Provjerite grupu', helpText: '\n

Provjera zdravlja procjenjuje različita područja vaše web lokacije u pogledu postavki najboljih praksi, konfiguracija, potencijalnih problema itd. Možete jednostavno riješiti probleme pritiskom na gumb.\n Možete dodati svoje zdravstvene preglede, pogledajte dokumentaciju za više informacija o prilagođenim zdravstvenim pregledima.

\n ', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/it-it.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/it-it.ts index e991e84f291f..3efc7b1a93c1 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/it-it.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/it-it.ts @@ -1980,9 +1980,6 @@ export default { notificationEmailsCheckSuccessMessage: "L'email di notifica è stata impostata a %0%.", notificationEmailsCheckErrorMessage: "L'email di notifica è ancora impostata al valore predefinito di %0%.", - scheduledHealthCheckEmailBody: - "

I risultati dell'Health Check programmato di Umbraco del %0% alle %1% è il seguente:

%2%", - scheduledHealthCheckEmailSubject: "Stato dell'Health Check di Umbraco: %0%", checkAllGroups: 'Controlla tutti i gruppi', checkGroup: 'Controlla gruppo', helpText: diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/nl-nl.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/nl-nl.ts index 5b7a3e7408e8..3d5c4e5a0b48 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/nl-nl.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/nl-nl.ts @@ -1850,9 +1850,6 @@ export default { notificationEmailsCheckSuccessMessage: 'Notificatie e-mail is verzonden naar %0%.', notificationEmailsCheckErrorMessage: 'Notificatie e-mail staat nog steeds op de standaard waarde van %0%.', - scheduledHealthCheckEmailBody: - '

Resultaten van de geplande Umbraco Health Checks uitgevoerd op %0% op %1%:

%2%', - scheduledHealthCheckEmailSubject: 'Umbraco Health Check Status: %0%', checkGroup: 'Groep controleren', helpText: '\n

De health checker evalueert verschillende delen van de website voor best practice instellingen, configuratie, mogelijke problemen, enzovoort. U kunt problemen eenvoudig oplossen met een druk op de knop.\n U kunt uw eigen health checks toevoegen, kijk even naar de documentatie voor meer informatie over aangepaste health checks.

\n ', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/ru-ru.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/ru-ru.ts index 4bb00f41c44a..d3ef02537fa5 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/ru-ru.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/ru-ru.ts @@ -703,9 +703,6 @@ export default { notificationEmailsCheckSuccessMessage: 'Адрес для отправки уведомлений установлен в %0%.', notificationEmailsCheckErrorMessage: 'Адрес для отправки уведомлений все еще установлен в значение по-умолчанию %0%.', - scheduledHealthCheckEmailBody: - '

Зафиксированы следующие результаты автоматической проверки состояния Umbraco по расписанию, запущенной на %0% в %1%:

%2%', - scheduledHealthCheckEmailSubject: 'Результат проверки состояния Umbraco: %0%', }, help: { theBestUmbracoVideoTutorials: 'Лучшие обучающие видео-курсы по Umbraco', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/tr-tr.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/tr-tr.ts index a347f094423a..656fccdb2e95 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/tr-tr.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/tr-tr.ts @@ -1737,9 +1737,6 @@ export default { smtpMailSettingsConnectionSuccess: 'SMTP ayarları doğru yapılandırıldı ve hizmet beklendiği gibi çalışıyor.', notificationEmailsCheckSuccessMessage: 'Bildirim e-postası %0% olarak ayarlandı', notificationEmailsCheckErrorMessage: 'Bildirim e-postası hâlâ varsayılan değer olan %0%.', - scheduledHealthCheckEmailBody: - '

%0% tarihinde %1% ile çalıştırılan planlanmış Umbraco Sağlık Kontrollerinin sonuçları aşağıdaki gibidir:

%2%', - scheduledHealthCheckEmailSubject: 'Umbraco Sağlık Kontrolü Durumu: %0%', checkGroup: 'Grubu kontrol et', helpText: '\n

Durum denetleyicisi, sitenizin çeşitli alanlarını en iyi uygulama ayarları, yapılandırma, olası sorunlar vb. için değerlendirir. Sorunları bir düğmeye basarak kolayca düzeltebilirsiniz.\n Kendi sağlık kontrollerinizi ekleyebilir, özel durum kontrolleri hakkında daha fazla bilgi için belgeler .

\n ', diff --git a/src/Umbraco.Web.UI.Client/src/assets/lang/uk-ua.ts b/src/Umbraco.Web.UI.Client/src/assets/lang/uk-ua.ts index d480b68234f8..911106f0e3fb 100644 --- a/src/Umbraco.Web.UI.Client/src/assets/lang/uk-ua.ts +++ b/src/Umbraco.Web.UI.Client/src/assets/lang/uk-ua.ts @@ -701,9 +701,6 @@ export default { notificationEmailsCheckSuccessMessage: 'Адреса для надсилання повідомлень є наступною: %0%.', notificationEmailsCheckErrorMessage: 'Адреса для надсилання повідомлень все ще встановлена за замовчуванням %0%.', - scheduledHealthCheckEmailBody: - '

Зафіксовано такі результати автоматичної перевірки стану Umbraco за розкладом, запущеним %0% в %1%:

%2%', - scheduledHealthCheckEmailSubject: 'Результат перевірки стану Umbraco: %0%', }, help: { theBestUmbracoVideoTutorials: 'Найкращі навчальні відео-курси з Umbraco', diff --git a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document-publishing.manager.ts b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document-publishing.manager.ts index 0792287fe607..e9c56834c5ba 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/data/document/document-publishing.manager.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/data/document/document-publishing.manager.ts @@ -16,11 +16,28 @@ export class UmbMockDocumentPublishingManager { publish(id: string, data: PublishDocumentRequestModel) { const document: UmbMockDocumentModel = this.#documentDb.detail.read(id); - document?.variants?.forEach((variant) => { - const hasCulture = variant.culture && data.publishSchedules.find((x) => x.culture === variant.culture); + data.publishSchedules.forEach((culture) => { + const publishTime = culture.schedule?.publishTime; + const unpublishTime = culture.schedule?.unpublishTime; - if (hasCulture) { + if (publishTime && new Date(publishTime) < new Date()) { + throw new Error('Publish date cannot be in the past'); + } + + if (unpublishTime && new Date(unpublishTime) < new Date()) { + throw new Error('Unpublish date cannot be in the past'); + } + + if (unpublishTime && publishTime && new Date(unpublishTime) < new Date(publishTime)) { + throw new Error('Unpublish date cannot be before publish date'); + } + + const variant = document.variants.find((x) => x.culture === culture.culture); + if (variant) { variant.state = DocumentVariantStateModel.PUBLISHED; + variant.scheduledPublishDate = publishTime; + variant.scheduledUnpublishDate = unpublishTime; + variant.updateDate = new Date().toISOString(); } }); @@ -30,13 +47,25 @@ export class UmbMockDocumentPublishingManager { unpublish(id: string, data: UnpublishDocumentRequestModel) { const document: UmbMockDocumentModel = this.#documentDb.detail.read(id); - document?.variants?.forEach((variant) => { - const hasCulture = variant.culture && data.cultures?.includes(variant.culture); + if (data.cultures) { + data.cultures.forEach((culture) => { + const variant = document.variants.find((x) => x.culture === culture); - if (hasCulture) { + if (variant) { + variant.state = DocumentVariantStateModel.DRAFT; + variant.scheduledPublishDate = null; + variant.scheduledUnpublishDate = null; + variant.updateDate = new Date().toISOString(); + } + }); + } else { + document.variants.forEach((variant) => { variant.state = DocumentVariantStateModel.DRAFT; - } - }); + variant.scheduledPublishDate = null; + variant.scheduledUnpublishDate = null; + variant.updateDate = new Date().toISOString(); + }); + } this.#documentDb.detail.update(id, document); } diff --git a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/publishing.handlers.ts b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/publishing.handlers.ts index 8c41ea34cd65..3ddbb0929b5c 100644 --- a/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/publishing.handlers.ts +++ b/src/Umbraco.Web.UI.Client/src/mocks/handlers/document/publishing.handlers.ts @@ -1,4 +1,5 @@ const { rest } = window.MockServiceWorker; +import { createProblemDetails } from '../../data/utils.js'; import { umbDocumentMockDb } from '../../data/document/document.db.js'; import { UMB_SLUG } from './slug.js'; import type { @@ -14,8 +15,16 @@ export const publishingHandlers = [ if (!id) return res(ctx.status(400)); const requestBody = (await req.json()) as PublishDocumentRequestModel; if (!requestBody) return res(ctx.status(400, 'no body found')); - umbDocumentMockDb.publishing.publish(id, requestBody); - return res(ctx.status(200)); + + try { + umbDocumentMockDb.publishing.publish(id, requestBody); + return res(ctx.status(200)); + } catch (error) { + if (error instanceof Error) { + return res(ctx.status(400), ctx.json(createProblemDetails({ title: 'Schedule', detail: error.message }))); + } + throw new Error('An error occurred while publishing the document'); + } }), rest.put(umbracoPath(`${UMB_SLUG}/:id/unpublish`), async (req, res, ctx) => { diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-date/input-date.element.ts b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-date/input-date.element.ts index 04fffa5b0bd2..8d68d780689f 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/components/input-date/input-date.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/components/input-date/input-date.element.ts @@ -1,66 +1,32 @@ -import { html, customElement, property, ifDefined } from '@umbraco-cms/backoffice/external/lit'; -import { UmbChangeEvent } from '@umbraco-cms/backoffice/event'; -import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; -import { UUIFormControlMixin } from '@umbraco-cms/backoffice/external/uui'; -import type { UUIInputEvent } from '@umbraco-cms/backoffice/external/uui'; +import { customElement } from '@umbraco-cms/backoffice/external/lit'; +import { UUIInputElement } from '@umbraco-cms/backoffice/external/uui'; + +export type InputDateType = 'date' | 'time' | 'datetime-local'; /** * This element passes a datetime string to a regular HTML input element. - * @remark Be aware that you cannot include a time demonination, i.e. "10:44:00" if you + * Be aware that you cannot include a time demonination, i.e. "10:44:00" if you * set the input type of this element to "date". If you do, the browser will not show * the value at all. * @element umb-input-date */ @customElement('umb-input-date') -export class UmbInputDateElement extends UUIFormControlMixin(UmbLitElement, '') { - protected override getFormElement() { - return undefined; - } - - /** - * Sets the input to readonly mode, meaning value cannot be changed but still able to read and select its content. - * @type {boolean} - * @attr - * @default false - */ - @property({ type: Boolean, reflect: true }) - readonly: boolean = false; - +export class UmbInputDateElement extends UUIInputElement { /** - * Specifies the type of input that will be rendered. - * @type {'date'| 'time'| 'datetime-local'} - * @attr - * @default date + * Specifies the date and time type of the input that will be rendered. + * @type {InputDateType} + * @enum {InputDateType} */ - @property() - type: 'date' | 'time' | 'datetime-local' = 'date'; - - @property({ type: String }) - min?: string; - - @property({ type: String }) - max?: string; - - @property({ type: Number }) - step?: number; - - #onChange(event: UUIInputEvent) { - this.value = event.target.value; - this.dispatchEvent(new UmbChangeEvent()); + override set type(type: InputDateType) { + super.type = type; + } + override get type(): InputDateType { + return super.type as InputDateType; } - override render() { - return html` - `; + constructor() { + super(); + this.type = 'date'; // Default to 'date' } } diff --git a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/schedule-publish/modal/document-schedule-modal.element.ts b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/schedule-publish/modal/document-schedule-modal.element.ts index 7e80c6b5dd91..2cf75e6f6452 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/schedule-publish/modal/document-schedule-modal.element.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/documents/documents/publishing/schedule-publish/modal/document-schedule-modal.element.ts @@ -176,6 +176,10 @@ export class UmbDocumentScheduleModalElement extends UmbModalBaseElement< #renderItem(option: UmbDocumentVariantOptionModel) { const pickable = this.#pickableFilter(option); + const fromDate = this.#fromDate(option.unique); + const toDate = this.#toDate(option.unique); + const isChanged = + fromDate !== option.variant?.scheduledPublishDate || toDate !== option.variant?.scheduledUnpublishDate; return html` ${UmbDocumentVariantLanguagePickerElement.renderLabel(option)} - ${when(this.#isSelected(option.unique), () => this.#renderPublishDateInput(option))} + ${when(this.#isSelected(option.unique), () => this.#renderPublishDateInput(option, fromDate, toDate))} + ${when( + isChanged, + () => + html`

+ ${this.localize.term('content_scheduledPendingChanges', this.localize.term('buttons_schedulePublish'))} +

`, + )} `; } - #renderPublishDateInput(option: UmbDocumentVariantOptionModel) { - const fromDate = this.#fromDate(option.unique); - const toDate = this.#toDate(option.unique); - + #renderPublishDateInput(option: UmbDocumentVariantOptionModel, fromDate: string | null, toDate: string | null) { return html`
Publish at
this.#onFromDateChange(e, option.unique)} - label=${this.localize.term('general_publishDate')}> + label=${this.localize.term('general_publishDate')}> +
+ ${when( + fromDate, + () => html` + this.#removeFromDate(option.unique)}> + + + `, + )} +
+
@@ -212,22 +235,57 @@ export class UmbDocumentScheduleModalElement extends UmbModalBaseElement<
this.#onToDateChange(e, option.unique)} - label=${this.localize.term('general_publishDate')}> + label=${this.localize.term('general_publishDate')}> +
+ ${when( + toDate, + () => html` + this.#removeToDate(option.unique)}> + + + `, + )} +
+
`; } - #fromDate(unique: string): string { + #fromDate(unique: string): string | null { const variant = this._internalValues.find((s) => s.unique === unique); - return this.#formatDate(variant?.schedule?.publishTime); + return variant?.schedule?.publishTime ?? null; } - #toDate(unique: string): string { + #toDate(unique: string): string | null { const variant = this._internalValues.find((s) => s.unique === unique); - return this.#formatDate(variant?.schedule?.unpublishTime); + return variant?.schedule?.unpublishTime ?? null; + } + + #removeFromDate(unique: string): void { + const variant = this._internalValues.find((s) => s.unique === unique); + if (!variant) return; + variant.schedule = { + ...variant.schedule, + publishTime: null, + }; + this.requestUpdate('_internalValues'); + } + + #removeToDate(unique: string): void { + const variant = this._internalValues.find((s) => s.unique === unique); + if (!variant) return; + variant.schedule = { + ...variant.schedule, + unpublishTime: null, + }; + this.requestUpdate('_internalValues'); } /** @@ -235,7 +293,7 @@ export class UmbDocumentScheduleModalElement extends UmbModalBaseElement< * @param {string} dateStr The date to format, example: 2021-01-01T12:00:00.000+01:00 * @returns {string | undefined} The formatted date in local time with no offset, example: 2021-01-01T11:00 */ - #formatDate(dateStr?: string | null): string { + #formatDate(dateStr: string | null): string { if (!dateStr) return ''; const d = new Date(dateStr); @@ -267,6 +325,7 @@ export class UmbDocumentScheduleModalElement extends UmbModalBaseElement< ...variant.schedule, publishTime: this.#getDateValue(e), }; + this.requestUpdate('_internalValues'); } #onToDateChange(e: Event, unique: string) { @@ -276,6 +335,7 @@ export class UmbDocumentScheduleModalElement extends UmbModalBaseElement< ...variant.schedule, unpublishTime: this.#getDateValue(e), }; + this.requestUpdate('_internalValues'); } #getDateValue(e: Event): string | null {