Skip to content

Commit

Permalink
Added custom events for loaders
Browse files Browse the repository at this point in the history
  • Loading branch information
Explicit12 committed May 13, 2024
1 parent af0e731 commit 9e30fcb
Show file tree
Hide file tree
Showing 7 changed files with 119 additions and 7 deletions.
22 changes: 17 additions & 5 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,21 @@ import { createLoaderTop, LoaderTopSymbol } from "./ui.loader-top/composables/us

export { default as createVueI18nAdapter } from "./adatper.locale/vue-i18n";
export { default as defaultEnLocale } from "./adatper.locale/locales/en";
export { useLocale } from "./composable.locale";
export { useLoaderRendering } from "./ui.loader-rendering/composables/useLoaderRendering";
export { useLoaderTop } from "./ui.loader-top/composables/useLoaderTop";
export { useLocale } from "./composable.locale";
export {
loaderRenderingOn,
loaderRenderingOff,
} from "./ui.loader-rendering/services/loaderRedering.service";
export {
loaderTopOn,
loaderTopOff,
addLoadingTopRequestUrl,
removeLoadingTopRequestUrl,
setLoadingTopComponentRequestQueue,
removeLoadingTopComponentRequestQueue,
} from "./ui.loader-top/services/loaderTop.service";
export {
notify,
notifySuccess,
Expand All @@ -22,13 +34,13 @@ export {

export function createVueless(options = {}) {
const i18n = createLocale(options.i18n);
const loaderRenderingState = createLoaderRendering();
const loaderTopState = createLoaderTop();
const loaderRendering = createLoaderRendering();
const loaderTop = createLoaderTop();

const install = (app) => {
app.provide(LocaleSymbol, i18n);
app.provide(LoaderRenderingSymbol, loaderRenderingState);
app.provide(LoaderTopSymbol, loaderTopState);
app.provide(LoaderRenderingSymbol, loaderRendering);
app.provide(LoaderTopSymbol, loaderTop);
};

return {
Expand Down
7 changes: 7 additions & 0 deletions src/ui.loader-rendering/Docs.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,10 @@ import { useLoaderRendering } from "vueless";
const { setRenderingFinished, isRenderingPage, setRenderingStarted } = useLoaderRendering();
`} language="jsx" dark />

## Control outside of component
You can control loader state outside of vue components using following methods.

<Source code={`
import { loaderRenderingOn, loaderRenderingOff } from "vueless";
`} language="jsx" dark />
12 changes: 11 additions & 1 deletion src/ui.loader-rendering/composables/useLoaderRendering.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { readonly, ref, inject } from "vue";
import { readonly, ref, inject, onMounted, onBeforeUnmount } from "vue";

export const LoaderRenderingSymbol = Symbol.for("vueless:loader-rendering");

Expand All @@ -23,5 +23,15 @@ export function createLoaderRendering() {
export function useLoaderRendering() {
const loaderRenderingState = inject(LoaderRenderingSymbol);

onMounted(() => {
window.addEventListener("setRenderingStarted", setRenderingStarted);
window.addEventListener("setRenderingFinished", setRenderingFinished);
});

onBeforeUnmount(() => {
window.removeEventListener("setRenderingStarted", setRenderingStarted);
window.removeEventListener("setRenderingFinished", setRenderingFinished);
});

return loaderRenderingState;
}
7 changes: 7 additions & 0 deletions src/ui.loader-rendering/services/loaderRedering.service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export function loaderRenderingOn() {
window.dispatchEvent(new Event("setRenderingStarted"));
}

export function loaderRenderingOff() {
window.dispatchEvent(new Event("setRenderingFinished"));
}
14 changes: 14 additions & 0 deletions src/ui.loader-top/Docs.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,17 @@ const {
removeComponentRequestQueue,
} = useLoaderTop();
`} language="jsx" dark />

## Control outside of component
You can control loader state outside of vue components using following methods.

<Source code={`
import {
loaderTopOn,
loaderTopOff,
addLoadingTopRequestUrl,
removeLoadingTopRequestUrl,
setLoadingTopComponentRequestQueue,
removeLoadingTopComponentRequestQueue,
} from "vueless";
`} language="jsx" dark />
32 changes: 31 additions & 1 deletion src/ui.loader-top/composables/useLoaderTop.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ref, readonly, inject } from "vue";
import { ref, readonly, inject, onMounted, onBeforeUnmount } from "vue";

export const LoaderTopSymbol = Symbol.for("vueless:loader-top");

Expand Down Expand Up @@ -42,6 +42,18 @@ function removeComponentRequestQueue() {
componentLoaderRequestQueue.value = [];
}

function addRequestUrlHandler(event) {
addRequestUrl(event.detail.url);
}

function removeRequestUrlHandler(event) {
removeRequestUrl(event.detail.url);
}

function setComponentRequestQueueHandler(event) {
setComponentRequestQueue(event.detail.requests);
}

export function createLoaderTop() {
return {
isLoading: readonly(isLoading),
Expand All @@ -61,5 +73,23 @@ export function createLoaderTop() {
export function useLoaderTop() {
const loaderTopState = inject(LoaderTopSymbol);

onMounted(() => {
window.addEventListener("setLoadingOn", setLoadingOn);
window.addEventListener("setLoadingOff", setLoadingOff);
window.addEventListener("addRequestUrl", addRequestUrlHandler);
window.addEventListener("removeRequestUrl", removeRequestUrlHandler);
window.addEventListener("setComponentRequestQueue", setComponentRequestQueueHandler);
window.addEventListener("removeComponentRequestQueue", removeComponentRequestQueue);
});

onBeforeUnmount(() => {
window.removeEventListener("setLoadingOn", setLoadingOn);
window.removeEventListener("setLoadingOff", setLoadingOff);
window.removeEventListener("addRequestUrl", addRequestUrlHandler);
window.removeEventListener("removeRequestUrl", removeRequestUrlHandler);
window.removeEventListener("setComponentRequestQueue", setComponentRequestQueueHandler);
window.removeEventListener("removeComponentRequestQueue", removeComponentRequestQueue);
});

return loaderTopState;
}
32 changes: 32 additions & 0 deletions src/ui.loader-top/services/loaderTop.service.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,35 @@ export const queue = (() => {
}
};
})();

export function loaderTopOn() {
window.dispatchEvent(new Event("setLoadingOn"));
}

export function loaderTopOff() {
window.dispatchEvent(new Event("setLoadingOff"));
}

export function addLoadingTopRequestUrl(url) {
const addRequestUrlEvent = new CustomEvent("setLoadingOff", { detail: { url } });

window.dispatchEvent(addRequestUrlEvent);
}

export function removeLoadingTopRequestUrl(url) {
const removeRequestUrlEvent = new CustomEvent("removeRequestUrl", { detail: { url } });

window.dispatchEvent(removeRequestUrlEvent);
}

export function setLoadingTopComponentRequestQueue(requests) {
const setComponentRequestQueueEvent = new CustomEvent("setComponentRequestQueue", {
detail: { requests },
});

window.dispatchEvent(setComponentRequestQueueEvent);
}

export function removeLoadingTopComponentRequestQueue() {
window.dispatchEvent("removeComponentRequestQueue");
}

0 comments on commit 9e30fcb

Please sign in to comment.