Ilmainen toimitus yli 70 eurolla
30 päivän täysi palautusoikeus
2 vuoden rajoitettu takuu
Asiakaspalvelu, joka vastaa
Swift
  • Tuotteet
    Roomba® -robotti-imurit
    s-sarja j-sarja i-sarja 600-sarja
    Braava® -robottimopit
    m-sarja
    Lisätarvikkeet
    Lisätarvikkeet Roomba Lisätarvikkeet Braava
  • iRobot Genius®
  • P.O.O.P
  • Asiakastuki
    Ota yhteys asiakaspalveluun
    Rekisteröi robottisi Palautus ja takuut
  • Tietoa meistä
    Yrityksen tiedot
    Yleiskatsaus Miksi iRobot? Innovaatiota älykkääseen kotiin Historia
    Oikeudellisesti
    iRobotin Pet Owner Official Promise
    Osta iRobot®
    Valtuutetut jälleenmyyjät
Tuotteet iRobot Genius® P.O.O.P Asiakastuki Tietoa meistä
    • Tili
      • Kirjaudu sisään
      • Unohtuiko salasana
      • Luo tili
    • (0) kori
    Tili (0) kori

    Ilmainen toimitus yli 70 eurolla

    30 päivän täysi palau­tusoikeus

    2 vuoden rajoitettu takuu

    Asiaka­spalvelu, joka vastaa
    Swift
    Error executing template "Designs/Swift/Navigation/Navigation.cshtml"
    System.NullReferenceException: Object reference not set to an instance of an object.
       at CompiledRazorTemplates.Dynamic.RazorEngine_76c4191aa37247dc89937a2761abbf67.<>c__DisplayClass0_0.<RenderFirstLevelNodes>b__0(TextWriter __razor_helper_writer) in D:\DW9\Solutions\witt.dk\Files\Templates\Designs\Swift\Navigation\Navigation.cshtml:line 35
       at CompiledRazorTemplates.Dynamic.RazorEngine_76c4191aa37247dc89937a2761abbf67.Execute() in D:\DW9\Solutions\witt.dk\Files\Templates\Designs\Swift\Navigation\Navigation.cshtml:line 14
       at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
       at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
       at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
       at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
       at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
       at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
       at Dynamicweb.Rendering.Template.RenderRazorTemplate()
    
    1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.Navigation.NavigationTreeViewModel> 2 @using Dynamicweb 3 @using System.IO 4 @using System.Text.RegularExpressions 5 6 @{ 7 string negativMargin = Model.Parameters["mx-n3"].ToString(); 8 string navOrientation = Model.Parameters["navOrientation"].ToString(); 9 string navAlignment = Model.Parameters["navAlignment"].ToString(); 10 string theme = !string.IsNullOrEmpty(Model.Parameters["theme"].ToString()) ? Model.Parameters["theme"].ToString() : ""; 11 } 12 13 <nav class="navbar navbar-expand d-none d-lg-flex nav-wrapper py-0 mx-n2 @navOrientation @navAlignment"> 14 @RenderFirstLevelNodes(Model.Nodes, theme, navOrientation) 15 </nav> 16 17 <nav class="navbar navbar-expand d-flex d-lg-none nav-wrapper py-0 mx-n2 @navOrientation @navAlignment"> 18 @RenderFirstLevelNodesMobile(Model.Nodes, navOrientation) 19 </nav> 20 21 @helper RenderFirstLevelNodes(IEnumerable<Dynamicweb.Frontend.Navigation.NavigationTreeNodeViewModel> nodes, string theme, string navOrientation) 22 { 23 string linkFontSize = Model.Parameters["LinkFontSize"].ToString(); 24 string linkFontWeight = Model.Parameters["LinkFontWeight"].ToString(); 25 string linkCasing = Model.Parameters["LinkCasing"].ToString(); 26 bool showOnlyFirstNavLevel = Model.Parameters.ContainsKey("ShowOnlyFirstNavLevel") ? Convert.ToBoolean(Model.Parameters["ShowOnlyFirstNavLevel"].ToString()) : false; 27 28 <ul class="navbar-nav @(navOrientation == "vertical" ? "flex-column" : navOrientation)"> 29 30 @foreach (var node in nodes) 31 { 32 var page = Dynamicweb.Services.Pages.GetPage(node.PageId); 33 string pageType = page.ItemType; 34 35 string preferencesLayout = page.Item["PreferencesLayout"] != null ? page.Item["PreferencesLayout"].ToString() : ""; 36 string preferencesType = "language"; 37 bool countrySelector = page.Item["CountrySelector"] != null ? Convert.ToBoolean(page.Item["CountrySelector"].ToString()) : false; 38 bool languageSelector = page.Item["LanguageSelector"] != null ? Convert.ToBoolean(page.Item["LanguageSelector"].ToString()) : false; 39 bool currencySelector = page.Item["CurrencySelector"] != null ? Convert.ToBoolean(page.Item["CurrencySelector"].ToString()) : false; 40 41 var hasChildren = node.Nodes.Count() > 0 || pageType == "Swift_SignIn"; 42 string dropdownAttributes = hasChildren ? " role=\"button\" data-bs-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"" : ""; 43 44 if (pageType != "Swift_Preferences") 45 { 46 <li class="nav-item@(hasChildren ? " dropdown" : "")"> 47 @if (node.IsClickable) 48 { 49 <a class="nav-link nav-link-clean text-nowrap nav-link-underline @linkFontSize @linkFontWeight @linkCasing@(node.IsActive ? " active" : "")@(hasChildren ? " dropdown-toggle" : "")" href="@(hasChildren ? "#" : node.Link)" @dropdownAttributes @(node.IsActive ? " aria-current='page'" : "")> 50 @RenderNavigationItem(node) 51 </a> 52 } 53 else 54 { 55 <span class="nav-link nav-link-clean text-nowrap @linkFontSize @linkFontWeight @linkCasing" @dropdownAttributes> 56 @RenderNavigationItem(node) 57 </span> 58 } 59 60 @if (hasChildren) 61 { 62 if (!showOnlyFirstNavLevel) 63 { 64 <ul class="dropdown-menu @(theme)"> 65 @foreach (var subnode in node.Nodes)//Standard pages 66 { 67 <li> 68 <a href="@subnode.Link" class="dropdown-item py-2 nav-link-underline @linkFontSize @linkFontWeight @linkCasing" @(subnode.IsActive ? " aria-current='page'" : "")>@subnode.Name</a> 69 </li> 70 } 71 @if (pageType == "Swift_SignIn") //Sign out link 72 { 73 if (Pageview.User != null) 74 { 75 string link = "/Admin/Public/ExtranetLogoff.aspx?redirect=no"; 76 77 <li><hr class="dropdown-divider"></li> 78 if (Pageview.User.CurrentSecondaryUser != null) 79 { 80 <li> 81 <a href="Default.aspx?ID=@(Pageview.ID)&DwExtranetRemoveSecondaryUser=1" class="dropdown-item py-2 nav-link-underline @linkFontSize @linkFontWeight @linkCasing">@Translate("Sign out as a customer")</a> 82 </li> 83 } 84 <li> 85 <a href="@link" class="dropdown-item py-2 nav-link-underline @linkFontSize @linkFontWeight @linkCasing">@Translate("Sign out")</a> 86 </li> 87 } 88 } 89 </ul> 90 } 91 } 92 </li> 93 } 94 else 95 { 96 if (preferencesLayout == "modal") 97 { 98 99 string groupId = Dynamicweb.Context.Current.Request["GroupID"] != null ? Dynamicweb.Context.Current.Request["GroupID"].ToString() : ""; 100 string productId = Dynamicweb.Context.Current.Request["ProductID"] != null ? Dynamicweb.Context.Current.Request["ProductID"].ToString() : ""; 101 string variantId = Dynamicweb.Context.Current.Request["VariantID"] != null ? Dynamicweb.Context.Current.Request["VariantID"].ToString() : ""; 102 103 <li class="nav-item@(hasChildren ? " dropdown" : "")"> 104 <form action="/Default.aspx?ID=@node.PageId" data-response-target-element="PreferencesModalContent" data-layout-template="Swift_Preferences.cshtml" data-preloader="inline"> 105 <input type="hidden" name="CurrentPageID" value="@Pageview.ID" /> 106 <input type="hidden" name="GroupID" value="@groupId" /> 107 <input type="hidden" name="ProductID" value="@productId" /> 108 <input type="hidden" name="VariantID" value="@variantId" /> 109 <button type="button" onmouseover="swift.PageUpdater.Update(event)" onclick="swift.PageUpdater.Update(event)" class="btn nav-link nav-link-clean text-nowrap border-0 @linkFontSize @linkFontWeight @linkCasing" data-bs-toggle="modal" data-bs-target="#PreferencesModal"> 110 @if (languageSelector) 111 { 112 @RenderNavigationItem(node, "language") } 113 else 114 { 115 @RenderNavigationItem(node)} 116 </button> 117 </form> 118 </li> 119 } 120 else 121 { 122 var ecomCountries = Dynamicweb.Ecommerce.Services.Countries.GetCountries(); 123 var currencies = Dynamicweb.Ecommerce.Services.Currencies.GetAllCurrencies(); 124 125 if (languageSelector) 126 { 127 List<Dynamicweb.Content.Page> languages = new List<Dynamicweb.Content.Page>(); 128 129 if (Pageview.Page.Area.IsMaster) 130 { 131 languages.Add(Pageview.Page); 132 if (Pageview.Page.Languages != null) 133 { 134 foreach (var language in Pageview.Page.Languages) 135 { 136 if (language.Area.Active == true) 137 { 138 languages.Add(language); 139 } 140 } 141 } 142 } 143 else 144 { 145 languages.Add(Pageview.Page.MasterPage); 146 if (Pageview.Page.MasterPage != null) 147 { 148 if (Pageview.Page.MasterPage.Languages != null) 149 { 150 foreach (var language in Pageview.Page.MasterPage.Languages) 151 { 152 if (language.Area.Active == true) 153 { 154 languages.Add(language); 155 } 156 } 157 } 158 } 159 } 160 161 if (languages.Count > 1) 162 { 163 preferencesType = "language"; 164 165 @RenderPreferencesDropdown(node, preferencesType, linkFontSize, linkFontWeight, linkCasing, theme) } 166 } 167 if (countrySelector && ecomCountries.Count > 1) 168 { 169 preferencesType = "country"; 170 @RenderPreferencesDropdown(node, preferencesType, linkFontSize, linkFontWeight, linkCasing, theme) } 171 if (currencySelector && currencies.Count() > 1) 172 { 173 preferencesType = "currency"; 174 @RenderPreferencesDropdown(node, preferencesType, linkFontSize, linkFontWeight, linkCasing, theme)} 175 } 176 } 177 } 178 </ul> 179 } 180 181 @helper RenderFirstLevelNodesMobile(IEnumerable<Dynamicweb.Frontend.Navigation.NavigationTreeNodeViewModel> nodes, string navOrientation) 182 { 183 string linkFontSize = Model.Parameters["LinkFontSize"].ToString(); 184 string linkFontWeight = Model.Parameters["LinkFontWeight"].ToString(); 185 string linkCasing = Model.Parameters["LinkCasing"].ToString(); 186 187 <div class="navbar-nav @(navOrientation == "vertical" ? "flex-column" : navOrientation)"> 188 @foreach (var node in nodes) 189 { 190 var hasChildren = node.Nodes.Count() > 0; 191 var page = Dynamicweb.Services.Pages.GetPage(node.PageId); 192 string pageType = page.ItemType; 193 194 if (pageType != "Swift_Preferences") 195 { 196 if (node.IsClickable) 197 { 198 <a class="nav-link nav-link-clean text-nowrap @linkFontWeight @linkCasing @linkFontSize @(node.IsActive ? " active" : "")" href="@node.Link" title="@node.Name"> 199 @RenderNavigationItem(node) 200 </a> 201 } 202 else 203 { 204 <span class="nav-link nav-link-clean text-nowrap @linkFontWeight @linkCasing @linkFontSize" title="@node.Name"> 205 @RenderNavigationItem(node) 206 </span> 207 } 208 } else { 209 bool languageSelector = page.Item["LanguageSelector"] != null ? Convert.ToBoolean(page.Item["LanguageSelector"].ToString()) : false; 210 string groupId = Dynamicweb.Context.Current.Request["GroupID"] != null ? Dynamicweb.Context.Current.Request["GroupID"].ToString() : ""; 211 string productId = Dynamicweb.Context.Current.Request["ProductID"] != null ? Dynamicweb.Context.Current.Request["ProductID"].ToString() : ""; 212 string variantId = Dynamicweb.Context.Current.Request["VariantID"] != null ? Dynamicweb.Context.Current.Request["VariantID"].ToString() : ""; 213 214 <div class="nav-item"> 215 <form action="/Default.aspx?ID=@node.PageId" data-response-target-element="PreferencesModalContent" data-layout-template="Swift_Preferences.cshtml" data-preloader="inline"> 216 <input type="hidden" name="Layout" value="modal" /> 217 <input type="hidden" name="CurrentPageID" value="@Pageview.ID" /> 218 <input type="hidden" name="GroupID" value="@groupId" /> 219 <input type="hidden" name="ProductID" value="@productId" /> 220 <input type="hidden" name="VariantID" value="@variantId" /> 221 <button type="button" onmouseover="swift.PageUpdater.Update(event)" onclick="swift.PageUpdater.Update(event)" class="btn nav-link nav-link-clean text-nowrap border-0 @linkFontSize @linkFontWeight @linkCasing" data-bs-toggle="modal" data-bs-target="#PreferencesModal"> 222 @if (languageSelector) 223 { 224 @RenderNavigationItem(node, "language") } 225 else 226 { 227 @RenderNavigationItem(node)} 228 </button> 229 </form> 230 </div> 231 } 232 } 233 </div> 234 } 235 236 @helper RenderNavigationItem(Dynamicweb.Frontend.Navigation.NavigationTreeNodeViewModel node, string preferencesType = "") 237 { 238 var page = Dynamicweb.Services.Pages.GetPage(node.PageId); 239 string pageType = page.ItemType; 240 string linkFontSize = Model.Parameters["LinkFontSize"].ToString(); 241 string layout = Model?.Parameters["Layout"].ToString(); 242 string icon = page.Item["Icon"] != null ? page.Item["Icon"].ToString() : ""; 243 string iconSize = "icon-3"; 244 245 if (linkFontSize == "fs-7") 246 { 247 iconSize = "icon-2"; 248 } 249 if (linkFontSize == "fs-5") 250 { 251 iconSize = "icon-4"; 252 } 253 254 if (page.PropertyItem != null) 255 { 256 icon = page.PropertyItem["Icon"] != null ? page.PropertyItem["Icon"].ToString() : ""; 257 } 258 259 if (pageType == "Swift_Cart") //Mini cart 260 { 261 double totalProducts = 0; 262 263 if (Dynamicweb.Ecommerce.Common.Context.Cart != null) 264 { 265 totalProducts = Dynamicweb.Ecommerce.Common.Context.Cart.GetParentProductLineQuantityCount(Dynamicweb.Ecommerce.Common.Context.Cart.OrderLines); 266 } 267 268 switch (layout) 269 { 270 case "linksOnly": 271 <span class="align-middle">@node.Name</span> 272 <span class="js-cart-qty mini-cart-quantity align-middle">(@totalProducts)</span> 273 break; 274 275 case "iconsOnly": 276 @RenderIcon(icon, iconSize) 277 <span class="js-cart-qty mini-cart-quantity align-middle">(@totalProducts)</span> 278 break; 279 case "iconsAndLinks": 280 @RenderIcon(icon, iconSize) 281 <span class="js-cart-qty mini-cart-quantity align-middle">(@totalProducts)</span> 282 <span class="align-middle">@node.Name</span> 283 break; 284 case "linksAndIcons": 285 <span class="align-middle">@node.Name</span> 286 <span class="js-cart-qty mini-cart-quantity align-middle">(@totalProducts)</span> 287 @RenderIcon(icon, iconSize) 288 break; 289 } 290 } 291 else 292 { 293 string name = node.Name; 294 295 if (preferencesType == "country") 296 { //Country 297 name = Translate("Deliver to") + ": " + Dynamicweb.Ecommerce.Common.Context.Country.Name; 298 } 299 300 if (preferencesType == "language") 301 { //Languange 302 string iconFolder = "/Files/FlagIcons/"; 303 icon = iconFolder + Pageview.Area.CultureInfo.Name.ToLower() + ".svg"; 304 Regex reg = new Regex(@"\(([^\)]+)\)"); 305 name = reg.Replace(Pageview.Area.CultureInfo.DisplayName, ""); 306 307 layout = layout == "linksOnly" ? "iconsAndLinks" : layout; 308 bool hideIcon = page.Item["HideIcon"] != null ? Convert.ToBoolean(page.Item["HideIcon"].ToString()) : false; 309 bool hideName = page.Item["HideName"] != null ? Convert.ToBoolean(page.Item["HideName"].ToString()) : false; 310 layout = hideIcon ? "linksOnly" : layout; 311 layout = hideName ? "iconsOnly" : layout; 312 } 313 314 if (preferencesType == "currency") 315 { //Country 316 name = Dynamicweb.Ecommerce.Common.Context.Currency.Code; 317 } 318 319 switch (layout) 320 { 321 case "linksOnly": 322 <span class="align-middle">@name</span> 323 break; 324 325 case "iconsOnly": 326 <span class="visually-hidden">@name</span> 327 @RenderIcon(icon, iconSize) 328 break; 329 case "iconsAndLinks": 330 @RenderIcon(icon, iconSize) 331 <span class="align-middle">@name</span> 332 break; 333 case "linksAndIcons": 334 <span class="align-middle">@name</span> 335 @RenderIcon(icon, iconSize) 336 break; 337 } 338 } 339 } 340 341 @helper RenderPreferencesDropdown(Dynamicweb.Frontend.Navigation.NavigationTreeNodeViewModel node, string preferencesType, string linkFontSize, string linkFontWeight, string linkCasing, string theme) 342 { 343 string groupId = Dynamicweb.Context.Current.Request["GroupID"] != null ? Dynamicweb.Context.Current.Request["GroupID"].ToString() : ""; 344 string productId = Dynamicweb.Context.Current.Request["ProductID"] != null ? Dynamicweb.Context.Current.Request["ProductID"].ToString() : ""; 345 string variantId = Dynamicweb.Context.Current.Request["VariantID"] != null ? Dynamicweb.Context.Current.Request["VariantID"].ToString() : ""; 346 347 <li class="nav-item dropdown"> 348 <form class="d-none d-lg-block" action="/Default.aspx?ID=@node.PageId" data-response-target-element="@(preferencesType)Dropdown_@Pageview.CurrentParagraph.ID" data-layout-template="Swift_Preferences.cshtml" data-preloader="inline"> 349 <input type="hidden" name="Type" value="@preferencesType" /> 350 <input type="hidden" name="CurrentPageID" value="@Pageview.ID" /> 351 <input type="hidden" name="GroupID" value="@groupId" /> 352 <input type="hidden" name="ProductID" value="@productId" /> 353 <input type="hidden" name="VariantID" value="@variantId" /> 354 <input type="hidden" name="FontSize" value="@linkFontSize" /> 355 <input type="hidden" name="FontWeight" value="@linkFontWeight" /> 356 <input type="hidden" name="Casing" value="@linkCasing" /> 357 358 <a onmouseover="swift.PageUpdater.Update(event)" onclick="swift.PageUpdater.Update(event)" class="nav-link nav-link-clean text-nowrap nav-link-underline @linkFontSize @linkFontWeight @linkCasing@(node.IsActive ? " active" : "") dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" @(node.IsActive ? " aria-current='page'" : "")> 359 @RenderNavigationItem(node, preferencesType) 360 </a> 361 362 <ul class="dropdown-menu @(theme)" id="@(preferencesType)Dropdown_@Pageview.CurrentParagraph.ID"> 363 @* The content here comes from an external request *@ 364 </ul> 365 </form> 366 367 <form class="d-block d-lg-none" action="/Default.aspx?ID=@node.PageId" data-response-target-element="PreferencesModalContent" data-layout-template="Swift_Preferences.cshtml" data-preloader="inline"> 368 <input type="hidden" name="Layout" value="modal" /> 369 <input type="hidden" name="CurrentPageID" value="@Pageview.ID" /> 370 <input type="hidden" name="GroupID" value="@groupId" /> 371 <input type="hidden" name="ProductID" value="@productId" /> 372 <input type="hidden" name="VariantID" value="@variantId" /> 373 <button type="button" onmouseover="swift.PageUpdater.Update(event)" onclick="swift.PageUpdater.Update(event)" class="btn nav-link nav-link-clean text-nowrap border-0 @linkFontSize @linkFontWeight @linkCasing" data-bs-toggle="modal" data-bs-target="#PreferencesModal"> 374 @RenderNavigationItem(node, preferencesType) 375 </button> 376 </form> 377 </li> 378 } 379 380 @helper RenderIcon(string icon, string iconSize) 381 { 382 if (Path.GetExtension(icon).ToLower() == ".svg" && !icon.ToLower().Contains("none")) 383 { 384 string iconPath = Dynamicweb.Context.Current.Server.MapPath(icon); 385 386 <span class="@iconSize"> 387 @ReadFile(iconPath) 388 </span> 389 } 390 } 391

      Valtuutettu jakelija

      Witt Hvidevarer A/S
      Gødstrup Søvej 9
      DK-7400 Herning
      Danmark

      info@irobot.fi
      +45 8844 4511

       

      • Facebook
      • Instagram

      Tietoa asiakkuudesta

      • Yleiset myynti- ja toimitusehdot
      • P.O.O.P (ehdot)
      • Palata
      • Tietosuojakäytäntömme
      • Tietoturva
      • Evästeet
      Yleiset myynti- ja toimitusehdot P.O.O.P (ehdot) Palata Tietosuojakäytäntömme Tietoturva Evästeet

      Linkkejä

      • Kori (0)
      • Oma tili
      • Valtuutetut jälleenmyyjät
      • Huolto
      • Löydä täydellinen siivouskumppani
      • vertailla tuotteita
      Kori (0) Oma tili Valtuutetut jälleenmyyjät Huolto Löydä täydellinen siivouskumppani vertailla tuotteita

      Maksutavat

      ©2022 Witt A/S. kaikki oikeudet pidätetään . y-tunnus.: FI 2446509-9 MVA

      Valtuutettu jakelija

      Witt A/S
      Gødstrup Søvej 9
      7400 Herning
      Danmark

      info@irobot.fi
      +45 8844 4511

      • Facebook
      • Instagram
      • Youtube
      Facebook Instagram Youtube

      Linkkejä

      • Kori (0)
      • Oma tili
      • Valtuutetut jälleenmyyjät
      • Huolto
      • Löydä täydellinen siivouskumppani
      • vertailla tuotteita
      Kori (0) Oma tili Valtuutetut jälleenmyyjät Huolto Löydä täydellinen siivouskumppani vertailla tuotteita

      Tietoa asiakkuudesta

      • Yleiset myynti- ja toimitusehdot
      • P.O.O.P (ehdot)
      • Palata
      • Tietosuojakäytäntömme
      • Tietoturva
      • Evästeet
      Yleiset myynti- ja toimitusehdot P.O.O.P (ehdot) Palata Tietosuojakäytäntömme Tietoturva Evästeet

      Maksutavat

      © Witt A/S.
      Kaikki oikeudet pidätetään.
      y-tunnus.: FI 2446509-9 MVA

      (0)
      Tuotteet
      Tuotteet
      Roomba® -robotti-imurit
      Roomba® -robotti-imurit
      s-sarja
      j-sarja
      i-sarja
      600-sarja
      Braava® -robottimopit
      Braava® -robottimopit
      m-sarja
      Lisätarvikkeet
      Lisätarvikkeet
      Lisätarvikkeet Roomba
      Lisätarvikkeet Braava
      iRobot Genius®
      P.O.O.P
      Asiakastuki
      Asiakastuki
      Ota yhteys asiakaspalveluun
      Ota yhteys asiakaspalveluun
      Rekisteröi robottisi
      Palautus ja takuut
      Tietoa meistä
      Tietoa meistä
      Yrityksen tiedot
      Yrityksen tiedot
      Yleiskatsaus
      Miksi iRobot?
      Innovaatiota älykkääseen kotiin
      Historia
      Oikeudellisesti
      Oikeudellisesti
      iRobotin Pet Owner Official Promise
      Osta iRobot®
      Osta iRobot®
      Valtuutetut jälleenmyyjät
      Favorite list updated