Tofino Waters Soap

$13.00
people are viewing this right now
Free worldwide shipping
Free returns
Sustainably made
Secure payments
Description

Indulge in this blend of effective ingredients traditionally used for their detoxifying + revitalizing properties. This cleansing bar will leave you feeling so fresh and so clean.

To get the best out of your natural soap we recommend storing it on our special?soap dish

We recommend patch testing prior to use. for external use only.?

Proudly crafted with local wild foraged ingredients from our gardens when seasonally available.?

Highlights

* biodegradable & eco-friendly

Weight

155g

Ingredients

Lavender | Sea salt | Shungite | Coconut oil | Balsam Fir | Cedar | Spearmint | Jojoba oil?

?Sodium cocoate (saponified coconut oil),sodium olivate (saponified olive oil),(spearmint) (mentha spicata) oil,simmondsia chinensis (jojoba) seed oil,cedarwood (cedrus atlantica) oil, balsam (abies balsamea) essential oil,lavandula angustifolia (lavender) oil,sea salt,shungite.

?

Customer Reviews

Here are what our customers say.

Write a Review
Customer Reviews
Wow you reached the bottom
Newest
Most liked
Highest ratings
Lowest ratings
×
class SpzCustomFileUpload extends SPZ.BaseElement { constructor(element) { super(element); this.uploadCount_ = 0; this.fileList_ = []; } buildCallback() { this.action = SPZServices.actionServiceForDoc(this.element); this.registerAction('upload', (data) => { this.handleFileUpload_(data.event?.detail?.data || []); }); this.registerAction('delete', (data) => { this.handleFileDelete_(data?.args?.data); }); this.registerAction('preview', (data) => { this.handleFilePreview_(data?.args?.data); }); this.registerAction('limit', (data) => { this.handleFileLimit_(); }); this.registerAction('sizeLimit', (data) => { this.handleFileSizeLimit_(); }); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } setData_(count, file) { this.uploadCount_ = count; this.fileList_ = file; } handleFileUpload_(data) { data.forEach(i => { if(this.fileList_.some(j => j.url === i.url)) return; this.fileList_.push(i); }) this.uploadCount_++; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileUpload", { count: this.uploadCount_, files: this.fileList_}); if(this.fileList_.length >= 5){ document.querySelector('#review_upload').style.display = 'none'; } if(this.fileList_.length > 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '8px'; } } handleFileDelete_(index) { this.fileList_.splice(index, 1); this.uploadCount_--; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileDelete", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; if(this.fileList_?.length === 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '132px'; } } handleFilePreview_(index) { const finalPreviewData = this.fileList_[index]; const filePreviewModal = document.getElementById('filePreviewModal'); const fullScreenVideo = document.getElementById('fullScreenVideo'); const fullScreenImage = document.getElementById('fullScreenImage'); const previewModalClose = document.getElementById('previewModalClose'); const previewLoading = document.getElementById('previewLoading'); filePreviewModal.style.display = 'block'; previewLoading.style.display = 'flex'; if(finalPreviewData?.type === 'video'){ const media = this.mediaParse_(this.fileList_[index]?.url); fullScreenVideo.addEventListener('canplaythrough', function() { previewLoading.style.display = 'none'; }); fullScreenImage.src = ''; fullScreenImage.style.display = 'none'; fullScreenVideo.style.display = 'block'; fullScreenVideo.src = media.mp4 || ''; } else { fullScreenImage.onload = function() { previewLoading.style.display = 'none'; }; fullScreenVideo.src = ''; fullScreenVideo.style.display = 'none'; fullScreenImage.style.display = 'block'; fullScreenImage.src = finalPreviewData.url; } previewModalClose.addEventListener('click', function() { filePreviewModal.style.display = 'none'; }); } handleFileLimit_() { alert(window.AppReviewsLocale.comment_file_limit || 'please do not upload files more than 5'); this.triggerEvent_("handleFileLimit"); } handleFileSizeLimit_() { alert(window.AppReviewsLocale.comment_file_size_limit || 'File size does not exceed 10M'); } clear(){ this.fileList_ = []; this.uploadCount_ = 0; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleClear", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; } mediaParse_(url) { var result = {}; try { url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) { try { result[key] = decodeURIComponent(value); } catch (e) { result[key] = value; } }); result.preview_image = url.split('?')[0]; } catch (e) {}; return result; } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, name, data); this.action.trigger(this.element, name, event); } } SPZ.defineElement('spz-custom-file-upload', SpzCustomFileUpload);
The review would not show in product details on storefront since it does not support to.
Select product
Selected 0 item(s)
function updateQueryStringParameter(uri, key, value) { if(!value) { return uri; } let re = new RegExp('([?&])' + key + '=.*?(&|$)', 'i'); let separator = uri.indexOf('?') !== -1 ? '&' : '?'; return uri.match(re) ? uri.replace(re, '$1' + key + '=' + value + '$2') : uri + separator + key + '=' + value; } function addEventListenerRedirect(data) { if (data.type === 'checkout_redirect_login') { let { pathname, search } = window.location; let order_id = data.order_id || ''; let newSearch = updateQueryStringParameter(search, 'order_id', order_id); let return_Url = `${pathname}${newSearch}`; let redirect_Url = `${data.url}?_returnUrl=${encodeURIComponent(return_Url)}`; return Promise.resolve(redirect_Url) } if (data.type === 'checkout_redirect') { return Promise.resolve(data.url); } if (data.type === 'checkout_reload') { let { pathname } = window.location; return Promise.resolve(pathname); } return Promise.reject({}); } function addEventListenerMask(data) { if (data.type === 'checkout_mask' && data.show_mask) { return Promise.resolve({}); } return Promise.reject({}); } function addEventListenerMaskClose(data) { if (data.type === 'checkout_mask' && !data.show_mask) { return Promise.resolve({}); } return Promise.reject({}); } function handleUpdateCheckout(data) { let message = { type:'theme_variant_list_update' } return Promise.resolve(message); } function addEventListeneFullFixed(data) { if (data.type === 'checkout_full_screen') { return Promise.resolve(data.is_full_screen); } return Promise.reject({}); } function addEventListenerTproduct(data) { if (data.type === 'checkout_kick_items') { return Promise.resolve(data); } return Promise.reject({}); } function handleCheckOrderIdChange(data) { if ((data.data && data.data.order_token) || data.order_id) { let new_order_token = (data.data && data.data.order_token) || data.order_id ; let checkout_iframe_template = document.getElementById('checkout_iframe_template'); let old_oder_token = checkout_iframe_template.getAttribute('data-order-id'); if (!old_oder_token) { checkout_iframe_template.setAttribute('data-order-id', new_order_token); } let isRerenderCheckout = new_order_token == old_oder_token; let obj = { order_id: new_order_token, once: isRerenderCheckout } if (!isRerenderCheckout) { checkout_iframe_template.setAttribute('data-order-id', new_order_token); } return Promise.resolve(obj); } return Promise.reject({}); } function addEventListeneScollToCheckout(data) { if (data.type === 'scroll_to_checkout') { return Promise.resolve(); } return Promise.reject({}); } function handleGetOrderInfo(data) { if (data.order_id) { let api = `/api/checkout/order/info?order_id=${data.order_id}`; return Promise.resolve(api); } return Promise.reject({}); } function handleToggleStickyCheckoutBtn(data) { if (data.type === 'checkout_submit_visible') { return Promise.resolve(!data.visible); } return Promise.reject({}); } function handleSetStickyCheckoutBtnDisabled(data) { if (data.type === 'checkout_submit_disable') { return Promise.resolve(data.disable); } return Promise.reject({}); } function stickyCheckoutBtnPostMessage(data) { let message = { type: 'theme_submit_click' } return Promise.resolve(message); } function handleShowChecktoutToast(data) { if (data.type === 'checkout_toast') { return Promise.resolve(data.message); } return Promise.reject({}); } exportFunction('handleGetOrderInfo', handleGetOrderInfo) exportFunction('handleCheckOrderIdChange', handleCheckOrderIdChange) exportFunction('addEventListenerRedirect', addEventListenerRedirect) exportFunction('addEventListenerMask', addEventListenerMask) exportFunction('addEventListenerMaskClose', addEventListenerMaskClose) exportFunction('handleUpdateCheckout', handleUpdateCheckout) exportFunction('addEventListeneFullFixed', addEventListeneFullFixed) exportFunction('addEventListenerTproduct', addEventListenerTproduct) exportFunction('addEventListeneScollToCheckout', addEventListeneScollToCheckout) exportFunction('handleToggleStickyCheckoutBtn', handleToggleStickyCheckoutBtn) exportFunction('handleSetStickyCheckoutBtnDisabled', handleSetStickyCheckoutBtnDisabled) exportFunction('stickyCheckoutBtnPostMessage', stickyCheckoutBtnPostMessage) exportFunction('handleShowChecktoutToast', handleShowChecktoutToast)
window.addEventListener('message', (e) => { const iframe = document.getElementById("checkout_iframe"); if(iframe && e.data && e.data.type === 'checkout_full_screen'){ if (e.data.is_full_screen) { iframe.setAttribute("scrolling", "auto") } else { iframe.setAttribute("scrolling", "no") }; } }); function handleSetObserver() { let iframeEle = document.getElementById('checkout_iframe'); var observer = new MutationObserver((mutations) => { let is_dom_change = false; mutations.forEach((item) => { if (item.type === 'childList') { is_dom_change = true; } }); const scrollHeight = iframeEle.contentWindow.document.body.scrollHeight; if (is_dom_change) { iframeEle.style.height = `${scrollHeight ? scrollHeight : 1400 }px`; } }); const options = { "childList" : true, "attributes" : false, "characterData" : false, "subtree" : true, "attributeOldValue" : false, "characterDataOldValue" : false }; iframeEle.contentWindow.addEventListener('DOMContentLoaded', function(e) { try { if (iframeEle.contentWindow.document.readyState === "interactive") { observer.observe(iframeEle.contentWindow.document, options); const iframe = document.getElementById("checkout_iframe"); iframe.addEventListener("load", function(e) { if (iframe.contentWindow.location.href.indexOf('thank_you') > -1) { window.location.href = iframe.contentWindow.location.href; } }); } } catch (err) {} }); } function handleAddListenerCheckoutIframe() { let checkout_iframe_render_elem = document.getElementById('checkout_iframe_render_1634493037563'); checkout_iframe_render_elem.addEventListener('spz:dom-update', (e) => { handleSetObserver(); }) } handleAddListenerCheckoutIframe();