Skip to content

Commit 1bc7fb3

Browse files
authored
Merge pull request #1278 from ferishili/issue-1263
Override events ACLs by separate button in Series Details Update
2 parents 79e0c94 + b8d7f13 commit 1bc7fb3

File tree

5 files changed

+49
-16
lines changed

5 files changed

+49
-16
lines changed

src/components/events/partials/ModalTabsAndPages/SeriesDetailsAccessTab.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ const SeriesDetailsAccessTab = ({
4646
editAccessRole={"ROLE_UI_SERIES_DETAILS_ACL_EDIT"}
4747
policyChanged={policyChanged}
4848
setPolicyChanged={setPolicyChanged}
49+
withOverrideButton={true}
4950
/>
5051
);
5152
};

src/components/shared/SaveEditFooter.tsx

+21
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,25 @@
11
import { useTranslation } from "react-i18next"
2+
import { Tooltip } from "./Tooltip";
3+
import { ParseKeys } from "i18next";
24

35
type SaveEditFooterProps = {
46
active: boolean;
57
reset: () => void;
68
submit: () => void;
79
isValid?: boolean;
10+
additionalButton?: {
11+
label: ParseKeys,
12+
hint: ParseKeys,
13+
onClick: () => void
14+
};
815
}
916

1017
export const SaveEditFooter: React.FC<SaveEditFooterProps> = ({
1118
active,
1219
reset,
1320
submit,
1421
isValid,
22+
additionalButton
1523
}) => {
1624
const { t } = useTranslation();
1725

@@ -25,6 +33,19 @@ export const SaveEditFooter: React.FC<SaveEditFooterProps> = ({
2533
>{t("CANCEL")}</button>
2634
</div>
2735
)}
36+
{additionalButton && (
37+
<div className="pull-right" style={{ marginLeft: 5 }}>
38+
<Tooltip title={t(additionalButton.hint)}>
39+
<button
40+
onClick={additionalButton.onClick}
41+
disabled={!isValid || !active}
42+
className={`save green ${
43+
!isValid || !active ? "disabled" : ""
44+
}`}
45+
>{t(additionalButton.label)}</button>
46+
</Tooltip>
47+
</div>
48+
)}
2849
<div className="pull-right">
2950
<button
3051
onClick={submit}

src/components/shared/modals/ResourceDetailsAccessPolicyTab.tsx

+12-5
Original file line numberDiff line numberDiff line change
@@ -48,18 +48,20 @@ const ResourceDetailsAccessPolicyTab = ({
4848
editAccessRole,
4949
policyChanged,
5050
setPolicyChanged,
51+
withOverrideButton
5152
}: {
5253
resourceId: string,
5354
header: ParseKeys,
5455
policies: TransformedAcl[],
5556
fetchHasActiveTransactions?: AsyncThunk<any, string, any>
5657
fetchAccessPolicies: AsyncThunk<TransformedAcl[], string, any>,
57-
saveNewAccessPolicies: AsyncThunk<boolean, { id: string, policies: { acl: Acl } }, any>
58+
saveNewAccessPolicies: AsyncThunk<boolean, { id: string, policies: { acl: Acl }, override?: boolean }, any>
5859
descriptionText: string,
5960
buttonText: ParseKeys,
6061
editAccessRole: string,
6162
policyChanged: boolean,
6263
setPolicyChanged: (value: boolean) => void,
64+
withOverrideButton?: boolean
6365
}) => {
6466
const { t } = useTranslation();
6567
const dispatch = useAppDispatch();
@@ -135,7 +137,7 @@ const ResourceDetailsAccessPolicyTab = ({
135137

136138
/* transforms rules into proper format for saving and checks validity
137139
* if the policies are valid, the new policies are saved in the backend */
138-
const saveAccess = (values: { policies: TransformedAcl[] }) => {
140+
const saveAccess = (values: { policies: TransformedAcl[] }, override: boolean) => {
139141
dispatch(removeNotificationWizardForm());
140142
const { roleWithFullRightsExists, allRulesValid } = validatePolicies(
141143
values
@@ -163,7 +165,7 @@ const ResourceDetailsAccessPolicyTab = ({
163165
}
164166

165167
if (allRulesValid && roleWithFullRightsExists) {
166-
dispatch(saveNewAccessPolicies({id: resourceId, policies: access})).then((success) => {
168+
dispatch(saveNewAccessPolicies({id: resourceId, policies: access, override: override})).then((success) => {
167169
// fetch new policies from the backend, if save successful
168170
if (success) {
169171
setPolicyChanged(false);
@@ -321,7 +323,7 @@ const ResourceDetailsAccessPolicyTab = ({
321323
enableReinitialize
322324
validate={(values) => validateFormik(values)}
323325
onSubmit={(values) =>
324-
saveAccess(values)
326+
saveAccess(values, false)
325327
}
326328
>
327329
{(formik) => (
@@ -650,8 +652,13 @@ const ResourceDetailsAccessPolicyTab = ({
650652
{!transactions.read_only && <SaveEditFooter
651653
active={policyChanged && formik.dirty}
652654
reset={() => resetPolicies(formik.resetForm)}
653-
submit={() => saveAccess(formik.values)}
655+
submit={() => saveAccess(formik.values, false)}
654656
isValid={formik.isValid}
657+
additionalButton={withOverrideButton ? {
658+
label: "EVENTS.SERIES.DETAILS.ACCESS.ACCESS_POLICY.REPLACE_EVENT_ACLS",
659+
hint: "EVENTS.SERIES.DETAILS.ACCESS.ACCESS_POLICY.REPLACE_EVENT_ACLS_HINT",
660+
onClick: () => saveAccess(formik.values, true)
661+
} : undefined}
655662
/>}
656663
</div>
657664
)}

src/slices/eventDetailsSlice.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1704,16 +1704,16 @@ export const updateAssets = createAppAsyncThunk('eventDetails/updateAssets', asy
17041704
});
17051705
});
17061706

1707-
export const saveAccessPolicies = createAppAsyncThunk('eventDetails/saveAccessPolicies', async (params: {
1708-
id: Event["id"],
1709-
policies: { acl: { ace: Ace[] } }
1710-
}, { dispatch }) => {
1707+
export const saveAccessPolicies = createAppAsyncThunk('eventDetails/saveAccessPolicies', async (
1708+
params: {
1709+
id: Event["id"],
1710+
policies: { acl: { ace: Ace[] }},
1711+
}, { dispatch }) => {
17111712
const { id, policies } = params;
17121713
const headers = getHttpHeaders();
17131714

17141715
let data = new URLSearchParams();
17151716
data.append("acl", JSON.stringify(policies));
1716-
data.append("override", "true");
17171717

17181718
return axios
17191719
.post(`/admin-ng/event/${id}/access`, data.toString(), headers)

src/slices/seriesDetailsSlice.ts

+10-6
Original file line numberDiff line numberDiff line change
@@ -250,16 +250,20 @@ export const updateExtendedSeriesMetadata = createAppAsyncThunk('seriesDetails/u
250250
dispatch(setSeriesDetailsExtendedMetadata(newExtendedMetadata));
251251
});
252252

253-
export const updateSeriesAccess = createAppAsyncThunk('seriesDetails/updateSeriesAccess', async (params: {
254-
id: Series["id"],
255-
policies: { acl: Acl }
256-
}, {dispatch}) => {
257-
const { id, policies } = params;
253+
export const updateSeriesAccess = createAppAsyncThunk('seriesDetails/updateSeriesAccess', async (
254+
params: {
255+
id: Series["id"],
256+
policies: { acl: Acl },
257+
override?: boolean
258+
}, {dispatch}) => {
259+
const { id, policies, override } = params;
258260

259261
let data = new URLSearchParams();
260262

263+
let overrideString = override ? String(true) : String(false);
264+
261265
data.append("acl", JSON.stringify(policies));
262-
data.append("override", String(true));
266+
data.append("override", overrideString);
263267

264268
return axios
265269
.post(`/admin-ng/series/${id}/access`, data, {

0 commit comments

Comments
 (0)