src/app/modules/manage/components/user-org-management/user-org-management.component.ts
OnInit
AfterViewInit
OnDestroy
selector | app-user-org-management |
styleUrls | user-org-management.component.scss |
templateUrl | user-org-management.component.html |
constructor(activatedRoute: ActivatedRoute, navigationhelperService: NavigationHelperService, userService: UserService, manageService: ManageService, router: Router, toasterService: ToasterService, resourceService: ResourceService, layoutService: LayoutService, telemetryService: TelemetryService, tncService: TncService)
|
|||||||||||||||||||||||||||||||||
Parameters :
|
assignUserRole |
assignUserRole()
|
Returns :
void
|
closeUserValidationModal |
closeUserValidationModal()
|
Returns :
void
|
Public downloadCSVFile | ||||||||||||
downloadCSVFile(slug, status, fileName: any)
|
||||||||||||
Parameters :
Returns :
void
|
downloadFile | ||||
downloadFile(path)
|
||||
Parameters :
Returns :
void
|
Public downloadZipFile | |||||||||
downloadZipFile(slug, fileName: any)
|
|||||||||
Parameters :
Returns :
void
|
fetchDeclaredUserDetails |
fetchDeclaredUserDetails()
|
Returns :
void
|
Public fileChanged | ||||
fileChanged(event)
|
||||
Parameters :
Returns :
void
|
Public geoTableView |
geoTableView()
|
Returns :
void
|
getAdminPolicyTnC |
getAdminPolicyTnC()
|
Returns :
void
|
Public getGeoDetail |
getGeoDetail()
|
Returns :
void
|
Public getGeoJSON |
getGeoJSON()
|
Returns :
void
|
initLayout |
initLayout()
|
Returns :
void
|
ngAfterViewInit |
ngAfterViewInit()
|
Returns :
void
|
ngOnDestroy |
ngOnDestroy()
|
Returns :
void
|
ngOnInit |
ngOnInit()
|
Returns :
void
|
openAdminPolicyPopup | ||||||
openAdminPolicyPopup(closePopup?: boolean)
|
||||||
Parameters :
Returns :
void
|
Public openModal |
openModal()
|
Returns :
void
|
openModel |
openModel()
|
Returns :
void
|
Public renderGeoDetails |
renderGeoDetails()
|
Returns :
void
|
Public renderUserDetails |
renderUserDetails()
|
Returns :
void
|
showAdminTncForFirstUser |
showAdminTncForFirstUser()
|
Returns :
void
|
Public activatedRoute |
Type : ActivatedRoute
|
Public adminPolicyDetailsInteractEdata |
Type : IInteractEventEdata
|
Public adminTncUrl |
Type : string
|
Public adminTncVersion |
Type : string
|
Public disableBtn |
Default value : true
|
Public fileUpload |
Type : null
|
Default value : null
|
Public geoButtonText |
Public geoCSV |
Type : string
|
Default value : 'geo-detail'
|
Public geoData |
Type : any
|
Default value : {
'districts': 0,
'blocks': 0,
'schools': 0
}
|
Public geoDetail |
Type : string
|
Default value : 'geo-summary-district'
|
Public geoDownloadInteractEdata |
Type : IInteractEventEdata
|
Public geoJSON |
Type : string
|
Default value : 'geo-summary'
|
Public geoSummary |
Public geoTabledata |
Type : []
|
Default value : []
|
Public geoTableHeader |
Public GeoTableId |
Type : string
|
Default value : 'GeoDetailsTable'
|
Public geoViewInteractEdata |
Type : IInteractEventEdata
|
Public instance |
Type : string
|
layoutConfiguration |
Type : any
|
Public layoutService |
Type : LayoutService
|
Public manageService |
Type : ManageService
|
Public navigationhelperService |
Type : NavigationHelperService
|
Public openUploadModalInteractEdata |
Type : IInteractEventEdata
|
Public resourceService |
Type : ResourceService
|
Public selectFileInteractEdata |
Type : IInteractEventEdata
|
Public selectUserValidationFileInteractEdata |
Type : IInteractEventEdata
|
Public showAdminTnC |
Default value : false
|
Public showModal |
Default value : false
|
Public showTncPopup |
Default value : false
|
Public showUploadUserModal |
Default value : false
|
Public slug |
Type : any
|
Default value : (<HTMLInputElement>document.getElementById('defaultTenant'))
|
Public teacherDetailsInteractEdata |
Type : IInteractEventEdata
|
Public teachersButtonText |
Public telemetryImpression |
Type : IImpressionEventInput
|
Public telemetryInteractObject |
Type : IInteractEventObject
|
Public telemetryService |
Type : TelemetryService
|
Public tncService |
Type : TncService
|
Public unsubscribe$ |
Default value : new Subject<void>()
|
Public uploadButton |
Public userDeclaredDetailsEdata |
Type : IInteractEventEdata
|
Public userDeclaredDetailsUrl |
Public userDownloadInteractEdata |
Type : IInteractEventEdata
|
Public userProfile |
Public userService |
Type : UserService
|
Public userTabledata |
Type : []
|
Default value : []
|
Public userTableHeader |
Public userTableId |
Type : string
|
Default value : 'ValidatedUserDetailsTable'
|
Public userValidationUploadInteractEdata |
Type : IInteractEventEdata
|
Public userViewInteractEdata |
Type : IInteractEventEdata
|
Public validatedUserSummary |
import {Component, AfterViewInit, OnInit, OnDestroy} from '@angular/core';
import { UserService } from '../../../core/services/user/user.service';
import { ManageService } from '../../services/manage/manage.service';
import { ResourceService } from '../../../shared/services/resource/resource.service';
import {ToasterService, NavigationHelperService, LayoutService} from '@sunbird/shared';
import { IImpressionEventInput, IInteractEventEdata, IInteractEventObject, TelemetryService } from '@sunbird/telemetry';
import { Router, ActivatedRoute } from '@angular/router';
import { takeUntil} from 'rxjs/operators';
import * as _ from 'lodash-es';
import $ from 'jquery';
import 'datatables.net';
import dayjs from 'dayjs';
import {Subject} from 'rxjs';
import { TncService } from '@sunbird/core';
@Component({
selector: 'app-user-org-management',
templateUrl: 'user-org-management.component.html',
styleUrls: ['user-org-management.component.scss']
})
export class UserOrgManagementComponent implements OnInit, AfterViewInit, OnDestroy {
public showModal = false;
public userService: UserService;
public userProfile;
public geoData: any = {
'districts': 0,
'blocks': 0,
'schools': 0
};
public geoSummary;
public validatedUserSummary;
public geoButtonText;
public teachersButtonText;
public manageService: ManageService;
public slug: any = (<HTMLInputElement>document.getElementById('defaultTenant'));
public geoJSON = 'geo-summary';
public geoCSV = 'geo-detail';
public geoDetail = 'geo-summary-district';
public GeoTableId = 'GeoDetailsTable';
public geoTableHeader;
public geoTabledata = [];
public userTableId = 'ValidatedUserDetailsTable';
public userDeclaredDetailsUrl;
public userTableHeader;
public userTabledata = [];
public activatedRoute: ActivatedRoute;
public resourceService: ResourceService;
public telemetryImpression: IImpressionEventInput;
public geoViewInteractEdata: IInteractEventEdata;
public userDeclaredDetailsEdata: IInteractEventEdata;
public geoDownloadInteractEdata: IInteractEventEdata;
public userViewInteractEdata: IInteractEventEdata;
public userDownloadInteractEdata: IInteractEventEdata;
public teacherDetailsInteractEdata: IInteractEventEdata;
public selectFileInteractEdata: IInteractEventEdata;
layoutConfiguration: any;
public unsubscribe$ = new Subject<void>();
public uploadButton;
public fileUpload = null;
public selectUserValidationFileInteractEdata: IInteractEventEdata;
public userValidationUploadInteractEdata: IInteractEventEdata;
public openUploadModalInteractEdata: IInteractEventEdata;
public telemetryInteractObject: IInteractEventObject;
public adminPolicyDetailsInteractEdata: IInteractEventEdata;
public showUploadUserModal = false;
public disableBtn = true;
public instance: string;
public adminTncUrl: string;
public adminTncVersion: string;
public showAdminTnC = false;
public showTncPopup = false;
constructor(activatedRoute: ActivatedRoute, public navigationhelperService: NavigationHelperService,
userService: UserService, manageService: ManageService, private router: Router, private toasterService: ToasterService, resourceService: ResourceService,
public layoutService: LayoutService, public telemetryService: TelemetryService, public tncService: TncService) {
this.userService = userService;
this.manageService = manageService;
this.activatedRoute = activatedRoute;
this.resourceService = resourceService;
if (this.slug) {
this.slug = (<HTMLInputElement>document.getElementById('defaultTenant')).value;
} else {
this.slug = 'sunbird';
}
}
ngOnInit(): void {
this.initLayout();
this.instance = _.upperCase(this.resourceService.instance);
this.uploadButton = this.resourceService.frmelmnts.btn.selectCsvFile;
this.geoButtonText = this.resourceService.frmelmnts.btn.viewdetails;
this.teachersButtonText = this.resourceService.frmelmnts.btn.viewdetails;
this.geoTableHeader = [this.resourceService.frmelmnts.lbl.admindshheader.index,
this.resourceService.frmelmnts.lbl.admindshheader.districts,
this.resourceService.frmelmnts.lbl.admindshheader.blocks,
this.resourceService.frmelmnts.lbl.admindshheader.schools
];
this.userTableHeader = [this.resourceService.frmelmnts.lbl.admindshheader.index,
this.resourceService.frmelmnts.lbl.admindshheader.districts,
this.resourceService.frmelmnts.lbl.admindshheader.blocks,
this.resourceService.frmelmnts.lbl.admindshheader.schools,
this.resourceService.frmelmnts.lbl.admindshheader.teachers
];
this.userService.userData$.subscribe(async (user) => {
if (user && user.userProfile) {
this.userProfile = user.userProfile;
this.getAdminPolicyTnC();
this.fetchDeclaredUserDetails();
this.slug = await _.get(this.userService, 'userProfile.rootOrg.slug');
this.getGeoJSON();
this.getGeoDetail();
}
});
}
initLayout() {
this.layoutConfiguration = this.layoutService.initlayoutConfig();
this.layoutService.switchableLayout().pipe(takeUntil(this.unsubscribe$)).subscribe(layoutConfig => {
if (layoutConfig != null) {
this.layoutConfiguration = layoutConfig.layout;
}
});
}
downloadFile(path) {
window.open(path, '_blank');
}
public fileChanged(event) {
this.fileUpload = (event.target as HTMLInputElement).files[0];
this.disableBtn = false;
}
openModel() {
this.showUploadUserModal = !this.showUploadUserModal;
this.fileUpload = null;
}
closeUserValidationModal() {
this.showUploadUserModal = false;
const interactData = {
context: {
env: this.activatedRoute.snapshot.data.telemetry.env,
cdata: []
},
edata: {
id: 'close-upload-validation-status-modal',
type: 'click',
pageid: this.activatedRoute.snapshot.data.telemetry.pageid
}
};
this.telemetryService.interact(interactData);
}
fetchDeclaredUserDetails() {
let channelName = _.get(this.userProfile, 'rootOrg.channel');
if (channelName) {
channelName = channelName + '.zip';
this.manageService.getData('declared_user_detail', channelName).subscribe(response => {
const url = (_.get(response, 'result.signedUrl'));
if (url) {
this.userDeclaredDetailsUrl = url;
}
}
);
}
}
ngAfterViewInit() {
setTimeout(() => {
this.telemetryImpression = {
context: {
env: this.activatedRoute.snapshot.data.telemetry.env
},
edata: {
type: this.activatedRoute.snapshot.data.telemetry.type,
pageid: this.activatedRoute.snapshot.data.telemetry.pageid,
uri: this.activatedRoute.snapshot.data.telemetry.uri,
duration: this.navigationhelperService.getPageLoadTime()
}
};
this.geoViewInteractEdata = {
id: 'geo-details',
type: 'view',
pageid: this.activatedRoute.snapshot.data.telemetry.pageid
};
this.userDeclaredDetailsEdata = {
id: 'user-declared-details',
type: 'click',
pageid: this.activatedRoute.snapshot.data.telemetry.pageid
};
this.geoDownloadInteractEdata = {
id: 'geo-details',
type: 'download',
pageid: this.activatedRoute.snapshot.data.telemetry.pageid
};
this.userViewInteractEdata = {
id: 'teacher-details',
type: 'view',
pageid: this.activatedRoute.snapshot.data.telemetry.pageid
};
this.userDownloadInteractEdata = {
id: 'teacher-details',
type: 'download',
pageid: this.activatedRoute.snapshot.data.telemetry.pageid
};
this.teacherDetailsInteractEdata = {
id: 'account-details',
type: 'download',
pageid: this.activatedRoute.snapshot.data.telemetry.pageid
};
this.selectFileInteractEdata = {
id: 'upload-user',
type: 'click',
pageid: this.activatedRoute.snapshot.data.telemetry.pageid
};
this.selectUserValidationFileInteractEdata = {
id: 'select-user-validation-file',
type: 'click',
pageid: this.activatedRoute.snapshot.data.telemetry.pageid
};
this.userValidationUploadInteractEdata = {
id: 'upload-user-validation-status',
type: 'click',
pageid: this.activatedRoute.snapshot.data.telemetry.pageid
};
this.openUploadModalInteractEdata = {
id: 'open-upload-validation-status-modal',
type: 'click',
pageid: this.activatedRoute.snapshot.data.telemetry.pageid
};
this.adminPolicyDetailsInteractEdata = {
id: 'admin-policy-tnc-popup',
type: 'click',
pageid: this.activatedRoute.snapshot.data.telemetry.pageid
};
this.telemetryInteractObject = {
id: this.userService.userid,
type: 'User',
ver: '1.0'
};
});
}
public getGeoJSON() {
this.manageService.getData(this.geoJSON, `${this.slug}.json`).subscribe(
data => {
const result = _.get(data, 'result');
this.geoData = {
'districts': result['districts'] ? result['districts'] : 0,
'blocks': result['blocks'] ? result['blocks'] : 0,
'schools': result['schools'] ? result['schools'] : 0
};
},
error => {
console.log(error);
}
);
}
public getGeoDetail() {
this.manageService.getData(this.geoDetail, `${this.slug}.json`).subscribe(
data => {
const result = _.get(data, 'result');
this.geoSummary = result;
},
error => {
console.log(error);
}
);
}
public renderGeoDetails() {
setTimeout(() => {
$(`#${this.GeoTableId}`).removeAttr('width').DataTable({
retrieve: true,
'columnDefs': [
{
'targets': 0,
'render': (data) => {
const date = dayjs(data, 'DD-MM-YYYY');
if (date.isValid()) {
return `<td><span style="display:none">
${dayjs(data, 'DD-MM-YYYY').format('YYYYMMDD')}</span> ${data}</td>`;
}
return data;
},
}],
'data': this.geoTabledata,
'searching': false,
'lengthChange': false
});
}, 100);
}
public geoTableView() {
this.geoTabledata = [];
if (this.geoButtonText === this.resourceService.frmelmnts.btn.viewdetails) {
this.geoButtonText = this.resourceService.frmelmnts.btn.viewless;
for (let i = 0; i < this.geoSummary.length; i++) {
this.geoTabledata.push([
this.geoSummary[i].index, this.geoSummary[i].districtName,
this.geoSummary[i].blocks, this.geoSummary[i].schools
]);
if (i === (this.geoSummary.length - 1)) {
this.renderGeoDetails();
}
}
} else {
this.geoButtonText = this.resourceService.frmelmnts.btn.viewdetails;
}
}
public renderUserDetails() {
setTimeout(() => {
$(`#${this.userTableId}`).removeAttr('width').DataTable({
retrieve: true,
'columnDefs': [
{
'targets': 0,
'render': (data) => {
const date = dayjs(data, 'DD-MM-YYYY');
if (date.isValid()) {
return `<td><span style="display:none">
${dayjs(data, 'DD-MM-YYYY').format('YYYYMMDD')}</span> ${data}</td>`;
}
return data;
},
}],
'data': this.userTabledata,
'searching': false,
'lengthChange': false
});
}, 100);
}
public openModal() {
this.showModal = false;
setTimeout(() => {
this.showModal = true;
}, 500);
}
public downloadCSVFile(slug, status, fileName: any) {
const slugName = status ? slug + '__' + status : slug;
const downloadFileName = status ? status + '_' + dayjs().format('DDMMYYYY') + '.csv' : undefined;
this.manageService.getData(slugName, fileName, downloadFileName)
.subscribe(
response => {
const url = (_.get(response, 'result.signedUrl'));
if (url) { window.open(url, '_blank'); }
},
error => {
console.log(error);
}
);
}
public downloadZipFile(slug, fileName: any) {
this.manageService.getData(slug, fileName)
.subscribe(
response => {
if (response && response.result && response.result.signedUrl) {
window.open(response.result.signedUrl, '_blank');
} else {
this.toasterService.error(this.resourceService.messages.emsg.m0076);
}
},
error => {
this.toasterService.error(this.resourceService.messages.emsg.m0076);
}
);
}
getAdminPolicyTnC() {
this.tncService.getAdminTnc().subscribe(data => {
const adminTncData = JSON.parse(_.get(data, 'result.response.value'));
if (_.get(adminTncData, 'latestVersion')) {
this.adminTncVersion = _.get(adminTncData, 'latestVersion');
this.showAdminTnC = true;
this.adminTncUrl = _.get(_.get(adminTncData, _.get(adminTncData, 'latestVersion')), 'url');
this.showAdminTncForFirstUser();
}
});
}
showAdminTncForFirstUser() {
const adminTncObj = _.get(this.userProfile, 'allTncAccepted.orgAdminTnc');
if (!adminTncObj) {
this.showTncPopup = true;
} else {
this.showTncPopup = false;
}
}
openAdminPolicyPopup(closePopup?: boolean) {
if (closePopup) {
this.showTncPopup = false;
} else {
this.showTncPopup = true;
}
}
assignUserRole() {
this.router.navigate(['/manage/userRoleAssign']);
}
ngOnDestroy() {
this.unsubscribe$.next();
this.unsubscribe$.complete();
}
}
<app-landing-section [noTitle]="true" [layoutConfiguration]="layoutConfiguration">
</app-landing-section>
<div [ngClass]="layoutConfiguration ? 'sbt-container sbt-user-management relative9 sbt-inside-page-container':''">
<div class="sb-manage-section" [appTelemetryImpression]="telemetryImpression">
<div class="sb-multi-rows py-16">
<div class="d-flex flex-ai-center flex-jc-space-between flex-w-wrap ui container">
<div class="d-flex flex-dc mr-auto">
<h4 class="sb-manage-section-title m-0 font-weight-normal">Add new user roles</h4>
<p class="fsmall">Search and add more user roles</p>
</div>
<button class="sb-btn sb-btn-normal sb-btn-primary" tabindex="0" type="button" (click)="assignUserRole()">Add User Role</button>
</div>
</div>
<div class="sb-multi-rows py-16">
<div class="d-flex flex-ai-center flex-jc-space-between flex-w-wrap ui container">
<h4 class="sb-manage-section-title m-0 font-weight-normal mr-auto">
{{resourceService.frmelmnts?.lbl?.selfDeclaredDetails}}</h4>
<button [disabled]="!userDeclaredDetailsUrl" appTelemetryInteract
[telemetryInteractEdata]="userDeclaredDetailsEdata"
[ngClass]="{'disabled':!userDeclaredDetailsUrl, 'sb-btn-secondary':userDeclaredDetailsUrl}" type="button"
class="sb-btn sb-btn-secondary sb-btn-normal" (click)="downloadFile(userDeclaredDetailsUrl)">
{{resourceService.frmelmnts?.btn?.download}}
</button>
<!-- <span *ngIf="!userDeclaredDetailsUrl">{{resourceService.frmelmnts?.lbl?.noDataAvailable}}</span> -->
<!-- <button type="button" (click) = "openModel()" class="sb-btn sb-btn-outline-primary sb-btn-normal" appTelemetryInteract
[telemetryInteractObject]="telemetryInteractObject" [telemetryInteractEdata]="openUploadModalInteractEdata">{{resourceService.frmelmnts?.lbl?.uploadValidationStatus}}</button> -->
</div>
<div class="d-flex flex-ai-center ui container" *ngIf="!userDeclaredDetailsUrl">
<img src="./assets/images/icon-info.svg" height="16px">
<label class="no-data-label font-weight-normal ml-4">{{resourceService.frmelmnts?.lbl?.noDataAvailable}}</label>
</div>
<p class="font-weight-normal fsmall ui container">
{{resourceService?.frmelmnts?.imsg?.admintnc | interpolate:'{instance}': instance }} <a
class="sb-color-primary cursor-pointer" appTelemetryInteract
[telemetryInteractObject]="telemetryInteractObject" [telemetryInteractEdata]="adminPolicyDetailsInteractEdata"
(click)=openAdminPolicyPopup()>{{resourceService?.frmelmnts?.lnk?.adminPolicy}}</a></p>
</div>
<div class="sb-pageSection sb-multi-rows py-16">
<div class="ui container">
<h4 class="sb-manage-section-title m-0 pb-16">User & Org Management</h4>
<div class="sb-pageSection-content">
<div class="d-flex">
<div class="sb-label-name">Geo Data:</div>
<div class="ml-auto" *ngIf="geoSummary && geoSummary.length">
<button class="sb-btn sb-btn-normal"
[ngClass]="(geoButtonText == 'View Less') ? 'sb-btn-outline-primary' : 'sb-btn-primary'"
(click)="geoTableView()" appTelemetryInteract
[telemetryInteractEdata]="geoViewInteractEdata">{{geoButtonText}}</button>
<button type="button" class="sb-btn sb-btn-secondary sb-btn-normal ml-16"
(click)="downloadCSVFile(geoCSV, '', slug + '.csv')" appTelemetryInteract
[telemetryInteractEdata]="geoDownloadInteractEdata"> {{resourceService.frmelmnts.btn.download}}
</button>
</div>
</div>
<div class="sb-meta-data-container pt-16 sb-meta-data-column d-flex flex-w-wrap">
<dl class="sb-meta-data">
<dt>{{ geoData['districts'] }}</dt>
<dd>Districts</dd>
</dl>
<dl class="sb-meta-data">
<dt>{{ geoData['blocks'] }}</dt>
<dd>Blocks</dd>
</dl>
<dl class="sb-meta-data">
<dt>{{ geoData['schools'] }}</dt>
<dd>Schools</dd>
</dl>
</div>
</div>
</div>
<div class="sb-manage-table-section" *ngIf="geoButtonText === resourceService.frmelmnts.btn.viewless">
<div class="ui container">
<div class="sb-table-responsive">
<div class="sb-table-container">
<table [attr.id]="GeoTableId"
class="sb-table sb-table-hover sb-table-striped sb-table-sortable br-0 width-100">
<thead>
<tr>
<th *ngFor="let header of geoTableHeader">{{header}}</th>
</tr>
</thead>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Upload validation status modal -->
<app-modal-wrapper *ngIf="showUploadUserModal" [config]="{disableClose: false, size: 'normal'}"
(dismiss)="closeUserValidationModal()" #modal>
<ng-template sbModalContent>
<div class="sb-modal">
<div class="transition ui dimmer page modals active visible">
<div class="ui modal transition active visible normal">
<div class="sb-modal-header">
{{resourceService?.frmelmnts?.lbl?.uploadingValidationStatusHeader}}
</div>
<div class="sb-modal-content">
<div class="m-0">
<span class="m-0 mr-16">{{resourceService?.frmelmnts?.lbl?.uploadcsvfile}}</span>
</div>
<div class="sb-btn sb-btn-tertiary sb-btn-normal mt-8 sb-bulk-upload-btn">
{{uploadButton}}
<input type="file" appTelemetryInteract [telemetryInteractObject]="telemetryInteractObject"
[telemetryInteractEdata]="selectUserValidationFileInteractEdata" class="sb-btn-upload upload-btn"
(change)="fileChanged($event)" />
</div>
<div *ngIf="fileUpload">
<span> {{resourceService?.frmelmnts?.lbl?.upldfile }} :</span>
<label>{{fileUpload.name}}</label>
</div>
<div class="ui info message">
<div class="header">
{{resourceService?.frmelmnts?.scttl?.instructions}}
</div>
<ol class="ui list">
<li class="self-users-list">{{resourceService?.frmelmnts?.instn?.t0107}} </li>
<li class="self-users-list">{{resourceService?.frmelmnts?.instn?.t0108}} </li>
<li class="self-users-list">{{resourceService?.frmelmnts?.instn?.t0109}} </li>
<li class="self-users-list">{{resourceService?.frmelmnts?.instn?.t0110}} </li>
<li class="self-users-list">{{resourceService?.frmelmnts?.instn?.t0111}} </li>
<li class="self-users-list">{{resourceService?.frmelmnts?.instn?.t0112}} </li>
</ol>
</div>
</div>
<div class="sb-modal-actions">
<button class="sb-btn sb-btn-normal sb-btn-primary" appTelemetryInteract
[telemetryInteractObject]="telemetryInteractObject"
[telemetryInteractEdata]="userValidationUploadInteractEdata" [ngClass]="{'sb-btn-disabled': !fileUpload}"
[disabled]="disableBtn">
{{resourceService?.frmelmnts?.btn?.uploadusrscsv}}
</button>
</div>
</div>
</div>
</div>
</ng-template>
</app-modal-wrapper>
<app-tnc-popup (close)="openAdminPolicyPopup(true)" [showAcceptTnc]="showTncPopup" [adminTncVersion]="adminTncVersion"
[tncUrl]="adminTncUrl" #termsAndCondPopUp *ngIf="showTncPopup">
</app-tnc-popup>
user-org-management.component.scss
// component css goes here
@use "@project-sunbird/sb-styles/assets/mixins/mixins" as *;
@use 'components/metadata' as *;
.sb-manage-section{
.sb-manage-section-title {
font-size: calculateRem(16.002px);
line-height: normal;
font-weight: 600;
}
.sb-multi-rows:nth-child(odd){
background: var(--white);
border-top: calculateRem(1px) solid var(--rc-dddddd);
border-bottom: calculateRem(1px) solid var(--rc-dddddd);
}
.no-data-label{
margin-top: calculateRem(6px);
}
.sb-pageSection-content{
a{
color: var(--primary-color);
}
}
.sb-meta-data-container.sb-meta-data-column .sb-meta-data dt{
color: var(--primary-color);
font-size: calculateRem(16px);
}
.sb-user-list{
margin-bottom: calculateRem(4px) !important;
}
.sb-manage-table-section{
border-top: calculateRem(1px) solid var(--rc-dddddd);
}
}
@media screen and (max-width: 1279px) and (min-width: 992px){
.sb-manage-section {
.sb-meta-data-container.sb-meta-data-column .sb-meta-data {
flex-basis: 20%;
}
}
}
.sb-modal {
.sb-modal-content{
.self-users-list{
line-height: normal;
font-size: calculateRem(14px);
}
.upload-btn{
position: absolute;
opacity: 0;
left: 0;
top: 0;
width: 100%;
margin: 0;
height: 100%;
cursor: pointer;
}
}
}
.sbt-user-management {
.sb-multi-rows {
border-radius: calculateRem(24px);
padding: 0px calculateRem(16px);
margin-top: calculateRem(16px);
background: var(--sbt-compt-bg);
}
.sb-manage-section .sb-multi-rows:nth-child(odd) {
background: var(--sbt-compt-bg);
}
}
// datatable //
::ng-deep {
table.dataTable tbody td,
table.dataTable tbody th {
padding: calculateRem(8px) calculateRem(18px);
}
}