webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTable.js in katello-3.8.0.rc1 vs webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTable.js in katello-3.8.0.rc2
- old
+ new
@@ -1,57 +1,32 @@
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import { sprintf } from 'jed';
import { cloneDeep, findIndex, isEqual } from 'lodash';
-import { Table, Alert } from 'patternfly-react';
+import { Table } from 'patternfly-react';
import { LoadingState } from '../../../../move_to_pf/LoadingState';
import { Table as ForemanTable, TableBody as ForemanTableBody } from '../../../../move_to_foreman/components/common/table';
import ConfirmDialog from '../../../../move_to_foreman/components/common/ConfirmDialog';
import Dialog from '../../../../move_to_foreman/components/common/Dialog';
import { recordsValid } from '../../SubscriptionValidations';
import { createSubscriptionsTableSchema } from './SubscriptionsTableSchema';
import { buildTableRows, groupSubscriptionsByProductId, buildPools } from './SubscriptionsTableHelpers';
+import { renderTaskStartedToast } from '../../../Tasks/helpers';
+import {
+ BLOCKING_FOREMAN_TASK_TYPES,
+ MANIFEST_TASKS_BULK_SEARCH_ID,
+} from '../../SubscriptionConstants';
-const emptyStateData = {
- header: __('There are no Subscriptions to display'),
- description: __('Add Subscriptions to this Allocation to manage your Entitlements.'),
- documentation: {
- title: __('Learn more about adding Subscriptions to Allocations'),
- url: 'http://redhat.com',
- },
- action: {
- title: __('Add Subscriptions'),
- url: 'subscriptions/add',
- },
-};
-
-const ErrorAlerts = ({ errors }) => {
- const alerts = errors.filter(Boolean).map(e => (
- <Alert type={Alert.ALERT_TYPE_ERROR} key={e}>
- <span>{e}</span>
- </Alert>
- ));
-
- return (
- <div>
- {alerts}
- </div>
- );
-};
-ErrorAlerts.propTypes = {
- errors: PropTypes.arrayOf(PropTypes.string).isRequired,
-};
-
class SubscriptionsTable extends Component {
constructor(props) {
super(props);
this.state = {
rows: undefined,
subscriptions: undefined,
- groupdSubscriptions: undefined,
+ groupedSubscriptions: undefined,
updatedQuantity: {},
editing: false,
showUpdateConfirmDialog: false,
showCancelConfirmDialog: false,
showErrorDialog: false,
@@ -62,53 +37,53 @@
static getDerivedStateFromProps(nextProps, prevState) {
if (
nextProps.subscriptions !== undefined &&
!isEqual(nextProps.subscriptions, prevState.subscriptions)
) {
- const groupdSubscriptions = groupSubscriptionsByProductId(nextProps.subscriptions);
+ const groupedSubscriptions = groupSubscriptionsByProductId(nextProps.subscriptions);
const rows = buildTableRows(
- groupdSubscriptions,
+ groupedSubscriptions,
nextProps.subscriptions.availableQuantities,
prevState.updatedQuantity,
);
- return { rows, groupdSubscriptions, subscriptions: nextProps.subscriptions };
+ return { rows, groupedSubscriptions, subscriptions: nextProps.subscriptions };
}
return null;
}
toggleSubscriptionGroup(groupId) {
const { subscriptions } = this.props;
- const { groupdSubscriptions, updatedQuantity } = this.state;
- const { open } = groupdSubscriptions[groupId];
+ const { groupedSubscriptions, updatedQuantity } = this.state;
+ const { open } = groupedSubscriptions[groupId];
- groupdSubscriptions[groupId].open = !open;
+ groupedSubscriptions[groupId].open = !open;
const rows = buildTableRows(
- groupdSubscriptions,
+ groupedSubscriptions,
subscriptions.availableQuantities,
updatedQuantity,
);
- this.setState({ rows, groupdSubscriptions });
+ this.setState({ rows, groupedSubscriptions });
}
enableEditing(editingState) {
this.setState({
updatedQuantity: {},
editing: editingState,
});
}
updateRows(updatedQuantity) {
- const { groupdSubscriptions } = this.state;
+ const { groupedSubscriptions } = this.state;
const { subscriptions } = this.props;
const rows = buildTableRows(
- groupdSubscriptions,
+ groupedSubscriptions,
subscriptions.availableQuantities,
updatedQuantity,
);
this.setState({ rows, updatedQuantity });
}
@@ -132,11 +107,19 @@
}
confirmEdit() {
this.showUpdateConfirm(false);
if (Object.keys(this.state.updatedQuantity).length > 0) {
- this.props.updateQuantity(buildPools(this.state.updatedQuantity));
+ this.props.updateQuantity(buildPools(this.state.updatedQuantity))
+ .then(() =>
+ this.props.bulkSearch({
+ search_id: MANIFEST_TASKS_BULK_SEARCH_ID,
+ type: 'all',
+ active_only: true,
+ action_types: BLOCKING_FOREMAN_TASK_TYPES,
+ }))
+ .then(() => renderTaskStartedToast(this.props.task));
}
this.enableEditing(false);
}
cancelEdit() {
@@ -155,20 +138,21 @@
}
return false;
}
render() {
- const { subscriptions } = this.props;
- const { groupdSubscriptions } = this.state;
+ const { subscriptions, emptyState } = this.props;
+ const { groupedSubscriptions } = this.state;
+ const allSubscriptionResults = subscriptions.results;
const groupingController = {
isCollapseable: ({ rowData }) =>
// it is the first subscription in the group
- rowData.id === groupdSubscriptions[rowData.product_id].subscriptions[0].id &&
+ rowData.id === groupedSubscriptions[rowData.product_id].subscriptions[0].id &&
// the group contains more then one subscription
- groupdSubscriptions[rowData.product_id].subscriptions.length > 1,
- isCollapsed: ({ rowData }) => !groupdSubscriptions[rowData.product_id].open,
+ groupedSubscriptions[rowData.product_id].subscriptions.length > 1,
+ isCollapsed: ({ rowData }) => !groupedSubscriptions[rowData.product_id].open,
toggle: ({ rowData }) => this.toggleSubscriptionGroup(rowData.product_id),
};
const inlineEditController = {
isEditing: ({ rowData }) => (this.state.editing && rowData.available >= 0),
@@ -200,11 +184,12 @@
this.updateRows(updatedQuantity);
},
};
- const checkAllRowsSelected = () => this.state.rows.length === this.state.selectedRows.length;
+ const checkAllRowsSelected = () =>
+ allSubscriptionResults.length === this.state.selectedRows.length;
const updateDeleteButton = () => {
this.props.toggleDeleteButton(this.state.selectedRows.length > 0);
};
@@ -216,11 +201,11 @@
{ selectedRows: [] },
updateDeleteButton,
);
} else {
this.setState(
- { selectedRows: this.state.rows.map(row => row.id) },
+ { selectedRows: allSubscriptionResults.map(row => row.id) },
updateDeleteButton,
);
}
},
selectRow: ({ rowData }) => {
@@ -244,11 +229,11 @@
...pagination,
});
};
let bodyMessage;
- if (subscriptions.results.length === 0 && subscriptions.searchIsActive) {
+ if (allSubscriptionResults.length === 0 && subscriptions.searchIsActive) {
bodyMessage = __('No subscriptions match your search criteria.');
}
const columnsDefinition = createSubscriptionsTableSchema(
inlineEditController,
@@ -256,19 +241,13 @@
groupingController,
);
return (
<LoadingState loading={subscriptions.loading} loadingText={__('Loading')}>
- <ErrorAlerts
- errors={[
- subscriptions.error,
- subscriptions.quantitiesError,
- ]}
- />
<ForemanTable
columns={columnsDefinition}
- emptyState={emptyStateData}
+ emptyState={emptyState}
bodyMessage={bodyMessage}
rows={this.state.rows}
components={{
header: {
row: Table.TableInlineEditHeaderRow,
@@ -350,15 +329,23 @@
}
SubscriptionsTable.propTypes = {
loadSubscriptions: PropTypes.func.isRequired,
updateQuantity: PropTypes.func.isRequired,
+ emptyState: PropTypes.shape({}).isRequired,
subscriptions: PropTypes.shape({
results: PropTypes.array,
}).isRequired,
subscriptionDeleteModalOpen: PropTypes.bool.isRequired,
onDeleteSubscriptions: PropTypes.func.isRequired,
onSubscriptionDeleteModalClose: PropTypes.func.isRequired,
toggleDeleteButton: PropTypes.func.isRequired,
+ task: PropTypes.shape({}),
+ bulkSearch: PropTypes.func,
+};
+
+SubscriptionsTable.defaultProps = {
+ task: { humanized: {} },
+ bulkSearch: undefined,
};
export default SubscriptionsTable;