mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-09-29 22:34:33 +00:00
88 lines
3.0 KiB
TypeScript
88 lines
3.0 KiB
TypeScript
import {Component} from 'react';
|
|
import type {RouteComponentProps} from 'react-router';
|
|
|
|
import Access from 'sentry/components/acl/access';
|
|
import Link from 'sentry/components/links/link';
|
|
import LoadingIndicator from 'sentry/components/loadingIndicator';
|
|
import Panel from 'sentry/components/panels/panel';
|
|
import PanelAlert from 'sentry/components/panels/panelAlert';
|
|
import PanelBody from 'sentry/components/panels/panelBody';
|
|
import PanelHeader from 'sentry/components/panels/panelHeader';
|
|
import PanelItem from 'sentry/components/panels/panelItem';
|
|
import {t, tct} from 'sentry/locale';
|
|
import type {Organization, Plugin, Project} from 'sentry/types';
|
|
import RouteError from 'sentry/views/routeError';
|
|
|
|
import ProjectPluginRow from './projectPluginRow';
|
|
|
|
type Props = {
|
|
error: React.ComponentProps<typeof RouteError>['error'];
|
|
loading: boolean;
|
|
onChange: React.ComponentProps<typeof ProjectPluginRow>['onChange'];
|
|
organization: Organization;
|
|
plugins: Plugin[];
|
|
project: Project;
|
|
} & RouteComponentProps<{}, {}>;
|
|
|
|
class ProjectPlugins extends Component<Props> {
|
|
render() {
|
|
const {plugins, loading, error, onChange, routes, organization, project} = this.props;
|
|
const hasError = error;
|
|
const isLoading = !hasError && loading;
|
|
|
|
if (hasError) {
|
|
return <RouteError error={error} />;
|
|
}
|
|
|
|
if (isLoading) {
|
|
return <LoadingIndicator />;
|
|
}
|
|
const params = {orgId: organization.slug, projectId: project.slug};
|
|
|
|
return (
|
|
<Access access={['org:integrations']} project={project}>
|
|
{({hasAccess}) => (
|
|
<Panel>
|
|
<PanelHeader>
|
|
<div>{t('Legacy Integration')}</div>
|
|
<div />
|
|
</PanelHeader>
|
|
<PanelBody>
|
|
<PanelAlert type="warning">
|
|
{hasAccess
|
|
? tct(
|
|
"Legacy Integrations must be configured per-project. It's recommended to prefer organization integrations over the legacy project integrations when available. Visit the [link:organization integrations] settings to manage them.",
|
|
{
|
|
link: <Link to={`/settings/${organization.slug}/integrations`} />,
|
|
}
|
|
)
|
|
: t(
|
|
"Legacy Integrations must be configured per-project. It's recommended to prefer organization integrations over the legacy project integrations when available."
|
|
)}
|
|
</PanelAlert>
|
|
|
|
{plugins
|
|
.filter(p => {
|
|
return !p.isHidden;
|
|
})
|
|
.map(plugin => (
|
|
<PanelItem key={plugin.id}>
|
|
<ProjectPluginRow
|
|
params={params}
|
|
routes={routes}
|
|
project={project}
|
|
{...plugin}
|
|
onChange={onChange}
|
|
/>
|
|
</PanelItem>
|
|
))}
|
|
</PanelBody>
|
|
</Panel>
|
|
)}
|
|
</Access>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default ProjectPlugins;
|