vueless 1.2.10-beta.6 → 1.2.10-beta.8
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/index.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ export { default as useUI } from "./composables/useUI";
|
|
|
30
30
|
export { useDarkMode } from "./composables/useDarkMode";
|
|
31
31
|
export { useRequestQueue } from "./composables/useRequestQueue";
|
|
32
32
|
export { useLoaderOverlay } from "./ui.loader-overlay/useLoaderOverlay";
|
|
33
|
+
export { useLoaderProgress } from "./ui.loader-progress/useLoaderProgress";
|
|
33
34
|
export { useMutationObserver } from "./composables/useMutationObserver";
|
|
34
35
|
export { Direction, useAutoPosition } from "./composables/useAutoPosition";
|
|
35
36
|
export { useComponentLocaleMessages } from "./composables/useComponentLocaleMassages";
|
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.8",
|
|
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",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"prettier": "^3.6.2",
|
|
67
67
|
"release-it": "^19.0.4",
|
|
68
68
|
"typescript": "^5.8.3",
|
|
69
|
-
"vite": "^7.1.
|
|
69
|
+
"vite": "^7.1.9",
|
|
70
70
|
"vitest": "^3.2.4",
|
|
71
71
|
"vue": "^3.5.18",
|
|
72
72
|
"vue-router": "^4.5.1",
|
|
@@ -3,7 +3,6 @@ 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
6
|
import { getRequestWithoutQuery } from "../utils/requestQueue";
|
|
8
7
|
|
|
9
8
|
import { useLoaderProgress } from "./useLoaderProgress";
|
|
@@ -18,7 +17,7 @@ defineOptions({ inheritAttrs: false });
|
|
|
18
17
|
|
|
19
18
|
const props = withDefaults(defineProps<Props>(), {
|
|
20
19
|
...getDefaults<Props, Config>(defaultConfig, COMPONENT_NAME),
|
|
21
|
-
resources:
|
|
20
|
+
resources: "any",
|
|
22
21
|
});
|
|
23
22
|
|
|
24
23
|
const error = ref(false);
|
|
@@ -27,8 +26,7 @@ const progress = ref(0);
|
|
|
27
26
|
const opacity = ref(1);
|
|
28
27
|
const status = ref<number | null>(null);
|
|
29
28
|
|
|
30
|
-
const {
|
|
31
|
-
const { loaderProgressOff, loaderProgressOn } = useLoaderProgress();
|
|
29
|
+
const { progressRequestQueue, loaderProgressOff, loaderProgressOn } = useLoaderProgress();
|
|
32
30
|
const progressRef = useTemplateRef<HTMLDivElement>("progress-bar");
|
|
33
31
|
|
|
34
32
|
const isLoading = computed(() => {
|
|
@@ -51,15 +49,15 @@ const resourceSubscriptions = computed(() => {
|
|
|
51
49
|
});
|
|
52
50
|
|
|
53
51
|
const isActiveRequests = computed(() => {
|
|
54
|
-
const isAnyRequestActive = props.resources === "any" &&
|
|
52
|
+
const isAnyRequestActive = props.resources === "any" && progressRequestQueue.value.length;
|
|
55
53
|
const isSubscribedRequestsActive = resourceSubscriptions.value.some((resource) =>
|
|
56
|
-
|
|
54
|
+
progressRequestQueue.value.includes(resource),
|
|
57
55
|
);
|
|
58
56
|
|
|
59
57
|
return isAnyRequestActive || isSubscribedRequestsActive;
|
|
60
58
|
});
|
|
61
59
|
|
|
62
|
-
watch(() =>
|
|
60
|
+
watch(() => progressRequestQueue, onChangeRequestsQueue, { immediate: true, deep: true });
|
|
63
61
|
|
|
64
62
|
watch(
|
|
65
63
|
() => props.loading,
|
|
@@ -16,26 +16,33 @@ import defaultConfig from "../config?raw"
|
|
|
16
16
|
To control the loader state in Vue components use `useLoaderProgress` composable.
|
|
17
17
|
|
|
18
18
|
The loader uses queue of resources and will be shown until at least one item is present in a queue.
|
|
19
|
+
The queue approach is useful if you want to implement global loading handling (for example in axios interceptors)
|
|
19
20
|
|
|
20
21
|
<Source code={`
|
|
21
22
|
import { useLoaderProgress } from "vueless";
|
|
22
23
|
|
|
23
24
|
const {
|
|
25
|
+
isLoading,
|
|
24
26
|
loaderProgressOn,
|
|
25
27
|
loaderProgressOff,
|
|
26
|
-
|
|
28
|
+
progressRequestQueue,
|
|
27
29
|
} = useLoaderProgress();
|
|
28
30
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
loaderProgressOff(["/transactions", "/products"]);
|
|
31
|
+
/* get loader state */
|
|
32
|
+
console.log(isLoading.value);
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
/* show loader */
|
|
35
|
+
loaderProgressOn(); // simple
|
|
36
|
+
loaderProgressOn("/transactions"); // single resource
|
|
37
|
+
loaderProgressOff(["/transactions", "/products"]); // multiple resources
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
/* hide loader */
|
|
40
|
+
loaderProgressOff(); // simple
|
|
41
|
+
loaderProgressOff("/transactions"); // single resource
|
|
42
|
+
loaderProgressOff(["/transactions", "/products"]); // multiple resources
|
|
43
|
+
|
|
44
|
+
/* access loader progress resource queue */
|
|
45
|
+
console.log(progressRequestQueue.value);
|
|
39
46
|
`} language="jsx" dark />
|
|
40
47
|
|
|
41
48
|
## Using loader outside Vue components
|
|
@@ -44,11 +51,15 @@ To control the loader state outside Vue components, use the following methods.
|
|
|
44
51
|
<Source code={`
|
|
45
52
|
import { loaderProgressOn, loaderProgressOff } from "vueless";
|
|
46
53
|
|
|
47
|
-
|
|
48
|
-
loaderProgressOn(
|
|
54
|
+
/* show loader */
|
|
55
|
+
loaderProgressOn(); // simple
|
|
56
|
+
loaderProgressOn("/transactions"); // single resource
|
|
57
|
+
loaderProgressOff(["/transactions", "/products"]); // multiple resources
|
|
49
58
|
|
|
50
|
-
|
|
51
|
-
loaderProgressOff(
|
|
59
|
+
/* hide loader */
|
|
60
|
+
loaderProgressOff(); // simple
|
|
61
|
+
loaderProgressOff("/transactions"); // single resource
|
|
62
|
+
loaderProgressOff(["/transactions", "/products"]); // multiple resources
|
|
52
63
|
`} language="jsx" dark />
|
|
53
64
|
|
|
54
65
|
## Default config
|
|
@@ -2,33 +2,51 @@ import { inject, readonly, ref } from "vue";
|
|
|
2
2
|
|
|
3
3
|
import type { Ref } from "vue";
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { getRequestWithoutQuery } from "../utils/requestQueue";
|
|
6
6
|
|
|
7
7
|
type LoaderProgress = {
|
|
8
8
|
isLoading: Readonly<Ref<boolean, boolean>>;
|
|
9
9
|
loaderProgressOn: (request: string | string[]) => void;
|
|
10
10
|
loaderProgressOff: (request: string | string[]) => void;
|
|
11
|
+
progressRequestQueue: Readonly<Ref<readonly string[]>>;
|
|
11
12
|
};
|
|
12
13
|
|
|
13
14
|
export const LoaderProgressSymbol = Symbol.for("vueless:loader-progress");
|
|
14
15
|
|
|
15
|
-
const
|
|
16
|
+
const progressRequestQueue = ref<string[]>([]);
|
|
17
|
+
|
|
18
|
+
function addToProgressRequestQueue(url: string | string[]): void {
|
|
19
|
+
Array.isArray(url)
|
|
20
|
+
? progressRequestQueue.value.push(...url.map(getRequestWithoutQuery))
|
|
21
|
+
: progressRequestQueue.value.push(getRequestWithoutQuery(url));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function removeFromProgressRequestQueue(url: string | string[]): void {
|
|
25
|
+
if (Array.isArray(url)) {
|
|
26
|
+
url.map(getRequestWithoutQuery).forEach(removeFromProgressRequestQueue);
|
|
27
|
+
} else {
|
|
28
|
+
progressRequestQueue.value = progressRequestQueue.value.filter(
|
|
29
|
+
(item) => item !== getRequestWithoutQuery(url),
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
16
33
|
|
|
17
34
|
const isLoading = ref(true);
|
|
18
35
|
|
|
19
36
|
function loaderProgressOn(request?: string | string[]): void {
|
|
20
|
-
request ?
|
|
37
|
+
request ? addToProgressRequestQueue(request) : (isLoading.value = true);
|
|
21
38
|
}
|
|
22
39
|
|
|
23
40
|
function loaderProgressOff(request?: string | string[]): void {
|
|
24
|
-
request ?
|
|
41
|
+
request ? removeFromProgressRequestQueue(request) : (isLoading.value = false);
|
|
25
42
|
}
|
|
26
43
|
|
|
27
44
|
export function createLoaderProgress(): LoaderProgress {
|
|
28
45
|
return {
|
|
29
|
-
isLoading: readonly(isLoading),
|
|
30
46
|
loaderProgressOn,
|
|
31
47
|
loaderProgressOff,
|
|
48
|
+
isLoading: readonly(isLoading),
|
|
49
|
+
progressRequestQueue: readonly(progressRequestQueue) as Readonly<Ref<readonly string[]>>,
|
|
32
50
|
};
|
|
33
51
|
}
|
|
34
52
|
|