@namespace Oqtane.Themes.Controls @inherits ThemeControlBase @inject ISettingService SettingService @inject ICookieConsentService CookieConsentService @inject IStringLocalizer Localizer @if (_enabled && !Hidden) { } @code { private bool _showBanner; private bool _enabled; private bool _optout; private bool _actioned; private bool _canTrack; private bool _consentPostback; private bool _togglePostback; [Parameter] public bool Hidden { get; set; } [Parameter] public bool ShowPrivacyLink { get; set; } = true; [SupplyParameterFromForm(FormName = "CookieConsentToggleForm")] public string ShowBanner { get => ""; set { _showBanner = bool.Parse(value); _togglePostback = true; } } [SupplyParameterFromForm(FormName = "CookieConsentForm")] public string CanTrack { get => ""; set { _canTrack = !string.IsNullOrEmpty(value); _consentPostback = true; } } protected override async Task OnInitializedAsync() { var cookieConsentSetting = SettingService.GetSetting(PageState.Site.Settings, "CookieConsent", string.Empty); _enabled = !string.IsNullOrEmpty(cookieConsentSetting); _optout = cookieConsentSetting == "optout"; _actioned = await CookieConsentService.IsActionedAsync(); if (!_consentPostback) { _canTrack = await CookieConsentService.CanTrackAsync(_optout); } if (!_togglePostback) { _showBanner = !_actioned; } } private async Task AcceptPolicy() { var cookieString = string.Empty; if (_optout) { cookieString = _canTrack ? await CookieConsentService.WithdrawConsentCookieAsync() : await CookieConsentService.CreateConsentCookieAsync(); } else { cookieString = _canTrack ? await CookieConsentService.CreateConsentCookieAsync() : await CookieConsentService.WithdrawConsentCookieAsync(); } //update the page state PageState.AllowCookies = _canTrack; if (!string.IsNullOrEmpty(cookieString)) { var interop = new Interop(JSRuntime); await interop.SetCookieString(cookieString); _actioned = true; _showBanner = false; StateHasChanged(); } } private async Task ToggleBanner() { if (!_actioned) { var cookieString = await CookieConsentService.CreateActionedCookieAsync(); if (!string.IsNullOrEmpty(cookieString)) { var interop = new Interop(JSRuntime); await interop.SetCookieString(cookieString); _actioned = true; } } if (PageState.RenderMode == RenderModes.Interactive) { _showBanner = !_showBanner; StateHasChanged(); } } }