aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/settings/supportFerdi/SupportFerdiDashboard.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/settings/supportFerdi/SupportFerdiDashboard.tsx')
-rw-r--r--src/components/settings/supportFerdi/SupportFerdiDashboard.tsx232
1 files changed, 232 insertions, 0 deletions
diff --git a/src/components/settings/supportFerdi/SupportFerdiDashboard.tsx b/src/components/settings/supportFerdi/SupportFerdiDashboard.tsx
new file mode 100644
index 000000000..505c49812
--- /dev/null
+++ b/src/components/settings/supportFerdi/SupportFerdiDashboard.tsx
@@ -0,0 +1,232 @@
1import { defineMessages, useIntl } from 'react-intl';
2import { BrowserWindow } from '@electron/remote';
3import InfoBar from '../../ui/InfoBar';
4
5const messages = defineMessages({
6 headline: {
7 id: 'settings.supportFerdi.headline',
8 defaultMessage: 'About Ferdi',
9 },
10 title: {
11 id: 'settings.supportFerdi.title',
12 defaultMessage: 'Do you like Ferdi?',
13 },
14 aboutIntro: {
15 id: 'settings.supportFerdi.aboutIntro',
16 defaultMessage:
17 '<p>Ferdi is an open-source and a community-lead application.</p><p>Thanks to the people who make this possbile:</p>',
18 },
19 textListContributors: {
20 id: 'settings.supportFerdi.textListContributors',
21 defaultMessage: 'Full list of contributors',
22 },
23 textListContributorsHere: {
24 id: 'settings.supportFerdi.textListContributorsHere',
25 defaultMessage: 'here',
26 },
27 textVolunteers: {
28 id: 'settings.supportFerdi.textVolunteers',
29 defaultMessage:
30 'The development of Ferdi is done by volunteers. People who use Ferdi like you. They maintain, fix, and improve Ferdi in their spare time.',
31 },
32 textSupportWelcome: {
33 id: 'settings.supportFerdi.textSupportWelcome',
34 defaultMessage:
35 'Support is always welcome. You can find a list of the help we need',
36 },
37 textSupportWelcomeHere: {
38 id: 'settings.supportFerdi.textSupportWelcomeHere',
39 defaultMessage: 'here',
40 },
41 textExpenses: {
42 id: 'settings.supportFerdi.textExpenses',
43 defaultMessage:
44 'While volunteers do most of the work, we still need to pay for servers and certificates. As a community, we are fully transparent on funds we collect and spend - see our',
45 },
46 textOpenCollective: {
47 id: 'settings.supportFerdi.textOpenCollective',
48 defaultMessage: 'Open Collective',
49 },
50 textDonation: {
51 id: 'settings.supportFerdi.textDonation',
52 defaultMessage:
53 'If you feel like supporting Ferdi development with a donation, you can do so on both,',
54 },
55 textDonationAnd: {
56 id: 'settings.supportFerdi.textDonationAnd',
57 defaultMessage: 'and',
58 },
59 textGitHubSponsors: {
60 id: 'settings.supportFerdi.textGitHubSponsors',
61 defaultMessage: 'GitHub Sponsors',
62 },
63 openSurvey: {
64 id: 'settings.supportFerdi.openSurvey',
65 defaultMessage: 'Open survey',
66 },
67 bannerText: {
68 id: 'settings.supportFerdi.bannerText',
69 defaultMessage: 'Do you want to help us improve Ferdi?',
70 },
71});
72
73const openSurveyWindow = () => {
74 let win = new BrowserWindow({ width: 670, height: 400 });
75 win.on('closed', () => {
76 // @ts-expect-error Type 'null' is not assignable to type 'BrowserWindow'.
77 win = null;
78 });
79
80 win.loadURL('https://rp28.typeform.com/to/E3phJT');
81};
82
83const SupportFerdiDashboard = () => {
84 const intl = useIntl();
85
86 const aboutIntro = intl.formatMessage(messages.aboutIntro);
87
88 return (
89 <div className="settings__main">
90 <div className="settings__header">
91 <span className="settings__header-item">
92 {intl.formatMessage(messages.headline)}
93 </span>
94 </div>
95 <div className="settings__body">
96 <h1>{intl.formatMessage(messages.title)}</h1>
97 <div>
98 <p className="settings__support-badges">
99 <a
100 href="https://github.com/getferdi/ferdi"
101 target="_blank"
102 rel="noreferrer"
103 >
104 <img
105 alt="GitHub Stars"
106 src="https://img.shields.io/github/stars/getferdi/ferdi?style=social"
107 />
108 </a>
109 <a
110 href="https://twitter.com/getferdi/"
111 target="_blank"
112 rel="noreferrer"
113 >
114 <img
115 alt="Twitter Follow"
116 src="https://img.shields.io/twitter/follow/getferdi?label=Follow&style=social"
117 />
118 </a>
119 <a
120 href="https://opencollective.com/getferdi#section-contributors"
121 target="_blank"
122 rel="noreferrer"
123 >
124 <img
125 alt="Open Collective backers"
126 src="https://img.shields.io/opencollective/backers/getferdi?logo=open-collective"
127 />
128 </a>
129 <a
130 href="https://opencollective.com/getferdi#section-contributors"
131 target="_blank"
132 rel="noreferrer"
133 >
134 <img
135 alt="Open Collective sponsors"
136 src="https://img.shields.io/opencollective/sponsors/getferdi?logo=open-collective"
137 />
138 </a>
139 </p>
140 <span dangerouslySetInnerHTML={{ __html: aboutIntro }} />
141 <br />
142 <br />
143 <p>
144 <a href="#contributors-via-opencollective">
145 <img
146 alt="GitHub contributors (non-exhaustive)"
147 width="100%"
148 src="https://opencollective.com/getferdi/contributors.svg?width=642&button=false"
149 />
150 </a>
151 </p>
152 <p>
153 {intl.formatMessage(messages.textListContributors)}
154 <a
155 href="https://github.com/getferdi/ferdi#contributors-"
156 target="_blank"
157 className="link"
158 rel="noreferrer"
159 >
160 {' '}
161 {intl.formatMessage(messages.textListContributorsHere)}
162 <i className="mdi mdi-open-in-new" />
163 </a>
164 <br />
165 <br />
166 </p>
167 <p>{intl.formatMessage(messages.textVolunteers)}</p>
168 <p>
169 {intl.formatMessage(messages.textSupportWelcome)}
170 <a
171 href="https://help.getferdi.com/general/support"
172 target="_blank"
173 className="link"
174 rel="noreferrer"
175 >
176 {' '}
177 {intl.formatMessage(messages.textSupportWelcomeHere)}
178 <i className="mdi mdi-open-in-new" />
179 </a>
180 </p>
181 <p>
182 {intl.formatMessage(messages.textExpenses)}
183 <a
184 href="https://opencollective.com/getferdi#section-budget"
185 target="_blank"
186 className="link"
187 rel="noreferrer"
188 >
189 {' '}
190 {intl.formatMessage(messages.textOpenCollective)}
191 <i className="mdi mdi-open-in-new" />
192 </a>
193 </p>
194 <p>
195 {intl.formatMessage(messages.textDonation)}
196 <a
197 href="https://opencollective.com/getferdi#section-contribute"
198 target="_blank"
199 className="link"
200 rel="noreferrer"
201 >
202 {' '}
203 {intl.formatMessage(messages.textOpenCollective)}
204 <i className="mdi mdi-open-in-new" />
205 </a>{' '}
206 {intl.formatMessage(messages.textDonationAnd)}
207 <a
208 href="https://github.com/sponsors/getferdi"
209 target="_blank"
210 className="link"
211 rel="noreferrer"
212 >
213 {' '}
214 {intl.formatMessage(messages.textGitHubSponsors)}
215 <i className="mdi mdi-open-in-new" />
216 </a>
217 </p>
218 </div>
219 </div>
220 <InfoBar
221 sticky
222 type="primary"
223 ctaLabel={intl.formatMessage(messages.openSurvey)}
224 onClick={openSurveyWindow}
225 >
226 {intl.formatMessage(messages.bannerText)}
227 </InfoBar>
228 </div>
229 );
230};
231
232export default SupportFerdiDashboard;