UI: Fixed mobile center translate, validation and editor

This commit is contained in:
Vladyslav_Prykhodko 2024-12-06 12:35:14 +02:00
parent c2f7e20d42
commit d56fc4c440
5 changed files with 19 additions and 11 deletions

View File

@ -76,9 +76,9 @@ export class MobileAppComponent extends EntityComponent<MobileApp> {
}), }),
storeInfo: this.fb.group({ storeInfo: this.fb.group({
storeLink: [entity?.storeInfo?.storeLink ? entity.storeInfo.storeLink : '', storeLink: [entity?.storeInfo?.storeLink ? entity.storeInfo.storeLink : '',
Validators.pattern(/^https?:\/\/play\.google\.com\/store\/apps\/details\?id=[a-zA-Z0-9._]+$/)], Validators.pattern(/^https?:\/\/play\.google\.com\/store\/apps\/details\?id=[a-zA-Z0-9._]+(?:&[a-zA-Z0-9._-]+=[a-zA-Z0-9._%-]*)*$/)],
sha256CertFingerprints: [entity?.storeInfo?.sha256CertFingerprints ? entity.storeInfo.sha256CertFingerprints : '', sha256CertFingerprints: [entity?.storeInfo?.sha256CertFingerprints ? entity.storeInfo.sha256CertFingerprints : '',
Validators.pattern(/^[A-Fa-f0-9]{2}(:[A-Fa-f0-9]{2}){1,31}$/)], Validators.pattern(/^[A-Fa-f0-9]{2}(:[A-Fa-f0-9]{2}){31}$/)],
appId: [entity?.storeInfo?.appId ? entity.storeInfo.appId : '', Validators.pattern(/^[A-Z0-9]{10}\.[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*$/)], appId: [entity?.storeInfo?.appId ? entity.storeInfo.appId : '', Validators.pattern(/^[A-Z0-9]{10}\.[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*$/)],
}), }),
}); });
@ -89,11 +89,11 @@ export class MobileAppComponent extends EntityComponent<MobileApp> {
if (value === PlatformType.ANDROID) { if (value === PlatformType.ANDROID) {
form.get('storeInfo.sha256CertFingerprints').enable({emitEvent: false}); form.get('storeInfo.sha256CertFingerprints').enable({emitEvent: false});
form.get('storeInfo.appId').disable({emitEvent: false}); form.get('storeInfo.appId').disable({emitEvent: false});
form.get('storeInfo.storeLink').setValidators(Validators.pattern(/^https?:\/\/play\.google\.com\/store\/apps\/details\?id=[a-zA-Z0-9._]+$/)); form.get('storeInfo.storeLink').setValidators(Validators.pattern(/^https?:\/\/play\.google\.com\/store\/apps\/details\?id=[a-zA-Z0-9._]+(?:&[a-zA-Z0-9._-]+=[a-zA-Z0-9._%-]*)*$/));
} else if (value === PlatformType.IOS) { } else if (value === PlatformType.IOS) {
form.get('storeInfo.sha256CertFingerprints').disable({emitEvent: false}); form.get('storeInfo.sha256CertFingerprints').disable({emitEvent: false});
form.get('storeInfo.appId').enable({emitEvent: false}); form.get('storeInfo.appId').enable({emitEvent: false});
form.get('storeInfo.storeLink').setValidators(Validators.pattern(/^https?:\/\/apps\.apple\.com\/[a-z]{2}\/app\/[\w-]+\/id\d{7,10}$/)); form.get('storeInfo.storeLink').setValidators(Validators.pattern(/^https?:\/\/apps\.apple\.com\/[a-z]{2}\/app\/[\w-]+\/id\d{7,10}(?:\?[^\s]*)?$/));
} }
form.get('storeInfo.storeLink').setValue('', {emitEvent: false}); form.get('storeInfo.storeLink').setValue('', {emitEvent: false});
}); });

View File

@ -207,7 +207,7 @@ export class MobileLayoutComponent implements ControlValueAccessor, Validator {
private updateModel() { private updateModel() {
if (isDefaultMobilePagesConfig(this.pagesForm.value.pages as MobilePage[])) { if (isDefaultMobilePagesConfig(this.pagesForm.value.pages as MobilePage[])) {
this.propagateChange({pages: []}); this.propagateChange(null);
} else { } else {
this.propagateChange(this.pagesForm.value); this.propagateChange(this.pagesForm.value);
} }

View File

@ -187,7 +187,7 @@ export class MobilePageItemRowComponent implements ControlValueAccessor, OnInit,
} }
} else { } else {
this.isCustomMenuItem = true; this.isCustomMenuItem = true;
this.mobilePageRowForm.get('label').setValidators([Validators.required]); this.mobilePageRowForm.get('label').addValidators([Validators.required]);
this.mobilePageRowForm.get('label').updateValueAndValidity({emitEvent: false}); this.mobilePageRowForm.get('label').updateValueAndValidity({emitEvent: false});
} }
this.updateCleanupState(); this.updateCleanupState();
@ -270,7 +270,7 @@ export class MobilePageItemRowComponent implements ControlValueAccessor, OnInit,
private updateModel() { private updateModel() {
this.modelValue.visible = this.mobilePageRowForm.get('visible').value; this.modelValue.visible = this.mobilePageRowForm.get('visible').value;
const label = this.mobilePageRowForm.get('label').value; const label = this.mobilePageRowForm.get('label').value.trim();
if (label) { if (label) {
this.modelValue.label = label; this.modelValue.label = label;
} else { } else {

View File

@ -17,6 +17,7 @@
import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core'; import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';
import { FormBuilder, FormControl } from '@angular/forms'; import { FormBuilder, FormControl } from '@angular/forms';
import { TbPopoverComponent } from '@shared/components/popover.component'; import { TbPopoverComponent } from '@shared/components/popover.component';
import { EditorOptions } from 'tinymce';
@Component({ @Component({
selector: 'tb-release-notes-panel', selector: 'tb-release-notes-panel',
@ -43,7 +44,7 @@ export class EditorPanelComponent implements OnInit {
editorControl: FormControl<string>; editorControl: FormControl<string>;
tinyMceOptions: Record<string, any> = { tinyMceOptions: Partial<EditorOptions> = {
base_url: '/assets/tinymce', base_url: '/assets/tinymce',
suffix: '.min', suffix: '.min',
plugins: ['lists'], plugins: ['lists'],
@ -55,7 +56,14 @@ export class EditorPanelComponent implements OnInit {
autofocus: false, autofocus: false,
branding: false, branding: false,
promotion: false, promotion: false,
resize: false resize: false,
setup: (editor) => {
editor.on('PostRender', function() {
const container = editor.getContainer();
const uiContainer = document.querySelector('.tox.tox-tinymce-aux');
container.parentNode.appendChild(uiContainer);
});
}
}; };
constructor(private fb: FormBuilder) { constructor(private fb: FormBuilder) {

View File

@ -3550,7 +3550,7 @@
"tablet-959": "Tablet (max 959px)", "tablet-959": "Tablet (max 959px)",
"max-element-number": "Max elements number", "max-element-number": "Max elements number",
"page-name": "Page name", "page-name": "Page name",
"page-nam-required": "Page name is required.", "page-name-required": "Page name is required.",
"page-type": "Page type", "page-type": "Page type",
"pages-types": { "pages-types": {
"dashboard": "Dashboard", "dashboard": "Dashboard",
@ -3560,7 +3560,7 @@
"url": "URL", "url": "URL",
"url-pattern": "Invalid URL", "url-pattern": "Invalid URL",
"path": "Path", "path": "Path",
"path-pattern": "Path pattern", "path-pattern": "Invalid path",
"custom-page": "Custom page", "custom-page": "Custom page",
"edit-page": "Edit page", "edit-page": "Edit page",
"edit-custom-page": "Edit custom page", "edit-custom-page": "Edit custom page",