PluginProbe
Block Animations, Motion & Scroll Effects – Ghost Kit / 3.7.0
Block Animations, Motion & Scroll Effects – Ghost Kit v3.7.0
3.7.2 3.7.1 3.7.0 3.6.1 trunk 1.6.3 2.25.0 3.3.0 3.3.1 3.3.2 3.3.3 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.6 3.5.0 3.5.1 3.6.0
ghostkit / settings / containers / container.js

container.js in Block Animations, Motion & Scroll Effects – Ghost Kit 3.7.0, at settings/containers/container.js

120 lines 2.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { useEffect, useState } from '@wordpress/element';
2 import { __ } from '@wordpress/i18n';
3 import classnames from 'classnames/dedupe';
4
5 import { ReactComponent as Logo } from '../../gutenberg/icons/ghostkit-text-logo.svg';
6 import getPages from '../pages';
7
8 const { version } = window.ghostkitVariables;
9
10 export default function Container(props) {
11 const { data } = props;
12
13 const [pages, setPages] = useState({});
14 const [activePage, setActivePage] = useState('');
15
16 // Mounted.
17 useEffect(() => {
18 // get variable.
19 const $_GET = [];
20 window.location.href.replace(
21 /[?&]+([^=&]+)=([^&]*)/gi,
22 (a, name, value) => {
23 $_GET[name] = value;
24 }
25 );
26
27 const newPages = getPages();
28
29 setPages(newPages);
30 setActivePage(
31 $_GET.sub_page ? $_GET.sub_page : Object.keys(newPages)[0]
32 );
33 }, []);
34
35 // Changed page.
36 useEffect(() => {
37 // disable active links.
38 document
39 .querySelectorAll('.toplevel_page_ghostkit .current')
40 .forEach(($el) => {
41 $el.classList.remove('current');
42 });
43
44 // find new active link.
45 let $links = document.querySelectorAll(
46 `.toplevel_page_ghostkit [href="admin.php?page=ghostkit&sub_page=${activePage}"]`
47 );
48
49 if (!$links || !$links.length) {
50 $links = document.querySelectorAll(
51 '.toplevel_page_ghostkit [href="admin.php?page=ghostkit"]'
52 );
53 }
54
55 $links.forEach(($link) => {
56 $link.parentNode.classList.add('current');
57 });
58
59 // change address bar link
60 if ($links && $links.length) {
61 window.history.pushState(
62 document.title,
63 document.title,
64 $links[0].href
65 );
66 }
67 }, [activePage]);
68
69 const resultTabs = [];
70 let resultContent = '';
71
72 Object.keys(pages).forEach((k) => {
73 resultTabs.push(
74 <li key={k}>
75 <button
76 className={classnames(
77 'ghostkit-admin-tabs-button',
78 activePage === k
79 ? 'ghostkit-admin-tabs-button-active'
80 : ''
81 )}
82 onClick={() => {
83 setActivePage(k);
84 }}
85 >
86 {pages[k].label}
87 </button>
88 </li>
89 );
90 });
91
92 if (activePage && pages[activePage]) {
93 const NewBlock = pages[activePage].block;
94
95 resultContent = (
96 <>
97 <h2>{pages[activePage].label}</h2>
98 <NewBlock data={data} />
99 </>
100 );
101 }
102
103 return (
104 <>
105 <div className="ghostkit-admin-head">
106 <div className="ghostkit-admin-head-wrap">
107 <a
108 href={`https://www.ghostkit.io/?utm_source=plugin&utm_medium=settings&utm_campaign=logo&utm_content=${version}`}
109 aria-label={__('Ghost Kit', 'ghostkit')}
110 >
111 <Logo />
112 </a>
113 <ul className="ghostkit-admin-tabs">{resultTabs}</ul>
114 </div>
115 </div>
116 <div className="ghostkit-admin-content">{resultContent}</div>
117 </>
118 );
119 }
120