Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/prod-beta' into prod-stable
Browse files Browse the repository at this point in the history
  • Loading branch information
dlabrecq committed Jan 20, 2022
2 parents 8c762ad + a6d332f commit 7b0b325
Show file tree
Hide file tree
Showing 73 changed files with 879 additions and 1,829 deletions.
53 changes: 0 additions & 53 deletions koku-ui-manifest

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,6 @@
"jest": "27.2.4",
"jws": "^4.0.0",
"mini-css-extract-plugin": "^1.3.7",
"nodesi": "^1.16.0",
"null-loader": "4.0.1",
"prettier": "2.3.2",
"rimraf": "^3.0.2",
Expand Down
2 changes: 1 addition & 1 deletion scripts/start-dev-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ async function setEnv() {
type: 'list',
name: 'clouddotEnv',
message: 'Which platform environment you want to use?',
choices: ['stage', 'prod', 'ci'],
choices: ['stage', 'prod'],
},
{
type: 'list',
Expand Down
25 changes: 25 additions & 0 deletions src/api/accountSettings.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import axios from 'axios';

import { PagedLinks, PagedMetaData } from './api';

export interface AccountSettingsData {
cost_type?: string;
currency?: string;
}

export interface AccountSettings {
meta: PagedMetaData;
links?: PagedLinks;
data: AccountSettingsData;
}

export function fetchAccountSettings() {
const insights = (window as any).insights;
if (insights && insights.chrome && insights.chrome.auth && insights.chrome.auth.getUser) {
return insights.chrome.auth.getUser().then(() => {
return axios.get<AccountSettings>(`account-settings/`);
});
} else {
return axios.get<AccountSettings>(`account-settings/`);
}
}
27 changes: 0 additions & 27 deletions src/api/costType.ts

This file was deleted.

23 changes: 0 additions & 23 deletions src/api/currency.ts

This file was deleted.

2 changes: 2 additions & 0 deletions src/api/providers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ export interface Provider {
infrastructure?: ProviderInfrastructure;
name?: string;
previous_month_data?: boolean;
source_type?: string;
type?: string;
uuid?: string;
}
Expand All @@ -56,6 +57,7 @@ export interface Providers extends PagedResponse<Provider, PagedMetaData> {}

// eslint-disable-next-line no-shadow
export const enum ProviderType {
all = 'all',
aws = 'aws',
azure = 'azure',
gcp = 'gcp',
Expand Down
2 changes: 1 addition & 1 deletion src/api/userAccess.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export interface UserAccess {

// eslint-disable-next-line no-shadow
export const enum UserAccessType {
all = '',
all = 'all',
aws = 'aws',
azure = 'azure',
cost_model = 'cost_model',
Expand Down
113 changes: 113 additions & 0 deletions src/components/accountSettings/accountSettings.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
import { AccountSettings } from 'api/accountSettings';
import { getUserAccessQuery } from 'api/queries/userAccessQuery';
import { UserAccess, UserAccessType } from 'api/userAccess';
import { AxiosError } from 'axios';
import React from 'react';
import { injectIntl, WrappedComponentProps } from 'react-intl';
import { connect } from 'react-redux';
import { accountSettingsActions, accountSettingsSelectors } from 'store/accountSettings';
import { createMapStateToProps, FetchStatus } from 'store/common';
import { userAccessQuery, userAccessSelectors } from 'store/userAccess';
import { CostTypes } from 'utils/localStorage';

interface AccountSettingsOwnProps {
children?: React.ReactNode;
}

interface AccountSettingsDispatchProps {
fetchAccountSettings?: typeof accountSettingsActions.fetchAccountSettings;
}

interface AccountSettingsStateProps {
accountSettings: AccountSettings;
accountSettingsError: AxiosError;
accountSettingsFetchStatus?: FetchStatus;
userAccess: UserAccess;
userAccessError: AxiosError;
userAccessFetchStatus: FetchStatus;
userAccessQueryString: string;
}

interface AccountSettingsState {
costType?: CostTypes;
currency?: string;
}

type AccountSettingsProps = AccountSettingsOwnProps &
AccountSettingsDispatchProps &
AccountSettingsStateProps &
WrappedComponentProps;

class AccountSettingsBase extends React.Component<AccountSettingsProps> {
protected defaultState: AccountSettingsState = {
// TBD...
};
public state: AccountSettingsState = { ...this.defaultState };

public componentDidMount() {
this.updateAccountSettings();
}

public componentDidUpdate(prevProps: AccountSettingsProps) {
const { accountSettings } = this.props;

if (prevProps.accountSettings !== accountSettings) {
const costType = accountSettings ? accountSettings.data.cost_type : CostTypes.unblended;
const currency = accountSettings ? accountSettings.data.currency : 'USD';

// Force update to render children
this.setState({
costType,
currency,
});
}
}

private updateAccountSettings = () => {
const { accountSettingsFetchStatus, fetchAccountSettings } = this.props;

if (accountSettingsFetchStatus !== FetchStatus.inProgress) {
fetchAccountSettings();
}
};

public render() {
const { accountSettingsFetchStatus, children } = this.props;

return accountSettingsFetchStatus === FetchStatus.complete ? children : null;
}
}

const mapStateToProps = createMapStateToProps<AccountSettingsOwnProps, AccountSettingsStateProps>(state => {
const accountSettings = accountSettingsSelectors.selectAccountSettings(state);
const accountSettingsError = accountSettingsSelectors.selectAccountSettingsError(state);
const accountSettingsFetchStatus = accountSettingsSelectors.selectAccountSettingsFetchStatus(state);

const userAccessQueryString = getUserAccessQuery(userAccessQuery);
const userAccess = userAccessSelectors.selectUserAccess(state, UserAccessType.all, userAccessQueryString);
const userAccessError = userAccessSelectors.selectUserAccessError(state, UserAccessType.all, userAccessQueryString);
const userAccessFetchStatus = userAccessSelectors.selectUserAccessFetchStatus(
state,
UserAccessType.all,
userAccessQueryString
);

return {
accountSettings,
accountSettingsError,
accountSettingsFetchStatus,
userAccess,
userAccessError,
userAccessFetchStatus,
userAccessQueryString,
};
});

const mapDispatchToProps: AccountSettingsDispatchProps = {
fetchAccountSettings: accountSettingsActions.fetchAccountSettings,
};

const CostTypeConnect = connect(mapStateToProps, mapDispatchToProps)(AccountSettingsBase);
const AccountSettings = injectIntl(CostTypeConnect);

export { AccountSettings };
1 change: 1 addition & 0 deletions src/components/accountSettings/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './accountSettings';
33 changes: 5 additions & 28 deletions src/components/async/permissionsComponent/permissions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { connect } from 'react-redux';
import { RouteComponentProps, withRouter } from 'react-router-dom';
import { paths, routes } from 'routes';
import { createMapStateToProps, FetchStatus } from 'store/common';
import { allUserAccessQuery, ibmUserAccessQuery, userAccessActions, userAccessSelectors } from 'store/userAccess';
import { userAccessActions, userAccessQuery, userAccessSelectors } from 'store/userAccess';
import {
hasAwsAccess,
hasAzureAccess,
Expand All @@ -24,10 +24,6 @@ interface PermissionsOwnProps extends RouteComponentProps<void> {
}

interface PermissionsStateProps {
ibmUserAccess: UserAccess;
ibmUserAccessError: AxiosError;
ibmUserAccessFetchStatus: FetchStatus;
ibmUserAccessQueryString: string;
userAccess: UserAccess;
userAccessError: AxiosError;
userAccessFetchStatus: FetchStatus;
Expand All @@ -51,10 +47,9 @@ class PermissionsBase extends React.Component<PermissionsProps> {
public state: PermissionsState = { ...this.defaultState };

public componentDidMount() {
const { ibmUserAccessQueryString, userAccessQueryString, fetchUserAccess } = this.props;
const { userAccessQueryString, fetchUserAccess } = this.props;

fetchUserAccess(UserAccessType.all, userAccessQueryString);
fetchUserAccess(UserAccessType.ibm, ibmUserAccessQueryString);
}

private getPath() {
Expand All @@ -69,7 +64,7 @@ class PermissionsBase extends React.Component<PermissionsProps> {
}

private hasPermissions() {
const { ibmUserAccess, userAccess } = this.props;
const { userAccess } = this.props;

if (!userAccess) {
return false;
Expand All @@ -79,7 +74,7 @@ class PermissionsBase extends React.Component<PermissionsProps> {
const azure = hasAzureAccess(userAccess);
const costModel = hasCostModelAccess(userAccess);
const gcp = hasGcpAccess(userAccess);
const ibm = hasIbmAccess(ibmUserAccess);
const ibm = hasIbmAccess(userAccess);
const ocp = hasOcpAccess(userAccess);
const path = this.getPath();

Expand Down Expand Up @@ -127,7 +122,7 @@ class PermissionsBase extends React.Component<PermissionsProps> {

// eslint-disable-next-line @typescript-eslint/no-unused-vars
const mapStateToProps = createMapStateToProps<PermissionsOwnProps, PermissionsStateProps>((state, props) => {
const userAccessQueryString = getUserAccessQuery(allUserAccessQuery);
const userAccessQueryString = getUserAccessQuery(userAccessQuery);
const userAccess = userAccessSelectors.selectUserAccess(state, UserAccessType.all, userAccessQueryString);
const userAccessError = userAccessSelectors.selectUserAccessError(state, UserAccessType.all, userAccessQueryString);
const userAccessFetchStatus = userAccessSelectors.selectUserAccessFetchStatus(
Expand All @@ -136,25 +131,7 @@ const mapStateToProps = createMapStateToProps<PermissionsOwnProps, PermissionsSt
userAccessQueryString
);

// Todo: temporarily request IBM separately with beta flag.
const ibmUserAccessQueryString = getUserAccessQuery(ibmUserAccessQuery);
const ibmUserAccess = userAccessSelectors.selectUserAccess(state, UserAccessType.ibm, ibmUserAccessQueryString);
const ibmUserAccessError = userAccessSelectors.selectUserAccessError(
state,
UserAccessType.ibm,
ibmUserAccessQueryString
);
const ibmUserAccessFetchStatus = userAccessSelectors.selectUserAccessFetchStatus(
state,
UserAccessType.ibm,
ibmUserAccessQueryString
);

return {
ibmUserAccess,
ibmUserAccessError,
ibmUserAccessFetchStatus,
ibmUserAccessQueryString,
userAccess,
userAccessError,
userAccessFetchStatus,
Expand Down
Loading

0 comments on commit 7b0b325

Please sign in to comment.