mirror of
https://github.com/ansible/awx.git
synced 2026-03-05 10:41:05 -03:30
Merge pull request #4733 from keithjgrant/4612-lookup-param-bugs
Prevent Lookup search filters from affecting other Lookups on page Reviewed-by: https://github.com/apps/softwarefactory-project-zuul
This commit is contained in:
@@ -40,6 +40,7 @@ class InstanceGroupsLookup extends React.Component {
|
|||||||
value={value}
|
value={value}
|
||||||
onLookupSave={onChange}
|
onLookupSave={onChange}
|
||||||
getItems={getInstanceGroups}
|
getItems={getInstanceGroups}
|
||||||
|
qsNamespace="instance-group"
|
||||||
multiple
|
multiple
|
||||||
columns={[
|
columns={[
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ class InventoriesLookup extends React.Component {
|
|||||||
onLookupSave={onChange}
|
onLookupSave={onChange}
|
||||||
getItems={getInventories}
|
getItems={getInventories}
|
||||||
required={required}
|
required={required}
|
||||||
|
qsNamespace="inventory"
|
||||||
columns={[
|
columns={[
|
||||||
{ name: i18n._(t`Name`), key: 'name', isSortable: true },
|
{ name: i18n._(t`Name`), key: 'name', isSortable: true },
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ class Lookup extends React.Component {
|
|||||||
count: 0,
|
count: 0,
|
||||||
error: null,
|
error: null,
|
||||||
};
|
};
|
||||||
this.qsConfig = getQSConfig('lookup', {
|
this.qsConfig = getQSConfig(props.qsNamespace, {
|
||||||
page: 1,
|
page: 1,
|
||||||
page_size: 5,
|
page_size: 5,
|
||||||
order_by: props.sortedColumnKey,
|
order_by: props.sortedColumnKey,
|
||||||
@@ -73,6 +73,7 @@ class Lookup extends React.Component {
|
|||||||
this.toggleSelected = this.toggleSelected.bind(this);
|
this.toggleSelected = this.toggleSelected.bind(this);
|
||||||
this.saveModal = this.saveModal.bind(this);
|
this.saveModal = this.saveModal.bind(this);
|
||||||
this.getData = this.getData.bind(this);
|
this.getData = this.getData.bind(this);
|
||||||
|
this.clearQSParams = this.clearQSParams.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
@@ -163,6 +164,8 @@ class Lookup extends React.Component {
|
|||||||
lookupSelectedItems = multiple ? [...value] : [value];
|
lookupSelectedItems = multiple ? [...value] : [value];
|
||||||
}
|
}
|
||||||
this.setState({ lookupSelectedItems });
|
this.setState({ lookupSelectedItems });
|
||||||
|
} else {
|
||||||
|
this.clearQSParams();
|
||||||
}
|
}
|
||||||
this.setState(prevState => ({
|
this.setState(prevState => ({
|
||||||
isModalOpen: !prevState.isModalOpen,
|
isModalOpen: !prevState.isModalOpen,
|
||||||
@@ -179,6 +182,14 @@ class Lookup extends React.Component {
|
|||||||
this.handleModalToggle();
|
this.handleModalToggle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clearQSParams() {
|
||||||
|
const { history } = this.props;
|
||||||
|
const parts = history.location.search.replace(/^\?/, '').split('&');
|
||||||
|
const ns = this.qsConfig.namespace;
|
||||||
|
const otherParts = parts.filter(param => !param.startsWith(`${ns}.`));
|
||||||
|
history.push(`${history.location.pathname}?${otherParts.join('&')}`);
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const {
|
const {
|
||||||
isModalOpen,
|
isModalOpen,
|
||||||
@@ -303,6 +314,7 @@ Lookup.propTypes = {
|
|||||||
sortedColumnKey: string.isRequired,
|
sortedColumnKey: string.isRequired,
|
||||||
multiple: bool,
|
multiple: bool,
|
||||||
required: bool,
|
required: bool,
|
||||||
|
qsNamespace: string,
|
||||||
};
|
};
|
||||||
|
|
||||||
Lookup.defaultProps = {
|
Lookup.defaultProps = {
|
||||||
@@ -312,6 +324,7 @@ Lookup.defaultProps = {
|
|||||||
value: null,
|
value: null,
|
||||||
multiple: false,
|
multiple: false,
|
||||||
required: false,
|
required: false,
|
||||||
|
qsNamespace: 'lookup',
|
||||||
};
|
};
|
||||||
|
|
||||||
export { Lookup as _Lookup };
|
export { Lookup as _Lookup };
|
||||||
|
|||||||
@@ -359,4 +359,33 @@ describe('<Lookup />', () => {
|
|||||||
expect(getItems).toHaveBeenCalledTimes(2);
|
expect(getItems).toHaveBeenCalledTimes(2);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should clear its query params when closed', async () => {
|
||||||
|
mockData = [{ name: 'foo', id: 1, isChecked: false }];
|
||||||
|
const history = createMemoryHistory({
|
||||||
|
initialEntries: ['/organizations/add?inventory.name=foo&bar=baz'],
|
||||||
|
});
|
||||||
|
wrapper = mountWithContexts(
|
||||||
|
<_Lookup
|
||||||
|
multiple
|
||||||
|
name="foo"
|
||||||
|
lookupHeader="Foo Bar"
|
||||||
|
onLookupSave={() => {}}
|
||||||
|
value={mockData}
|
||||||
|
columns={mockColumns}
|
||||||
|
sortedColumnKey="name"
|
||||||
|
getItems={() => {}}
|
||||||
|
location={{ history }}
|
||||||
|
history={history}
|
||||||
|
qsNamespace="inventory"
|
||||||
|
i18n={{ _: val => val.toString() }}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
wrapper
|
||||||
|
.find('InputGroup Button')
|
||||||
|
.at(0)
|
||||||
|
.invoke('onClick')();
|
||||||
|
wrapper.find('Modal').invoke('onClose')();
|
||||||
|
expect(history.location.search).toEqual('?bar=baz');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ class ProjectLookup extends React.Component {
|
|||||||
getItems={loadProjects}
|
getItems={loadProjects}
|
||||||
required={required}
|
required={required}
|
||||||
sortedColumnKey="name"
|
sortedColumnKey="name"
|
||||||
|
qsNamespace="project"
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user