112 lines
2.8 KiB
TypeScript
Raw Normal View History

2019-10-07 17:02:14 +09:00
import {
Component,
OnInit,
Input,
Output,
EventEmitter,
2019-10-11 17:52:00 +09:00
ViewChild,
ContentChild,
TemplateRef
2019-10-07 17:02:14 +09:00
} from '@angular/core';
2019-09-25 17:41:16 +09:00
2019-10-02 14:34:17 +09:00
import { ucapAnimations } from '@ucap-webmessenger/ui';
2019-09-27 12:53:21 +09:00
import { GroupDetailData, UserInfo } from '@ucap-webmessenger/protocol-sync';
2019-10-07 17:02:14 +09:00
import { MatAccordion } from '@angular/material';
2019-10-11 17:52:00 +09:00
import { ExpansionPanelItemDirective } from '../directives/expansion-panel-item.directive';
import {
UserInfoSS,
UserInfoF,
UserInfoDN
} from '@ucap-webmessenger/protocol-query';
2019-10-21 13:36:58 +09:00
import { NGXLogger } from 'ngx-logger';
@Component({
selector: 'ucap-group-expansion-panel',
templateUrl: './expansion-panel.component.html',
2019-10-02 14:34:17 +09:00
styleUrls: ['./expansion-panel.component.scss'],
animations: ucapAnimations
})
export class ExpansionPanelComponent implements OnInit {
@Input()
2019-09-27 12:53:21 +09:00
groupBuddyList: { group: GroupDetailData; buddyList: UserInfo[] }[];
2019-10-10 18:35:23 +09:00
@Input()
favoritBuddyList: UserInfo[];
@Input()
checkable = false;
@Input()
/** 선택된 사용자의 리스트 */
selectedUserList?: (UserInfo | UserInfoSS | UserInfoF | UserInfoDN)[] = [];
2019-10-15 11:50:59 +09:00
@Output()
more = new EventEmitter<{
event: MouseEvent;
group: GroupDetailData;
}>();
@Output()
checkGroup = new EventEmitter<{
isChecked: boolean;
groupBuddyList: { group: GroupDetailData; buddyList: UserInfo[] };
}>();
2019-10-11 17:52:00 +09:00
@ContentChild(ExpansionPanelItemDirective, {
read: TemplateRef,
static: true
})
expansionPanelItemTemplateRef: TemplateRef<ExpansionPanelItemDirective>;
2019-10-07 17:02:14 +09:00
@ViewChild('groupAccordion', { static: true }) groupAccordion: MatAccordion;
2019-10-21 13:36:58 +09:00
constructor(private logger: NGXLogger) {}
ngOnInit() {}
2019-09-27 12:53:21 +09:00
2019-10-07 17:02:14 +09:00
expandMore() {
this.groupAccordion.openAll();
}
expandLess() {
this.groupAccordion.closeAll();
}
2019-10-15 11:50:59 +09:00
onClickMore(event: MouseEvent, group: GroupDetailData) {
this.more.emit({ event, group });
}
/** 그룹리스트가 checkable 할 경우 checkbox 의 change 이벤트를 상위 컴포넌트로 전달한다. */
onChangeCheck(
value: boolean,
groupBuddyList: { group: GroupDetailData; buddyList: UserInfo[] }
) {
this.checkGroup.emit({
isChecked: value,
groupBuddyList
});
}
/** 그룹리스트가 checkable 할 경우 checkbox 의 isChecked 를 관장하며, 하위 부서원들의 전체선택여부를 판단한다. */
getCheckedGroup(groupBuddy: {
group: GroupDetailData;
buddyList: UserInfo[];
}) {
if (groupBuddy.buddyList.length === 0) {
return false;
}
if (!!this.selectedUserList && this.selectedUserList.length > 0) {
let allExist = true;
groupBuddy.buddyList.some(groupUser => {
if (
this.selectedUserList.filter(item => item.seq === groupUser.seq)
.length === 0
) {
allExist = false;
return true;
}
});
return allExist;
}
return false;
}
}