Skip to content

Commit

Permalink
Feat: added new onChange callback
Browse files Browse the repository at this point in the history
  • Loading branch information
orestbida committed Jan 3, 2023
1 parent 4dcd111 commit fe085ca
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 9 deletions.
24 changes: 23 additions & 1 deletion demo/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,28 @@ const waitFor = async (opts) => {
};

im.run({

/**
* @param {{
* servicesState: Map<string, boolean>
* eventSource: 'click' | 'api'
* }}
*/
onChange: ({servicesState, eventSource}) => {
if(eventSource === 'api')
return;

const enabledServices = [...servicesState]
.filter(([k, v]) => v === true)
.map(([k, v]) => k);

console.log("www", enabledServices)

for(const [key, value] of servicesState){
console.log(key, value);
}
},

currLang: 'en',
// autoLang: true,

Expand Down Expand Up @@ -169,7 +191,7 @@ im.run({
embedUrl: 'https://player.vimeo.com/video/{data-id}',

iframe: {
allow : 'fullscreen; picture-in-picture, allowfullscreen;'
allow : 'fullscreen; picture-in-picture;'
},

thumbnailUrl: async (dataId, setThumbnail) => {
Expand Down
2 changes: 1 addition & 1 deletion dist/iframemanager.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

57 changes: 50 additions & 7 deletions src/iframemanager.js
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,11 @@
/**
* @type {Document}
*/
doc = {};
doc = {},

servicesState = new Map(),

onChangeCallback;

/**
* Prevent direct use of the following
Expand Down Expand Up @@ -502,6 +506,9 @@
load_all_button.addEventListener('click', () => {
showVideo();
api.acceptService(serviceName);

if(isFunction(onChangeCallback))
onChangeCallback({servicesState, eventSource: 'click'});
});

appendChild(buttons, load_all_button);
Expand Down Expand Up @@ -689,12 +696,27 @@
stopObserver = false;

if(serviceName === 'all'){
let changed = false;

for(const name of serviceNames)
acceptHelper(name, services[name]);
for(const name of serviceNames){
if(!servicesState.get(name)){
servicesState.set(name, true);
acceptHelper(name, services[name]);
changed = true;
}
}

changed && isFunction(onChangeCallback)
&& onChangeCallback({servicesState, eventSource: 'api'});

}else if(serviceNames.includes(serviceName)){
acceptHelper(serviceName, services[serviceName]);
if(!servicesState.get(serviceName)){
servicesState.set(serviceName, true);
acceptHelper(serviceName, services[serviceName]);

isFunction(onChangeCallback)
&& onChangeCallback({servicesState, eventSource: 'api'});
}
}
},

Expand All @@ -709,22 +731,41 @@
if(serviceName === 'all'){
stopObserver = true;

for(const name of serviceNames)
rejectHelper(name, services[name]);
let changed = false;

for(const name of serviceNames){
if(servicesState.get(name)){
servicesState.set(name, false);
rejectHelper(name, services[name]);
changed = true;
}
}

changed && isFunction(onChangeCallback)
&& onChangeCallback({servicesState, eventSource: 'api'});

}else if(serviceNames.includes(serviceName)){
rejectHelper(serviceName, services[serviceName]);
if(servicesState.get(serviceName)){
servicesState.set(serviceName, false);
rejectHelper(serviceName, services[serviceName]);

isFunction(onChangeCallback)
&& onChangeCallback({servicesState, eventSource: 'api'});
}
}
},

run : (_config) => {

doc = document;

/**
* Object with all services config.
*/
services = _config.services;

onChangeCallback = _config.onChange;

/**
* Array containing the names of all services
*/
Expand Down Expand Up @@ -789,6 +830,8 @@

const cookieExists = getCookie(cookieName);

servicesState.set(serviceName, !!cookieExists);

// if cookie is not set => show notice
if(cookieExists){
createAllNotices(serviceName, currService, true);
Expand Down

0 comments on commit fe085ca

Please sign in to comment.