@venizia/ardor-admin 0.1.2-5 → 0.1.2-7
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/dist/common/types.d.ts +9 -1
- package/dist/common/types.d.ts.map +1 -1
- package/dist/components/application.d.ts.map +1 -1
- package/dist/components/application.js +54 -3
- package/dist/components/application.js.map +1 -1
- package/dist/features/feature.d.ts +36 -0
- package/dist/features/feature.d.ts.map +1 -0
- package/dist/features/feature.js +42 -0
- package/dist/features/feature.js.map +1 -0
- package/dist/features/index.d.ts +2 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +4 -0
- package/dist/features/index.js.map +1 -0
- package/dist/features/messages.d.ts +33 -0
- package/dist/features/messages.d.ts.map +1 -0
- package/dist/features/messages.js +87 -0
- package/dist/features/messages.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +3 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-document-title.d.ts +14 -0
- package/dist/hooks/use-document-title.d.ts.map +1 -0
- package/dist/hooks/use-document-title.js +21 -0
- package/dist/hooks/use-document-title.js.map +1 -0
- package/dist/hooks/use-features.d.ts +4 -0
- package/dist/hooks/use-features.d.ts.map +1 -0
- package/dist/hooks/use-features.js +8 -0
- package/dist/hooks/use-features.js.map +1 -0
- package/dist/hooks/use-html-lang.d.ts +3 -0
- package/dist/hooks/use-html-lang.d.ts.map +1 -0
- package/dist/hooks/use-html-lang.js +10 -0
- package/dist/hooks/use-html-lang.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/auth.d.ts +3 -2
- package/dist/providers/auth.d.ts.map +1 -1
- package/dist/providers/auth.js +14 -2
- package/dist/providers/auth.js.map +1 -1
- package/dist/providers/i18n.d.ts +3 -1
- package/dist/providers/i18n.d.ts.map +1 -1
- package/dist/providers/i18n.js +23 -4
- package/dist/providers/i18n.js.map +1 -1
- package/package.json +4 -4
package/dist/common/types.d.ts
CHANGED
|
@@ -35,6 +35,13 @@ export interface IReactAdminAuthProvider {
|
|
|
35
35
|
checkError: (error: AnyType) => Promise<void>;
|
|
36
36
|
getIdentity?: (params?: QueryFunctionContext) => Promise<UserIdentity>;
|
|
37
37
|
getPermissions: (params: AnyType & QueryFunctionContext) => Promise<AnyType>;
|
|
38
|
+
/** Present only when the application binds `CoreBindings.PERMISSION_PROVIDER`. */
|
|
39
|
+
canAccess?: (params: {
|
|
40
|
+
resource: string;
|
|
41
|
+
action: string;
|
|
42
|
+
record?: unknown;
|
|
43
|
+
signal?: AbortSignal;
|
|
44
|
+
}) => Promise<boolean>;
|
|
38
45
|
}
|
|
39
46
|
export interface IAuthProvider extends IReactAdminAuthProvider {
|
|
40
47
|
getRoles: (params?: AnyType) => Promise<Set<string>>;
|
|
@@ -49,7 +56,8 @@ export interface IApplication extends Omit<CoreAdminProps, 'children'> {
|
|
|
49
56
|
enableDebug?: boolean;
|
|
50
57
|
reduxStore: Store;
|
|
51
58
|
suspense: ReactNode;
|
|
52
|
-
resources
|
|
59
|
+
/** The application's own resources; each feature's are mounted after them. */
|
|
60
|
+
resources?: Array<ResourceProps>;
|
|
53
61
|
customRoutes?: {
|
|
54
62
|
routes: Array<RouteProps>;
|
|
55
63
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/common/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/common/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/components/application.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../../src/components/application.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAgFpD,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAwEnD,CAAC"}
|
|
@@ -4,6 +4,8 @@ import { CoreAdmin, CustomRoutes, Resource } from 'ra-core';
|
|
|
4
4
|
import { Provider as ReduxProvider } from 'react-redux';
|
|
5
5
|
import { Route } from 'react-router-dom';
|
|
6
6
|
import { CoreBindings, Logger } from '@venizia/ardor-kernel';
|
|
7
|
+
import { mountFeatures, readFeatures } from '../features/feature.js';
|
|
8
|
+
import { FeatureMessages } from '../features/messages.js';
|
|
7
9
|
import { ApplicationContext } from '@venizia/ardor-react';
|
|
8
10
|
const Wrapper = ({ applicationName = 'ArdorApplication', container, reduxStore, suspense, enableDebug = false, children, }) => {
|
|
9
11
|
return (_jsx(ApplicationContext.Provider, { value: {
|
|
@@ -12,9 +14,51 @@ const Wrapper = ({ applicationName = 'ArdorApplication', container, reduxStore,
|
|
|
12
14
|
logger: Logger.getInstance({ scope: applicationName, enableDebug }),
|
|
13
15
|
}, children: _jsx(ReduxProvider, { store: reduxStore, children: _jsx(React.Suspense, { fallback: suspense, children: children }) }) }));
|
|
14
16
|
};
|
|
17
|
+
/**
|
|
18
|
+
* The i18n provider is built with the initial locale's eager messages only; when a feature loads
|
|
19
|
+
* that locale lazily, `changeLocale()` to the same locale loads it before react-admin renders. A
|
|
20
|
+
* failed load, such as a key two features define, is thrown from render for an error boundary.
|
|
21
|
+
*/
|
|
22
|
+
const useFeatureMessagesReady = (opts) => {
|
|
23
|
+
const { features, i18nProvider } = opts;
|
|
24
|
+
const [state, setState] = React.useState(() => {
|
|
25
|
+
return {
|
|
26
|
+
isReady: !FeatureMessages.hasLoader({ features, locale: i18nProvider.getLocale() }),
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
React.useEffect(() => {
|
|
30
|
+
if (state.isReady) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
let isLive = true;
|
|
34
|
+
Promise.resolve(i18nProvider.changeLocale(i18nProvider.getLocale())).then(() => {
|
|
35
|
+
if (isLive) {
|
|
36
|
+
setState({ isReady: true });
|
|
37
|
+
}
|
|
38
|
+
}, (error) => {
|
|
39
|
+
if (isLive) {
|
|
40
|
+
setState({ isReady: false, error });
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
return () => {
|
|
44
|
+
isLive = false;
|
|
45
|
+
};
|
|
46
|
+
}, [i18nProvider, state.isReady]);
|
|
47
|
+
if (state.error) {
|
|
48
|
+
throw state.error;
|
|
49
|
+
}
|
|
50
|
+
return state.isReady;
|
|
51
|
+
};
|
|
15
52
|
export const ArdorApplication = (props) => {
|
|
16
53
|
const { container, reduxStore, suspense, enableDebug = false, resources, customRoutes, ...raProps } = props;
|
|
17
54
|
const { routes } = customRoutes ?? {};
|
|
55
|
+
const features = React.useMemo(() => {
|
|
56
|
+
return readFeatures({ container });
|
|
57
|
+
}, [container]);
|
|
58
|
+
// The application's own resources and routes, then each feature's it bound in `features()`.
|
|
59
|
+
const mounted = React.useMemo(() => {
|
|
60
|
+
return mountFeatures({ features, resources, routes });
|
|
61
|
+
}, [features, resources, routes]);
|
|
18
62
|
const adminProps = React.useMemo(() => {
|
|
19
63
|
const dataProvider = container.get({
|
|
20
64
|
key: CoreBindings.DEFAULT_REST_DATA_PROVIDER,
|
|
@@ -27,10 +71,17 @@ export const ArdorApplication = (props) => {
|
|
|
27
71
|
});
|
|
28
72
|
return { dataProvider, authProvider, i18nProvider, ...raProps };
|
|
29
73
|
}, [container, raProps]);
|
|
30
|
-
|
|
74
|
+
const isMessagesReady = useFeatureMessagesReady({
|
|
75
|
+
features,
|
|
76
|
+
i18nProvider: adminProps.i18nProvider,
|
|
77
|
+
});
|
|
78
|
+
if (!isMessagesReady) {
|
|
79
|
+
return (_jsx(Wrapper, { container: container, reduxStore: reduxStore, suspense: suspense, enableDebug: enableDebug, children: suspense }));
|
|
80
|
+
}
|
|
81
|
+
return (_jsx(Wrapper, { container: container, reduxStore: reduxStore, suspense: suspense, enableDebug: enableDebug, children: _jsxs(CoreAdmin, { ...adminProps, children: [mounted.resources.map((resource) => {
|
|
31
82
|
return _jsx(Resource, { ...resource }, resource.name);
|
|
32
|
-
}), _jsx(CustomRoutes, { children: routes
|
|
33
|
-
return _jsx(Route, { ...
|
|
83
|
+
}), _jsx(CustomRoutes, { children: mounted.routes.map((route) => {
|
|
84
|
+
return _jsx(Route, { ...route }, route.id ?? route.path);
|
|
34
85
|
}) })] }) }));
|
|
35
86
|
};
|
|
36
87
|
//# sourceMappingURL=application.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/components/application.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAqB,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,MAAM,OAAO,GAOR,CAAC,EACJ,eAAe,GAAG,kBAAkB,EACpC,SAAS,EACT,UAAU,EACV,QAAQ,EACR,WAAW,GAAG,KAAK,EACnB,QAAQ,GACT,EAAE,EAAE;IACH,OAAO,CACL,KAAC,kBAAkB,CAAC,QAAQ,IAC1B,KAAK,EAAE;YACL,SAAS;YACT,QAAQ,EAAE,SAAS;YACnB,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;SACpE,YACD,KAAC,aAAa,IAAC,KAAK,EAAE,UAAU,YAC9B,KAAC,KAAK,CAAC,QAAQ,IAAC,QAAQ,EAAE,QAAQ,YAAG,QAAQ,GAAkB,GACjD,GACY,CAC/B,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAA2B,CAAC,KAAmB,EAAE,EAAE;IAC9E,MAAM,EACJ,SAAS,EACT,UAAU,EACV,QAAQ,EACR,WAAW,GAAG,KAAK,EACnB,SAAS,EACT,YAAY,EACZ,GAAG,OAAO,EACX,GAAG,KAAK,CAAC;IAEV,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,IAAI,EAAE,CAAC;IAEtC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACpC,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAgB;YAChD,GAAG,EAAE,YAAY,CAAC,0BAA0B;SAC7C,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAgB;YAChD,GAAG,EAAE,YAAY,CAAC,qBAAqB;SACxC,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAe;YAC/C,GAAG,EAAE,YAAY,CAAC,qBAAqB;SACxC,CAAC,CAAC;QAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,OAAO,EAAE,CAAC;IAClE,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IAEzB,OAAO,CACL,KAAC,OAAO,IACN,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,YACxB,MAAC,SAAS,OAAK,UAAU,aACtB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"application.js","sourceRoot":"","sources":["../../src/components/application.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type Container } from '@venizia/ignis-inversion';
|
|
2
|
+
import type { ResourceProps } from 'ra-core';
|
|
3
|
+
import type { RouteProps } from 'react-router-dom';
|
|
4
|
+
import { type IFeatureBase } from '@venizia/ardor-kernel';
|
|
5
|
+
/** Per locale: the messages, or a loader for them. */
|
|
6
|
+
export type TFeatureMessages = Record<string, object | (() => Promise<object>)>;
|
|
7
|
+
/**
|
|
8
|
+
* A feature package: what it registers in the container (`IFeatureBase`), plus what it mounts in the
|
|
9
|
+
* admin - resources, routes and messages. `TExtension` is what a shell adds on top, such as menu
|
|
10
|
+
* entries; ARDOR carries it and never reads it.
|
|
11
|
+
*/
|
|
12
|
+
export type IFeature<TExtension extends object = {}> = IFeatureBase & TExtension & {
|
|
13
|
+
resources?: Array<ResourceProps>;
|
|
14
|
+
routes?: Array<RouteProps>;
|
|
15
|
+
/** The application's own `i18nSources` override these. */
|
|
16
|
+
messages?: TFeatureMessages;
|
|
17
|
+
};
|
|
18
|
+
/** Types a feature, keeping the shell's extension. */
|
|
19
|
+
export declare const defineFeature: <TExtension extends object = {}>(feature: IFeature<TExtension>) => IFeature<TExtension>;
|
|
20
|
+
/** The features the application bound under `CoreBindings.FEATURES`, or none. */
|
|
21
|
+
export declare const readFeatures: <TFeature extends IFeature = IFeature>(opts: {
|
|
22
|
+
container: Container;
|
|
23
|
+
}) => Array<TFeature>;
|
|
24
|
+
/**
|
|
25
|
+
* The application's own resources and routes, then each feature's, in order. A resource name
|
|
26
|
+
* mounted twice throws: react-admin would keep one and drop the other without a word.
|
|
27
|
+
*/
|
|
28
|
+
export declare const mountFeatures: (opts: {
|
|
29
|
+
features: Array<IFeature>;
|
|
30
|
+
resources?: Array<ResourceProps>;
|
|
31
|
+
routes?: Array<RouteProps>;
|
|
32
|
+
}) => {
|
|
33
|
+
resources: Array<ResourceProps>;
|
|
34
|
+
routes: Array<RouteProps>;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=feature.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../src/features/feature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAExE,sDAAsD;AACtD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAEhF;;;;GAIG;AACH,MAAM,MAAM,QAAQ,CAAC,UAAU,SAAS,MAAM,GAAG,EAAE,IAAI,YAAY,GACjE,UAAU,GAAG;IACX,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAEJ,sDAAsD;AACtD,eAAO,MAAM,aAAa,GAAI,UAAU,SAAS,MAAM,GAAG,EAAE,EAC1D,SAAS,QAAQ,CAAC,UAAU,CAAC,KAC5B,QAAQ,CAAC,UAAU,CAErB,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,YAAY,GAAI,QAAQ,SAAS,QAAQ,GAAG,QAAQ,EAAE,MAAM;IACvE,SAAS,EAAE,SAAS,CAAC;CACtB,KAAG,KAAK,CAAC,QAAQ,CAQjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM;IAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC1B,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;CAC5B,KAAG;IAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAyB/D,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { getError } from '@venizia/ignis-inversion';
|
|
2
|
+
import { CoreBindings } from '@venizia/ardor-kernel';
|
|
3
|
+
/** Types a feature, keeping the shell's extension. */
|
|
4
|
+
export const defineFeature = (feature) => {
|
|
5
|
+
return feature;
|
|
6
|
+
};
|
|
7
|
+
/** The features the application bound under `CoreBindings.FEATURES`, or none. */
|
|
8
|
+
export const readFeatures = (opts) => {
|
|
9
|
+
const { container } = opts;
|
|
10
|
+
if (!container.isBound({ key: CoreBindings.FEATURES })) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
return container.get({ key: CoreBindings.FEATURES });
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* The application's own resources and routes, then each feature's, in order. A resource name
|
|
17
|
+
* mounted twice throws: react-admin would keep one and drop the other without a word.
|
|
18
|
+
*/
|
|
19
|
+
export const mountFeatures = (opts) => {
|
|
20
|
+
const { features, resources = [], routes = [] } = opts;
|
|
21
|
+
const owners = new Map();
|
|
22
|
+
const claim = (entry) => {
|
|
23
|
+
for (const resource of entry.resources) {
|
|
24
|
+
const owner = owners.get(resource.name);
|
|
25
|
+
if (owner) {
|
|
26
|
+
throw getError({
|
|
27
|
+
message: `[features] Resource '${resource.name}' is mounted by both '${owner}' and '${entry.owner}' | A resource name is unique within an application`,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
owners.set(resource.name, entry.owner);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
claim({ owner: 'the application', resources });
|
|
34
|
+
for (const feature of features) {
|
|
35
|
+
claim({ owner: feature.name, resources: feature.resources ?? [] });
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
resources: [...resources, ...features.flatMap((feature) => feature.resources ?? [])],
|
|
39
|
+
routes: [...routes, ...features.flatMap((feature) => feature.routes ?? [])],
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=feature.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature.js","sourceRoot":"","sources":["../../src/features/feature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAkB,MAAM,0BAA0B,CAAC;AAIpE,OAAO,EAAE,YAAY,EAAqB,MAAM,uBAAuB,CAAC;AAkBxE,sDAAsD;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,OAA6B,EACP,EAAE;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAuC,IAElE,EAAmB,EAAE;IACpB,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAE3B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;QACvD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,SAAS,CAAC,GAAG,CAAkB,EAAE,GAAG,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;AACxE,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAI7B,EAAkE,EAAE;IACnE,MAAM,EAAE,QAAQ,EAAE,SAAS,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;IAEvD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,KAAK,GAAG,CAAC,KAAyD,EAAE,EAAE;QAC1E,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,QAAQ,CAAC;oBACb,OAAO,EAAE,wBAAwB,QAAQ,CAAC,IAAI,yBAAyB,KAAK,UAAU,KAAK,CAAC,KAAK,qDAAqD;iBACvJ,CAAC,CAAC;YACL,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO;QACL,SAAS,EAAE,CAAC,GAAG,SAAS,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACpF,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;KAC5E,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/features/index.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,wDAAwD;AACxD,OAAO,EAAE,aAAa,EAAwC,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type IFeature } from './feature.js';
|
|
2
|
+
/**
|
|
3
|
+
* The features' messages for one locale, merged. Keys stay flat - no namespace is added - so a key
|
|
4
|
+
* two features both define throws, naming both: a silent "later wins" is a wrong label nobody
|
|
5
|
+
* notices. The application's own sources are layered on top by the i18n provider, not here.
|
|
6
|
+
*/
|
|
7
|
+
export declare class FeatureMessages {
|
|
8
|
+
private readonly opts;
|
|
9
|
+
private readonly loaded;
|
|
10
|
+
constructor(opts: {
|
|
11
|
+
features: Array<IFeature>;
|
|
12
|
+
});
|
|
13
|
+
/** Whether some feature in the list loads this locale lazily. */
|
|
14
|
+
static hasLoader(opts: {
|
|
15
|
+
features: Array<IFeature>;
|
|
16
|
+
locale: string;
|
|
17
|
+
}): boolean;
|
|
18
|
+
/** Whether a lazy bundle for the locale is still unloaded. */
|
|
19
|
+
isPending(opts: {
|
|
20
|
+
locale: string;
|
|
21
|
+
}): boolean;
|
|
22
|
+
/** What is available without waiting: every eager bundle, and the lazy ones already loaded. */
|
|
23
|
+
readNow(opts: {
|
|
24
|
+
locale: string;
|
|
25
|
+
}): object;
|
|
26
|
+
/** Every bundle for the locale, each lazy one loaded once. */
|
|
27
|
+
read(opts: {
|
|
28
|
+
locale: string;
|
|
29
|
+
}): Promise<object>;
|
|
30
|
+
private static combine;
|
|
31
|
+
private static leafKeys;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/features/messages.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAO1C;;;;GAIG;AACH,qBAAa,eAAe;IAGd,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;gBAEvB,IAAI,EAAE;QAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;KAAE;IAEhE,iEAAiE;IACjE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;IAK9E,8DAA8D;IAC9D,SAAS,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;IAQ5C,+FAA+F;IAC/F,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAoBzC,8DAA8D;IACxD,IAAI,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBrD,OAAO,CAAC,MAAM,CAAC,OAAO;IAmBtB,OAAO,CAAC,MAAM,CAAC,QAAQ;CAWxB"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { getError } from '@venizia/ignis-inversion';
|
|
2
|
+
import isPlainObject from 'lodash/isPlainObject.js';
|
|
3
|
+
import merge from 'lodash/merge.js';
|
|
4
|
+
/**
|
|
5
|
+
* The features' messages for one locale, merged. Keys stay flat - no namespace is added - so a key
|
|
6
|
+
* two features both define throws, naming both: a silent "later wins" is a wrong label nobody
|
|
7
|
+
* notices. The application's own sources are layered on top by the i18n provider, not here.
|
|
8
|
+
*/
|
|
9
|
+
export class FeatureMessages {
|
|
10
|
+
constructor(opts) {
|
|
11
|
+
this.opts = opts;
|
|
12
|
+
this.loaded = new Map();
|
|
13
|
+
}
|
|
14
|
+
/** Whether some feature in the list loads this locale lazily. */
|
|
15
|
+
static hasLoader(opts) {
|
|
16
|
+
const { features, locale } = opts;
|
|
17
|
+
return features.some((feature) => typeof feature.messages?.[locale] === 'function');
|
|
18
|
+
}
|
|
19
|
+
/** Whether a lazy bundle for the locale is still unloaded. */
|
|
20
|
+
isPending(opts) {
|
|
21
|
+
const { locale } = opts;
|
|
22
|
+
return (!this.loaded.has(locale) &&
|
|
23
|
+
FeatureMessages.hasLoader({ features: this.opts.features, locale }));
|
|
24
|
+
}
|
|
25
|
+
/** What is available without waiting: every eager bundle, and the lazy ones already loaded. */
|
|
26
|
+
readNow(opts) {
|
|
27
|
+
const { locale } = opts;
|
|
28
|
+
const loaded = this.loaded.get(locale);
|
|
29
|
+
if (loaded) {
|
|
30
|
+
return loaded;
|
|
31
|
+
}
|
|
32
|
+
return FeatureMessages.combine({
|
|
33
|
+
locale,
|
|
34
|
+
bundles: this.opts.features.map((feature) => {
|
|
35
|
+
const messages = feature.messages?.[locale];
|
|
36
|
+
return {
|
|
37
|
+
feature: feature.name,
|
|
38
|
+
bundle: typeof messages === 'function' ? undefined : messages,
|
|
39
|
+
};
|
|
40
|
+
}),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/** Every bundle for the locale, each lazy one loaded once. */
|
|
44
|
+
async read(opts) {
|
|
45
|
+
const { locale } = opts;
|
|
46
|
+
const loaded = this.loaded.get(locale);
|
|
47
|
+
if (loaded) {
|
|
48
|
+
return loaded;
|
|
49
|
+
}
|
|
50
|
+
const bundles = await Promise.all(this.opts.features.map(async (feature) => {
|
|
51
|
+
const messages = feature.messages?.[locale];
|
|
52
|
+
return {
|
|
53
|
+
feature: feature.name,
|
|
54
|
+
bundle: typeof messages === 'function' ? await messages() : messages,
|
|
55
|
+
};
|
|
56
|
+
}));
|
|
57
|
+
const combined = FeatureMessages.combine({ locale, bundles });
|
|
58
|
+
this.loaded.set(locale, combined);
|
|
59
|
+
return combined;
|
|
60
|
+
}
|
|
61
|
+
static combine(opts) {
|
|
62
|
+
const { locale, bundles } = opts;
|
|
63
|
+
const owners = new Map();
|
|
64
|
+
for (const { feature, bundle } of bundles) {
|
|
65
|
+
for (const key of FeatureMessages.leafKeys({ value: bundle })) {
|
|
66
|
+
const owner = owners.get(key);
|
|
67
|
+
if (owner) {
|
|
68
|
+
throw getError({
|
|
69
|
+
message: `[features] Message '${key}' (${locale}) is defined by both '${owner}' and '${feature}' | Give each feature its own keys, or relabel it in the application's own i18nSources`,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
owners.set(key, feature);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return merge({}, ...bundles.map(({ bundle }) => bundle ?? {}));
|
|
76
|
+
}
|
|
77
|
+
static leafKeys(opts) {
|
|
78
|
+
const { value, prefix } = opts;
|
|
79
|
+
if (!isPlainObject(value)) {
|
|
80
|
+
return prefix ? [prefix] : [];
|
|
81
|
+
}
|
|
82
|
+
return Object.entries(value).flatMap(([key, child]) => {
|
|
83
|
+
return FeatureMessages.leafKeys({ value: child, prefix: prefix ? `${prefix}.${key}` : key });
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/features/messages.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC"}
|
package/dist/hooks/index.js
CHANGED
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type TDocumentTitleSegment = string | false | null | undefined;
|
|
2
|
+
export interface IUseDocumentTitleOptions {
|
|
3
|
+
title: TDocumentTitleSegment | Array<TDocumentTitleSegment>;
|
|
4
|
+
appTitle: string;
|
|
5
|
+
separator?: string;
|
|
6
|
+
enabled?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Sets the tab title to the screen title before `appTitle` (`Orders · Back Office`). On unmount it
|
|
10
|
+
* puts back the title it replaced, so one call per screen is enough - no reset on navigation.
|
|
11
|
+
*/
|
|
12
|
+
export declare const useDocumentTitle: (opts: IUseDocumentTitleOptions) => void;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=use-document-title.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-document-title.d.ts","sourceRoot":"","sources":["../../src/hooks/use-document-title.ts"],"names":[],"mappings":"AAEA,KAAK,qBAAqB,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;AAE/D,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,qBAAqB,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,wBAAwB,SAkB9D,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Sets the tab title to the screen title before `appTitle` (`Orders · Back Office`). On unmount it
|
|
4
|
+
* puts back the title it replaced, so one call per screen is enough - no reset on navigation.
|
|
5
|
+
*/
|
|
6
|
+
export const useDocumentTitle = (opts) => {
|
|
7
|
+
const { title, appTitle, separator = ' · ', enabled = true } = opts;
|
|
8
|
+
const segments = Array.isArray(title) ? title : [title];
|
|
9
|
+
const documentTitle = [...segments, appTitle].filter(Boolean).join(separator);
|
|
10
|
+
React.useEffect(() => {
|
|
11
|
+
if (!enabled) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const previousTitle = document.title;
|
|
15
|
+
document.title = documentTitle;
|
|
16
|
+
return () => {
|
|
17
|
+
document.title = previousTitle;
|
|
18
|
+
};
|
|
19
|
+
}, [enabled, documentTitle]);
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=use-document-title.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-document-title.js","sourceRoot":"","sources":["../../src/hooks/use-document-title.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAA8B,EAAE,EAAE;IACjE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,GAAG,KAAK,EAAE,OAAO,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IAEpE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,aAAa,GAAG,CAAC,GAAG,QAAQ,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE9E,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC;QACrC,QAAQ,CAAC,KAAK,GAAG,aAAa,CAAC;QAE/B,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,KAAK,GAAG,aAAa,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type IFeature } from '../features/feature.js';
|
|
2
|
+
/** The features the application mounts - for a menu, or a role editor listing their `permissions`. */
|
|
3
|
+
export declare const useFeatures: <TFeature extends IFeature = IFeature>() => Array<TFeature>;
|
|
4
|
+
//# sourceMappingURL=use-features.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-features.d.ts","sourceRoot":"","sources":["../../src/hooks/use-features.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,QAAQ,EAAgB,MAAM,oBAAoB,CAAC;AAEjE,sGAAsG;AACtG,eAAO,MAAM,WAAW,GAAI,QAAQ,SAAS,QAAQ,GAAG,QAAQ,OAAK,KAAK,CAAC,QAAQ,CAGlF,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { useInjectableContainer } from '@venizia/ardor-react';
|
|
2
|
+
import { readFeatures } from '../features/feature.js';
|
|
3
|
+
/** The features the application mounts - for a menu, or a role editor listing their `permissions`. */
|
|
4
|
+
export const useFeatures = () => {
|
|
5
|
+
const container = useInjectableContainer();
|
|
6
|
+
return readFeatures({ container });
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=use-features.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-features.js","sourceRoot":"","sources":["../../src/hooks/use-features.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAiB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEjE,sGAAsG;AACtG,MAAM,CAAC,MAAM,WAAW,GAAG,GAA0D,EAAE;IACrF,MAAM,SAAS,GAAG,sBAAsB,EAAE,CAAC;IAC3C,OAAO,YAAY,CAAW,EAAE,SAAS,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-html-lang.d.ts","sourceRoot":"","sources":["../../src/hooks/use-html-lang.ts"],"names":[],"mappings":"AAIA,sFAAsF;AACtF,eAAO,MAAM,WAAW,YAMvB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useLocaleState } from 'ra-core';
|
|
3
|
+
/** Keeps `<html lang>` on the UI locale - screen readers pick their voice from it. */
|
|
4
|
+
export const useHtmlLang = () => {
|
|
5
|
+
const [locale] = useLocaleState();
|
|
6
|
+
React.useEffect(() => {
|
|
7
|
+
document.documentElement.lang = locale;
|
|
8
|
+
}, [locale]);
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=use-html-lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-html-lang.js","sourceRoot":"","sources":["../../src/hooks/use-html-lang.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,sFAAsF;AACtF,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE;IAC9B,MAAM,CAAC,MAAM,CAAC,GAAG,cAAc,EAAE,CAAC;IAElC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,QAAQ,CAAC,eAAe,CAAC,IAAI,GAAG,MAAM,CAAC;IACzC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACf,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
|
package/dist/providers/auth.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Container } from '@venizia/ignis-inversion';
|
|
2
|
-
import { type AnyType, BaseProvider, DefaultAuthService, type IAuthProviderOptions } from '@venizia/ardor-kernel';
|
|
2
|
+
import { type AnyType, BaseProvider, DefaultAuthService, type IAuthProviderOptions, type IPermissionProvider } from '@venizia/ardor-kernel';
|
|
3
3
|
import { type IAuthProvider, type IDataProvider } from '../common/index.js';
|
|
4
4
|
export declare class DefaultAuthProvider<TResource extends string = string> extends BaseProvider<IAuthProvider> {
|
|
5
5
|
protected restDataProvider: IDataProvider<TResource>;
|
|
6
6
|
protected authProviderOptions: IAuthProviderOptions;
|
|
7
7
|
protected authService: DefaultAuthService;
|
|
8
|
-
|
|
8
|
+
protected permissionProvider?: IPermissionProvider | undefined;
|
|
9
|
+
constructor(restDataProvider: IDataProvider<TResource>, authProviderOptions: IAuthProviderOptions, authService: DefaultAuthService, permissionProvider?: IPermissionProvider | undefined);
|
|
9
10
|
login(params: AnyType): Promise<unknown>;
|
|
10
11
|
logout(_params: AnyType): Promise<void>;
|
|
11
12
|
checkAuth(_params: AnyType): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/providers/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EACL,KAAK,OAAO,EACZ,YAAY,EAEZ,kBAAkB,EAClB,KAAK,oBAAoB,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/providers/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EACL,KAAK,OAAO,EACZ,YAAY,EAEZ,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAEzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAElE,qBAAa,mBAAmB,CAC9B,SAAS,SAAS,MAAM,GAAG,MAAM,CACjC,SAAQ,YAAY,CAAC,aAAa,CAAC;IAGjC,SAAS,CAAC,gBAAgB,EAAE,aAAa,CAAC,SAAS,CAAC;IAEpD,SAAS,CAAC,mBAAmB,EAAE,oBAAoB;IAEnD,SAAS,CAAC,WAAW,EAAE,kBAAkB;IAEzC,SAAS,CAAC,kBAAkB,CAAC,EAAE,mBAAmB;gBANxC,gBAAgB,EAAE,aAAa,CAAC,SAAS,CAAC,EAE1C,mBAAmB,EAAE,oBAAoB,EAEzC,WAAW,EAAE,kBAAkB,EAE/B,kBAAkB,CAAC,EAAE,mBAAmB,YAAA;IAKpD,KAAK,CAAC,MAAM,EAAE,OAAO;IAuBrB,MAAM,CAAC,OAAO,EAAE,OAAO;IAOjB,SAAS,CAAC,OAAO,EAAE,OAAO;IAuBhC,UAAU,CAAC,MAAM,EAAE,OAAO;IAkB1B,WAAW,CAAC,OAAO,EAAE,OAAO;IAU5B,cAAc,CAAC,OAAO,EAAE,OAAO;IAI/B,QAAQ,CAAC,OAAO,EAAE,OAAO;IAIzB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAIvB,KAAK,CAAC,UAAU,EAAE,SAAS,GAAG,aAAa;CAuBrD"}
|
package/dist/providers/auth.js
CHANGED
|
@@ -15,11 +15,12 @@ import { inject } from '@venizia/ignis-inversion';
|
|
|
15
15
|
import { removeDoubleSlashes } from 'ra-core';
|
|
16
16
|
import { BaseProvider, CoreBindings, DefaultAuthService, RequestMethods, } from '@venizia/ardor-kernel';
|
|
17
17
|
let DefaultAuthProvider = DefaultAuthProvider_1 = class DefaultAuthProvider extends BaseProvider {
|
|
18
|
-
constructor(restDataProvider, authProviderOptions, authService) {
|
|
18
|
+
constructor(restDataProvider, authProviderOptions, authService, permissionProvider) {
|
|
19
19
|
super({ scope: DefaultAuthProvider_1.name });
|
|
20
20
|
this.restDataProvider = restDataProvider;
|
|
21
21
|
this.authProviderOptions = authProviderOptions;
|
|
22
22
|
this.authService = authService;
|
|
23
|
+
this.permissionProvider = permissionProvider;
|
|
23
24
|
}
|
|
24
25
|
login(params) {
|
|
25
26
|
return new Promise((resolve, reject) => {
|
|
@@ -95,6 +96,7 @@ let DefaultAuthProvider = DefaultAuthProvider_1 = class DefaultAuthProvider exte
|
|
|
95
96
|
return Promise.resolve();
|
|
96
97
|
}
|
|
97
98
|
value(_container) {
|
|
99
|
+
const { permissionProvider } = this;
|
|
98
100
|
return {
|
|
99
101
|
login: (params) => this.login(params),
|
|
100
102
|
logout: (params) => this.logout(params),
|
|
@@ -104,6 +106,15 @@ let DefaultAuthProvider = DefaultAuthProvider_1 = class DefaultAuthProvider exte
|
|
|
104
106
|
getPermissions: (params) => this.getPermissions(params),
|
|
105
107
|
getRoles: (params) => this.getRoles(params),
|
|
106
108
|
refreshToken: () => this.refreshToken(),
|
|
109
|
+
// Absent without a permission provider, so react-admin keeps allowing everything.
|
|
110
|
+
...(permissionProvider
|
|
111
|
+
? {
|
|
112
|
+
canAccess: (params) => {
|
|
113
|
+
const { resource, action, record } = params;
|
|
114
|
+
return permissionProvider.canAccess({ resource, action, record });
|
|
115
|
+
},
|
|
116
|
+
}
|
|
117
|
+
: {}),
|
|
107
118
|
};
|
|
108
119
|
}
|
|
109
120
|
};
|
|
@@ -111,7 +122,8 @@ DefaultAuthProvider = DefaultAuthProvider_1 = __decorate([
|
|
|
111
122
|
__param(0, inject({ key: CoreBindings.DEFAULT_REST_DATA_PROVIDER })),
|
|
112
123
|
__param(1, inject({ key: CoreBindings.AUTH_PROVIDER_OPTIONS })),
|
|
113
124
|
__param(2, inject({ key: CoreBindings.DEFAULT_AUTH_SERVICE })),
|
|
114
|
-
|
|
125
|
+
__param(3, inject({ key: CoreBindings.PERMISSION_PROVIDER, isOptional: true })),
|
|
126
|
+
__metadata("design:paramtypes", [Object, Object, DefaultAuthService, Object])
|
|
115
127
|
], DefaultAuthProvider);
|
|
116
128
|
export { DefaultAuthProvider };
|
|
117
129
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/providers/auth.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAa,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAEL,YAAY,EACZ,YAAY,EACZ,kBAAkB,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/providers/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/providers/i18n.d.ts
CHANGED
|
@@ -2,9 +2,11 @@ import { Container } from '@venizia/ignis-inversion';
|
|
|
2
2
|
import { type I18nProvider } from 'ra-core';
|
|
3
3
|
import { BaseProvider } from '@venizia/ardor-kernel';
|
|
4
4
|
import { type II18nProviderOptions } from '../common/index.js';
|
|
5
|
+
import { type IFeature } from '../features/feature.js';
|
|
5
6
|
export declare class DefaultI18nProvider extends BaseProvider<I18nProvider> {
|
|
6
7
|
protected i18nProviderOptions: II18nProviderOptions;
|
|
7
|
-
|
|
8
|
+
protected features: Array<IFeature>;
|
|
9
|
+
constructor(i18nProviderOptions: II18nProviderOptions, features?: Array<IFeature>);
|
|
8
10
|
value(_container: Container): I18nProvider;
|
|
9
11
|
}
|
|
10
12
|
//# sourceMappingURL=i18n.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/providers/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/providers/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,OAAO,EAAE,YAAY,EAAgB,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAKnD,qBAAa,mBAAoB,SAAQ,YAAY,CAAC,YAAY,CAAC;IAG/D,SAAS,CAAC,mBAAmB,EAAE,oBAAoB;IAEnD,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC;gBAFzB,mBAAmB,EAAE,oBAAoB,EAEzC,QAAQ,GAAE,KAAK,CAAC,QAAQ,CAAM;IAKjC,KAAK,CAAC,UAAU,EAAE,SAAS,GAAG,YAAY;CAyCpD"}
|
package/dist/providers/i18n.js
CHANGED
|
@@ -12,30 +12,49 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
12
|
};
|
|
13
13
|
var DefaultI18nProvider_1;
|
|
14
14
|
import { inject } from '@venizia/ignis-inversion';
|
|
15
|
+
import merge from 'lodash/merge.js';
|
|
15
16
|
import polyglotI18nProvider from 'ra-i18n-polyglot';
|
|
16
17
|
import { BaseProvider, CoreBindings } from '@venizia/ardor-kernel';
|
|
17
18
|
import { englishMessages } from '../common/locales/index.js';
|
|
19
|
+
import { FeatureMessages } from '../features/messages.js';
|
|
18
20
|
const [language] = (navigator?.language?.length ? navigator.language : 'en-US').split('-');
|
|
19
21
|
let DefaultI18nProvider = DefaultI18nProvider_1 = class DefaultI18nProvider extends BaseProvider {
|
|
20
|
-
constructor(i18nProviderOptions) {
|
|
22
|
+
constructor(i18nProviderOptions, features = []) {
|
|
21
23
|
super({ scope: DefaultI18nProvider_1.name });
|
|
22
24
|
this.i18nProviderOptions = i18nProviderOptions;
|
|
25
|
+
this.features = features;
|
|
23
26
|
}
|
|
24
27
|
value(_container) {
|
|
25
28
|
const { i18nSources = { en: englishMessages }, listLanguages = [{ locale: 'en', name: 'English' }], } = this.i18nProviderOptions;
|
|
26
29
|
const listLocales = listLanguages.map(({ locale }) => locale);
|
|
27
30
|
const initialLocale = listLocales.includes(language) ? language : 'en';
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
// The features' messages first, the application's own sources over them: the application may
|
|
32
|
+
// relabel a feature.
|
|
33
|
+
const featureMessages = new FeatureMessages({ features: this.features });
|
|
34
|
+
const compose = (opts) => {
|
|
35
|
+
return merge({}, opts.messages, i18nSources?.[opts.locale] ?? englishMessages);
|
|
36
|
+
};
|
|
37
|
+
// ra-i18n-polyglot reads the initial locale synchronously, once, while it is built: that read
|
|
38
|
+
// takes what is there now, and ArdorApplication loads the rest through changeLocale() before
|
|
39
|
+
// react-admin renders. Every later read may wait for a lazy bundle.
|
|
40
|
+
let isBuilding = true;
|
|
41
|
+
const i18nProvider = polyglotI18nProvider((locale) => {
|
|
42
|
+
if (isBuilding || !featureMessages.isPending({ locale })) {
|
|
43
|
+
return compose({ locale, messages: featureMessages.readNow({ locale }) });
|
|
44
|
+
}
|
|
45
|
+
return featureMessages.read({ locale }).then((messages) => compose({ locale, messages }));
|
|
30
46
|
}, initialLocale, listLanguages, {
|
|
31
47
|
allowMissing: true,
|
|
32
48
|
onMissingKey: (key, _options, _locale) => key,
|
|
33
49
|
});
|
|
50
|
+
isBuilding = false;
|
|
51
|
+
return i18nProvider;
|
|
34
52
|
}
|
|
35
53
|
};
|
|
36
54
|
DefaultI18nProvider = DefaultI18nProvider_1 = __decorate([
|
|
37
55
|
__param(0, inject({ key: CoreBindings.I18N_PROVIDER_OPTIONS })),
|
|
38
|
-
|
|
56
|
+
__param(1, inject({ key: CoreBindings.FEATURES, isOptional: true })),
|
|
57
|
+
__metadata("design:paramtypes", [Object, Array])
|
|
39
58
|
], DefaultI18nProvider);
|
|
40
59
|
export { DefaultI18nProvider };
|
|
41
60
|
//# sourceMappingURL=i18n.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/providers/i18n.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAa,MAAM,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/providers/i18n.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@venizia/ardor-admin",
|
|
3
|
-
"version": "0.1.2-
|
|
3
|
+
"version": "0.1.2-7",
|
|
4
4
|
"description": "ARDOR react-admin adapter - the REST data provider, auth provider and i18n provider wired through IGNIS inversion, the ArdorApplication root component, the translate and notify hooks, and the English and Vietnamese message bundles.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"admin",
|
|
@@ -75,8 +75,8 @@
|
|
|
75
75
|
"size": "size-limit"
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@venizia/ardor-kernel": "^0.1.2-
|
|
79
|
-
"@venizia/ardor-react": "^0.1.2-
|
|
78
|
+
"@venizia/ardor-kernel": "^0.1.2-6",
|
|
79
|
+
"@venizia/ardor-react": "^0.1.2-6",
|
|
80
80
|
"lodash": "^4.18.1",
|
|
81
81
|
"ra-i18n-polyglot": "^5.15.0"
|
|
82
82
|
},
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"@types/react-dom": "^19",
|
|
105
105
|
"@venizia/dev-configs": "0.2.1-0",
|
|
106
106
|
"@venizia/ignis-filter": "0.2.1-1",
|
|
107
|
-
"@venizia/ignis-inversion": "0.2.1-
|
|
107
|
+
"@venizia/ignis-inversion": "0.2.1-1",
|
|
108
108
|
"eslint": "^9.36.0",
|
|
109
109
|
"prettier": "^3.8.4",
|
|
110
110
|
"ra-core": "^5.15.0",
|