Skip to content

Adding Preview PR to create secret Page #2346

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Feb 8, 2023
67 changes: 67 additions & 0 deletions ui-cra/src/components/Secrets/Create/PrviewPRModal.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { Button, LoadingPage, theme } from '@weaveworks/weave-gitops';
import { useCallback, useState } from 'react';
import styled from 'styled-components';
import useNotifications from '../../../contexts/Notifications';
import { SecretPRPreview } from '../../../types/custom';
import { renderKustomization } from '../../Applications/utils';
import Preview from '../../Templates/Form/Partials/Preview';
const { small } = theme.spacing;
const PreviewPRSection = styled.div`
display: flex;
justify-content: flex-end;
padding: ${small};
`;

export const PrviewPRModal = ({ formData, getClusterAutomations }: any) => {
const [openPreview, setOpenPreview] = useState(false);
const [previewLoading, setPreviewLoading] = useState<boolean>(false);
const [PRPreview, setPRPreview] = useState<SecretPRPreview | null>(null);
const { setNotifications } = useNotifications();

const handlePRPreview = useCallback(() => {
setPreviewLoading(true);
return renderKustomization({ clusterAutomations: getClusterAutomations() })
.then(data => {
setOpenPreview(true);
setPRPreview(data);
})
.catch(err => {
setNotifications([
{
message: { text: err.message },
severity: 'error',
display: 'bottom',
},
]);
})
.finally(() => setPreviewLoading(false));
}, [
formData,
getClusterAutomations,
setOpenPreview,
setPRPreview,
setPreviewLoading,
setNotifications,
]);

return (
<PreviewPRSection>
{previewLoading ? (
<LoadingPage className="preview-loading" />
) : (
<div className="preview-cta">
<Button onClick={() => handlePRPreview()}>PREVIEW PR</Button>
</div>
)}
{openPreview && PRPreview ? (
<Preview
context="secret"
openPreview={openPreview}
setOpenPreview={setOpenPreview}
PRPreview={PRPreview}
sourceType={formData.source_type}
/>
) : null}
</PreviewPRSection>
);
};
51 changes: 28 additions & 23 deletions ui-cra/src/components/Secrets/Create/index.tsx
Original file line number Diff line number Diff line change
@@ -1,44 +1,45 @@
import { MenuItem } from '@material-ui/core';
import { ThemeProvider } from '@material-ui/core/styles';
import {
Button,
GitRepository,
Link,
LoadingPage,
theme,
useListSources
} from '@weaveworks/weave-gitops';
import { PageRoute } from '@weaveworks/weave-gitops/ui/lib/types';
import { useCallback, useEffect, useMemo, useState } from 'react';
import { useHistory } from 'react-router-dom';
import styled from 'styled-components';
import {
ClusterAutomation,
ExternalSecretStore,
GitopsCluster,
GitopsCluster
} from '../../../cluster-services/cluster_services.pb';
import CallbackStateContextProvider from '../../../contexts/GitAuth/CallbackStateContext';
import useNotifications from '../../../contexts/Notifications';
import { localEEMuiTheme } from '../../../muiTheme';
import { useCallbackState } from '../../../utils/callback-state';
import { Input, Select, validateFormData } from '../../../utils/form';
import useNotifications from '../../../contexts/Notifications';
import { Routes } from '../../../utils/nav';
import { ContentWrapper } from '../../Layout/ContentWrapper';
import { PageTemplate } from '../../Layout/PageTemplate';
import GitOps from '../../Templates/Form/Partials/GitOps';
import { ThemeProvider } from '@material-ui/core/styles';
import { localEEMuiTheme } from '../../../muiTheme';
import { useHistory } from 'react-router-dom';
import {
Button,
Link,
LoadingPage,
theme,
GitRepository,
useListSources,
} from '@weaveworks/weave-gitops';
import { isUnauthenticated, removeToken } from '../../../utils/request';
import {
CreateDeploymentObjects,
useClustersWithSources,
useClustersWithSources
} from '../../Applications/utils';
import { getGitRepos } from '../../Clusters';
import { clearCallbackState, getProviderToken } from '../../GitAuth/utils';
import { ContentWrapper } from '../../Layout/ContentWrapper';
import { PageTemplate } from '../../Layout/PageTemplate';
import { GitRepositoryEnriched } from '../../Templates/Form';
import GitOps from '../../Templates/Form/Partials/GitOps';
import {
getInitialGitRepo,
getRepositoryUrl,
getRepositoryUrl
} from '../../Templates/Form/utils';
import { GitRepositoryEnriched } from '../../Templates/Form';
import { getGitRepos } from '../../Clusters';
import CallbackStateContextProvider from '../../../contexts/GitAuth/CallbackStateContext';
import { PageRoute } from '@weaveworks/weave-gitops/ui/lib/types';
import { clearCallbackState, getProviderToken } from '../../GitAuth/utils';
import { SelectSecretStore } from './Form/Partials/SelectSecretStore';
import { PrviewPRModal } from './PrviewPRModal';

const { medium, large } = theme.spacing;
const { neutral20, neutral10 } = theme.colors;
Expand Down Expand Up @@ -424,6 +425,10 @@ const CreateSecret = () => {
}
/>
</div>
<PrviewPRModal
formData={formData}
getClusterAutomations={getClusterAutomations}
/>
<GitOps
formData={formData}
setFormData={setFormData}
Expand Down
29 changes: 22 additions & 7 deletions ui-cra/src/components/Templates/Form/Partials/Preview.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@ import {
Dialog,
Box,
} from '@material-ui/core';
import { AppPRPreview, ClusterPRPreview } from '../../../../types/custom';
import {
AppPRPreview,
ClusterPRPreview,
SecretPRPreview,
} from '../../../../types/custom';
import {
CommitFile,
RenderTemplateResponse,
Expand Down Expand Up @@ -88,10 +92,10 @@ const Preview: FC<{
const handleChange = (event: React.ChangeEvent<{}>, newValue: number) => {
setValue(newValue);
};

const tabsContent: Array<TabContent> =
context === 'app'
? [
const getTabsContent = (context: string) => {
switch (context) {
case 'app':
return [
{
tabName: 'Kustomizations',
files: PRPreview.kustomizationFiles,
Expand All @@ -100,8 +104,16 @@ const Preview: FC<{
tabName: 'Helm Releases',
files: (PRPreview as AppPRPreview).helmReleaseFiles,
},
]
: [
];
case 'secret':
return [
{
tabName: 'External Secret',
files: (PRPreview as SecretPRPreview).externalSecretsFiles,
},
];
default:
return [
{
tabName: 'Resource Definition',
files: (PRPreview as ClusterPRPreview).renderedTemplate,
Expand All @@ -115,6 +127,9 @@ const Preview: FC<{
files: PRPreview.kustomizationFiles,
},
];
}
};
const tabsContent: Array<TabContent> = getTabsContent(context || '');

const downloadFile = () => {
const zip = new JSZip();
Expand Down
3 changes: 3 additions & 0 deletions ui-cra/src/types/custom.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,3 +162,6 @@ export interface AppPRPreview {
kustomizationFiles: { path: string; content: string }[];
helmReleaseFiles: { path: string; content: string }[];
}
export interface SecretPRPreview {
externalSecretsFiles: { path: string; content: string }[];
}