Mykyta Maliarchuk e62c0587b6
[ACS-9215] Update license headers (#10625)
* [ACS-9215] Update license headers

* [ACS-9215] Update license headers
2025-02-06 13:18:56 +01:00

131 lines
4.9 KiB
TypeScript

/*!
* @license
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Component, Inject, ViewEncapsulation } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';
import { NodeEntry, PermissionElement } from '@alfresco/js-api';
import { AddPermissionDialogData } from './add-permission-dialog-data.interface';
import { MemberModel } from '../../models/member.model';
import { CommonModule } from '@angular/common';
import { MatButtonModule } from '@angular/material/button';
import { TranslateModule } from '@ngx-translate/core';
import { DataColumnComponent, DataColumnListComponent, DataTableComponent, DateColumnHeaderComponent } from '@alfresco/adf-core';
import { MatIconModule } from '@angular/material/icon';
import { AddPermissionPanelComponent } from './add-permission-panel.component';
import { UserIconColumnComponent } from '../user-icon-column/user-icon-column.component';
import { UserNameColumnComponent } from '../user-name-column/user-name-column.component';
import { UserRoleColumnComponent } from '../user-role-column/user-role-column.component';
@Component({
selector: 'adf-add-permission-dialog',
standalone: true,
imports: [
CommonModule,
MatDialogModule,
MatButtonModule,
TranslateModule,
DataTableComponent,
DataColumnListComponent,
DataColumnComponent,
DateColumnHeaderComponent,
MatIconModule,
AddPermissionPanelComponent,
UserIconColumnComponent,
UserNameColumnComponent,
UserRoleColumnComponent
],
templateUrl: './add-permission-dialog.component.html',
styleUrls: ['./add-permission-dialog.component.scss'],
encapsulation: ViewEncapsulation.None
})
export class AddPermissionDialogComponent {
isSearchActive = true;
selectedMembers: MemberModel[] = [];
private existingMembers: PermissionElement[] = [];
currentSelection: NodeEntry[] = [];
constructor(@Inject(MAT_DIALOG_DATA) public data: AddPermissionDialogData, private dialogRef: MatDialogRef<AddPermissionDialogComponent>) {
this.existingMembers = this.data.node.permissions.locallySet || [];
}
onSelect(items: NodeEntry[]) {
this.currentSelection = items;
}
onAddClicked() {
const selection = this.selectedMembers.filter((member) => !member.readonly).map((member) => member.toPermissionElement());
this.data.confirm.next(selection);
this.data.confirm.complete();
}
onSearchAddClicked() {
const newMembers = this.currentSelection
.map((item) => MemberModel.parseFromSearchResult(item))
.filter(({ id }) => !this.selectedMembers.find((member) => member.id === id));
this.selectedMembers = this.selectedMembers.concat(newMembers);
this.selectedMembers.forEach((member) => {
const existingMember = this.existingMembers.find(({ authorityId }) => authorityId === member.id);
if (existingMember) {
member.role = existingMember.name;
member.accessStatus = existingMember.accessStatus;
member.readonly = true; // make role non editable
}
});
this.disableSearch();
}
canCloseDialog() {
if (this.selectedMembers.length) {
this.disableSearch();
} else {
this.dialogRef.close();
}
}
enableSearch() {
this.isSearchActive = true;
}
disableSearch() {
this.isSearchActive = false;
}
onBulkUpdate(role: string) {
this.selectedMembers.filter((member) => !member.readonly).forEach((member) => (member.role = role));
}
onMemberDelete({ id }: MemberModel) {
const index = this.selectedMembers.findIndex((member) => member.id === id);
this.selectedMembers.splice(index, 1);
if (this.selectedMembers.length === 0) {
this.enableSearch();
this.currentSelection = [];
}
}
onMemberUpdate(role: string, member: MemberModel) {
const memberInstance = this.selectedMembers.find(({ id }) => id === member.id);
memberInstance.role = role;
}
isValid(): boolean {
return this.selectedMembers.filter(({ readonly }) => !readonly).length && this.selectedMembers.every(({ role }) => !!role);
}
}