# disco/1.4.21/backend/views/components/Main/pages/Campaigns/Campaigns.jsx

Discount Rules for WooCommerce – Disco | Dynamic Pricing, Conditions, Bulk, Bundle, BOGO, version 1.4.21. 92 lines.

- Page: https://pluginprobe.com/plugins/disco/1.4.21/code/backend/views/components/Main/pages/Campaigns/Campaigns.jsx
- Raw: https://pluginprobe.com/plugins/disco/1.4.21/raw/backend/views/components/Main/pages/Campaigns/Campaigns.jsx
- Modified: 2026-09-11T05:31:24+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/disco/1.4.21/code/backend/views/components/Main/pages/Campaigns/Campaigns.jsx#L10-L20`.

```jsx
import { useEffect } from 'react';
import { useDispatch } from 'react-redux';
import ProCard from '../../components/ProCard';
import { setCampaignsInState } from '../../features/campaigns/campaignSlice';
import { useGetCampaignsQuery } from '../../features/campaigns/campaignsApi';
import {
	useGetBOGOTypesQuery,
	useGetDiscountBasedOnQuery,
	useGetDiscountTypesQuery,
	useGetFiltersQuery,
	useGetWhatGetsDiscountQuery,
} from '../../features/discount/discountApi';
import { useGetSettingsQuery } from '../../features/settings/settingsApi';
import useIsPro from '../../hooks/useIsPro';
import ActionsBar from './components/ActionsBar';
import CampaignsList from './components/CampaignsList';
import EmptyCampaigns from './components/EmptyCampaigns';
import Header from './components/Header';

const Campaigns = () => {
	const isPro = useIsPro();
	/*
	 * for caching api data
	 * don't remove this hooks
	 */
	const {} = useGetFiltersQuery();
	const {} = useGetWhatGetsDiscountQuery();
	const {} = useGetDiscountTypesQuery();
	const {} = useGetSettingsQuery();
	const {} = useGetDiscountBasedOnQuery();
	const {} = useGetBOGOTypesQuery();

	const dispatch = useDispatch();

	const {
		data: allCampaigns,
		isLoading,
		isError,
		error,
	} = useGetCampaignsQuery();

	useEffect(() => {
		if (isError) {
			if (
				error.status === 403 &&
				error.data.code === 'rest_cookie_invalid_nonce'
			) {
				window.location.replace(DISCO.site_url + '/wp-login.php');
			}
		}
	}, [isError]);

	useEffect(() => {
		if (allCampaigns && allCampaigns.length > 0) {
			dispatch(setCampaignsInState(allCampaigns));
		}
	}, [allCampaigns]);

	const hasNoCampaigns =
		!isLoading &&
		!isError &&
		(allCampaigns === undefined || allCampaigns.length === 0);

	return (
		<div className="disco:flex disco:mt-2.5 disco:w-full">
			<div className="disco:bg-gray-50 disco:grow disco:rounded-lg disco:mr-4 disco:ml-0.5">
				<div className="disco:p-5">
					<Header />
					{hasNoCampaigns ? (
						<EmptyCampaigns />
					) : (
						<>
							<ActionsBar allCampaigns={allCampaigns} />
							<CampaignsList
								isLoading={isLoading}
								isError={isError}
								error={error}
							/>
						</>
					)}
				</div>
			</div>
			{!isPro && (
				<div className="disco:min-w-72.5 disco:max-w-72.5 disco:mr-4">
					<ProCard />
				</div>
			)}
		</div>
	);
};
export default Campaigns;

```
