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.",