PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.1.7.2
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.1.7.2
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
learnpress / assets / src / apps / js / frontend / profile / course-tab.js

course-tab.js in LearnPress – WordPress LMS Plugin for Create and Sell Online Courses 4.1.7.2, at assets/src/apps/js/frontend/profile/course-tab.js

173 lines 4.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { addQueryArgs } from '@wordpress/url';
2
3 // Rest API load content course enrolled, created - Nhamdv.
4 const courseTab = () => {
5 const elements = document.querySelectorAll( '.learn-press-course-tab__filter__content' );
6
7 const getResponse = ( ele, dataset, append = false, viewMoreEle = false ) => {
8 wp.apiFetch( {
9 path: addQueryArgs( 'lp/v1/profile/course-tab', dataset ),
10 method: 'GET',
11 } ).then( ( response ) => {
12 const skeleton = ele.querySelector( '.lp-skeleton-animation' );
13 skeleton && skeleton.remove();
14
15 if ( response.status === 'success' && response.data ) {
16 if ( append ) {
17 ele.innerHTML += response.data;
18 } else {
19 ele.innerHTML = response.data;
20 }
21 } else if ( append ) {
22 ele.innerHTML += `<div class="lp-ajax-message" style="display:block">${ response.message && response.message }</div>`;
23 } else {
24 ele.innerHTML = `<div class="lp-ajax-message" style="display:block">${ response.message && response.message }</div>`;
25 }
26
27 if ( viewMoreEle ) {
28 viewMoreEle.classList.remove( 'loading' );
29
30 const paged = viewMoreEle.dataset.paged;
31 const numberPage = viewMoreEle.dataset.number;
32
33 if ( numberPage <= paged ) {
34 viewMoreEle.remove();
35 }
36
37 viewMoreEle.dataset.paged = parseInt( paged ) + 1;
38 }
39
40 viewMore( ele, dataset );
41 } ).catch( ( error ) => {
42 if ( append ) {
43 ele.innerHTML += `<div class="lp-ajax-message error" style="display:block">${ error.message && error.message }</div>`;
44 } else {
45 ele.innerHTML = `<div class="lp-ajax-message error" style="display:block">${ error.message && error.message }</div>`;
46 }
47
48 if ( viewMoreEle ) {
49 viewMoreEle.classList.remove( 'loading' );
50
51 const paged = viewMoreEle.dataset.paged;
52 const numberPage = viewMoreEle.dataset.number;
53
54 if ( numberPage <= paged ) {
55 viewMoreEle.remove();
56 }
57
58 viewMoreEle.dataset.paged = parseInt( paged ) + 1;
59 }
60 } );
61 };
62
63 if ( 'IntersectionObserver' in window ) {
64 const eleObserver = new IntersectionObserver( ( entries, observer ) => {
65 entries.forEach( ( entry ) => {
66 if ( entry.isIntersecting ) {
67 const ele = entry.target;
68
69 const params = ele.parentNode.querySelector( '.lp_profile_tab_input_param' );
70 const data = { ...JSON.parse( params.value ), status: ele.dataset.tab || '' };
71
72 getResponse( ele, data );
73
74 eleObserver.unobserve( ele );
75 }
76 } );
77 } );
78
79 [ ...elements ].map( ( ele ) => {
80 if ( ele.dataset.tab !== 'all' ) {
81 eleObserver.observe( ele );
82 } else {
83 const params = ele.parentNode.querySelector( '.lp_profile_tab_input_param' );
84 const data = { ...JSON.parse( params.value ), status: ele.dataset.tab === 'all' ? '' : ele.dataset.tab || '' };
85
86 getResponse( ele, data );
87 }
88 } );
89 }
90
91 const changeFilter = () => {
92 const tabs = document.querySelectorAll( '.learn-press-course-tab-filters' );
93
94 tabs.forEach( ( tab ) => {
95 const filters = tab.querySelectorAll( '.learn-press-filters a' );
96
97 filters.forEach( ( filter ) => {
98 filter.addEventListener( 'click', ( e ) => {
99 e.preventDefault();
100
101 const tabName = filter.dataset.tab;
102
103 [ ...filters ].map( ( ele ) => {
104 ele.classList.remove( 'active' );
105 } );
106
107 filter.classList.add( 'active' );
108
109 [ ...tab.querySelectorAll( '.learn-press-course-tab__filter__content' ) ].map( ( ele ) => {
110 ele.style.display = 'none';
111
112 if ( ele.dataset.tab === tabName ) {
113 ele.style.display = '';
114 }
115 } );
116 } );
117 } );
118 } );
119 };
120
121 changeFilter();
122
123 const changeTab = () => {
124 const tabUls = document.querySelectorAll( '.learn-press-profile-course__tab__inner' );
125
126 tabUls.forEach( ( tabUl ) => {
127 const tabs = tabUl.querySelectorAll( 'li> a' );
128
129 tabs.forEach( ( tab ) => {
130 tab.addEventListener( 'click', ( e ) => {
131 e.preventDefault();
132
133 const tabName = tab.dataset.tab;
134
135 [ ...tabs ].map( ( ele ) => {
136 ele.classList.remove( 'active' );
137 } );
138
139 tab.classList.add( 'active' );
140
141 [ ...document.querySelectorAll( '.learn-press-course-tab-filters' ) ].map( ( ele ) => {
142 ele.style.display = 'none';
143
144 if ( ele.dataset.tab === tabName ) {
145 ele.style.display = '';
146 }
147 } );
148 } );
149 } );
150 } );
151 };
152 changeTab();
153
154 const viewMore = ( ele, dataset ) => {
155 const viewMoreEle = ele.querySelector( 'button[data-paged]' );
156
157 if ( viewMoreEle ) {
158 viewMoreEle.addEventListener( 'click', ( e ) => {
159 e.preventDefault();
160
161 const paged = viewMoreEle && viewMoreEle.dataset.paged;
162
163 viewMoreEle.classList.add( 'loading' );
164
165 const element = dataset.layout === 'list' ? '.lp_profile_course_progress' : '.learn-press-courses';
166
167 getResponse( ele.querySelector( element ), { ...dataset, ...{ paged } }, true, viewMoreEle );
168 } );
169 }
170 };
171 };
172 export default courseTab;
173