PluginProbe
Block Animations, Motion & Scroll Effects – Ghost Kit / 3.3.3
Block Animations, Motion & Scroll Effects – Ghost Kit v3.3.3
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.3.3, at settings/containers/container.js

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