Merge "fix: fix multi role select in transfer component"

This commit is contained in:
Zuul 2022-06-29 02:31:34 +00:00 committed by Gerrit Code Review
commit b74b026ace
5 changed files with 33 additions and 6 deletions

View File

@ -24,6 +24,8 @@ const TableTransfer = ({
rightColumns, rightColumns,
pageSize, pageSize,
loading, loading,
onRowLeft,
onRowRight,
...restProps ...restProps
}) => ( }) => (
<Transfer {...restProps} showSelectAll={false}> <Transfer {...restProps} showSelectAll={false}>
@ -36,6 +38,7 @@ const TableTransfer = ({
disabled: listDisabled, disabled: listDisabled,
}) => { }) => {
const columns = direction === 'left' ? leftColumns : rightColumns; const columns = direction === 'left' ? leftColumns : rightColumns;
const currentOnRow = direction === 'left' ? onRowLeft : onRowRight;
const rowSelection = { const rowSelection = {
getCheckboxProps: (item) => ({ getCheckboxProps: (item) => ({
@ -59,6 +62,15 @@ const TableTransfer = ({
pageSize, pageSize,
}; };
const onRowDefault = ({ key, disabled: itemDisabled }) => ({
onClick: () => {
if (itemDisabled || listDisabled) return;
onItemSelect(key, !listSelectedKeys.includes(key));
},
});
const onRow = currentOnRow || onRowDefault;
return ( return (
<Table <Table
loading={loading} loading={loading}
@ -68,12 +80,7 @@ const TableTransfer = ({
pagination={pagination} pagination={pagination}
size="small" size="small"
style={{ pointerEvents: listDisabled ? 'none' : null }} style={{ pointerEvents: listDisabled ? 'none' : null }}
onRow={({ key, disabled: itemDisabled }) => ({ onRow={onRow}
onClick: () => {
if (itemDisabled || listDisabled) return;
onItemSelect(key, !listSelectedKeys.includes(key));
},
})}
/> />
); );
}} }}
@ -94,6 +101,8 @@ export default class Index extends Component {
value: PropTypes.array, value: PropTypes.array,
pageSize: PropTypes.number, pageSize: PropTypes.number,
loading: PropTypes.bool, loading: PropTypes.bool,
onRowLeft: PropTypes.func,
onRowRight: PropTypes.func,
}; };
static defaultProps = { static defaultProps = {
@ -154,6 +163,8 @@ export default class Index extends Component {
titles, titles,
pageSize, pageSize,
loading, loading,
onRowLeft,
onRowRight,
} = this.props; } = this.props;
const { targetKeys } = this.state; const { targetKeys } = this.state;
return ( return (
@ -170,6 +181,8 @@ export default class Index extends Component {
leftColumns={leftTableColumns} leftColumns={leftTableColumns}
rightColumns={rightTableColumns} rightColumns={rightTableColumns}
loading={loading} loading={loading}
onRowLeft={onRowLeft}
onRowRight={onRowRight}
/> />
</> </>
); );

View File

@ -23,6 +23,7 @@ import {
nameDomainColumns, nameDomainColumns,
transferFilterOption, transferFilterOption,
} from 'resources/keystone/domain'; } from 'resources/keystone/domain';
import { roleFilterOption } from 'resources/keystone/role';
export class ManageUser extends ModalAction { export class ManageUser extends ModalAction {
static id = 'management-user'; static id = 'management-user';
@ -136,6 +137,7 @@ export class ManageUser extends ModalAction {
mode="multiple" mode="multiple"
options={this.userRolesList(id)} options={this.userRolesList(id)}
defaultValue={this.defaultRoles(id)} defaultValue={this.defaultRoles(id)}
filterOption={roleFilterOption}
onChange={(value, option) => { onChange={(value, option) => {
this.onSelectChange(value, option, id); this.onSelectChange(value, option, id);
}} }}
@ -204,6 +206,7 @@ export class ManageUser extends ModalAction {
filterOption: transferFilterOption, filterOption: transferFilterOption,
wrapperCol: this.wrapperCol, wrapperCol: this.wrapperCol,
loading: this.userStore.list.isLoading, loading: this.userStore.list.isLoading,
onRowRight: () => null,
}, },
]; ];
} }

View File

@ -23,6 +23,7 @@ import {
nameDomainColumns, nameDomainColumns,
transferFilterOption, transferFilterOption,
} from 'resources/keystone/domain'; } from 'resources/keystone/domain';
import { roleFilterOption } from 'resources/keystone/role';
export class ManageUserGroup extends ModalAction { export class ManageUserGroup extends ModalAction {
static id = 'manage-group-group'; static id = 'manage-group-group';
@ -124,6 +125,7 @@ export class ManageUserGroup extends ModalAction {
mode="multiple" mode="multiple"
options={this.groupRolesList(groupId)} options={this.groupRolesList(groupId)}
defaultValue={this.defaultRoles(groupId)} defaultValue={this.defaultRoles(groupId)}
filterOption={roleFilterOption}
onChange={(value, option) => { onChange={(value, option) => {
this.onSubChange(value, option, groupId); this.onSubChange(value, option, groupId);
}} }}
@ -204,6 +206,7 @@ export class ManageUserGroup extends ModalAction {
onChange: this.onChangeUserGroup, onChange: this.onChangeUserGroup,
wrapperCol: this.wrapperCol, wrapperCol: this.wrapperCol,
loading: this.userGroupStore.list.isLoading, loading: this.userGroupStore.list.isLoading,
onRowRight: () => null,
}, },
]; ];
} }

View File

@ -32,6 +32,7 @@ import {
nameDomainColumns, nameDomainColumns,
transferFilterOption, transferFilterOption,
} from 'resources/keystone/domain'; } from 'resources/keystone/domain';
import { roleFilterOption } from 'resources/keystone/role';
export class Create extends FormAction { export class Create extends FormAction {
constructor(props) { constructor(props) {
@ -167,6 +168,7 @@ export class Create extends FormAction {
mode="multiple" mode="multiple"
options={this.projectRolesList(projectId)} options={this.projectRolesList(projectId)}
defaultValue={this.defaultRoles()} defaultValue={this.defaultRoles()}
filterOption={roleFilterOption}
onChange={(value, option) => { onChange={(value, option) => {
this.onSelectChange(value, option, projectId); this.onSelectChange(value, option, projectId);
}} }}
@ -330,6 +332,7 @@ export class Create extends FormAction {
onChange: this.onChangeProject, onChange: this.onChangeProject,
filterOption: transferFilterOption, filterOption: transferFilterOption,
loading: this.projectStore.list.isLoading, loading: this.projectStore.list.isLoading,
onRowRight: () => null,
}, },
{ {
name: 'select_user_group', name: 'select_user_group',

View File

@ -19,3 +19,8 @@ export const editable = (item) => {
} }
return true; return true;
}; };
export const roleFilterOption = (inputValue, options) => {
const { label = '' } = options;
return label.toLowerCase().includes((inputValue || '').toLowerCase());
};