@webiny/app 6.3.0-beta.4 → 6.4.0-beta.0
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/App.js +70 -77
- package/App.js.map +1 -1
- package/AppContainer.js +3 -6
- package/AppContainer.js.map +1 -1
- package/apollo-client/InMemoryCache.js +11 -13
- package/apollo-client/InMemoryCache.js.map +1 -1
- package/apollo-client/IntrospectionFragmentMatcher.js +26 -38
- package/apollo-client/IntrospectionFragmentMatcher.js.map +1 -1
- package/components/Image.js +11 -17
- package/components/Image.js.map +1 -1
- package/components/index.js +0 -2
- package/config/RouterConfig/Route.js +23 -28
- package/config/RouterConfig/Route.js.map +1 -1
- package/config/RouterConfig.js +11 -10
- package/config/RouterConfig.js.map +1 -1
- package/config.js +19 -20
- package/config.js.map +1 -1
- package/contexts/Ui/index.js +26 -28
- package/contexts/Ui/index.js.map +1 -1
- package/core/Plugin.js +7 -9
- package/core/Plugin.js.map +1 -1
- package/core/Plugins.js +15 -34
- package/core/Plugins.js.map +1 -1
- package/core/Provider.js +5 -13
- package/core/Provider.js.map +1 -1
- package/core/createProvider.js +3 -6
- package/core/createProvider.js.map +1 -1
- package/core/createProviderPlugin.js +8 -13
- package/core/createProviderPlugin.js.map +1 -1
- package/errors/AuthenticationErrorEvent.js +8 -5
- package/errors/AuthenticationErrorEvent.js.map +1 -1
- package/errors/NetworkErrorEvent.js +8 -5
- package/errors/NetworkErrorEvent.js.map +1 -1
- package/errors/abstractions.js +3 -2
- package/errors/abstractions.js.map +1 -1
- package/errors/index.js +1 -4
- package/exports/admin/env-config.js +0 -2
- package/exports/admin/graphql-client.js +0 -2
- package/exports/admin/local-storage.js +0 -2
- package/exports/admin/router.js +0 -2
- package/exports/admin/security.js +0 -2
- package/exports/admin.js +0 -2
- package/features/envConfig/EnvConfig.js +12 -13
- package/features/envConfig/EnvConfig.js.map +1 -1
- package/features/envConfig/abstractions.js +2 -1
- package/features/envConfig/abstractions.js.map +1 -1
- package/features/envConfig/feature.js +9 -8
- package/features/envConfig/feature.js.map +1 -1
- package/features/envConfig/index.js +0 -2
- package/features/eventPublisher/EventPublisher.js +13 -21
- package/features/eventPublisher/EventPublisher.js.map +1 -1
- package/features/eventPublisher/abstractions.js +7 -9
- package/features/eventPublisher/abstractions.js.map +1 -1
- package/features/eventPublisher/feature.js +13 -12
- package/features/eventPublisher/feature.js.map +1 -1
- package/features/eventPublisher/index.js +1 -3
- package/features/graphqlClient/AuthenticationErrorPublishing.js +26 -26
- package/features/graphqlClient/AuthenticationErrorPublishing.js.map +1 -1
- package/features/graphqlClient/BatchingGraphQLClient.js +104 -149
- package/features/graphqlClient/BatchingGraphQLClient.js.map +1 -1
- package/features/graphqlClient/FetchGraphQLClient.js +41 -48
- package/features/graphqlClient/FetchGraphQLClient.js.map +1 -1
- package/features/graphqlClient/NetworkErrorPublishing.js +35 -42
- package/features/graphqlClient/NetworkErrorPublishing.js.map +1 -1
- package/features/graphqlClient/RequestValue.js +42 -41
- package/features/graphqlClient/RequestValue.js.map +1 -1
- package/features/graphqlClient/RetryGraphQLClient.js +36 -45
- package/features/graphqlClient/RetryGraphQLClient.js.map +1 -1
- package/features/graphqlClient/__tests__/GraphQLClient.test.js +383 -356
- package/features/graphqlClient/__tests__/GraphQLClient.test.js.map +1 -1
- package/features/graphqlClient/abstractions.js +2 -1
- package/features/graphqlClient/abstractions.js.map +1 -1
- package/features/graphqlClient/feature.js +14 -20
- package/features/graphqlClient/feature.js.map +1 -1
- package/features/graphqlClient/index.js +0 -2
- package/features/graphqlClient/types.js +0 -3
- package/features/localStorage/BrowserLocalStorageGateway.js +56 -63
- package/features/localStorage/BrowserLocalStorageGateway.js.map +1 -1
- package/features/localStorage/LocalStorage.js +27 -24
- package/features/localStorage/LocalStorage.js.map +1 -1
- package/features/localStorage/LocalStorageRepository.js +75 -88
- package/features/localStorage/LocalStorageRepository.js.map +1 -1
- package/features/localStorage/abstractions.js +5 -16
- package/features/localStorage/abstractions.js.map +1 -1
- package/features/localStorage/feature.js +17 -28
- package/features/localStorage/feature.js.map +1 -1
- package/features/localStorage/index.js +1 -3
- package/features/mainGraphQLClient/MainGraphQLClient.js +18 -14
- package/features/mainGraphQLClient/MainGraphQLClient.js.map +1 -1
- package/features/mainGraphQLClient/abstractions.js +2 -1
- package/features/mainGraphQLClient/abstractions.js.map +1 -1
- package/features/mainGraphQLClient/feature.js +11 -10
- package/features/mainGraphQLClient/feature.js.map +1 -1
- package/features/mainGraphQLClient/index.js +0 -2
- package/features/router/HistoryRouterGateway.js +75 -105
- package/features/router/HistoryRouterGateway.js.map +1 -1
- package/features/router/HistoryRouterGateway.test.js +184 -193
- package/features/router/HistoryRouterGateway.test.js.map +1 -1
- package/features/router/Route.js +38 -54
- package/features/router/Route.js.map +1 -1
- package/features/router/RouteUrl.js +84 -217
- package/features/router/RouteUrl.js.map +1 -1
- package/features/router/Router.js +67 -124
- package/features/router/Router.js.map +1 -1
- package/features/router/RouterPresenter.js +44 -49
- package/features/router/RouterPresenter.js.map +1 -1
- package/features/router/RouterRepository.js +103 -111
- package/features/router/RouterRepository.js.map +1 -1
- package/features/router/RouterRepository.test.js +119 -150
- package/features/router/RouterRepository.test.js.map +1 -1
- package/features/router/abstractions.js +4 -14
- package/features/router/abstractions.js.map +1 -1
- package/features/router/feature.js +13 -12
- package/features/router/feature.js.map +1 -1
- package/features/router/index.js +1 -3
- package/helpers/InterfaceGenerator/date.js +0 -3
- package/helpers/InterfaceGenerator/id.js +0 -3
- package/helpers/InterfaceGenerator/identity.js +0 -3
- package/helpers/InterfaceGenerator/index.js +0 -3
- package/helpers/InterfaceGenerator/numeric.js +0 -3
- package/helpers/InterfaceGenerator/truthful.js +0 -3
- package/hooks/useAutocomplete/index.js +0 -2
- package/hooks/useAutocomplete/useAutocomplete.js +12 -15
- package/hooks/useAutocomplete/useAutocomplete.js.map +1 -1
- package/hooks/useDataList/functions/getData.js +2 -1
- package/hooks/useDataList/functions/getData.js.map +1 -1
- package/hooks/useDataList/functions/getError.js +2 -1
- package/hooks/useDataList/functions/getError.js.map +1 -1
- package/hooks/useDataList/functions/getMeta.js +2 -1
- package/hooks/useDataList/functions/getMeta.js.map +1 -1
- package/hooks/useDataList/functions/index.js +0 -2
- package/hooks/useDataList/functions/searchDataByKey.js +9 -14
- package/hooks/useDataList/functions/searchDataByKey.js.map +1 -1
- package/hooks/useDataList/index.js +0 -2
- package/hooks/useDataList/useDataList.js +131 -152
- package/hooks/useDataList/useDataList.js.map +1 -1
- package/hooks/useDataList/utils/index.js +0 -2
- package/hooks/useDataList/utils/prepareLoadListParams.js +25 -34
- package/hooks/useDataList/utils/prepareLoadListParams.js.map +1 -1
- package/hooks/useHandler.js +12 -16
- package/hooks/useHandler.js.map +1 -1
- package/hooks/useHandlers.js +18 -20
- package/hooks/useHandlers.js.map +1 -1
- package/hooks/useRegisterLegacyPlugin.js +7 -6
- package/hooks/useRegisterLegacyPlugin.js.map +1 -1
- package/hooks/useUi.js +2 -3
- package/hooks/useUi.js.map +1 -1
- package/i18n/i18n.js +8 -4
- package/i18n/i18n.js.map +1 -1
- package/i18n/index.js +0 -2
- package/index.js +6 -11
- package/package.json +13 -13
- package/plugins/AddQuerySelectionPlugin.js +36 -61
- package/plugins/AddQuerySelectionPlugin.js.map +1 -1
- package/plugins/ApolloCacheObjectIdPlugin.js +12 -11
- package/plugins/ApolloCacheObjectIdPlugin.js.map +1 -1
- package/plugins/ApolloDynamicLink.js +20 -22
- package/plugins/ApolloDynamicLink.js.map +1 -1
- package/plugins/ApolloLinkPlugin.js +16 -15
- package/plugins/ApolloLinkPlugin.js.map +1 -1
- package/plugins/ConsoleLinkPlugin.js +19 -21
- package/plugins/ConsoleLinkPlugin.js.map +1 -1
- package/plugins/NetworkErrorLinkPlugin/ErrorOverlay.js +39 -45
- package/plugins/NetworkErrorLinkPlugin/ErrorOverlay.js.map +1 -1
- package/plugins/NetworkErrorLinkPlugin/GqlErrorOverlay.js +18 -22
- package/plugins/NetworkErrorLinkPlugin/GqlErrorOverlay.js.map +1 -1
- package/plugins/NetworkErrorLinkPlugin/LocalAwsLambdaTimeoutMessage.js +21 -29
- package/plugins/NetworkErrorLinkPlugin/LocalAwsLambdaTimeoutMessage.js.map +1 -1
- package/plugins/NetworkErrorLinkPlugin/StyledComponents.js +6 -15
- package/plugins/NetworkErrorLinkPlugin/StyledComponents.js.map +1 -1
- package/plugins/NetworkErrorLinkPlugin/Typography.js +9 -14
- package/plugins/NetworkErrorLinkPlugin/Typography.js.map +1 -1
- package/plugins/NetworkErrorLinkPlugin/assets/close_24px.js +19 -0
- package/plugins/NetworkErrorLinkPlugin/assets/close_24px.js.map +1 -0
- package/plugins/NetworkErrorLinkPlugin/createErrorOverlay.js +11 -18
- package/plugins/NetworkErrorLinkPlugin/createErrorOverlay.js.map +1 -1
- package/plugins/NetworkErrorLinkPlugin.js +41 -58
- package/plugins/NetworkErrorLinkPlugin.js.map +1 -1
- package/plugins/OmitTypenameLinkPlugin.js +9 -14
- package/plugins/OmitTypenameLinkPlugin.js.map +1 -1
- package/plugins/TenantHeaderLinkPlugin.js +23 -32
- package/plugins/TenantHeaderLinkPlugin.js.map +1 -1
- package/plugins/components/Image.js +8 -15
- package/plugins/components/Image.js.map +1 -1
- package/plugins/image.js +94 -133
- package/plugins/image.js.map +1 -1
- package/plugins/index.js +35 -59
- package/plugins/index.js.map +1 -1
- package/presentation/envConfig/useEnvConfig.js +4 -8
- package/presentation/envConfig/useEnvConfig.js.map +1 -1
- package/presentation/localStorage/index.js +0 -2
- package/presentation/localStorage/useLocalStorage.js +10 -16
- package/presentation/localStorage/useLocalStorage.js.map +1 -1
- package/presentation/localStorage/useLocalStorageValue.js +15 -13
- package/presentation/localStorage/useLocalStorageValue.js.map +1 -1
- package/presentation/localStorage/useLocalStorageValues.js +23 -30
- package/presentation/localStorage/useLocalStorageValues.js.map +1 -1
- package/presentation/router/RouteElementRegistry.js +22 -25
- package/presentation/router/RouteElementRegistry.js.map +1 -1
- package/presentation/router/abstractions.js +2 -1
- package/presentation/router/abstractions.js.map +1 -1
- package/presentation/router/components/Redirect.js +8 -10
- package/presentation/router/components/Redirect.js.map +1 -1
- package/presentation/router/components/RouteContent.js +14 -17
- package/presentation/router/components/RouteContent.js.map +1 -1
- package/presentation/router/components/RouteLink.js +11 -16
- package/presentation/router/components/RouteLink.js.map +1 -1
- package/presentation/router/components/SimpleLink.js +18 -24
- package/presentation/router/components/SimpleLink.js.map +1 -1
- package/presentation/router/hooks/useRoute.js +15 -23
- package/presentation/router/hooks/useRoute.js.map +1 -1
- package/presentation/router/hooks/useRouter.js +22 -23
- package/presentation/router/hooks/useRouter.js.map +1 -1
- package/presentation/router/index.js +0 -2
- package/presentation/router/types.js +0 -3
- package/react-butterfiles/Files.js +148 -217
- package/react-butterfiles/Files.js.map +1 -1
- package/react-butterfiles/index.js +2 -1
- package/react-butterfiles/index.js.map +1 -1
- package/react-butterfiles/utils/generateId.js +2 -3
- package/react-butterfiles/utils/generateId.js.map +1 -1
- package/react-butterfiles/utils/readFileContent.js +9 -13
- package/react-butterfiles/utils/readFileContent.js.map +1 -1
- package/renderApp.js +7 -6
- package/renderApp.js.map +1 -1
- package/router.js +0 -3
- package/rslib-runtime.js +14 -0
- package/rslib-runtime.js.map +1 -0
- package/shared/di/DiContainerProvider.js +8 -12
- package/shared/di/DiContainerProvider.js.map +1 -1
- package/shared/di/createFeature.js +7 -8
- package/shared/di/createFeature.js.map +1 -1
- package/shared/di/useFeature.js +7 -3
- package/shared/di/useFeature.js.map +1 -1
- package/static/svg/close_24px.33adaadc.svg +1 -0
- package/types.js +0 -3
- package/utils/createGenericContext.js +17 -21
- package/utils/createGenericContext.js.map +1 -1
- package/utils/createHashing.js +13 -16
- package/utils/createHashing.js.map +1 -1
- package/utils/index.js +0 -2
- package/utils/legacyPluginToReactComponent.js +11 -10
- package/utils/legacyPluginToReactComponent.js.map +1 -1
- package/components/index.js.map +0 -1
- package/errors/index.js.map +0 -1
- package/exports/admin/env-config.js.map +0 -1
- package/exports/admin/graphql-client.js.map +0 -1
- package/exports/admin/local-storage.js.map +0 -1
- package/exports/admin/router.js.map +0 -1
- package/exports/admin/security.js.map +0 -1
- package/exports/admin.js.map +0 -1
- package/features/envConfig/index.js.map +0 -1
- package/features/eventPublisher/index.js.map +0 -1
- package/features/graphqlClient/index.js.map +0 -1
- package/features/graphqlClient/types.js.map +0 -1
- package/features/localStorage/index.js.map +0 -1
- package/features/mainGraphQLClient/index.js.map +0 -1
- package/features/router/index.js.map +0 -1
- package/helpers/InterfaceGenerator/date.js.map +0 -1
- package/helpers/InterfaceGenerator/id.js.map +0 -1
- package/helpers/InterfaceGenerator/identity.js.map +0 -1
- package/helpers/InterfaceGenerator/index.js.map +0 -1
- package/helpers/InterfaceGenerator/numeric.js.map +0 -1
- package/helpers/InterfaceGenerator/truthful.js.map +0 -1
- package/hooks/useAutocomplete/index.js.map +0 -1
- package/hooks/useDataList/functions/index.js.map +0 -1
- package/hooks/useDataList/index.js.map +0 -1
- package/hooks/useDataList/utils/index.js.map +0 -1
- package/i18n/index.js.map +0 -1
- package/index.js.map +0 -1
- package/presentation/localStorage/index.js.map +0 -1
- package/presentation/router/index.js.map +0 -1
- package/presentation/router/types.js.map +0 -1
- package/router.js.map +0 -1
- package/types.js.map +0 -1
- package/utils/index.js.map +0 -1
|
@@ -1,169 +1,138 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
2
|
import { createMemoryHistory } from "history";
|
|
3
3
|
import { HistoryRouterGateway } from "./HistoryRouterGateway.js";
|
|
4
4
|
import { RouterRepository } from "./RouterRepository.js";
|
|
5
5
|
import { Route } from "./Route.js";
|
|
6
|
-
const wait = ()
|
|
6
|
+
const wait = ()=>new Promise((resolve)=>setTimeout(resolve, 10));
|
|
7
7
|
const loginRouteDef = new Route({
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
name: "login",
|
|
9
|
+
path: "/login"
|
|
10
10
|
});
|
|
11
11
|
const userRouteDef = new Route({
|
|
12
|
-
name: "userById",
|
|
13
|
-
path: "/users/:id",
|
|
14
|
-
params: zod => {
|
|
15
|
-
return {
|
|
16
|
-
id: zod.string()
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
const allRoutes = [new Route({
|
|
21
|
-
name: "home",
|
|
22
|
-
path: "/"
|
|
23
|
-
}), loginRouteDef, userRouteDef];
|
|
24
|
-
const loginRoute = {
|
|
25
|
-
name: "login",
|
|
26
|
-
path: "/login",
|
|
27
|
-
pathname: "/login",
|
|
28
|
-
params: {}
|
|
29
|
-
};
|
|
30
|
-
const userRoute = id => {
|
|
31
|
-
return {
|
|
32
12
|
name: "userById",
|
|
33
13
|
path: "/users/:id",
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
14
|
+
params: (zod)=>({
|
|
15
|
+
id: zod.string()
|
|
16
|
+
})
|
|
17
|
+
});
|
|
18
|
+
const allRoutes = [
|
|
19
|
+
new Route({
|
|
20
|
+
name: "home",
|
|
21
|
+
path: "/"
|
|
22
|
+
}),
|
|
23
|
+
loginRouteDef,
|
|
24
|
+
userRouteDef
|
|
25
|
+
];
|
|
26
|
+
const loginRoute = {
|
|
27
|
+
name: "login",
|
|
28
|
+
path: "/login",
|
|
29
|
+
pathname: "/login",
|
|
30
|
+
params: {}
|
|
39
31
|
};
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
32
|
+
const userRoute = (id)=>({
|
|
33
|
+
name: "userById",
|
|
34
|
+
path: "/users/:id",
|
|
35
|
+
pathname: `/users/${id}`,
|
|
36
|
+
params: {
|
|
37
|
+
id
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
const createRepository = (routes = allRoutes)=>{
|
|
41
|
+
const history = createMemoryHistory();
|
|
42
|
+
history.replace("/__unknown__");
|
|
43
|
+
const gateway = new HistoryRouterGateway(history, "");
|
|
44
|
+
const repository = new RouterRepository(gateway);
|
|
45
|
+
repository.registerRoutes(routes);
|
|
46
|
+
return {
|
|
47
|
+
repository,
|
|
48
|
+
history
|
|
49
|
+
};
|
|
50
50
|
};
|
|
51
|
-
describe("Router Repository", ()
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
});
|
|
55
|
-
it("state should contain current route", async () => {
|
|
56
|
-
const {
|
|
57
|
-
repository,
|
|
58
|
-
history
|
|
59
|
-
} = createRepository();
|
|
60
|
-
history.push("/login");
|
|
61
|
-
await wait();
|
|
62
|
-
expect(repository.getMatchedRoute()).toEqual(loginRoute);
|
|
63
|
-
});
|
|
64
|
-
it("transition guard should block route transition", async () => {
|
|
65
|
-
const {
|
|
66
|
-
repository,
|
|
67
|
-
history
|
|
68
|
-
} = createRepository();
|
|
69
|
-
history.push("/login");
|
|
70
|
-
await wait();
|
|
71
|
-
|
|
72
|
-
// This guard should prevent the transition.
|
|
73
|
-
const onBlocked = vi.fn();
|
|
74
|
-
repository.addGuard({
|
|
75
|
-
guard: () => true,
|
|
76
|
-
onBlocked
|
|
51
|
+
describe("Router Repository", ()=>{
|
|
52
|
+
beforeEach(()=>{
|
|
53
|
+
vi.clearAllMocks();
|
|
77
54
|
});
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
expect(onBlocked).toHaveBeenCalledTimes(1);
|
|
84
|
-
});
|
|
85
|
-
it("transition guard should allow route transition when guard returns false", async () => {
|
|
86
|
-
const {
|
|
87
|
-
repository,
|
|
88
|
-
history
|
|
89
|
-
} = createRepository();
|
|
90
|
-
history.push("/login");
|
|
91
|
-
await wait();
|
|
92
|
-
repository.addGuard({
|
|
93
|
-
guard: () => false,
|
|
94
|
-
onBlocked: vi.fn()
|
|
55
|
+
it("state should contain current route", async ()=>{
|
|
56
|
+
const { repository, history } = createRepository();
|
|
57
|
+
history.push("/login");
|
|
58
|
+
await wait();
|
|
59
|
+
expect(repository.getMatchedRoute()).toEqual(loginRoute);
|
|
95
60
|
});
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
repository.addGuard({
|
|
110
|
-
guard: () => true,
|
|
111
|
-
onBlocked: () => {
|
|
112
|
-
repository.confirmTransition();
|
|
113
|
-
}
|
|
61
|
+
it("transition guard should block route transition", async ()=>{
|
|
62
|
+
const { repository, history } = createRepository();
|
|
63
|
+
history.push("/login");
|
|
64
|
+
await wait();
|
|
65
|
+
const onBlocked = vi.fn();
|
|
66
|
+
repository.addGuard({
|
|
67
|
+
guard: ()=>true,
|
|
68
|
+
onBlocked
|
|
69
|
+
});
|
|
70
|
+
history.push("/users/123");
|
|
71
|
+
await wait();
|
|
72
|
+
expect(repository.getMatchedRoute()).toEqual(loginRoute);
|
|
73
|
+
expect(onBlocked).toHaveBeenCalledTimes(1);
|
|
114
74
|
});
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
const dispose = repository.addGuard({
|
|
127
|
-
guard: () => true,
|
|
128
|
-
onBlocked: vi.fn()
|
|
75
|
+
it("transition guard should allow route transition when guard returns false", async ()=>{
|
|
76
|
+
const { repository, history } = createRepository();
|
|
77
|
+
history.push("/login");
|
|
78
|
+
await wait();
|
|
79
|
+
repository.addGuard({
|
|
80
|
+
guard: ()=>false,
|
|
81
|
+
onBlocked: vi.fn()
|
|
82
|
+
});
|
|
83
|
+
history.push("/users/123");
|
|
84
|
+
await wait();
|
|
85
|
+
expect(repository.getMatchedRoute()).toEqual(userRoute("123"));
|
|
129
86
|
});
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
87
|
+
it("confirmTransition should allow a blocked transition to proceed", async ()=>{
|
|
88
|
+
const { repository, history } = createRepository();
|
|
89
|
+
history.push("/login");
|
|
90
|
+
await wait();
|
|
91
|
+
repository.addGuard({
|
|
92
|
+
guard: ()=>true,
|
|
93
|
+
onBlocked: ()=>{
|
|
94
|
+
repository.confirmTransition();
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
history.push("/users/123");
|
|
98
|
+
await wait();
|
|
99
|
+
expect(repository.getMatchedRoute()).toEqual(userRoute("123"));
|
|
100
|
+
});
|
|
101
|
+
it("guard disposer should remove the guard", async ()=>{
|
|
102
|
+
const { repository, history } = createRepository();
|
|
103
|
+
history.push("/login");
|
|
104
|
+
await wait();
|
|
105
|
+
const dispose = repository.addGuard({
|
|
106
|
+
guard: ()=>true,
|
|
107
|
+
onBlocked: vi.fn()
|
|
108
|
+
});
|
|
109
|
+
dispose();
|
|
110
|
+
history.push("/users/123");
|
|
111
|
+
await wait();
|
|
112
|
+
expect(repository.getMatchedRoute()).toEqual(userRoute("123"));
|
|
113
|
+
});
|
|
114
|
+
it("should go to the right route", async ()=>{
|
|
115
|
+
const { repository } = createRepository();
|
|
116
|
+
repository.goToRoute(userRouteDef, {
|
|
117
|
+
id: "5"
|
|
118
|
+
});
|
|
119
|
+
await wait();
|
|
120
|
+
expect(repository.getMatchedRoute()).toEqual(userRoute("5"));
|
|
121
|
+
});
|
|
122
|
+
it("should generate a valid route link", async ()=>{
|
|
123
|
+
const { repository } = createRepository();
|
|
124
|
+
expect(repository.getLink(loginRouteDef)).toEqual("/login");
|
|
125
|
+
expect(repository.getLink(userRouteDef, {
|
|
126
|
+
id: "1"
|
|
127
|
+
})).toEqual("/users/1");
|
|
128
|
+
});
|
|
129
|
+
it("should generate a valid route link when no routes are registered", async ()=>{
|
|
130
|
+
const { repository } = createRepository([]);
|
|
131
|
+
expect(repository.getLink(loginRouteDef)).toEqual("/login");
|
|
132
|
+
expect(repository.getLink(userRouteDef, {
|
|
133
|
+
id: "1"
|
|
134
|
+
})).toEqual("/users/1");
|
|
145
135
|
});
|
|
146
|
-
await wait();
|
|
147
|
-
expect(repository.getMatchedRoute()).toEqual(userRoute("5"));
|
|
148
|
-
});
|
|
149
|
-
it("should generate a valid route link", async () => {
|
|
150
|
-
const {
|
|
151
|
-
repository
|
|
152
|
-
} = createRepository();
|
|
153
|
-
expect(repository.getLink(loginRouteDef)).toEqual("/login");
|
|
154
|
-
expect(repository.getLink(userRouteDef, {
|
|
155
|
-
id: "1"
|
|
156
|
-
})).toEqual("/users/1");
|
|
157
|
-
});
|
|
158
|
-
it("should generate a valid route link when no routes are registered", async () => {
|
|
159
|
-
const {
|
|
160
|
-
repository
|
|
161
|
-
} = createRepository([]);
|
|
162
|
-
expect(repository.getLink(loginRouteDef)).toEqual("/login");
|
|
163
|
-
expect(repository.getLink(userRouteDef, {
|
|
164
|
-
id: "1"
|
|
165
|
-
})).toEqual("/users/1");
|
|
166
|
-
});
|
|
167
136
|
});
|
|
168
137
|
|
|
169
138
|
//# sourceMappingURL=RouterRepository.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["describe","it","beforeEach","expect","vi","createMemoryHistory","HistoryRouterGateway","RouterRepository","Route","wait","Promise","resolve","setTimeout","loginRouteDef","name","path","userRouteDef","params","zod","id","string","allRoutes","loginRoute","pathname","userRoute","createRepository","routes","history","replace","gateway","repository","registerRoutes","clearAllMocks","push","getMatchedRoute","toEqual","onBlocked","fn","addGuard","guard","toHaveBeenCalledTimes","confirmTransition","dispose","goToRoute","getLink"],"sources":["RouterRepository.test.ts"],"sourcesContent":["import { describe, it, beforeEach, expect, vi } from \"vitest\";\nimport { createMemoryHistory } from \"history\";\nimport { HistoryRouterGateway } from \"./HistoryRouterGateway.js\";\nimport { RouterRepository } from \"./RouterRepository.js\";\nimport { Route } from \"./Route.js\";\n\nconst wait = () => new Promise(resolve => setTimeout(resolve, 10));\n\nconst loginRouteDef = new Route({ name: \"login\", path: \"/login\" });\n\nconst userRouteDef = new Route({\n name: \"userById\",\n path: \"/users/:id\",\n params: zod => {\n return {\n id: zod.string()\n };\n }\n});\n\nconst allRoutes: Route<any>[] = [\n new Route({ name: \"home\", path: \"/\" }),\n loginRouteDef,\n userRouteDef\n];\n\nconst loginRoute = {\n name: \"login\",\n path: \"/login\",\n pathname: \"/login\",\n params: {}\n};\n\nconst userRoute = (id: string) => {\n return {\n name: \"userById\",\n path: \"/users/:id\",\n pathname: `/users/${id}`,\n params: {\n id\n }\n };\n};\n\nconst createRepository = (routes = allRoutes) => {\n const history = createMemoryHistory();\n history.replace(\"/__unknown__\");\n\n const gateway = new HistoryRouterGateway(history, \"\");\n const repository = new RouterRepository(gateway);\n\n repository.registerRoutes(routes);\n\n return { repository, history };\n};\n\ndescribe(\"Router Repository\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"state should contain current route\", async () => {\n const { repository, history } = createRepository();\n history.push(\"/login\");\n await wait();\n\n expect(repository.getMatchedRoute()).toEqual(loginRoute);\n });\n\n it(\"transition guard should block route transition\", async () => {\n const { repository, history } = createRepository();\n history.push(\"/login\");\n await wait();\n\n // This guard should prevent the transition.\n const onBlocked = vi.fn();\n repository.addGuard({\n guard: () => true,\n onBlocked\n });\n\n // Trigger a history location change (imagine a click on \"Back\" button in the browser).\n history.push(\"/users/123\");\n await wait();\n\n expect(repository.getMatchedRoute()).toEqual(loginRoute);\n expect(onBlocked).toHaveBeenCalledTimes(1);\n });\n\n it(\"transition guard should allow route transition when guard returns false\", async () => {\n const { repository, history } = createRepository();\n history.push(\"/login\");\n await wait();\n\n repository.addGuard({\n guard: () => false,\n onBlocked: vi.fn()\n });\n\n // Trigger a history location change.\n history.push(\"/users/123\");\n await wait();\n\n expect(repository.getMatchedRoute()).toEqual(userRoute(\"123\"));\n });\n\n it(\"confirmTransition should allow a blocked transition to proceed\", async () => {\n const { repository, history } = createRepository();\n history.push(\"/login\");\n await wait();\n\n repository.addGuard({\n guard: () => true,\n onBlocked: () => {\n repository.confirmTransition();\n }\n });\n\n history.push(\"/users/123\");\n await wait();\n\n expect(repository.getMatchedRoute()).toEqual(userRoute(\"123\"));\n });\n\n it(\"guard disposer should remove the guard\", async () => {\n const { repository, history } = createRepository();\n history.push(\"/login\");\n await wait();\n\n const dispose = repository.addGuard({\n guard: () => true,\n onBlocked: vi.fn()\n });\n\n // Remove the guard.\n dispose();\n\n // Transition should now pass through.\n history.push(\"/users/123\");\n await wait();\n\n expect(repository.getMatchedRoute()).toEqual(userRoute(\"123\"));\n });\n\n it(\"should go to the right route\", async () => {\n const { repository } = createRepository();\n repository.goToRoute(userRouteDef, { id: \"5\" });\n await wait();\n expect(repository.getMatchedRoute()).toEqual(userRoute(\"5\"));\n });\n\n it(\"should generate a valid route link\", async () => {\n const { repository } = createRepository();\n\n expect(repository.getLink(loginRouteDef)).toEqual(\"/login\");\n expect(repository.getLink(userRouteDef, { id: \"1\" })).toEqual(\"/users/1\");\n });\n\n it(\"should generate a valid route link when no routes are registered\", async () => {\n const { repository } = createRepository([]);\n\n expect(repository.getLink(loginRouteDef)).toEqual(\"/login\");\n expect(repository.getLink(userRouteDef, { id: \"1\" })).toEqual(\"/users/1\");\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"features/router/RouterRepository.test.js","sources":["../../../src/features/router/RouterRepository.test.ts"],"sourcesContent":["import { describe, it, beforeEach, expect, vi } from \"vitest\";\nimport { createMemoryHistory } from \"history\";\nimport { HistoryRouterGateway } from \"./HistoryRouterGateway.js\";\nimport { RouterRepository } from \"./RouterRepository.js\";\nimport { Route } from \"./Route.js\";\n\nconst wait = () => new Promise(resolve => setTimeout(resolve, 10));\n\nconst loginRouteDef = new Route({ name: \"login\", path: \"/login\" });\n\nconst userRouteDef = new Route({\n name: \"userById\",\n path: \"/users/:id\",\n params: zod => {\n return {\n id: zod.string()\n };\n }\n});\n\nconst allRoutes: Route<any>[] = [\n new Route({ name: \"home\", path: \"/\" }),\n loginRouteDef,\n userRouteDef\n];\n\nconst loginRoute = {\n name: \"login\",\n path: \"/login\",\n pathname: \"/login\",\n params: {}\n};\n\nconst userRoute = (id: string) => {\n return {\n name: \"userById\",\n path: \"/users/:id\",\n pathname: `/users/${id}`,\n params: {\n id\n }\n };\n};\n\nconst createRepository = (routes = allRoutes) => {\n const history = createMemoryHistory();\n history.replace(\"/__unknown__\");\n\n const gateway = new HistoryRouterGateway(history, \"\");\n const repository = new RouterRepository(gateway);\n\n repository.registerRoutes(routes);\n\n return { repository, history };\n};\n\ndescribe(\"Router Repository\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"state should contain current route\", async () => {\n const { repository, history } = createRepository();\n history.push(\"/login\");\n await wait();\n\n expect(repository.getMatchedRoute()).toEqual(loginRoute);\n });\n\n it(\"transition guard should block route transition\", async () => {\n const { repository, history } = createRepository();\n history.push(\"/login\");\n await wait();\n\n // This guard should prevent the transition.\n const onBlocked = vi.fn();\n repository.addGuard({\n guard: () => true,\n onBlocked\n });\n\n // Trigger a history location change (imagine a click on \"Back\" button in the browser).\n history.push(\"/users/123\");\n await wait();\n\n expect(repository.getMatchedRoute()).toEqual(loginRoute);\n expect(onBlocked).toHaveBeenCalledTimes(1);\n });\n\n it(\"transition guard should allow route transition when guard returns false\", async () => {\n const { repository, history } = createRepository();\n history.push(\"/login\");\n await wait();\n\n repository.addGuard({\n guard: () => false,\n onBlocked: vi.fn()\n });\n\n // Trigger a history location change.\n history.push(\"/users/123\");\n await wait();\n\n expect(repository.getMatchedRoute()).toEqual(userRoute(\"123\"));\n });\n\n it(\"confirmTransition should allow a blocked transition to proceed\", async () => {\n const { repository, history } = createRepository();\n history.push(\"/login\");\n await wait();\n\n repository.addGuard({\n guard: () => true,\n onBlocked: () => {\n repository.confirmTransition();\n }\n });\n\n history.push(\"/users/123\");\n await wait();\n\n expect(repository.getMatchedRoute()).toEqual(userRoute(\"123\"));\n });\n\n it(\"guard disposer should remove the guard\", async () => {\n const { repository, history } = createRepository();\n history.push(\"/login\");\n await wait();\n\n const dispose = repository.addGuard({\n guard: () => true,\n onBlocked: vi.fn()\n });\n\n // Remove the guard.\n dispose();\n\n // Transition should now pass through.\n history.push(\"/users/123\");\n await wait();\n\n expect(repository.getMatchedRoute()).toEqual(userRoute(\"123\"));\n });\n\n it(\"should go to the right route\", async () => {\n const { repository } = createRepository();\n repository.goToRoute(userRouteDef, { id: \"5\" });\n await wait();\n expect(repository.getMatchedRoute()).toEqual(userRoute(\"5\"));\n });\n\n it(\"should generate a valid route link\", async () => {\n const { repository } = createRepository();\n\n expect(repository.getLink(loginRouteDef)).toEqual(\"/login\");\n expect(repository.getLink(userRouteDef, { id: \"1\" })).toEqual(\"/users/1\");\n });\n\n it(\"should generate a valid route link when no routes are registered\", async () => {\n const { repository } = createRepository([]);\n\n expect(repository.getLink(loginRouteDef)).toEqual(\"/login\");\n expect(repository.getLink(userRouteDef, { id: \"1\" })).toEqual(\"/users/1\");\n });\n});\n"],"names":["wait","Promise","resolve","setTimeout","loginRouteDef","Route","userRouteDef","zod","allRoutes","loginRoute","userRoute","id","createRepository","routes","history","createMemoryHistory","gateway","HistoryRouterGateway","repository","RouterRepository","describe","beforeEach","vi","it","expect","onBlocked","dispose"],"mappings":"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"}
|
|
@@ -1,17 +1,7 @@
|
|
|
1
1
|
import { Abstraction } from "@webiny/di";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
/***** Repository *****/
|
|
8
|
-
|
|
9
|
-
export const RouterRepository = new Abstraction("RouterRepository");
|
|
10
|
-
|
|
11
|
-
/***** Gateway *****/
|
|
12
|
-
|
|
13
|
-
export const RouterGateway = new Abstraction("RouterGateway");
|
|
14
|
-
|
|
15
|
-
/***** Route Transition *****/
|
|
2
|
+
const RouterPresenter = new Abstraction("RouterPresenter");
|
|
3
|
+
const RouterRepository = new Abstraction("RouterRepository");
|
|
4
|
+
const RouterGateway = new Abstraction("RouterGateway");
|
|
5
|
+
export { RouterGateway, RouterPresenter, RouterRepository };
|
|
16
6
|
|
|
17
7
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/router/abstractions.js","sources":["../../../src/features/router/abstractions.ts"],"sourcesContent":["import { Abstraction } from \"@webiny/di\";\nimport type { Route, RouteParamsDefinition, RouteParamsInfer } from \"./Route.js\";\nimport type { RequiredKeysOf } from \"type-fest\";\n\n/***** Presenter *****/\n\nexport type RouteParamsArgs<TParams extends RouteParamsDefinition | undefined> =\n TParams extends RouteParamsDefinition\n ? RequiredKeysOf<RouteParamsInfer<TParams>> extends never\n ? [params?: RouteParamsInfer<TParams>] // all optional → param optional\n : [params: RouteParamsInfer<TParams>] // some required → param required\n : [];\n\ninterface RouterViewModel {\n currentRoute: MatchedRoute | undefined;\n}\n\nexport interface IRouterPresenter {\n vm: RouterViewModel;\n bootstrap(routes: Route[]): void;\n goToRoute<TParams extends RouteParamsDefinition | undefined>(\n route: Route<TParams>,\n ...args: RouteParamsArgs<TParams>\n ): void;\n getLink<TParams extends RouteParamsDefinition | undefined>(\n route: Route<TParams>,\n ...args: RouteParamsArgs<TParams>\n ): string;\n setRouteParams<T extends Record<string, any>>(cb: (params: T) => T): void;\n addTransitionGuard(config: RouteTransitionGuardConfig): GuardDisposer;\n isTransitionBlocked(): boolean;\n unblockTransition(): void;\n confirmTransition(): void;\n cancelTransition(): void;\n destroy(): void;\n}\nexport const RouterPresenter = new Abstraction<IRouterPresenter>(\"RouterPresenter\");\n\nexport namespace RouterPresenter {\n export type Interface = IRouterPresenter;\n}\n\n/***** Repository *****/\n\nexport interface MatchedRoute<TParams = Record<string, any>> {\n // Name of the matched route.\n name: string;\n // Pathname that was used to match the route.\n pathname: string;\n // Path pattern that matched this route.\n path: string;\n // Route params extracted from the pathname.\n params: TParams;\n}\n\nexport interface IRouterRepository {\n getMatchedRoute(): MatchedRoute | undefined;\n\n getCurrentRoute(): Route<any> | undefined;\n\n goToRoute<TParams extends RouteParamsDefinition | undefined>(\n route: Route<TParams>,\n params: TParams extends RouteParamsDefinition ? RouteParamsInfer<TParams> : undefined\n ): void;\n\n getLink<TParams extends RouteParamsDefinition | undefined>(\n route: Route<TParams>,\n params: TParams extends RouteParamsDefinition ? RouteParamsInfer<TParams> : undefined\n ): string;\n\n registerRoutes(routes: Route[]): void;\n\n addGuard(config: RouteTransitionGuardConfig): GuardDisposer;\n isBlocked(): boolean;\n unblock(): void;\n confirmTransition(): void;\n cancelTransition(): void;\n\n destroy(): void;\n}\n\nexport const RouterRepository = new Abstraction<IRouterRepository>(\"RouterRepository\");\n\nexport namespace RouterRepository {\n export type Interface = IRouterRepository;\n}\n\n/***** Gateway *****/\n\nexport interface RouteDefinition {\n name: string;\n path: string;\n onMatch(route: MatchedRoute): void;\n}\n\nexport type TransitionController = {\n continue: () => void;\n cancel: () => void;\n};\n\ninterface IRouterGateway {\n setRoutes(routes: RouteDefinition[]): void;\n goToRoute(name: string, params?: { [k: string]: any }): void;\n pushState(url: string): void;\n addGuard(config: RouteTransitionGuardConfig): GuardDisposer;\n destroy(): void;\n}\n\nexport const RouterGateway = new Abstraction<IRouterGateway>(\"RouterGateway\");\n\nexport namespace RouterGateway {\n export type Interface = IRouterGateway;\n}\n\n/***** Route Transition *****/\n\nexport type GuardDisposer = () => void;\n\nexport interface RouteTransitionGuardConfig {\n /** Return true to block the transition. */\n guard: () => boolean;\n /** Called when this guard blocks a transition. Show a confirmation dialog here. */\n onBlocked: (controller: TransitionController) => void;\n}\n"],"names":["RouterPresenter","Abstraction","RouterRepository","RouterGateway"],"mappings":";AAoCO,MAAMA,kBAAkB,IAAIC,YAA8B;AA6C1D,MAAMC,mBAAmB,IAAID,YAA+B;AA2B5D,MAAME,gBAAgB,IAAIF,YAA4B"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { RouterRepository } from "./RouterRepository.js";
|
|
2
2
|
import { RouterPresenter } from "./RouterPresenter.js";
|
|
3
|
-
import * as Abstractions from "./abstractions.js";
|
|
4
3
|
import { createFeature } from "../../shared/di/createFeature.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
4
|
+
import * as __rspack_external__abstractions_js_decaaf32 from "./abstractions.js";
|
|
5
|
+
const RouterFeature = createFeature({
|
|
6
|
+
name: "Router",
|
|
7
|
+
register (container) {
|
|
8
|
+
container.register(RouterRepository).inSingletonScope();
|
|
9
|
+
container.register(RouterPresenter).inSingletonScope();
|
|
10
|
+
},
|
|
11
|
+
resolve (container) {
|
|
12
|
+
return {
|
|
13
|
+
presenter: container.resolve(__rspack_external__abstractions_js_decaaf32.RouterPresenter)
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
16
|
});
|
|
17
|
+
export { RouterFeature };
|
|
17
18
|
|
|
18
19
|
//# sourceMappingURL=feature.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/router/feature.js","sources":["../../../src/features/router/feature.ts"],"sourcesContent":["import { RouterRepository } from \"~/features/router/RouterRepository.js\";\nimport { RouterPresenter } from \"~/features/router/RouterPresenter.js\";\nimport * as Abstractions from \"~/features/router/abstractions.js\";\nimport { createFeature } from \"~/shared/di/createFeature.js\";\n\nexport const RouterFeature = createFeature({\n name: \"Router\",\n register(container) {\n container.register(RouterRepository).inSingletonScope();\n container.register(RouterPresenter).inSingletonScope();\n },\n resolve(container) {\n return {\n presenter: container.resolve(Abstractions.RouterPresenter)\n };\n }\n});\n"],"names":["RouterFeature","createFeature","container","RouterRepository","RouterPresenter","Abstractions"],"mappings":";;;;AAKO,MAAMA,gBAAgBC,cAAc;IACvC,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,kBAAkB,gBAAgB;QACrDD,UAAU,QAAQ,CAACE,iBAAiB,gBAAgB;IACxD;IACA,SAAQF,SAAS;QACb,OAAO;YACH,WAAWA,UAAU,OAAO,CAACG,4CAAAA,eAA4B;QAC7D;IACJ;AACJ"}
|
package/features/router/index.js
CHANGED
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import { useDataList } from "../useDataList/index.js";
|
|
2
2
|
import debounce from "lodash/debounce.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
dataList.setSearch(search);
|
|
16
|
-
}, 250)
|
|
17
|
-
};
|
|
3
|
+
const useAutocomplete = (props)=>{
|
|
4
|
+
const dataList = useDataList(props);
|
|
5
|
+
return {
|
|
6
|
+
options: dataList.data || [],
|
|
7
|
+
onInput: debounce((query)=>{
|
|
8
|
+
if (!query) return;
|
|
9
|
+
let search = props.search || query;
|
|
10
|
+
if ("function" == typeof search) search = search(query);
|
|
11
|
+
dataList.setSearch(search);
|
|
12
|
+
}, 250)
|
|
13
|
+
};
|
|
18
14
|
};
|
|
15
|
+
export { useAutocomplete };
|
|
19
16
|
|
|
20
17
|
//# sourceMappingURL=useAutocomplete.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"hooks/useAutocomplete/useAutocomplete.js","sources":["../../../src/hooks/useAutocomplete/useAutocomplete.ts"],"sourcesContent":["import { useDataList } from \"../useDataList/index.js\";\nimport debounce from \"lodash/debounce.js\";\nimport type { DocumentNode } from \"graphql\";\n\ninterface UseAutocompleteHook {\n options: any[];\n onInput(value: string): void;\n}\n\ninterface Props {\n query: DocumentNode;\n search?: string | ((value: string) => string);\n}\n\nexport const useAutocomplete = (props: Props): UseAutocompleteHook => {\n const dataList = useDataList(props);\n\n return {\n options: dataList.data || [],\n onInput: debounce(query => {\n if (!query) {\n return;\n }\n\n let search = props.search || query;\n if (typeof search === \"function\") {\n search = search(query);\n }\n\n dataList.setSearch(search);\n }, 250)\n };\n};\n"],"names":["useAutocomplete","props","dataList","useDataList","debounce","query","search"],"mappings":";;AAcO,MAAMA,kBAAkB,CAACC;IAC5B,MAAMC,WAAWC,YAAYF;IAE7B,OAAO;QACH,SAASC,SAAS,IAAI,IAAI,EAAE;QAC5B,SAASE,SAASC,CAAAA;YACd,IAAI,CAACA,OACD;YAGJ,IAAIC,SAASL,MAAM,MAAM,IAAII;YAC7B,IAAI,AAAkB,cAAlB,OAAOC,QACPA,SAASA,OAAOD;YAGpBH,SAAS,SAAS,CAACI;QACvB,GAAG;IACP;AACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"hooks/useDataList/functions/getData.js","sources":["../../../../src/hooks/useDataList/functions/getData.ts"],"sourcesContent":["import searchDataByKey from \"./searchDataByKey.js\";\n\nexport default (response: Record<string, string>) => searchDataByKey(\"data\", response);\n"],"names":["response","searchDataByKey"],"mappings":";AAEA,gBAAgB,CAAAA,WAAqCC,gBAAgB,QAAQD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"hooks/useDataList/functions/getError.js","sources":["../../../../src/hooks/useDataList/functions/getError.ts"],"sourcesContent":["import searchDataByKey from \"./searchDataByKey.js\";\n\nexport default (response: Record<string, string>) => searchDataByKey(\"error\", response);\n"],"names":["response","searchDataByKey"],"mappings":";AAEA,iBAAgB,CAAAA,WAAqCC,gBAAgB,SAASD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"hooks/useDataList/functions/getMeta.js","sources":["../../../../src/hooks/useDataList/functions/getMeta.ts"],"sourcesContent":["import searchDataByKey from \"./searchDataByKey.js\";\n\nexport default (response: Record<string, string>) => searchDataByKey(\"meta\", response);\n"],"names":["response","searchDataByKey"],"mappings":";AAEA,gBAAgB,CAAAA,WAAqCC,gBAAgB,QAAQD"}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
const searchDataByKey = (searchKey, object)
|
|
2
|
-
|
|
3
|
-
return
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
for (const key in object) {
|
|
9
|
-
const value = searchDataByKey(searchKey, object[key]);
|
|
10
|
-
if (value) {
|
|
11
|
-
return value;
|
|
1
|
+
const searchDataByKey = (searchKey, object)=>{
|
|
2
|
+
if (!object || "object" != typeof object) return null;
|
|
3
|
+
if (object[searchKey]) return object[searchKey];
|
|
4
|
+
for(const key in object){
|
|
5
|
+
const value = searchDataByKey(searchKey, object[key]);
|
|
6
|
+
if (value) return value;
|
|
12
7
|
}
|
|
13
|
-
|
|
14
|
-
return null;
|
|
8
|
+
return null;
|
|
15
9
|
};
|
|
16
|
-
|
|
10
|
+
const functions_searchDataByKey = searchDataByKey;
|
|
11
|
+
export default functions_searchDataByKey;
|
|
17
12
|
|
|
18
13
|
//# sourceMappingURL=searchDataByKey.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"hooks/useDataList/functions/searchDataByKey.js","sources":["../../../../src/hooks/useDataList/functions/searchDataByKey.ts"],"sourcesContent":["const searchDataByKey = (searchKey: string, object: Record<string, any>): string | null => {\n if (!object || typeof object !== \"object\") {\n return null;\n }\n\n if (object[searchKey]) {\n return object[searchKey];\n }\n\n for (const key in object) {\n const value = searchDataByKey(searchKey, object[key]);\n if (value) {\n return value;\n }\n }\n\n return null;\n};\n\nexport default searchDataByKey;\n"],"names":["searchDataByKey","searchKey","object","key","value"],"mappings":"AAAA,MAAMA,kBAAkB,CAACC,WAAmBC;IACxC,IAAI,CAACA,UAAU,AAAkB,YAAlB,OAAOA,QAClB,OAAO;IAGX,IAAIA,MAAM,CAACD,UAAU,EACjB,OAAOC,MAAM,CAACD,UAAU;IAG5B,IAAK,MAAME,OAAOD,OAAQ;QACtB,MAAME,QAAQJ,gBAAgBC,WAAWC,MAAM,CAACC,IAAI;QACpD,IAAIC,OACA,OAAOA;IAEf;IAEA,OAAO;AACX;AAEA,kCAAeJ"}
|