Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
@model Hawksearch.Kentico.Xperience.UI.Widgets.SearchBoxViewModel

@{
    var trackedEvents = new List<string>()
{
        Model.ComponentViewModel.Properties.TrackAutocompleteClickEvent ? "AutocompleteClick" : "",
        Model.ComponentViewModel.Properties.TrackSearchEvent ? "Search" : ""
    };

    var eventsJson = Newtonsoft.Json.JsonConvert.SerializeObject(trackedEvents.Where(a => !string.IsNullOrEmpty(a)));

    var settingsJson = Newtonsoft.Json.JsonConvert.SerializeObject(Model.ConnectorSettings);

    var language = Model.ConnectorSettings.MultilingualIndexingEnabled ?
                                    CMS.Localization.LocalizationContext.CurrentCulture.CultureCode : "";
}

@if (Model.ConnectorSettings.FrontendFramework == Hawksearch.Kentico.Xperience.CMS.Configuration.FrontendFrameworkType.Vue)
{
    <div class="vue-app-wrapper-ae"
         data-indexname="@Model.ComponentViewModel.Properties.IndexName"
         data-language="@language"
         data-trackedevents="@eventsJson"
         data-hawksearchsettings="@settingsJson">
        <div class="hawk">
            <div class="hawk__header">
                @if (string.IsNullOrWhiteSpace(Model.SearchPageUrl))
                {
                    <search-box></search-box>
                }
                else
                {
                    <search-box search-page="@Model.SearchPageUrl"></search-box>
                }
            </div>
        </div>
    </div>
}
else
{
    <div id="hawksearch-react-search-box"
         data-indexname="@Model.ComponentViewModel.Properties.IndexName"
         data-language="@language"
         data-trackedevents="@eventsJson"
         data-hawksearchsettings="@settingsJson"
         data-searchpageurl="@Model.SearchPageUrl">
    </div>
}

Feel free to modify the given code to your liking, but there are a few things to be careful of. It is important to note that the overall widget needs to be wrapped in a div element with the class “vue-app-wrapper-ae“ and to have the data attributes present as in the snippet above, otherwise functionality might not work as expected. Currently, the connector locates those divs in a page when initializing the Vue.js components.

...