PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.17.0
GiveWP – Donation Plugin and Fundraising Platform v4.17.0
4.17.0 4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 All 256 releases
give / src / Campaigns / resources / admin / components / CampaignsListTable / index.tsx

index.tsx in GiveWP – Donation Plugin and Fundraising Platform 4.17.0, at src/Campaigns/resources/admin/components/CampaignsListTable/index.tsx

157 lines 5.6 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 {ListTablePage} from '@givewp/components';
3 import ListTableApi from '@givewp/components/ListTable/api';
4 import {BulkActionsConfig, FilterConfig} from '@givewp/components/ListTable/ListTablePage';
5 import {CampaignsRowActions} from './CampaignsRowActions';
6 import styles from './CampaignsListTable.module.scss';
7 import {GiveCampaignsListTable} from './types';
8 import CreateCampaignModal from '../CreateCampaignModal';
9 import {useState} from 'react';
10 import MergeCampaignModal from '../MergeCampaign/Modal';
11 import ExistingUserIntroModal from '@givewp/campaigns/admin/components/ExistingUserIntroModal';
12 import {getCampaignOptionsWindowData} from '@givewp/campaigns/utils';
13 import {useCampaignNoticeHook} from '@givewp/campaigns/hooks';
14 import CampaignNotice from '@givewp/campaigns/admin/components/CampaignDetailsPage/Components/Notices/CampaignNotice';
15
16 declare const window: {
17 GiveCampaignsListTable: GiveCampaignsListTable;
18 } & Window;
19
20 /**
21 * Auto open modal if the URL has the query parameter id as new
22 *
23 * @since 4.0.0
24 */
25 const autoOpenCreateCampaignModal = () => {
26 const queryParams = new URLSearchParams(window.location.search);
27 const newParam = queryParams.get('new');
28
29 return newParam === 'campaign';
30 };
31
32 const shouldShowExistingUserIntroModal = getCampaignOptionsWindowData().admin.showExistingUserIntroNotice;
33
34 export function getGiveCampaignsListTableWindowData() {
35 return window.GiveCampaignsListTable;
36 }
37
38 const API = new ListTableApi(getGiveCampaignsListTableWindowData());
39
40 const campaignStatus = [
41 {
42 value: 'any',
43 text: __('All Status', 'give'),
44 },
45 {
46 value: 'active',
47 text: __('Active', 'give'),
48 },
49 {
50 value: 'inactive',
51 text: __('Archived', 'give'),
52 },
53 ];
54
55 const filters: Array<FilterConfig> = [
56 {
57 name: 'status',
58 type: 'select',
59 text: __('status', 'give'),
60 ariaLabel: __('Filter campaign by status', 'give'),
61 options: campaignStatus,
62 },
63 {
64 name: 'search',
65 type: 'search',
66 text: __('Search by name or ID', 'give'),
67 ariaLabel: __('Search donation forms', 'give'),
68 },
69 ];
70
71 const bulkActions: Array<BulkActionsConfig> = [
72 {
73 label: __('Merge', 'give'),
74 value: 'merge',
75 type: 'custom',
76 confirm: (selected, names, isOpen, setOpen) => {
77 return (
78 <MergeCampaignModal
79 isOpen={isOpen}
80 setOpen={setOpen}
81 campaigns={{
82 selected: selected,
83 names: names,
84 }}
85 />
86 );
87 },
88 },
89 ];
90
91 export default function CampaignsListTable() {
92 const [isCreateCampaignModalOpen, setCreateCampaignModalOpen] = useState<boolean>(autoOpenCreateCampaignModal());
93 const [isExistingUserIntroModalOpen, setExistingUserIntroModalOpen] = useState<boolean>(
94 shouldShowExistingUserIntroModal
95 );
96 const [showTooltip, dismissTooltip] = useCampaignNoticeHook('givewp_campaign_listtable_notice');
97
98 /**
99 * Displays a blank slate for the Campaigns table.
100 *
101 * @since 4.0.0
102 */
103 const ListTableBlankSlate = () => {
104 const imagePath = `${
105 getGiveCampaignsListTableWindowData().pluginUrl
106 }build/assets/dist/images/list-table/blank-slate-campaigns-icon.svg`;
107 return (
108 <div className={styles.container}>
109 <img src={imagePath} alt={__('No campaign created yet', 'give')} />
110 <h3>{__('No campaign created yet', 'give')}</h3>
111 <p className={styles.helpMessage}>
112 {__('Don’t worry, let’s help you set up your first campaign.', 'give')}
113 </p>
114 <p>
115 <a
116 onClick={() => setCreateCampaignModalOpen(true)}
117 className={`button button-primary ${styles.button}`}
118 >
119 {__('Create campaign', 'give')}
120 </a>
121 </p>
122 </div>
123 );
124 };
125
126 return (
127 <>
128 <ListTablePage
129 title={__('Campaigns', 'give')}
130 singleName={__('campaign', 'give')}
131 pluralName={__('campaigns', 'give')}
132 apiSettings={getGiveCampaignsListTableWindowData()}
133 filterSettings={filters}
134 bulkActions={bulkActions}
135 rowActions={CampaignsRowActions}
136 listTableBlankSlate={ListTableBlankSlate()}
137 >
138 <CreateCampaignModal isOpen={isCreateCampaignModalOpen} setOpen={setCreateCampaignModalOpen} />
139 <ExistingUserIntroModal isOpen={isExistingUserIntroModalOpen} setOpen={setExistingUserIntroModalOpen} />
140 {!isExistingUserIntroModalOpen && showTooltip && (
141 <CampaignNotice
142 title={__('Campaign List', 'give')}
143 description={__(
144 "We've created a campaign from each of your donation forms. Your forms still work as before, but now with the added power of campaign management! Select a campaign to see how you can seamlessly manage your online fundraising.",
145 'give'
146 )}
147 linkText={__('Read documentation on what we changed', 'give')}
148 linkHref="https://docs.givewp.com/campaigns-docs"
149 handleDismiss={dismissTooltip}
150 type={'campaignList'}
151 />
152 )}
153 </ListTablePage>
154 </>
155 );
156 }
157