@leav/ui 1.12.0-d09cabfa → 1.12.0-e8c84be4
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/__mocks__/utils.d.ts +3 -0
- package/dist/__mocks__/utils.js +2 -0
- package/dist/__mocks__/utils.js.map +1 -0
- package/dist/_gqlTypes/index.d.ts +129 -33
- package/dist/_gqlTypes/index.js +71 -3
- package/dist/_gqlTypes/index.js.map +1 -1
- package/dist/_queries/attributes/attributeDetailsFragment.js +3 -0
- package/dist/_queries/attributes/attributeDetailsFragment.js.map +1 -1
- package/dist/components/Explorer/DataView.js +30 -13
- package/dist/components/Explorer/DataView.js.map +1 -1
- package/dist/components/Explorer/actions-mass/ResultsCount.js +2 -2
- package/dist/components/Explorer/actions-mass/ResultsCount.js.map +1 -1
- package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js +14 -6
- package/dist/components/Explorer/actions-mass/useEditAttributeMassAction.js.map +1 -1
- package/dist/components/Explorer/actions-mass/useMassActions.js +12 -6
- package/dist/components/Explorer/actions-mass/useMassActions.js.map +1 -1
- package/dist/components/Explorer/conditionsHelper.d.ts +2 -1
- package/dist/components/Explorer/conditionsHelper.js.map +1 -1
- package/dist/components/Explorer/manage-view-settings/save-view/prepareViewForRequest.js +6 -4
- package/dist/components/Explorer/manage-view-settings/save-view/prepareViewForRequest.js.map +1 -1
- package/dist/components/Filters/_types.d.ts +3 -0
- package/dist/components/Filters/_types.js.map +1 -1
- package/dist/components/Filters/conditionsHelper.d.ts +2 -1
- package/dist/components/Filters/conditionsHelper.js.map +1 -1
- package/dist/components/Filters/context/filtersReducer.js +14 -1
- package/dist/components/Filters/context/filtersReducer.js.map +1 -1
- package/dist/components/Filters/filter-items/CommonFilterItem.js.map +1 -1
- package/dist/components/Filters/filter-items/filter-type/useConditionOptionsByType.js.map +1 -1
- package/dist/components/Filters/useFilters.d.ts +198 -0
- package/dist/components/Filters/useTransformFilters.js +4 -2
- package/dist/components/Filters/useTransformFilters.js.map +1 -1
- package/dist/components/RecordEdition/EditRecord/EditRecord.js +8 -1
- package/dist/components/RecordEdition/EditRecord/EditRecord.js.map +1 -1
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.js +3 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useGetRecordIdCard/index.d.ts +1 -0
- package/dist/hooks/useGetRecordIdCard/index.js +5 -0
- package/dist/hooks/useGetRecordIdCard/index.js.map +1 -0
- package/dist/hooks/useGetRecordIdCard/useGetRecordIdCard.d.ts +18 -0
- package/dist/hooks/useGetRecordIdCard/useGetRecordIdCard.js +20 -0
- package/dist/hooks/useGetRecordIdCard/useGetRecordIdCard.js.map +1 -0
- package/dist/hooks/useIFrameMessenger/iFrameMessengerContext.d.ts +6 -0
- package/dist/hooks/useIFrameMessenger/iFrameMessengerContext.js +8 -0
- package/dist/hooks/useIFrameMessenger/iFrameMessengerContext.js.map +1 -0
- package/dist/hooks/useIFrameMessenger/types.d.ts +10 -3
- package/dist/hooks/useIFrameMessenger/types.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/useIFrameMessenger.d.ts +11 -2
- package/dist/hooks/useIFrameMessenger/useIFrameMessenger.js +31 -10
- package/dist/hooks/useIFrameMessenger/useIFrameMessenger.js.map +1 -1
- package/dist/hooks/useIFrameMessenger/useIFrameMessengerContext.d.ts +13 -0
- package/dist/hooks/useIFrameMessenger/useIFrameMessengerContext.js +59 -0
- package/dist/hooks/useIFrameMessenger/useIFrameMessengerContext.js.map +1 -0
- package/dist/hooks/useIFrameMessenger/useIFrameMessengerHandlers.d.ts +13 -0
- package/dist/hooks/useIFrameMessenger/useIFrameMessengerHandlers.js +29 -0
- package/dist/hooks/useIFrameMessenger/useIFrameMessengerHandlers.js.map +1 -0
- package/dist/hooks/useIFrameMessengerClient/IFrameMessengerClient.js +3 -0
- package/dist/hooks/useIFrameMessengerClient/IFrameMessengerClient.js.map +1 -1
- package/dist/hooks/useIFrameMessengerClient/iFrameMessengerClientContext.d.ts +1 -0
- package/dist/hooks/useIFrameMessengerClient/useIFrameMessengerClient.d.ts +1 -0
- package/dist/hooks/useSharedTranslation/__mocks__/useSharedTranslation.js.map +1 -1
- package/dist/locales/en/shared.json +2 -0
- package/dist/locales/fr/shared.json +3 -1
- package/package.json +8 -8
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Singleton Provider for the IFrameMessenger system.
|
|
4
|
+
* Must be mounted once above all `PanelCustom` instances.
|
|
5
|
+
*
|
|
6
|
+
* Owns a single `window.addEventListener('message')` (via `useIFrameMessenger`)
|
|
7
|
+
* and routes incoming messages to the correct iframe's handlers using `handlersMap`.
|
|
8
|
+
*
|
|
9
|
+
* Each `PanelCustom` registers/deregisters its handlers via `useIFrameMessengerHandlers`.
|
|
10
|
+
*/
|
|
11
|
+
export declare const IFrameMessengerProvider: ({ children }: {
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
}) => JSX.Element;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
|
|
3
|
+
// This file is released under LGPL V3
|
|
4
|
+
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
5
|
+
import { useCallback, useMemo, useRef } from 'react';
|
|
6
|
+
import { useIFrameMessenger } from './useIFrameMessenger';
|
|
7
|
+
import { initClientHandlers } from './messageHandlers';
|
|
8
|
+
import { IFrameMessengerContext } from './iFrameMessengerContext';
|
|
9
|
+
/**
|
|
10
|
+
* Singleton Provider for the IFrameMessenger system.
|
|
11
|
+
* Must be mounted once above all `PanelCustom` instances.
|
|
12
|
+
*
|
|
13
|
+
* Owns a single `window.addEventListener('message')` (via `useIFrameMessenger`)
|
|
14
|
+
* and routes incoming messages to the correct iframe's handlers using `handlersMap`.
|
|
15
|
+
*
|
|
16
|
+
* Each `PanelCustom` registers/deregisters its handlers via `useIFrameMessengerHandlers`.
|
|
17
|
+
*/
|
|
18
|
+
export const IFrameMessengerProvider = ({ children }) => {
|
|
19
|
+
// Maps each iframe's RefObject to its set of handlers.
|
|
20
|
+
// Using RefObject as key (instead of Window) avoids timing issues: contentWindow
|
|
21
|
+
// may not be available yet when the iframe mounts and registers its handlers.
|
|
22
|
+
const handlersMap = useRef(new Map());
|
|
23
|
+
// Called by useIFrameMessenger for every non-system message.
|
|
24
|
+
// Finds the handlers registered for the sender iframe and dispatches the message to them.
|
|
25
|
+
const onMessageReceived = useCallback((senderWindow, message, panelId, dispatch, callCb, callbacksStore) => {
|
|
26
|
+
// event.source is null when the sender iframe was unmounted before the message
|
|
27
|
+
// was processed — the browser clears the reference on iframe removal.
|
|
28
|
+
if (!senderWindow) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
let matchedHandlers;
|
|
32
|
+
for (const [ref, handlers] of handlersMap.current) {
|
|
33
|
+
if (ref.current?.contentWindow === senderWindow) {
|
|
34
|
+
matchedHandlers = handlers;
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// No registered handlers for this sender: either the iframe called unregisterHandlers
|
|
39
|
+
// before its last message was processed (race condition on unmount), or the message
|
|
40
|
+
// originates from an unrelated frame that passed decodeMessage validation.
|
|
41
|
+
if (!matchedHandlers) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const enrichedMessage = message.type === 'get-panel-config' ? { ...message, data: { ...message.data, panelId } } : message;
|
|
45
|
+
const clientHandlers = initClientHandlers(callCb, { handlers: matchedHandlers }, callbacksStore);
|
|
46
|
+
clientHandlers(enrichedMessage, dispatch);
|
|
47
|
+
}, []);
|
|
48
|
+
const { changeLangInAllFrames } = useIFrameMessenger({ onMessageReceived });
|
|
49
|
+
const registerHandlers = useCallback((iframeRef, handlers) => {
|
|
50
|
+
handlersMap.current.set(iframeRef, handlers);
|
|
51
|
+
const cleanup = () => {
|
|
52
|
+
handlersMap.current.delete(iframeRef);
|
|
53
|
+
};
|
|
54
|
+
return cleanup;
|
|
55
|
+
}, []);
|
|
56
|
+
const contextValue = useMemo(() => ({ registerHandlers, changeLangInAllFrames }), []);
|
|
57
|
+
return _jsx(IFrameMessengerContext.Provider, { value: contextValue, children: children });
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=useIFrameMessengerContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIFrameMessengerContext.js","sourceRoot":"","sources":["../../../src/hooks/useIFrameMessenger/useIFrameMessengerContext.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAwD,WAAW,EAAE,OAAO,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AAC1G,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAUrD,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAEhE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EAAC,QAAQ,EAAwB,EAAE,EAAE;IACzE,uDAAuD;IACvD,iFAAiF;IACjF,8EAA8E;IAC9E,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,GAAG,EAAwE,CAAC,CAAC;IAE5G,6DAA6D;IAC7D,0FAA0F;IAC1F,MAAM,iBAAiB,GAAG,WAAW,CACjC,CACI,YAA2B,EAC3B,OAAgB,EAChB,OAAsB,EACtB,QAA2B,EAC3B,MAAsB,EACtB,cAA2C,EAC7C,EAAE;QACA,+EAA+E;QAC/E,sEAAsE;QACtE,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QAED,IAAI,eAAmE,CAAC;QACxE,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YAChD,IAAI,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,YAAY,EAAE,CAAC;gBAC9C,eAAe,GAAG,QAAQ,CAAC;gBAC3B,MAAM;YACV,CAAC;QACL,CAAC;QAED,sFAAsF;QACtF,oFAAoF;QACpF,2EAA2E;QAC3E,IAAI,CAAC,eAAe,EAAE,CAAC;YACnB,OAAO;QACX,CAAC;QAED,MAAM,eAAe,GACjB,OAAO,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,EAAC,GAAG,OAAO,EAAE,IAAI,EAAE,EAAC,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,EAAC,EAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAEnG,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,EAAE,EAAC,QAAQ,EAAE,eAAe,EAAC,EAAE,cAAc,CAAC,CAAC;QAC/F,cAAc,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC,EACD,EAAE,CACL,CAAC;IAEF,MAAM,EAAC,qBAAqB,EAAC,GAAG,kBAAkB,CAAC,EAAC,iBAAiB,EAAC,CAAC,CAAC;IAExE,MAAM,gBAAgB,GAAqB,WAAW,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE;QAC3E,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE7C,MAAM,OAAO,GAAG,GAAG,EAAE;YACjB,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,CAAC,CAAC;QAEF,OAAO,OAAO,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAC,gBAAgB,EAAE,qBAAqB,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpF,OAAO,KAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,YAAG,QAAQ,GAAmC,CAAC;AAC9G,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type MutableRefObject, type ReactNode, type RefObject, useCallback, useMemo, useRef} from 'react';\nimport {useIFrameMessenger} from './useIFrameMessenger';\nimport {initClientHandlers} from './messageHandlers';\nimport {\n type Callbacks,\n type CallCbFunction,\n type Message,\n type MessageDispatcher,\n type IUseIFrameMessengerOptions,\n type RegisterHandlers,\n type UnregisterHandlers,\n} from './types';\nimport {IFrameMessengerContext} from './iFrameMessengerContext';\n\n/**\n * Singleton Provider for the IFrameMessenger system.\n * Must be mounted once above all `PanelCustom` instances.\n *\n * Owns a single `window.addEventListener('message')` (via `useIFrameMessenger`)\n * and routes incoming messages to the correct iframe's handlers using `handlersMap`.\n *\n * Each `PanelCustom` registers/deregisters its handlers via `useIFrameMessengerHandlers`.\n */\nexport const IFrameMessengerProvider = ({children}: {children: ReactNode}) => {\n // Maps each iframe's RefObject to its set of handlers.\n // Using RefObject as key (instead of Window) avoids timing issues: contentWindow\n // may not be available yet when the iframe mounts and registers its handlers.\n const handlersMap = useRef(new Map<RefObject<HTMLIFrameElement>, IUseIFrameMessengerOptions['handlers']>());\n\n // Called by useIFrameMessenger for every non-system message.\n // Finds the handlers registered for the sender iframe and dispatches the message to them.\n const onMessageReceived = useCallback(\n (\n senderWindow: Window | null,\n message: Message,\n panelId: string | null,\n dispatch: MessageDispatcher,\n callCb: CallCbFunction,\n callbacksStore: MutableRefObject<Callbacks>,\n ) => {\n // event.source is null when the sender iframe was unmounted before the message\n // was processed — the browser clears the reference on iframe removal.\n if (!senderWindow) {\n return;\n }\n\n let matchedHandlers: IUseIFrameMessengerOptions['handlers'] | undefined;\n for (const [ref, handlers] of handlersMap.current) {\n if (ref.current?.contentWindow === senderWindow) {\n matchedHandlers = handlers;\n break;\n }\n }\n\n // No registered handlers for this sender: either the iframe called unregisterHandlers\n // before its last message was processed (race condition on unmount), or the message\n // originates from an unrelated frame that passed decodeMessage validation.\n if (!matchedHandlers) {\n return;\n }\n\n const enrichedMessage =\n message.type === 'get-panel-config' ? {...message, data: {...message.data, panelId}} : message;\n\n const clientHandlers = initClientHandlers(callCb, {handlers: matchedHandlers}, callbacksStore);\n clientHandlers(enrichedMessage, dispatch);\n },\n [],\n );\n\n const {changeLangInAllFrames} = useIFrameMessenger({onMessageReceived});\n\n const registerHandlers: RegisterHandlers = useCallback((iframeRef, handlers) => {\n handlersMap.current.set(iframeRef, handlers);\n\n const cleanup = () => {\n handlersMap.current.delete(iframeRef);\n };\n\n return cleanup;\n }, []);\n\n const contextValue = useMemo(() => ({registerHandlers, changeLangInAllFrames}), []);\n\n return <IFrameMessengerContext.Provider value={contextValue}>{children}</IFrameMessengerContext.Provider>;\n};\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type RefObject } from 'react';
|
|
2
|
+
import { type IUseIFrameMessengerOptions } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Per-iframe hook for `PanelCustom`. Registers the iframe's handlers into the singleton
|
|
5
|
+
* `IFrameMessengerProvider` and cleans them up on unmount.
|
|
6
|
+
*
|
|
7
|
+
* Returns `changeLangInFrame` which posts `change-language` directly to this specific iframe's
|
|
8
|
+
* `contentWindow` — intentionally NOT using the shared registry to avoid broadcasting the language
|
|
9
|
+
* change to all other open iframes (which would cause unintended refreshes).
|
|
10
|
+
*/
|
|
11
|
+
export declare const useIFrameMessengerHandlers: (iframeRef: RefObject<HTMLIFrameElement>, handlers: IUseIFrameMessengerOptions["handlers"]) => {
|
|
12
|
+
changeLangInFrame: (language: string) => void;
|
|
13
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06
|
|
2
|
+
// This file is released under LGPL V3
|
|
3
|
+
// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
4
|
+
import { useCallback, useContext, useEffect } from 'react';
|
|
5
|
+
import { IFrameMessengerContext } from './iFrameMessengerContext';
|
|
6
|
+
import { encodeMessage } from './messageHandlers';
|
|
7
|
+
/**
|
|
8
|
+
* Per-iframe hook for `PanelCustom`. Registers the iframe's handlers into the singleton
|
|
9
|
+
* `IFrameMessengerProvider` and cleans them up on unmount.
|
|
10
|
+
*
|
|
11
|
+
* Returns `changeLangInFrame` which posts `change-language` directly to this specific iframe's
|
|
12
|
+
* `contentWindow` — intentionally NOT using the shared registry to avoid broadcasting the language
|
|
13
|
+
* change to all other open iframes (which would cause unintended refreshes).
|
|
14
|
+
*/
|
|
15
|
+
export const useIFrameMessengerHandlers = (iframeRef, handlers) => {
|
|
16
|
+
const { registerHandlers } = useContext(IFrameMessengerContext);
|
|
17
|
+
// Register on mount, deregister on unmount via the returned cleanup function.
|
|
18
|
+
useEffect(() => registerHandlers(iframeRef, handlers), []);
|
|
19
|
+
// Post directly to contentWindow instead of going through the registry,
|
|
20
|
+
// which would broadcast to all registered iframes.
|
|
21
|
+
const changeLangInFrame = useCallback((language) => {
|
|
22
|
+
if (iframeRef.current?.contentWindow) {
|
|
23
|
+
const message = { type: 'change-language', language };
|
|
24
|
+
iframeRef.current.contentWindow.postMessage(encodeMessage(message), '*');
|
|
25
|
+
}
|
|
26
|
+
}, [iframeRef]);
|
|
27
|
+
return { changeLangInFrame };
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=useIFrameMessengerHandlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useIFrameMessengerHandlers.js","sourceRoot":"","sources":["../../../src/hooks/useIFrameMessenger/useIFrameMessengerHandlers.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAiB,MAAM,OAAO,CAAC;AACzE,OAAO,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAC,aAAa,EAAC,MAAM,mBAAmB,CAAC;AAGhD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACtC,SAAuC,EACvC,QAAgD,EAClD,EAAE;IACA,MAAM,EAAC,gBAAgB,EAAC,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IAE9D,8EAA8E;IAC9E,SAAS,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IAE3D,wEAAwE;IACxE,mDAAmD;IACnD,MAAM,iBAAiB,GAAG,WAAW,CACjC,CAAC,QAAgB,EAAE,EAAE;QACjB,IAAI,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC;YACnC,MAAM,OAAO,GAA0B,EAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAC,CAAC;YAC3E,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC,EACD,CAAC,SAAS,CAAC,CACd,CAAC;IAEF,OAAO,EAAC,iBAAiB,EAAC,CAAC;AAC/B,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {useCallback, useContext, useEffect, type RefObject} from 'react';\nimport {IFrameMessengerContext} from './iFrameMessengerContext';\nimport {encodeMessage} from './messageHandlers';\nimport {type ChangeLanguageMessage, type IUseIFrameMessengerOptions} from './types';\n\n/**\n * Per-iframe hook for `PanelCustom`. Registers the iframe's handlers into the singleton\n * `IFrameMessengerProvider` and cleans them up on unmount.\n *\n * Returns `changeLangInFrame` which posts `change-language` directly to this specific iframe's\n * `contentWindow` — intentionally NOT using the shared registry to avoid broadcasting the language\n * change to all other open iframes (which would cause unintended refreshes).\n */\nexport const useIFrameMessengerHandlers = (\n iframeRef: RefObject<HTMLIFrameElement>,\n handlers: IUseIFrameMessengerOptions['handlers'],\n) => {\n const {registerHandlers} = useContext(IFrameMessengerContext);\n\n // Register on mount, deregister on unmount via the returned cleanup function.\n useEffect(() => registerHandlers(iframeRef, handlers), []);\n\n // Post directly to contentWindow instead of going through the registry,\n // which would broadcast to all registered iframes.\n const changeLangInFrame = useCallback(\n (language: string) => {\n if (iframeRef.current?.contentWindow) {\n const message: ChangeLanguageMessage = {type: 'change-language', language};\n iframeRef.current.contentWindow.postMessage(encodeMessage(message), '*');\n }\n },\n [iframeRef],\n );\n\n return {changeLangInFrame};\n};\n"]}
|
|
@@ -8,6 +8,9 @@ import { IframeMessengerClientContext } from './iFrameMessengerClientContext';
|
|
|
8
8
|
export const IFrameMessengerClient = ({ children, id }) => {
|
|
9
9
|
const iFrameMessenger = useIFrameMessenger({ id });
|
|
10
10
|
useEffect(() => () => iFrameMessenger.unregister(), []);
|
|
11
|
+
if (!iFrameMessenger.isRegistered) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
11
14
|
return (_jsx(IframeMessengerClientContext.Provider, { value: iFrameMessenger, children: children }));
|
|
12
15
|
};
|
|
13
16
|
//# sourceMappingURL=IFrameMessengerClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IFrameMessengerClient.js","sourceRoot":"","sources":["../../../src/hooks/useIFrameMessengerClient/IFrameMessengerClient.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAyC,SAAS,EAAC,MAAM,OAAO,CAAC;AACxE,OAAO,EAAC,kBAAkB,EAAC,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAC,4BAA4B,EAAC,MAAM,gCAAgC,CAAC;AAO5E,MAAM,CAAC,MAAM,qBAAqB,GAAkD,CAAC,EAAC,QAAQ,EAAE,EAAE,EAAC,EAAE,EAAE;IACnG,MAAM,eAAe,GAAG,kBAAkB,CAAC,EAAC,EAAE,EAAC,CAAC,CAAC;IAEjD,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAExD,OAAO,CACH,KAAC,4BAA4B,CAAC,QAAQ,IAAC,KAAK,EAAE,eAAe,YACxD,QAAQ,GAC2B,CAC3C,CAAC;AACN,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type FunctionComponent, type ReactNode, useEffect} from 'react';\nimport {useIFrameMessenger} from '../useIFrameMessenger/useIFrameMessenger';\nimport {IframeMessengerClientContext} from './iFrameMessengerClientContext';\n\ninterface IFrameMessengerClientProps {\n children: ReactNode;\n id?: string;\n}\n\nexport const IFrameMessengerClient: FunctionComponent<IFrameMessengerClientProps> = ({children, id}) => {\n const iFrameMessenger = useIFrameMessenger({id});\n\n useEffect(() => () => iFrameMessenger.unregister(), []);\n\n return (\n <IframeMessengerClientContext.Provider value={iFrameMessenger}>\n {children}\n </IframeMessengerClientContext.Provider>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"IFrameMessengerClient.js","sourceRoot":"","sources":["../../../src/hooks/useIFrameMessengerClient/IFrameMessengerClient.tsx"],"names":[],"mappings":";AAAA,oFAAoF;AACpF,sCAAsC;AACtC,sEAAsE;AACtE,OAAO,EAAyC,SAAS,EAAC,MAAM,OAAO,CAAC;AACxE,OAAO,EAAC,kBAAkB,EAAC,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAC,4BAA4B,EAAC,MAAM,gCAAgC,CAAC;AAO5E,MAAM,CAAC,MAAM,qBAAqB,GAAkD,CAAC,EAAC,QAAQ,EAAE,EAAE,EAAC,EAAE,EAAE;IACnG,MAAM,eAAe,GAAG,kBAAkB,CAAC,EAAC,EAAE,EAAC,CAAC,CAAC;IAEjD,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAExD,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CACH,KAAC,4BAA4B,CAAC,QAAQ,IAAC,KAAK,EAAE,eAAe,YACxD,QAAQ,GAC2B,CAC3C,CAAC;AACN,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type FunctionComponent, type ReactNode, useEffect} from 'react';\nimport {useIFrameMessenger} from '../useIFrameMessenger/useIFrameMessenger';\nimport {IframeMessengerClientContext} from './iFrameMessengerClientContext';\n\ninterface IFrameMessengerClientProps {\n children: ReactNode;\n id?: string;\n}\n\nexport const IFrameMessengerClient: FunctionComponent<IFrameMessengerClientProps> = ({children, id}) => {\n const iFrameMessenger = useIFrameMessenger({id});\n\n useEffect(() => () => iFrameMessenger.unregister(), []);\n\n if (!iFrameMessenger.isRegistered) {\n return null;\n }\n\n return (\n <IframeMessengerClientContext.Provider value={iFrameMessenger}>\n {children}\n </IframeMessengerClientContext.Provider>\n );\n};\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare const IframeMessengerClientContext: import("react").Context<{
|
|
2
|
+
isRegistered: boolean;
|
|
2
3
|
unregister: () => void;
|
|
3
4
|
changeLangInAllFrames: (newLanguage: string) => void;
|
|
4
5
|
addPanelMessageHandler: import("../useIFrameMessenger/types").AddMessageToPanelMessageHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSharedTranslation.js","sourceRoot":"","sources":["../../../../src/hooks/useSharedTranslation/__mocks__/useSharedTranslation.ts"],"names":[],"mappings":"AAMA,MAAM,QAAQ,GAAkB;IAC5B,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE;QACL,WAAW,EAAE,CAAC,IAAI,CAAC;KACtB;IACD,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;CAC5B,CAAC;AAEF,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAEzG,eAAe,GAAG,EAAE;IAChB,MAAM,IAAI,GAAG,EAAC,CAAC,EAAE,KAAuB,EAAE,IAAI,EAAE,QAAgB,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;IAE/E,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type Mockify} from '
|
|
1
|
+
{"version":3,"file":"useSharedTranslation.js","sourceRoot":"","sources":["../../../../src/hooks/useSharedTranslation/__mocks__/useSharedTranslation.ts"],"names":[],"mappings":"AAMA,MAAM,QAAQ,GAAkB;IAC5B,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE;QACL,WAAW,EAAE,CAAC,IAAI,CAAC;KACtB;IACD,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;CAC5B,CAAC;AAEF,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAEzG,eAAe,GAAG,EAAE;IAChB,MAAM,IAAI,GAAG,EAAC,CAAC,EAAE,KAAuB,EAAE,IAAI,EAAE,QAAgB,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;IAE/E,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC","sourcesContent":["// Copyright LEAV Solutions 2017 until 2023/11/05, Copyright Aristid from 2023/11/06\n// This file is released under LGPL V3\n// License text available at https://www.gnu.org/licenses/lgpl-3.0.txt\nimport {type Mockify} from '_ui/__mocks__/utils';\nimport {type TFunction, type i18n} from 'i18next';\n\nconst mockI18n: Mockify<i18n> = {\n language: 'fr',\n options: {\n fallbackLng: ['en'],\n },\n changeLanguage: jest.fn(),\n};\n\nconst mockT = (arg, variables) => `${[arg, ...(!!variables ? Object.values(variables) : [])].join('|')}`;\n\nexport default () => {\n const mock = {t: mockT as TFunction<any>, i18n: mockI18n as i18n, ready: true};\n\n return mock;\n};\n"]}
|
|
@@ -756,6 +756,8 @@
|
|
|
756
756
|
"toggle_selection": {
|
|
757
757
|
"select_page_one": "Select visible item ({{count, number}})",
|
|
758
758
|
"select_page_other": "Select visible items ({{count, number}})",
|
|
759
|
+
"deselect_page_one": "Deselect visible item ({{count, number}})",
|
|
760
|
+
"deselect_page_other": "Deselect visible items ({{count, number}})",
|
|
759
761
|
"select_all": "Select all items ({{count, number}})",
|
|
760
762
|
"deselect_all": "Deselect all items"
|
|
761
763
|
},
|
|
@@ -754,8 +754,10 @@
|
|
|
754
754
|
"add-link": "Ajouter",
|
|
755
755
|
"replace-link": "Remplacer",
|
|
756
756
|
"toggle_selection": {
|
|
757
|
-
"select_page_one": "Sélectionner l’é
|
|
757
|
+
"select_page_one": "Sélectionner l’élément visible ({{count, number}})",
|
|
758
758
|
"select_page_other": "Sélectionner les éléments visibles ({{count, number}})",
|
|
759
|
+
"deselect_page_one": "Désélectionner l’élément visible ({{count, number}})",
|
|
760
|
+
"deselect_page_other": "Désélectionner les éléments visibles ({{count, number}})",
|
|
759
761
|
"select_all": "Tout sélectionner ({{count, number}})",
|
|
760
762
|
"deselect_all": "Tout désélectionner"
|
|
761
763
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leav/ui",
|
|
3
|
-
"version": "1.12.0-
|
|
3
|
+
"version": "1.12.0-e8c84be4",
|
|
4
4
|
"description": "Shared React components and hooks",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"prepublishOnly": "yarn build",
|
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
"@babel/preset-react": "7.28.5",
|
|
30
30
|
"@graphql-codegen/add": "5.0.3",
|
|
31
31
|
"@graphql-codegen/cli": "6.2.1",
|
|
32
|
-
"@graphql-codegen/typescript": "5.0.
|
|
32
|
+
"@graphql-codegen/typescript": "5.0.10",
|
|
33
33
|
"@graphql-codegen/typescript-operations": "5.0.9",
|
|
34
|
-
"@graphql-codegen/typescript-react-apollo": "4.4.
|
|
34
|
+
"@graphql-codegen/typescript-react-apollo": "4.4.2",
|
|
35
35
|
"@testing-library/jest-dom": "5.17.0",
|
|
36
36
|
"@testing-library/react": "14.3.1",
|
|
37
37
|
"@testing-library/react-hooks": "8.0.1",
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
"@types/lodash.isequal": "^4",
|
|
43
43
|
"@types/react": "18.2.14",
|
|
44
44
|
"@types/react-dom": "18.2.6",
|
|
45
|
-
"aristid-ds": "15.
|
|
45
|
+
"aristid-ds": "15.3.1-886678",
|
|
46
46
|
"babel-jest": "29.7.0",
|
|
47
|
-
"graphql": "16.
|
|
47
|
+
"graphql": "16.13.2",
|
|
48
48
|
"i18next": "22.5.1",
|
|
49
49
|
"jest": "29.7.0",
|
|
50
50
|
"jest-environment-jsdom": "29.7.0",
|
|
@@ -53,14 +53,14 @@
|
|
|
53
53
|
"react-dom": "18.2.0",
|
|
54
54
|
"react-i18next": "12",
|
|
55
55
|
"react-router-dom": "6.22.0",
|
|
56
|
-
"ts-jest": "29.4.
|
|
56
|
+
"ts-jest": "29.4.9",
|
|
57
57
|
"tsc-alias": "1.8.16",
|
|
58
58
|
"typescript": "5.9.3",
|
|
59
|
-
"vite": "7.3.
|
|
59
|
+
"vite": "7.3.2"
|
|
60
60
|
},
|
|
61
61
|
"peerDependencies": {
|
|
62
62
|
"@apollo/client": ">=3.8.1",
|
|
63
|
-
"aristid-ds": "15.
|
|
63
|
+
"aristid-ds": "15.3.1-637817c",
|
|
64
64
|
"i18next": ">=22.5.1",
|
|
65
65
|
"react": "^18.2.0",
|
|
66
66
|
"react-dom": "^18.2.0",
|