Merge branch 'fix/3969-lw2m2m-resource-read-only' of github.com:maxunbearable/thingsboard into fix/3969-lw2m2m-resource-read-only
This commit is contained in:
		
						commit
						c81d05e39d
					
				@ -22,7 +22,7 @@ import {
 | 
			
		||||
  EntityTableConfig
 | 
			
		||||
} from '@home/models/entity/entities-table-config.models';
 | 
			
		||||
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 { NULL_UUID } from '@shared/models/id/has-uuid';
 | 
			
		||||
import { DatePipe } from '@angular/common';
 | 
			
		||||
@ -118,7 +118,7 @@ export class ResourcesLibraryTableConfigResolver implements Resolve<EntityTableC
 | 
			
		||||
    const authUser = getCurrentAuthUser(this.store);
 | 
			
		||||
    this.config.deleteEnabled = (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.isResourceEditable(resource, authUser.authority, true);
 | 
			
		||||
    return this.config;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -149,7 +149,10 @@ export class ResourcesLibraryTableConfigResolver implements Resolve<EntityTableC
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private isResourceEditable(resource: ResourceInfo, authority: Authority): boolean {
 | 
			
		||||
  private isResourceEditable(resource: ResourceInfo, authority: Authority, isDetails = false): boolean {
 | 
			
		||||
    if (isDetails && resource && resource.resourceType === ResourceType.LWM2M_MODEL) {
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
    if (authority === Authority.TENANT_ADMIN) {
 | 
			
		||||
      return resource && resource.tenantId && resource.tenantId.id !== NULL_UUID;
 | 
			
		||||
    } else {
 | 
			
		||||
 | 
			
		||||
@ -58,7 +58,7 @@
 | 
			
		||||
      </mat-form-field>
 | 
			
		||||
      <mat-form-field class="mat-block" *ngIf="entityForm.get('resourceType').value !== resourceType.LWM2M_MODEL || !isAdd">
 | 
			
		||||
        <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')">
 | 
			
		||||
          {{ 'resource.title-required' | translate }}
 | 
			
		||||
        </mat-error>
 | 
			
		||||
 | 
			
		||||
@ -43,8 +43,7 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
 | 
			
		||||
  readonly resourceType = ResourceType;
 | 
			
		||||
  readonly resourceTypes: ResourceType[] = Object.values(this.resourceType);
 | 
			
		||||
  readonly resourceTypesTranslationMap = ResourceTypeTranslationMap;
 | 
			
		||||
 | 
			
		||||
  maxResourceSize = getCurrentAuthState(this.store).maxResourceSize;
 | 
			
		||||
  readonly maxResourceSize = getCurrentAuthState(this.store).maxResourceSize;
 | 
			
		||||
 | 
			
		||||
  private destroy$ = new Subject<void>();
 | 
			
		||||
 | 
			
		||||
@ -57,20 +56,20 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
 | 
			
		||||
    super(store, fb, entityValue, entitiesTableConfigValue, cd);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ngOnInit() {
 | 
			
		||||
  ngOnInit(): void {
 | 
			
		||||
    super.ngOnInit();
 | 
			
		||||
    if (this.isAdd) {
 | 
			
		||||
      this.observeResourceTypeChange();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  ngOnDestroy() {
 | 
			
		||||
  ngOnDestroy(): void {
 | 
			
		||||
    super.ngOnDestroy();
 | 
			
		||||
    this.destroy$.next();
 | 
			
		||||
    this.destroy$.complete();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  hideDelete() {
 | 
			
		||||
  hideDelete(): boolean {
 | 
			
		||||
    if (this.entitiesTableConfig) {
 | 
			
		||||
      return !this.entitiesTableConfig.deleteEnabled(this.entity);
 | 
			
		||||
    } else {
 | 
			
		||||
@ -87,19 +86,19 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  updateForm(entity: Resource) {
 | 
			
		||||
    if (this.isEdit) {
 | 
			
		||||
      this.entityForm.get('resourceType').disable({emitEvent: false});
 | 
			
		||||
      if (entity.resourceType !== ResourceType.JS_MODULE) {
 | 
			
		||||
        this.entityForm.get('fileName').disable({emitEvent: false});
 | 
			
		||||
  updateForm(entity: Resource): void {
 | 
			
		||||
    const { resourceType, fileName, title, data } = entity;
 | 
			
		||||
    this.entityForm.patchValue({ resourceType, fileName, title, data });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  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 {
 | 
			
		||||
@ -109,7 +108,7 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
 | 
			
		||||
    return super.prepareFormValue(formValue);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getAllowedExtensions() {
 | 
			
		||||
  getAllowedExtensions(): string {
 | 
			
		||||
    try {
 | 
			
		||||
      return ResourceTypeExtension.get(this.entityForm.get('resourceType').value);
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
@ -117,7 +116,7 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getAcceptType() {
 | 
			
		||||
  getAcceptType(): string {
 | 
			
		||||
    try {
 | 
			
		||||
      return ResourceTypeMIMETypes.get(this.entityForm.get('resourceType').value);
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
@ -129,7 +128,7 @@ export class ResourcesLibraryComponent extends EntityComponent<Resource> impleme
 | 
			
		||||
    return window.btoa(data);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onResourceIdCopied() {
 | 
			
		||||
  onResourceIdCopied(): void {
 | 
			
		||||
    this.store.dispatch(new ActionNotificationShow(
 | 
			
		||||
      {
 | 
			
		||||
        message: this.translate.instant('resource.idCopiedMessage'),
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user