[master]: Add open access indicator in all monitors
This commit is contained in:
parent
4c4429b1ea
commit
79585f565b
|
@ -11,8 +11,6 @@ import {CustomFilterService} from "../openaireLibrary/shared/customFilter.servic
|
|||
import {StakeholderBaseComponent} from "../openaireLibrary/monitor-admin/utils/stakeholder-base.component";
|
||||
import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
|
||||
import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields";
|
||||
import {RouterHelper} from "../openaireLibrary/utils/routerHelper.class";
|
||||
import {StringUtils} from "../openaireLibrary/utils/string-utils.class";
|
||||
import {ConfigurationService} from "../openaireLibrary/utils/configuration/configuration.service";
|
||||
import {Session} from "../openaireLibrary/login/utils/helper.class";
|
||||
import {properties as beta} from "../../environments/environment.beta";
|
||||
|
@ -22,49 +20,56 @@ import {UserManagementService} from "../openaireLibrary/services/user-management
|
|||
selector: 'national',
|
||||
template: `
|
||||
<div>
|
||||
<loading *ngIf="loading" class="uk-position-center"></loading>
|
||||
<div *ngIf="!loading && stakeholder">
|
||||
<div class="uk-banner uk-light">
|
||||
<div class="uk-container uk-container-large">
|
||||
<div class="uk-padding-small uk-padding-remove-vertical">
|
||||
<div class="uk-grid uk-grid-large uk-flex-middle uk-margin-medium-bottom" uk-grid>
|
||||
<div class="uk-width-expand">
|
||||
<h1 *ngIf="stakeholder" class="uk-h3 uk-margin-remove uk-text-truncate">{{entities.country}} {{entities.stakeholder}}</h1>
|
||||
<loading *ngIf="loading" class="uk-position-center"></loading>
|
||||
<div *ngIf="!loading && stakeholder">
|
||||
<div class="uk-banner uk-light">
|
||||
<div class="uk-container uk-container-large">
|
||||
<div class="uk-padding-small uk-padding-remove-vertical">
|
||||
<div class="uk-grid uk-grid-large uk-flex-middle uk-margin-medium-bottom" uk-grid>
|
||||
<div class="uk-width-expand">
|
||||
<h1 class="uk-h3 uk-margin-remove uk-text-truncate">{{ entities.country }} {{ entities.stakeholder }}</h1>
|
||||
</div>
|
||||
<div class="uk-width-auto">
|
||||
<oa-indicator [stakeholder]="stakeholder"></oa-indicator>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-banner-footer">
|
||||
<div class="uk-container uk-container-large uk-flex uk-flex-between">
|
||||
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
|
||||
<li [class.uk-active]="!isSearch">
|
||||
<a [routerLink]="'/national'">{{entities.stakeholder}}</a>
|
||||
</li>
|
||||
<li [class.uk-active]="isSearch">
|
||||
<a [routerLink]="'/national/search/find/research-outcomes'" [queryParams]="routerHelper.createQueryParams(['type','peerreviewed'], [quote('publications'), quote('true')])">
|
||||
Browse {{openaireEntities.RESULTS}}</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
|
||||
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||
Manage
|
||||
</a>
|
||||
<a *ngIf="sandboxLink" [href]="sandboxLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||
Sandbox
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-margin-medium-top uk-margin-medium-bottom">
|
||||
<router-outlet></router-outlet>
|
||||
</div>
|
||||
</div>
|
||||
<h3 *ngIf="!loading && !stakeholder" class="uk-position-center">
|
||||
No {{entities.country}} {{entities.stakeholder}} yet.
|
||||
</h3>
|
||||
<div class="uk-banner-footer">
|
||||
<div class="uk-container uk-container-large uk-flex uk-flex-between">
|
||||
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
|
||||
<li [class.uk-active]="!isSearch">
|
||||
<a [routerLink]="'/national'">{{ entities.stakeholder }}</a>
|
||||
</li>
|
||||
<li [class.uk-active]="isSearch">
|
||||
<a [routerLink]="'/national/search/find/research-outcomes'"
|
||||
[queryParams]="routerHelper.createQueryParams(['type','peerreviewed'], [quote('publications'), quote('true')])">
|
||||
Browse {{ openaireEntities.RESULTS }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
|
||||
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank"
|
||||
class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||
Manage
|
||||
</a>
|
||||
<a *ngIf="sandboxLink" [href]="sandboxLink" target="_blank"
|
||||
class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||
Sandbox
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-margin-medium-top uk-margin-medium-bottom">
|
||||
<router-outlet></router-outlet>
|
||||
</div>
|
||||
</div>
|
||||
<h3 *ngIf="!loading && !stakeholder" class="uk-position-center">
|
||||
No {{ entities.country }} {{ entities.stakeholder }} yet.
|
||||
</h3>
|
||||
</div>
|
||||
<role-verification *ngIf="stakeholder" [id]="stakeholder.alias" [name]="stakeholder.name" [dashboard]="'National Open Access Monitor, Ireland'"
|
||||
<role-verification *ngIf="stakeholder" [id]="stakeholder.alias" [name]="stakeholder.name"
|
||||
[dashboard]="'National Open Access Monitor, Ireland'"
|
||||
[type]="stakeholder.type" [service]="'irish'" [relativeTo]="null"></role-verification>
|
||||
`
|
||||
})
|
||||
|
|
|
@ -8,6 +8,7 @@ import {IconsModule} from "../openaireLibrary/utils/icons/icons.module";
|
|||
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
|
||||
import {open_access} from "../openaireLibrary/utils/icons/icons";
|
||||
import {SandboxGuard} from "../shared/sandbox.guard";
|
||||
import {OaIndicatorModule} from "../shared/oa-indicator/oa-indicator.module";
|
||||
|
||||
const routes: Route[] = [
|
||||
{
|
||||
|
@ -19,7 +20,7 @@ const routes: Route[] = [
|
|||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule],
|
||||
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule, OaIndicatorModule],
|
||||
declarations: [NationalComponent],
|
||||
exports: [NationalComponent],
|
||||
})
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 4231b65880df19494dbde5ecbbbc17af63f9ca9b
|
||||
Subproject commit fb34dd415e3b9eaf6149d930c378b60e7975c110
|
|
@ -24,88 +24,112 @@ import {properties as beta} from "../../environments/environment.beta";
|
|||
template: `
|
||||
<loading *ngIf="loading" class="uk-position-center"></loading>
|
||||
<div *ngIf="!loading">
|
||||
<div class="uk-banner uk-light">
|
||||
<div class="uk-container uk-container-large">
|
||||
<div class="uk-padding-small uk-padding-remove-vertical">
|
||||
<div *ngIf="stakeholder" class="uk-grid uk-grid-large uk-flex-middle uk-margin-medium-bottom" uk-grid>
|
||||
<div class="uk-width-expand">
|
||||
<div class="uk-grid uk-grid-small uk-flex-middle" uk-grid>
|
||||
<div class="uk-card uk-card-default uk-padding-small">
|
||||
<img *ngIf="stakeholder.logoUrl; else elseBlock" [src]="stakeholder | logoUrl" [alt]="stakeholder.name + ' logo'" class="uk-height-max-xsmall" style="max-width: 180px;">
|
||||
<ng-template #elseBlock>
|
||||
<img src="assets/common-assets/placeholder.png" alt="OpenAIRE placeholder logo" class="uk-height-max-xsmall" style="max-width: 180px;">
|
||||
</ng-template>
|
||||
</div>
|
||||
<div class="uk-width-expand uk-margin-small-left">
|
||||
<div class="uk-h4 uk-margin-remove uk-text-truncate">{{stakeholder.name}}</div>
|
||||
<ng-container *ngIf="stakeholder.details">
|
||||
<div class="uk-text-xsmall uk-margin-small-bottom">
|
||||
<entity-metadata [entityType]="stakeholder.details.type"
|
||||
[compatibilityString]="stakeholder.details.compatibility"
|
||||
[organizations]="stakeholder.details.organizations">
|
||||
</entity-metadata>
|
||||
</div>
|
||||
<div class="uk-text-small">
|
||||
<!-- Website URL -->
|
||||
<div *ngIf="stakeholder.details?.websiteURL" class="uk-margin-xsmall-bottom">
|
||||
<span>Website URL: </span>
|
||||
<span class="uk-text-italic">
|
||||
<div class="uk-banner uk-light">
|
||||
<div class="uk-container uk-container-large">
|
||||
<div class="uk-padding-small uk-padding-remove-vertical">
|
||||
<div *ngIf="stakeholder" class="uk-grid uk-grid-large uk-flex-middle uk-margin-medium-bottom"
|
||||
uk-grid>
|
||||
<div class="uk-width-expand">
|
||||
<div class="uk-grid uk-grid-small uk-flex-middle" uk-grid>
|
||||
<div class="uk-card uk-card-default uk-padding-small">
|
||||
<img *ngIf="stakeholder.logoUrl; else elseBlock" [src]="stakeholder | logoUrl"
|
||||
[alt]="stakeholder.name + ' logo'" class="uk-height-max-xsmall"
|
||||
style="max-width: 180px;">
|
||||
<ng-template #elseBlock>
|
||||
<img src="assets/common-assets/placeholder.png"
|
||||
alt="OpenAIRE placeholder logo" class="uk-height-max-xsmall"
|
||||
style="max-width: 180px;">
|
||||
</ng-template>
|
||||
</div>
|
||||
<div class="uk-width-expand uk-margin-small-left">
|
||||
<div class="uk-text-small uk-flex uk-flex-middle uk-margin-small-bottom">
|
||||
<icon [name]="'navigate_before'" [flex]="true" [ratio]="0.8"
|
||||
class="uk-margin-xsmall-right"></icon>
|
||||
<a routerLink=".">Back to
|
||||
all {{ entities.datasource }} {{ entities.stakeholders }}</a>
|
||||
</div>
|
||||
<div class="uk-h4 uk-margin-remove uk-text-truncate">{{ stakeholder.name }}</div>
|
||||
<ng-container *ngIf="stakeholder.details">
|
||||
<div class="uk-text-xsmall uk-margin-small-bottom">
|
||||
<entity-metadata [entityType]="stakeholder.details.type"
|
||||
[compatibilityString]="stakeholder.details.compatibility"
|
||||
[organizations]="stakeholder.details.organizations">
|
||||
</entity-metadata>
|
||||
</div>
|
||||
<div class="uk-text-small">
|
||||
<!-- Website URL -->
|
||||
<div *ngIf="stakeholder.details?.websiteURL"
|
||||
class="uk-margin-xsmall-bottom">
|
||||
<span>Website URL: </span>
|
||||
<span class="uk-text-italic">
|
||||
<a href="{{stakeholder.details.websiteURL}}" target="_blank" class="custom-external">
|
||||
{{stakeholder.details.websiteURL}}
|
||||
{{ stakeholder.details.websiteURL }}
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
<!-- OAI-PMH URL-->
|
||||
<div *ngIf="stakeholder.details?.OAIPMHURL" class="uk-margin-xsmall-bottom">
|
||||
<span>OAI-PMH URL: </span>
|
||||
<span class="uk-text-italic">
|
||||
</div>
|
||||
<!-- OAI-PMH URL-->
|
||||
<div *ngIf="stakeholder.details?.OAIPMHURL"
|
||||
class="uk-margin-xsmall-bottom">
|
||||
<span>OAI-PMH URL: </span>
|
||||
<span class="uk-text-italic">
|
||||
<a href="{{stakeholder.details.OAIPMHURL}}" target="_blank" class="custom-external">
|
||||
{{stakeholder.details.OAIPMHURL}}
|
||||
{{ stakeholder.details.OAIPMHURL }}
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</ng-container>
|
||||
</div>
|
||||
<div class="uk-width-auto">
|
||||
<oa-indicator [stakeholder]="stakeholder"></oa-indicator>
|
||||
</div>
|
||||
</div>
|
||||
<h1 *ngIf="!stakeholder" class="uk-h3 uk-margin-small-bottom">{{ entities.datasources }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1 *ngIf="!stakeholder" class="uk-h3 uk-margin-small-bottom">{{entities.datasources}}</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="stakeholder" class="uk-banner-footer">
|
||||
<div class="uk-container uk-container-large uk-flex uk-flex-between">
|
||||
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
|
||||
<li [class.uk-active]="!isSearch">
|
||||
<a [routerLink]="['./', stakeholder.alias]" [relativeTo]="_route" (click)="isSearch = false">
|
||||
{{entities.stakeholder}}
|
||||
</a>
|
||||
</li>
|
||||
<li [class.uk-active]="isSearch">
|
||||
<a [routerLink]="['./', stakeholder.alias, 'search']" [queryParams]="routerHelper.createQueryParams(['type','peerreviewed'], [quote('publications'), quote('true')])" [relativeTo]="_route">
|
||||
Browse {{openaireEntities.RESULTS}}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
|
||||
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||
Manage
|
||||
</a>
|
||||
<a *ngIf="sandboxLink" [href]="sandboxLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||
Sandbox
|
||||
</a>
|
||||
<a *ngIf="isProvideManager && provideLink" [href]="provideLink" target="_blank" class="uk-button uk-flex uk-flex-middle">
|
||||
<img class="uk-margin-xsmall-bottom" width="78" src="assets/common-assets/logo-small-provide.png">
|
||||
</a>
|
||||
<div *ngIf="stakeholder" class="uk-banner-footer">
|
||||
<div class="uk-container uk-container-large uk-flex uk-flex-between">
|
||||
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
|
||||
<li [class.uk-active]="!isSearch">
|
||||
<a [routerLink]="['./', stakeholder.alias]" [relativeTo]="_route"
|
||||
(click)="isSearch = false">
|
||||
{{ entities.stakeholder }}
|
||||
</a>
|
||||
</li>
|
||||
<li [class.uk-active]="isSearch">
|
||||
<a [routerLink]="['./', stakeholder.alias, 'search']"
|
||||
[queryParams]="routerHelper.createQueryParams(['type','peerreviewed'], [quote('publications'), quote('true')])"
|
||||
[relativeTo]="_route">
|
||||
Browse {{ openaireEntities.RESULTS }}
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
|
||||
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank"
|
||||
class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||
Manage
|
||||
</a>
|
||||
<a *ngIf="sandboxLink" [href]="sandboxLink" target="_blank"
|
||||
class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||
Sandbox
|
||||
</a>
|
||||
<a *ngIf="isProvideManager && provideLink" [href]="provideLink" target="_blank"
|
||||
class="uk-button uk-flex uk-flex-middle">
|
||||
<img class="uk-margin-xsmall-bottom" width="78"
|
||||
src="assets/common-assets/logo-small-provide.png">
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="!this.alias || this.stakeholder" class="uk-margin-medium-top uk-margin-medium-bottom">
|
||||
<router-outlet></router-outlet>
|
||||
</div>
|
||||
<role-verification *ngIf="stakeholder" [id]="stakeholder.alias" [name]="stakeholder.name" [type]="stakeholder.type" [dashboard]="'National Open Access Monitor, Ireland'"
|
||||
[service]="'irish'" [relativeTo]="null"></role-verification>
|
||||
<div *ngIf="!this.alias || this.stakeholder" class="uk-margin-medium-top uk-margin-medium-bottom">
|
||||
<router-outlet></router-outlet>
|
||||
</div>
|
||||
<role-verification *ngIf="stakeholder" [id]="stakeholder.alias" [name]="stakeholder.name"
|
||||
[type]="stakeholder.type" [dashboard]="'National Open Access Monitor, Ireland'"
|
||||
[service]="'irish'" [relativeTo]="null"></role-verification>
|
||||
</div>
|
||||
`
|
||||
})
|
||||
|
|
|
@ -11,6 +11,7 @@ import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
|
|||
import {open_access} from "../openaireLibrary/utils/icons/icons";
|
||||
import {LogoUrlPipeModule} from "../openaireLibrary/utils/pipes/logoUrlPipe.module";
|
||||
import {SandboxGuard} from "../shared/sandbox.guard";
|
||||
import {OaIndicatorModule} from "../shared/oa-indicator/oa-indicator.module";
|
||||
|
||||
const routes: Route[] = [
|
||||
{
|
||||
|
@ -23,7 +24,7 @@ const routes: Route[] = [
|
|||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule, EntityMetadataModule, LogoUrlPipeModule],
|
||||
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule, EntityMetadataModule, LogoUrlPipeModule, OaIndicatorModule],
|
||||
declarations: [RepositoryComponent],
|
||||
providers: [SearchDataprovidersService],
|
||||
exports: [RepositoryComponent],
|
||||
|
|
|
@ -46,12 +46,8 @@ import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields
|
|||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="openResults && totalResults" class="uk-width-auto">
|
||||
<div class="uk-progress-semicircle open-access" [attr.percentage]="getPercentage()" [style]="'--percentage:' + getPercentage()"></div>
|
||||
<div class="uk-flex uk-flex-middle uk-margin-small-top">
|
||||
<icon class="open-access" [name]="'open_access'" [flex]="true"></icon>
|
||||
<span class="uk-margin-xsmall-left">Open Access</span>
|
||||
</div>
|
||||
<div *ngIf="stakeholder" class="uk-width-auto">
|
||||
<oa-indicator [stakeholder]="stakeholder"></oa-indicator>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -85,7 +81,6 @@ import {OpenaireEntities} from "../openaireLibrary/utils/properties/searchFields
|
|||
})
|
||||
export class ResearcherComponent extends ResearcherBaseComponent implements OnInit {
|
||||
totalResults: number;
|
||||
openResults: number;
|
||||
loading: boolean = false;
|
||||
stakeholder;
|
||||
isSearch: boolean = false;
|
||||
|
@ -149,9 +144,6 @@ export class ResearcherComponent extends ResearcherBaseComponent implements OnI
|
|||
this.stakeholder = stakeholder;
|
||||
|
||||
}));
|
||||
this.subscriptions.push(this._searchResearchResultsService.numOfResearchOutcomes(this.param + ' and (resultbestaccessright exact "Open Access") and (peerreviewed exact "true")', properties, null).subscribe(res => {
|
||||
this.openResults = +res;
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -178,9 +170,4 @@ export class ResearcherComponent extends ResearcherBaseComponent implements OnI
|
|||
this.layoutService.setRootClass(null);
|
||||
LinksResolver.resetProperties();
|
||||
}
|
||||
|
||||
getPercentage(){
|
||||
let num = (this.openResults/this.totalResults)*100;
|
||||
return num == 100?100:num.toPrecision(2);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import {IconsModule} from '../openaireLibrary/utils/icons/icons.module';
|
|||
import {IconsService} from '../openaireLibrary/utils/icons/icons.service';
|
||||
import {open_access} from '../openaireLibrary/utils/icons/icons';
|
||||
import {SandboxGuard} from "../shared/sandbox.guard";
|
||||
import {OaIndicatorModule} from "../shared/oa-indicator/oa-indicator.module";
|
||||
|
||||
const routes: Route[] = [
|
||||
{
|
||||
|
@ -22,7 +23,7 @@ const routes: Route[] = [
|
|||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [CommonModule, RouterModule.forChild(routes), SearchOrcidServiceModule, SearchResearchResultsServiceModule, LoadingModule, IconsModule],
|
||||
imports: [CommonModule, RouterModule.forChild(routes), SearchOrcidServiceModule, SearchResearchResultsServiceModule, LoadingModule, IconsModule, OaIndicatorModule],
|
||||
declarations: [ResearcherComponent],
|
||||
exports: [ResearcherComponent],
|
||||
})
|
||||
|
|
|
@ -25,26 +25,37 @@ import {properties as beta} from "../../environments/environment.beta";
|
|||
<div class="uk-banner uk-light">
|
||||
<div class="uk-container uk-container-large">
|
||||
<div class="uk-padding-small uk-padding-remove-vertical">
|
||||
<div *ngIf="stakeholder" class="uk-grid uk-grid-large uk-flex-middle uk-margin-medium-bottom" uk-grid>
|
||||
<div class="uk-width-expand">
|
||||
<div class="uk-grid uk-grid-small uk-flex-middle" uk-grid>
|
||||
<div class="uk-card uk-card-default uk-padding-small">
|
||||
<img *ngIf="stakeholder.logoUrl; else elseBlock" [src]="stakeholder | logoUrl" [alt]="stakeholder.name + ' logo'" class="uk-height-max-xsmall" style="max-width: 180px;">
|
||||
<ng-template #elseBlock>
|
||||
<img src="assets/common-assets/placeholder.png" alt="OpenAIRE placeholder logo" class="uk-height-max-xsmall" style="max-width: 180px;">
|
||||
</ng-template>
|
||||
<div *ngIf="stakeholder" class="uk-grid uk-grid-large uk-flex-middle uk-margin-medium-bottom"
|
||||
uk-grid>
|
||||
<div class="uk-width-expand">
|
||||
<div class="uk-grid uk-grid-small uk-flex-middle" uk-grid>
|
||||
<div class="uk-card uk-card-default uk-padding-small">
|
||||
<img *ngIf="stakeholder.logoUrl; else elseBlock" [src]="stakeholder | logoUrl"
|
||||
[alt]="stakeholder.name + ' logo'" class="uk-height-max-xsmall"
|
||||
style="max-width: 180px;">
|
||||
<ng-template #elseBlock>
|
||||
<img src="assets/common-assets/placeholder.png"
|
||||
alt="OpenAIRE placeholder logo" class="uk-height-max-xsmall"
|
||||
style="max-width: 180px;">
|
||||
</ng-template>
|
||||
</div>
|
||||
<div class="uk-width-expand uk-margin-small-left">
|
||||
<div class="uk-text-small uk-flex uk-flex-middle uk-margin-small-bottom">
|
||||
<icon [name]="'navigate_before'" [flex]="true" [ratio]="0.8"
|
||||
class="uk-margin-xsmall-right"></icon>
|
||||
<a routerLink=".">Back to
|
||||
all {{ entities.funder }} {{ entities.stakeholders }}</a>
|
||||
</div>
|
||||
<h1 class="uk-h4 uk-margin-remove uk-text-truncate">{{ stakeholder.name }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-width-expand uk-margin-small-left">
|
||||
<div class="uk-text-small uk-flex uk-flex-middle uk-margin-small-bottom">
|
||||
<icon [name]="'navigate_before'" [flex]="true" [ratio]="0.8" class="uk-margin-xsmall-right"></icon>
|
||||
<a routerLink=".">Back to all {{entities.funder}} {{entities.stakeholders}}</a>
|
||||
</div>
|
||||
<h1 class="uk-h4 uk-margin-remove uk-text-truncate">{{stakeholder.name}}</h1>
|
||||
<div class="uk-width-auto">
|
||||
<oa-indicator [stakeholder]="stakeholder"></oa-indicator>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1 *ngIf="!stakeholder" class="uk-h3 uk-margin-small-bottom">Research Funding Organisations ({{entities.funders}})</h1>
|
||||
<h1 *ngIf="!stakeholder" class="uk-h3 uk-margin-small-bottom">Research Funding Organisations
|
||||
({{ entities.funders }})</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="stakeholder" class="uk-banner-footer">
|
||||
|
@ -52,18 +63,21 @@ import {properties as beta} from "../../environments/environment.beta";
|
|||
<ul class="uk-banner-tab uk-padding-small uk-padding-remove-vertical">
|
||||
<li [class.uk-active]="!isSearch">
|
||||
<a [routerLink]="['./', stakeholder.alias]" [relativeTo]="_route"
|
||||
(click)="isSearch = false">{{entities.stakeholder}}</a>
|
||||
(click)="isSearch = false">{{ entities.stakeholder }}</a>
|
||||
</li>
|
||||
<li [class.uk-active]="isSearch">
|
||||
<a [routerLink]="['./', stakeholder.alias, 'search']" [queryParams]="routerHelper.createQueryParams(['type','peerreviewed'], [quote('publications'), quote('true')])"
|
||||
[relativeTo]="_route">Browse {{openaireEntities.RESULTS}}</a>
|
||||
<a [routerLink]="['./', stakeholder.alias, 'search']"
|
||||
[queryParams]="routerHelper.createQueryParams(['type','peerreviewed'], [quote('publications'), quote('true')])"
|
||||
[relativeTo]="_route">Browse {{ openaireEntities.RESULTS }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div *ngIf="!isMobile" class="uk-margin-large-right uk-flex uk-flex-middle">
|
||||
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||
<a *ngIf="isManager" [routerLink]="adminLink" target="_blank"
|
||||
class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||
Manage
|
||||
</a>
|
||||
<a *ngIf="sandboxLink" [href]="sandboxLink" target="_blank" class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||
<a *ngIf="sandboxLink" [href]="sandboxLink" target="_blank"
|
||||
class="uk-button uk-flex uk-flex-middle uk-margin-small-right">
|
||||
Sandbox
|
||||
</a>
|
||||
</div>
|
||||
|
@ -74,7 +88,8 @@ import {properties as beta} from "../../environments/environment.beta";
|
|||
<router-outlet></router-outlet>
|
||||
</div>
|
||||
</div>
|
||||
<role-verification *ngIf="stakeholder" [id]="stakeholder.alias" [name]="stakeholder.name" [type]="stakeholder.type" [service]="'irish'"
|
||||
<role-verification *ngIf="stakeholder" [id]="stakeholder.alias" [name]="stakeholder.name"
|
||||
[type]="stakeholder.type" [service]="'irish'"
|
||||
[relativeTo]="null" [dashboard]="'National Open Access Monitor, Ireland'"></role-verification>
|
||||
`
|
||||
})
|
||||
|
|
|
@ -9,6 +9,7 @@ import {LogoUrlPipeModule} from "../openaireLibrary/utils/pipes/logoUrlPipe.modu
|
|||
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
|
||||
import {open_access} from "../openaireLibrary/utils/icons/icons";
|
||||
import {SandboxGuard} from "../shared/sandbox.guard";
|
||||
import {OaIndicatorModule} from "../shared/oa-indicator/oa-indicator.module";
|
||||
|
||||
const routes: Route[] = [
|
||||
{
|
||||
|
@ -21,7 +22,7 @@ const routes: Route[] = [
|
|||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule, LogoUrlPipeModule],
|
||||
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule, LogoUrlPipeModule, OaIndicatorModule],
|
||||
declarations: [RfoComponent],
|
||||
exports: [RfoComponent],
|
||||
})
|
||||
|
|
|
@ -43,6 +43,9 @@ import {UserManagementService} from "../openaireLibrary/services/user-management
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="uk-width-auto">
|
||||
<oa-indicator [stakeholder]="stakeholder"></oa-indicator>
|
||||
</div>
|
||||
</div>
|
||||
<h1 *ngIf="!stakeholder" class="uk-h3 uk-margin-small-bottom">Research Performing Organisations ({{entities.organizations}})</h1>
|
||||
</div>
|
||||
|
|
|
@ -9,6 +9,7 @@ import {LogoUrlPipeModule} from "../openaireLibrary/utils/pipes/logoUrlPipe.modu
|
|||
import {IconsService} from "../openaireLibrary/utils/icons/icons.service";
|
||||
import {open_access} from "../openaireLibrary/utils/icons/icons";
|
||||
import {SandboxGuard} from "../shared/sandbox.guard";
|
||||
import {OaIndicatorModule} from "../shared/oa-indicator/oa-indicator.module";
|
||||
|
||||
const routes: Route[] = [
|
||||
{
|
||||
|
@ -21,7 +22,7 @@ const routes: Route[] = [
|
|||
];
|
||||
|
||||
@NgModule({
|
||||
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule, LogoUrlPipeModule],
|
||||
imports: [CommonModule, RouterModule.forChild(routes), LoadingModule, RoleVerificationModule, IconsModule, LogoUrlPipeModule, OaIndicatorModule],
|
||||
declarations: [RpoComponent],
|
||||
exports: [RpoComponent],
|
||||
})
|
||||
|
|
|
@ -2,7 +2,7 @@ import {Portal} from "../openaireLibrary/utils/entities/adminTool/portal";
|
|||
import {StakeholderConfiguration} from "../openaireLibrary/monitor-admin/utils/indicator-utils";
|
||||
import {LayoutService} from "../openaireLibrary/dashboard/sharedComponents/sidebar/layout.service";
|
||||
import {Role} from "../openaireLibrary/login/utils/helper.class";
|
||||
import {Stakeholder} from "../openaireLibrary/monitor/entities/stakeholder";
|
||||
import {IndicatorPath, Stakeholder} from "../openaireLibrary/monitor/entities/stakeholder";
|
||||
import {LinksResolver} from "../search/links-resolver";
|
||||
|
||||
export class Irish {
|
||||
|
@ -10,7 +10,7 @@ export class Irish {
|
|||
public static irishAdminToolsCommunity = "irish";
|
||||
public static METADATA_PREFIX = '';
|
||||
|
||||
public portal: Portal = Portal.getMockCommunityInfo("noami", "Noami",['service'],['/search/advanced/services', '/search/find/services']);
|
||||
public portal: Portal = Portal.getMockCommunityInfo("noami", "Noami", ['service'], ['/search/advanced/services', '/search/find/services']);
|
||||
|
||||
constructor() {
|
||||
LinksResolver.resetProperties();
|
||||
|
@ -19,9 +19,9 @@ export class Irish {
|
|||
StakeholderConfiguration.ROLES.member = 'manager';
|
||||
|
||||
StakeholderConfiguration.ENTITIES.stakeholder = 'Monitor';
|
||||
StakeholderConfiguration.ENTITIES.stakeholders = 'Monitors';
|
||||
StakeholderConfiguration.ENTITIES.funder = 'RFO';
|
||||
StakeholderConfiguration.ENTITIES.funders = 'RFOs';
|
||||
StakeholderConfiguration.ENTITIES.stakeholders = 'Monitors';
|
||||
StakeholderConfiguration.ENTITIES.funder = 'RFO';
|
||||
StakeholderConfiguration.ENTITIES.funders = 'RFOs';
|
||||
StakeholderConfiguration.ENTITIES.organization = 'RPO';
|
||||
StakeholderConfiguration.ENTITIES.organizations = 'RPOs';
|
||||
StakeholderConfiguration.ENTITIES.datasource = 'Repository';
|
||||
|
@ -36,13 +36,12 @@ export class Irish {
|
|||
{value: 'country', label: StakeholderConfiguration.ENTITIES.country},
|
||||
{value: 'datasource', label: StakeholderConfiguration.ENTITIES.datasource},
|
||||
{value: 'researcher', label: StakeholderConfiguration.ENTITIES.researcher}
|
||||
|
||||
];
|
||||
|
||||
StakeholderConfiguration.FUNDER_TYPES = [
|
||||
{value: null, label: 'None'},
|
||||
{value: 'private', label: 'Private'},
|
||||
{value: 'government', label: 'Government'}
|
||||
{value: null, label: 'None'},
|
||||
{value: 'private', label: 'Private'},
|
||||
{value: 'government', label: 'Government'}
|
||||
];
|
||||
|
||||
StakeholderConfiguration.VISIBILITIES = [
|
||||
|
@ -54,10 +53,40 @@ export class Irish {
|
|||
LayoutService.HEADER_HEIGHT = '60px';
|
||||
|
||||
Role.GROUP = 'irish.';
|
||||
|
||||
/** OA Indicator */
|
||||
Irish.initializeOAIndicators();
|
||||
}
|
||||
|
||||
public static initializeOAIndicators(): void {
|
||||
StakeholderConfiguration.openAccess.set('country', {
|
||||
numerator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.indi_result_oa_with_license.oa_with_license\",\"type\":\"=\",\"values\":[\"1\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"ie_monitor\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0},
|
||||
denominator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"ie_monitor\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0}
|
||||
});
|
||||
StakeholderConfiguration.openAccess.set('organization', {
|
||||
numerator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.organization.id\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]},{\"field\":\"publication.indi_result_oa_with_license.oa_with_license\",\"type\":\"=\",\"values\":[\"1\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0},
|
||||
denominator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.organization.id\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0}
|
||||
});
|
||||
StakeholderConfiguration.openAccess.set('funder', {
|
||||
numerator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.project.funder.id\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.indi_result_oa_with_license.oa_with_license\",\"type\":\"=\",\"values\":[\"1\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0},
|
||||
denominator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.project.funder.id\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0}
|
||||
});
|
||||
StakeholderConfiguration.openAccess.set('researcher', {
|
||||
numerator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.result_orcid.orcid\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]},{\"field\":\"publication.indi_result_oa_with_license.oa_with_license\",\"type\":\"=\",\"values\":[\"1\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {"statsProfile": "openaire_stats"}, "filters": {}, "filtersApplied": 0},
|
||||
denominator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.result_orcid.orcid\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {"statsProfile": "openaire_stats"}, "filters": {}, "filtersApplied": 0}
|
||||
});
|
||||
StakeholderConfiguration.openAccess.set('datasource', {
|
||||
numerator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.datasource.id\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]},{\"field\":\"publication.indi_result_oa_with_license.oa_with_license\",\"type\":\"=\",\"values\":[\"1\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0},
|
||||
denominator: {"type": null, "format": "NUMBER", "source": "stats-tool", "url": "raw?json=", "jsonPath": ["data", "0", "0", "0"], "chartObject": "{\"verbose\":false,\"series\":[{\"query\":{\"parameters\":[],\"select\":[{\"field\":\"publication\",\"aggregate\":\"count\"}],\"filters\":[{\"groupFilters\":[{\"field\":\"publication.datasource.id\",\"type\":\"=\",\"values\":[\"((__index_id__))\"]},{\"field\":\"publication.result_refereed.refereed\",\"type\":\"=\",\"values\":[\"peerReviewed\"]}],\"op\":\"AND\"}],\"entity\":\"publication\",\"profile\":\"((__profile__))\",\"limit\":\"30\"}}]}", "parameters": {}, "filters": {}, "filtersApplied": 0}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class StakeholderPublication extends Stakeholder {
|
||||
publications: number;
|
||||
}
|
||||
|
||||
export interface OAIndicator {
|
||||
numerator: IndicatorPath;
|
||||
denominator: IndicatorPath;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
import {Component, Input, OnInit} from "@angular/core";
|
||||
import {Stakeholder} from "../../openaireLibrary/monitor/entities/stakeholder";
|
||||
import {StatisticsService} from "../../openaireLibrary/monitor-admin/utils/services/statistics.service";
|
||||
import {IndicatorStakeholderBaseComponent} from "../../openaireLibrary/monitor-admin/utils/stakeholder-base.component";
|
||||
import {OAIndicator} from "../irish";
|
||||
import {zip} from "rxjs";
|
||||
|
||||
@Component({
|
||||
selector: "oa-indicator",
|
||||
template: `
|
||||
<ng-container *ngIf="percentage > 0">
|
||||
<div class="uk-progress-semicircle open-access" [attr.percentage]="percentage"
|
||||
[style]="'--percentage:' + percentage"></div>
|
||||
<div class="uk-flex uk-flex-middle uk-margin-small-top">
|
||||
<icon class="open-access" [name]="'open_access'" [flex]="true"></icon>
|
||||
<span class="uk-margin-xsmall-left">Open Access</span>
|
||||
</div>
|
||||
</ng-container>
|
||||
`
|
||||
})
|
||||
export class OaIndicatorComponent extends IndicatorStakeholderBaseComponent implements OnInit {
|
||||
@Input()
|
||||
public stakeholder: Stakeholder;
|
||||
public percentage: number = 0;
|
||||
|
||||
constructor(private statisticsService: StatisticsService) {
|
||||
super();
|
||||
}
|
||||
|
||||
ngOnInit(): void {
|
||||
this.initPercentage();
|
||||
}
|
||||
|
||||
public initPercentage(): void {
|
||||
let OAIndicator: OAIndicator = this.stakeholderUtils.openAccess.get(this.stakeholder.type);
|
||||
if(OAIndicator) {
|
||||
this.subscriptions.push(zip(
|
||||
this.statisticsService.getNumbers(this.indicatorUtils.getSourceType(OAIndicator.numerator.source), this.indicatorUtils.getFullUrl(this.stakeholder, OAIndicator.numerator)),
|
||||
this.statisticsService.getNumbers(this.indicatorUtils.getSourceType(OAIndicator.denominator.source), this.indicatorUtils.getFullUrl(this.stakeholder, OAIndicator.denominator))).subscribe(res => {
|
||||
let numerator = this.calculate(res[0], OAIndicator.numerator.jsonPath);
|
||||
let denominator = this.calculate(res[1], OAIndicator.denominator.jsonPath);
|
||||
if (denominator > 0) {
|
||||
this.percentage = Math.round(numerator * 100 / denominator);
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
public calculate(response: any, jsonPath: string[]) {
|
||||
let result = JSON.parse(JSON.stringify(response));
|
||||
jsonPath.forEach(path => {
|
||||
if (result) {
|
||||
result = result[path];
|
||||
}
|
||||
});
|
||||
if (typeof result === 'string' || typeof result === 'number') {
|
||||
result = Number(result);
|
||||
if (result === Number.NaN) {
|
||||
result = 0;
|
||||
}
|
||||
} else {
|
||||
result = 0;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
import {NgModule} from "@angular/core";
|
||||
import {CommonModule} from "@angular/common";
|
||||
import {OaIndicatorComponent} from "./oa-indicator.component";
|
||||
import {IconsModule} from "../../openaireLibrary/utils/icons/icons.module";
|
||||
|
||||
@NgModule({
|
||||
declarations: [OaIndicatorComponent],
|
||||
imports: [CommonModule, IconsModule],
|
||||
exports: [OaIndicatorComponent]
|
||||
})
|
||||
export class OaIndicatorModule {}
|
Loading…
Reference in New Issue