PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.3.9
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.3.9
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 / js / frontend / profile / course-tab.js

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

143 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { lpAddQueryArgs, lpFetchAPI } from '../../utils.js';
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 let url = lpData.lp_rest_url + 'lp/v1/profile/course-tab';
9 url = lpAddQueryArgs( url, dataset );
10
11 const callBack = {
12 success: ( response ) => {
13 const skeleton = ele.querySelector( '.lp-skeleton-animation' );
14 skeleton && skeleton.remove();
15
16 if ( response.status === 'success' && response.data ) {
17 if ( append ) {
18 ele.innerHTML += response.data;
19 } else {
20 ele.innerHTML = response.data;
21 }
22 } else if ( append ) {
23 ele.innerHTML += `<div class="lp-ajax-message" style="display:block">${ response.message && response.message }</div>`;
24 } else {
25 ele.innerHTML = `<div class="lp-ajax-message" style="display:block">${ response.message && response.message }</div>`;
26 }
27
28 if ( viewMoreEle ) {
29 viewMoreEle.classList.remove( 'loading' );
30
31 const paged = parseInt( viewMoreEle.dataset.paged );
32 const numberPage = parseInt( viewMoreEle.dataset.number );
33
34 if ( numberPage <= paged ) {
35 viewMoreEle.remove();
36 }
37
38 viewMoreEle.dataset.paged = paged + 1;
39 }
40
41 viewMore( ele, dataset );
42 },
43 error: ( error ) => {
44 console.log( error );
45 },
46 completed: () => {
47
48 },
49 };
50
51 let paramsFetch = {};
52
53 if ( 0 !== parseInt( lpData.user_id ) ) {
54 paramsFetch = {
55 headers: {
56 'X-WP-Nonce': lpData.nonce,
57 },
58 };
59 }
60
61 lpFetchAPI( url, paramsFetch, callBack );
62 };
63
64 if ( 'IntersectionObserver' in window ) {
65 const eleObserver = new IntersectionObserver( ( entries, observer ) => {
66 entries.forEach( ( entry ) => {
67 if ( entry.isIntersecting ) {
68 const ele = entry.target;
69
70 const params = ele.parentNode.querySelector( '.lp_profile_tab_input_param' );
71 const data = { ...JSON.parse( params.value ), status: ele.dataset.tab || '' };
72
73 getResponse( ele, data );
74
75 eleObserver.unobserve( ele );
76 }
77 } );
78 } );
79
80 [ ...elements ].map( ( ele ) => {
81 if ( ele.dataset.tab !== 'all' ) {
82 eleObserver.observe( ele );
83 } else {
84 const params = ele.parentNode.querySelector( '.lp_profile_tab_input_param' );
85 const data = { ...JSON.parse( params.value ), status: ele.dataset.tab === 'all' ? '' : ele.dataset.tab || '' };
86
87 getResponse( ele, data );
88 }
89 } );
90 }
91
92 const changeFilter = () => {
93 const tabs = document.querySelectorAll( '.learn-press-course-tab-filters' );
94
95 tabs.forEach( ( tab ) => {
96 const filters = tab.querySelectorAll( '.learn-press-filters a' );
97
98 filters.forEach( ( filter ) => {
99 filter.addEventListener( 'click', ( e ) => {
100 e.preventDefault();
101
102 const tabName = filter.dataset.tab;
103
104 [ ...filters ].map( ( ele ) => {
105 ele.classList.remove( 'active' );
106 } );
107
108 filter.classList.add( 'active' );
109
110 [ ...tab.querySelectorAll( '.learn-press-course-tab__filter__content' ) ].map( ( ele ) => {
111 ele.style.display = 'none';
112
113 if ( ele.dataset.tab === tabName ) {
114 ele.style.display = '';
115 }
116 } );
117 } );
118 } );
119 } );
120 };
121
122 changeFilter();
123
124 const viewMore = ( ele, dataset ) => {
125 const viewMoreEle = ele.querySelector( 'button[data-paged]' );
126
127 if ( viewMoreEle ) {
128 viewMoreEle.addEventListener( 'click', ( e ) => {
129 e.preventDefault();
130
131 const paged = viewMoreEle && viewMoreEle.dataset.paged;
132
133 viewMoreEle.classList.add( 'loading' );
134
135 const element = dataset.layout === 'list' ? '.lp_profile_course_progress' : '.learn-press-courses';
136
137 getResponse( ele.querySelector( element ), { ...dataset, ...{ paged } }, true, viewMoreEle );
138 } );
139 }
140 };
141 };
142 export default courseTab;
143