Merge pull request #11632 from maxunbearable/fix/3969-lw2m2m-resource-read-only
Made Resource details page read only for LwM2M resources
This commit is contained in:
commit
07df611a24
@ -22,7 +22,7 @@ import {
|
|||||||
EntityTableConfig
|
EntityTableConfig
|
||||||
} from '@home/models/entity/entities-table-config.models';
|
} from '@home/models/entity/entities-table-config.models';
|
||||||
import { Resolve, Router } from '@angular/router';
|
import { Resolve, Router } from '@angular/router';
|
||||||
import { Resource, ResourceInfo, ResourceTypeTranslationMap } from '@shared/models/resource.models';
|
import { Resource, ResourceInfo, ResourceType, ResourceTypeTranslationMap } from '@shared/models/resource.models';
|
||||||
import { EntityType, entityTypeResources, entityTypeTranslations } from '@shared/models/entity-type.models';
|
import { EntityType, entityTypeResources, entityTypeTranslations } from '@shared/models/entity-type.models';
|
||||||
import { NULL_UUID } from '@shared/models/id/has-uuid';
|
import { NULL_UUID } from '@shared/models/id/has-uuid';
|
||||||
import { DatePipe } from '@angular/common';
|
import { DatePipe } from '@angular/common';
|
||||||
@ -118,7 +118,7 @@ export class ResourcesLibraryTableConfigResolver implements Resolve<EntityTableC
|
|||||||
const authUser = getCurrentAuthUser(this.store);
|
const authUser = getCurrentAuthUser(this.store);
|
||||||
this.config.deleteEnabled = (resource) => this.isResourceEditable(resource, authUser.authority);
|
this.config.deleteEnabled = (resource) => this.isResourceEditable(resource, authUser.authority);
|
||||||
this.config.entitySelectionEnabled = (resource) => this.isResourceEditable(resource, authUser.authority);
|
this.config.entitySelectionEnabled = (resource) => this.isResourceEditable(resource, authUser.authority);
|
||||||
this.config.detailsReadonly = (resource) => !this.isResourceEditable(resource, authUser.authority);
|
this.config.detailsReadonly = (resource) => this.detailsReadonly(resource, authUser.authority);
|
||||||
return this.config;
|
return this.config;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,6 +149,13 @@ export class ResourcesLibraryTableConfigResolver implements Resolve<EntityTableC
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private detailsReadonly(resource: ResourceInfo, authority: Authority): boolean {
|
||||||
|
if (resource?.resourceType === ResourceType.LWM2M_MODEL) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return !this.isResourceEditable(resource, authority);
|
||||||
|
}
|
||||||
|
|
||||||
private isResourceEditable(resource: ResourceInfo, authority: Authority): boolean {
|
private isResourceEditable(resource: ResourceInfo, authority: Authority): boolean {
|
||||||
if (authority === Authority.TENANT_ADMIN) {
|
if (authority === Authority.TENANT_ADMIN) {
|
||||||
return resource && resource.tenantId && resource.tenantId.id !== NULL_UUID;
|
return resource && resource.tenantId && resource.tenantId.id !== NULL_UUID;
|
||||||
|
|||||||
@ -58,7 +58,7 @@
|
|||||||
</mat-form-field>
|
</mat-form-field>
|
||||||
<mat-form-field class="mat-block" *ngIf="entityForm.get('resourceType').value !== resourceType.LWM2M_MODEL || !isAdd">
|
<mat-form-field class="mat-block" *ngIf="entityForm.get('resourceType').value !== resourceType.LWM2M_MODEL || !isAdd">
|
||||||
<mat-label translate>resource.title</mat-label>
|
<mat-label translate>resource.title</mat-label>
|
||||||
<input matInput formControlName="title" required [readonly]="entityForm.get('resourceType').value === resourceType.LWM2M_MODEL">
|
<input matInput formControlName="title" required>
|
||||||
<mat-error *ngIf="entityForm.get('title').hasError('required')">
|
<mat-error *ngIf="entityForm.get('title').hasError('required')">
|
||||||
{{ 'resource.title-required' | translate }}
|
{{ 'resource.title-required' | translate }}
|
||||||
</mat-error>
|
</mat-error>
|
||||||
|
|||||||
@ -43,8 +43,7 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
|
|||||||
readonly resourceType = ResourceType;
|
readonly resourceType = ResourceType;
|
||||||
readonly resourceTypes: ResourceType[] = Object.values(this.resourceType);
|
readonly resourceTypes: ResourceType[] = Object.values(this.resourceType);
|
||||||
readonly resourceTypesTranslationMap = ResourceTypeTranslationMap;
|
readonly resourceTypesTranslationMap = ResourceTypeTranslationMap;
|
||||||
|
readonly maxResourceSize = getCurrentAuthState(this.store).maxResourceSize;
|
||||||
maxResourceSize = getCurrentAuthState(this.store).maxResourceSize;
|
|
||||||
|
|
||||||
private destroy$ = new Subject<void>();
|
private destroy$ = new Subject<void>();
|
||||||
|
|
||||||
@ -57,20 +56,20 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
|
|||||||
super(store, fb, entityValue, entitiesTableConfigValue, cd);
|
super(store, fb, entityValue, entitiesTableConfigValue, cd);
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit(): void {
|
||||||
super.ngOnInit();
|
super.ngOnInit();
|
||||||
if (this.isAdd) {
|
if (this.isAdd) {
|
||||||
this.observeResourceTypeChange();
|
this.observeResourceTypeChange();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy() {
|
ngOnDestroy(): void {
|
||||||
super.ngOnDestroy();
|
super.ngOnDestroy();
|
||||||
this.destroy$.next();
|
this.destroy$.next();
|
||||||
this.destroy$.complete();
|
this.destroy$.complete();
|
||||||
}
|
}
|
||||||
|
|
||||||
hideDelete() {
|
hideDelete(): boolean {
|
||||||
if (this.entitiesTableConfig) {
|
if (this.entitiesTableConfig) {
|
||||||
return !this.entitiesTableConfig.deleteEnabled(this.entity);
|
return !this.entitiesTableConfig.deleteEnabled(this.entity);
|
||||||
} else {
|
} else {
|
||||||
@ -87,19 +86,18 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
updateForm(entity: Resource) {
|
updateForm(entity: Resource): void {
|
||||||
if (this.isEdit) {
|
this.entityForm.patchValue(entity);
|
||||||
this.entityForm.get('resourceType').disable({emitEvent: false});
|
}
|
||||||
if (entity.resourceType !== ResourceType.JS_MODULE) {
|
|
||||||
this.entityForm.get('fileName').disable({emitEvent: false});
|
override updateFormState(): void {
|
||||||
|
super.updateFormState();
|
||||||
|
if (this.isEdit && this.entityForm) {
|
||||||
|
this.entityForm.get('resourceType').disable({ emitEvent: false });
|
||||||
|
if (this.entityForm.get('resourceType').value !== ResourceType.JS_MODULE) {
|
||||||
|
this.entityForm.get('fileName').disable({ emitEvent: false });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.entityForm.patchValue({
|
|
||||||
resourceType: entity.resourceType,
|
|
||||||
fileName: entity.fileName,
|
|
||||||
title: entity.title,
|
|
||||||
data: entity.data
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
prepareFormValue(formValue: Resource): Resource {
|
prepareFormValue(formValue: Resource): Resource {
|
||||||
@ -109,7 +107,7 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
|
|||||||
return super.prepareFormValue(formValue);
|
return super.prepareFormValue(formValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
getAllowedExtensions() {
|
getAllowedExtensions(): string {
|
||||||
try {
|
try {
|
||||||
return ResourceTypeExtension.get(this.entityForm.get('resourceType').value);
|
return ResourceTypeExtension.get(this.entityForm.get('resourceType').value);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -117,7 +115,7 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getAcceptType() {
|
getAcceptType(): string {
|
||||||
try {
|
try {
|
||||||
return ResourceTypeMIMETypes.get(this.entityForm.get('resourceType').value);
|
return ResourceTypeMIMETypes.get(this.entityForm.get('resourceType').value);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -129,7 +127,7 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
|
|||||||
return window.btoa(data);
|
return window.btoa(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
onResourceIdCopied() {
|
onResourceIdCopied(): void {
|
||||||
this.store.dispatch(new ActionNotificationShow(
|
this.store.dispatch(new ActionNotificationShow(
|
||||||
{
|
{
|
||||||
message: this.translate.instant('resource.idCopiedMessage'),
|
message: this.translate.instant('resource.idCopiedMessage'),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user