diff --git a/public/app/features/users/UsersActionBar.test.tsx b/public/app/features/users/UsersActionBar.test.tsx index 914328ebecc..cd19f633825 100644 --- a/public/app/features/users/UsersActionBar.test.tsx +++ b/public/app/features/users/UsersActionBar.test.tsx @@ -6,7 +6,7 @@ const setup = (propOverrides?: object) => { const props: Props = { searchQuery: '', setUsersSearchQuery: jest.fn(), - showInvites: false, + showInvites: jest.fn(), pendingInvitesCount: 0, canInvite: false, externalUserMngLinkUrl: '', diff --git a/public/app/features/users/UsersActionBar.tsx b/public/app/features/users/UsersActionBar.tsx index 5a85384614f..50003c3b519 100644 --- a/public/app/features/users/UsersActionBar.tsx +++ b/public/app/features/users/UsersActionBar.tsx @@ -3,7 +3,7 @@ import { connect } from 'react-redux'; import { setUsersSearchQuery } from './state/actions'; import { getInviteesCount, getUsersSearchQuery } from './state/selectors'; -interface Props { +export interface Props { searchQuery: string; setUsersSearchQuery: typeof setUsersSearchQuery; showInvites: () => void; diff --git a/public/app/features/users/UsersListPage.test.tsx b/public/app/features/users/UsersListPage.test.tsx index d5dd1295b60..6f59df36b55 100644 --- a/public/app/features/users/UsersListPage.test.tsx +++ b/public/app/features/users/UsersListPage.test.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { shallow } from 'enzyme'; import { UsersListPage, Props } from './UsersListPage'; -import { Invitee, NavModel, User } from 'app/types'; +import { Invitee, NavModel, OrgUser } from 'app/types'; import { getMockUser } from './__mocks__/userMocks'; import appEvents from '../../core/app_events'; @@ -12,7 +12,7 @@ jest.mock('../../core/app_events', () => ({ const setup = (propOverrides?: object) => { const props: Props = { navModel: {} as NavModel, - users: [] as User[], + users: [] as OrgUser[], invitees: [] as Invitee[], searchQuery: '', externalUserMngInfo: '', diff --git a/public/app/features/users/UsersListPage.tsx b/public/app/features/users/UsersListPage.tsx index c4f40d2daa4..733ea3ffd43 100644 --- a/public/app/features/users/UsersListPage.tsx +++ b/public/app/features/users/UsersListPage.tsx @@ -5,7 +5,7 @@ import PageHeader from 'app/core/components/PageHeader/PageHeader'; import UsersActionBar from './UsersActionBar'; import UsersTable from 'app/features/users/UsersTable'; import InviteesTable from './InviteesTable'; -import { Invitee, NavModel, User } from 'app/types'; +import { Invitee, NavModel, OrgUser } from 'app/types'; import appEvents from 'app/core/app_events'; import { loadUsers, loadInvitees, revokeInvite, setUsersSearchQuery, updateUser, removeUser } from './state/actions'; import { getNavModel } from '../../core/selectors/navModel'; @@ -14,7 +14,7 @@ import { getInvitees, getUsers, getUsersSearchQuery } from './state/selectors'; export interface Props { navModel: NavModel; invitees: Invitee[]; - users: User[]; + users: OrgUser[]; searchQuery: string; externalUserMngInfo: string; loadUsers: typeof loadUsers; diff --git a/public/app/features/users/UsersTable.test.tsx b/public/app/features/users/UsersTable.test.tsx index 8cbfb0b4e6f..6e88dbf4a58 100644 --- a/public/app/features/users/UsersTable.test.tsx +++ b/public/app/features/users/UsersTable.test.tsx @@ -1,12 +1,12 @@ import React from 'react'; import { shallow } from 'enzyme'; import UsersTable, { Props } from './UsersTable'; -import { User } from 'app/types'; +import { OrgUser } from 'app/types'; import { getMockUsers } from './__mocks__/userMocks'; const setup = (propOverrides?: object) => { const props: Props = { - users: [] as User[], + users: [] as OrgUser[], onRoleChange: jest.fn(), onRemoveUser: jest.fn(), }; diff --git a/public/app/features/users/UsersTable.tsx b/public/app/features/users/UsersTable.tsx index 39290391a00..a7bb44d1a62 100644 --- a/public/app/features/users/UsersTable.tsx +++ b/public/app/features/users/UsersTable.tsx @@ -1,10 +1,10 @@ import React, { SFC } from 'react'; -import { User } from 'app/types'; +import { OrgUser } from 'app/types'; export interface Props { - users: User[]; - onRoleChange: (role: string, user: User) => void; - onRemoveUser: (user: User) => void; + users: OrgUser[]; + onRoleChange: (role: string, user: OrgUser) => void; + onRemoveUser: (user: OrgUser) => void; } const UsersTable: SFC = props => { diff --git a/public/app/features/users/state/actions.ts b/public/app/features/users/state/actions.ts index 03b3b05e7e2..65baf5589d6 100644 --- a/public/app/features/users/state/actions.ts +++ b/public/app/features/users/state/actions.ts @@ -1,7 +1,7 @@ import { ThunkAction } from 'redux-thunk'; import { StoreState } from '../../../types'; import { getBackendSrv } from '../../../core/services/backend_srv'; -import { Invitee, User } from 'app/types'; +import { Invitee, OrgUser } from 'app/types'; export enum ActionTypes { LoadUsers = 'LOAD_USERS', @@ -11,7 +11,7 @@ export enum ActionTypes { export interface LoadUsersAction { type: ActionTypes.LoadUsers; - payload: User[]; + payload: OrgUser[]; } export interface LoadInviteesAction { @@ -24,7 +24,7 @@ export interface SetUsersSearchQueryAction { payload: string; } -const usersLoaded = (users: User[]): LoadUsersAction => ({ +const usersLoaded = (users: OrgUser[]): LoadUsersAction => ({ type: ActionTypes.LoadUsers, payload: users, }); @@ -57,7 +57,7 @@ export function loadInvitees(): ThunkResult { }; } -export function updateUser(user: User): ThunkResult { +export function updateUser(user: OrgUser): ThunkResult { return async dispatch => { await getBackendSrv().patch(`/api/org/users/${user.userId}`, user); dispatch(loadUsers()); diff --git a/public/app/features/users/state/reducers.ts b/public/app/features/users/state/reducers.ts index e72d1b76439..9bbfdd5595f 100644 --- a/public/app/features/users/state/reducers.ts +++ b/public/app/features/users/state/reducers.ts @@ -1,10 +1,10 @@ -import { Invitee, User, UsersState } from 'app/types'; +import { Invitee, OrgUser, UsersState } from 'app/types'; import { Action, ActionTypes } from './actions'; import config from '../../../core/config'; export const initialState: UsersState = { invitees: [] as Invitee[], - users: [] as User[], + users: [] as OrgUser[], searchQuery: '', canInvite: !config.disableLoginForm && !config.externalUserMngLinkName, externalUserMngInfo: config.externalUserMngInfo, diff --git a/public/app/types/index.ts b/public/app/types/index.ts index 4930a3370a9..26f15d582ac 100644 --- a/public/app/types/index.ts +++ b/public/app/types/index.ts @@ -6,10 +6,9 @@ import { FolderDTO, FolderState, FolderInfo } from './folders'; import { DashboardState } from './dashboard'; import { DashboardAcl, OrgRole, PermissionLevel } from './acl'; import { ApiKey, ApiKeysState, NewApiKey } from './apiKeys'; -import { User } from './user'; +import { Invitee, OrgUser, User, UsersState } from './user'; import { DataSource, DataSourcesState } from './datasources'; import { PluginMeta, Plugin, PluginsState } from './plugins'; -import { Invitee, User, UsersState } from './users'; export { Team, @@ -39,11 +38,11 @@ export { ApiKey, ApiKeysState, NewApiKey, - User, Plugin, PluginsState, DataSourcesState, Invitee, + OrgUser, User, UsersState, }; diff --git a/public/app/types/user.ts b/public/app/types/user.ts index 9c13e6b027b..46ecdb36035 100644 --- a/public/app/types/user.ts +++ b/public/app/types/user.ts @@ -1,6 +1,44 @@ -export interface User { +export interface OrgUser { + avatarUrl: string; + email: string; + lastSeenAt: string; + lastSeenAtAge: string; + login: string; + orgId: number; + role: string; + userId: number; +} + +export interface User { id: number; label: string; avatarUrl: string; login: string; } + +export interface Invitee { + code: string; + createdOn: string; + email: string; + emailSent: boolean; + emailSentOn: string; + id: number; + invitedByEmail: string; + invitedByLogin: string; + invitedByName: string; + name: string; + orgId: number; + role: string; + status: string; + url: string; +} + +export interface UsersState { + users: OrgUser[]; + invitees: Invitee[]; + searchQuery: string; + canInvite: boolean; + externalUserMngLinkUrl: string; + externalUserMngLinkName: string; + externalUserMngInfo: string; +}