diff --git a/src/components/RequestModal/MovieRequestModal.tsx b/src/components/RequestModal/MovieRequestModal.tsx index 08c22023..648f9aff 100644 --- a/src/components/RequestModal/MovieRequestModal.tsx +++ b/src/components/RequestModal/MovieRequestModal.tsx @@ -23,12 +23,14 @@ const messages = defineMessages({ requesttitle: 'Request {title}', request4ktitle: 'Request {title} in 4K', edit: 'Edit Request', + approve: 'Approve Request', cancel: 'Cancel Request', pendingrequest: 'Pending Request for {title}', pending4krequest: 'Pending 4K Request for {title}', requestfrom: "{username}'s request is pending approval.", errorediting: 'Something went wrong while editing the request.', requestedited: 'Request for {title} edited successfully!', + requestApproved: 'Request for {title} approved!', requesterror: 'Something went wrong while submitting the request.', pendingapproval: 'Your request is pending approval.', }); @@ -159,7 +161,7 @@ const MovieRequestModal: React.FC = ({ } }; - const updateRequest = async () => { + const updateRequest = async (alsoApproveRequest = false) => { setIsUpdating(true); try { @@ -172,14 +174,23 @@ const MovieRequestModal: React.FC = ({ tags: requestOverrides?.tags, }); + if (alsoApproveRequest) { + await axios.post(`/api/v1/request/${editRequest?.id}/approve`); + } + addToast( - {intl.formatMessage(messages.requestedited, { - title: data?.title, - strong: function strong(msg) { - return {msg}; - }, - })} + {intl.formatMessage( + alsoApproveRequest + ? messages.requestApproved + : messages.requestedited, + { + title: data?.title, + strong: function strong(msg) { + return {msg}; + }, + } + )} , { appearance: 'success', @@ -202,12 +213,6 @@ const MovieRequestModal: React.FC = ({ if (editRequest) { const isOwner = editRequest.requestedBy.id === user?.id; - const showEditButton = hasPermission( - [Permission.MANAGE_REQUESTS, Permission.REQUEST_ADVANCED], - { - type: 'or', - } - ); return ( = ({ is4k ? messages.pending4krequest : messages.pendingrequest, { title: data?.title } )} - onOk={() => (showEditButton ? updateRequest() : cancelRequest())} + onOk={() => + hasPermission(Permission.MANAGE_REQUESTS) + ? updateRequest(true) + : hasPermission(Permission.REQUEST_ADVANCED) + ? updateRequest() + : cancelRequest() + } okDisabled={isUpdating} okText={ - showEditButton + hasPermission(Permission.MANAGE_REQUESTS) + ? intl.formatMessage(messages.approve) + : hasPermission(Permission.REQUEST_ADVANCED) ? intl.formatMessage(messages.edit) : intl.formatMessage(messages.cancel) } - okButtonType={showEditButton ? 'primary' : 'danger'} + okButtonType={ + hasPermission(Permission.MANAGE_REQUESTS) + ? 'success' + : hasPermission(Permission.REQUEST_ADVANCED) + ? 'primary' + : 'danger' + } onSecondary={ - isOwner && showEditButton ? () => cancelRequest() : undefined + isOwner && + hasPermission( + [Permission.REQUEST_ADVANCED, Permission.MANAGE_REQUESTS], + { type: 'or' } + ) + ? () => cancelRequest() + : undefined } secondaryDisabled={isUpdating} secondaryText={ - isOwner && showEditButton + isOwner && + hasPermission( + [Permission.REQUEST_ADVANCED, Permission.MANAGE_REQUESTS], + { type: 'or' } + ) ? intl.formatMessage(messages.cancel) : undefined } diff --git a/src/components/RequestModal/TvRequestModal.tsx b/src/components/RequestModal/TvRequestModal.tsx index 8a521b81..9a879b48 100644 --- a/src/components/RequestModal/TvRequestModal.tsx +++ b/src/components/RequestModal/TvRequestModal.tsx @@ -30,6 +30,7 @@ const messages = defineMessages({ requesttitle: 'Request {title}', request4ktitle: 'Request {title} in 4K', edit: 'Edit Request', + approve: 'Approve Request', cancel: 'Cancel Request', pendingrequest: 'Pending Request for {title}', pending4krequest: 'Pending 4K Request for {title}', @@ -46,6 +47,7 @@ const messages = defineMessages({ extras: 'Extras', errorediting: 'Something went wrong while editing the request.', requestedited: 'Request for {title} edited successfully!', + requestApproved: 'Request for {title} approved!', requestcancelled: 'Request for {title} canceled.', autoapproval: 'Automatic Approval', requesterror: 'Something went wrong while submitting the request.', @@ -100,7 +102,7 @@ const TvRequestModal: React.FC = ({ selectedSeasons.length + (editRequest?.seasons ?? []).length; - const updateRequest = async () => { + const updateRequest = async (alsoApproveRequest = false) => { if (!editRequest) { return; } @@ -121,6 +123,10 @@ const TvRequestModal: React.FC = ({ tags: requestOverrides?.tags, seasons: selectedSeasons, }); + + if (alsoApproveRequest) { + await axios.post(`/api/v1/request/${editRequest.id}/approve`); + } } else { await axios.delete(`/api/v1/request/${editRequest.id}`); } @@ -128,12 +134,17 @@ const TvRequestModal: React.FC = ({ addToast( {selectedSeasons.length > 0 - ? intl.formatMessage(messages.requestedited, { - title: data?.name, - strong: function strong(msg) { - return {msg}; - }, - }) + ? intl.formatMessage( + alsoApproveRequest + ? messages.requestApproved + : messages.requestedited, + { + title: data?.name, + strong: function strong(msg) { + return {msg}; + }, + } + ) : intl.formatMessage(messages.requestcancelled, { title: data?.name, strong: function strong(msg) { @@ -372,7 +383,13 @@ const TvRequestModal: React.FC = ({ loading={!data && !error} backgroundClickable onCancel={tvdbId ? () => setSearchModal({ show: true }) : onCancel} - onOk={() => (editRequest ? updateRequest() : sendRequest())} + onOk={() => + editRequest + ? hasPermission(Permission.MANAGE_REQUESTS) + ? updateRequest(true) + : updateRequest() + : sendRequest() + } title={intl.formatMessage( editRequest ? is4k @@ -387,6 +404,8 @@ const TvRequestModal: React.FC = ({ editRequest ? selectedSeasons.length === 0 ? intl.formatMessage(messages.cancel) + : hasPermission(Permission.MANAGE_REQUESTS) + ? intl.formatMessage(messages.approve) : intl.formatMessage(messages.edit) : getAllRequestedSeasons().length >= getAllSeasons().length ? intl.formatMessage(messages.alreadyrequested) @@ -415,11 +434,14 @@ const TvRequestModal: React.FC = ({ selectedSeasons.length === 0) } okButtonType={ - editRequest && - settings.currentSettings.partialRequestsEnabled && - selectedSeasons.length === 0 - ? 'danger' - : `primary` + editRequest + ? settings.currentSettings.partialRequestsEnabled && + selectedSeasons.length === 0 + ? 'danger' + : hasPermission(Permission.MANAGE_REQUESTS) + ? 'success' + : 'primary' + : 'primary' } cancelText={ editRequest diff --git a/src/i18n/locale/en.json b/src/i18n/locale/en.json index d20214f7..bb63ca59 100644 --- a/src/i18n/locale/en.json +++ b/src/i18n/locale/en.json @@ -322,6 +322,7 @@ "components.RequestModal.SearchByNameModal.nosummary": "No summary for this title was found.", "components.RequestModal.SearchByNameModal.notvdbiddescription": "We couldn't automatically match your request. Please select the correct match from the list below.", "components.RequestModal.alreadyrequested": "Already Requested", + "components.RequestModal.approve": "Approve Request", "components.RequestModal.autoapproval": "Automatic Approval", "components.RequestModal.cancel": "Cancel Request", "components.RequestModal.edit": "Edit Request", @@ -332,6 +333,7 @@ "components.RequestModal.pendingapproval": "Your request is pending approval.", "components.RequestModal.pendingrequest": "Pending Request for {title}", "components.RequestModal.request4ktitle": "Request {title} in 4K", + "components.RequestModal.requestApproved": "Request for {title} approved!", "components.RequestModal.requestCancel": "Request for {title} canceled.", "components.RequestModal.requestSuccess": "{title} requested successfully!", "components.RequestModal.requestadmin": "This request will be approved automatically.",