foreman_webhooks 3.0.3 → 3.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/models/webhook.rb +4 -1
- data/lib/foreman_webhooks/engine.rb +1 -1
- data/lib/foreman_webhooks/version.rb +1 -1
- data/webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhooksTable/Components/EmptyWebhooksTable/index.js +29 -0
- data/webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhooksTable/WebhooksTable.js +37 -18
- data/webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/WebhooksIndexPage.js +26 -74
- data/webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/__tests__/WebhooksIndexPage.test.js +12 -2
- data/webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/__tests__/__snapshots__/WebhooksIndexPage.test.js.snap +10 -18
- data/webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/__tests__/__snapshots__/integration.test.js.snap +4 -16
- data/webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/index.js +1 -41
- data/webpack/ForemanWebhooks/Routes/Webhooks/WebhooksPageActions.js +1 -12
- data/webpack/ForemanWebhooks/Routes/Webhooks/constants.js +0 -3
- data/webpack/__mocks__/foremanReact/components/PF4/TableIndexPage/TableIndexPage.js +10 -0
- metadata +5 -4
- data/webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/EmptyWebhooksIndexPage/index.js +0 -63
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5382cbf96f38f9ab42cef651aaf8eb1e602d2c651352c370138b911e7cd10901
|
4
|
+
data.tar.gz: 5e32f69db8731876e51af931c9d3b174c9dcae62ae3ebdb11b186d70b5fff384
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc5314756061144ef29988e98b7344c25b2df0e13b3cb122a965d071c18c5fdb9e46badc061b50f2e79b76e33ebf95e8d9c54671bac1dd0e46b334e070a9048a
|
7
|
+
data.tar.gz: f9e3824a1b66dfdd988eeb9b3bbbd922d9e9b460bb7922a0139130a47cf7074ed958449c82e97941b7492328b361f2296026168b41ee85d492689ae691620012
|
data/app/models/webhook.rb
CHANGED
@@ -79,7 +79,10 @@ class Webhook < ApplicationRecord
|
|
79
79
|
|
80
80
|
def ca_certs_store
|
81
81
|
store = OpenSSL::X509::Store.new
|
82
|
-
|
82
|
+
if ssl_ca_certs.blank?
|
83
|
+
store.set_default_paths
|
84
|
+
return store
|
85
|
+
end
|
83
86
|
|
84
87
|
ssl_ca_certs.split(/(?=-----BEGIN)/).each do |cert|
|
85
88
|
store.add_cert(OpenSSL::X509::Certificate.new(cert))
|
@@ -15,7 +15,7 @@ module ForemanWebhooks
|
|
15
15
|
|
16
16
|
initializer 'foreman_webhooks.register_plugin', before: :finisher_hook do |_app|
|
17
17
|
Foreman::Plugin.register :foreman_webhooks do
|
18
|
-
requires_foreman '>= 3.
|
18
|
+
requires_foreman '>= 3.3'
|
19
19
|
|
20
20
|
apipie_documented_controllers ["#{ForemanWebhooks::Engine.root}/app/controllers/api/v2/*.rb"]
|
21
21
|
ApipieDSL.configuration.sections += ['webhooks']
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import PropTypes from 'prop-types';
|
3
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
4
|
+
import DefaultEmptyState from 'foremanReact/components/common/EmptyState';
|
5
|
+
|
6
|
+
const EmptyWebhooksTable = ({ message: { type, text } }) => (
|
7
|
+
<DefaultEmptyState
|
8
|
+
icon={type === 'error' ? 'error-circle-o' : 'add-circle-o'}
|
9
|
+
header={type === 'error' ? __('Error') : __('No Results')}
|
10
|
+
description={text}
|
11
|
+
documentation={null}
|
12
|
+
/>
|
13
|
+
);
|
14
|
+
|
15
|
+
EmptyWebhooksTable.propTypes = {
|
16
|
+
message: PropTypes.shape({
|
17
|
+
type: PropTypes.oneOf(['empty', 'error']),
|
18
|
+
text: PropTypes.string,
|
19
|
+
}),
|
20
|
+
};
|
21
|
+
|
22
|
+
EmptyWebhooksTable.defaultProps = {
|
23
|
+
message: {
|
24
|
+
type: 'empty',
|
25
|
+
text: __('Try to create a new webhook'),
|
26
|
+
},
|
27
|
+
};
|
28
|
+
|
29
|
+
export default EmptyWebhooksTable;
|
@@ -1,33 +1,56 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import PropTypes from 'prop-types';
|
3
|
+
import { useSelector } from 'react-redux';
|
4
|
+
import { isEmpty } from 'lodash';
|
3
5
|
|
4
6
|
import { Table } from 'foremanReact/components/common/table';
|
5
7
|
import Pagination from 'foremanReact/components/Pagination';
|
8
|
+
import Loading from 'foremanReact/components/Loading';
|
6
9
|
import { useForemanModal } from 'foremanReact/components/ForemanModal/ForemanModalHooks';
|
7
10
|
|
8
11
|
import WebhookDeleteModal from '../WebhookDeleteModal';
|
9
12
|
import WebhookEditModal from '../WebhookEditModal';
|
13
|
+
import EmptyWebhooksTable from './Components/EmptyWebhooksTable';
|
10
14
|
|
11
15
|
import createWebhooksTableSchema from './WebhooksTableSchema';
|
12
16
|
|
13
17
|
import { WEBHOOK_EDIT_MODAL_ID } from '../../../constants';
|
14
18
|
|
19
|
+
import {
|
20
|
+
selectWebhooks,
|
21
|
+
selectPage,
|
22
|
+
selectPerPage,
|
23
|
+
selectSearch,
|
24
|
+
selectSort,
|
25
|
+
selectHasData,
|
26
|
+
selectHasError,
|
27
|
+
selectIsLoading,
|
28
|
+
selectSubtotal,
|
29
|
+
selectMessage,
|
30
|
+
} from '../../../WebhooksPageSelectors';
|
31
|
+
|
15
32
|
const WebhooksTable = ({
|
16
33
|
fetchAndPush,
|
17
|
-
itemCount,
|
18
|
-
results,
|
19
|
-
sort,
|
20
|
-
pagination,
|
21
34
|
toDelete,
|
22
35
|
onDeleteClick,
|
23
36
|
toEdit,
|
24
37
|
onEditClick,
|
25
38
|
reloadWithSearch,
|
26
|
-
search,
|
27
39
|
}) => {
|
40
|
+
const webhooks = useSelector(selectWebhooks);
|
41
|
+
const page = useSelector(selectPage);
|
42
|
+
const perPage = useSelector(selectPerPage);
|
43
|
+
const search = useSelector(selectSearch);
|
44
|
+
const sort = useSelector(selectSort);
|
45
|
+
const isLoading = useSelector(selectIsLoading);
|
46
|
+
const hasData = useSelector(selectHasData);
|
47
|
+
const hasError = useSelector(selectHasError);
|
48
|
+
const itemCount = useSelector(selectSubtotal);
|
49
|
+
const message = useSelector(selectMessage);
|
50
|
+
|
28
51
|
const onDeleteSuccess = () => {
|
29
|
-
const currentPage =
|
30
|
-
const maxPage = Math.ceil((itemCount - 1) /
|
52
|
+
const currentPage = page;
|
53
|
+
const maxPage = Math.ceil((itemCount - 1) / perPage);
|
31
54
|
fetchAndPush({ page: maxPage < currentPage ? maxPage : currentPage });
|
32
55
|
};
|
33
56
|
|
@@ -35,6 +58,12 @@ const WebhooksTable = ({
|
|
35
58
|
id: WEBHOOK_EDIT_MODAL_ID,
|
36
59
|
});
|
37
60
|
|
61
|
+
if (isLoading && !hasError) return <Loading />;
|
62
|
+
|
63
|
+
if (!isLoading && !hasData && isEmpty(search)) {
|
64
|
+
return <EmptyWebhooksTable message={message} />;
|
65
|
+
}
|
66
|
+
|
38
67
|
return (
|
39
68
|
<React.Fragment>
|
40
69
|
<WebhookDeleteModal toDelete={toDelete} onSuccess={onDeleteSuccess} />
|
@@ -55,7 +84,7 @@ const WebhooksTable = ({
|
|
55
84
|
onDeleteClick,
|
56
85
|
onEditClick
|
57
86
|
)}
|
58
|
-
rows={
|
87
|
+
rows={webhooks}
|
59
88
|
id="webhooks-table"
|
60
89
|
/>
|
61
90
|
<Pagination itemCount={itemCount} onChange={fetchAndPush} />
|
@@ -64,22 +93,12 @@ const WebhooksTable = ({
|
|
64
93
|
};
|
65
94
|
|
66
95
|
WebhooksTable.propTypes = {
|
67
|
-
results: PropTypes.array.isRequired,
|
68
96
|
fetchAndPush: PropTypes.func.isRequired,
|
69
97
|
onDeleteClick: PropTypes.func.isRequired,
|
70
98
|
onEditClick: PropTypes.func.isRequired,
|
71
|
-
itemCount: PropTypes.number.isRequired,
|
72
|
-
sort: PropTypes.object,
|
73
|
-
pagination: PropTypes.object.isRequired,
|
74
99
|
toDelete: PropTypes.object.isRequired,
|
75
100
|
toEdit: PropTypes.number.isRequired,
|
76
101
|
reloadWithSearch: PropTypes.func.isRequired,
|
77
|
-
search: PropTypes.string,
|
78
|
-
};
|
79
|
-
|
80
|
-
WebhooksTable.defaultProps = {
|
81
|
-
sort: { by: '', order: '' },
|
82
|
-
search: '',
|
83
102
|
};
|
84
103
|
|
85
104
|
export default WebhooksTable;
|
@@ -1,33 +1,28 @@
|
|
1
1
|
import React, { useState } from 'react';
|
2
|
-
import
|
3
|
-
import { Button } from 'patternfly-react';
|
2
|
+
import { useSelector, useDispatch } from 'react-redux';
|
4
3
|
|
4
|
+
import TableIndexPage from 'foremanReact/components/PF4/TableIndexPage/TableIndexPage';
|
5
5
|
import { translate as __ } from 'foremanReact/common/I18n';
|
6
|
-
import PageLayout from 'foremanReact/routes/common/PageLayout/PageLayout';
|
7
6
|
import { useForemanModal } from 'foremanReact/components/ForemanModal/ForemanModalHooks';
|
8
|
-
import { withRenderHandler } from 'foremanReact/common/HOC';
|
9
7
|
|
10
|
-
import {
|
8
|
+
import {
|
9
|
+
WEBHOOKS_API_PATH,
|
10
|
+
WEBHOOKS_API_REQUEST_KEY,
|
11
|
+
WEBHOOK_CREATE_MODAL_ID,
|
12
|
+
} from '../constants';
|
13
|
+
|
14
|
+
import { selectSearch } from '../WebhooksPageSelectors';
|
11
15
|
|
12
16
|
import WebhooksTable from './Components/WebhooksTable';
|
13
17
|
import WebhookCreateModal from './Components/WebhookCreateModal';
|
14
|
-
import EmptyWebhooksIndexPage from './Components/EmptyWebhooksIndexPage';
|
15
18
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
perPage,
|
24
|
-
sort,
|
25
|
-
hasError,
|
26
|
-
itemCount,
|
27
|
-
message,
|
28
|
-
canCreate,
|
29
|
-
reloadWithSearch,
|
30
|
-
}) => {
|
19
|
+
import { reloadWithSearch, fetchAndPush } from '../WebhooksPageActions';
|
20
|
+
|
21
|
+
const WebhooksIndexPage = () => {
|
22
|
+
const dispatch = useDispatch();
|
23
|
+
|
24
|
+
const search = useSelector(selectSearch);
|
25
|
+
|
31
26
|
const [toDelete, setToDelete] = useState({});
|
32
27
|
const [toEdit, setToEdit] = useState(0);
|
33
28
|
|
@@ -38,76 +33,33 @@ const WebhooksIndexPage = ({
|
|
38
33
|
id: WEBHOOK_CREATE_MODAL_ID,
|
39
34
|
});
|
40
35
|
|
41
|
-
const createBtn = (
|
42
|
-
<Button onClick={setCreateModalOpen} bsStyle="primary">
|
43
|
-
{__('Create Webhook')}
|
44
|
-
</Button>
|
45
|
-
);
|
46
|
-
|
47
36
|
return (
|
48
37
|
<>
|
49
38
|
<WebhookCreateModal
|
50
39
|
onSuccess={() => {
|
51
40
|
setCreateModalClosed();
|
52
|
-
reloadWithSearch(search);
|
41
|
+
dispatch(reloadWithSearch(search));
|
53
42
|
}}
|
54
43
|
onCancel={setCreateModalClosed}
|
55
44
|
/>
|
56
|
-
<
|
45
|
+
<TableIndexPage
|
57
46
|
header={__('Webhooks')}
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
onSearch={reloadWithSearch}
|
63
|
-
onBookmarkClick={reloadWithSearch}
|
64
|
-
toolbarButtons={canCreate && createBtn}
|
47
|
+
controller="webhooks"
|
48
|
+
apiUrl={WEBHOOKS_API_PATH}
|
49
|
+
apiOptions={{ key: WEBHOOKS_API_REQUEST_KEY }}
|
50
|
+
customCreateAction={() => setCreateModalOpen}
|
65
51
|
>
|
66
52
|
<WebhooksTable
|
67
|
-
|
68
|
-
fetchAndPush={fetchAndPush}
|
69
|
-
pagination={{ page, perPage }}
|
70
|
-
itemCount={itemCount}
|
71
|
-
sort={sort}
|
53
|
+
fetchAndPush={params => dispatch(fetchAndPush(params))}
|
72
54
|
toDelete={toDelete}
|
73
55
|
setToDelete={setToDelete}
|
74
|
-
hasData={hasData}
|
75
|
-
hasError={hasError}
|
76
|
-
isLoading={isLoading}
|
77
56
|
toEdit={toEdit}
|
78
57
|
setToEdit={setToEdit}
|
79
|
-
reloadWithSearch={reloadWithSearch}
|
58
|
+
reloadWithSearch={query => dispatch(reloadWithSearch(query))}
|
80
59
|
/>
|
81
|
-
</
|
60
|
+
</TableIndexPage>
|
82
61
|
</>
|
83
62
|
);
|
84
63
|
};
|
85
64
|
|
86
|
-
|
87
|
-
fetchAndPush: PropTypes.func.isRequired,
|
88
|
-
search: PropTypes.string,
|
89
|
-
isLoading: PropTypes.bool.isRequired,
|
90
|
-
hasData: PropTypes.bool.isRequired,
|
91
|
-
webhooks: PropTypes.array.isRequired,
|
92
|
-
page: PropTypes.number,
|
93
|
-
perPage: PropTypes.number,
|
94
|
-
sort: PropTypes.object.isRequired,
|
95
|
-
hasError: PropTypes.bool.isRequired,
|
96
|
-
itemCount: PropTypes.number.isRequired,
|
97
|
-
message: PropTypes.object,
|
98
|
-
canCreate: PropTypes.bool.isRequired,
|
99
|
-
reloadWithSearch: PropTypes.func.isRequired,
|
100
|
-
};
|
101
|
-
|
102
|
-
WebhooksIndexPage.defaultProps = {
|
103
|
-
page: null,
|
104
|
-
perPage: null,
|
105
|
-
search: '',
|
106
|
-
message: { type: 'empty', text: __('Try to create a new Webhook') },
|
107
|
-
};
|
108
|
-
|
109
|
-
export default withRenderHandler({
|
110
|
-
Component: WebhooksIndexPage,
|
111
|
-
EmptyComponent: EmptyWebhooksIndexPage,
|
112
|
-
ErrorComponent: EmptyWebhooksIndexPage,
|
113
|
-
});
|
65
|
+
export default WebhooksIndexPage;
|
data/webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/__tests__/WebhooksIndexPage.test.js
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
+
import React from 'react';
|
1
2
|
import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
|
3
|
+
import { Provider } from 'react-redux';
|
4
|
+
import { createStore } from 'redux';
|
5
|
+
|
2
6
|
import WebhooksIndexPage from '../WebhooksIndexPage';
|
3
7
|
|
4
8
|
const fixtures = {
|
@@ -17,6 +21,12 @@ const fixtures = {
|
|
17
21
|
};
|
18
22
|
|
19
23
|
describe('WebhooksIndexPage', () => {
|
20
|
-
describe('redering', () =>
|
21
|
-
|
24
|
+
describe('redering', () => {
|
25
|
+
const webhooksPage = () => (
|
26
|
+
<Provider store={createStore((state = [], action) => state)}>
|
27
|
+
<WebhooksIndexPage />
|
28
|
+
</Provider>
|
29
|
+
);
|
30
|
+
testComponentSnapshotsWithFixtures(webhooksPage, fixtures);
|
31
|
+
});
|
22
32
|
});
|
@@ -1,25 +1,17 @@
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
2
|
|
3
3
|
exports[`WebhooksIndexPage redering render with minimal props 1`] = `
|
4
|
-
<
|
5
|
-
|
6
|
-
fetchAndPush={[MockFunction]}
|
7
|
-
handleCreateSubmit={[MockFunction]}
|
8
|
-
hasData={false}
|
9
|
-
hasError={false}
|
10
|
-
isLoading={false}
|
11
|
-
itemCount={0}
|
12
|
-
message={
|
4
|
+
<Provider
|
5
|
+
store={
|
13
6
|
Object {
|
14
|
-
"
|
15
|
-
"
|
7
|
+
"dispatch": [Function],
|
8
|
+
"getState": [Function],
|
9
|
+
"replaceReducer": [Function],
|
10
|
+
"subscribe": [Function],
|
11
|
+
Symbol(Symbol.observable): [Function],
|
16
12
|
}
|
17
13
|
}
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
search=""
|
22
|
-
sort={Object {}}
|
23
|
-
webhooks={Array []}
|
24
|
-
/>
|
14
|
+
>
|
15
|
+
<WebhooksIndexPage />
|
16
|
+
</Provider>
|
25
17
|
`;
|
@@ -5,15 +5,9 @@ Object {
|
|
5
5
|
"action": Array [
|
6
6
|
Array [
|
7
7
|
Object {
|
8
|
-
"key": "
|
9
|
-
"params": Object {
|
10
|
-
"order": "",
|
11
|
-
"page": 1,
|
12
|
-
"per_page": 20,
|
13
|
-
"search": "",
|
14
|
-
},
|
8
|
+
"key": "WEBHOOK_EVENTS",
|
15
9
|
"type": "get-some-type",
|
16
|
-
"url": "
|
10
|
+
"url": "",
|
17
11
|
},
|
18
12
|
],
|
19
13
|
],
|
@@ -26,15 +20,9 @@ Object {
|
|
26
20
|
"action": Array [
|
27
21
|
Array [
|
28
22
|
Object {
|
29
|
-
"key": "
|
30
|
-
"params": Object {
|
31
|
-
"order": "",
|
32
|
-
"page": 1,
|
33
|
-
"per_page": 20,
|
34
|
-
"search": "",
|
35
|
-
},
|
23
|
+
"key": "WEBHOOK_EVENTS",
|
36
24
|
"type": "get-some-type",
|
37
|
-
"url": "
|
25
|
+
"url": "",
|
38
26
|
},
|
39
27
|
],
|
40
28
|
],
|
@@ -1,43 +1,3 @@
|
|
1
|
-
import { connect } from 'react-redux';
|
2
|
-
import { compose, bindActionCreators } from 'redux';
|
3
|
-
|
4
|
-
import { callOnMount, callOnPopState } from 'foremanReact/common/HOC';
|
5
|
-
|
6
1
|
import WebhooksIndexPage from './WebhooksIndexPage';
|
7
|
-
import * as actions from '../WebhooksPageActions';
|
8
|
-
|
9
|
-
import {
|
10
|
-
selectWebhooks,
|
11
|
-
selectPage,
|
12
|
-
selectPerPage,
|
13
|
-
selectSearch,
|
14
|
-
selectSort,
|
15
|
-
selectHasData,
|
16
|
-
selectHasError,
|
17
|
-
selectIsLoading,
|
18
|
-
selectSubtotal,
|
19
|
-
selectMessage,
|
20
|
-
selectCanCreate,
|
21
|
-
} from '../WebhooksPageSelectors';
|
22
|
-
|
23
|
-
const mapStateToProps = state => ({
|
24
|
-
webhooks: selectWebhooks(state),
|
25
|
-
page: selectPage(state),
|
26
|
-
perPage: selectPerPage(state),
|
27
|
-
search: selectSearch(state),
|
28
|
-
sort: selectSort(state),
|
29
|
-
isLoading: selectIsLoading(state),
|
30
|
-
hasData: selectHasData(state),
|
31
|
-
hasError: selectHasError(state),
|
32
|
-
itemCount: selectSubtotal(state),
|
33
|
-
message: selectMessage(state),
|
34
|
-
canCreate: selectCanCreate(state),
|
35
|
-
});
|
36
|
-
|
37
|
-
const mapDispatchToProps = dispatch => bindActionCreators(actions, dispatch);
|
38
2
|
|
39
|
-
export default
|
40
|
-
connect(mapStateToProps, mapDispatchToProps),
|
41
|
-
callOnMount(({ initializeWebhooks }) => initializeWebhooks()),
|
42
|
-
callOnPopState(({ fetchWebhooks }) => fetchWebhooks())
|
43
|
-
)(WebhooksIndexPage);
|
3
|
+
export default WebhooksIndexPage;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import history from 'foremanReact/history';
|
2
2
|
import { get } from 'foremanReact/redux/API';
|
3
|
-
import { stringifyParams
|
3
|
+
import { stringifyParams } from 'foremanReact/common/urlHelpers';
|
4
4
|
|
5
5
|
import { buildQuery } from './WebhooksPageHelpers';
|
6
6
|
import {
|
@@ -9,17 +9,6 @@ import {
|
|
9
9
|
WEBHOOKS_API_REQUEST_KEY,
|
10
10
|
} from './constants';
|
11
11
|
|
12
|
-
export const initializeWebhooks = () => dispatch => {
|
13
|
-
const params = getParams();
|
14
|
-
dispatch(fetchWebhooks({ per_page: params.perPage, ...params }));
|
15
|
-
if (!history.action === 'POP') {
|
16
|
-
history.replace({
|
17
|
-
pathname: WEBHOOKS_PATH,
|
18
|
-
search: stringifyParams(params),
|
19
|
-
});
|
20
|
-
}
|
21
|
-
};
|
22
|
-
|
23
12
|
export const fetchWebhooks = (
|
24
13
|
/* eslint-disable-next-line camelcase */
|
25
14
|
{ page, per_page, searchQuery, sort },
|
@@ -1,12 +1,9 @@
|
|
1
|
-
import { getControllerSearchProps } from 'foremanReact/constants';
|
2
|
-
|
3
1
|
export const WEBHOOKS_PAGE_DATA_RESOLVED = 'WEBHOOKS_PAGE_DATA_RESOLVED';
|
4
2
|
export const WEBHOOKS_PAGE_DATA_FAILED = 'WEBHOOKS_PAGE_DATA_FAILED';
|
5
3
|
export const WEBHOOKS_PAGE_HIDE_LOADING = 'WEBHOOKS_PAGE_HIDE_LOADING';
|
6
4
|
export const WEBHOOKS_PAGE_SHOW_LOADING = 'WEBHOOKS_PAGE_SHOW_LOADING';
|
7
5
|
export const WEBHOOKS_PAGE_CLEAR_ERROR = 'WEBHOOKS_PAGE_CLEAR_ERROR';
|
8
6
|
|
9
|
-
export const WEBHOOKS_SEARCH_PROPS = getControllerSearchProps('webhooks');
|
10
7
|
export const WEBHOOKS_API_PATH = '/api/v2/webhooks?include_permissions=true';
|
11
8
|
export const WEBHOOKS_PATH = '/webhooks';
|
12
9
|
export const WEBHOOKS_API_REQUEST_KEY = 'WEBHOOKS';
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman_webhooks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Timo Goebel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Plugin for Foreman that allows to configure Webhooks.
|
14
14
|
email:
|
@@ -94,12 +94,12 @@ files:
|
|
94
94
|
- webpack/ForemanWebhooks/Routes/Webhooks/Components/WebhookForm/__tests__/__snapshots__/WebhookForm.test.js.snap
|
95
95
|
- webpack/ForemanWebhooks/Routes/Webhooks/Components/WebhookForm/constants.js
|
96
96
|
- webpack/ForemanWebhooks/Routes/Webhooks/Components/WebhookForm/index.js
|
97
|
-
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/EmptyWebhooksIndexPage/index.js
|
98
97
|
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhookCreateModal.js
|
99
98
|
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhookDeleteModal.js
|
100
99
|
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhookEditModal.js
|
101
100
|
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhookEditModalSelectors.js
|
102
101
|
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhookModal.scss
|
102
|
+
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhooksTable/Components/EmptyWebhooksTable/index.js
|
103
103
|
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhooksTable/Components/EnabledCell.js
|
104
104
|
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhooksTable/Components/Formatters/__tests__/__snapshots__/enabledCellFormatter.test.js.snap
|
105
105
|
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhooksTable/Components/Formatters/__tests__/enabledCellFormatter.test.js
|
@@ -139,6 +139,7 @@ files:
|
|
139
139
|
- webpack/__mocks__/foremanReact/components/Layout/LayoutActions.js
|
140
140
|
- webpack/__mocks__/foremanReact/components/Loading/Loading.js
|
141
141
|
- webpack/__mocks__/foremanReact/components/Loading/index.js
|
142
|
+
- webpack/__mocks__/foremanReact/components/PF4/TableIndexPage/TableIndexPage.js
|
142
143
|
- webpack/__mocks__/foremanReact/components/Pagination/index.js
|
143
144
|
- webpack/__mocks__/foremanReact/components/common/EmptyState.js
|
144
145
|
- webpack/__mocks__/foremanReact/components/common/forms/ForemanForm.js
|
@@ -192,8 +193,8 @@ test_files:
|
|
192
193
|
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhooksTable/Components/Formatters/__tests__/enabledCellFormatter.test.js
|
193
194
|
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhooksTable/Components/__tests__/EnabledCell.test.js
|
194
195
|
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/Components/WebhooksTable/__tests__/WebhooksTable.test.js
|
195
|
-
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/__tests__/integration.test.js
|
196
196
|
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/__tests__/WebhooksIndexPage.fixtures.js
|
197
197
|
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/__tests__/WebhooksIndexPage.test.js
|
198
|
+
- webpack/ForemanWebhooks/Routes/Webhooks/WebhooksIndexPage/__tests__/integration.test.js
|
198
199
|
- webpack/ForemanWebhooks/Routes/Webhooks/__tests__/WebhooksPageHelpers.test.js
|
199
200
|
- webpack/ForemanWebhooks/Routes/Webhooks/__tests__/WebhooksPageSelectors.test.js
|
@@ -1,63 +0,0 @@
|
|
1
|
-
import React from 'react';
|
2
|
-
import PropTypes from 'prop-types';
|
3
|
-
import { translate as __ } from 'foremanReact/common/I18n';
|
4
|
-
import DefaultEmptyState from 'foremanReact/components/common/EmptyState';
|
5
|
-
|
6
|
-
import { useForemanModal } from 'foremanReact/components/ForemanModal/ForemanModalHooks';
|
7
|
-
|
8
|
-
import WebhookCreateModal from '../WebhookCreateModal';
|
9
|
-
import { WEBHOOK_CREATE_MODAL_ID } from '../../../constants';
|
10
|
-
|
11
|
-
const EmptyWebhooksIndexPage = ({
|
12
|
-
search,
|
13
|
-
reloadWithSearch,
|
14
|
-
message: { type, text },
|
15
|
-
}) => {
|
16
|
-
const {
|
17
|
-
setModalOpen: setCreateModalOpen,
|
18
|
-
setModalClosed: setCreateModalClosed,
|
19
|
-
} = useForemanModal({
|
20
|
-
id: WEBHOOK_CREATE_MODAL_ID,
|
21
|
-
});
|
22
|
-
|
23
|
-
return (
|
24
|
-
<>
|
25
|
-
<WebhookCreateModal
|
26
|
-
onSuccess={() => {
|
27
|
-
setCreateModalClosed();
|
28
|
-
reloadWithSearch(search);
|
29
|
-
}}
|
30
|
-
onCancel={setCreateModalClosed}
|
31
|
-
/>
|
32
|
-
<DefaultEmptyState
|
33
|
-
icon={type === 'error' ? 'error-circle-o' : 'add-circle-o'}
|
34
|
-
header={type === 'error' ? __('Error') : __('No Results')}
|
35
|
-
description={text}
|
36
|
-
documentation={null}
|
37
|
-
action={{
|
38
|
-
title: __('Create Webhook'),
|
39
|
-
onClick: () => setCreateModalOpen(),
|
40
|
-
}}
|
41
|
-
/>
|
42
|
-
</>
|
43
|
-
);
|
44
|
-
};
|
45
|
-
|
46
|
-
EmptyWebhooksIndexPage.propTypes = {
|
47
|
-
message: PropTypes.shape({
|
48
|
-
type: PropTypes.oneOf(['empty', 'error']),
|
49
|
-
text: PropTypes.string,
|
50
|
-
}),
|
51
|
-
search: PropTypes.string,
|
52
|
-
reloadWithSearch: PropTypes.func.isRequired,
|
53
|
-
};
|
54
|
-
|
55
|
-
EmptyWebhooksIndexPage.defaultProps = {
|
56
|
-
message: {
|
57
|
-
type: 'empty',
|
58
|
-
text: __('Try to create a new Webhook'),
|
59
|
-
},
|
60
|
-
search: '',
|
61
|
-
};
|
62
|
-
|
63
|
-
export default EmptyWebhooksIndexPage;
|