vueless 1.2.10-beta.4 → 1.2.10-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/composables/useRequestQueue.ts +47 -0
- package/index.d.ts +3 -2
- package/index.ts +3 -1
- package/package.json +1 -1
- package/ui.form-calendar/utilCalendar.ts +2 -2
- package/ui.loader-overlay/useLoaderOverlay.ts +4 -4
- package/ui.loader-progress/ULoaderProgress.vue +39 -42
- package/ui.loader-progress/storybook/stories.ts +0 -8
- package/ui.loader-progress/types.ts +2 -2
- package/ui.loader-progress/useLoaderProgress.ts +19 -27
- package/ui.loader-progress/utilLoaderProgress.ts +12 -18
- package/utils/requestQueue.ts +21 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { readonly, ref } from "vue";
|
|
2
|
+
|
|
3
|
+
import type { Ref } from "vue";
|
|
4
|
+
|
|
5
|
+
import { getRequestWithoutQuery } from "../utils/requestQueue";
|
|
6
|
+
|
|
7
|
+
const requestQueue = ref<string[]>([]);
|
|
8
|
+
|
|
9
|
+
function addToRequestQueue(url: string | string[]): void {
|
|
10
|
+
Array.isArray(url)
|
|
11
|
+
? requestQueue.value.push(...url.map(getRequestWithoutQuery))
|
|
12
|
+
: requestQueue.value.push(getRequestWithoutQuery(url));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function removeFromRequestQueue(url: string | string[]): void {
|
|
16
|
+
if (Array.isArray(url)) {
|
|
17
|
+
url.map(getRequestWithoutQuery).forEach(removeFromRequestQueue);
|
|
18
|
+
} else {
|
|
19
|
+
requestQueue.value = requestQueue.value.filter((item) => item !== getRequestWithoutQuery(url));
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function isLoading(request: string | string[]): boolean {
|
|
24
|
+
return Array.isArray(request)
|
|
25
|
+
? request.some((url) => requestQueue.value.some((item: string) => item === url))
|
|
26
|
+
: requestQueue.value.some((item: string) => item === request);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function onAddToRequestQueue(event: CustomEvent<{ request: string }>) {
|
|
30
|
+
addToRequestQueue(event.detail.request);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function onRemoveFromRequestQueue(event: CustomEvent<{ request: string }>) {
|
|
34
|
+
removeFromRequestQueue(event.detail.request);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
window.addEventListener("addToRequestQueue", onAddToRequestQueue as EventListener);
|
|
38
|
+
window.addEventListener("removeFromRequestQueue", onRemoveFromRequestQueue as EventListener);
|
|
39
|
+
|
|
40
|
+
export function useRequestQueue() {
|
|
41
|
+
return {
|
|
42
|
+
isLoading,
|
|
43
|
+
addToRequestQueue,
|
|
44
|
+
removeFromRequestQueue,
|
|
45
|
+
requestQueue: readonly(requestQueue) as Readonly<Ref<readonly string[]>>,
|
|
46
|
+
};
|
|
47
|
+
}
|
package/index.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export {
|
|
|
15
15
|
createDebounce,
|
|
16
16
|
hasSlotContent,
|
|
17
17
|
} from "./utils/helper";
|
|
18
|
+
export { addToRequestQueue, removeFromRequestQueue } from "./utils/requestQueue";
|
|
18
19
|
export { isMac, isPWA, isIOS, isAndroid, isMobileApp, isWindows } from "./utils/platform";
|
|
19
20
|
export { cx, cva, compose, getDefaults, setVuelessConfig, setColor, vuelessConfig } from "./utils/ui";
|
|
20
21
|
export { getTheme, setTheme, resetTheme, normalizeThemeConfig, cssVar, setRootCSSVariables } from "./utils/theme";
|
|
@@ -27,13 +28,13 @@ export { createVueI18nAdapter } from "./adapter.locale/vue-i18n";
|
|
|
27
28
|
export { useLocale } from "./composables/useLocale";
|
|
28
29
|
export { default as useUI } from "./composables/useUI";
|
|
29
30
|
export { useDarkMode } from "./composables/useDarkMode";
|
|
30
|
-
export {
|
|
31
|
+
export { useRequestQueue } from "./composables/useRequestQueue";
|
|
32
|
+
export { useLoaderOverlay } from "./ui.loader-overlay/useLoaderOverlay";
|
|
31
33
|
export { useMutationObserver } from "./composables/useMutationObserver";
|
|
32
34
|
export { Direction, useAutoPosition } from "./composables/useAutoPosition";
|
|
33
35
|
export { useComponentLocaleMessages } from "./composables/useComponentLocaleMassages";
|
|
34
36
|
/* loaders */
|
|
35
37
|
export { loaderProgressOn, loaderProgressOff } from "./ui.loader-progress/utilLoaderProgress";
|
|
36
|
-
export { useLoaderOverlay } from "./ui.loader-overlay/useLoaderOverlay";
|
|
37
38
|
export { loaderOverlayOn, loaderOverlayOff } from "./ui.loader-overlay/utilLoaderOverlay";
|
|
38
39
|
/* notifications */
|
|
39
40
|
export {
|
package/index.ts
CHANGED
|
@@ -21,6 +21,7 @@ export {
|
|
|
21
21
|
createDebounce,
|
|
22
22
|
hasSlotContent,
|
|
23
23
|
} from "./utils/helper";
|
|
24
|
+
export { addToRequestQueue, removeFromRequestQueue } from "./utils/requestQueue";
|
|
24
25
|
export { isMac, isPWA, isIOS, isAndroid, isMobileApp, isWindows } from "./utils/platform";
|
|
25
26
|
export { cx, cva, compose, getDefaults, setVuelessConfig, setColor, vuelessConfig } from "./utils/ui";
|
|
26
27
|
export { getTheme, setTheme, resetTheme, normalizeThemeConfig, cssVar, setRootCSSVariables } from "./utils/theme";
|
|
@@ -33,13 +34,14 @@ export { createVueI18nAdapter } from "./adapter.locale/vue-i18n";
|
|
|
33
34
|
export { useLocale } from "./composables/useLocale";
|
|
34
35
|
export { default as useUI } from "./composables/useUI";
|
|
35
36
|
export { useDarkMode } from "./composables/useDarkMode";
|
|
37
|
+
export { useRequestQueue } from "./composables/useRequestQueue";
|
|
38
|
+
export { useLoaderOverlay } from "./ui.loader-overlay/useLoaderOverlay";
|
|
36
39
|
export { useLoaderProgress } from "./ui.loader-progress/useLoaderProgress";
|
|
37
40
|
export { useMutationObserver } from "./composables/useMutationObserver";
|
|
38
41
|
export { Direction, useAutoPosition } from "./composables/useAutoPosition";
|
|
39
42
|
export { useComponentLocaleMessages } from "./composables/useComponentLocaleMassages";
|
|
40
43
|
/* loaders */
|
|
41
44
|
export { loaderProgressOn, loaderProgressOff } from "./ui.loader-progress/utilLoaderProgress";
|
|
42
|
-
export { useLoaderOverlay } from "./ui.loader-overlay/useLoaderOverlay";
|
|
43
45
|
export { loaderOverlayOn, loaderOverlayOff } from "./ui.loader-overlay/utilLoaderOverlay";
|
|
44
46
|
/* notifications */
|
|
45
47
|
export {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vueless",
|
|
3
|
-
"version": "1.2.10-beta.
|
|
3
|
+
"version": "1.2.10-beta.6",
|
|
4
4
|
"description": "Vue Styleless UI Component Library, powered by Tailwind CSS.",
|
|
5
5
|
"author": "Johnny Grid <hello@vueless.com> (https://vueless.com)",
|
|
6
6
|
"homepage": "https://vueless.com",
|
|
@@ -86,7 +86,7 @@ export function parseDate<TLocale extends DateLocale>(
|
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {
|
|
89
|
-
throw new Error(`Invalid date provided: ${originalDate}`);
|
|
89
|
+
throw new Error(`[vueless] Invalid date provided: ${originalDate}`);
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
if (timeless === true) {
|
|
@@ -158,7 +158,7 @@ export function dateIsOutOfRange<TLocale extends DateLocale>(
|
|
|
158
158
|
dateFormat: string | null = null,
|
|
159
159
|
) {
|
|
160
160
|
if ((!dateFormat && typeof min === "string") || (!dateFormat && typeof max === "string")) {
|
|
161
|
-
throw new Error("strings needs a date format");
|
|
161
|
+
throw new Error("[vueless] strings needs a date format.");
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
const minDate =
|
|
@@ -2,15 +2,15 @@ import { inject, readonly, ref } from "vue";
|
|
|
2
2
|
|
|
3
3
|
import type { Ref, InjectionKey } from "vue";
|
|
4
4
|
|
|
5
|
-
export const LoaderOverlaySymbol: InjectionKey<LoaderOverlay> =
|
|
6
|
-
Symbol.for("vueless:loader-overlay");
|
|
7
|
-
|
|
8
5
|
interface LoaderOverlay {
|
|
9
6
|
isLoading: Readonly<Ref<boolean, boolean>>;
|
|
10
7
|
loaderOverlayOn: () => void;
|
|
11
8
|
loaderOverlayOff: () => void;
|
|
12
9
|
}
|
|
13
10
|
|
|
11
|
+
export const LoaderOverlaySymbol: InjectionKey<LoaderOverlay> =
|
|
12
|
+
Symbol.for("vueless:loader-overlay");
|
|
13
|
+
|
|
14
14
|
const isLoading = ref(true);
|
|
15
15
|
|
|
16
16
|
function loaderOverlayOn(): void {
|
|
@@ -34,7 +34,7 @@ export function useLoaderOverlay(): LoaderOverlay {
|
|
|
34
34
|
|
|
35
35
|
if (!loaderOverlay) {
|
|
36
36
|
throw new Error(
|
|
37
|
-
"LoaderOverlay not provided. Ensure you are using `provide` with `LoaderOverlaySymbol`.",
|
|
37
|
+
"[vueless] LoaderOverlay not provided. Ensure you are using `provide` with `LoaderOverlaySymbol`.",
|
|
38
38
|
);
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -3,9 +3,11 @@ import { computed, watch, ref, useTemplateRef, onBeforeMount, onBeforeUnmount }
|
|
|
3
3
|
|
|
4
4
|
import useUI from "../composables/useUI";
|
|
5
5
|
import { getDefaults } from "../utils/ui";
|
|
6
|
+
import { useRequestQueue } from "../composables/useRequestQueue";
|
|
7
|
+
import { getRequestWithoutQuery } from "../utils/requestQueue";
|
|
6
8
|
|
|
7
|
-
import { clamp, queue, getRequestWithoutQuery } from "./utilLoaderProgress";
|
|
8
9
|
import { useLoaderProgress } from "./useLoaderProgress";
|
|
10
|
+
import { clamp, queue } from "./utilLoaderProgress";
|
|
9
11
|
|
|
10
12
|
import { COMPONENT_NAME, MAXIMUM, SPEED } from "./constants";
|
|
11
13
|
import defaultConfig from "./config";
|
|
@@ -25,46 +27,10 @@ const progress = ref(0);
|
|
|
25
27
|
const opacity = ref(1);
|
|
26
28
|
const status = ref<number | null>(null);
|
|
27
29
|
|
|
30
|
+
const { requestQueue } = useRequestQueue();
|
|
31
|
+
const { loaderProgressOff, loaderProgressOn } = useLoaderProgress();
|
|
28
32
|
const progressRef = useTemplateRef<HTMLDivElement>("progress-bar");
|
|
29
33
|
|
|
30
|
-
const { requestQueue, loaderProgressOff, loaderProgressOn } = useLoaderProgress();
|
|
31
|
-
|
|
32
|
-
onBeforeMount(() => {
|
|
33
|
-
if (window.__VuelessProgressLoaderInstance === undefined) {
|
|
34
|
-
window.__VuelessProgressLoaderInstance = 0;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (!window.__VuelessProgressLoaderInstance) {
|
|
38
|
-
window.addEventListener("loaderProgressOn", onLoaderProgressOn as EventListener);
|
|
39
|
-
window.addEventListener("loaderProgressOff", onLoaderProgressOff as EventListener);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
window.__VuelessProgressLoaderInstance += 1;
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
onBeforeUnmount(() => {
|
|
46
|
-
if (window.__VuelessProgressLoaderInstance === undefined) {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
window.__VuelessProgressLoaderInstance -= 1;
|
|
51
|
-
|
|
52
|
-
if (!window.__VuelessProgressLoaderInstance) {
|
|
53
|
-
delete window.__VuelessProgressLoaderInstance;
|
|
54
|
-
|
|
55
|
-
window.removeEventListener("loaderProgressOn", onLoaderProgressOn as EventListener);
|
|
56
|
-
window.removeEventListener("loaderProgressOff", onLoaderProgressOff as EventListener);
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
function onLoaderProgressOn(event: CustomEvent<{ resource: string }>) {
|
|
61
|
-
loaderProgressOn(event.detail.resource);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
function onLoaderProgressOff(event: CustomEvent<{ resource: string }>) {
|
|
65
|
-
loaderProgressOff(event.detail.resource);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
34
|
const isLoading = computed(() => {
|
|
69
35
|
return typeof status.value === "number";
|
|
70
36
|
});
|
|
@@ -151,12 +117,10 @@ function start() {
|
|
|
151
117
|
}
|
|
152
118
|
|
|
153
119
|
function set(amount: number) {
|
|
154
|
-
let currentProgress;
|
|
120
|
+
let currentProgress = 0;
|
|
155
121
|
|
|
156
122
|
if (isLoading.value) {
|
|
157
123
|
currentProgress = amount < progress.value ? clamp(amount, 0, 100) : clamp(amount, 0.8, 100);
|
|
158
|
-
} else {
|
|
159
|
-
currentProgress = 0;
|
|
160
124
|
}
|
|
161
125
|
|
|
162
126
|
status.value = currentProgress === 100 ? null : currentProgress;
|
|
@@ -205,6 +169,39 @@ function stop() {
|
|
|
205
169
|
set(100);
|
|
206
170
|
}
|
|
207
171
|
|
|
172
|
+
function onLoaderProgressOn(event: CustomEvent<{ request: string }>) {
|
|
173
|
+
loaderProgressOn(event.detail.request);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function onLoaderProgressOff(event: CustomEvent<{ request: string }>) {
|
|
177
|
+
loaderProgressOff(event.detail.request);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
onBeforeMount(() => {
|
|
181
|
+
if (!window.__VuelessLoaderProgressInstanceCount) {
|
|
182
|
+
window.addEventListener("loaderProgressOn", onLoaderProgressOn as EventListener);
|
|
183
|
+
window.addEventListener("loaderProgressOff", onLoaderProgressOff as EventListener);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
window.__VuelessLoaderProgressInstanceCount = window.__VuelessLoaderProgressInstanceCount ?? 0;
|
|
187
|
+
window.__VuelessLoaderProgressInstanceCount += 1;
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
onBeforeUnmount(() => {
|
|
191
|
+
if (window.__VuelessLoaderProgressInstanceCount === undefined) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
window.__VuelessLoaderProgressInstanceCount -= 1;
|
|
196
|
+
|
|
197
|
+
if (!window.__VuelessLoaderProgressInstanceCount) {
|
|
198
|
+
delete window.__VuelessLoaderProgressInstanceCount;
|
|
199
|
+
|
|
200
|
+
window.removeEventListener("loaderProgressOn", onLoaderProgressOn as EventListener);
|
|
201
|
+
window.removeEventListener("loaderProgressOff", onLoaderProgressOff as EventListener);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
|
|
208
205
|
defineExpose({
|
|
209
206
|
/**
|
|
210
207
|
* Start loading animation.
|
|
@@ -6,7 +6,6 @@ import UButton from "../../ui.button/UButton.vue";
|
|
|
6
6
|
import URow from "../../ui.container-row/URow.vue";
|
|
7
7
|
import UCol from "../../ui.container-col/UCol.vue";
|
|
8
8
|
|
|
9
|
-
import { useLoaderProgress } from "../useLoaderProgress";
|
|
10
9
|
import { loaderProgressOff, loaderProgressOn } from "../utilLoaderProgress";
|
|
11
10
|
|
|
12
11
|
import type { Meta, StoryFn } from "@storybook/vue3-vite";
|
|
@@ -34,13 +33,6 @@ export default {
|
|
|
34
33
|
const DefaultTemplate: StoryFn<ULoaderProgressArgs> = (args: ULoaderProgressArgs) => ({
|
|
35
34
|
components: { ULoaderProgress, UButton, URow },
|
|
36
35
|
setup() {
|
|
37
|
-
const loaderProgress = useLoaderProgress();
|
|
38
|
-
|
|
39
|
-
if (!loaderProgress) {
|
|
40
|
-
throw new Error("LoaderProgress is not provided. Ensure it is properly injected.");
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const { loaderProgressOn, loaderProgressOff } = loaderProgress;
|
|
44
36
|
const slots = getSlotNames(ULoaderProgress.__name);
|
|
45
37
|
|
|
46
38
|
return { args, slots, loaderProgressOn, loaderProgressOff };
|
|
@@ -3,7 +3,7 @@ import type { ComponentConfig } from "../types";
|
|
|
3
3
|
|
|
4
4
|
declare global {
|
|
5
5
|
interface Window {
|
|
6
|
-
|
|
6
|
+
__VuelessLoaderProgressInstanceCount?: number;
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
9
|
|
|
@@ -27,7 +27,7 @@ export interface Props {
|
|
|
27
27
|
/**
|
|
28
28
|
* API resource names (endpoint URIs).
|
|
29
29
|
*/
|
|
30
|
-
resources?: string | string[] | "any"
|
|
30
|
+
resources?: string | string[] | "any";
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
33
|
* Loader progress size.
|
|
@@ -2,39 +2,31 @@ import { inject, readonly, ref } from "vue";
|
|
|
2
2
|
|
|
3
3
|
import type { Ref } from "vue";
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
export const LoaderProgressSymbol = Symbol.for("vueless:loader-progress");
|
|
5
|
+
import { useRequestQueue } from "../composables/useRequestQueue";
|
|
8
6
|
|
|
9
7
|
type LoaderProgress = {
|
|
10
|
-
|
|
11
|
-
loaderProgressOn: (
|
|
12
|
-
loaderProgressOff: (
|
|
8
|
+
isLoading: Readonly<Ref<boolean, boolean>>;
|
|
9
|
+
loaderProgressOn: (request: string | string[]) => void;
|
|
10
|
+
loaderProgressOff: (request: string | string[]) => void;
|
|
13
11
|
};
|
|
14
12
|
|
|
15
|
-
export
|
|
16
|
-
const requestQueue = ref<string[]>([]);
|
|
17
|
-
|
|
18
|
-
function loaderProgressOn(url: string | string[]): void {
|
|
19
|
-
if (Array.isArray(url)) {
|
|
20
|
-
requestQueue.value.push(...url.map(getRequestWithoutQuery));
|
|
21
|
-
} else {
|
|
22
|
-
requestQueue.value.push(getRequestWithoutQuery(url));
|
|
23
|
-
}
|
|
24
|
-
}
|
|
13
|
+
export const LoaderProgressSymbol = Symbol.for("vueless:loader-progress");
|
|
25
14
|
|
|
26
|
-
|
|
27
|
-
if (Array.isArray(url)) {
|
|
28
|
-
url.map(getRequestWithoutQuery).forEach(loaderProgressOff);
|
|
29
|
-
} else {
|
|
30
|
-
requestQueue.value = requestQueue.value.filter(
|
|
31
|
-
(item) => item !== getRequestWithoutQuery(url),
|
|
32
|
-
);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
15
|
+
const { addToRequestQueue, removeFromRequestQueue } = useRequestQueue();
|
|
35
16
|
|
|
17
|
+
const isLoading = ref(true);
|
|
18
|
+
|
|
19
|
+
function loaderProgressOn(request?: string | string[]): void {
|
|
20
|
+
request ? addToRequestQueue(request) : (isLoading.value = true);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function loaderProgressOff(request?: string | string[]): void {
|
|
24
|
+
request ? removeFromRequestQueue(request) : (isLoading.value = false);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export function createLoaderProgress(): LoaderProgress {
|
|
36
28
|
return {
|
|
37
|
-
|
|
29
|
+
isLoading: readonly(isLoading),
|
|
38
30
|
loaderProgressOn,
|
|
39
31
|
loaderProgressOff,
|
|
40
32
|
};
|
|
@@ -45,7 +37,7 @@ export function useLoaderProgress(): LoaderProgress {
|
|
|
45
37
|
|
|
46
38
|
if (!loaderProgress) {
|
|
47
39
|
throw new Error(
|
|
48
|
-
"LoaderProgress not provided. Ensure you are using `provide` with `LoaderProgressSymbol`.",
|
|
40
|
+
"[vueless] LoaderProgress not provided. Ensure you are using `provide` with `LoaderProgressSymbol`.",
|
|
49
41
|
);
|
|
50
42
|
}
|
|
51
43
|
|
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
export function loaderProgressOn(request: string | string[]): void {
|
|
2
|
+
const loaderProgressOnEvent = new CustomEvent("loaderProgressOn", { detail: { request } });
|
|
3
|
+
|
|
4
|
+
window.dispatchEvent(loaderProgressOnEvent);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function loaderProgressOff(request: string | string[]): void {
|
|
8
|
+
const loaderProgressOffEvent = new CustomEvent("loaderProgressOff", { detail: { request } });
|
|
9
|
+
|
|
10
|
+
window.dispatchEvent(loaderProgressOffEvent);
|
|
11
|
+
}
|
|
12
|
+
|
|
1
13
|
export function clamp(n: number, min: number, max: number): number {
|
|
2
14
|
if (n < min) {
|
|
3
15
|
return min;
|
|
@@ -29,21 +41,3 @@ export const queue = (() => {
|
|
|
29
41
|
}
|
|
30
42
|
};
|
|
31
43
|
})();
|
|
32
|
-
|
|
33
|
-
export function loaderProgressOn(resource: string): void {
|
|
34
|
-
const loaderProgressOnEvent = new CustomEvent("loaderProgressOn", { detail: { resource } });
|
|
35
|
-
|
|
36
|
-
window.dispatchEvent(loaderProgressOnEvent);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export function loaderProgressOff(resource: string): void {
|
|
40
|
-
const loaderProgressOffEvent = new CustomEvent("loaderProgressOff", { detail: { resource } });
|
|
41
|
-
|
|
42
|
-
window.dispatchEvent(loaderProgressOffEvent);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export function getRequestWithoutQuery(request: string | URL): string {
|
|
46
|
-
const [requestWithoutQuery] = String(request).split("?");
|
|
47
|
-
|
|
48
|
-
return requestWithoutQuery;
|
|
49
|
-
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function getRequestWithoutQuery(request: string | URL): string {
|
|
2
|
+
const [requestWithoutQuery] = String(request).split("?");
|
|
3
|
+
|
|
4
|
+
return requestWithoutQuery;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function addToRequestQueue(request: string | string[]): void {
|
|
8
|
+
const addToRequestQueueEvent = new CustomEvent("addToRequestQueue", {
|
|
9
|
+
detail: { request },
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
window.dispatchEvent(addToRequestQueueEvent);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function removeFromRequestQueue(request: string | string[]): void {
|
|
16
|
+
const removeFromRequestQueueEvent = new CustomEvent("removeFromRequestQueue", {
|
|
17
|
+
detail: { request },
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
window.dispatchEvent(removeFromRequestQueueEvent);
|
|
21
|
+
}
|