diff --git a/src/actions/posts.js b/src/actions/posts.js index c3233771302b52b769290377a681e96566c1d454..8bfbf4ca0e042018084ee89760019cd8cfb83c1b 100644 --- a/src/actions/posts.js +++ b/src/actions/posts.js @@ -253,16 +253,16 @@ export const acceptProposal = createAsyncAction( /** * @param {CF2021.ProposalPost} proposal */ - (proposal) => { - return updateProposalState(proposal, "accepted"); + ({ proposal, archive }) => { + return updateProposalState(proposal, "accepted", { is_archived: archive }); }, { shortCircuitHook: ({ args }) => { - if (args.type !== "procedure-proposal") { + if (args.proposal.type !== "procedure-proposal") { return errorResult(); } - if (args.state !== "announced") { + if (args.proposal.state !== "announced") { return errorResult(); } diff --git a/src/containers/PostsContainer.jsx b/src/containers/PostsContainer.jsx index 01b902e28855d5ab8f75c08e9744f5bf10071331..6995acd773864195fb1b463aa2485fd5177ae480 100644 --- a/src/containers/PostsContainer.jsx +++ b/src/containers/PostsContainer.jsx @@ -65,8 +65,10 @@ const PostsContainer = ({ className, showAddPostCta }) => { setPostToAccept, onAcceptConfirm, onAcceptCancel, - acceptState, - ] = useItemActionConfirm(acceptProposal); + ] = useItemActionConfirm(acceptProposal, (item, archive) => ({ + proposal: item, + archive, + })); const [ postToEdit, setPostToEdit, @@ -104,6 +106,20 @@ const PostsContainer = ({ className, showAddPostCta }) => { (state) => state.filters.flags === "archived" ); + const [acceptingProposal, acceptingProposalError] = useActionState( + acceptProposal, + { + proposal: postToAccept, + archive: false, + } + ); + const [ + acceptingAndArchivingProposal, + acceptingAndArchivingProposalError, + ] = useActionState(acceptProposal, { + proposal: postToAccept, + archive: true, + }); const [rejectingProposal, rejectingProposalError] = useActionState( rejectProposal, { @@ -237,17 +253,45 @@ const PostsContainer = ({ className, showAddPostCta }) => { > Procedurální návrh bude <strong>vyhlášen</strong>. Opravdu to chcete? </ModalConfirm> - <ModalConfirm + <ModalWithActions isOpen={!!postToAccept} - onConfirm={onAcceptConfirm} onCancel={onAcceptCancel} - confirming={acceptState.loading} - error={acceptState.error} + error={acceptingProposalError || acceptingAndArchivingProposalError} title="Schválit procedurální návrh?" - yesActionLabel="Schválit návrh" + containerClassName="max-w-lg" + actions={ + <> + <Button + hoverActive + color="blue-300" + className="text-sm" + onClick={() => onAcceptConfirm(false)} + loading={acceptingProposal} + > + Schválit + </Button> + <Button + hoverActive + color="blue-300" + className="text-sm" + onClick={() => onAcceptConfirm(true)} + loading={acceptingAndArchivingProposal} + > + Schválit a archivovat + </Button> + <Button + hoverActive + color="grey-125" + className="text-sm" + onClick={onAcceptCancel} + > + Zrušit + </Button> + </> + } > Procedurální návrh bude <strong>schválen</strong>. Opravdu to chcete? - </ModalConfirm> + </ModalWithActions> <ModalWithActions isOpen={!!postToReject} onCancel={onRejectCancel}