From 8b46409e4e907f12d503070e7055536d2348fd08 Mon Sep 17 00:00:00 2001 From: Sean Erik Scully Date: Wed, 27 Nov 2024 10:59:45 +0100 Subject: [PATCH] more work --- packages/frontend/package.json | 2 +- packages/frontend/src/App.tsx | 2 +- packages/frontend/src/api/useDialogs.tsx | 2 +- .../src/components/Header/AltinnLogo.tsx | 40 ---------- .../frontend/src/components/Header/Header.tsx | 73 ------------------- .../src/components/Header/SearchBar.tsx | 16 +--- .../components/Header/altinnLogo.module.css | 18 ----- .../src/components/Header/header.module.css | 49 ------------- .../frontend/src/components/Header/index.ts | 2 +- .../PageLayout/Background/Background.tsx | 19 +++++ .../background.module.css} | 0 .../components/PageLayout/Background/index.ts | 1 + ...eLayoutArbeidsFlate.tsx => PageLayout.tsx} | 57 +++++---------- .../PageLayout/Search/useSearchString.tsx | 38 ++++++++++ .../src/components/PageLayout/index.ts | 2 +- .../SavedSearchButton/SaveSearchButton.tsx | 7 +- packages/frontend/src/pages/Inbox/Inbox.tsx | 15 ++-- pnpm-lock.yaml | 8 +- 18 files changed, 99 insertions(+), 252 deletions(-) delete mode 100644 packages/frontend/src/components/Header/AltinnLogo.tsx delete mode 100644 packages/frontend/src/components/Header/Header.tsx delete mode 100644 packages/frontend/src/components/Header/altinnLogo.module.css delete mode 100644 packages/frontend/src/components/Header/header.module.css create mode 100644 packages/frontend/src/components/PageLayout/Background/Background.tsx rename packages/frontend/src/components/PageLayout/{pageLayout.module.css => Background/background.module.css} (100%) create mode 100644 packages/frontend/src/components/PageLayout/Background/index.ts rename packages/frontend/src/components/PageLayout/{PageLayoutArbeidsFlate.tsx => PageLayout.tsx} (69%) create mode 100644 packages/frontend/src/components/PageLayout/Search/useSearchString.tsx diff --git a/packages/frontend/package.json b/packages/frontend/package.json index 6c376f60..f1d252c8 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -21,7 +21,7 @@ "i18n:sort": "tsx ./src/i18n/check.ts --sort" }, "dependencies": { - "@altinn/altinn-components": "^0.6.11", + "@altinn/altinn-components": "^0.6.12", "@digdir/designsystemet-css": "0.11.0-next.10", "@digdir/designsystemet-react": "1.0.0-next.15", "@digdir/designsystemet-theme": "1.0.0-next.14", diff --git a/packages/frontend/src/App.tsx b/packages/frontend/src/App.tsx index 39221dfd..77fe6ae6 100644 --- a/packages/frontend/src/App.tsx +++ b/packages/frontend/src/App.tsx @@ -1,5 +1,5 @@ import { Navigate, Route, Routes } from 'react-router-dom'; -import { ProtectedPageLayout } from './components/PageLayout/PageLayoutArbeidsFlate'; +import { ProtectedPageLayout } from './components/PageLayout/PageLayout.tsx'; import { Inbox } from './pages/Inbox'; import { Routes as AppRoutes } from './pages/Inbox/Inbox'; import { InboxItemPage } from './pages/InboxItemPage'; diff --git a/packages/frontend/src/api/useDialogs.tsx b/packages/frontend/src/api/useDialogs.tsx index 69f7fb62..a6334b2c 100644 --- a/packages/frontend/src/api/useDialogs.tsx +++ b/packages/frontend/src/api/useDialogs.tsx @@ -100,7 +100,7 @@ export const useSearchDialogs = ({ parties, searchString, org }: searchDialogsPr const { organizations } = useOrganizations(); const partyURIs = parties.map((party) => party.party); const debouncedSearchString = useDebounce(searchString, 300)[0]; - const enabled = !!debouncedSearchString && debouncedSearchString.length > 2; + const enabled = !!debouncedSearchString && debouncedSearchString.length > 2 && parties.length > 0; const { data, isSuccess, isLoading, isFetching } = useQuery({ queryKey: [QUERY_KEYS.SEARCH_DIALOGS, partyURIs, debouncedSearchString, org], queryFn: () => searchDialogs(partyURIs, debouncedSearchString, org), diff --git a/packages/frontend/src/components/Header/AltinnLogo.tsx b/packages/frontend/src/components/Header/AltinnLogo.tsx deleted file mode 100644 index 3d64f25f..00000000 --- a/packages/frontend/src/components/Header/AltinnLogo.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { useTranslation } from 'react-i18next'; -import { Link } from 'react-router-dom'; -import styles from './altinnLogo.module.css'; - -export function AltinnLogoSvg({ small }: { small?: boolean }) { - return ( - - Altinnsymbol i logo - - - ); -} - -interface AltinnLogoProps { - className?: string; -} - -export const AltinnLogo = ({ className }: AltinnLogoProps) => { - const { t } = useTranslation(); - return ( -
- -
- -
- Altinn - -
- ); -}; diff --git a/packages/frontend/src/components/Header/Header.tsx b/packages/frontend/src/components/Header/Header.tsx deleted file mode 100644 index c1501b6e..00000000 --- a/packages/frontend/src/components/Header/Header.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import type { AvatarType } from '@altinn/altinn-components'; -import type React from 'react'; -import { useEffect } from 'react'; -import { useState } from 'react'; -import { useSearchParams } from 'react-router-dom'; -import { useWindowSize } from '../../../utils/useWindowSize.tsx'; -import { getSearchStringFromQueryParams } from '../../pages/Inbox/queryParams'; -import { GlobalMenuBar } from '../GlobalMenuBar/GlobalMenuBar.tsx'; -import { AltinnLogo } from './AltinnLogo'; -import { SearchBar } from './SearchBar'; -import styles from './header.module.css'; - -type HeaderProps = { - name: string; - profile: AvatarType; - notificationCount?: number; -}; - -export const useSearchString = () => { - const [searchParams, updateSearchParams] = useSearchParams(); - const searchFromQueryParam = getSearchStringFromQueryParams(searchParams); - const [searchString, setSearchString] = useState(searchFromQueryParam); - const handleSearchString = (value: string) => { - const newSearchParams = new URLSearchParams(searchParams); - if (value) { - newSearchParams.set('search', value); - } else { - newSearchParams.delete('search'); - } - updateSearchParams(newSearchParams); - setSearchString(value); - }; - - useEffect(() => { - if (searchFromQueryParam !== searchString) { - setSearchString(searchFromQueryParam || ''); - } - }, [searchString, searchFromQueryParam]); - - return { searchString, setSearchString: handleSearchString }; -}; - -/** - * Renders a header with Altinn logo, search bar, and a menu bar. The menu includes user details, - * company association, and an optional notification count. The search bar is hidden on mobile. - * - * @component - * @param {string} props.name - Name of selected party. - * @param {AvatarProfile} [props.profile] - Profile. - * @param {number} [props.notificationCount] - Optional count of notifications to display. - * @returns {JSX.Element} The Header component. - * - * @example - *
- */ - -export const Header: React.FC = ({ name, profile, notificationCount }) => { - const { isTabletOrSmaller } = useWindowSize(); - return ( -
- - {isTabletOrSmaller && } -
- ); -}; diff --git a/packages/frontend/src/components/Header/SearchBar.tsx b/packages/frontend/src/components/Header/SearchBar.tsx index 0cba84a5..458ea17c 100644 --- a/packages/frontend/src/components/Header/SearchBar.tsx +++ b/packages/frontend/src/components/Header/SearchBar.tsx @@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next'; import { useSearchParams } from 'react-router-dom'; import { useWindowSize } from '../../../utils/useWindowSize.tsx'; import { Backdrop } from '../Backdrop'; -import { useSearchString } from '../Header'; +import { useSearchString } from '../PageLayout/Search/useSearchString.tsx'; import { SearchDropdown } from './SearchDropdown'; import styles from './search.module.css'; @@ -13,8 +13,8 @@ export const SearchBar: React.FC = () => { const [showDropdownMenu, setShowDropdownMenu] = useState(false); const { t } = useTranslation(); const [searchParams, setSearchParams] = useSearchParams(); - const { searchString, setSearchString } = useSearchString(); - const [searchValue, setSearchValue] = useState(searchString); + const { enteredSearchValue, onSearch } = useSearchString(); + const [searchValue, setSearchValue] = useState(enteredSearchValue); const { isTabletOrSmaller } = useWindowSize(); const handleClose = () => { @@ -28,7 +28,7 @@ export const SearchBar: React.FC = () => { setSearchParams(newSearchParams, { replace: true }); } setSearchValue(''); - setSearchString(''); + onSearch(''); }; const onClearAndCloseDropdown = () => { @@ -36,14 +36,6 @@ export const SearchBar: React.FC = () => { setShowDropdownMenu(false); }; - const onSearch = (value: string) => { - const newSearchParams = new URLSearchParams(searchParams); - setSearchString(value); - setShowDropdownMenu(false); - newSearchParams.set('search', value); - setSearchParams(newSearchParams, { replace: true }); - }; - useEffect(() => { const searchBarParam = new URLSearchParams(searchParams); if (searchBarParam.get('search')) { diff --git a/packages/frontend/src/components/Header/altinnLogo.module.css b/packages/frontend/src/components/Header/altinnLogo.module.css deleted file mode 100644 index 0ab7fcd4..00000000 --- a/packages/frontend/src/components/Header/altinnLogo.module.css +++ /dev/null @@ -1,18 +0,0 @@ -.altinnLogo { - width: 32px; - height: 32px; -} - -.altinnLogoSmall { - width: 16px; - height: 16px; -} - -.logoWrapper { - display: inline-flex; - align-items: center; - justify-content: center; - height: 2.75rem; - width: 2.75rem; - margin-top: 1px; -} diff --git a/packages/frontend/src/components/Header/header.module.css b/packages/frontend/src/components/Header/header.module.css deleted file mode 100644 index 8f06a200..00000000 --- a/packages/frontend/src/components/Header/header.module.css +++ /dev/null @@ -1,49 +0,0 @@ -.navigation { - display: flex; - justify-content: space-between; - align-items: center; - color: var(--Company-Primary, #111d46); - padding: 16px; - max-height: 68px; -} - -.navigationTablet { - display: flex; - flex-direction: column; - color: var(--Company-Primary, #111d46); - padding: 16px; - max-height: 68px; -} - -.adjustPadding { - padding-left: 2rem; -} - -.logo a { - color: #000; - text-align: center; - font-size: 1.5rem; - font-style: normal; - font-weight: 500; - line-height: 1.33; - text-decoration: none; - display: flex; - align-items: center; - min-width: 7.75rem; -} - -.logo span { - margin-left: 4px; - font-weight: 500; - line-height: 2; -} - -.searchBar { - margin: 0 42px; - - input { - border-radius: 6px; - border: 2px solid #000; - background-color: inherit; - } -} diff --git a/packages/frontend/src/components/Header/index.ts b/packages/frontend/src/components/Header/index.ts index e5868f33..958b5f2a 100644 --- a/packages/frontend/src/components/Header/index.ts +++ b/packages/frontend/src/components/Header/index.ts @@ -1 +1 @@ -export * from './Header.tsx'; +export * from './SearchBar.tsx'; diff --git a/packages/frontend/src/components/PageLayout/Background/Background.tsx b/packages/frontend/src/components/PageLayout/Background/Background.tsx new file mode 100644 index 00000000..cf60bf1e --- /dev/null +++ b/packages/frontend/src/components/PageLayout/Background/Background.tsx @@ -0,0 +1,19 @@ +import cx from 'classnames'; +import { useSelectedDialogs } from '../SelectedDialogs.tsx'; +import styles from './background.module.css'; + +/* Needed for applying theme to components, like e.g. ProfileButton */ +export const Background: React.FC<{ children: React.ReactNode; isCompany: boolean }> = ({ children, isCompany }) => { + const { inSelectionMode } = useSelectedDialogs(); + return ( +
+ {children} +
+ ); +}; diff --git a/packages/frontend/src/components/PageLayout/pageLayout.module.css b/packages/frontend/src/components/PageLayout/Background/background.module.css similarity index 100% rename from packages/frontend/src/components/PageLayout/pageLayout.module.css rename to packages/frontend/src/components/PageLayout/Background/background.module.css diff --git a/packages/frontend/src/components/PageLayout/Background/index.ts b/packages/frontend/src/components/PageLayout/Background/index.ts new file mode 100644 index 00000000..2d7b3779 --- /dev/null +++ b/packages/frontend/src/components/PageLayout/Background/index.ts @@ -0,0 +1 @@ +export * from './Background.tsx'; diff --git a/packages/frontend/src/components/PageLayout/PageLayoutArbeidsFlate.tsx b/packages/frontend/src/components/PageLayout/PageLayout.tsx similarity index 69% rename from packages/frontend/src/components/PageLayout/PageLayoutArbeidsFlate.tsx rename to packages/frontend/src/components/PageLayout/PageLayout.tsx index 15848765..5567ee12 100644 --- a/packages/frontend/src/components/PageLayout/PageLayoutArbeidsFlate.tsx +++ b/packages/frontend/src/components/PageLayout/PageLayout.tsx @@ -1,58 +1,33 @@ import { type FooterProps, type HeaderProps, Layout, type LayoutProps, RootProvider } from '@altinn/altinn-components'; import { useQueryClient } from '@tanstack/react-query'; -import cx from 'classnames'; -import { type ChangeEvent, useEffect, useState } from 'react'; -import { Outlet, useLocation, useSearchParams } from 'react-router-dom'; +import { type ChangeEvent, useEffect } from 'react'; +import { Link, Outlet, useSearchParams } from 'react-router-dom'; import { useDialogs } from '../../api/useDialogs.tsx'; import { useParties } from '../../api/useParties.ts'; import { getSearchStringFromQueryParams } from '../../pages/Inbox/queryParams.ts'; import { useSavedSearches } from '../../pages/SavedSearches/useSavedSearches.ts'; import { useProfile } from '../../profile'; import { BetaBanner } from '../BetaBanner/BetaBanner'; -import { useSearchString } from '../Header'; import { useAuth } from '../Login/AuthContext.tsx'; import { useAccounts } from './Accounts/useAccounts.tsx'; -import { useFooter } from './Footer/useFooter.tsx'; -import { useSelectedDialogs } from './SelectedDialogs'; -import { useSidebarMenu } from './Sidebar/useSidebarMenu.tsx'; -import styles from './pageLayout.module.css'; - -export const useUpdateOnLocationChange = (fn: () => void) => { - const location = useLocation(); - // biome-ignore lint/correctness/useExhaustiveDependencies: Full control of what triggers this code is needed - useEffect(() => { - fn(); - }, [location, fn]); -}; - -const Background: React.FC<{ children: React.ReactNode; isCompany: boolean }> = ({ children, isCompany }) => { - const { inSelectionMode } = useSelectedDialogs(); - return ( -
- {children} -
- ); -}; +import { Background } from './Background'; +import { useFooter } from './Footer'; +import { useSearchString } from './Search/useSearchString.tsx'; +import { useSidebarMenu } from './Sidebar'; export const ProtectedPageLayout = () => { const { isAuthenticated } = useAuth(); if (!isAuthenticated) { return null; } - return ; + return ; }; -export const PageLayoutArbeidsFlate: React.FC = () => { +export const PageLayout: React.FC = () => { const [searchParams] = useSearchParams(); - const [searchValue, setSearchValue] = useState(''); const queryClient = useQueryClient(); - const { setSearchString } = useSearchString(); + const { searchValue, setSearchValue, onSearch, onClear } = useSearchString(); + const { selectedProfile, selectedParties, parties, selectedPartyIds } = useParties(); const { accounts, selectedAccount, accountSearch } = useAccounts({ parties, selectedParties }); const { currentPartySavedSearches } = useSavedSearches(selectedPartyIds); @@ -71,21 +46,25 @@ export const PageLayoutArbeidsFlate: React.FC = () => { useProfile(); - useUpdateOnLocationChange(() => { + // biome-ignore lint/correctness/useExhaustiveDependencies: Full control of what triggers this code is needed + useEffect(() => { const searchString = getSearchStringFromQueryParams(searchParams); queryClient.setQueryData(['search'], () => searchString || ''); - }); + }, [searchParams]); const headerProps: HeaderProps = { currentAccount: selectedAccount, + logo: { + as: (props) => , + }, search: { expanded: false, name: 'search', placeholder: 'Søk', value: searchValue, - onClear: () => setSearchValue(''), + onClear: () => onClear(), onChange: (event: ChangeEvent) => setSearchValue(event.target.value), - onEnter: () => setSearchString(searchValue), + onEnter: () => onSearch(searchValue), }, menu: { menuLabel: 'Meny', diff --git a/packages/frontend/src/components/PageLayout/Search/useSearchString.tsx b/packages/frontend/src/components/PageLayout/Search/useSearchString.tsx new file mode 100644 index 00000000..5aa49c68 --- /dev/null +++ b/packages/frontend/src/components/PageLayout/Search/useSearchString.tsx @@ -0,0 +1,38 @@ +import { useEffect, useState } from 'react'; +import { useSearchParams } from 'react-router-dom'; +import { getSearchStringFromQueryParams } from '../../../pages/Inbox/queryParams.ts'; + +export const useSearchString = () => { + const [searchParams, setSearchParams] = useSearchParams(); + const searchQueryParams = getSearchStringFromQueryParams(searchParams); + const [searchValue, setSearchValue] = useState(searchQueryParams); + const [enteredSearchValue, setEnteredSearchValue] = useState(searchQueryParams); + + const onSearch = (value: string) => { + const newSearchParams = new URLSearchParams(searchParams); + newSearchParams.set('search', value); + setSearchParams(newSearchParams, { replace: true }); + setEnteredSearchValue(value); + }; + + const onClear = () => { + const newSearchParams = new URLSearchParams(searchParams); + if (newSearchParams.has('search')) { + newSearchParams.delete('search'); + setSearchParams(newSearchParams, { replace: true }); + } + setSearchValue(''); + setEnteredSearchValue(''); + }; + + useEffect(() => { + const searchBarParam = new URLSearchParams(searchParams); + if (searchBarParam.get('search')) { + return; + } + setSearchValue(''); + searchBarParam.delete('search'); + }, [searchParams]); + + return { searchValue, enteredSearchValue, setSearchValue, onSearch, onClear }; +}; diff --git a/packages/frontend/src/components/PageLayout/index.ts b/packages/frontend/src/components/PageLayout/index.ts index 3eb51041..efe552b9 100644 --- a/packages/frontend/src/components/PageLayout/index.ts +++ b/packages/frontend/src/components/PageLayout/index.ts @@ -1,4 +1,4 @@ -export { PageLayoutArbeidsFlate } from './PageLayoutArbeidsFlate.tsx'; +export { PageLayout } from './PageLayout.tsx'; export * from './SelectedDialogs'; export * from './Footer'; export * from './Sidebar'; diff --git a/packages/frontend/src/components/SavedSearchButton/SaveSearchButton.tsx b/packages/frontend/src/components/SavedSearchButton/SaveSearchButton.tsx index a036deaa..0307f0ad 100644 --- a/packages/frontend/src/components/SavedSearchButton/SaveSearchButton.tsx +++ b/packages/frontend/src/components/SavedSearchButton/SaveSearchButton.tsx @@ -5,11 +5,12 @@ import type { ButtonHTMLAttributes, RefAttributes } from 'react'; import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import type { Filter } from '..'; -import { useSearchString, useSnackbar } from '..'; +import { useSnackbar } from '..'; import { deleteSavedSearch } from '../../api/queries'; import { useParties } from '../../api/useParties'; import { QUERY_KEYS } from '../../constants/queryKeys'; import { useSavedSearches } from '../../pages/SavedSearches/useSavedSearches'; +import { useSearchString } from '../PageLayout/Search/useSearchString.tsx'; import { ProfileButton } from '../ProfileButton'; import { deepEqual } from './deepEqual'; @@ -42,7 +43,7 @@ export const SaveSearchButton = ({ }: SaveSearchButtonProps) => { const { t } = useTranslation(); const { selectedPartyIds } = useParties(); - const { searchString } = useSearchString(); + const { enteredSearchValue } = useSearchString(); const [isDeleting, setIsDeleting] = useState(false); const { currentPartySavedSearches: savedSearches } = useSavedSearches(selectedPartyIds); const { openSnackbar } = useSnackbar(); @@ -51,7 +52,7 @@ export const SaveSearchButton = ({ const searchToCheckIfExistsAlready: SavedSearchData = { filters: activeFilters as SearchDataValueFilter[], urn: selectedPartyIds as string[], - searchString, + searchString: enteredSearchValue, }; const alreadyExistingSavedSearch = isSearchSavedAlready( diff --git a/packages/frontend/src/pages/Inbox/Inbox.tsx b/packages/frontend/src/pages/Inbox/Inbox.tsx index ddf79dad..98b0c07f 100644 --- a/packages/frontend/src/pages/Inbox/Inbox.tsx +++ b/packages/frontend/src/pages/Inbox/Inbox.tsx @@ -16,13 +16,13 @@ import { InboxItem, InboxItems, PartyDropdown, - useSearchString, useSelectedDialogs, useSnackbar, } from '../../components'; import type { FilterBarRef } from '../../components/FilterBar/FilterBar.tsx'; import { FosToolbar } from '../../components/FosToolbar'; import { InboxItemsHeader } from '../../components/InboxItem/InboxItemsHeader.tsx'; +import { useSearchString } from '../../components/PageLayout/Search/useSearchString.tsx'; import { SaveSearchButton } from '../../components/SavedSearchButton/SaveSearchButton.tsx'; import { QUERY_KEYS } from '../../constants/queryKeys.ts'; import { FeatureFlagKeys, useFeatureFlag } from '../../featureFlags'; @@ -71,30 +71,27 @@ export const Inbox = ({ viewType }: InboxProps) => { const format = useFormat(); const filterBarRef = useRef(null); const queryClient = useQueryClient(); - const disableBulkActions = useFeatureFlag(FeatureFlagKeys.DisableBulkActions); - const location = useLocation(); const { t } = useTranslation(); const [searchParams, setSearchParams] = useSearchParams(); const { selectedItems, setSelectedItems, selectedItemCount, inSelectionMode } = useSelectedDialogs(); const { openSnackbar } = useSnackbar(); const [isSavingSearch, setIsSavingSearch] = useState(false); - const { selectedParties } = useParties(); - const { searchString } = useSearchString(); + const { enteredSearchValue } = useSearchString(); const [initialFilters, setInitialFilters] = useState([]); const [activeFilters, setActiveFilters] = useState([]); const { searchResults, isFetching: isFetchingSearchResults } = useSearchDialogs({ parties: selectedParties, - searchString, + searchString: enteredSearchValue, }); const { dialogsByView, isLoading: isLoadingDialogs, isSuccess: dialogsIsSuccess } = useDialogs(selectedParties); const dialogsForView = dialogsByView[viewType]; - const showingSearchResults = searchString.length > 0; + const showingSearchResults = enteredSearchValue.length > 0; const dataSource = showingSearchResults ? searchResults : dialogsForView; // biome-ignore lint/correctness/useExhaustiveDependencies: Full control of what triggers this code is needed @@ -170,7 +167,7 @@ export const Inbox = ({ viewType }: InboxProps) => { const data: SavedSearchData = { filters: activeFilters as SearchDataValueFilter[], urn: selectedParties.map((party) => party.party) as string[], - searchString, + searchString: enteredSearchValue, fromView: Routes[viewType], }; setIsSavingSearch(true); @@ -203,7 +200,7 @@ export const Inbox = ({ viewType }: InboxProps) => { [dataSource, format], ); - const savedSearchDisabled = !activeFilters?.length && !searchString; + const savedSearchDisabled = !activeFilters?.length && !enteredSearchValue; const showFilterButton = filterBarSettings.length > 0; if (isFetchingSearchResults) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4c255ee0..f7273b94 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -398,8 +398,8 @@ importers: packages/frontend: dependencies: '@altinn/altinn-components': - specifier: ^0.6.11 - version: 0.6.11(react-dom@18.3.1)(react@18.3.1) + specifier: ^0.6.12 + version: 0.6.12(react-dom@18.3.1)(react@18.3.1) '@digdir/designsystemet-css': specifier: 0.11.0-next.10 version: 0.11.0-next.10 @@ -843,8 +843,8 @@ packages: '@algolia/requester-common': 4.24.0 dev: false - /@altinn/altinn-components@0.6.11(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-Lx6n4BYgwElv6R94gJw2Rs97jIB96U/3a2sI9fq+uqigRpr5MVMyM+pRtKi+lsj7yzYZ7Hbc1r40VlZ3KkBwjw==} + /@altinn/altinn-components@0.6.12(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-Cjo2lBtdQskofaXhTnDk0e2XnjSGLqiQlGt1IAKaSVB9zaKFPUaSk8tdexM6VmqbpSpXYulnOkF04LXElcrfLw==} peerDependencies: react: '>=18.3.1' react-dom: '>=18.3.1'