PluginProbe
Discount Rules for WooCommerce – Disco | Dynamic Pricing, Conditions, Bulk, Bundle, BOGO / 1.3.51
Discount Rules for WooCommerce – Disco | Dynamic Pricing, Conditions, Bulk, Bundle, BOGO v1.3.51
1.4.17 1.4.16 1.4.15 1.4.14 1.4.13 1.4.12 1.4.11 1.4.10 1.4.9 1.4.8 1.4.7 1.4.6 1.4.5 1.4.4 1.4.3 1.4.2 1.4.1 1.4.0 1.3.54 1.3.53 1.3.52 1.3.51 1.3.50 1.3.49 1.3.48 All 180 releases
disco / backend / views / components / Main / components / SaveAndExitButton.jsx

SaveAndExitButton.jsx in Discount Rules for WooCommerce – Disco | Dynamic Pricing, Conditions, Bulk, Bundle, BOGO 1.3.51, at backend/views/components/Main/components/SaveAndExitButton.jsx

109 lines 3.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { __ } from '@wordpress/i18n';
2 import { useEffect } from 'react';
3 import { useSelector } from 'react-redux';
4 import { useNavigate, useSearchParams } from 'react-router';
5 import { toast } from 'react-toastify';
6 import Publish from '../../../asset/img/status/Publish.svg';
7 import {
8 useAddCampaignMutation,
9 useUpdateCampaignMutation,
10 } from '../features/campaigns/campaignsApi';
11 import { cleanFilters, validateEmptyField } from '../utilities/utilities';
12 import Button from './Button';
13 import LoadingSpinner from './LoadingSpinner';
14 import { SaveButton, UpdateButton } from './SaveAndUpdateButton';
15
16 const SaveAndExitButton = () => {
17 const [searchParams] = useSearchParams();
18 const [{ isSuccess: added, isError: addingError }] =
19 useAddCampaignMutation();
20 const [updateCampaign, { isLoading: updating, isSuccess: updated }] =
21 useUpdateCampaignMutation();
22
23 const discount = useSelector((state) => state.discount);
24 const { showEditor } = useSelector((state) => state.interaction);
25 const { status } = discount;
26
27 const currentTab = discount?.ui?.[0];
28 const publishButtonLabel = currentTab === 2 ? 'Publish' : 'Update & Exit';
29 const publishLoadingText = currentTab === 2 ? 'Publishing' : 'Updating';
30
31 const navigate = useNavigate();
32
33 const handleUpdateAndExit = () => {
34 if (validateEmptyField(discount) === false) {
35 return;
36 }
37
38 const dataForRequest = { ...discount };
39 if (!dataForRequest.discount_valid_from) {
40 delete dataForRequest.discount_valid_from;
41 }
42 if (!dataForRequest.discount_valid_to) {
43 delete dataForRequest.discount_valid_to;
44 }
45 delete dataForRequest.created_by;
46 delete dataForRequest.modified_by;
47 dataForRequest.conditions = cleanFilters(discount.conditions);
48 updateCampaign({
49 id: discount.id,
50 data: {
51 ...dataForRequest,
52 priority: String(dataForRequest.priority),
53 status: status === '1' ? '1' : currentTab === 2 ? '1' : '0',
54 },
55 });
56 };
57
58 useEffect(() => {
59 if (added) {
60 toast.success(__('New Campaign Added.', 'disco'));
61 navigate('/');
62 }
63 if (updated) {
64 toast.success(__('Campaign Updated.', 'disco'));
65 navigate('/');
66 }
67 if (addingError) {
68 toast.error(__('Something Went Wrong', 'disco'));
69 }
70 }, [added, updated, addingError]);
71
72 return (
73 <div className="disco-flex disco-gap-3">
74 {searchParams.get('edit') ? (
75 <div className="disco-flex disco-items-center disco-gap-3">
76 <UpdateButton />
77 <Button
78 className="!disco-py-1.5 !disco-px-4 !disco-font-normal"
79 disabled={updating || showEditor}
80 onClick={handleUpdateAndExit}
81 icon={
82 currentTab === 2 ? (
83 <img src={Publish} alt="Publish icon" />
84 ) : (
85 ''
86 )
87 }
88 iconPositionLeft=""
89 >
90 {updating ? (
91 <div className="disco-flex disco-gap-2 disco-items-center">
92 <span>{__(publishLoadingText, 'disco')}</span>
93 <LoadingSpinner size={4} />
94 </div>
95 ) : (
96 __(publishButtonLabel, 'disco')
97 )}
98 </Button>
99 </div>
100 ) : (
101 <div className="disco-flex disco-items-center disco-gap-3">
102 <SaveButton disabled={showEditor} />
103 </div>
104 )}
105 </div>
106 );
107 };
108 export default SaveAndExitButton;
109