foreman_rh_cloud 0.9.6 → 0.9.7
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/controllers/foreman_inventory_upload/accounts_controller.rb +2 -6
- data/app/controllers/foreman_rh_cloud/react_controller.rb +8 -0
- data/app/models/setting/rh_cloud.rb +1 -0
- data/app/views/foreman_rh_cloud/react/inventory_upload.html.erb +1 -0
- data/app/views/{foreman_inventory_upload/layouts/react.html.erb → layouts/foreman_rh_cloud/application.html.erb} +2 -2
- data/config/routes.rb +4 -1
- data/lib/foreman_inventory_upload/generators/fact_helpers.rb +43 -0
- data/lib/foreman_inventory_upload/generators/queries.rb +5 -0
- data/lib/foreman_inventory_upload/generators/slice.rb +2 -1
- data/lib/foreman_rh_cloud/engine.rb +16 -4
- data/lib/foreman_rh_cloud/version.rb +1 -1
- data/test/unit/slice_generator_test.rb +132 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/AccountList.fixtures.js +6 -2
- data/webpack/ForemanInventoryUpload/Components/AccountList/AccountList.js +13 -10
- data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListActions.js +3 -2
- data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListHelper.js +10 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/AccountListSelectors.js +1 -1
- data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyResults/EmptyResults.js +15 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyResults/__tests__/EmptyResults.test.js +13 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyResults/__tests__/__snapshots__/EmptyResults.test.js.snap +18 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyResults/emptyResults.scss +7 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyResults/index.js +1 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/Components/ListItem/ListItem.js +1 -4
- data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountList.test.js +1 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListHelper.test.js +12 -0
- data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListIntegration.test.js +1 -1
- data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListSelectors.test.js +7 -8
- data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/__snapshots__/AccountList.test.js.snap +2 -3
- data/webpack/ForemanInventoryUpload/Components/AccountList/index.js +2 -0
- data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherActions.js +4 -1
- data/webpack/ForemanInventoryUpload/Components/Dashboard/DashboardActions.js +4 -3
- data/webpack/ForemanInventoryUpload/Components/Dashboard/DashboardSelectors.js +1 -1
- data/webpack/ForemanInventoryUpload/Components/Dashboard/__tests__/DashboardActions.test.js +2 -3
- data/webpack/ForemanInventoryUpload/Components/Dashboard/__tests__/DashboardIntegration.test.js +1 -1
- data/webpack/ForemanInventoryUpload/Components/Dashboard/__tests__/DashboardSelectors.test.js +3 -2
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/Components/ClearButton/ClearButton.js +26 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/Components/ClearButton/index.js +1 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilter.fixtures.js +2 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilter.js +39 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilterActions.js +16 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilterConstants.js +3 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilterReducer.js +36 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/InventoryFilterSelectors.js +7 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/InventoryFilter.test.js +14 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/InventoryFilterActions.test.js +14 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/InventoryFilterReducer.test.js +35 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/InventoryFilterSelectors.test.js +21 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/InventoryFilter.test.js.snap +25 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/InventoryFilterActions.test.js.snap +17 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/InventoryFilterReducer.test.js.snap +25 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/InventoryFilterSelectors.test.js.snap +9 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/__snapshots__/integration.test.js.snap +31 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/__tests__/integration.test.js +18 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/index.js +17 -0
- data/webpack/ForemanInventoryUpload/Components/InventoryFilter/inventoryFilter.scss +28 -0
- data/webpack/ForemanInventoryUpload/Components/PageHeader/PageHeader.js +12 -3
- data/webpack/ForemanInventoryUpload/Components/PageHeader/__tests__/__snapshots__/PageHeader.test.js.snap +11 -2
- data/webpack/ForemanInventoryUpload/Components/PageHeader/pageHeader.scss +3 -0
- data/webpack/ForemanInventoryUpload/ForemanInventoryConstants.js +3 -0
- data/webpack/ForemanInventoryUpload/ForemanInventoryHelpers.js +4 -0
- data/webpack/ForemanInventoryUpload/ForemanInventoryUpload.js +16 -8
- data/webpack/ForemanInventoryUpload/ForemanInventoryUploadReducers.js +4 -4
- data/webpack/ForemanInventoryUpload/__tests__/ForemanInventoryHelpers.test.js +11 -0
- data/webpack/ForemanInventoryUpload/{ForemanInventoryUpload.test.js → __tests__/ForemanInventoryUpload.test.js} +1 -1
- data/webpack/ForemanInventoryUpload/__tests__/__snapshots__/ForemanInventoryHelpers.test.js.snap +3 -0
- data/webpack/ForemanInventoryUpload/{__snapshots__ → __tests__/__snapshots__}/ForemanInventoryUpload.test.js.snap +0 -0
- data/webpack/ForemanRhCloudHelpers.js +6 -0
- data/webpack/ForemanRhCloudReducers.js +8 -0
- data/webpack/ForemanRhCloudSelectors.js +3 -0
- data/webpack/ForemanRhCloudTestHelpers.js +5 -0
- data/webpack/__mocks__/foremanReact/components/Layout/LayoutConstants.js +1 -0
- data/webpack/__tests__/ForemanRhCloudHelpers.test.js +11 -0
- data/webpack/__tests__/ForemanRhCloudSelectors.test.js +17 -0
- data/webpack/__tests__/ForemanRhCloudTestHelpers.test.js +10 -0
- data/webpack/__tests__/__snapshots__/ForemanRhCloudHelpers.test.js.snap +3 -0
- data/webpack/__tests__/__snapshots__/ForemanRhCloudSelectors.test.js.snap +15 -0
- data/webpack/__tests__/__snapshots__/ForemanRhCloudTestHelpers.test.js.snap +11 -0
- data/webpack/index.js +1 -1
- metadata +49 -9
- data/app/controllers/foreman_inventory_upload/react_controller.rb +0 -7
- data/test/unit/slice_generator_test.rb.orig +0 -280
- data/webpack/ForemanInventoryUpload/ForemanInventoryUploadSelectors.js +0 -4
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const filterAccounts = (accounts, accountIds, filterTerm) => {
|
|
2
|
+
if (!filterTerm || !accountIds.length) {
|
|
3
|
+
return accountIds;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
const filterTermLowerCased = filterTerm.toLowerCase();
|
|
7
|
+
return accountIds.filter(id =>
|
|
8
|
+
accounts[id].label.toLowerCase().includes(filterTermLowerCased)
|
|
9
|
+
);
|
|
10
|
+
};
|
data/webpack/ForemanInventoryUpload/Components/AccountList/Components/EmptyResults/EmptyResults.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { EmptyState, Icon } from 'patternfly-react';
|
|
3
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
|
4
|
+
import './emptyResults.scss';
|
|
5
|
+
|
|
6
|
+
const inventoryEmptyResults = () => (
|
|
7
|
+
<EmptyState>
|
|
8
|
+
<EmptyState.Title>
|
|
9
|
+
<Icon className="no_results_icon" name="meh-o" />
|
|
10
|
+
{__("Oops! Couldn't find organization that matches your query")}
|
|
11
|
+
</EmptyState.Title>
|
|
12
|
+
</EmptyState>
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
export default inventoryEmptyResults;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
|
|
2
|
+
|
|
3
|
+
import EmptyResults from '../EmptyResults';
|
|
4
|
+
|
|
5
|
+
const fixtures = {
|
|
6
|
+
'render without Props': {},
|
|
7
|
+
/** fixtures, props for the component */
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
describe('EmptyResults', () => {
|
|
11
|
+
describe('rendering', () =>
|
|
12
|
+
testComponentSnapshotsWithFixtures(EmptyResults, fixtures));
|
|
13
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`EmptyResults rendering render without Props 1`] = `
|
|
4
|
+
<EmptyState
|
|
5
|
+
className=""
|
|
6
|
+
>
|
|
7
|
+
<EmptyStateTitle
|
|
8
|
+
className=""
|
|
9
|
+
>
|
|
10
|
+
<Icon
|
|
11
|
+
className="no_results_icon"
|
|
12
|
+
name="meh-o"
|
|
13
|
+
type="fa"
|
|
14
|
+
/>
|
|
15
|
+
Oops! Couldn't find organization that matches your query
|
|
16
|
+
</EmptyStateTitle>
|
|
17
|
+
</EmptyState>
|
|
18
|
+
`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './EmptyResults';
|
|
@@ -4,7 +4,7 @@ import PropTypes from 'prop-types';
|
|
|
4
4
|
import ListItemStatus from '../ListItemStatus';
|
|
5
5
|
import Dashboard from '../../../Dashboard';
|
|
6
6
|
|
|
7
|
-
const ListItem = ({ accountID, account
|
|
7
|
+
const ListItem = ({ accountID, account }) => (
|
|
8
8
|
<ListView.Item
|
|
9
9
|
leftContent={<ListView.Icon name="user" />}
|
|
10
10
|
heading={account.label}
|
|
@@ -13,7 +13,6 @@ const ListItem = ({ accountID, account, initExpanded }) => (
|
|
|
13
13
|
]}
|
|
14
14
|
stacked
|
|
15
15
|
hideCloseIcon
|
|
16
|
-
initExpanded={initExpanded}
|
|
17
16
|
>
|
|
18
17
|
<Dashboard accountID={accountID} account={account} />
|
|
19
18
|
</ListView.Item>
|
|
@@ -26,7 +25,6 @@ ListItem.propTypes = {
|
|
|
26
25
|
upload_report_status: PropTypes.string,
|
|
27
26
|
label: PropTypes.string,
|
|
28
27
|
}),
|
|
29
|
-
initExpanded: PropTypes.bool,
|
|
30
28
|
};
|
|
31
29
|
|
|
32
30
|
ListItem.defaultProps = {
|
|
@@ -35,7 +33,6 @@ ListItem.defaultProps = {
|
|
|
35
33
|
upload_report_status: 'unknown',
|
|
36
34
|
label: 'default_org_name',
|
|
37
35
|
},
|
|
38
|
-
initExpanded: false,
|
|
39
36
|
};
|
|
40
37
|
|
|
41
38
|
export default ListItem;
|
data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListHelper.test.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { filterAccounts } from '../AccountListHelper';
|
|
2
|
+
import { accounts, accountIDs } from '../AccountList.fixtures';
|
|
3
|
+
|
|
4
|
+
describe('AccountList helpers', () => {
|
|
5
|
+
it('account ids filter should return all accounts where label contains "test"', () => {
|
|
6
|
+
expect(filterAccounts(accounts, accountIDs, 'test')).toEqual(accountIDs);
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
it('account ids filter should not match', () => {
|
|
10
|
+
expect(filterAccounts(accounts, accountIDs, 'no_match')).toEqual([]);
|
|
11
|
+
});
|
|
12
|
+
});
|
data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListIntegration.test.js
CHANGED
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { IntegrationTestHelper } from 'react-redux-test-utils';
|
|
3
3
|
|
|
4
4
|
import AccountList from '../index';
|
|
5
|
-
import reducers from '
|
|
5
|
+
import reducers from '../../../../ForemanRhCloudReducers';
|
|
6
6
|
|
|
7
7
|
describe('AccountList integration test', () => {
|
|
8
8
|
it('should flow', async () => {
|
data/webpack/ForemanInventoryUpload/Components/AccountList/__tests__/AccountListSelectors.test.js
CHANGED
|
@@ -10,16 +10,15 @@ import {
|
|
|
10
10
|
accounts,
|
|
11
11
|
autoUploadEnabled,
|
|
12
12
|
} from '../AccountList.fixtures';
|
|
13
|
+
import { inventoryStateWrapper } from '../../../../ForemanRhCloudTestHelpers';
|
|
13
14
|
|
|
14
|
-
const state = {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
autoUploadEnabled,
|
|
20
|
-
},
|
|
15
|
+
const state = inventoryStateWrapper({
|
|
16
|
+
accountsList: {
|
|
17
|
+
accounts,
|
|
18
|
+
pollingProcessID,
|
|
19
|
+
autoUploadEnabled,
|
|
21
20
|
},
|
|
22
|
-
};
|
|
21
|
+
});
|
|
23
22
|
|
|
24
23
|
const fixtures = {
|
|
25
24
|
'should return AccountsList': () => selectAccountsList(state),
|
|
@@ -13,7 +13,6 @@ exports[`AccountList rendering render with props 1`] = `
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
accountID="Account1"
|
|
16
|
-
initExpanded={true}
|
|
17
16
|
key="0"
|
|
18
17
|
/>
|
|
19
18
|
<ListItem
|
|
@@ -25,7 +24,6 @@ exports[`AccountList rendering render with props 1`] = `
|
|
|
25
24
|
}
|
|
26
25
|
}
|
|
27
26
|
accountID="Account2"
|
|
28
|
-
initExpanded={false}
|
|
29
27
|
key="1"
|
|
30
28
|
/>
|
|
31
29
|
<ListItem
|
|
@@ -37,8 +35,9 @@ exports[`AccountList rendering render with props 1`] = `
|
|
|
37
35
|
}
|
|
38
36
|
}
|
|
39
37
|
accountID="Account3"
|
|
40
|
-
initExpanded={false}
|
|
41
38
|
key="2"
|
|
42
39
|
/>
|
|
43
40
|
</ListView>
|
|
44
41
|
`;
|
|
42
|
+
|
|
43
|
+
exports[`AccountList rendering show empty results 1`] = `<inventoryEmptyResults />`;
|
|
@@ -9,12 +9,14 @@ import {
|
|
|
9
9
|
selectPollingProcessID,
|
|
10
10
|
selectError,
|
|
11
11
|
} from './AccountListSelectors';
|
|
12
|
+
import { selectFilterTerm } from '../InventoryFilter/InventoryFilterSelectors';
|
|
12
13
|
|
|
13
14
|
// map state to props
|
|
14
15
|
const mapStateToProps = state => ({
|
|
15
16
|
accounts: selectAccounts(state),
|
|
16
17
|
pollingProcessID: selectPollingProcessID(state),
|
|
17
18
|
error: selectError(state),
|
|
19
|
+
filterTerm: selectFilterTerm(state),
|
|
18
20
|
});
|
|
19
21
|
|
|
20
22
|
// map action dispatchers to props
|
data/webpack/ForemanInventoryUpload/Components/AutoUploadSwitcher/AutoUploadSwitcherActions.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import API from 'foremanReact/API';
|
|
2
|
+
import { inventoryUrl } from '../../ForemanInventoryHelpers';
|
|
2
3
|
import {
|
|
3
4
|
AUTO_UPLOAD_TOGGLE,
|
|
4
5
|
AUTO_UPLOAD_TOGGLE_ERROR,
|
|
@@ -9,7 +10,9 @@ export const handleToggle = currentAutoUploadEnabled => async dispatch => {
|
|
|
9
10
|
try {
|
|
10
11
|
const {
|
|
11
12
|
data: { autoUploadEnabled },
|
|
12
|
-
} = await API.post('auto_upload', {
|
|
13
|
+
} = await API.post(inventoryUrl('auto_upload'), {
|
|
14
|
+
value: toggledAutoUploadEnabled,
|
|
15
|
+
});
|
|
13
16
|
dispatch({
|
|
14
17
|
type: AUTO_UPLOAD_TOGGLE,
|
|
15
18
|
payload: {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import API from 'foremanReact/API';
|
|
2
|
+
import { selectActiveTab } from './DashboardSelectors';
|
|
3
|
+
import { inventoryUrl } from '../../ForemanInventoryHelpers';
|
|
2
4
|
import {
|
|
3
5
|
INVENTORY_POLLING_START,
|
|
4
6
|
INVENTORY_POLLING_STOP,
|
|
@@ -8,7 +10,6 @@ import {
|
|
|
8
10
|
INVENTORY_REPORTS_DOWNLOAD,
|
|
9
11
|
INVENTORY_TOGGLE_TERMINAL_FULL_SCREEN,
|
|
10
12
|
} from './DashboardConstants';
|
|
11
|
-
import { selectActiveTab } from './DashboardSelectors';
|
|
12
13
|
|
|
13
14
|
export const startPolling = (accountID, pollingProcessID) => ({
|
|
14
15
|
type: INVENTORY_POLLING_START,
|
|
@@ -34,7 +35,7 @@ export const fetchLogs = accountID => async (dispatch, getState) => {
|
|
|
34
35
|
const processController = activeTab === 'uploading' ? 'uploads' : 'reports';
|
|
35
36
|
const {
|
|
36
37
|
data: { output, scheduled },
|
|
37
|
-
} = await API.get(`${accountID}/${processController}/last`);
|
|
38
|
+
} = await API.get(inventoryUrl(`${accountID}/${processController}/last`));
|
|
38
39
|
const outputArray = output.split('\n');
|
|
39
40
|
dispatch({
|
|
40
41
|
type: INVENTORY_POLLING,
|
|
@@ -66,7 +67,7 @@ export const setActiveTab = (accountID, tabName) => ({
|
|
|
66
67
|
});
|
|
67
68
|
|
|
68
69
|
export const downloadReports = accountID => {
|
|
69
|
-
window.location.href =
|
|
70
|
+
window.location.href = inventoryUrl(`${accountID}/uploads/file`);
|
|
70
71
|
return {
|
|
71
72
|
type: INVENTORY_REPORTS_DOWNLOAD,
|
|
72
73
|
payload: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { selectForemanInventoryUpload } from '
|
|
1
|
+
import { selectForemanInventoryUpload } from '../../../ForemanRhCloudSelectors';
|
|
2
2
|
|
|
3
3
|
export const selectDashboard = (state, accountID) =>
|
|
4
4
|
selectForemanInventoryUpload(state).dashboard[accountID] || {};
|
|
@@ -14,14 +14,13 @@ import {
|
|
|
14
14
|
activeTab,
|
|
15
15
|
accountID,
|
|
16
16
|
} from '../Dashboard.fixtures';
|
|
17
|
+
import { inventoryStateWrapper } from '../../../../ForemanRhCloudTestHelpers';
|
|
17
18
|
|
|
18
19
|
jest.mock('foremanReact/API');
|
|
19
20
|
API.get.mockImplementation(() => serverMock);
|
|
20
21
|
|
|
21
22
|
const runWithGetState = (state, action, params) => dispatch => {
|
|
22
|
-
const getState = () => ({
|
|
23
|
-
dashboard: state,
|
|
24
|
-
});
|
|
23
|
+
const getState = () => inventoryStateWrapper({ dashboard: state });
|
|
25
24
|
action(params)(dispatch, getState);
|
|
26
25
|
};
|
|
27
26
|
|
data/webpack/ForemanInventoryUpload/Components/Dashboard/__tests__/DashboardIntegration.test.js
CHANGED
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { IntegrationTestHelper } from 'react-redux-test-utils';
|
|
3
3
|
|
|
4
4
|
import Dashboard from '../Dashboard';
|
|
5
|
-
import reducers from '
|
|
5
|
+
import reducers from '../../../../ForemanRhCloudReducers';
|
|
6
6
|
import { accountID } from '../Dashboard.fixtures';
|
|
7
7
|
|
|
8
8
|
describe('Dashboard integration test', () => {
|
data/webpack/ForemanInventoryUpload/Components/Dashboard/__tests__/DashboardSelectors.test.js
CHANGED
|
@@ -13,8 +13,9 @@ import {
|
|
|
13
13
|
activeTab,
|
|
14
14
|
accountID,
|
|
15
15
|
} from '../Dashboard.fixtures';
|
|
16
|
+
import { inventoryStateWrapper } from '../../../../ForemanRhCloudTestHelpers';
|
|
16
17
|
|
|
17
|
-
const state = {
|
|
18
|
+
const state = inventoryStateWrapper({
|
|
18
19
|
dashboard: {
|
|
19
20
|
[accountID]: {
|
|
20
21
|
generating: {
|
|
@@ -29,7 +30,7 @@ const state = {
|
|
|
29
30
|
pollingProcessID,
|
|
30
31
|
},
|
|
31
32
|
},
|
|
32
|
-
};
|
|
33
|
+
});
|
|
33
34
|
|
|
34
35
|
const fixtures = {
|
|
35
36
|
'should return Dashboard': () => selectDashboard(state, accountID),
|
data/webpack/ForemanInventoryUpload/Components/InventoryFilter/Components/ClearButton/ClearButton.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { Icon, OverlayTrigger, Tooltip, noop } from 'patternfly-react';
|
|
4
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
|
5
|
+
|
|
6
|
+
const ClearButton = ({ onClear }) => (
|
|
7
|
+
<OverlayTrigger
|
|
8
|
+
overlay={
|
|
9
|
+
<Tooltip id="inventory_filter_clear_overlay">{__('Clear')}</Tooltip>
|
|
10
|
+
}
|
|
11
|
+
placement="top"
|
|
12
|
+
trigger={['hover', 'focus']}
|
|
13
|
+
>
|
|
14
|
+
<Icon name="close" className="inventory-clear-button" onClick={onClear} />
|
|
15
|
+
</OverlayTrigger>
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
ClearButton.propTypes = {
|
|
19
|
+
onClear: PropTypes.func,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
ClearButton.defaultProps = {
|
|
23
|
+
onClear: noop,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export default ClearButton;
|
data/webpack/ForemanInventoryUpload/Components/InventoryFilter/Components/ClearButton/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from './ClearButton';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { FormGroup, FormControl, noop } from 'patternfly-react';
|
|
4
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
|
5
|
+
import ClearButton from './Components/ClearButton';
|
|
6
|
+
import './inventoryFilter.scss';
|
|
7
|
+
|
|
8
|
+
const InventoryFilter = ({
|
|
9
|
+
handleFilterChange,
|
|
10
|
+
handleFilterClear,
|
|
11
|
+
filterTerm,
|
|
12
|
+
}) => (
|
|
13
|
+
<form id="inventory_filter_form">
|
|
14
|
+
<FormGroup controlId="inventory_filter_input">
|
|
15
|
+
<FormControl
|
|
16
|
+
value={filterTerm}
|
|
17
|
+
type="text"
|
|
18
|
+
placeholder={__('Filter..')}
|
|
19
|
+
bsSize="lg"
|
|
20
|
+
onChange={e => handleFilterChange(e.target.value)}
|
|
21
|
+
/>
|
|
22
|
+
<ClearButton onClear={handleFilterClear} />
|
|
23
|
+
</FormGroup>
|
|
24
|
+
</form>
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
InventoryFilter.propTypes = {
|
|
28
|
+
handleFilterChange: PropTypes.func,
|
|
29
|
+
handleFilterClear: PropTypes.func,
|
|
30
|
+
filterTerm: PropTypes.string,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
InventoryFilter.defaultProps = {
|
|
34
|
+
handleFilterChange: noop,
|
|
35
|
+
handleFilterClear: noop,
|
|
36
|
+
filterTerm: '',
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export default InventoryFilter;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {
|
|
2
|
+
INVENTORY_FILTER_UPDATE,
|
|
3
|
+
INVENTORY_FILTER_CLEAR,
|
|
4
|
+
} from './InventoryFilterConstants';
|
|
5
|
+
|
|
6
|
+
export const handleFilterChange = filterTerm => ({
|
|
7
|
+
type: INVENTORY_FILTER_UPDATE,
|
|
8
|
+
payload: {
|
|
9
|
+
filterTerm,
|
|
10
|
+
},
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export const handleFilterClear = () => ({
|
|
14
|
+
type: INVENTORY_FILTER_CLEAR,
|
|
15
|
+
payload: {},
|
|
16
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import Immutable from 'seamless-immutable';
|
|
2
|
+
import { LAYOUT_CHANGE_ORG } from 'foremanReact/components/Layout/LayoutConstants';
|
|
3
|
+
import {
|
|
4
|
+
INVENTORY_FILTER_UPDATE,
|
|
5
|
+
INVENTORY_FILTER_CLEAR,
|
|
6
|
+
ANY_ORGANIZATION,
|
|
7
|
+
} from './InventoryFilterConstants';
|
|
8
|
+
|
|
9
|
+
const initialState = Immutable({
|
|
10
|
+
filterTerm: '',
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export default (
|
|
14
|
+
state = initialState,
|
|
15
|
+
{ type, payload: { filterTerm, org } = {} }
|
|
16
|
+
) => {
|
|
17
|
+
switch (type) {
|
|
18
|
+
case INVENTORY_FILTER_UPDATE:
|
|
19
|
+
return state.merge({
|
|
20
|
+
filterTerm,
|
|
21
|
+
});
|
|
22
|
+
case INVENTORY_FILTER_CLEAR:
|
|
23
|
+
return state.merge({
|
|
24
|
+
filterTerm: '',
|
|
25
|
+
});
|
|
26
|
+
case LAYOUT_CHANGE_ORG: {
|
|
27
|
+
const { title } = org;
|
|
28
|
+
const term = title === ANY_ORGANIZATION ? '' : title;
|
|
29
|
+
return state.merge({
|
|
30
|
+
filterTerm: term,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
default:
|
|
34
|
+
return state;
|
|
35
|
+
}
|
|
36
|
+
};
|