diff --git a/src/app/features/admin-institutions/components/admin-table/admin-table.component.html b/src/app/features/admin-institutions/components/admin-table/admin-table.component.html index 8a14efc91..587a466a8 100644 --- a/src/app/features/admin-institutions/components/admin-table/admin-table.component.html +++ b/src/app/features/admin-institutions/components/admin-table/admin-table.component.html @@ -123,10 +123,12 @@ } } @else { - @if (col.dateFormat) { + @if (col.dateFormat && rowData[col.field]) { {{ getCellValue(rowData[col.field]) | date: col.dateFormat }} - } @else { + } @else if (!col.dateFormat && rowData[col.field]) { {{ getCellValue(rowData[col.field]) }} + } @else { + {{ rowData[col.field] ?? '-' }} } } diff --git a/src/app/features/admin-institutions/constants/user-table-columns.constant.ts b/src/app/features/admin-institutions/constants/user-table-columns.constant.ts index 4e1d8a6df..98de6e3ec 100644 --- a/src/app/features/admin-institutions/constants/user-table-columns.constant.ts +++ b/src/app/features/admin-institutions/constants/user-table-columns.constant.ts @@ -1,4 +1,4 @@ -import { TableColumn } from '@osf/features/admin-institutions/models'; +import { TableColumn } from '../models'; export const userTableColumns: TableColumn[] = [ { @@ -20,4 +20,24 @@ export const userTableColumns: TableColumn[] = [ { field: 'publicRegistrationCount', header: 'adminInstitutions.summary.publicRegistrations', sortable: true }, { field: 'embargoedRegistrationCount', header: 'adminInstitutions.summary.embargoedRegistrations', sortable: true }, { field: 'publishedPreprintCount', header: 'adminInstitutions.institutionUsers.preprints', sortable: true }, + { field: 'publicFileCount', header: 'adminInstitutions.institutionUsers.filesOnOsf', sortable: true }, + { field: 'totalDataStored', header: 'adminInstitutions.institutionUsers.totalDataStored', sortable: true }, + { + field: 'accountCreationDate', + header: 'adminInstitutions.institutionUsers.accountCreated', + sortable: true, + dateFormat: 'dd/MM/yyyy', + }, + { + field: 'monthLasLogin', + header: 'adminInstitutions.institutionUsers.lastLogin', + sortable: true, + dateFormat: 'dd/MM/yyyy', + }, + { + field: 'monthLastActive', + header: 'adminInstitutions.institutionUsers.lastActive', + sortable: true, + dateFormat: 'dd/MM/yyyy', + }, ]; diff --git a/src/app/features/admin-institutions/mappers/institution-user-to-table-data.mapper.ts b/src/app/features/admin-institutions/mappers/institution-user-to-table-data.mapper.ts index 914c4f62a..96e293d8a 100644 --- a/src/app/features/admin-institutions/mappers/institution-user-to-table-data.mapper.ts +++ b/src/app/features/admin-institutions/mappers/institution-user-to-table-data.mapper.ts @@ -24,5 +24,10 @@ export function mapUserToTableCellData(user: InstitutionUser): TableCellData { publicRegistrationCount: user.publicRegistrationCount, embargoedRegistrationCount: user.embargoedRegistrationCount, publishedPreprintCount: user.publishedPreprintCount, + publicFileCount: user.publicFileCount, + totalDataStored: user.storageByteCount ? `${(user.storageByteCount / (1024 * 1024)).toFixed(1)} MB` : '0 B', + monthLasLogin: user.monthLasLogin, + monthLastActive: user.monthLastActive, + accountCreationDate: user.accountCreationDate, }; } diff --git a/src/app/features/admin-institutions/mappers/institution-users.mapper.ts b/src/app/features/admin-institutions/mappers/institution-users.mapper.ts index cd9c49942..7f9785b2e 100644 --- a/src/app/features/admin-institutions/mappers/institution-users.mapper.ts +++ b/src/app/features/admin-institutions/mappers/institution-users.mapper.ts @@ -1,8 +1,4 @@ -import { - InstitutionUser, - InstitutionUserDataJsonApi, - InstitutionUsersJsonApi, -} from '@osf/features/admin-institutions/models'; +import { InstitutionUser, InstitutionUserDataJsonApi, InstitutionUsersJsonApi } from '../models'; export function mapInstitutionUsers(jsonApiData: InstitutionUsersJsonApi): InstitutionUser[] { return jsonApiData.data.map((user: InstitutionUserDataJsonApi) => ({ @@ -16,5 +12,11 @@ export function mapInstitutionUsers(jsonApiData: InstitutionUsersJsonApi): Insti publicRegistrationCount: user.attributes.public_registration_count, embargoedRegistrationCount: user.attributes.embargoed_registration_count, publishedPreprintCount: user.attributes.published_preprint_count, + monthLasLogin: user.attributes.month_last_login, + monthLastActive: user.attributes.month_last_active, + accountCreationDate: user.attributes.account_creation_date, + storageByteCount: user.attributes.storage_byte_count, + reportYearMonth: user.attributes.report_yearmonth, + publicFileCount: user.attributes.public_file_count, })); } diff --git a/src/app/features/admin-institutions/models/institution-user.model.ts b/src/app/features/admin-institutions/models/institution-user.model.ts index d8063d55d..a3862b2cd 100644 --- a/src/app/features/admin-institutions/models/institution-user.model.ts +++ b/src/app/features/admin-institutions/models/institution-user.model.ts @@ -9,4 +9,10 @@ export interface InstitutionUser { publicRegistrationCount: number; embargoedRegistrationCount: number; publishedPreprintCount: number; + monthLasLogin: string; + monthLastActive: string; + accountCreationDate: string; + storageByteCount: number; + publicFileCount: number; + reportYearMonth: string; } diff --git a/src/app/features/admin-institutions/models/institution-users-json-api.model.ts b/src/app/features/admin-institutions/models/institution-users-json-api.model.ts index a8c7d8424..3b90db240 100644 --- a/src/app/features/admin-institutions/models/institution-users-json-api.model.ts +++ b/src/app/features/admin-institutions/models/institution-users-json-api.model.ts @@ -9,6 +9,13 @@ export interface InstitutionUserAttributesJsonApi { public_registration_count: number; embargoed_registration_count: number; published_preprint_count: number; + account_creation_date: string; + contacts: unknown[]; + month_last_active: string; + month_last_login: string; + public_file_count: number; + report_yearmonth: string; + storage_byte_count: number; } export interface InstitutionUserRelationshipDataJsonApi { diff --git a/src/app/features/admin-institutions/pages/institutions-summary/institutions-summary.component.ts b/src/app/features/admin-institutions/pages/institutions-summary/institutions-summary.component.ts index 24a443e7e..150fa0883 100644 --- a/src/app/features/admin-institutions/pages/institutions-summary/institutions-summary.component.ts +++ b/src/app/features/admin-institutions/pages/institutions-summary/institutions-summary.component.ts @@ -158,9 +158,9 @@ export class InstitutionsSummaryComponent implements OnInit { ]; this.osfProjectsLabels = [ - 'resourceCard.labels.publicRegistrations', + 'adminInstitutions.summary.publicRegistrations', 'adminInstitutions.summary.embargoedRegistrations', - 'resourceCard.labels.publicProjects', + 'adminInstitutions.summary.publicProjects', 'adminInstitutions.summary.privateProjects', 'common.search.tabs.preprints', ].map((el) => this.translateService.instant(el)); diff --git a/src/app/features/admin-institutions/pages/institutions-users/institutions-users.component.ts b/src/app/features/admin-institutions/pages/institutions-users/institutions-users.component.ts index 5c0bf0d1a..d6373ad0d 100644 --- a/src/app/features/admin-institutions/pages/institutions-users/institutions-users.component.ts +++ b/src/app/features/admin-institutions/pages/institutions-users/institutions-users.component.ts @@ -68,9 +68,7 @@ export class InstitutionsUsersComponent { currentUser = select(UserSelectors.getCurrentUser); - tableData = computed(() => { - return this.users().map((user: InstitutionUser): TableCellData => mapUserToTableCellData(user)); - }); + tableData = computed(() => this.users().map((user: InstitutionUser): TableCellData => mapUserToTableCellData(user))); amountText = computed(() => { const count = this.totalCount(); diff --git a/src/app/shared/components/bar-chart/bar-chart.component.html b/src/app/shared/components/bar-chart/bar-chart.component.html index c3ebc58a0..66f2adbd6 100644 --- a/src/app/shared/components/bar-chart/bar-chart.component.html +++ b/src/app/shared/components/bar-chart/bar-chart.component.html @@ -20,9 +20,14 @@

{{ title() | translate }}

@for (label of labels(); let i = $index; track i) { -
  • -
    - {{ label }} +
  • +
    +
    + {{ label }} +
    + @if (datasets().length) { + {{ datasets()[0].data[i] }} + }
  • }
    diff --git a/src/app/shared/components/doughnut-chart/doughnut-chart.component.html b/src/app/shared/components/doughnut-chart/doughnut-chart.component.html index e8d3f10e2..eefcdeccb 100644 --- a/src/app/shared/components/doughnut-chart/doughnut-chart.component.html +++ b/src/app/shared/components/doughnut-chart/doughnut-chart.component.html @@ -20,9 +20,14 @@

    {{ title() | translate }}

    @for (label of labels(); let i = $index; track i) { -
  • -
    - {{ label }} +
  • +
    +
    + {{ label }} +
    + @if (datasets().length) { + {{ datasets()[0].data[i] }} + }
  • }
    diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index bd00ee06c..15371e8f3 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -2708,8 +2708,8 @@ "totalStorageInGb": "Total Storage in GB", "embargoedRegistrations": "Embargoed registrations", "privateProjects": "Private projects", - "publicProjects": "Public Projects", - "publicRegistrations": "Public Registrations" + "publicProjects": "Public projects", + "publicRegistrations": "Public registrations" }, "contact": { "requestAccess": "Request Access", @@ -2724,8 +2724,8 @@ "lastActive": "Last Active", "accountCreated": "Account Created", "preprints": "Preprints", - "publicFiles": "Public Files", - "storageBytes": "Storage (Bytes)", + "filesOnOsf": "Files on OSF", + "totalDataStored": "Total data stored on OSF", "contacts": "Contacts", "customize": "Customize", "sendEmail": "Send Email",