PluginProbe
Extendify / 0.2.0
Extendify v0.2.0
3.2.1 3.2.0 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.6 3.0.5 3.0.4 trunk 0.1.0 0.10.0 0.10.1 0.10.2 0.11.0 0.11.1 0.2.0 0.3.0 0.3.1 0.4.0 0.5.0 0.6.0 All 127 releases
extendify / src / components / ImportCounter.js

ImportCounter.js in Extendify 0.2.0, at src/components/ImportCounter.js

63 lines 2.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import classnames from 'classnames'
2 import { Icon } from '@wordpress/icons'
3 import { __, sprintf } from '@wordpress/i18n'
4 import { useEffect } from '@wordpress/element'
5 import { alert } from './icons/'
6 import { download } from './icons/'
7 import { useUserStore } from '../state/User'
8 import { User as UserApi } from '../api/User'
9
10 export const ImportCounter = () => {
11 const remainingImports = useUserStore((state) => state.remainingImports)
12 const allowedImports = useUserStore((state) => state.allowedImports)
13 const status = remainingImports() > 0 ? 'has-imports' : 'no-imports'
14 const backgroundColor =
15 status === 'has-imports'
16 ? 'bg-extendify-main hover:bg-extendify-main-dark'
17 : 'bg-extendify-alert'
18 const icon = status === 'has-imports' ? download : alert
19
20 useEffect(() => {
21 if (!allowedImports) {
22 UserApi.allowedImports().finally((allowedImports) => {
23 // If something goes wrong and this isn't a number, then default to 5
24 allowedImports = /^[1-9]\d*$/.test(allowedImports)
25 ? allowedImports
26 : '5'
27 useUserStore.setState({ allowedImports })
28 })
29 }
30 }, [allowedImports])
31
32 if (!allowedImports) {
33 return null
34 }
35
36 return (
37 <a
38 target="_blank"
39 rel="noreferrer"
40 className={classnames(
41 backgroundColor,
42 'hidden sm:flex w-full no-underline button-focus text-sm justify-between py-3 px-4 text-white rounded',
43 )}
44 href={`https://www.extendify.com/pricing/?utm_source=${encodeURIComponent(
45 window.extendifyData.sdk_partner,
46 )}&utm_medium=library&utm_campaign=import-counter&utm_content=upgrade&utm_term=${status}`}>
47 <div className="flex items-center space-x-2 no-underline">
48 <Icon icon={icon} size={14} />
49 <span>
50 {sprintf(
51 __('%s/%s Imports', 'extendify'),
52 remainingImports(),
53 Number(allowedImports),
54 )}
55 </span>
56 </div>
57 <span className="text-white no-underline font-medium outline-none">
58 {__('Upgrade', 'extendify')}
59 </span>
60 </a>
61 )
62 }
63