<div data-react="search-result-page" data-props="{&quot;contentLink&quot;:{&quot;id&quot;:87941,&quot;workId&quot;:0,&quot;guidValue&quot;:&quot;19511fe1-7465-40ce-b312-5f7f2b66f367&quot;,&quot;providerName&quot;:null,&quot;url&quot;:&quot;https://int.swegon.com/search-results/&quot;,&quot;expanded&quot;:null},&quot;name&quot;:&quot;Search results&quot;,&quot;language&quot;:{&quot;link&quot;:&quot;https://int.swegon.com/search-results/&quot;,&quot;displayName&quot;:&quot;English&quot;,&quot;name&quot;:&quot;sv&quot;},&quot;existingLanguages&quot;:[{&quot;link&quot;:&quot;https://int.swegon.com/search-results/&quot;,&quot;displayName&quot;:&quot;English&quot;,&quot;name&quot;:&quot;en&quot;},{&quot;link&quot;:&quot;https://int.swegon.com/sv/sokresultat/&quot;,&quot;displayName&quot;:&quot;Swedish&quot;,&quot;name&quot;:&quot;sv&quot;}],&quot;masterLanguage&quot;:null,&quot;contentType&quot;:[&quot;Page&quot;,&quot;SearchPage&quot;],&quot;parentLink&quot;:{&quot;id&quot;:9,&quot;workId&quot;:0,&quot;guidValue&quot;:&quot;597d63f8-4e11-4e42-81b5-4fd00afb09cb&quot;,&quot;providerName&quot;:null,&quot;url&quot;:&quot;https://int.swegon.com/&quot;,&quot;expanded&quot;:null},&quot;routeSegment&quot;:&quot;search-results&quot;,&quot;url&quot;:&quot;https://int.swegon.com/search-results/&quot;,&quot;changed&quot;:&quot;2025-09-30T12:53:27Z&quot;,&quot;created&quot;:&quot;2025-09-30T12:53:19Z&quot;,&quot;startPublish&quot;:&quot;2025-09-30T12:53:27Z&quot;,&quot;stopPublish&quot;:null,&quot;saved&quot;:&quot;2025-10-31T14:11:05Z&quot;,&quot;status&quot;:&quot;Published&quot;,&quot;category&quot;:[],&quot;metaTitle&quot;:&quot;&quot;,&quot;metaDescription&quot;:&quot;&quot;,&quot;ogTitle&quot;:&quot;&quot;,&quot;ogDescription&quot;:&quot;&quot;,&quot;ogImage&quot;:null,&quot;ogType&quot;:0,&quot;themeForThisSection&quot;:-1,&quot;heading&quot;:&quot;Search results&quot;,&quot;menuHeader&quot;:&quot;&quot;,&quot;noIndex&quot;:null,&quot;hideSubPagesInMenu&quot;:null,&quot;mainContentArea&quot;:null,&quot;endpoint&quot;:&quot;https://int.swegon.com&quot;,&quot;searchPlaceholderText&quot;:null,&quot;productSearchGroupName&quot;:&quot;Products&quot;,&quot;documentSearchGroupName&quot;:&quot;Documents&quot;,&quot;informationSearchGroupName&quot;:&quot;Information&quot;,&quot;contactSearchGroupName&quot;:&quot;Contacts&quot;,&quot;productSearchHitName&quot;:&quot;Product&quot;,&quot;categorySearchHitName&quot;:&quot;Category&quot;,&quot;articleSearchHitName&quot;:&quot;Article&quot;,&quot;articlesSearchHitName&quot;:&quot;Articles&quot;,&quot;informationSearchHitName&quot;:&quot;Information&quot;,&quot;contactSearchHitName&quot;:&quot;Contact&quot;,&quot;energyCalculatorSearchHitName&quot;:&quot;Footprint&quot;,&quot;hubspotPostSearchHitName&quot;:&quot;Blog post&quot;,&quot;noResultsMessage&quot;:&quot;No result&quot;,&quot;downloadTableDocument&quot;:&quot;Document&quot;,&quot;downloadTableArticle&quot;:&quot;Article&quot;,&quot;downloadTableType&quot;:&quot;Document type&quot;,&quot;downloadTableDownload&quot;:&quot;Download&quot;,&quot;downloadTableSize&quot;:&quot;Size&quot;,&quot;downloadTableFormat&quot;:&quot;Format&quot;,&quot;showMoreLabel&quot;:&quot;Show more&quot;,&quot;showLessLabel&quot;:&quot;Show less&quot;,&quot;resultsForSearchTermSingular&quot;:&quot;result for the search term&quot;,&quot;resultsForSearchTermPlural&quot;:&quot;results for the search term&quot;,&quot;sortByLabel&quot;:&quot;Sort by:&quot;,&quot;searchDocumentsHeading&quot;:&quot;Looking efter något annat?&quot;,&quot;searchDocumentsPreamble&quot;:&quot;&lt;p&gt;This is the preamble for the document search results.&lt;/p&gt;&quot;,&quot;noResultsHeading&quot;:&quot;No documents found&quot;,&quot;noResultsPreamble&quot;:&quot;&lt;p&gt;Try &lt;em&gt;adjusting&lt;/em&gt; your search or filter to find what you are looking for.&lt;/p&gt;&quot;,&quot;screenReaderDescendingText&quot;:&quot;Aktuell sortering är fallande&quot;,&quot;screenReaderAscendingText&quot;:&quot;Aktuell sortering är stigande&quot;,&quot;screenReaderNoSortText&quot;:&quot;Ingen sortering tillämpad&quot;,&quot;searchHideContactsTab&quot;:false,&quot;searchWidget&quot;:{&quot;endpoint&quot;:&quot;https://int.swegon.com/api/search/autosuggest&quot;,&quot;searchQueryKey&quot;:&quot;q&quot;,&quot;language&quot;:&quot;en&quot;,&quot;searchPageUrl&quot;:&quot;/search-results/&quot;,&quot;placeholderText&quot;:&quot;Placeholder text used for product search&quot;,&quot;minQueryLength&quot;:2,&quot;categoriesLabel&quot;:&quot;Search in&quot;,&quot;categories&quot;:[{&quot;key&quot;:&quot;all&quot;,&quot;value&quot;:&quot;All&quot;},{&quot;key&quot;:&quot;products&quot;,&quot;value&quot;:&quot;Products&quot;},{&quot;key&quot;:&quot;documents&quot;,&quot;value&quot;:&quot;Documents&quot;},{&quot;key&quot;:&quot;content&quot;,&quot;value&quot;:&quot;Information&quot;},{&quot;key&quot;:&quot;contacts&quot;,&quot;value&quot;:&quot;Contacts&quot;}],&quot;suggestionsLabel&quot;:&quot;Popular searches:&quot;,&quot;suggestions&quot;:[{&quot;label&quot;:&quot;GOLD&quot;,&quot;type&quot;:&quot;products&quot;},{&quot;label&quot;:&quot;Eagle&quot;,&quot;type&quot;:&quot;products&quot;},{&quot;label&quot;:&quot;Martin&quot;,&quot;type&quot;:&quot;contacts&quot;},{&quot;label&quot;:&quot;Footprint&quot;,&quot;type&quot;:&quot;content&quot;},{&quot;label&quot;:&quot;CASA&quot;,&quot;type&quot;:&quot;documents&quot;}],&quot;form&quot;:{&quot;method&quot;:&quot;GET&quot;},&quot;className&quot;:&quot;search-field--big search-field--with-clear-button&quot;,&quot;closeLabel&quot;:&quot;Close&quot;},&quot;sortOptions&quot;:[{&quot;sortOrder&quot;:&quot;score&quot;,&quot;displayName&quot;:&quot;Relevance&quot;},{&quot;sortOrder&quot;:&quot;az&quot;,&quot;displayName&quot;:&quot;A-Z&quot;},{&quot;sortOrder&quot;:&quot;za&quot;,&quot;displayName&quot;:&quot;Z-A&quot;}]}" class="search-result-page"></div>
<div data-react="search-result-page" data-props="{{jsonEncode props}}" class="search-result-page"></div>
{
  "props": {
    "contentLink": {
      "id": 87941,
      "workId": 0,
      "guidValue": "19511fe1-7465-40ce-b312-5f7f2b66f367",
      "providerName": null,
      "url": "https://int.swegon.com/search-results/",
      "expanded": null
    },
    "name": "Search results",
    "language": {
      "link": "https://int.swegon.com/search-results/",
      "displayName": "English",
      "name": "sv"
    },
    "existingLanguages": [
      {
        "link": "https://int.swegon.com/search-results/",
        "displayName": "English",
        "name": "en"
      },
      {
        "link": "https://int.swegon.com/sv/sokresultat/",
        "displayName": "Swedish",
        "name": "sv"
      }
    ],
    "masterLanguage": null,
    "contentType": [
      "Page",
      "SearchPage"
    ],
    "parentLink": {
      "id": 9,
      "workId": 0,
      "guidValue": "597d63f8-4e11-4e42-81b5-4fd00afb09cb",
      "providerName": null,
      "url": "https://int.swegon.com/",
      "expanded": null
    },
    "routeSegment": "search-results",
    "url": "https://int.swegon.com/search-results/",
    "changed": "2025-09-30T12:53:27Z",
    "created": "2025-09-30T12:53:19Z",
    "startPublish": "2025-09-30T12:53:27Z",
    "stopPublish": null,
    "saved": "2025-10-31T14:11:05Z",
    "status": "Published",
    "category": [],
    "metaTitle": "",
    "metaDescription": "",
    "ogTitle": "",
    "ogDescription": "",
    "ogImage": null,
    "ogType": 0,
    "themeForThisSection": -1,
    "heading": "Search results",
    "menuHeader": "",
    "noIndex": null,
    "hideSubPagesInMenu": null,
    "mainContentArea": null,
    "endpoint": "https://int.swegon.com",
    "searchPlaceholderText": null,
    "productSearchGroupName": "Products",
    "documentSearchGroupName": "Documents",
    "informationSearchGroupName": "Information",
    "contactSearchGroupName": "Contacts",
    "productSearchHitName": "Product",
    "categorySearchHitName": "Category",
    "articleSearchHitName": "Article",
    "articlesSearchHitName": "Articles",
    "informationSearchHitName": "Information",
    "contactSearchHitName": "Contact",
    "energyCalculatorSearchHitName": "Footprint",
    "hubspotPostSearchHitName": "Blog post",
    "noResultsMessage": "No result",
    "downloadTableDocument": "Document",
    "downloadTableArticle": "Article",
    "downloadTableType": "Document type",
    "downloadTableDownload": "Download",
    "downloadTableSize": "Size",
    "downloadTableFormat": "Format",
    "showMoreLabel": "Show more",
    "showLessLabel": "Show less",
    "resultsForSearchTermSingular": "result for the search term",
    "resultsForSearchTermPlural": "results for the search term",
    "sortByLabel": "Sort by:",
    "searchDocumentsHeading": "Looking efter något annat?",
    "searchDocumentsPreamble": "<p>This is the preamble for the document search results.</p>",
    "noResultsHeading": "No documents found",
    "noResultsPreamble": "<p>Try <em>adjusting</em> your search or filter to find what you are looking for.</p>",
    "screenReaderDescendingText": "Aktuell sortering är fallande",
    "screenReaderAscendingText": "Aktuell sortering är stigande",
    "screenReaderNoSortText": "Ingen sortering tillämpad",
    "searchHideContactsTab": false,
    "searchWidget": {
      "endpoint": "https://int.swegon.com/api/search/autosuggest",
      "searchQueryKey": "q",
      "language": "en",
      "searchPageUrl": "/search-results/",
      "placeholderText": "Placeholder text used for product search",
      "minQueryLength": 2,
      "categoriesLabel": "Search in",
      "categories": [
        {
          "key": "all",
          "value": "All"
        },
        {
          "key": "products",
          "value": "Products"
        },
        {
          "key": "documents",
          "value": "Documents"
        },
        {
          "key": "content",
          "value": "Information"
        },
        {
          "key": "contacts",
          "value": "Contacts"
        }
      ],
      "suggestionsLabel": "Popular searches:",
      "suggestions": [
        {
          "label": "GOLD",
          "type": "products"
        },
        {
          "label": "Eagle",
          "type": "products"
        },
        {
          "label": "Martin",
          "type": "contacts"
        },
        {
          "label": "Footprint",
          "type": "content"
        },
        {
          "label": "CASA",
          "type": "documents"
        }
      ],
      "form": {
        "method": "GET"
      },
      "className": "search-field--big search-field--with-clear-button",
      "closeLabel": "Close"
    },
    "sortOptions": [
      {
        "sortOrder": "score",
        "displayName": "Relevance"
      },
      {
        "sortOrder": "az",
        "displayName": "A-Z"
      },
      {
        "sortOrder": "za",
        "displayName": "Z-A"
      }
    ]
  }
}
  • Content:
    import React from 'react';
    import SearchResultPageClient from './SearchResultPageClient';
    import SearchResultProvider from './context/SearchResultContext';
    
    const SearchResultPage = (props) => {
    
        return (
            <>
                <SearchResultProvider>
                    <SearchResultPageClient {...props} />
                </SearchResultProvider>
            </>
        );
    };
    
    export default SearchResultPage;
    
  • URL: /components/raw/search-result-page/SearchResultPage.jsx
  • Filesystem Path: src/components/search-result-page/SearchResultPage.jsx
  • Size: 402 Bytes
  • Content:
    import React from 'react';
    import SearchWidget from '../search-widget/SearchWidget';
    import Commerce from './components/Commerce';
    import Contacts from './components/Contacts';
    import Documents from './components/Documents';
    import Content from './components/Content';
    import Spinner from '../spinner';
    import { SearchResultContext } from './context/SearchResultContext';
    import { PaginationBlockDesktop } from './components/PaginationBlock/PaginationBlockDesktop';
    import { PaginationBlockMobile } from './components/PaginationBlock/PaginationBlockMobile';
    
    const SearchResultPageClient = (props) => {
    
        const { results, activeCategory, setActiveCategory, metaData, setResults, setEndpoint, setPage, setLanguage, query } = React.useContext(SearchResultContext);
    
        const sortOptions = [props.sortByRelevance, props.sortByAccending, props.sortByDescending];
    
        const renderActiveComponent = () => {
            switch (activeCategory) {
                case 'commerce':
                    return <Commerce sortOptions={sortOptions} query={query} {...props} />;
                case 'documents':
                    return <Documents query={query} {...props} />;
                case 'content':
                    return <Content sortOptions={sortOptions} query={query} {...props} />;
                case 'contacts':
                    return <Contacts sortOptions={sortOptions} query={query} {...props} />;
                default:
                    return null;
            }
        };
    
        const handleClick = (category) => {
            setActiveCategory(category);
            setResults(null);
    
            const params = new URLSearchParams(window.location.search);
            params.set('activeTab', category);
            params.set('q', params.get('q'));
            setPage(1);
    
            const newUrl = `${window.location.pathname}?${params.toString()}`;
            window.history.replaceState({}, '', newUrl);
        };
    
        const categoryPill = (category, label, results) => {
            return (
                <button role='tab' aria-selected={activeCategory === category} aria-controls={`panel-${category}`} id={`tab-${category}`} onClick={() => {
                    if (activeCategory !== category) handleClick(category);
                }} className={`button button--rounded ${activeCategory !== category ? 'button--ghost' : ''}`}>{label} ({results || 0})</button>
            );
        };
    
        React.useEffect(() => {
            if (props.endpoint)
                setEndpoint(props.endpoint);
            if (props.language && props.language.name)
                setLanguage(props.language.name);
        }, [props.endpoint, props.language]);
    
        return (
            <section className='search-result-page-wrapper'>
                <div className='search-result-page-hero'>
                    <div className='search-result-page-hero__heading'>
                        <h1>{props.heading}</h1>
                        {metaData && (
                            <p>{metaData.totalItems} {metaData.totalItems === 1 ? props.resultsForSearchTermSingular : props.resultsForSearchTermPlural} "{metaData.query}"</p>
                        )}
                    </div>
                    <div className='search-result-page-hero__search-field' >
                        <SearchWidget {...props.searchWidget} categories={null} suggestions={null} closeLabel={null} inputValue={query} />
                    </div>
                    <div role='tablist' className='search-result-page-hero__category-pills'>
                        {categoryPill('commerce', props.productSearchGroupName, metaData && metaData.productResults)}
                        {categoryPill('documents', props.documentSearchGroupName, metaData && metaData.documentResults)}
                        {categoryPill('content', props.informationSearchGroupName, metaData && metaData.contentResults)}
                        {!props.searchHideContactsTab && categoryPill('contacts', props.contactSearchGroupName, metaData && metaData.contactResults)}
                    </div>
                </div>
                {!query
                    ? <></>
                    : results
                        ? <div id='search-result-page-client'>
                            {renderActiveComponent()}
                            <PaginationBlockDesktop />
                            <PaginationBlockMobile />
                        </div>
                        : <div className='search-result__spinner'>
                            <Spinner size={100} />
                        </div>
                }
            </section>
        );
    };
    
    export default SearchResultPageClient;
    
  • URL: /components/raw/search-result-page/SearchResultPageClient.jsx
  • Filesystem Path: src/components/search-result-page/SearchResultPageClient.jsx
  • Size: 4.4 KB
  • Content:
    .pagination-block {
        display: flex;
        flex-direction: column;
        width: 100%;
        margin-left: auto;
        margin-right: auto;
    }
    
    .pagination-block-wrapper,
    .pagination-block-wrapper-mobile {
        max-width: 336px;
        column-gap: 2px;
        justify-content: center;
        margin-left: auto;
        margin-right: auto;
    }
    
    
    .pagination-block-wrapper {
        display: none;
    
        @include breakpoint($m) {
            display: flex;
            margin-bottom: 96px;
        }
    }
    
    .pagination-block-wrapper-mobile {
        display: flex;
    
        @include breakpoint($m) {
            display: none;
        }
    }
    
    .pagination-icon-wrapper {
        display: flex;
        margin-left: auto;
        margin-right: auto;
        width: 32px;
        height: -webkit-fill-available;
    }
    
    .paginaition-icon {
        margin: auto;
    }
    
    .pagination-button-label {
        margin: auto;
        text-align: center;
    }
    
    .pagination-button-wrapper {
        position: relative;
    
        &::before {
            content: "";
            display: block;
            padding-top: 100%;
            position: absolute;
            left: 0;
            top: 0;
        }
    }
    
    .button-base-style {
        width: 32px;
        height: 40px;
    }
    
    .pagination-div {
        display: flex;
    }
    
    .active-button {
        & p {
            color: $color-green-dark;
        }
    }
    
    .pagination-button {
        display: flex;
        cursor: pointer;
    
        &:hover {
            background-color: $color-green-pale;
        }
    }
    
    .pagination-button-wrapper:has(.active-button) {
        border-bottom: $color-green-dark 2px solid;
    }
  • URL: /components/raw/search-result-page/pagination.scss
  • Filesystem Path: src/components/search-result-page/pagination.scss
  • Size: 1.4 KB
  • Content:
    .search-result-page {
        width: 100%;
        max-width: 1440px;
        margin-left: auto;
        margin-right: auto;
        background-color: #fff;
        padding: size(3);
    }
    
    .search-result-page-hero {
        margin: 8px auto;
        display: flex;
        flex-direction: column;
    
        @include breakpoint($m) {
            margin: 58px auto;
        }
    
        &__heading {
            text-align: center;
            margin-bottom: 16px !important;
    
            & h1 {
                margin-bottom: 8px;
            }
        }
    
        &>div {
            max-width: 766px;
            width: 100%;
            margin: auto;
        }
    
        &__category-pills {
            justify-content: center;
            display: flex;
            column-gap: 8px;
            flex-wrap: wrap;
    
            & button {
                min-height: 0px;
                font-size: 12px;
                padding: 8px 24px;
            }
    
            & button:disabled {
                opacity: 0.5;
                cursor: not-allowed;
    
            }
        }
    }
    
    .search-result-page-commerce-wrapper {
        display: grid;
        grid-template-columns: repeat(4, 1fr);
    }
    
    .search-content__body {
        padding: size(2) size(3);
    
        a {
            text-decoration: none;
    
            &:hover {
                text-decoration: none;
    
                h3 {
                    text-decoration: underline;
                }
            }
        }
    }
    
    .search-content__body:nth-child(odd) {
        background-color: $color-gray-1;
    }
    
    .search-content__category {
        position: relative;
        margin-top: size(2);
        min-height: size(3);
    
        h3 {
            margin-bottom: size(1);
            color: $color-black;
        }
    }
    
    .search-content-hit-type-name {
        font-size: size(1.5);
        margin-bottom: size(2);
        padding-bottom: size(1);
        border-bottom: 1px rgba(0, 0, 0, 0.3) solid;
    
        @include breakpoint($m) {
            font-size: size(1.75);
        }
    }
    
    .search-content-link {
        position: absolute;
        margin-top: size(-.75);
        top: 0;
        right: size(2);
        display: flex;
        width: size(4);
        height: size(4);
        padding: size(0.75);
        border-radius: 50%;
        background-color: $color-gray-2;
        fill: $color-gray-4;
        transition: transform .2s cubic-bezier(0.4, 0.0, 0.2, 1);
    
        svg {
            width: 100%;
            height: 100%;
        }
    }
    
    .search-content-description {
        font-size: size(1.75);
    
        @include breakpoint($m) {
    
            font-size: size(2);
        }
    }
    
    .search-result-contact {
        display: grid;
        grid-template-columns: 1fr;
        column-gap: 24px;
        row-gap: 24px;
        padding-top: 24px;
        padding-bottom: 24px;
        position: relative;
    
        &__img-wrapper {
            display: none;
        }
    
        @include breakpoint($m) {
            column-gap: 24px;
            grid-template-columns: 50% 50%;
    
    
            &__img-wrapper {
                grid-row: 1/-1;
                grid-column: 2;
                display: block;
                position: relative;
                width: 100%;
                overflow: hidden;
    
                & img {
                    position: absolute;
                    object-fit: cover;
                    height: 100%;
                    width: 100%;
                }
            }
    
        }
    
        @include breakpoint($l) {
    
            grid-template-columns: 1fr 1fr 1fr 1fr;
        }
    }
    
    .search-result-content {
        max-width: 878px;
        width: 100%;
    }
    
    .search-result__spinner {
        width: 100%;
        justify-content: center;
        display: flex;
    }
    
    .search-result-block {
        border-top: 1px solid $color-gray-3;
        padding-top: size(2);
    }
    
    .search-result-documents-heading,
    .search-result-documents-heading-no-results {
        width: 100%;
        display: flex;
        flex-direction: column;
        row-gap: size(1);
        margin-bottom: size(3);
        align-items: center;
        padding-top: 24px;
        max-width: 1440px;
    }
    
    .search-result-documents-heading {
        border-top: 1px solid $color-gray-2;
    }
    
    .search-result-no-results {
        text-align: center;
        padding: size(4) 0;
        padding-top: 24px;
        border-top: 1px solid $color-gray-2;
    
    
    }
  • URL: /components/raw/search-result-page/search-result-page.scss
  • Filesystem Path: src/components/search-result-page/search-result-page.scss
  • Size: 3.8 KB
  • Handle: @search-result-page
  • Preview:
  • Filesystem Path: src/components/search-result-page/search-result-page.hbs

No notes defined.