mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-10-30 14:49:14 +00:00
60 lines
1.8 KiB
TypeScript
60 lines
1.8 KiB
TypeScript
import {Component} from 'react';
|
|
|
|
import {fetchOrganizationDetails} from 'sentry/actionCreators/organizations';
|
|
import type {Client} from 'sentry/api';
|
|
import {SentryPropTypeValidators} from 'sentry/sentryPropTypeValidators';
|
|
import type {Organization} from 'sentry/types';
|
|
import withApi from 'sentry/utils/withApi';
|
|
import withLatestContext from 'sentry/utils/withLatestContext';
|
|
import AccountSettingsNavigation from 'sentry/views/settings/account/accountSettingsNavigation';
|
|
import SettingsLayout from 'sentry/views/settings/components/settingsLayout';
|
|
|
|
type Props = React.ComponentProps<typeof SettingsLayout> & {
|
|
api: Client;
|
|
organization: Organization;
|
|
};
|
|
|
|
class AccountSettingsLayout extends Component<Props> {
|
|
static childContextTypes = {
|
|
organization: SentryPropTypeValidators.isOrganization,
|
|
};
|
|
|
|
getChildContext() {
|
|
return {
|
|
organization: this.props.organization,
|
|
};
|
|
}
|
|
|
|
componentDidUpdate(prevProps: Props) {
|
|
const {api, organization} = this.props;
|
|
if (prevProps.organization === organization) {
|
|
return;
|
|
}
|
|
|
|
// if there is no org in context, SidebarDropdown uses an org from `withLatestContext`
|
|
// (which queries the org index endpoint instead of org details)
|
|
// and does not have `access` info
|
|
if (organization && typeof organization.access === 'undefined') {
|
|
fetchOrganizationDetails(api, organization.slug, {
|
|
setActive: true,
|
|
loadProjects: true,
|
|
});
|
|
}
|
|
}
|
|
|
|
render() {
|
|
const {organization} = this.props;
|
|
|
|
return (
|
|
<SettingsLayout
|
|
{...this.props}
|
|
renderNavigation={() => <AccountSettingsNavigation organization={organization} />}
|
|
>
|
|
{this.props.children}
|
|
</SettingsLayout>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default withLatestContext(withApi(AccountSettingsLayout));
|