action: string;
languages: Languages;
onClose: () => void;
+ onSubmit?: () => void;
profile?: Profile;
query: Query;
referencedProfiles: Dict<Profile>;
this.setState({ selectedProfiles });
};
+ getProfiles = () => {
+ // if a profile is selected in the facet, pick it
+ // otherwise take all profiles selected in the dropdown
+
+ return this.props.profile
+ ? [this.props.profile.key]
+ : this.state.selectedProfiles.map((p) => p.key);
+ };
+
getAvailableQualityProfiles = ({ query, referencedProfiles } = this.props) => {
let profiles = Object.values(referencedProfiles);
if (query.languages.length > 0) {
const method = this.props.action === 'activate' ? bulkActivateRules : bulkDeactivateRules;
- // if a profile is selected in the facet, pick it
- // otherwise take all profiles selected in the dropdown
- const profiles: string[] = this.props.profile
- ? [this.props.profile.key]
- : this.state.selectedProfiles.map((p) => p.key);
+ const profiles = this.getProfiles();
for (const profile of profiles) {
looper = looper
);
};
+ handleClose = () => {
+ if (this.props.onSubmit && this.state.finished) {
+ this.props.onSubmit();
+ }
+
+ this.props.onClose();
+ };
+
renderResult = (result: ActivationResult) => {
const { profile: profileKey } = result;
const profile = this.props.referencedProfiles[profileKey];
<Modal
headerTitle={header}
isScrollable
- onClose={this.props.onClose}
+ onClose={this.handleClose}
body={<Spinner loading={this.state.submitting}>{formBody}</Spinner>}
primaryButton={
!this.state.finished && (
getRuleActivation = (rule: string) => {
const { actives } = this.state;
const query = parseQuery(this.props.location.query);
- if (actives && actives[rule] && query.profile) {
- return actives[rule][query.profile];
- }
+
+ return actives?.[rule] && query.profile ? actives[rule][query.profile] : undefined;
};
getSelectedProfile = () => {
const { referencedProfiles } = this.state;
const query = parseQuery(this.props.location.query);
- if (query.profile) {
- return referencedProfiles[query.profile];
- }
- };
- closeFacet = (facet: string) =>
- this.setState((state) => ({
- openFacets: { ...state.openFacets, [facet]: false },
- }));
+ return query.profile ? referencedProfiles[query.profile] : undefined;
+ };
handleRuleOpen = (ruleKey: string) => {
this.props.router.push(this.getRulePath(ruleKey));
property = newState.openFacets.sonarsourceSecurity ? 'sonarsourceSecurity' : property;
}
- if (shouldRequestFacet(property) && (!state.facets || !state.facets[property])) {
+ if (shouldRequestFacet(property) && !state.facets?.[property]) {
newState.loading = true;
this.fetchFacet(property);
}
handleRuleDeactivate = (profile: string, rule: string) =>
this.setState((state) => {
const { actives } = state;
- if (actives && actives[rule]) {
+ if (actives?.[rule]) {
const newRule = { ...actives[rule] };
delete newRule[profile];
return { actives: { ...actives, [rule]: newRule } };
renderBulkButton = () => {
const { currentUser } = this.props;
- const { canWrite, paging, referencedProfiles } = this.state;
+ const { canWrite = false, paging, referencedProfiles } = this.state;
const query = parseQuery(this.props.location.query);
const canUpdate = canWrite || Object.values(referencedProfiles).some((p) => p.actions?.edit);
return (
paging && (
- <BulkChange query={query} referencedProfiles={referencedProfiles} total={paging.total} />
+ <BulkChange
+ onSubmit={this.handleReload}
+ query={query}
+ referencedProfiles={referencedProfiles}
+ total={paging.total}
+ />
)
);
};