This repository was archived by the owner on May 30, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathindex.tsx
More file actions
123 lines (109 loc) · 2.71 KB
/
index.tsx
File metadata and controls
123 lines (109 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import { useEffect } from 'react';
import { shallowEqual } from 'react-redux';
import { Params, useParams } from 'react-router-dom';
import { PageHeader, Button } from 'antd';
import { Result } from 'antd';
import { useAppSelector, useAppDispatch } from '../../redux/hooks';
import {
fetchConfig,
listLocks,
lock,
unlock,
repoLockSlice as slice,
setAutoUnlock,
} from '../../redux/repoLock';
import LockList, { LockListProps } from './LockList';
interface ParamsType extends Params {
namespace: string;
name: string;
}
export default (): JSX.Element => {
const { namespace, name } = useParams() as ParamsType;
const { display, config, locks } = useAppSelector(
(state) => state.repoLock,
shallowEqual
);
const dispatch = useAppDispatch();
useEffect(() => {
const f = async () => {
await dispatch(slice.actions.init({ namespace, name }));
await dispatch(fetchConfig());
await dispatch(listLocks());
await dispatch(slice.actions.setDisplay(true));
};
f();
// eslint-disable-next-line
}, [dispatch]);
const onClickLock = (env: string) => {
dispatch(lock(env));
};
const onClickUnlock = (env: string) => {
dispatch(unlock(env));
};
const onChangeExpiredAt = (env: string, expiredAt: Date) => {
dispatch(setAutoUnlock({ env, expiredAt }));
};
if (!display) {
return <></>;
}
if (!config) {
return (
<Result
status="warning"
title="There is no configuration file."
extra={[
<Button
type="primary"
key="console"
target="_blank"
href="https://www.gitploy.io/docs/concepts/deploy.yml"
>
Read Document
</Button>,
<Button
type="link"
key="link"
target="_blank"
href={`/link/${namespace}/${name}/config/new`}
>
New Configuration
</Button>,
]}
/>
);
}
return (
<RepoLock
envs={config ? config.envs : []}
locks={locks}
onClickLock={onClickLock}
onClickUnlock={onClickUnlock}
onChangeExpiredAt={onChangeExpiredAt}
/>
);
};
interface RepoLockProps extends LockListProps {}
function RepoLock({
envs,
locks,
onChangeExpiredAt,
onClickLock,
onClickUnlock,
}: RepoLockProps): JSX.Element {
return (
<div>
<div>
<PageHeader title="Lock" subTitle="Lock the environment." />
</div>
<div style={{ padding: '16px 24px' }}>
<LockList
envs={envs}
locks={locks}
onClickLock={onClickLock}
onClickUnlock={onClickUnlock}
onChangeExpiredAt={onChangeExpiredAt}
/>
</div>
</div>
);
}