diff --git a/src/Umbraco.Web.UI.Client/examples/validation-context/index.ts b/src/Umbraco.Web.UI.Client/examples/validation-context/index.ts new file mode 100644 index 0000000000..8a3181736d --- /dev/null +++ b/src/Umbraco.Web.UI.Client/examples/validation-context/index.ts @@ -0,0 +1,23 @@ +import type { ManifestDashboard } from '@umbraco-cms/backoffice/dashboard'; + +const dashboard : ManifestDashboard = { + type: 'dashboard', + alias: 'Demo.Dashboard', + name: 'Demo Dashboard Validation Context', + weight: 1000, + element: () => import('./validation-context-dashboard.js'), + meta: { + label: 'Demo', + pathname: 'demo' + }, + conditions : [ + { + alias : "Umb.Condition.SectionAlias", + match : "Umb.Section.Translation" + } + ] +} + +export const manifests = [ + dashboard +]; diff --git a/src/Umbraco.Web.UI.Client/examples/validation-context/validation-context-dashboard.ts b/src/Umbraco.Web.UI.Client/examples/validation-context/validation-context-dashboard.ts new file mode 100644 index 0000000000..67155928c4 --- /dev/null +++ b/src/Umbraco.Web.UI.Client/examples/validation-context/validation-context-dashboard.ts @@ -0,0 +1,104 @@ +import { html, customElement, css, state } from '@umbraco-cms/backoffice/external/lit'; +import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element'; +import { UMB_VALIDATION_CONTEXT, umbBindToValidation, UmbValidationContext } from '@umbraco-cms/backoffice/validation'; + +@customElement('umb-example-validation-context-dashboard') +export class UmbExampleValidationContextDashboard extends UmbLitElement { + + readonly validation = new UmbValidationContext(this); + + @state() + name = 'Lorem Ipsum' + + @state() + email = 'lorem.ipsum@test.com' + + @state() + messages? : any[] + + /** + * + */ + constructor() { + super(); + + this.consumeContext(UMB_VALIDATION_CONTEXT,(validationContext)=>{ + console.log('validation ctx',validationContext); + + this.observe(validationContext.messages.messages,(messages)=>{ + this.messages = messages; + },'observeValidationMessages') + + + }); + } + + #handleValidateNow() { + this.validation.validate(); + } + + #handleAddServerValidationError() { + this.validation.messages.addMessage('server','$.name','Name server-error message','4875e113-cd0c-4c57-ac92-53d677ba31ec'); + this.validation.messages.addMessage('server','$.email','Email server-error message','4a9e5219-2dbd-4ce3-8a79-014eb6b12428'); + } + + override render() { + return html` + + This is a element with a Validation Context. + + +
+
+ + + + +
+ + + + +
+
+ + + +
+
${JSON.stringify(this.messages ?? [],null,3)}
+ + +
+ ` + } + + static override styles = [css` + + label { + display:block; + } + + uui-box { + margin:20px; + } + + pre { + text-align:left; + padding:10px; + border:1px dotted #6f6f6f; + background: #f2f2f2; + font-size: 11px; + line-height: 1.3em; + } + + `] + +} + +export default UmbExampleValidationContextDashboard; + +declare global { + interface HTMLElementTagNameMap { + 'umb-example-validation-context-dashboard': UmbExampleValidationContextDashboard; + } +}