@helsenorge/designsystem-react 13.6.0 → 13.7.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/lib/CHANGELOG.md +12 -0
- package/lib/useElementList.js +15 -2
- package/lib/useElementList.js.map +1 -1
- package/package.json +1 -1
package/lib/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [13.7.0](https://github.com/helsenorge/designsystem/branchCompare?baseVersion=GTv13.6.0&targetVersion=GTv13.7.0) (2026-02-16)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **lightbox:** lagt til språkhåndtering ([db207d6](https://github.com/helsenorge/designsystem/commit/db207d67b23816235e588f6bf82436799e6a39f4)), closes [#365604](https://github.com/helsenorge/designsystem/issues/365604)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **uselementlist:** ekstra sjekk for å hindre mange rerenders av komponent ([3cbfcca](https://github.com/helsenorge/designsystem/commit/3cbfcca5569bf4cd308d4dd021a5e1726f21f58d)), closes [#367282](https://github.com/helsenorge/designsystem/issues/367282)
|
|
12
|
+
|
|
1
13
|
## [13.6.0](https://github.com/helsenorge/designsystem/branchCompare?baseVersion=GTv13.5.0&targetVersion=GTv13.6.0) (2026-02-11)
|
|
2
14
|
|
|
3
15
|
|
package/lib/useElementList.js
CHANGED
|
@@ -1,10 +1,23 @@
|
|
|
1
|
-
import { useEffect, useState } from "react";
|
|
1
|
+
import { useEffect, useRef, useState } from "react";
|
|
2
2
|
const useElementList = (ref, selectors, options) => {
|
|
3
3
|
const [elementList, setElementList] = useState();
|
|
4
|
+
const previousElementsRef = useRef([]);
|
|
4
5
|
useEffect(() => {
|
|
5
6
|
const handleMutationChange = () => {
|
|
6
7
|
const elements = ref.current?.querySelectorAll(selectors);
|
|
7
|
-
|
|
8
|
+
if (!elements) {
|
|
9
|
+
if (previousElementsRef.current.length > 0) {
|
|
10
|
+
previousElementsRef.current = [];
|
|
11
|
+
setElementList(void 0);
|
|
12
|
+
}
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const elementsArray = Array.from(elements);
|
|
16
|
+
const previousElements = previousElementsRef.current;
|
|
17
|
+
if (elementsArray.length !== previousElements.length || elementsArray.some((el, i) => el !== previousElements[i])) {
|
|
18
|
+
previousElementsRef.current = elementsArray;
|
|
19
|
+
setElementList(elements);
|
|
20
|
+
}
|
|
8
21
|
};
|
|
9
22
|
const mutationObserver = new MutationObserver(handleMutationChange);
|
|
10
23
|
if (ref?.current) mutationObserver.observe(ref.current, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useElementList.js","names":[],"sources":["../src/hooks/useElementList.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\n\n/**\n * Hent ut en liste med HTML-elementer. Bruker MutationObserver-APIet.\n * @param ref Element som skal observeres\n * @param selectors Selektorer som sendes til querySelectorAll for å hente ut liste med elementer\n * @param options MutationObserver-options. Default er å lytte på endringer på child-elementer og deres attributter.\n * @returns Liste med HTML-elementer\n */\nexport const useElementList = (\n ref: React.RefObject<HTMLElement>,\n selectors: string,\n options?: MutationObserverInit\n): NodeListOf<HTMLElement> | undefined => {\n const [elementList, setElementList] = useState<NodeListOf<HTMLElement>>();\n\n useEffect(() => {\n const handleMutationChange = (): void => {\n const elements = ref.current?.querySelectorAll<HTMLElement>(selectors);\n setElementList(elements);\n };\n\n const mutationObserver = new MutationObserver(handleMutationChange);\n if (ref?.current) {\n mutationObserver.observe(ref.current, { subtree: true, childList: true, attributes: true, ...options });\n }\n\n handleMutationChange();\n\n return (): void => {\n mutationObserver.disconnect();\n };\n }, [ref, selectors]);\n\n return elementList;\n};\n"],"mappings":";AASA,MAAa,kBACX,KACA,WACA,YACwC;CACxC,MAAM,CAAC,aAAa,kBAAkB,UAAmC;
|
|
1
|
+
{"version":3,"file":"useElementList.js","names":[],"sources":["../src/hooks/useElementList.ts"],"sourcesContent":["import { useState, useEffect, useRef } from 'react';\n\n/**\n * Hent ut en liste med HTML-elementer. Bruker MutationObserver-APIet.\n * @param ref Element som skal observeres\n * @param selectors Selektorer som sendes til querySelectorAll for å hente ut liste med elementer\n * @param options MutationObserver-options. Default er å lytte på endringer på child-elementer og deres attributter.\n * @returns Liste med HTML-elementer\n */\nexport const useElementList = (\n ref: React.RefObject<HTMLElement>,\n selectors: string,\n options?: MutationObserverInit\n): NodeListOf<HTMLElement> | undefined => {\n const [elementList, setElementList] = useState<NodeListOf<HTMLElement>>();\n const previousElementsRef = useRef<HTMLElement[]>([]);\n\n useEffect(() => {\n const handleMutationChange = (): void => {\n const elements = ref.current?.querySelectorAll<HTMLElement>(selectors);\n if (!elements) {\n if (previousElementsRef.current.length > 0) {\n previousElementsRef.current = [];\n setElementList(undefined);\n }\n return;\n }\n\n // We check if an element has been added/removed to avoid extra state updates on other changes.\n const elementsArray = Array.from(elements);\n const previousElements = previousElementsRef.current;\n\n const hasChanged = elementsArray.length !== previousElements.length || elementsArray.some((el, i) => el !== previousElements[i]);\n\n if (hasChanged) {\n previousElementsRef.current = elementsArray;\n setElementList(elements);\n }\n };\n\n const mutationObserver = new MutationObserver(handleMutationChange);\n if (ref?.current) {\n mutationObserver.observe(ref.current, { subtree: true, childList: true, attributes: true, ...options });\n }\n\n handleMutationChange();\n\n return (): void => {\n mutationObserver.disconnect();\n };\n }, [ref, selectors]);\n\n return elementList;\n};\n"],"mappings":";AASA,MAAa,kBACX,KACA,WACA,YACwC;CACxC,MAAM,CAAC,aAAa,kBAAkB,UAAmC;CACzE,MAAM,sBAAsB,OAAsB,EAAE,CAAC;AAErD,iBAAgB;EACd,MAAM,6BAAmC;GACvC,MAAM,WAAW,IAAI,SAAS,iBAA8B,UAAU;AACtE,OAAI,CAAC,UAAU;AACb,QAAI,oBAAoB,QAAQ,SAAS,GAAG;AAC1C,yBAAoB,UAAU,EAAE;AAChC,oBAAe,KAAA,EAAU;;AAE3B;;GAIF,MAAM,gBAAgB,MAAM,KAAK,SAAS;GAC1C,MAAM,mBAAmB,oBAAoB;AAI7C,OAFmB,cAAc,WAAW,iBAAiB,UAAU,cAAc,MAAM,IAAI,MAAM,OAAO,iBAAiB,GAAG,EAEhH;AACd,wBAAoB,UAAU;AAC9B,mBAAe,SAAS;;;EAI5B,MAAM,mBAAmB,IAAI,iBAAiB,qBAAqB;AACnE,MAAI,KAAK,QACP,kBAAiB,QAAQ,IAAI,SAAS;GAAE,SAAS;GAAM,WAAW;GAAM,YAAY;GAAM,GAAG;GAAS,CAAC;AAGzG,wBAAsB;AAEtB,eAAmB;AACjB,oBAAiB,YAAY;;IAE9B,CAAC,KAAK,UAAU,CAAC;AAEpB,QAAO"}
|
package/package.json
CHANGED