{"version":3,"sources":["components/app/pages/loading/LoadingPreview.module.css","components/app/branding/recommendation/RecommendationPreview.module.css","components/app/branding/input/InputPreview.module.css","components/app/branding/button/ButtonPreview.module.css","config.js","api/common.js","api/campaigns.js","api/email.js","api/questions.js","api/answers.js","api/store.js","api/recommendations.js","api/shopify.js","providers/AuthContext.js","api/auth.js","providers/APIContext.js","hooks/useBilling.js","providers/CampaignContext.js","providers/StoreContext.js","components/PrivateRoute.js","components/admin/AdminTopBar.js","components/app/AppTopBar.js","hooks/useCampaign.js","components/app/CampaignNavigation.js","components/app/AppNavigation.js","components/app/home/dashboard/DashboardSection.js","components/app/home/setup/SetupSection.js","components/app/home/HomePage.js","components/common/input/ControlledCheckbox.js","components/common/input/ControlledTextField.js","components/app/settings/klaviyo/KlaviyoLayout.js","components/common/input/ControlledColorSelection.js","components/common/input/ControlledDatePicker.js","components/common/input/ControlledSelect.js","components/app/settings/general/GeneralLayout.js","components/app/settings/sendgrid/SendgridLayout.js","components/app/settings/SettingsPage.js","components/app/campaigns/CampaignDeleteModal.js","components/app/campaigns/CampaignItem.js","components/app/branding/colors/ColorsPreview.js","components/app/branding/colors/ColorsStyling.js","components/app/branding/colors/ColorsLayout.js","components/common/helpText/image.js","components/common/helpText/fontFamily.js","components/app/branding/text/TextStyling.js","components/app/branding/text/TextPreview.js","components/app/branding/text/TextLayout.js","components/app/branding/button/ButtonPreview.js","components/app/branding/button/ButtonStyling.js","components/app/branding/button/ButtonLayout.js","components/app/branding/input/InputPreview.js","components/app/branding/input/InputStyling.js","components/app/branding/input/InputLayout.js","components/app/branding/recommendation/RecommendationPreview.js","components/app/branding/recommendation/RecommendationStyling.js","components/app/branding/recommendation/RecommendationLayout.js","components/app/branding/BrandingPage.js","components/app/email/EmailEditor.js","components/app/email/EmailAnnotation.js","components/app/email/EmailTestModal.js","components/app/email/EmailPage.js","components/app/pages/email/EmailPreview.js","components/app/pages/email/EmailEditing.js","components/app/pages/email/EmailLayout.js","components/app/pages/welcome/WelcomePreview.js","components/app/pages/welcome/WelcomeEditing.js","components/app/pages/welcome/WelcomeLayout.js","components/app/pages/loading/LoadingPreview.js","components/app/pages/loading/LoadingEditing.js","components/app/pages/loading/LoadingLayout.js","components/app/pages/results/ResultsPreview.js","components/app/pages/results/ResultsEditing.js","components/app/pages/results/ResultsLayout.js","components/app/pages/questionnaire/QuestionnaireEditing.js","components/app/pages/questionnaire/QuestionnaireLayout.js","components/app/pages/PagesPage.js","components/app/integrations/klaviyo/KlaviyoLayout.js","components/app/integrations/IntegrationsPage.js","components/app/campaigns/CampaignOverviewPage.js","components/app/questionnaire/QuestionSection.js","hooks/useQuestion.js","hooks/useAnswers.js","components/app/questionnaire/AnswerDeleteModal.js","components/app/questionnaire/AnswersItem.js","components/app/questionnaire/AnswerCreateModal.js","components/app/questionnaire/AnswersList.js","components/app/questionnaire/AnswersSection.js","components/app/questionnaire/QuestionLayout.js","components/app/questionnaire/QuestionPage.js","components/app/questionnaire/AnswerSection.js","components/common/utils/shopify/imageResize.js","hooks/useAnswer.js","hooks/useProducts.js","hooks/useTags.js","hooks/useCollections.js","components/app/questionnaire/ProductsList.js","components/app/questionnaire/ProductsSection.js","components/app/questionnaire/CollectionsList.js","components/app/questionnaire/CollectionsSection.js","components/app/questionnaire/TagsList.js","components/app/questionnaire/TagsSection.js","components/app/questionnaire/VariantsList.js","components/app/questionnaire/VariantsSection.js","components/app/questionnaire/RankingSection.js","components/app/questionnaire/AnswerLayout.js","components/app/questionnaire/AnswerPage.js","hooks/useQuestions.js","components/app/questionnaire/QuestionDeleteModal.js","components/app/questionnaire/QuestionsItem.js","components/app/questionnaire/QuestionCreateModal.js","components/app/questionnaire/QuestionsList.js","components/app/questionnaire/QuestionsSection.js","components/app/questionnaire/QuestionsLayout.js","components/app/questionnaire/QuestionsPage.js","components/app/questionnaire/QuestionnaireRouter.js","components/app/campaigns/CampaignPage.js","defaults/assets.js","defaults/config.js","defaults/style.js","defaults/text.js","components/app/campaigns/CampaignCreateModal.js","components/app/campaigns/CampaignsPage.js","components/app/customers/Recommendation.js","components/app/customers/ExportModal.js","components/app/customers/CustomersPage.js","components/app/faq/Question.js","components/app/faq/FAQPage.js","components/admin/AdminFrame.js","components/shopify/billing/BillingSuccessPage.js","components/app/AppFrame.js","api/oauth.js","components/shopify/access/AccessLayout.js","components/shopify/access/AccessPage.js","components/shopify/return/ReturnLayout.js","components/shopify/return/ReturnPage.js","components/shopify/login/LoginPage.js","components/shopify/ShopifyFrame.js","components/public/PublicTopBar.js","components/public/privacy/PrivacyPage.js","components/public/PublicFrame.js","components/AdminRoute.js","components/Router.js","theme.js","App.js","serviceWorker.js","index.js","components/app/branding/colors/ColorsPreview.module.css","components/app/pages/results/ResultsPreview.module.css","components/app/pages/email/EmailPreview.module.css","components/app/branding/text/TextPreview.module.css","components/app/pages/welcome/WelcomePreview.module.css"],"names":["module","exports","env","process","config","backend","frontend","Error","common","get","endpoint","token","a","params","console","log","axios","withCredentials","headers","Authorization","result","post","data","postAuth","put","message","patch","del","delete","id","campaign","emailPreview","question","fetchQuestions","questionnaire_id","answer","fetchAnswers","question_id","store","settings","fetchRecommendations","questionnaire","offset","limit","AuthContext","createContext","AuthProvider","children","local_auth_str","localStorage","getItem","local_auth","JSON","parse","expiresSoon","DateTime","fromISO","token_expiration","minus","hours","now","useState","auth","setAuthState","setAuth","useCallback","setItem","stringify","removeItem","logout","Provider","value","login","user","password","APIContext","React","api","fetchCampaigns","fetchCampaign","patchCampaign","createCampaign","deleteCampaign","postPreviewEmail","email","deleteQuestion","createQuestion","patchQuestion","deleteAnswer","createAnswer","patchAnswer","fetchStore","patchStore","patchStoreEmailSettings","fetchKlaviyoLists","validateDNS","exportRecommendations","fetchProducts","fetchCollections","fetchTags","fetchRecommendationsCounts","fetchStoreEmailSettings","createStoreEmailSettings","adminLogin","username","adminLogout","adminFetchStores","fetchStores","adminSelectStore","selectStore","campaign_id","fetchQuestion","fetchAnswer","refreshProducts","checkBilling","APIProvider","useContext","useBilling","useQuery","isLoading","billingStatus","billing_status","billingRedirectURL","billing_redirect_url","CampaignContext","CampaignProvider","campaignId","setCampaignId","StoreContext","StoreProvider","queryClient","useQueryClient","IS_EXTERNAL_LINK_REGEX","assetURL","asset","test","store_assets_url","resetStore","invalidateQueries","PrivateRoute","rest","component","isAdmin","token_is_admin","window","location","href","to","AdminTopBar","isUserMenuOpen","setIsUserMenuOpen","toggleIsUserMenuOpen","stores","storeContext","storeName","name","history","useHistory","mutation","useMutation","onSuccess","push","backToAdminPage","userMenu","TopBar","UserMenu","actions","items","content","icon","ArrowLeftMinor","onAction","LogOutMinor","detail","open","onToggle","isSearchActive","setIsSearchActive","searchValue","setSearchValue","handleSearchResultsDismiss","handleSearchChange","length","storesActionList","filter","includes","map","mutate","selectStoreFromSearch","slice","searchResultsMarkup","ActionList","disabled","searchFieldMarkup","SearchField","onChange","onFocus","placeholder","showFocusBorder","searchResultsVisible","searchField","searchResults","onSearchResultsDismiss","AppTopBar","props","returnToShopify","myshopify_domain","shop_owner","showNavigationToggle","onNavigationToggle","useCampaign","changeCampaign","toastActive","setToastActive","form","reset","error","useForm","defaultValues","campaignMutation","mutationKey","patchedCampaign","setQueryData","oldCampaigns","c","slug","isSaving","isDirty","formState","editMarkup","isSuccess","Toast","onDismiss","when","saveAction","loading","handleSubmit","CampaignNavigation","Loading","Navigation","Section","label","url","ImageWithTextMajor","exactMatch","TextBlockMajor","QuestionMarkMajor","IllustrationMajor","EmailNewsletterMajor","ChannelsMajor","AppNavigation","useLocation","campaignSection","home","matchPaths","HomeMajor","campaigns","ColumnWithTextMajor","customers","CustomersMajor","SettingsMajor","faq","QuestionMarkInverseMajor","primarySection","secondarySection","tertiarySection","pathname","DashboardSection","counts","isError","Layout","Stack","vertical","TextContainer","Heading","distribution","spacing","Card","sectioned","SkeletonDisplayText","size","DisplayText","total","TextStyle","variation","Button","plain","total_distinct_email","SetupSection","storeMutation","onboarding_complete","List","type","Item","Link","CalloutCard","title","primaryAction","fill","style","position","paddingBottom","height","width","src","frameBorder","webkitallowfullscreen","mozallowfullscreen","allowFullScreen","top","left","HomePage","Page","FooterHelp","external","ControlledCheckbox","defaultValue","helpText","control","useFormContext","render","field","onBlur","ref","Checkbox","checked","inputRef","ControlledTextField","rules","errorMessage","multiline","monospaced","suffix","maxLength","showCharacterCount","autoComplete","errors","TextField","toString","KlaviyoLayout","watchEnableKlaviyo","watch","klaviyoDisabled","undefined","enable_klaviyo","AnnotatedSection","description","FormLayout","klaviyo_public_token","klaviyo_private_token","ControlledColorSelection","pattern","__type__","Group","hexToRgb","color","repeatHex","hex1","hex2","repeat","red","parseInt","green","blue","hexToRgbSafe","ColorPicker","fullWidth","rgbToHsb","hsbToHex","defaultProps","ControlledDatePicker","defaultYear","year","defaultMonth","month","setValue","trigger","setDate","handleMonthChange","DatePicker","newValue","onMonthChange","selected","ControlledSelect","options","setDefaultValue","Select","isNaN","GeneralLayout","campaignsSelection","selectPlaceholder","default_questionnaire_id","SendgridLayout","refetchInterval","setRefetchInterval","reValidateDNS","refetch","validation","handleToggle","setOpen","email_settings","sendgrid_domain_valid","sendgrid_dns","mail_cname","validation_result","dkim1","dkim2","useEffect","valid","dnsStatus","Object","values","entry","toUpperCase","host","CircleTickOutlineMinor","CircleMinusOutlineMinor","status","reason","enable_email","domain","onClick","ariaExpanded","ariaControls","Collapsible","transition","duration","timingFunction","expandOnPrint","ResourceList","renderItem","ResourceItem","Icon","source","from_email","email_from_name","email_bcc","SettingsPage","tabs","layout","handleTabChange","useParams","tab","tabID","findIndex","t","Tabs","onSelect","CampaignDeleteModal","deletion","onClose","Modal","DeleteMinor","destructive","secondaryActions","Form","CampaignItem","index","thumbnail","assets","welcome","image","updated_at","deleteOpen","setDeleteOpen","shortcutActions","shopify_store","path_prefix","lastEdit","toRelative","key","media","Thumbnail","alt","accessibilityLabel","Radium","val","Subheading","className","styles","container","primary","backgroundColor","secondary","ColorsStyling","ColorsLayout","marginBottom","fontFamily","TextStyling","condensed","fontFamilyHelpText","header","fontSize","subheader","text","mobileSection","padding","fontWeight","textTransform","borderWidth","borderColor","ButtonStyling","required","ButtonLayout","input","InputStyling","InputLayout","img","product","price","RecommendationStyling","RecommendationLayout","BrandingPage","TextLayout","EmailEditor","emailSubjectInitial","email_subject","useCustomTemplateInitial","custom_email_template","emailTemplateInitial","email_template","watchCustomEmailTemplate","useCustomTemplate","EmailAnnotation","EmailTestModal","active","handleCancel","emailTemplateForm","sendTestEmail","sendDisabled","emailTemplate","getValues","subject","template","use_template","EmailPage","testEmailModalOpen","setTestEmailModalOpen","handleTestEmailModalCancel","FollowUpEmailMajor","askName","ask_name","namePlaceholder","name_placeholder","emailPlaceholder","email_placeholder","button","confirm_button_text","continueWithoutEmail","continue_without_email","continueWithoutEmailText","continue_without_email_text","imagecontainer","variables","lineHeight","cursor","EmailEditing","watchAskForName","askForName","watchNameRequired","nameRequired","name_required","watchEmailRequired","emailRequired","email_required","watchContinueWithoutEmail","imageHelpText","name_error","email_error","EmailLayout","setActive","toggleActive","activator","large","WelcomeEditing","watchSkipWelcome","skipWelcome","skip","WelcomeLayout","calculation","spinner","LoadingEditing","min_waiting_time_ms","LoadingLayout","results","restart","prefix","from","postfix","currency","e","i","tile","ResultsEditing","show_more","results_soft_limit","results_hard_limit","ResultsLayout","QuestionnaireEditing","QuestionnaireLayout","Pages","retry","klaviyoLists","list","list_name","list_id","Banner","action","klaviyo_event","klaviyo_list","IntegrationsPage","CampaignOverviewPage","campaignURL","QuestionSection","useQuestion","newQuestion","questions","activateToast","save","isSaved","useAnswers","onCreationSuccess","questionId","order","answer_order","answers","orderedAnswers","forEach","find","q","orderAnswers","klaviyo_tag","replace","toLowerCase","substring","products","newAnswer","oldQuestion","create","isCreating","isCreated","newOrder","deletedAnswerID","isDeleting","isDeleted","reOrder","isMoving","isMoved","move","idx","AnswerDeleteModal","AnswersItem","answerText","useRouteMatch","draggableId","provided","snapshot","innerRef","draggableProps","isDragging","background","alignment","wrap","dragHandleProps","Tooltip","DragHandleMinor","QuestionCreateModal","handleCreate","onSubmit","AnswersList","createOpen","setCreateOpen","onCreate","onDragEnd","destination","droppableId","droppableProps","resourceName","singular","plural","alternateTool","emptyState","EmptyState","heading","AnswerCreateModal","AnswersSection","QuestionLayout","QuestionPage","indexOf","breadcrumbs","AnswerSection","resize","image_url","valid_sizes","PRODUCT","VARIANT","COLLECTION","TAG","useAnswer","formContext","newForm","selectedProducts","startsWith","selectedCollections","selectedTags","selectedVariants","useFieldArray","hasFilters","replaceProducts","newProducts","p","concat","replaceCollections","newCollections","replaceTags","newTags","replaceVariants","v","removeAllProducts","useProducts","setTimeout","refresh","isRefreshing","isRefreshed","refreshToast","useTags","tags","useCollections","collections","ProductsList","aid","isLoadingProducts","isLoadingTags","isLoadingCollections","queryValue","setQueryValue","collectionSelection","setCollectionSelection","tagSelection","setTagSelection","handleCollectionSelectionChange","handleTagSelectionChange","filteredProducts","tag","productTag","collection","handle","colelctionHandle","handleQueryValueChange","handleQueryValueRemove","filters","ChoiceList","titleHidden","choices","allowMultiple","shortcut","product_count","setOffset","totalItemsCount","idForItem","image_alt","SkeletonThumbnail","selectable","selectedItems","onSelectionChange","filterControl","Filters","onQueryChange","onQueryClear","paddingLeft","RefreshMinor","Pagination","hasPrevious","onPrevious","prev","hasNext","onNext","ProductsSection","CollectionsList","collection_id","CollectionsSection","TagsList","TagsSection","VariantsList","variants","flatMap","variant","product_id","product_title","product_tags","product_collections","filteredVariants","VariantsSection","RankingSection","qid","isFiltering","filter_products","card","primaryFooterAction","AnswerLayout","AnswerPage","useQuestions","default_question_order","orderedQuestions","orderQuestions","klaviyo_alias","oldCampaign","deletedQuestionID","QuestionDeleteModal","multiple_choice","optional","questionText","Badge","QuestionsItem","close","QuestionsList","QuestionsSection","QuestionsLayout","QuestionsPage","QuestionnaireRouter","path","CampaignPage","PagesPage","next","continue","previous","creation","defaultText","defaultStyle","defaultConfig","defaultAssets","Math","random","substr","CampaignsPage","isFetching","CampaignCreateModal","Recommendation","recommendation","created_at","email_sent","avatar","md5","trim","issued","campaignBadge","emailSentBadge","nameDisplay","emailDisplay","Avatar","customer","ExportModal","defaultDateRage","start","months","toJSDate","end","isLoadingCampaings","campaignsOptions","postExport","fileName","mimeType","document","createElement","navigator","msSaveBlob","Blob","URL","createObjectURL","setAttribute","body","appendChild","click","removeChild","encodeURIComponent","download","exportParams","Number","isInteger","date_to","fromJSDate","dateRange","endOf","toISO","date_from","startOf","multiMonth","allowRange","CustomersPage","enrichedRecommendations","setEnrichedRecommendations","recommendations","count","exportModalOpen","setExportlModalOpen","handleExportModalCancel","ExportMinor","showHeader","Question","video","hash","ChevronUpMinor","ChevronDownMinor","QUESTIONS","AnalyticsPage","k","AdminFrame","Frame","topBar","BillingSuccessPage","marginTop","Spinner","AppFrame","mobileNavigationActive","setMobileNavigationActive","toggleMobileNavigationActive","navigation","showMobileNavigation","onNavigationDismiss","FAQPage","shop","timestamp","hmac","payload","AccessLayout","AccessPage","URLSearchParams","search","authorize","auth_str","authorize_url","ReturnLayout","ReturnPage","code","state","callback","LoginPage","ShopifyFrame","PrivacyPage","element","PublicFrame","PublicTopBar","AdminRoute","invalidLogin","setInvalidLogin","res","onError","InlineError","fieldID","submit","RootRouter","colors","backgroundLighter","logo","topBarSource","QueryClient","defaultOptions","queries","refetchOnWindowFocus","target","rel","App","client","AppProvider","theme","linkComponent","i18n","enTranslations","Router","initialIsOpen","Boolean","hostname","match","backup","warn","msg","supressedWarnings","some","apply","arguments","ReactDOM","StrictMode","getElementById","serviceWorker","ready","then","registration","unregister","catch"],"mappings":"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","file":"static/js/main.59ba817c.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"imagecontainer\":\"LoadingPreview_imagecontainer__1-0NX\",\"image\":\"LoadingPreview_image__QpZ29\",\"header\":\"LoadingPreview_header__2O0H4\",\"subheader\":\"LoadingPreview_subheader__2MhpU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"img\":\"RecommendationPreview_img__3UH02\",\"product\":\"RecommendationPreview_product__1S_bp\",\"price\":\"RecommendationPreview_price__3Vv2f\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"input\":\"InputPreview_input__2Yc1H\",\"input-error\":\"InputPreview_input-error__2K-nY\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"preview-button\":\"ButtonPreview_preview-button__JbVK9\"};","const alex = {\n backend: 'https://api.alex.meja.io/',\n frontend: 'https://alex.meja.io/',\n};\n\nconst sven = {\n backend: 'https://api.sven.meja.io/',\n frontend: 'https://sven.meja.io/',\n};\n\nconst elephbo = {\n backend: 'https://api.elephbo.meja.io/',\n frontend: 'https://app.elephbo.meja.io/',\n};\n\nconst staging = {\n backend: 'https://api.staging.meja.io/',\n frontend: 'https://app.staging.meja.io/',\n};\n\nconst production = {\n backend: 'https://api.app.meja.io/',\n frontend: 'https://app.meja.io/',\n};\n\nconst env = process.env.REACT_APP_ENV;\n/* eslint-disable */\nconst config =\n env === 'alex'\n ? alex\n : env === 'sven'\n ? sven\n : env === 'elephbo'\n ? elephbo\n : env === 'staging'\n ? staging\n : env === 'production'\n ? production\n : null;\n/* eslint-enable */\nif (!config) {\n throw new Error(\n 'Invalid configuration, please specify environment in REACT_APP_ENV',\n );\n}\nif (env === 'dev') {\n throw new Error('The dev env is currently not nsupported');\n}\n\nconst common = {\n env,\n};\n\nexport default {\n ...common,\n ...config,\n};\n","import axios from 'axios';\n\nimport config from '../config';\n\nexport async function get(endpoint, token, params = null) {\n console.log('GET from ', endpoint, 'with Bearer token', token);\n\n const result = await axios.get(config.backend + endpoint, {\n withCredentials: true,\n headers: { Authorization: `Bearer ${token}` },\n params,\n });\n\n console.log('GET result is', result);\n return result;\n}\n\nexport async function post(endpoint, data, token) {\n console.log('POSTing to', endpoint, 'with data', data, 'and token', token);\n\n const result = await axios.post(config.backend + endpoint, data, {\n withCredentials: true,\n headers: { Authorization: `Bearer ${token}` },\n });\n\n console.log('POST result is', result);\n return result;\n}\n\nexport async function postAuth(endpoint, data) {\n console.log('POSTing to', endpoint, 'with data', data);\n\n const result = await axios.post(config.backend + endpoint, data, {\n withCredentials: true,\n });\n\n console.log('POST result is', result);\n return result;\n}\n\nexport async function put(endpoint, data, token = null) {\n const message = `PUTing to ${endpoint} with data ${data}${\n token ? 'and token ' + token : ''\n }`;\n console.log(message);\n\n const result = await axios.put(config.backend + endpoint, data, {\n withCredentials: true,\n headers: { Authorization: `Bearer ${token}` },\n });\n\n console.log('PUT result is', result);\n return result;\n}\n\nexport async function patch(endpoint, data, token) {\n console.log('PATCHing to', endpoint, 'with data', data, 'and token', token);\n\n const result = await axios.patch(config.backend + endpoint, data, {\n withCredentials: true,\n headers: { Authorization: `Bearer ${token}` },\n });\n\n console.log('PATCH result is', result);\n return result;\n}\n\nexport async function del(endpoint, token) {\n console.log('DELETEing to', endpoint, 'with token', token);\n\n const result = await axios.delete(config.backend + endpoint, {\n withCredentials: true,\n headers: { Authorization: `Bearer ${token}` },\n });\n\n console.log('DELETE result is', result);\n return result;\n}\n","import { get, patch, post, del } from './common';\n\nexport async function fetchCampaigns(token) {\n const { data } = await get('api/v2/questionnaires/', token);\n return data;\n}\n\nexport async function fetchCampaign(id, token) {\n const { data } = await get(`api/v2/questionnaires/${id}`, token);\n return data;\n}\n\nexport async function patchCampaign(id, campaign, token) {\n const { data } = await patch(`api/v2/questionnaires/${id}`, campaign, token);\n return data;\n}\n\nexport async function createCampaign(campaign, token) {\n const { data } = await post(`api/v2/questionnaires/`, campaign, token);\n return data;\n}\n\nexport async function deleteCampaign(id, token) {\n const { data } = await del(`api/v2/questionnaires/${id}`, token);\n return data;\n}\n","import { post } from './common';\n\nexport async function postPreviewEmail(id, emailPreview, token) {\n const { data } = await post(\n `api/v2/questionnaires/${id}/preview-email`,\n emailPreview,\n token,\n );\n return data;\n}\n","import { del, get, patch, post } from './common';\n\nexport async function patchQuestion(id, question, token) {\n const { data } = await patch(`api/v2/questions/${id}`, question, token);\n return data;\n}\n\nexport async function createQuestion(question, token) {\n const { data } = await post(`api/v2/questions/`, question, token);\n return data;\n}\n\nexport async function deleteQuestion(id, token) {\n const { data } = await del(`api/v2/questions/${id}`, token);\n return data;\n}\n\nexport async function fetchQuestion(id, token) {\n const { data } = await get(`api/v2/questions/${id}`, token);\n return data;\n}\n\nexport async function fetchQuestions(token, questionnaire_id = null) {\n const { data } = await get(`api/v2/questions`, token, { questionnaire_id });\n return data;\n}\n","import { del, patch, post, get } from './common';\n\nexport async function patchAnswer(id, answer, token) {\n const { data } = await patch(`api/v2/answers/${id}`, answer, token);\n return data;\n}\n\nexport async function createAnswer(answer, token) {\n const { data } = await post(`api/v2/answers/`, answer, token);\n return data;\n}\n\nexport async function deleteAnswer(id, token) {\n const { data } = await del(`api/v2/answers/${id}`, token);\n return data;\n}\n\nexport async function fetchAnswer(id, token) {\n const { data } = await get(`api/v2/answers/${id}`, token);\n return data;\n}\n\nexport async function fetchAnswers(token, question_id = null) {\n const { data } = await get(`api/v2/answers`, token, { question_id });\n return data;\n}\n","import { get, post, patch } from './common';\n\nexport async function fetchStore(token) {\n const { data } = await get('api/v2/store/', token);\n return data;\n}\n\nexport async function patchStore(store, token) {\n const { data } = await patch('api/v2/store/', store, token);\n return data;\n}\n\nexport async function fetchStoreEmailSettings(token) {\n const { data } = await get('api/v2/store/email-settings/', token);\n return data;\n}\n\nexport async function patchStoreEmailSettings(settings, token) {\n const { data } = await patch('api/v2/store/email-settings/', settings, token);\n return data;\n}\n\nexport async function createStoreEmailSettings(settings, token) {\n const { data } = await post(`api/v2/store/email-settings/`, settings, token);\n return data;\n}\n\nexport async function fetchKlaviyoLists(token) {\n const { data } = await get(\n 'api/v2/store/email-settings/klaviyo-lists/',\n token,\n );\n return data;\n}\n\nexport async function validateDNS(token) {\n const { data } = await post(\n 'api/v2/store/email-settings/validate',\n null,\n token,\n );\n return data;\n}\n\nexport async function refreshProducts(token) {\n const { data } = await post('api/v2/store/refresh-products', null, token);\n return data;\n}\n\nexport async function checkBilling(token) {\n const { data } = await post('api/v2/store/check-billing', null, token);\n return data;\n}\n","import { get, post } from './common';\n\nexport async function fetchRecommendations(\n token,\n questionnaire = null,\n offset = null,\n limit = null,\n) {\n const { data } = await get('api/v2/recommendations/', token, {\n questionnaire,\n offset,\n limit,\n });\n return data;\n}\n\nexport async function exportRecommendations(params, token) {\n const { data } = await post(\n 'api/v2/recommendations/export-csv',\n params,\n token,\n );\n return data;\n}\n\nexport async function fetchRecommendationsCounts(token) {\n const { data } = await get('api/v2/recommendations/counts/', token);\n return data;\n}\n","import { get } from './common';\n\nexport async function fetchProducts(token) {\n const { data } = await get('api/v2/shopify/products/', token);\n return data;\n}\n\nexport async function fetchCollections(token) {\n const { data } = await get('api/v2/shopify/collections/', token);\n return data;\n}\n\nexport async function fetchTags(token) {\n const { data } = await get('api/v2/shopify/tags/', token);\n return data;\n}\n","import React, { createContext, useState, useCallback } from 'react';\n\nimport { DateTime } from 'luxon';\n\nimport config from '../config';\n\nexport const AuthContext = createContext(null);\n\nexport const AuthProvider = ({ children }) => {\n const local_auth_str = localStorage.getItem(config.env + '_auth');\n const local_auth = JSON.parse(local_auth_str);\n const expiresSoon =\n DateTime.fromISO(local_auth?.token_expiration).minus({ hours: 1 }) <\n DateTime.now();\n const [auth, setAuthState] = useState(\n local_auth && !expiresSoon ? local_auth : null,\n );\n\n const setAuth = useCallback((auth) => {\n setAuthState(auth);\n if (auth) localStorage.setItem(config.env + '_auth', JSON.stringify(auth));\n else localStorage.removeItem(config.env + '_auth');\n }, []);\n\n const logout = useCallback(() => {\n setAuth(null);\n }, [setAuth]);\n\n return (\n \n {children}\n \n );\n};\n\nexport default AuthContext;\n","import { postAuth, get, put } from './common';\n\nexport async function login(user, password, store = null) {\n const result = await postAuth('api/v2/auth/admin_login', {\n user,\n password,\n store,\n });\n return result;\n}\n\nexport async function logout() {\n const result = await postAuth('api/v2/auth/logout');\n return result.data;\n}\n\nexport async function fetchStores(token) {\n const { data } = await get('api/v2/auth/admin_stores', token);\n return data;\n}\n\nexport async function selectStore(store, token) {\n const { data } = await put(\n 'api/v2/auth/admin_stores/selected',\n { store },\n token,\n );\n return data;\n}\n","import React, { useContext } from 'react';\nimport {\n fetchCampaign,\n fetchCampaigns,\n patchCampaign,\n createCampaign,\n deleteCampaign,\n} from '../api/campaigns';\nimport { postPreviewEmail } from '../api/email';\nimport {\n createQuestion,\n deleteQuestion,\n fetchQuestion,\n fetchQuestions,\n patchQuestion,\n} from '../api/questions';\nimport {\n createAnswer,\n deleteAnswer,\n patchAnswer,\n fetchAnswer,\n fetchAnswers,\n} from '../api/answers';\nimport {\n fetchKlaviyoLists,\n fetchStore,\n patchStore,\n patchStoreEmailSettings,\n fetchStoreEmailSettings,\n createStoreEmailSettings,\n validateDNS,\n refreshProducts,\n checkBilling,\n} from '../api/store';\nimport {\n exportRecommendations,\n fetchRecommendations,\n fetchRecommendationsCounts,\n} from '../api/recommendations';\nimport { fetchCollections, fetchProducts, fetchTags } from '../api/shopify';\n\nimport AuthContext from './AuthContext';\nimport { login, logout, fetchStores, selectStore } from '../api/auth';\n\nexport const APIContext = React.createContext(null);\n\nconst api = (token) => ({\n fetchCampaigns: () => fetchCampaigns(token),\n fetchCampaign: (id) => fetchCampaign(id, token),\n patchCampaign: (id, campaign) => patchCampaign(id, campaign, token),\n createCampaign: (campaign) => createCampaign(campaign, token),\n deleteCampaign: (id) => deleteCampaign(id, token),\n postPreviewEmail: (id, email) => postPreviewEmail(id, email, token),\n deleteQuestion: (id) => deleteQuestion(id, token),\n createQuestion: (question) => createQuestion(question, token),\n patchQuestion: (id, question) => patchQuestion(id, question, token),\n deleteAnswer: (id) => deleteAnswer(id, token),\n createAnswer: (answer) => createAnswer(answer, token),\n patchAnswer: (id, answer) => patchAnswer(id, answer, token),\n fetchStore: () => fetchStore(token),\n patchStore: (store) => patchStore(store, token),\n patchStoreEmailSettings: (settings) =>\n patchStoreEmailSettings(settings, token),\n fetchKlaviyoLists: () => fetchKlaviyoLists(token),\n validateDNS: () => validateDNS(token),\n fetchRecommendations: (campaign = null, offset = null, limit = null) =>\n fetchRecommendations(token, campaign, offset, limit),\n exportRecommendations: (params) => exportRecommendations(params, token),\n fetchProducts: () => fetchProducts(token),\n fetchCollections: () => fetchCollections(token),\n fetchTags: () => fetchTags(token),\n fetchRecommendationsCounts: () => fetchRecommendationsCounts(token),\n fetchStoreEmailSettings: () => fetchStoreEmailSettings(token),\n createStoreEmailSettings: (settings) =>\n createStoreEmailSettings(settings, token),\n adminLogin: (username, password, store = null) =>\n login(username, password, store),\n adminLogout: () => logout(),\n adminFetchStores: () => fetchStores(token),\n adminSelectStore: (id) => selectStore(id, token),\n fetchQuestions: (campaign_id = null) => fetchQuestions(token, campaign_id),\n fetchQuestion: (id) => fetchQuestion(id, token),\n fetchAnswers: (question_id = null) => fetchAnswers(token, question_id),\n fetchAnswer: (id) => fetchAnswer(id, token),\n refreshProducts: () => refreshProducts(token),\n checkBilling: () => checkBilling(token),\n});\n\nexport const APIProvider = ({ children }) => {\n const { auth } = useContext(AuthContext);\n const token = auth?.token;\n\n return (\n {children}\n );\n};\n\nexport default APIContext;\n","import { useContext } from 'react';\nimport { useQuery } from 'react-query';\n\nimport APIContext from '../providers/APIContext';\n\nexport default function useBilling() {\n const { checkBilling } = useContext(APIContext);\n const { isLoading, data } = useQuery('checkBilling', checkBilling);\n\n return {\n isLoading,\n billingStatus: data?.billing_status,\n billingRedirectURL: data?.billing_redirect_url,\n };\n}\n","import React, { useState } from 'react';\n\nexport const CampaignContext = React.createContext(null);\n\nexport const CampaignProvider = ({ children }) => {\n const [campaignId, setCampaignId] = useState(null);\n\n return (\n \n {children}\n \n );\n};\n\nexport default CampaignContext;\n","import React, { useContext } from 'react';\nimport { useQuery, useQueryClient } from 'react-query';\nimport APIContext from './APIContext';\n\nexport const StoreContext = React.createContext(null);\n\nexport const StoreProvider = ({ children }) => {\n const { fetchStore } = useContext(APIContext);\n const { isLoading, data: store } = useQuery('fetchStore', fetchStore);\n\n const queryClient = useQueryClient();\n const resetStore = () => queryClient.invalidateQueries('fetchStore');\n\n const IS_EXTERNAL_LINK_REGEX = /^(?:[a-z][a-z\\d+.-]*:|\\/\\/)/;\n const assetURL = (asset) =>\n IS_EXTERNAL_LINK_REGEX.test(asset)\n ? asset\n : `${store?.store_assets_url}${asset}`;\n\n return (\n \n {children}\n \n );\n};\n\nexport default StoreContext;\n","import React, { useContext } from 'react';\nimport { Route, Redirect } from 'react-router';\nimport useBilling from '../hooks/useBilling';\n\nimport { AuthContext } from '../providers/AuthContext';\nimport { CampaignProvider } from '../providers/CampaignContext';\nimport { StoreProvider } from '../providers/StoreContext';\n\nfunction PrivateRoute({ children, component, ...rest }) {\n const { auth } = useContext(AuthContext);\n const { isLoading, billingStatus, billingRedirectURL } = useBilling();\n const { token_is_admin: isAdmin } = auth || {};\n\n if (!auth) return ;\n\n if (!isAdmin && isLoading) return <>;\n\n if (!isAdmin && billingStatus === 'pending') {\n window.location.href = billingRedirectURL;\n return 'Meja subscription pending. Redirecting to Shopify...';\n }\n\n return (\n \n \n {children}\n \n \n );\n}\n\nexport default PrivateRoute;\n","import React, { useState, useCallback, useContext } from 'react';\nimport { TopBar, ActionList } from '@shopify/polaris';\nimport { ArrowLeftMinor, LogOutMinor } from '@shopify/polaris-icons';\n\nimport { AuthContext } from '../../providers/AuthContext';\nimport APIContext from '../../providers/APIContext';\nimport { useMutation, useQuery } from 'react-query';\nimport { useHistory } from 'react-router-dom';\nimport StoreContext from '../../providers/StoreContext';\n\nfunction AdminTopBar() {\n const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);\n const toggleIsUserMenuOpen = useCallback(\n () => setIsUserMenuOpen((isUserMenuOpen) => !isUserMenuOpen),\n [],\n );\n\n const { logout } = useContext(AuthContext);\n\n const { adminFetchStores: fetchStores, adminSelectStore: selectStore } =\n useContext(APIContext);\n\n const { data: stores } = useQuery('fetchStores', fetchStores);\n\n const storeContext = useContext(StoreContext);\n const storeName = storeContext?.store?.name;\n const resetStore = storeContext?.resetStore;\n const history = useHistory();\n\n const mutation = useMutation(({ id }) => selectStore(id), {\n onSuccess: () => {\n history.push(`/app`);\n if (storeContext) resetStore();\n },\n });\n\n const backToAdminPage = useCallback(() => history.push(`/admin`), [history]);\n\n const userMenu = (\n \n );\n\n const [isSearchActive, setIsSearchActive] = useState(false);\n const [searchValue, setSearchValue] = useState('');\n\n const handleSearchResultsDismiss = useCallback(() => {\n setIsSearchActive(false);\n setSearchValue('');\n }, []);\n\n const handleSearchChange = useCallback((value) => {\n setSearchValue(value);\n setIsSearchActive(value.length > 0);\n }, []);\n\n const selectStoreFromSearch = (store) => {\n mutation.mutate(store);\n handleSearchResultsDismiss();\n };\n\n const storesActionList = stores\n ?.filter((store) => store.name.includes(searchValue))\n .map((store) => ({\n content: store.name,\n onAction: () => selectStoreFromSearch(store),\n }))\n .slice(0, 10);\n\n const searchResultsMarkup = (\n 0\n ? storesActionList\n : [{ content: 'No stores found', disabled: true }]\n }\n />\n );\n\n const searchFieldMarkup = (\n setIsSearchActive(true)}\n value={searchValue}\n placeholder=\"Select Store\"\n showFocusBorder\n />\n );\n\n return (\n \n );\n}\n\nexport default AdminTopBar;\n","import React, { useState, useCallback, useContext } from 'react';\nimport { TopBar } from '@shopify/polaris';\nimport { ArrowLeftMinor, LogOutMinor } from '@shopify/polaris-icons';\nimport AuthContext from '../../providers/AuthContext';\nimport AdminTopBar from '../admin/AdminTopBar';\n\nfunction AppTopBar(props) {\n const [isUserMenuOpen, setIsUserMenuOpen] = useState(false);\n const toggleIsUserMenuOpen = useCallback(\n () => setIsUserMenuOpen((isUserMenuOpen) => !isUserMenuOpen),\n [],\n );\n\n const { auth, logout } = useContext(AuthContext);\n const { token_is_admin: isAdmin } = auth || {};\n\n const returnToShopify = useCallback(\n () =>\n (window.location.href = `https://${auth?.store.myshopify_domain}/admin/apps`),\n [auth],\n );\n\n const userMenu =\n auth && !isAdmin ? (\n \n ) : (\n <>\n );\n\n return isAdmin ? (\n \n ) : (\n \n );\n}\n\nexport default AppTopBar;\n","import { Toast } from '@shopify/polaris';\nimport React, { useContext, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useQuery, useMutation, useQueryClient } from 'react-query';\nimport { Prompt, useHistory } from 'react-router-dom';\nimport APIContext from '../providers/APIContext';\nimport CampaignContext from '../providers/CampaignContext';\n\nexport default function useCampaign() {\n const { campaignId: id, setCampaignId: changeCampaign } =\n useContext(CampaignContext);\n\n const { fetchCampaign, patchCampaign } = useContext(APIContext);\n\n const queryClient = useQueryClient();\n\n const history = useHistory();\n\n const [toastActive, setToastActive] = useState(true);\n\n const dismissToast = () => setToastActive(false);\n\n const activateToast = () => setToastActive(true);\n\n const {\n isLoading,\n error,\n data: campaign,\n } = useQuery(['fetchCampaign', id], () => fetchCampaign(id), {\n onSuccess: (campaign) => form.reset(campaign),\n });\n\n const form = useForm({ defaultValues: campaign });\n\n const mutation = useMutation(\n (campaignMutation) => patchCampaign(campaign.id, campaignMutation),\n {\n mutationKey: 'patchCampaign',\n onSuccess: (patchedCampaign) => {\n queryClient.setQueryData(['fetchCampaigns'], (oldCampaigns) => [\n ...oldCampaigns.filter((c) => c.id !== patchedCampaign.id),\n patchedCampaign,\n ]);\n queryClient.setQueryData(\n ['fetchCampaign', campaign.id],\n patchedCampaign,\n );\n form.reset(patchedCampaign);\n if (campaign.slug !== patchedCampaign.slug)\n history.push(`/app/projects/${patchedCampaign.slug}`);\n activateToast();\n },\n },\n );\n\n const patch = (campaign) => mutation.mutate(campaign);\n\n const isSaving = mutation.isLoading;\n\n const isDirty = form.formState.isDirty;\n\n const editMarkup = (\n <>\n {mutation.isSuccess && toastActive && (\n \n )}\n \n \n );\n\n const saveAction = {\n content: 'Save and Publish',\n loading: mutation.isLoading,\n disabled: !isDirty || mutation.isLoading,\n onAction: form.handleSubmit(patch),\n };\n\n return {\n campaign,\n isLoading,\n isSaving,\n error,\n patch,\n form,\n editMarkup,\n changeCampaign,\n saveAction,\n };\n}\n","import React from 'react';\nimport { Navigation, Loading } from '@shopify/polaris';\nimport {\n IllustrationMajor,\n EmailNewsletterMajor,\n ImageWithTextMajor,\n TextBlockMajor,\n QuestionMarkMajor,\n ChannelsMajor,\n} from '@shopify/polaris-icons';\n\nimport useCampaign from '../../hooks/useCampaign';\n\nexport default function CampaignNavigation() {\n const { campaign, isLoading } = useCampaign();\n\n if (isLoading) return ;\n\n return (\n \n );\n}\n","import React, { useContext } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport { Navigation } from '@shopify/polaris';\nimport {\n HomeMajor,\n ColumnWithTextMajor,\n CustomersMajor,\n SettingsMajor,\n QuestionMarkInverseMajor,\n} from '@shopify/polaris-icons';\n\nimport CampaignContext from '../../providers/CampaignContext';\nimport CampaignNavigation from './CampaignNavigation';\n\nfunction AppNavigation() {\n const location = useLocation();\n\n const { campaignId } = useContext(CampaignContext);\n\n const campaignSection = campaignId ? : <>;\n\n const home = {\n url: '/app',\n matchPaths: ['/app/home'],\n exactMatch: true,\n label: 'Home',\n icon: HomeMajor,\n };\n\n const campaigns = {\n url: '/app/projects',\n label: 'Projects',\n icon: ColumnWithTextMajor,\n exactMatch: true,\n };\n\n const customers = {\n url: '/app/customers',\n label: 'Customers',\n icon: CustomersMajor,\n };\n\n const settings = {\n url: '/app/settings',\n label: 'Settings',\n icon: SettingsMajor,\n };\n\n const faq = {\n url: '/app/faq',\n label: 'FAQ',\n icon: QuestionMarkInverseMajor,\n };\n\n const primarySection = campaignId ? (\n \n ) : (\n \n );\n const secondarySection = campaignId ? (\n \n ) : (\n <>\n );\n const tertiarySection = ;\n\n return (\n \n {primarySection}\n {campaignSection}\n {secondarySection}\n {tertiarySection}\n \n );\n}\n\nexport default AppNavigation;\n","import React, { useContext } from 'react';\nimport {\n Stack,\n Card,\n Heading,\n Button,\n Layout,\n TextContainer,\n DisplayText,\n TextStyle,\n SkeletonDisplayText,\n} from '@shopify/polaris';\nimport { useQuery } from 'react-query';\nimport APIContext from '../../../../providers/APIContext';\n\nfunction DashboardSection() {\n const { fetchRecommendationsCounts } = useContext(APIContext);\n\n const {\n isLoading,\n data: counts,\n isError,\n } = useQuery('fetchRecommendationsCounts', fetchRecommendationsCounts);\n\n return (\n \n \n \n Here’s How Your Projects Have Been Doing\n \n\n \n \n \n {isLoading || isError ? (\n \n ) : (\n {counts[0].total}\n )}\n \n Recommendations were made\n \n \n \n \n \n \n \n \n {isLoading || isError ? (\n \n ) : (\n \n {counts[0].total_distinct_email}\n \n )}\n \n Unique e-mail addresses collected\n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default DashboardSection;\n","import React, { useContext } from 'react';\nimport {\n Layout,\n CalloutCard,\n List,\n Link,\n TextStyle,\n Stack,\n} from '@shopify/polaris';\n\nimport { useMutation, useQuery, useQueryClient } from 'react-query';\n\nimport APIContext from '../../../../providers/APIContext';\nimport StoreContext from '../../../../providers/StoreContext';\n\nfunction SetupSection() {\n const { fetchCampaigns, patchStore } = useContext(APIContext);\n\n const { store, isLoading } = useContext(StoreContext);\n\n const { data: campaigns = [] } = useQuery('fetchCampaigns', fetchCampaigns);\n const queryClient = useQueryClient();\n const storeMutation = useMutation(\n () => patchStore({ onboarding_complete: true }),\n {\n onSuccess: () => queryClient.invalidateQueries(['fetchStore']),\n },\n );\n const setOnboardingComplete = () => storeMutation.mutate();\n\n if (isLoading || store.onboarding_complete) return <>;\n\n const campaign = campaigns[0];\n\n const content =\n campaigns.length === 0 ? (\n \n \n Create a Project\n \n \n \n Add a question to your project's questionnaire\n \n \n \n \n Add answers to your questions\n \n \n \n \n Select which products match the answers\n \n \n \n Edit the Pages\n \n \n \n Customize your project's Branding\n \n \n \n \n Customize the recommendation E-Mail\n \n \n \n Setup custom E-Mail address\n \n \n Setup Klaviyo integration\n \n \n Check out your Customers\n \n \n ) : (\n \n \n \n Create a Project\n \n \n \n Add a question to your project's{' '}\n \n questionnaire\n \n \n \n Add answers to your{' '}\n \n questions\n \n \n \n Select which products match the{' '}\n \n answers\n \n \n \n Edit the{' '}\n Pages\n \n \n Customize your project's{' '}\n Branding\n \n \n Customize the recommendation{' '}\n E-Mail\n \n \n Setup custom E-Mail address\n \n \n Setup Klaviyo integration\n \n \n Check out your Customers\n \n \n );\n\n return (\n \n \n \n {content}\n\n \n \n \n \n \n \n \n \n );\n}\n\nexport default SetupSection;\n","import React from 'react';\nimport { Page, Layout, FooterHelp, Link } from '@shopify/polaris';\n\nimport DashboardSection from './dashboard/DashboardSection';\nimport SetupSection from './setup/SetupSection';\n\nfunction HomePage() {\n return (\n \n \n \n \n \n \n We are always here to help! Get in touch at{' '}\n \n hello@meja.io\n \n \n \n \n \n );\n}\n\nexport default HomePage;\n","import React from 'react';\nimport { Checkbox } from '@shopify/polaris';\nimport { useFormContext, Controller } from 'react-hook-form';\n\nfunction ControlledCheckbox({\n name,\n label,\n defaultValue = false,\n disabled = false,\n helpText = null,\n}) {\n const { control } = useFormContext();\n\n return (\n (\n \n )}\n />\n );\n}\n\nexport default ControlledCheckbox;\n","import React from 'react';\nimport { TextField } from '@shopify/polaris';\nimport { useFormContext, Controller } from 'react-hook-form';\n\nfunction ControlledTextField({\n name,\n label,\n helpText = <>,\n defaultValue = '',\n rules = {},\n errorMessage = 'Incorrect input',\n multiline = false,\n monospaced = false,\n disabled = false,\n type = 'text',\n suffix = '',\n maxLength = false,\n showCharacterCount = false,\n autoComplete = 'off',\n}) {\n const {\n control,\n formState: { errors },\n } = useFormContext();\n\n defaultValue = defaultValue || '';\n\n return (\n (\n \n )}\n />\n );\n}\n\nexport default ControlledTextField;\n","import React from 'react';\nimport { Layout, TextContainer, Card, FormLayout } from '@shopify/polaris';\n\nimport { useFormContext } from 'react-hook-form';\n\nimport ControlledCheckbox from '../../../common/input/ControlledCheckbox';\nimport ControlledTextField from '../../../common/input/ControlledTextField';\n\nfunction KlaviyoLayout({ store }) {\n const { watch } = useFormContext();\n const watchEnableKlaviyo = watch('enable_klaviyo');\n const klaviyoDisabled =\n watchEnableKlaviyo === undefined\n ? !store.enable_klaviyo\n : !watchEnableKlaviyo;\n\n return (\n \n \n Setup Klaviyo integration for your store.\n \n }\n >\n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default KlaviyoLayout;\n","import React from 'react';\nimport { FormLayout, ColorPicker, TextField } from '@shopify/polaris';\nimport { useFormContext, Controller } from 'react-hook-form';\nimport {\n hsbToHex,\n rgbToHsb,\n} from '@shopify/polaris/dist/esm/utilities/color-transformers';\n\nfunction ControlledColorSelection({\n name,\n label,\n defaultValue = '#000000',\n helpText = <>,\n rules = { pattern: /^#(?:[0-9a-f]{3}){1,2}$/i },\n errorMessage = 'Must be a valid HEX color code (#fff or #ffffff)',\n __type__ = FormLayout.Group,\n}) {\n const {\n control,\n formState: { errors },\n } = useFormContext();\n const hexToRgb = (color) => {\n if (color.length === 4) {\n const repeatHex = (hex1, hex2) => color.slice(hex1, hex2).repeat(2);\n const red = parseInt(repeatHex(1, 2), 16);\n const green = parseInt(repeatHex(2, 3), 16);\n const blue = parseInt(repeatHex(3, 4), 16);\n\n return { red, green, blue };\n }\n\n const red = parseInt(color.slice(1, 3), 16);\n const green = parseInt(color.slice(3, 5), 16);\n const blue = parseInt(color.slice(5, 7), 16);\n\n return { red, green, blue };\n };\n\n const hexToRgbSafe = (color) =>\n color.length > 0 ? hexToRgb(color) : hexToRgb('#000000');\n\n return (\n \n (\n \n )}\n />\n (\n onChange(hsbToHex(color))}\n onBlur={onBlur}\n inputRef={ref}\n />\n )}\n />\n \n );\n}\n\nControlledColorSelection.defaultProps = {\n __type__: FormLayout.Group,\n};\n\nexport default ControlledColorSelection;\n","import React, { useState, useCallback } from 'react';\nimport { DatePicker } from '@shopify/polaris';\nimport { useFormContext, Controller } from 'react-hook-form';\n\nfunction ControlledDatePicker({\n name,\n label,\n rules = {},\n disabled = false,\n year: defaultYear,\n month: defaultMonth,\n defaultValue,\n ...rest\n}) {\n const {\n control,\n setValue,\n formState: { errors },\n trigger,\n } = useFormContext();\n\n const [{ month, year }, setDate] = useState({\n month: defaultMonth,\n year: defaultYear,\n });\n const handleMonthChange = useCallback(\n (month, year) => setDate({ month, year }),\n [],\n );\n\n return (\n (\n {\n setValue(name, newValue);\n if (errors[name]) trigger(name);\n }}\n onMonthChange={handleMonthChange}\n selected={value}\n month={month}\n year={year}\n {...rest}\n />\n )}\n />\n );\n}\n\nexport default ControlledDatePicker;\n","import React from 'react';\nimport { Select } from '@shopify/polaris';\nimport { useFormContext, Controller } from 'react-hook-form';\n\nfunction ControlledSelect({\n name,\n label,\n options,\n helpText = <>,\n defaultValue = '',\n rules = {},\n disabled = false,\n placeholder = null,\n errorMessage = 'Invalid input.',\n}) {\n const {\n control,\n formState: { errors },\n } = useFormContext();\n\n const setDefaultValue = defaultValue ? { defaultValue } : {};\n\n return (\n (\n \n )}\n />\n );\n}\n\nexport default ControlledSelect;\n","import React, { useContext } from 'react';\nimport { Layout, TextContainer, Card, FormLayout } from '@shopify/polaris';\n\nimport { useQuery } from 'react-query';\n\nimport { Select } from '../../../common/input';\nimport APIContext from '../../../../providers/APIContext';\n\nfunction GeneralLayout({ store }) {\n const { fetchCampaigns } = useContext(APIContext);\n\n const { isLoading, data: campaigns } = useQuery(\n 'fetchCampaignsForList',\n fetchCampaigns,\n );\n\n const campaignsSelection = isLoading\n ? []\n : campaigns.map((campaign) => ({\n label: campaign.name,\n value: campaign.id,\n }));\n\n const selectPlaceholder = isLoading\n ? 'Loading campaigns'\n : 'Select a default campaign';\n\n return (\n \n General store settings.}\n >\n \n \n \n

\n The selected default project will appear if you don’t\n determine a specific project slug when sharing your meja\n questionnarie. e.g. your-store.myshopify.com/apps/meja\n

\n \n }\n />\n
\n
\n \n
\n );\n}\n\nexport default GeneralLayout;\n","import React, { useState, useCallback, useContext, useEffect } from 'react';\nimport {\n Layout,\n TextContainer,\n Card,\n FormLayout,\n TextStyle,\n ResourceList,\n ResourceItem,\n Icon,\n Stack,\n Collapsible,\n Button,\n} from '@shopify/polaris';\nimport {\n CircleTickOutlineMinor,\n CircleMinusOutlineMinor,\n} from '@shopify/polaris-icons';\n\nimport { useQuery } from 'react-query';\n\nimport { Checkbox, TextField } from '../../../common/input';\n\nimport APIContext from '../../../../providers/APIContext';\n\nfunction SendgridLayout({ store }) {\n const [refetchInterval, setRefetchInterval] = useState(10000);\n\n const { validateDNS } = useContext(APIContext);\n\n const {\n isLoading,\n refetch: reValidateDNS,\n data: validation,\n } = useQuery('validateDNS', validateDNS, { refetchInterval });\n\n const handleToggle = useCallback(() => setOpen((open) => !open), []);\n\n const { email_settings } = store;\n const [open, setOpen] = useState(\n email_settings ? !email_settings.sendgrid_domain_valid : false,\n );\n\n //TODO: avoid hardcoding of the three entries\n if (validation && email_settings) {\n email_settings.sendgrid_dns.mail_cname = {\n ...email_settings.sendgrid_dns.mail_cname,\n ...validation.validation_result.mail_cname,\n };\n email_settings.sendgrid_dns.dkim1 = {\n ...email_settings.sendgrid_dns.dkim1,\n ...validation.validation_result.dkim1,\n };\n email_settings.sendgrid_dns.dkim2 = {\n ...email_settings.sendgrid_dns.dkim2,\n ...validation.validation_result.dkim2,\n };\n }\n\n // Stop refetching automatically when validate has returned and all entries are valid\n useEffect(() => {\n if (\n validation &&\n validation.validation_result.mail_cname.valid &&\n validation.validation_result.dkim1.valid &&\n validation.validation_result.dkim2.valid\n ) {\n setRefetchInterval(false);\n }\n }, [email_settings, validation]);\n\n const dnsStatus = email_settings\n ? Object.values(email_settings.sendgrid_dns).map((entry) => ({\n type: entry.type.toUpperCase(),\n host: entry.host,\n data: entry.data,\n icon: entry.valid ? CircleTickOutlineMinor : CircleMinusOutlineMinor,\n status: entry.valid ? 'success' : 'critical',\n reason: entry.reason,\n }))\n : [];\n\n const renderDnsStatus = ({ type, host, data, icon, status }) => (\n \n \n \n \n {type}\n
\n Host{' '}\n {host}\n
\n Data{' '}\n {data}\n
\n
\n
\n );\n\n return (\n \n Sendgrid setup}\n >\n \n \n \n \n {email_settings && (\n \n Show DNS entries\n \n )}\n \n \n \n \n\n \n \n \n

\n Enter your E-mail address here if you'd like to receive a\n copy of all E-Mails we send out in your name.\n

\n \n }\n />\n
\n
\n \n
\n );\n}\n\nexport default SendgridLayout;\n","import React, { useContext, useCallback } from 'react';\nimport { Page, Tabs, Loading } from '@shopify/polaris';\nimport { useQuery, useMutation } from 'react-query';\n\nimport { useForm, FormProvider } from 'react-hook-form';\nimport { useParams, useHistory } from 'react-router-dom';\n\nimport KlaviyoLayout from './klaviyo/KlaviyoLayout';\nimport GeneralLayout from './general/GeneralLayout';\nimport SendgridLayout from './sendgrid/SendgridLayout';\nimport APIContext from '../../../providers/APIContext';\n\nfunction SettingsPage() {\n const form = useForm();\n const history = useHistory();\n const {\n fetchStore,\n patchStore,\n patchStoreEmailSettings,\n createStoreEmailSettings,\n } = useContext(APIContext);\n\n const { isLoading, data: store } = useQuery('fetchStore', fetchStore);\n\n const mutation = useMutation((storeMutation) => {\n patchStore(storeMutation);\n store?.email_settings\n ? patchStoreEmailSettings(storeMutation.email_settings)\n : createStoreEmailSettings(storeMutation.email_settings);\n });\n const saveAndPublish = (store) => mutation.mutate(store);\n\n const tabs = [\n {\n id: 'general',\n content: 'General',\n layout: ,\n },\n {\n id: 'email',\n content: 'Email',\n layout: ,\n },\n {\n id: 'klaviyo',\n content: 'Klaviyo',\n layout: ,\n },\n ];\n\n const handleTabChange = useCallback(\n (id) => {\n history.push(`/app/settings/${tabs[id].id}`);\n },\n [history, tabs],\n );\n const { tab = 'general' } = useParams();\n const tabID = tabs.findIndex((t) => t.id === tab);\n\n if (isLoading) return ;\n\n return (\n \n \n \n {tabs[tabID].layout}\n \n \n \n );\n}\n\nexport default SettingsPage;\n","import React, { useContext } from 'react';\nimport {\n Form,\n FormLayout,\n Modal,\n TextContainer,\n TextStyle,\n List,\n} from '@shopify/polaris';\nimport { DeleteMinor } from '@shopify/polaris-icons';\n\nimport { useMutation, useQueryClient } from 'react-query';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport ControlledTextField from '../../common/input/ControlledTextField';\nimport APIContext from '../../../providers/APIContext';\n\nfunction CampaignDeleteModal({ campaign, ...rest }) {\n const form = useForm();\n\n const { deleteCampaign } = useContext(APIContext);\n\n const queryClient = useQueryClient();\n\n const deletion = useMutation(() => deleteCampaign(campaign.id), {\n onSuccess: () => {\n queryClient.invalidateQueries(['fetchCampaigns']);\n rest.onClose();\n },\n });\n\n return (\n deletion.mutate(),\n url: 'projects',\n disabled: !(form.watch('slug') === campaign.slug),\n }}\n secondaryActions={[\n {\n content: 'Cancel',\n onAction: rest.onClose,\n },\n ]}\n >\n \n \n \n

\n Please be aware that by deleting a project you will also delete\n all assosciated elements, such as:\n

\n \n \n Recommendations (they will also become unaccesible to you\n customers)\n \n Questions & Answers\n \n All text, assets, branding and configurations used in your\n campaign\n \n \n

\n \n The deletion is permanent and irreversible.\n \n

\n
\n
\n \n \n Please confirm the deletion by typing the project slug{' '}\n {campaign.slug} into the\n text field below.\n \n
\n \n \n \n
\n
\n
\n \n );\n}\n\nexport default CampaignDeleteModal;\n","import React, { useContext, useState } from 'react';\nimport {\n ResourceItem,\n Thumbnail,\n TextStyle,\n TextContainer,\n} from '@shopify/polaris';\nimport { DateTime } from 'luxon';\n\nimport StoreContext from '../../../providers/StoreContext';\n\nimport CampaignDeleteModal from './CampaignDeleteModal';\n\nfunction CampaignItem({ campaign, index }) {\n const {\n id,\n name,\n slug,\n assets: {\n welcome: { image: thumbnail },\n },\n updated_at,\n } = campaign;\n const [deleteOpen, setDeleteOpen] = useState(false);\n\n const storeContext = useContext(StoreContext);\n const previewAction = {\n content: 'Preview Live',\n disabled: storeContext.isLoading ? true : false,\n url: storeContext.isLoading\n ? null\n : `https://${storeContext.store.shopify_store.domain}${storeContext.store.shopify_store.path_prefix}/${slug}`,\n };\n\n const shortcutActions = [\n previewAction,\n {\n content: 'Delete',\n destructive: true,\n onAction: () => setDeleteOpen(true),\n },\n ];\n const lastEdit = DateTime.fromISO(updated_at).toRelative();\n\n return (\n <>\n \n }\n shortcutActions={shortcutActions}\n accessibilityLabel={`Manage project ${name}`}\n name={name}\n url={`projects/${slug}`}\n >\n

\n {name}\n

\n \n Last edited {lastEdit}\n \n \n setDeleteOpen(false)}\n campaign={campaign}\n />\n \n );\n}\n\nexport default CampaignItem;\n","import React from 'react';\nimport Radium from 'radium';\nimport { useFormContext } from 'react-hook-form';\n\nimport { Subheading } from '@shopify/polaris';\n\nimport styles from './ColorsPreview.module.css';\n\nfunction ColorsPreview() {\n const { watch } = useFormContext();\n const val = (name) => watch(`style.variables.${name}`);\n return (\n <>\n Your palette\n
\n
\n
\n
\n \n \n \n
\n
\n \n \n \n \n \n );\n}\n\nexport default Radium(ColorsPreview);\n","import React from 'react';\nimport { FormLayout, Card, TextContainer } from '@shopify/polaris';\n\nimport ControlledColorSelection from '../../../common/input/ControlledColorSelection';\n\nfunction ColorsStyling() {\n return (\n \n \n \n Used for text and button background color\n \n }\n />\n \n Used for buttons border color and text on buttons\n \n }\n />\n \n Used for highlighted borders on selected input fields\n \n }\n />\n \n Used for highlighted borders on answer tiles\n \n }\n />\n Used for subdued text}\n />\n \n Used as background color for certain hover effects\n \n }\n />\n Will be used in form validation i.e. as text color

}\n />\n
\n
\n );\n}\n\nexport default ColorsStyling;\n","import React from 'react';\nimport { Layout, Link } from '@shopify/polaris';\nimport ColorsPreview from './ColorsPreview';\nimport ColorsStyling from './ColorsStyling';\n\nfunction ColorsLayout() {\n return (\n \n \n
\n Style the project according to your brand colors. If you need any\n custom support, text us at:{' '}\n \n hello@meja.io\n \n .\n
\n \n \n }\n >\n \n \n
\n );\n}\n\nexport default ColorsLayout;\n","import React from 'react';\nimport { TextContainer, Link } from '@shopify/polaris';\n\nconst image = (\n \n Specify a full URL to an image. To upload images, see{' '}\n FAQ.\n \n);\n\nexport default image;\n","import React from 'react';\nimport { TextContainer } from '@shopify/polaris';\n\nconst fontFamily = (\n \n Currently you are only able to use fonts that are already available in your\n theme. These will no preview correctly here, but will be visible in your\n store.\n \n);\n\nexport default fontFamily;\n","import React from 'react';\nimport { FormLayout, Card } from '@shopify/polaris';\n\nimport ControlledTextField from '../../../common/input/ControlledTextField';\nimport { fontFamilyHelpText } from '../../../common/helpText';\n\nfunction TextStyling() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default TextStyling;\n","import React from 'react';\nimport Radium from 'radium';\nimport { useFormContext } from 'react-hook-form';\n\nimport { Subheading } from '@shopify/polaris';\n\nimport styles from './TextPreview.module.css';\n\nfunction TextPreview() {\n const { watch } = useFormContext();\n const val = (name) => watch(`style.variables.${name}`);\n\n return (\n <>\n Desktop\n \n Header\n \n \n Subheader\n \n \n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod\n tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim\n veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea\n commodo consequat.\n \n\n Mobile\n \n Header\n \n \n Subheader\n \n \n Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod\n tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim\n veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea\n commodo consequat.\n \n \n );\n}\n\nexport default Radium(TextPreview);\n","import React from 'react';\nimport { Layout } from '@shopify/polaris';\n\nimport TextStyling from './TextStyling';\nimport TextPreview from './TextPreview';\n\nfunction ColorsLayout() {\n return (\n \n }>\n \n \n \n );\n}\n\nexport default ColorsLayout;\n","import React from 'react';\nimport Radium from 'radium';\nimport { useFormContext } from 'react-hook-form';\n\nimport { TextStyle, Subheading } from '@shopify/polaris';\n\nimport styles from './ButtonPreview.module.css';\n\nfunction ButtonPreview() {\n const { watch } = useFormContext();\n const val = (name) => watch(`style.variables.${name}`);\n return (\n <>\n Preview\n \n Hover over the button to check the :hover style.\n \n \n \n );\n}\n\nexport default Radium(ButtonPreview);\n","import React from 'react';\nimport { FormLayout, Card } from '@shopify/polaris';\n\nimport ControlledTextField from '../../../common/input/ControlledTextField';\nimport { fontFamilyHelpText } from '../../../common/helpText';\n\nfunction ButtonStyling() {\n return (\n \n \n \n\n \n\n \n\n \n\n \n\n \n \n \n );\n}\n\nexport default ButtonStyling;\n","import React from 'react';\nimport { Layout } from '@shopify/polaris';\n\nimport ButtonPreview from './ButtonPreview';\nimport ButtonStyling from './ButtonStyling';\n\nfunction ButtonLayout() {\n return (\n \n \n
\n You'll find buttons used on the landing and e-mail page.\n
\n
\n Buttons use your primary and secondary color.\n
\n \n \n }\n >\n \n \n
\n );\n}\n\nexport default ButtonLayout;\n","import React from 'react';\nimport Radium from 'radium';\nimport { useFormContext } from 'react-hook-form';\n\nimport { TextStyle, Subheading } from '@shopify/polaris';\n\nimport styles from './InputPreview.module.css';\n\nfunction InputPreview() {\n const { watch } = useFormContext();\n const val = (name) => watch(`style.variables.${name}`);\n\n return (\n <>\n Text Input\n \n Click the field to see how it behaves.\n \n \n Error\n \n In case of a error such as invalid E-Mail or missing required field.\n \n \n \n );\n}\n\nexport default Radium(InputPreview);\n","import React from 'react';\nimport { FormLayout, Card } from '@shopify/polaris';\n\nimport ControlledTextField from '../../../common/input/ControlledTextField';\nimport { fontFamilyHelpText } from '../../../common/helpText';\n\nfunction InputStyling() {\n return (\n \n \n \n\n \n\n \n\n \n\n \n \n \n );\n}\n\nexport default InputStyling;\n","import React from 'react';\nimport { Layout } from '@shopify/polaris';\n\nimport InputPreview from './InputPreview';\nimport InputStyling from './InputStyling';\n\nfunction InputLayout() {\n return (\n \n \n
\n You'll find Input fields on the e-mail page.\n
\n
\n Inputs use your primary, primary accent and error color.\n
\n \n \n }\n >\n \n \n
\n );\n}\n\nexport default InputLayout;\n","import React from 'react';\nimport Radium from 'radium';\nimport { useFormContext } from 'react-hook-form';\nimport { Subheading } from '@shopify/polaris';\n\nimport styles from './RecommendationPreview.module.css';\n\nfunction RecommendationPreview() {\n const { watch } = useFormContext();\n const val = (name) => watch(`style.variables.${name}`);\n\n return (\n <>\n Preview\n \n \n Product name\n \n \n From $29.99\n \n \n );\n}\n\nexport default Radium(RecommendationPreview);\n","import React from 'react';\nimport { FormLayout, Card } from '@shopify/polaris';\n\nimport ControlledTextField from '../../../common/input/ControlledTextField';\n\nfunction RecommendationStyling() {\n return (\n \n \n \n\n \n\n \n\n \n\n \n \n \n );\n}\n\nexport default RecommendationStyling;\n","import React from 'react';\nimport { Layout } from '@shopify/polaris';\n\nimport RecommendationPreview from './RecommendationPreview';\nimport RecommendationStyling from './RecommendationStyling';\n\nfunction RecommendationLayout() {\n return (\n \n \n
\n Recommendations are displayed after the customer finishes the\n questionnaire.\n
\n Might be product or blog posts.\n
\n
\n The title uses the primary color and the subtitle the primary\n subdued\n
\n \n \n }\n >\n \n \n
\n );\n}\n\nexport default RecommendationLayout;\n","import React, { useCallback } from 'react';\nimport { Loading, Page, Tabs } from '@shopify/polaris';\n\nimport { FormProvider } from 'react-hook-form';\nimport { useParams, useHistory } from 'react-router-dom';\n\nimport ColorsLayout from './colors/ColorsLayout';\nimport TextLayout from './text/TextLayout';\nimport ButtonLayout from './button/ButtonLayout';\nimport InputLayout from './input/InputLayout';\nimport RecommendationLayout from './recommendation/RecommendationLayout';\n\nimport useCampaign from '../../../hooks/useCampaign';\n\nfunction BrandingPage() {\n const history = useHistory();\n const { campaign, isLoading, form, editMarkup, saveAction } = useCampaign();\n\n const tabs = [\n {\n id: 'colors',\n content: 'Colors',\n layout: ,\n },\n {\n id: 'text',\n content: 'Text',\n layout: ,\n },\n {\n id: 'input',\n content: 'Input',\n layout: ,\n },\n {\n id: 'button',\n content: 'Button',\n layout: ,\n },\n {\n id: 'recommendation',\n content: 'Recommendation',\n layout: ,\n },\n ];\n\n const handleTabChange = useCallback(\n (id) =>\n history.push(`/app/projects/${campaign?.slug}/branding/${tabs[id].id}`),\n [campaign, history, tabs],\n );\n const { tab = 'colors' } = useParams();\n const tabID = tabs.findIndex((t) => t.id === tab);\n\n if (isLoading) return ;\n\n return (\n \n \n \n {tabs[tabID].layout}\n \n \n {editMarkup}\n \n );\n}\n\nexport default BrandingPage;\n","import React from 'react';\nimport { Card, FormLayout } from '@shopify/polaris';\n\nimport { useFormContext } from 'react-hook-form';\n\nimport ControlledTextField from '../../common/input/ControlledTextField';\nimport ControlledCheckbox from '../../common/input/ControlledCheckbox';\n\nfunction EmailEditor({\n campaign: {\n email_subject: emailSubjectInitial,\n custom_email_template: useCustomTemplateInitial,\n email_template: emailTemplateInitial,\n },\n}) {\n const { watch } = useFormContext();\n\n const watchCustomEmailTemplate = watch('custom_email_template');\n\n let useCustomTemplate =\n watchCustomEmailTemplate === undefined\n ? useCustomTemplateInitial\n : watchCustomEmailTemplate;\n\n return (\n \n \n \n \n \n \n \n );\n}\n\nexport default EmailEditor;\n","import React from 'react';\nimport { TextContainer, TextStyle } from '@shopify/polaris';\n\nfunction EmailAnnotation() {\n return (\n \n

Following variables can be used within your custom e-mail template:

\n

\n Customers name:\n
\n {'{{ recommendation.name }}'} \n
\n Your stores URL:\n
\n \n {' '}\n {'{{ store.shopify_store.domain }}'}{' '}\n \n
\n

\n

\n Product handle:\n
\n \n {'{{ recommendation_data.results.0.handle }}'}\n \n
\n Product image source:\n
\n \n {'{{ recommendation_data.results.0.image.src }}'}\n \n
\n Product image alt text:\n
\n \n {'{{ recommendation_data.results.0.image.alt }}'}\n \n
\n Product name:\n
\n \n {'{{ recommendation_data.results.0.title }}'}\n \n
\n Product price:\n
\n \n {'{{ recommendation_data.results.0.price }}'}\n \n
\n
\n Icrease the index (0 in example) to access the other recommendations.\n

\n

\n A link to a product in your store could be composed in the following\n way:\n
\n \n {\n 'https://{{ shop }}/products/{{ recommendation_data.results.0.handle }}'\n }\n \n

\n

\n A link back to the campaign could be composed in the following way:\n
\n \n {\n 'https://{{ store.shopify_store.domain }}{{ path_prefix }}/{{ slug }}'\n }\n \n

\n

\n You can express conditionals, for example to check if a result is\n existing in the following way:\n
\n \n {\n '{% if recommendation_data.results.0 %} {% endif %}'\n }\n \n

\n
\n );\n}\n\nexport default EmailAnnotation;\n","import React from 'react';\nimport { Modal, Stack } from '@shopify/polaris';\n\nimport { useForm, FormProvider } from 'react-hook-form';\n\nimport ControlledTextField from '../../common/input/ControlledTextField';\n\nfunction EmailTestModal({\n active,\n handleCancel,\n emailTemplateForm,\n sendTestEmail,\n}) {\n //TODO: Error handling\n const sendDisabled = sendTestEmail.isLoading || sendTestEmail.isSuccess;\n\n const form = useForm();\n\n const sendEmail = (emailPreview) => {\n const emailTemplate = emailTemplateForm.getValues();\n const email = {\n subject: '[meja.io Preview] ' + emailTemplate.email_subject,\n template: emailTemplate.email_template,\n use_template: emailTemplate.custom_email_template,\n ...emailPreview,\n };\n sendTestEmail.mutate(email);\n };\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default EmailTestModal;\n","import React, { useCallback, useEffect, useState, useContext } from 'react';\nimport { Page, Layout, Toast, Loading } from '@shopify/polaris';\nimport { useMutation } from 'react-query';\nimport { FormProvider } from 'react-hook-form';\n\nimport { FollowUpEmailMajor } from '@shopify/polaris-icons';\nimport EmailEditor from './EmailEditor';\nimport EmailAnnotation from './EmailAnnotation';\nimport EmailTestModal from './EmailTestModal';\n\nimport APIContext from '../../../providers/APIContext';\nimport useCampaign from '../../../hooks/useCampaign';\n\nfunction EmailPage() {\n const { campaign, isLoading, form, editMarkup, saveAction } = useCampaign();\n\n const { postPreviewEmail } = useContext(APIContext);\n\n const sendTestEmail = useMutation((email) =>\n postPreviewEmail(campaign.id, email),\n );\n\n const [testEmailModalOpen, setTestEmailModalOpen] = useState(false);\n\n const openTestEmailModal = () => setTestEmailModalOpen(true);\n\n const handleTestEmailModalCancel = useCallback(() => {\n sendTestEmail.reset();\n setTestEmailModalOpen(false);\n }, [sendTestEmail]);\n\n const [toastActive, setToastActive] = useState(false);\n\n const dismissToast = () => setToastActive(false);\n\n useEffect(() => {\n if (sendTestEmail.isSuccess) {\n setToastActive(true);\n handleTestEmailModalCancel();\n }\n }, [sendTestEmail, handleTestEmailModalCancel]);\n\n if (isLoading) return ;\n\n return (\n \n \n \n }\n >\n \n \n \n \n \n {toastActive && (\n \n )}\n {editMarkup}\n \n );\n}\n\nexport default EmailPage;\n","import React, { useContext } from 'react';\nimport Radium from 'radium';\nimport { useFormContext } from 'react-hook-form';\n\nimport StoreContext from '../../../../providers/StoreContext';\n\nimport styles from './EmailPreview.module.css';\n\nfunction EmailPreview({ campaign }) {\n const { watch } = useFormContext();\n\n const image = watch('assets.email.image') || campaign.assets.email.image;\n const header = watch('text.email.header') || campaign.text.email.header;\n const subheader =\n watch('text.email.subheader') || campaign.text.email.subheader;\n\n const askName =\n watch('config.email.ask_name') || campaign.config.email.ask_name;\n // const requireName = watch('config.email.name_required') || campaign.config.email.name_required;\n const namePlaceholder =\n watch('text.email.name_placeholder') ||\n campaign.text.email.name_placeholder;\n // const nameError = watch('text.email.name_error') || campaign.text.email.name_error;\n\n // const requireEmail = watch('config.email.email_required') || campaign.config.email.email_required;\n const emailPlaceholder =\n watch('text.email.email_placeholder') ||\n campaign.text.email.email_placeholder;\n // const emailError = watch('text.email.email_error') || campaign.text.email.email_error;\n\n const button =\n watch('text.email.confirm_button_text') ||\n campaign.text.welcome.confirm_button_text;\n\n const continueWithoutEmail =\n watch('config.email.continue_without_email') ||\n campaign.config.email.continue_without_email;\n const continueWithoutEmailText =\n watch('text.email.continue_without_email_text') ||\n campaign.config.email.continue_without_email_text;\n\n const { isLoading, assetURL } = useContext(StoreContext);\n const src = isLoading ? '/placeholder_meja.jpg' : assetURL(image);\n\n return (\n
\n
\n \"\"\n
\n
\n \n {header}\n
\n \n {subheader}\n
\n {askName && (\n \n )}\n \n\n \n {button}\n \n {continueWithoutEmail && (\n \n {continueWithoutEmailText}\n \n )}\n \n \n );\n}\n\nexport default Radium(EmailPreview);\n","import React from 'react';\nimport { FormLayout, Card, Checkbox, TextContainer } from '@shopify/polaris';\n\nimport { useFormContext } from 'react-hook-form';\n\nimport ControlledTextField from '../../../common/input/ControlledTextField';\nimport ControlledCheckbox from '../../../common/input/ControlledCheckbox';\nimport { imageHelpText } from '../../../common/helpText';\n\nfunction EmailEditing({ campaign }) {\n const { watch } = useFormContext();\n const watchAskForName = watch('config.email.ask_name');\n let askForName =\n watchAskForName === undefined\n ? campaign.config.email.ask_name\n : watchAskForName;\n const watchNameRequired = watch('config.email.name_required');\n let nameRequired =\n watchNameRequired === undefined\n ? campaign.config.email.name_required\n : watchNameRequired;\n const watchEmailRequired = watch('config.email.email_required');\n let emailRequired =\n watchEmailRequired === undefined\n ? campaign.config.email.email_required\n : watchEmailRequired;\n const watchContinueWithoutEmail = watch(\n 'config.email.continue_without_email',\n );\n let continueWithoutEmail =\n watchContinueWithoutEmail === undefined\n ? campaign.config.email.continue_without_email\n : watchContinueWithoutEmail;\n\n return (\n \n \n \n \n \n \n \n Ideally in a 3:2 ratio. 600 x 400 pixels is sufficient for most\n cases.\n \n {imageHelpText}\n \n }\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default EmailEditing;\n","import React, { useState, useCallback } from 'react';\nimport { Button, Layout, TextContainer, Modal } from '@shopify/polaris';\nimport EmailPreview from './EmailPreview';\nimport EmailEditing from './EmailEditing';\n\nfunction EmailLayout({ campaign }) {\n const [active, setActive] = useState(false);\n const toggleActive = useCallback(() => setActive((active) => !active), []);\n const activator = (\n \n );\n\n return (\n \n \n \n

\n On the Collect email page, your customer has the option of\n registering with their email address to receive their\n recommendation by email.\n

\n \n \n \n \n \n
\n \n }\n >\n \n \n
\n );\n}\n\nexport default EmailLayout;\n","import React, { useContext } from 'react';\nimport Radium from 'radium';\nimport { useFormContext } from 'react-hook-form';\n\nimport styles from './WelcomePreview.module.css';\nimport StoreContext from '../../../../providers/StoreContext';\n\nfunction WelcomePreview({ campaign }) {\n const { watch } = useFormContext();\n\n const header = watch('text.welcome.header') || campaign.text.welcome.header;\n const subheader =\n watch('text.welcome.subheader') || campaign.text.welcome.subheader;\n const button = watch('text.welcome.button') || campaign.text.welcome.button;\n const image = watch('assets.welcome.image') || campaign.assets.welcome.image;\n\n const { isLoading, assetURL } = useContext(StoreContext);\n const src = isLoading ? '/placeholder_meja.jpg' : assetURL(image);\n\n return (\n
\n
\n \"\"\n
\n
\n \n {header}\n
\n \n {subheader}\n
\n \n {button}\n \n \n \n );\n}\n\nexport default Radium(WelcomePreview);\n","import React from 'react';\nimport { FormLayout, Card, TextContainer } from '@shopify/polaris';\n\nimport { useFormContext } from 'react-hook-form';\n\nimport ControlledTextField from '../../../common/input/ControlledTextField';\nimport ControlledCheckbox from '../../../common/input/ControlledCheckbox';\nimport { imageHelpText } from '../../../common/helpText';\n\nfunction WelcomeEditing({ campaign }) {\n const { watch } = useFormContext();\n const watchSkipWelcome = watch('config.welcome.skip');\n let skipWelcome =\n watchSkipWelcome === undefined\n ? campaign.config.welcome.skip\n : watchSkipWelcome;\n\n return (\n \n \n \n \n \n \n \n \n Ideally in a 3:2 ratio. 600 x 400 pixels is sufficient for most\n cases.\n \n {imageHelpText}\n \n }\n />\n \n \n );\n}\n\nexport default WelcomeEditing;\n","import React, { useState, useCallback } from 'react';\nimport { Button, Layout, TextContainer, Modal } from '@shopify/polaris';\nimport WelcomePreview from './WelcomePreview';\nimport WelcomeEditing from './WelcomeEditing';\n\nfunction WelcomeLayout({ campaign }) {\n const [active, setActive] = useState(false);\n const toggleActive = useCallback(() => setActive((active) => !active), []);\n const activator = (\n \n );\n\n return (\n \n \n \n

\n The welcome page is the first page of your questionnaire. It is\n an opportunity to tell your customer what the questionnaire is\n about. Optionally it can also be skipped i.e. if you prefer\n completely designing your own landing page for the qestionnaire.\n

\n \n \n \n \n \n
\n \n }\n >\n \n \n
\n );\n}\n\nexport default WelcomeLayout;\n","import React, { useContext } from 'react';\nimport Radium from 'radium';\nimport { useFormContext } from 'react-hook-form';\n\nimport StoreContext from '../../../../providers/StoreContext';\n\nimport styles from './LoadingPreview.module.css';\n\nfunction LoadingPreview({ campaign }) {\n const { watch } = useFormContext();\n\n const header =\n watch('text.calculation.header') || campaign.text.calculation.header;\n const subheader =\n watch('text.calculation.subheader') || campaign.text.calculation.subheader;\n const spinner =\n watch('assets.calculation.spinner') || campaign.assets.calculation.spinner;\n\n const { isLoading, assetURL } = useContext(StoreContext);\n const src = isLoading ? '/placeholder_meja.jpg' : assetURL(spinner);\n\n return (\n
\n \n {header}\n
\n
\n \"\"\n
\n \n {subheader}\n \n \n );\n}\n\nexport default Radium(LoadingPreview);\n","import React from 'react';\nimport { FormLayout, Card, TextContainer } from '@shopify/polaris';\n\nimport ControlledTextField from '../../../common/input/ControlledTextField';\nimport { imageHelpText } from '../../../common/helpText';\n\nfunction LoadingEditing({ campaign }) {\n return (\n \n \n \n \n \n \n Ideally in a 1:1 ratio. 200 x 200 pixels is sufficient for most\n cases.\n \n {imageHelpText}\n \n }\n />\n \n \n \n );\n}\n\nexport default LoadingEditing;\n","import React, { useState, useCallback } from 'react';\nimport { Button, Layout, TextContainer, Modal } from '@shopify/polaris';\nimport LoadingPreview from './LoadingPreview';\nimport LoadingEditing from './LoadingEditing';\n\nfunction LoadingLayout({ campaign }) {\n const [active, setActive] = useState(false);\n const toggleActive = useCallback(() => setActive((active) => !active), []);\n const activator = (\n \n );\n\n return (\n \n \n \n

\n The loading page is displayed while our servers compute the\n customers recommendation. We recommend using a moving GIF or mp4\n as a spinner, to indicate that something is going on. Depending\n on the customers internet connection this might take anywhere\n from 0.1 to 2 or more seconds, but if you want to make sure that\n the customer can enjoy your GIF, we recommend setting a minimum\n waiting time.\n

\n \n \n \n \n \n
\n \n }\n >\n \n \n
\n );\n}\n\nexport default LoadingLayout;\n","import React from 'react';\nimport Radium from 'radium';\nimport { useFormContext } from 'react-hook-form';\n\nimport styles from './ResultsPreview.module.css';\n\nfunction ResultsPreview({ campaign }) {\n const { watch } = useFormContext();\n\n const header = watch('text.results.header') || campaign.text.results.header;\n const subheader =\n watch('text.results.subheader') || campaign.text.results.subheader;\n const restart =\n watch('text.results.restart') || campaign.text.results.restart;\n const prefix = watch('text.results.from') || campaign.text.results.from;\n const postfix =\n watch('text.results.currency') || campaign.text.results.currency;\n\n const results = [0, 1, 2].map((e, i) => (\n
\n
\n \n
\n \n Product\n
\n \n {prefix ? `${prefix} ` : ''}\n {postfix} {29.99}\n \n \n ));\n\n return (\n
\n \n {header}\n
\n
{results}
\n \n {subheader}\n \n \n \n {restart}\n \n \n \n );\n}\n\nexport default Radium(ResultsPreview);\n","import React from 'react';\nimport { FormLayout, Card } from '@shopify/polaris';\n\nimport ControlledTextField from '../../../common/input/ControlledTextField';\n\nfunction ResultsEditing({ campaign }) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default ResultsEditing;\n","import React, { useState, useCallback } from 'react';\nimport { Button, Layout, TextContainer, Modal } from '@shopify/polaris';\nimport ResultsPreview from './ResultsPreview';\nimport ResultsEditing from './ResultsEditing';\n\nfunction ResultsLayout({ campaign }) {\n const [active, setActive] = useState(false);\n const toggleActive = useCallback(() => setActive((active) => !active), []);\n const activator = (\n \n );\n\n return (\n \n \n \n

\n The results page is where your customer is recommend her or his\n products based on the answers to the questionnaire.\n

\n \n \n \n \n \n
\n \n }\n >\n \n \n
\n );\n}\n\nexport default ResultsLayout;\n","import React from 'react';\nimport { FormLayout, Card, TextContainer } from '@shopify/polaris';\n\nimport ControlledTextField from '../../../common/input/ControlledTextField';\n\nexport default function QuestionnaireEditing({ campaign }) {\n return (\n \n \n \n Text of button for user to navigate back to the previous question.\n \n }\n />\n \n Text of button for to go to next question, for example on a\n multiple choice question, given an answer is provided.\n \n }\n />\n \n Text of button for user to skip the question, given the question\n is optional.\n \n }\n />\n \n \n );\n}\n","import React from 'react';\nimport { Layout, TextContainer } from '@shopify/polaris';\nimport QuestionnaireEditing from './QuestionnaireEditing';\n\nexport default function QuestionnaireLayout({ campaign }) {\n return (\n \n \n \n

\n This is where you can change the wording of the questionnaire\n navigation.\n

\n
\n \n }\n >\n \n \n
\n );\n}\n","import React, { useCallback } from 'react';\nimport { Page, Tabs, Loading } from '@shopify/polaris';\n\nimport { FormProvider } from 'react-hook-form';\nimport { useParams, useHistory } from 'react-router-dom';\n\nimport EmailLayout from './email/EmailLayout';\nimport WelcomeLayout from './welcome/WelcomeLayout';\nimport LoadingLayout from './loading/LoadingLayout';\nimport ResultsLayout from './results/ResultsLayout';\n\nimport useCampaign from '../../../hooks/useCampaign';\nimport QuestionnaireLayout from './questionnaire/QuestionnaireLayout';\n\nfunction Pages() {\n const { campaign, isLoading, form, editMarkup, saveAction } = useCampaign();\n const history = useHistory();\n\n const tabs = [\n {\n id: 'welcome',\n content: '1. Welcome',\n layout: ,\n },\n {\n id: 'questionnaire',\n content: '2. Questionnaire',\n layout: ,\n },\n {\n id: 'email',\n content: '3. Collect Email',\n layout: ,\n },\n {\n id: 'loading',\n content: '4. Loading',\n layout: ,\n },\n {\n id: 'results',\n content: '5. Results',\n layout: ,\n },\n ];\n\n const handleTabChange = useCallback(\n (id) =>\n history.push(`/app/projects/${campaign?.slug}/pages/${tabs[id].id}`),\n [campaign, history, tabs],\n );\n const { tab = 'welcome' } = useParams();\n const tabID = tabs.findIndex((t) => t.id === tab);\n\n if (isLoading) return ;\n\n return (\n \n \n \n {tabs[tabID].layout}\n \n \n {editMarkup}\n \n );\n}\n\nexport default Pages;\n","import React, { useContext } from 'react';\nimport {\n Layout,\n TextContainer,\n Card,\n FormLayout,\n TextStyle,\n Banner,\n Stack,\n} from '@shopify/polaris';\n\nimport { useQuery } from 'react-query';\n\nimport ControlledCheckbox from '../../../common/input/ControlledCheckbox';\nimport ControlledSelect from '../../../common/input/ControlledSelect';\nimport APIContext from '../../../../providers/APIContext';\n\nfunction KlaviyoLayout({ campaign }) {\n const { fetchKlaviyoLists } = useContext(APIContext);\n\n const {\n isSuccess,\n isLoading,\n error,\n data: lists = [],\n } = useQuery('fetchKlaviyoLists', fetchKlaviyoLists, { retry: false });\n\n const klaviyoLists = isSuccess\n ? lists.map((list) => ({\n label: list.list_name,\n value: list.list_id,\n }))\n : [];\n\n const selectPlaceholder = isLoading\n ? 'Loading Klaviyo lists'\n : 'Select a Klaviyo list';\n\n return (\n \n \n {error && (\n \n )}\n \n Setup Klaviyo per project event and list.\n \n \n }\n >\n \n \n \n

\n When set, each time a customer with an email address\n receives a recommendation meja will trigger a Klaviyo event\n named{' '}\n meja recommendation{' '}\n that also contains which{' '}\n questionnaire was\n filled out and what{' '}\n products were\n recommended.\n

\n \n }\n />\n \n

\n When set, each time a customer with an email address\n receives a recommendation meja will trigger a Klaviyo event\n named{' '}\n meja recommendation{' '}\n that also contains which{' '}\n questionnaire was\n filled out and what{' '}\n products were\n recommended.\n

\n \n }\n />\n
\n
\n \n
\n );\n}\n\nexport default KlaviyoLayout;\n","import React, { useCallback } from 'react';\nimport { Loading, Page, Tabs } from '@shopify/polaris';\n\nimport { FormProvider } from 'react-hook-form';\nimport { useParams, useHistory } from 'react-router-dom';\n\nimport KlaviyoLayout from './klaviyo/KlaviyoLayout';\nimport useCampaign from '../../../hooks/useCampaign';\n\nfunction IntegrationsPage() {\n const history = useHistory();\n const { campaign, isLoading, form, editMarkup, saveAction } = useCampaign();\n\n const tabs = [\n {\n id: 'klaviyo',\n content: 'Klaviyo',\n layout: ,\n },\n ];\n\n const handleTabChange = useCallback(\n (id) =>\n history.push(\n `/app/projects/${campaign?.slug}/integrations/${tabs[id].id}`,\n ),\n [campaign, history, tabs],\n );\n const { tab = 'klaviyo' } = useParams();\n const tabID = tabs.findIndex((t) => t.id === tab);\n\n if (isLoading) return ;\n\n return (\n \n \n \n {tabs[tabID].layout}\n \n \n {editMarkup}\n \n );\n}\n\nexport default IntegrationsPage;\n","import React, { useContext } from 'react';\nimport {\n Layout,\n FormLayout,\n Card,\n Page,\n TextStyle,\n Loading,\n} from '@shopify/polaris';\n\nimport { FormProvider } from 'react-hook-form';\n\nimport ControlledTextField from '../../common/input/ControlledTextField';\nimport StoreContext from '../../../providers/StoreContext';\nimport useCampaign from '../../../hooks/useCampaign';\n\nfunction CampaignOverviewPage() {\n const {\n store: {\n shopify_store: { domain, path_prefix: prefix },\n },\n } = useContext(StoreContext);\n\n const { campaign, isLoading, form, editMarkup, saveAction } = useCampaign();\n\n if (isLoading || !campaign) return ;\n\n const campaignURL = (\n \n {`https://${domain}${prefix}/`}\n \n {form.watch('slug') || campaign.slug}\n \n \n );\n\n return (\n \n \n \n \n Your projects consits of multiple elements, see and edit all of\n them from the navigation menu on the left.\n

\n }\n >\n \n \n \n\n \n The slug defines under which URL your campaign will be\n available:\n
\n {campaignURL}\n

\n }\n />\n
\n
\n \n
\n
\n {editMarkup}\n
\n );\n}\n\nexport default CampaignOverviewPage;\n","import React from 'react';\nimport { Layout, Card, FormLayout, TextContainer } from '@shopify/polaris';\n\nimport ControlledCheckbox from '../../common/input/ControlledCheckbox';\nimport ControlledTextField from '../../common/input/ControlledTextField';\n\nfunction QuestionSection() {\n return (\n \n \n \n \n \n

\n If selected, the customer will have the option to skip the\n question.\n

\n \n }\n />\n \n

\n If selected, the customer will have the option to select\n multiple answers.\n

\n \n }\n />\n \n

\n If selected, answers from this question will restrict the\n recommended product pool. Use with caution, as this can lead\n to empty results.\n

\n \n }\n />\n \n

\n The Alias will be used as an identifier in external\n applications and aggregated statistics.\n

\n \n }\n />\n
\n
\n
\n );\n}\n\nexport default QuestionSection;\n","import { Toast } from '@shopify/polaris';\nimport React, { useContext, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useQuery, useMutation, useQueryClient } from 'react-query';\nimport { Prompt } from 'react-router-dom';\nimport APIContext from '../providers/APIContext';\nimport CampaignContext from '../providers/CampaignContext';\n\nexport default function useQuestion(id) {\n const { fetchQuestion, patchQuestion } = useContext(APIContext);\n\n const { campaignId } = useContext(CampaignContext);\n\n const queryClient = useQueryClient();\n\n const { data: question, isLoading } = useQuery(\n ['fetchQuestion', id],\n () => fetchQuestion(id),\n {\n onSuccess: (question) => form.reset(question),\n },\n );\n\n const {\n mutate: save,\n isLoading: isSaving,\n isSuccess: isSaved,\n } = useMutation((question) => patchQuestion(id, question), {\n mutationKey: ['patchQuestion', id],\n onSuccess: (newQuestion) => {\n queryClient.setQueryData(['fetchQuestion', id], newQuestion);\n queryClient.setQueryData(['fetchQuestions', campaignId], (questions) =>\n questions.map((question) =>\n question.id === id ? newQuestion : question,\n ),\n );\n form.reset(newQuestion);\n activateToast();\n },\n });\n\n const form = useForm({ defaultValues: question });\n\n const {\n formState: { isDirty },\n } = form;\n\n const [toastActive, setToastActive] = useState(true);\n\n const dismissToast = () => setToastActive(false);\n\n const activateToast = () => setToastActive(true);\n\n const editMarkup = (\n <>\n {isSaved && toastActive && (\n \n )}\n \n \n );\n\n const saveAction = {\n content: 'Save and Publish',\n loading: isLoading,\n disabled: !isDirty || isLoading,\n onAction: form.handleSubmit(save),\n };\n\n return {\n question,\n isLoading,\n save,\n isSaving,\n isSaved,\n form,\n saveAction,\n editMarkup,\n };\n}\n","import { useContext } from 'react';\nimport { useQuery, useMutation, useQueryClient } from 'react-query';\nimport { useParams } from 'react-router-dom';\nimport APIContext from '../providers/APIContext';\nimport useQuestion from './useQuestion';\n\nexport default function useAnswers({ onCreationSuccess = null }) {\n const { fetchAnswers, createAnswer, deleteAnswer, patchQuestion } =\n useContext(APIContext);\n\n const queryClient = useQueryClient();\n\n const { id } = useParams();\n const questionId = parseInt(id);\n\n const { question } = useQuestion(questionId);\n const order = question?.config?.answer_order || [];\n\n const { isLoading, data: unorderedAnswers = [] } = useQuery(\n ['fetchAnswers', questionId],\n () => fetchAnswers(questionId),\n );\n\n // Order Answers\n\n const orderAnswers = (answers, order) => {\n let orderedAnswers = [];\n order.forEach((id) => {\n if (answers.find((q) => q.id === id))\n orderedAnswers.push(answers.find((q) => q.id === id));\n });\n return orderedAnswers;\n };\n\n const answers = orderAnswers(unorderedAnswers, order);\n\n // Add new answer\n\n const {\n mutate: create,\n isLoading: isCreating,\n isSuccess: isCreated,\n } = useMutation(\n (answer) =>\n createAnswer({\n ...answer,\n klaviyo_tag: answer.klaviyo_tag\n ? answer.klaviyo_tag\n : answer.text.answer\n .replace(/[^a-zA-Z0-9]/g, '')\n .toLowerCase()\n .substring(0, 50),\n question_id: questionId,\n style: {},\n config: {},\n products: [],\n }),\n {\n mutationKey: 'createAnswer',\n onSuccess: (newAnswer) => {\n patchQuestion(questionId, {\n config: { answer_order: [...order, newAnswer.id] },\n });\n queryClient.setQueryData(\n ['fetchAnswers', questionId],\n [...answers, newAnswer],\n );\n queryClient.setQueryData(\n ['fetchQuestion', questionId],\n (oldQuestion) => ({\n ...oldQuestion,\n config: { answer_order: [...order, newAnswer.id] },\n }),\n );\n onCreationSuccess();\n },\n },\n );\n\n // Delete answer\n\n const {\n mutate: del,\n isLoading: isDeleting,\n isSuccess: isDeleted,\n } = useMutation(\n (question) =>\n patchQuestion(questionId, {\n config: {\n answer_order: order.filter((id) => id !== question.id),\n },\n }),\n {\n mutationKey: 'deleteAnswer',\n onSuccess: ({ config: { answer_order: newOrder } }) => {\n let deletedAnswers = order.filter((q) => !newOrder.includes(q));\n //TODO: Handle deletion of other answers simultainiusly\n let deletedAnswerID = deletedAnswers[0];\n deleteAnswer(deletedAnswerID);\n queryClient.setQueryData(\n ['fetchAnswers', questionId],\n answers.filter((q) => q.id !== deletedAnswerID),\n );\n queryClient.setQueryData(\n ['fetchQuestion', questionId],\n (oldQuestion) => ({\n ...oldQuestion,\n config: {\n answer_order: order.filter((id) => id !== deletedAnswerID),\n },\n }),\n );\n },\n },\n );\n\n // Move answer (Re-arrange answer order)\n\n const {\n mutate: reOrder,\n isLoading: isMoving,\n isSuccess: isMoved,\n } = useMutation(\n (order) =>\n patchQuestion(questionId, {\n config: { answer_order: order },\n }),\n {\n mutationKey: 'moveAnswer',\n onSuccess: ({ config: { answer_order: newOrder } }) => {\n queryClient.setQueryData(\n ['fetchQuestion', questionId],\n (oldQuestion) => ({\n ...oldQuestion,\n config: { answer_order: newOrder },\n }),\n );\n },\n },\n );\n\n const move = (from, to) =>\n reOrder(\n order.map((val, idx) => {\n if (idx === from) return order[to];\n if (idx === to) return order[from];\n return val;\n }),\n );\n\n return {\n answers,\n isLoading,\n create,\n isCreating,\n isCreated,\n del,\n isDeleting,\n isDeleted,\n move,\n isMoving,\n isMoved,\n };\n}\n","import React, { useEffect } from 'react';\nimport { TextStyle, TextContainer, Modal } from '@shopify/polaris';\nimport { DeleteMinor } from '@shopify/polaris-icons';\nimport useAnswers from '../../../hooks/useAnswers';\n\nfunction AnswerDeleteModal({ open, onClose, answer }) {\n const { del: deleteAnswer, isDeleting, isDeleted } = useAnswers({});\n useEffect(() => {\n if (isDeleted) onClose();\n }, [isDeleted, onClose]);\n\n return (\n deleteAnswer(answer),\n loading: isDeleting,\n }}\n secondaryActions={[\n {\n content: 'Cancel',\n onAction: onClose,\n },\n ]}\n >\n \n \n

\n Are you sure you want to delete the following answer?\n
\n
\n

\n
\n \n {answer.text.answer}\n \n
\n \n );\n}\n\nexport default AnswerDeleteModal;\n","import React, { useState, useContext } from 'react';\nimport {\n ResourceItem,\n TextStyle,\n TextContainer,\n Thumbnail,\n Stack,\n Tooltip,\n Icon,\n} from '@shopify/polaris';\nimport { DragHandleMinor, DeleteMinor } from '@shopify/polaris-icons';\n\nimport { useRouteMatch } from 'react-router';\n\nimport StoreContext from '../../../providers/StoreContext';\n\nimport AnswerDeleteModal from './AnswerDeleteModal';\nimport { Draggable } from 'react-beautiful-dnd';\n\nfunction AnswersItem({ index, answer, campaign }) {\n const {\n id,\n assets: { image },\n text: { answer: answerText },\n } = answer;\n const { url } = useRouteMatch();\n const [deleteOpen, setDeleteOpen] = useState(false);\n\n const { isLoading, assetURL } = useContext(StoreContext);\n\n return (\n <>\n \n {(provided, snapshot) => {\n return (\n \n \n ) : (\n \n )\n }\n shortcutActions={[\n {\n icon: DeleteMinor,\n content: 'Delete',\n destructive: true,\n onAction: () => setDeleteOpen(true),\n },\n ]}\n >\n \n
\n \n \n \n
\n \n {answerText}\n \n
\n \n \n );\n }}\n
\n\n setDeleteOpen(false)}\n campaign={campaign}\n />\n \n );\n}\n\nexport default AnswersItem;\n","import React, { useCallback } from 'react';\nimport { Form, FormLayout, Modal, TextContainer } from '@shopify/polaris';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport ControlledTextField from '../../common/input/ControlledTextField';\nimport { imageHelpText } from '../../common/helpText';\nimport useAnswers from '../../../hooks/useAnswers';\n\nfunction QuestionCreateModal({ open, onClose }) {\n const form = useForm();\n\n const close = useCallback(() => {\n onClose();\n form.reset();\n }, [form, onClose]);\n\n const { create, isCreating } = useAnswers({ onCreationSuccess: close });\n\n const handleCreate = (question) => create(question);\n\n return (\n \n \n \n
\n \n \n \n \n

\n The Alias will be used as an identifier in external\n applications and aggregated statistics.\n

\n \n }\n />\n
\n
\n
\n
\n \n );\n}\n\nexport default QuestionCreateModal;\n","import React, { useCallback, useState } from 'react';\nimport { ResourceList, Button, EmptyState } from '@shopify/polaris';\n\nimport { DragDropContext, Droppable } from 'react-beautiful-dnd';\n\nimport AnswersItem from './AnswersItem';\nimport AnswerCreateModal from './AnswerCreateModal';\nimport useAnswers from '../../../hooks/useAnswers';\n\nexport default function AnswersList() {\n const { answers, isLoading, move, isMoving } = useAnswers({});\n\n const [createOpen, setCreateOpen] = useState(false);\n\n const onCreate = useCallback(() => setCreateOpen(true), []);\n\n return (\n <>\n \n move(source.index, destination.index)\n }\n >\n \n {(provided) => {\n return (\n
\n (\n \n )}\n alternateTool={\n \n }\n emptyState={\n setCreateOpen(true),\n }}\n />\n }\n />\n {provided.placeholder}\n
\n );\n }}\n
\n \n setCreateOpen(false)}\n />\n \n );\n}\n","import React from 'react';\nimport { Layout, Card } from '@shopify/polaris';\n\nimport AnswersList from './AnswersList';\n\nfunction AnswersSection() {\n return (\n \n \n \n \n \n );\n}\n\nexport default AnswersSection;\n","import React from 'react';\nimport { Layout } from '@shopify/polaris';\n\nimport QuestionSection from './QuestionSection';\nimport AnswersSection from './AnswersSection';\n\nfunction QuestionLayout() {\n return (\n \n \n \n \n );\n}\n\nexport default QuestionLayout;\n","import React from 'react';\nimport { Page, Loading } from '@shopify/polaris';\n\nimport { FormProvider } from 'react-hook-form';\n\nimport { useParams, useLocation } from 'react-router';\nimport QuestionLayout from './QuestionLayout';\n\nimport useQuestion from '../../../hooks/useQuestion';\n\nexport default function QuestionPage() {\n const { id } = useParams();\n const { isLoading, form, saveAction, editMarkup } = useQuestion(id);\n const { pathname: location } = useLocation();\n const url = location.substring(0, location.indexOf('/question/'));\n\n if (isLoading) return ;\n\n return (\n <>\n \n \n \n \n \n {editMarkup}\n \n );\n}\n","import React from 'react';\nimport { Layout, Card, FormLayout, TextContainer } from '@shopify/polaris';\n\nimport ControlledTextField from '../../common/input/ControlledTextField';\nimport { imageHelpText } from '../../common/helpText';\n\nfunction AnswerSection() {\n return (\n \n \n \n \n \n \n

\n The Alias will be used as an identifier in external\n applications and aggregated statistics.\n

\n \n }\n />\n
\n
\n
\n );\n}\n\nexport default AnswerSection;\n","export function resize(image_url, size = 'original') {\n // pico\t 16 x 16 pixels\n // icon\t 32 x 32 pixels\n // thumb\t50 x 50 pixels\n // small\t100 x 100 pixels\n // compact\t160 x 160 pixels\n // medium\t240 x 240 pixels\n // large\t480 x 480 pixels\n // grande\t600 x 600 pixels\n // original\t1024 x 1024 pixels\n const valid_sizes = [\n 'pico',\n 'icon',\n 'thumb',\n 'small',\n 'compact',\n 'medium',\n 'large',\n 'grande',\n 'original',\n ];\n\n if (!valid_sizes.includes(size))\n throw new Error(`'${size}' isn't a valid Shopify size parameter.`);\n\n return image_url?.replace(/.([^.]*)$/, `_${size}$&`);\n}\n","import { Toast } from '@shopify/polaris';\nimport React, { useContext, useState } from 'react';\nimport { useFieldArray, useForm, useFormContext } from 'react-hook-form';\nimport { useQuery, useMutation, useQueryClient } from 'react-query';\nimport { Prompt } from 'react-router-dom';\nimport APIContext from '../providers/APIContext';\n\nconst PRODUCT = 'shopify:product:'; // shopify:product: Shopify product, cheapest variant\nconst VARIANT = 'shopify:variant:'; // shopify:variant:: Shopify product variant\nconst COLLECTION = 'shopify:collection:'; //shopify:collection: All Shopify products in a collection\nconst TAG = 'shopify:tag:'; // shopify:tag: All Shopify products with a tag\n// const BLOG = 'blog:'; // blog: Blog resource with id\n\nexport default function useAnswer(id) {\n const { fetchAnswer, patchAnswer } = useContext(APIContext);\n\n const queryClient = useQueryClient();\n\n const { data: answer, isLoading } = useQuery(\n ['fetchAnswer', id],\n () => fetchAnswer(id),\n {\n onSuccess: (answer) => form.reset(answer),\n },\n );\n\n const { question_id: questionId } = answer || { question_id: null };\n\n const {\n mutate: save,\n isLoading: isSaving,\n isSuccess: isSaved,\n } = useMutation((answer) => patchAnswer(id, answer), {\n mutationKey: ['patchAnswer', id],\n onSuccess: (newAnswer) => {\n queryClient.setQueryData(['fetchAnswer', id], newAnswer);\n queryClient.setQueryData(['fetchAnswers', questionId], (answers) =>\n answers?.map((answer) => (answer.id === id ? newAnswer : answer)),\n );\n form.reset(newAnswer);\n activateToast();\n },\n });\n\n const formContext = useFormContext();\n const newForm = useForm();\n const form = formContext || newForm;\n\n const {\n formState: { isDirty },\n control,\n } = form;\n\n const selectedProducts = form.getValues().products\n ? form\n .getValues()\n .products.filter((product) => product.startsWith(PRODUCT))\n .map((product) => parseInt(product.replace(PRODUCT, '')))\n : form.getValues().products;\n\n const selectedCollections = form.getValues().products\n ? form\n .getValues()\n .products.filter((product) => product.startsWith(COLLECTION))\n .map((product) => parseInt(product.replace(COLLECTION, '')))\n : form.getValues().products;\n\n const selectedTags = form.getValues().products\n ? form\n .getValues()\n .products.filter((product) => product.startsWith(TAG))\n .map((product) => product.replace(TAG, ''))\n : form.getValues().products;\n\n const selectedVariants = form.getValues().products\n ? form\n .getValues()\n .products.filter((product) => product.startsWith(VARIANT))\n .map((product) => product.replace(VARIANT, ''))\n : form.getValues().products;\n\n const { replace } = useFieldArray({\n control,\n name: 'products',\n });\n\n const replaceProducts = (newProducts) =>\n replace(\n form\n .getValues()\n .products.filter((p) => !p.startsWith(PRODUCT))\n .concat(newProducts.map((p) => `${PRODUCT}${p}`)),\n );\n\n const replaceVariants = (newProducts) =>\n replace(\n form\n .getValues()\n .products.filter((p) => !p.startsWith(VARIANT))\n .concat(newProducts.map((v) => `${VARIANT}${v}`)),\n );\n\n const replaceCollections = (newCollections) =>\n replace(\n form\n .getValues()\n .products.filter((p) => !p.startsWith(COLLECTION))\n .concat(newCollections.map((c) => `${COLLECTION}${c}`)),\n );\n\n const replaceTags = (newTags) => {\n replace(\n form\n .getValues()\n .products.filter((p) => !p.startsWith(TAG))\n .concat(newTags.map((t) => `${TAG}${t}`)),\n );\n };\n\n const [toastActive, setToastActive] = useState(true);\n\n const dismissToast = () => setToastActive(false);\n\n const activateToast = () => setToastActive(true);\n\n const editMarkup = (\n <>\n {isSaved && toastActive && (\n \n )}\n \n \n );\n\n const saveAction = {\n content: 'Save and Publish',\n loading: isLoading,\n disabled: !isDirty,\n onAction: form.handleSubmit(save),\n };\n\n const hasFilters = form.getValues().products?.length > 0;\n\n const removeAllProducts = () => {\n replace([]);\n };\n\n return {\n answer,\n isLoading,\n save,\n isSaving,\n isSaved,\n form,\n saveAction,\n editMarkup,\n selectedProducts,\n replaceProducts,\n selectedCollections,\n replaceCollections,\n selectedTags,\n replaceTags,\n selectedVariants,\n replaceVariants,\n hasFilters,\n removeAllProducts,\n };\n}\n","import { Toast } from '@shopify/polaris';\nimport React, { useContext, useState } from 'react';\nimport { useQuery, useMutation, useQueryClient } from 'react-query';\n\nimport APIContext from '../providers/APIContext';\n\nexport default function useProducts() {\n const { fetchProducts, refreshProducts } = useContext(APIContext);\n\n const queryClient = useQueryClient();\n\n const { data: products = [], isLoading } = useQuery(\n 'fetchProducts',\n fetchProducts,\n );\n\n const {\n mutate: refresh,\n isLoading: isRefreshing,\n isSuccess: isRefreshed,\n } = useMutation(() => refreshProducts(), {\n mutationKey: 'refreshProducts',\n onSuccess: () => {\n activateToast();\n setTimeout(() => {\n queryClient.invalidateQueries('fetchProducts');\n }, 1000 * 60 * 3);\n },\n });\n\n const [toastActive, setToastActive] = useState(true);\n\n const dismissToast = () => setToastActive(false);\n\n const activateToast = () => setToastActive(true);\n\n const refreshToast = (\n <>\n {isRefreshed && toastActive && (\n \n )}\n \n );\n\n return {\n products,\n isLoading,\n refresh,\n isRefreshing,\n refreshToast,\n };\n}\n","import { useContext } from 'react';\nimport { useQuery } from 'react-query';\n\nimport APIContext from '../providers/APIContext';\n\nexport default function useTags() {\n const { fetchTags } = useContext(APIContext);\n\n const { data: tags = [], isLoading } = useQuery('fetchTags', fetchTags);\n\n return {\n tags,\n isLoading,\n };\n}\n","import { useContext } from 'react';\nimport { useQuery } from 'react-query';\n\nimport APIContext from '../providers/APIContext';\n\nexport default function useCollections() {\n const { fetchCollections } = useContext(APIContext);\n\n const { data: collections = [], isLoading } = useQuery(\n 'fetchCollections',\n fetchCollections,\n );\n\n return {\n collections,\n isLoading,\n };\n}\n","import React, { useState, useCallback, useEffect } from 'react';\nimport {\n ResourceList,\n Filters,\n Card,\n ResourceItem,\n TextStyle,\n Thumbnail,\n ChoiceList,\n Button,\n Stack,\n Pagination,\n SkeletonThumbnail,\n} from '@shopify/polaris';\n\nimport { RefreshMinor } from '@shopify/polaris-icons';\n\nimport { resize } from '../../common/utils/shopify/imageResize';\nimport { useParams } from 'react-router-dom';\nimport useAnswer from '../../../hooks/useAnswer';\nimport useProducts from '../../../hooks/useProducts';\nimport useTags from '../../../hooks/useTags';\nimport useCollections from '../../../hooks/useCollections';\n\nfunction ProductsList() {\n const { aid: id } = useParams();\n const { selectedProducts, replaceProducts } = useAnswer(id);\n\n const {\n isLoading: isLoadingProducts,\n products,\n refresh,\n isRefreshing,\n refreshToast,\n } = useProducts();\n const { isLoading: isLoadingTags, tags } = useTags();\n const { isLoading: isLoadingCollections, collections } = useCollections();\n\n const [queryValue, setQueryValue] = useState(null);\n const [collectionSelection, setCollectionSelection] = useState([]);\n const [tagSelection, setTagSelection] = useState([]);\n const handleCollectionSelectionChange = useCallback(\n (value) => setCollectionSelection(value),\n [],\n );\n const handleTagSelectionChange = useCallback(\n (value) => setTagSelection(value),\n [],\n );\n\n const filteredProducts = products\n .filter((product) =>\n product.title.toLowerCase().includes(queryValue?.toLowerCase() || ''),\n )\n .filter((product) =>\n product.tags\n .map((tag) => tag.name)\n .filter((productTag) => tagSelection.includes(productTag)).length > 0 ||\n tagSelection.length === 0\n ? true\n : false,\n )\n .filter((product) =>\n product.collections\n .map((collection) => collection.handle)\n .filter((colelctionHandle) =>\n collectionSelection.includes(colelctionHandle),\n ).length > 0 || collectionSelection.length === 0\n ? true\n : false,\n );\n\n const handleQueryValueChange = useCallback(\n (value) => setQueryValue(value),\n [],\n );\n const handleQueryValueRemove = useCallback(() => setQueryValue(null), []);\n\n const filters = [\n {\n key: 'collection',\n label: 'Collection',\n filter: (\n ({\n label: collection.title,\n value: collection.handle,\n }))}\n selected={collectionSelection || []}\n onChange={handleCollectionSelectionChange}\n allowMultiple\n />\n ),\n shortcut: true,\n },\n {\n key: 'tag',\n label: 'Tag',\n filter: (\n ({\n label: `${tag.name} (${tag.product_count})`,\n value: tag.name,\n }))}\n selected={tagSelection || []}\n onChange={handleTagSelectionChange}\n allowMultiple\n />\n ),\n shortcut: true,\n },\n ];\n\n const [offset, setOffset] = useState(0);\n const limit = 5;\n useEffect(\n () => setOffset(0),\n [queryValue, collectionSelection, tagSelection],\n );\n\n return (\n <>\n \n \n product.data.id}\n renderItem={({ data: { id }, image, image_alt, title }) => (\n \n ) : (\n \n )\n }\n >\n

\n {title}\n

\n \n )}\n selectable\n selectedItems={selectedProducts}\n onSelectionChange={replaceProducts}\n filterControl={\n \n
\n \n Refresh\n \n
\n \n }\n />\n
\n {filteredProducts.length > limit && (\n \n \n 0}\n onPrevious={() => setOffset((prev) => prev - limit)}\n hasNext={filteredProducts.length > offset + limit}\n onNext={() => setOffset((prev) => prev + limit)}\n />\n \n \n )}\n
\n {refreshToast}\n \n );\n}\n\nexport default ProductsList;\n","import React from 'react';\nimport { Layout, Card } from '@shopify/polaris';\n\nimport ProductsList from './ProductsList';\n\nfunction ProductsSection() {\n return (\n \n \n \n \n \n );\n}\n\nexport default ProductsSection;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport {\n ResourceList,\n Filters,\n Card,\n ResourceItem,\n TextStyle,\n Thumbnail,\n Stack,\n Pagination,\n SkeletonThumbnail,\n} from '@shopify/polaris';\n\nimport { resize } from '../../common/utils/shopify/imageResize';\nimport { useParams } from 'react-router-dom';\nimport useAnswer from '../../../hooks/useAnswer';\n\nimport useCollections from '../../../hooks/useCollections';\n\nfunction CollectionsList() {\n const { aid: id } = useParams();\n const { selectedCollections, replaceCollections } = useAnswer(id);\n\n const { isLoading: isLoadingCollections, collections } = useCollections();\n\n const [queryValue, setQueryValue] = useState(null);\n\n const filteredProducts = collections.filter((product) =>\n product.title.toLowerCase().includes(queryValue?.toLowerCase() || ''),\n );\n\n const handleQueryValueChange = useCallback(\n (value) => setQueryValue(value),\n [],\n );\n const handleQueryValueRemove = useCallback(() => setQueryValue(null), []);\n\n const [offset, setOffset] = useState(0);\n const limit = 5;\n useEffect(() => setOffset(0), [queryValue]);\n\n return (\n <>\n \n \n collection.collection_id}\n renderItem={({ collection_id: id, image, image_alt, title }) => (\n \n ) : (\n \n )\n }\n >\n

\n {title}\n

\n \n )}\n selectable\n selectedItems={selectedCollections}\n onSelectionChange={replaceCollections}\n filterControl={\n \n }\n />\n
\n {filteredProducts.length > limit && (\n \n \n 0}\n onPrevious={() => setOffset((prev) => prev - limit)}\n hasNext={filteredProducts.length > offset + limit}\n onNext={() => setOffset((prev) => prev + limit)}\n />\n \n \n )}\n
\n \n );\n}\n\nexport default CollectionsList;\n","import React from 'react';\nimport { Layout, Card } from '@shopify/polaris';\n\nimport CollectionsList from './CollectionsList';\n\nfunction CollectionsSection() {\n return (\n \n \n \n \n \n );\n}\n\nexport default CollectionsSection;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport {\n ResourceList,\n Filters,\n Card,\n ResourceItem,\n Stack,\n Pagination,\n} from '@shopify/polaris';\n\nimport { useParams } from 'react-router-dom';\nimport useAnswer from '../../../hooks/useAnswer';\n\nimport useTags from '../../../hooks/useTags';\n\nfunction TagsList() {\n const { aid: id } = useParams();\n const { selectedTags, replaceTags } = useAnswer(id);\n\n const { isLoading: isLoadingTags, tags } = useTags();\n\n const [queryValue, setQueryValue] = useState(null);\n\n const filteredProducts = tags.filter((tag) =>\n tag.name.toLowerCase().includes(queryValue?.toLowerCase() || ''),\n );\n\n const handleQueryValueChange = useCallback(\n (value) => setQueryValue(value),\n [],\n );\n const handleQueryValueRemove = useCallback(() => setQueryValue(null), []);\n\n const [offset, setOffset] = useState(0);\n const limit = 5;\n useEffect(() => setOffset(0), [queryValue]);\n\n return (\n <>\n \n \n tag.name}\n renderItem={({ name }) => (\n \n

{name}

\n
\n )}\n selectable\n selectedItems={selectedTags}\n onSelectionChange={replaceTags}\n filterControl={\n \n }\n />\n
\n {filteredProducts.length > limit && (\n \n \n 0}\n onPrevious={() => setOffset((prev) => prev - limit)}\n hasNext={filteredProducts.length > offset + limit}\n onNext={() => setOffset((prev) => prev + limit)}\n />\n \n \n )}\n
\n \n );\n}\n\nexport default TagsList;\n","import React from 'react';\nimport { Layout, Card } from '@shopify/polaris';\n\nimport TagsList from './TagsList';\n\nfunction TagsSection() {\n return (\n \n \n \n \n \n );\n}\n\nexport default TagsSection;\n","import React, { useState, useCallback, useEffect } from 'react';\nimport {\n ResourceList,\n Filters,\n Card,\n ResourceItem,\n ChoiceList,\n Button,\n Stack,\n Pagination,\n} from '@shopify/polaris';\n\nimport { RefreshMinor } from '@shopify/polaris-icons';\n\nimport { useParams } from 'react-router-dom';\nimport useAnswer from '../../../hooks/useAnswer';\nimport useProducts from '../../../hooks/useProducts';\nimport useTags from '../../../hooks/useTags';\nimport useCollections from '../../../hooks/useCollections';\n\nfunction VariantsList() {\n const { aid: id } = useParams();\n const { selectedVariants, replaceVariants } = useAnswer(id);\n\n const {\n isLoading: isLoadingProducts,\n products,\n refresh,\n isRefreshing,\n refreshToast,\n } = useProducts();\n const { isLoading: isLoadingTags, tags } = useTags();\n const { isLoading: isLoadingCollections, collections } = useCollections();\n\n const variants = products\n .flatMap((product) =>\n product.data.variants.map((variant) => ({\n ...variant,\n product_id: product.data.id,\n product_title: product.title,\n product_tags: product.tags,\n product_collections: product.collections,\n })),\n )\n .map((variant) => ({\n title: `${variant.product_title} (${variant.title})`,\n id: `${variant.product_id}:${variant.id}`,\n collections: variant.product_collections,\n tags: variant.product_tags,\n }));\n\n const [queryValue, setQueryValue] = useState(null);\n const [collectionSelection, setCollectionSelection] = useState([]);\n const [tagSelection, setTagSelection] = useState([]);\n const handleCollectionSelectionChange = useCallback(\n (value) => setCollectionSelection(value),\n [],\n );\n const handleTagSelectionChange = useCallback(\n (value) => setTagSelection(value),\n [],\n );\n\n const filteredVariants = variants\n .filter((product) =>\n product.title.toLowerCase().includes(queryValue?.toLowerCase() || ''),\n )\n .filter((product) =>\n product.tags\n .map((tag) => tag.name)\n .filter((productTag) => tagSelection.includes(productTag)).length > 0 ||\n tagSelection.length === 0\n ? true\n : false,\n )\n .filter((product) =>\n product.collections\n .map((collection) => collection.handle)\n .filter((colelctionHandle) =>\n collectionSelection.includes(colelctionHandle),\n ).length > 0 || collectionSelection.length === 0\n ? true\n : false,\n );\n\n const handleQueryValueChange = useCallback(\n (value) => setQueryValue(value),\n [],\n );\n const handleQueryValueRemove = useCallback(() => setQueryValue(null), []);\n\n const filters = [\n {\n key: 'collection',\n label: 'Collection',\n filter: (\n ({\n label: collection.title,\n value: collection.handle,\n }))}\n selected={collectionSelection || []}\n onChange={handleCollectionSelectionChange}\n allowMultiple\n />\n ),\n shortcut: true,\n },\n {\n key: 'tag',\n label: 'Tag',\n filter: (\n ({\n label: `${tag.name} (${tag.product_count})`,\n value: tag.name,\n }))}\n selected={tagSelection || []}\n onChange={handleTagSelectionChange}\n allowMultiple\n />\n ),\n shortcut: true,\n },\n ];\n\n const [offset, setOffset] = useState(0);\n const limit = 5;\n useEffect(\n () => setOffset(0),\n [queryValue, collectionSelection, tagSelection],\n );\n\n return (\n <>\n \n \n variant.id}\n renderItem={({ id, title }) => (\n \n

{title}

\n
\n )}\n selectable\n selectedItems={selectedVariants}\n onSelectionChange={replaceVariants}\n filterControl={\n \n
\n \n Refresh\n \n
\n \n }\n />\n
\n {filteredVariants.length > limit && (\n \n \n 0}\n onPrevious={() => setOffset((prev) => prev - limit)}\n hasNext={filteredVariants.length > offset + limit}\n onNext={() => setOffset((prev) => prev + limit)}\n />\n \n \n )}\n
\n {refreshToast}\n \n );\n}\n\nexport default VariantsList;\n","import React from 'react';\nimport { Layout, Card } from '@shopify/polaris';\n\nimport VariantsList from './VariantsList';\n\nfunction VariantsSection() {\n return (\n \n \n \n \n \n );\n}\n\nexport default VariantsSection;\n","import React from 'react';\nimport { Layout, Card, TextContainer } from '@shopify/polaris';\n\nimport { useParams } from 'react-router-dom';\nimport useQuestion from '../../../hooks/useQuestion';\nimport useAnswer from '../../../hooks/useAnswer';\n\nfunction RankingSection() {\n const { qid, aid } = useParams();\n const question = useQuestion(qid);\n\n const isFiltering = question.question?.filter_products;\n\n const title = isFiltering ? 'Filtering' : 'Ranking';\n const description = isFiltering\n ? 'Use the following categories to filter recommendable products. You can choose collections, tags, products as well as variants.'\n : 'Use the following categories to rank recommendable products. You can choose collections, tags, products as well as variants.';\n\n const { hasFilters, removeAllProducts } = useAnswer(aid);\n\n const card = hasFilters\n ? 'This question has an active selection (see below).'\n : 'This question currently has no active selection and thus does not impact the recommendable products.';\n\n const action = hasFilters\n ? {\n content: 'Remove all selections',\n destructive: true,\n onAction: removeAllProducts,\n }\n : false;\n\n return (\n \n \n \n

{card}

\n
\n
\n \n );\n}\n\nexport default RankingSection;\n","import React from 'react';\nimport { Layout } from '@shopify/polaris';\n\nimport AnswerSection from './AnswerSection';\nimport ProductsSection from './ProductsSection';\nimport CollectionsSection from './CollectionsSection';\nimport TagsSection from './TagsSection';\nimport VariantsSection from './VariantsSection';\nimport RankingSection from './RankingSection';\n\nfunction AnswerLayout() {\n return (\n \n \n \n \n \n \n \n \n );\n}\n\nexport default AnswerLayout;\n","import React from 'react';\nimport { Page, Loading } from '@shopify/polaris';\n\nimport { FormProvider } from 'react-hook-form';\n\nimport { useParams, useLocation } from 'react-router';\nimport AnswerLayout from './AnswerLayout';\n\nimport useAnswer from '../../../hooks/useAnswer';\n\nexport default function AnswerPage() {\n const { aid: id } = useParams();\n const { isLoading, form, saveAction, editMarkup } = useAnswer(id);\n const { pathname: location } = useLocation();\n const url = location.substring(0, location.indexOf('/answer/'));\n\n if (isLoading) return ;\n\n return (\n <>\n \n \n \n \n \n {editMarkup}\n \n );\n}\n","import { useContext } from 'react';\nimport { useQuery, useMutation, useQueryClient } from 'react-query';\nimport APIContext from '../providers/APIContext';\nimport CampaignContext from '../providers/CampaignContext';\nimport useCampaign from './useCampaign';\n\nexport default function useQuestions({ onCreationSuccess = null }) {\n const { fetchQuestions, createQuestion, deleteQuestion, patchCampaign } =\n useContext(APIContext);\n\n const queryClient = useQueryClient();\n\n const { campaignId } = useContext(CampaignContext);\n\n const {\n campaign: {\n config: {\n question: { default_question_order: order },\n },\n },\n } = useCampaign();\n\n const { isLoading, data: unorderedQuestions = [] } = useQuery(\n ['fetchQuestions', campaignId],\n () => fetchQuestions(campaignId),\n );\n\n // Order questions\n\n const orderQuestions = (questions, order) => {\n let orderedQuestions = [];\n order.forEach((id) => {\n if (questions.find((q) => q.id === id))\n orderedQuestions.push(questions.find((q) => q.id === id));\n });\n return orderedQuestions;\n };\n\n const questions = orderQuestions(unorderedQuestions, order);\n\n // Add new question\n\n const {\n mutate: create,\n isLoading: isCreating,\n isSuccess: isCreated,\n } = useMutation(\n (question) =>\n createQuestion({\n ...question,\n klaviyo_alias: question.klaviyo_alias\n ? question.klaviyo_alias\n : question.text.question\n .replace(/[^a-zA-Z0-9]/g, '')\n .toLowerCase()\n .substring(0, 50),\n questionnaire_id: campaignId,\n config: { ...question.config, answer_order: [] },\n style: {},\n assets: {},\n }),\n {\n mutationKey: 'createQuestion',\n onSuccess: (newQuestion) => {\n patchCampaign(campaignId, {\n config: {\n question: { default_question_order: [...order, newQuestion.id] },\n },\n });\n queryClient.setQueryData(\n ['fetchQuestions', campaignId],\n [...questions, newQuestion],\n );\n queryClient.setQueryData(\n ['fetchCampaign', campaignId],\n (oldCampaign) => ({\n ...oldCampaign,\n config: {\n question: { default_question_order: [...order, newQuestion.id] },\n },\n }),\n );\n onCreationSuccess();\n },\n },\n );\n\n // Delete question\n\n const {\n mutate: del,\n isLoading: isDeleting,\n isSuccess: isDeleted,\n } = useMutation(\n (question) =>\n patchCampaign(campaignId, {\n config: {\n question: {\n default_question_order: order.filter((id) => id !== question.id),\n },\n },\n }),\n {\n mutationKey: 'deleteQuestion',\n onSuccess: ({\n config: {\n question: { default_question_order: newOrder },\n },\n }) => {\n let deletedQuestions = order.filter((q) => !newOrder.includes(q));\n //TODO: Handle deletion of other questions simultainiusly\n let deletedQuestionID = deletedQuestions[0];\n deleteQuestion(deletedQuestionID);\n queryClient.setQueryData(\n ['fetchQuestions', campaignId],\n questions.filter((q) => q.id !== deletedQuestionID),\n );\n queryClient.setQueryData(\n ['fetchCampaign', campaignId],\n (oldCampaign) => ({\n ...oldCampaign,\n config: {\n question: {\n default_question_order: order.filter(\n (id) => id !== deletedQuestionID,\n ),\n },\n },\n }),\n );\n },\n },\n );\n\n // Move question (Re-arrange question order)\n\n const {\n mutate: reOrder,\n isLoading: isMoving,\n isSuccess: isMoved,\n } = useMutation(\n (order) =>\n patchCampaign(campaignId, {\n config: { question: { default_question_order: order } },\n }),\n {\n mutationKey: 'moveQuestion',\n onSuccess: ({\n config: {\n question: { default_question_order: newOrder },\n },\n }) => {\n queryClient.setQueryData(\n ['fetchCampaign', campaignId],\n (oldCampaign) => ({\n ...oldCampaign,\n config: { question: { default_question_order: newOrder } },\n }),\n );\n },\n },\n );\n\n const move = (from, to) =>\n reOrder(\n order.map((val, idx) => {\n if (idx === from) return order[to];\n if (idx === to) return order[from];\n return val;\n }),\n );\n\n return {\n questions,\n isLoading,\n create,\n isCreating,\n isCreated,\n del,\n isDeleting,\n isDeleted,\n move,\n isMoving,\n isMoved,\n };\n}\n","import React, { useEffect } from 'react';\nimport {\n Stack,\n TextStyle,\n Badge,\n TextContainer,\n Modal,\n} from '@shopify/polaris';\nimport { DeleteMinor } from '@shopify/polaris-icons';\nimport useQuestions from '../../../hooks/useQuestions';\n\nfunction QuestionDeleteModal({ question, open, onClose }) {\n const {\n config: { multiple_choice, optional },\n text: { question: questionText },\n } = question;\n\n const { del: deleteQuestion, isDeleting, isDeleted } = useQuestions({});\n useEffect(() => {\n if (isDeleted) onClose();\n }, [isDeleted, onClose]);\n\n return (\n deleteQuestion(question),\n loading: isDeleting,\n }}\n secondaryActions={[\n {\n content: 'Cancel',\n onAction: onClose,\n },\n ]}\n >\n \n \n

\n Are you sure you want to delete the following question?\n
\n
\n

\n
\n \n {questionText}\n \n \n {multiple_choice ? 'Multiple choice' : 'Single choice'}\n \n {optional ? 'Optional' : 'Non-optional'}\n {/* \n {answers.length} {answers.length === 1 ? 'answer' : 'answers'}\n */}\n \n \n
\n \n );\n}\n\nexport default QuestionDeleteModal;\n","import React, { useState } from 'react';\nimport {\n ResourceItem,\n Stack,\n TextStyle,\n Tooltip,\n Icon,\n Badge,\n TextContainer,\n} from '@shopify/polaris';\nimport { DragHandleMinor, DeleteMinor } from '@shopify/polaris-icons';\n\nimport { Draggable } from 'react-beautiful-dnd';\nimport { useRouteMatch } from 'react-router';\nimport QuestionDeleteModal from './QuestionDeleteModal';\n\nfunction QuestionsItem({ index, question, campaign }) {\n const {\n id,\n config: { multiple_choice, optional },\n text: { question: questionText },\n filter_products,\n } = question;\n const { url } = useRouteMatch();\n const [deleteOpen, setDeleteOpen] = useState(false);\n\n return (\n <>\n \n {(provided, snapshot) => {\n return (\n \n setDeleteOpen(true),\n },\n ]}\n >\n \n
\n \n \n \n
\n \n {questionText}\n \n \n {multiple_choice ? 'Multiple choice' : 'Single choice'}\n \n {optional ? 'Optional' : 'Non-optional'}\n {filter_products ? 'Filtering' : 'Ranking'}\n {/* \n {answers.length}{' '}\n {answers.length === 1 ? 'answer' : 'answers'}\n */}\n \n \n
\n \n \n );\n }}\n
\n setDeleteOpen(false)}\n campaign={campaign}\n />\n \n );\n}\n\nexport default QuestionsItem;\n","import React, { useCallback } from 'react';\nimport { Form, FormLayout, Modal, TextContainer } from '@shopify/polaris';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport ControlledTextField from '../../common/input/ControlledTextField';\nimport ControlledCheckbox from '../../common/input/ControlledCheckbox';\nimport useQuestions from '../../../hooks/useQuestions';\n\nfunction QuestionCreateModal({ open, onClose }) {\n const form = useForm();\n\n const close = useCallback(() => {\n onClose();\n form.reset();\n }, [form, onClose]);\n\n const { create, isCreating } = useQuestions({ onCreationSuccess: close });\n\n const handleCreate = (question) => create(question);\n\n return (\n \n \n \n
\n \n \n \n

\n If selected, the customer will have the option to skip the\n question.\n

\n \n }\n />\n \n

\n If selected, the customer will have the option to select\n multiple answers.\n

\n \n }\n />\n \n

\n If selected, answers from this question will restrict the\n recommended product pool. Use with caution, as this can\n lead to empty results.\n

\n \n }\n />\n \n

\n The Alias will be used as an identifier in external\n applications and aggregated statistics.\n

\n \n }\n />\n
\n
\n
\n
\n \n );\n}\n\nexport default QuestionCreateModal;\n","import React, { useCallback, useState } from 'react';\nimport { ResourceList, Button, EmptyState, Link } from '@shopify/polaris';\n\nimport { DragDropContext, Droppable } from 'react-beautiful-dnd';\n\nimport QuestionsItem from './QuestionsItem';\nimport QuestionCreateModal from './QuestionCreateModal';\nimport useQuestions from '../../../hooks/useQuestions';\n\nexport default function QuestionsList() {\n const { questions, isLoading, move, isMoving } = useQuestions({});\n\n const [createOpen, setCreateOpen] = useState(false);\n\n const onCreate = useCallback(() => setCreateOpen(true), []);\n\n return (\n <>\n \n move(source.index, destination.index)\n }\n >\n \n {(provided) => {\n return (\n
\n (\n \n )}\n alternateTool={\n \n }\n emptyState={\n setCreateOpen(true),\n }}\n >\n \n \n
\n

\n Watch the video to see our tipps on how to formulate\n questions for the best results. If you need further\n support, drop us a line:{' '}\n \n hello@meja.io\n \n

\n \n }\n />\n\n {provided.placeholder}\n \n );\n }}\n
\n \n setCreateOpen(false)}\n />\n \n );\n}\n","import React from 'react';\nimport { Layout, Card } from '@shopify/polaris';\n\nimport QuestionsList from './QuestionsList';\n\nfunction QuestionsSection() {\n return (\n \n \n \n \n \n );\n}\n\nexport default QuestionsSection;\n","import React from 'react';\nimport { Layout, FooterHelp, Link } from '@shopify/polaris';\n\nimport QuestionsSection from './QuestionsSection';\n\nfunction QuestionsLayout() {\n return (\n \n \n \n \n Need help setting up your questionnaire? Get in touch at{' '}\n \n hello@meja.io\n \n \n \n \n );\n}\n\nexport default QuestionsLayout;\n","import React from 'react';\nimport { Page, Loading } from '@shopify/polaris';\n\nimport useCampaign from '../../../hooks/useCampaign';\nimport QuestionsLayout from './QuestionsLayout';\n\nexport default function QuestionsPage() {\n const { isLoading, campaign } = useCampaign();\n\n if (isLoading) return ;\n\n return (\n \n \n \n );\n}\n","import React from 'react';\nimport { Route, Switch, useRouteMatch } from 'react-router';\n\nimport QuestionPage from './QuestionPage';\nimport AnswerPage from './AnswerPage';\nimport QuestionsPage from './QuestionsPage';\n\nexport default function QuestionnaireRouter() {\n const { url } = useRouteMatch();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React from 'react';\nimport { Switch, Route, useRouteMatch } from 'react-router';\n\nimport BrandingPage from '../branding/BrandingPage';\nimport EmailPage from '../email/EmailPage';\nimport PagesPage from '../pages/PagesPage';\nimport IntegrationsPage from '../integrations/IntegrationsPage';\nimport CampaignOverviewPage from './CampaignOverviewPage';\nimport QuestionnaireRouter from '../questionnaire/QuestionnaireRouter';\n\nfunction CampaignPage() {\n const { path } = useRouteMatch();\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default CampaignPage;\n","export const assets = {\n email: {\n image:\n 'https://images.unsplash.com/photo-1584438784894-089d6a62b8fa?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1170&q=80',\n },\n welcome: {\n image:\n 'https://images.unsplash.com/photo-1556741533-6e6a62bd8b49?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=1170&q=80',\n },\n calculation: {\n spinner:\n 'https://icon-library.com/images/animated-loading-icon/animated-loading-icon-3.jpg',\n },\n};\n","export const config = {\n email: {\n ask_name: true,\n name_required: false,\n email_required: true,\n continue_without_email: true,\n },\n welcome: { skip: false },\n question: { default_question_order: [] },\n calculation: { min_waiting_time_ms: 2000 },\n results: { results_hard_limit: 6, results_soft_limit: 3 },\n};\n","export const style = {\n variables: {\n '--meja-text-color': '#111111',\n '--meja-color-error': '#d61411',\n '--meja-price-color': '#1c1d1d',\n '--meja-color-primary': '#111111',\n '--meja-button-padding': '11px',\n '--meja-text-font-size': '14px',\n '--meja-color-secondary': '#ffffff',\n '--meja-price-font-size': '14px',\n '--meja-button-font-size': '13px',\n '--meja-header-font-size': '28px',\n '--meja-text-font-family': 'sans-serif',\n '--meja-price-font-family': 'sans-serif',\n '--meja-button-font-family': 'sans-serif',\n '--meja-button-font-weight': '700',\n '--meja-header-font-family': 'serif',\n '--meja-input-text-padding': '11px',\n '--meja-link-subdued-color': '#656565',\n '--meja-button-border-width': '1px',\n '--meja-product-title-color': '#111111',\n '--meja-subheader-font-size': '16px',\n '--meja-color-primary-accent': '#60bfa4',\n '--meja-input-text-font-size': '16px',\n '--meja-button-text-transform': 'uppercase',\n '--meja-color-primary-subdued': '#656565',\n '--meja-subheader-font-family': 'sans-serif',\n '--meja-color-secondary-accent': '#e6e6e6',\n '--meja-input-text-font-family': 'sans-serif',\n '--meja-color-secondary-subdued': '#f6f6f6',\n '--meja-header-font-size-mobile': '32px',\n '--meja-input-text-border-width': '1px',\n '--meja-product-title-font-size': '16px',\n '--meja-link-subdued-hover-color': '#60bfa4',\n '--meja-product-title-font-family': 'serif',\n '--meja-subheader-font-size-mobile': '14px',\n '--meja-product-title-text-transform': 'none',\n '--meja-input-text-focus-border-width': '2px',\n },\n};\n","export const text = {\n email: {\n header: 'Access your recommendation any time',\n subheader:\n \"We'll send you your recommendation by e-mail so you can access it any time.\",\n name_error: 'Please enter your name',\n email_error: 'Please enter a valid e-mail address',\n name_placeholder: 'Name',\n email_placeholder: 'E-Mail',\n confirm_button_text: 'Confirm',\n continue_without_email_text:\n \"I'd rather not receive my recommendation by e-mail\",\n },\n results: {\n from: 'from',\n header: 'These products would be perfect for you 🤩',\n restart: 'start over',\n currency: '$',\n subheader: 'This selection was compiled based on your answers',\n show_more: 'show more',\n },\n welcome: {\n button: \"Let's go\",\n header: \"We'll help you find the perfect products for you\",\n subheader: 'It only takes a minute or two.',\n },\n question: { next: 'skip', continue: 'continue', previous: 'previous' },\n calculation: {\n header: 'Your personalized recommendation is being computed',\n subheader: 'Please wait and do not close this window',\n },\n};\n","import React, { useContext } from 'react';\nimport { Form, FormLayout, Modal } from '@shopify/polaris';\nimport { useMutation, useQueryClient } from 'react-query';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport ControlledTextField from '../../common/input/ControlledTextField';\n\nimport {\n defaultConfig,\n defaultText,\n defaultAssets,\n defaultStyle,\n} from '../../../defaults';\nimport APIContext from '../../../providers/APIContext';\n\nfunction QuestionCreateModal({ campaigns, ...rest }) {\n const form = useForm();\n\n const { createCampaign } = useContext(APIContext);\n\n const queryClient = useQueryClient();\n\n const creation = useMutation((campaign) => createCampaign(campaign), {\n onSuccess: () => {\n queryClient.invalidateQueries(['fetchCampaigns']);\n rest.onClose();\n },\n });\n\n const handleCreate = (campaign) => {\n campaign.text = defaultText;\n campaign.style = defaultStyle;\n campaign.config = defaultConfig;\n campaign.assets = defaultAssets;\n if (\n !campaigns\n .map((campaign) => campaign.slug)\n .includes(campaign.name.replace(/\\s+/g, '').toLowerCase())\n )\n campaign.slug = campaign.name.replace(/\\s+/g, '').toLowerCase();\n else\n campaign.slug = Math.random()\n .toString(36)\n .replace(/[^a-z]+/g, '')\n .substr(0, 5);\n campaign.email_template = '';\n campaign.custom_email_template = false;\n campaign.email_subject = `${campaign.name} recommendations`;\n campaign.klaviyo_list = '';\n campaign.klaviyo_event = false;\n creation.mutate(campaign);\n };\n\n return (\n \n \n \n
\n \n \n \n
\n
\n
\n \n );\n}\n\nexport default QuestionCreateModal;\n","import React, { useContext, useState, useEffect, useCallback } from 'react';\nimport { Switch, Route, useParams } from 'react-router';\nimport { useQuery } from 'react-query';\n\nimport {\n Page,\n Loading,\n Layout,\n ResourceList,\n Card,\n EmptyState,\n Link,\n} from '@shopify/polaris';\n\nimport CampaignItem from './CampaignItem';\n\nimport CampaignPage from './CampaignPage';\nimport CampaignCreateModal from './CampaignCreateModal';\nimport APIContext from '../../../providers/APIContext';\nimport CampaignContext from '../../../providers/CampaignContext';\n\nfunction CampaignsPage() {\n const { campaignId, setCampaignId } = useContext(CampaignContext);\n\n const { fetchCampaigns } = useContext(APIContext);\n\n const { slug } = useParams();\n\n const {\n isLoading,\n isFetching,\n error,\n data: campaigns,\n } = useQuery('fetchCampaigns', fetchCampaigns);\n\n useEffect(() => {\n if (campaigns && slug) {\n setCampaignId(campaigns.find((campaign) => campaign.slug === slug).id);\n } else if (!slug) {\n setCampaignId(null);\n }\n });\n\n const [createOpen, setCreateOpen] = useState(false);\n\n const onCreate = useCallback(() => setCreateOpen(true), []);\n\n if (isLoading || isFetching) return ;\n\n if (error) return 'An error has occurred: ' + error.message;\n\n if (campaignId) return ;\n\n const primaryAction = isLoading\n ? { content: 'Create Project', disabled: true }\n : { content: 'Create Project', onClick: onCreate };\n\n return (\n \n \n \n \n \n \n (\n \n )}\n emptyState={\n setCreateOpen(true),\n }}\n >\n \n \n \n

\n Watch this video to see how you can create your first\n project. If you need further support, let us know:{' '}\n \n hello@meja.io\n {' '}\n - We're happy to help.\n

\n \n }\n />\n
\n
\n
\n setCreateOpen(false)}\n campaigns={campaigns}\n />\n
\n
\n
\n );\n}\n\nexport default CampaignsPage;\n","import React from 'react';\nimport {\n ResourceItem,\n Avatar,\n TextStyle,\n Stack,\n Badge,\n} from '@shopify/polaris';\n\nimport { DateTime } from 'luxon';\n\nimport md5 from 'md5';\n\nfunction Recommendation({ recommendation, ...rest }) {\n const { created_at, email, email_sent, name, slug, campaign } =\n recommendation;\n\n const avatar = `https://www.gravatar.com/avatar/${md5(\n email.trim().toLowerCase(),\n )}?d=404`;\n\n const issued = DateTime.fromISO(created_at).toRelative();\n const campaignBadge = campaign ? (\n {campaign}\n ) : (\n <>\n );\n const emailSentBadge = email_sent ? (\n E-mail sent\n ) : (\n No e-mail sent\n );\n const nameDisplay = name ? (\n {name}\n ) : (\n No name\n );\n const emailDisplay = email ? (\n email\n ) : (\n No e-mail\n );\n\n return (\n }\n {...rest}\n >\n \n \n {nameDisplay}\n \n {emailDisplay}\n {emailSentBadge}\n \n \n \n {issued}\n
\n {campaignBadge}\n
\n
\n \n );\n}\n\nexport default Recommendation;\n","import React, { useContext } from 'react';\nimport { Modal, Stack } from '@shopify/polaris';\n\nimport { useForm, FormProvider } from 'react-hook-form';\nimport { useQuery, useMutation } from 'react-query';\n\nimport { Select, DatePicker } from '../../common/input';\n\nimport { DateTime } from 'luxon';\nimport APIContext from '../../../providers/APIContext';\n\nfunction ExportModal(props) {\n const form = useForm();\n\n const now = DateTime.now();\n const { year, month } = now;\n\n const defaultDateRage = {\n start: now.minus({ months: 1 }).toJSDate(),\n end: now.toJSDate(),\n };\n\n const { fetchCampaigns, exportRecommendations } = useContext(APIContext);\n\n const { isLoading: isLoadingCampaings, data: campaigns = [] } = useQuery(\n 'fetchCampaigns',\n fetchCampaigns,\n );\n\n let campaignsOptions = [\n {\n label: 'All campaigns',\n value: -1,\n },\n ...campaigns.map((campaign) => ({\n label: campaign.name,\n value: campaign.id,\n })),\n ];\n\n // From: https://stackoverflow.com/questions/16376161/javascript-set-filename-to-be-downloaded/16377813#16377813\n // TODO: Surely there is a better way\n var download = function (content, fileName, mimeType) {\n var a = document.createElement('a');\n mimeType = mimeType || 'application/octet-stream';\n\n if (navigator.msSaveBlob) {\n // IE10\n navigator.msSaveBlob(\n new Blob([content], {\n type: mimeType,\n }),\n fileName,\n );\n } else if (URL && 'download' in a) {\n //html5 A[download]\n a.href = URL.createObjectURL(\n new Blob([content], {\n type: mimeType,\n }),\n );\n a.setAttribute('download', fileName);\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n } else {\n window.location.href =\n 'data:application/octet-stream,' + encodeURIComponent(content); // only this mime type is supported\n }\n props.onClose();\n };\n\n const postExport = useMutation((params) => exportRecommendations(params), {\n onSuccess: (data) => {\n download(data, 'meja_export.csv', 'text/csv;encoding:utf-8');\n },\n });\n\n const downloadExport = (exportParams) => {\n let params = {};\n params.questionnaire_id =\n Number.isInteger(exportParams.campaign) &&\n parseInt(exportParams.campaign) >= 0\n ? parseInt(exportParams.campaign)\n : null;\n params.date_to = DateTime.fromJSDate(exportParams.dateRange.end)\n .endOf('day')\n .toISO();\n params.date_from = DateTime.fromJSDate(exportParams.dateRange.start)\n .startOf('day')\n .toISO();\n postExport.mutate(params);\n };\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default ExportModal;\n","import React, { useContext, useState, useCallback, useEffect } from 'react';\nimport {\n Page,\n Layout,\n Card,\n ResourceList,\n Stack,\n Pagination,\n EmptyState,\n} from '@shopify/polaris';\nimport { ExportMinor } from '@shopify/polaris-icons';\n\nimport { useQuery } from 'react-query';\n\nimport Recommendation from './Recommendation';\nimport ExportModal from './ExportModal';\nimport APIContext from '../../../providers/APIContext';\n\nfunction CustomersPage() {\n const [offset, setOffset] = useState(0);\n const limit = 10;\n\n const [enrichedRecommendations, setEnrichedRecommendations] = useState([]);\n\n const { fetchRecommendations, fetchCampaigns, fetchRecommendationsCounts } =\n useContext(APIContext);\n\n const { isLoading, data: recommendations = [] } = useQuery(\n ['fetchRecommendations', offset, limit],\n () => fetchRecommendations(null, offset, limit),\n );\n\n const { data: campaigns = [] } = useQuery('fetchCampaigns', fetchCampaigns);\n\n const { data: count = [] } = useQuery(\n 'fetchRecommendationsCounts',\n fetchRecommendationsCounts,\n );\n\n useEffect(() => {\n setEnrichedRecommendations(\n recommendations.map((recommendation) => ({\n ...recommendation,\n campaign: campaigns.find(\n (campaign) => campaign.id === recommendation.questionnaire_id,\n )?.name,\n })),\n );\n }, [recommendations, campaigns]);\n\n const [exportModalOpen, setExportlModalOpen] = useState(false);\n\n const openExportModal = () => setExportlModalOpen(true);\n\n const handleExportModalCancel = useCallback(\n () => setExportlModalOpen(false),\n [],\n );\n\n return (\n \n \n \n \n \n \n Recommendation({ recommendation })\n }\n emptyState={\n \n

\n It seems like there have no recommendations been made yet.\n
\n Create a campaign, test it and your recommendation should\n appear here.\n

\n
\n }\n />\n
\n \n \n 0}\n onPrevious={() => setOffset((prev) => prev - limit)}\n hasNext={count[0]?.total > offset + limit}\n onNext={() => setOffset((prev) => prev + limit)}\n />\n \n \n
\n
\n
\n \n \n );\n}\n\nexport default CustomersPage;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport {\n Card,\n Collapsible,\n Button,\n Heading,\n TextContainer,\n Stack,\n} from '@shopify/polaris';\nimport { ChevronUpMinor, ChevronDownMinor } from '@shopify/polaris-icons';\nimport { useHistory } from 'react-router';\n\nfunction Question({ id, question, answer, video }) {\n const {\n location: { hash },\n } = useHistory();\n\n const [open, setOpen] = useState(false);\n const handleToggle = useCallback(() => setOpen((open) => !open), []);\n\n useEffect(() => {\n if (hash === `#${id}`) setOpen(true);\n }, [id, hash]);\n\n return (\n \n \n \n {question}\n \n \n \n {video && (\n \n \n \n \n \n )}\n {answer}\n \n \n \n \n );\n}\n\nexport default Question;\n","import React from 'react';\nimport {\n Card,\n Layout,\n Page,\n Link,\n FooterHelp,\n List,\n TextStyle,\n TextContainer,\n} from '@shopify/polaris';\n\nimport Question from './Question';\n\nconst QUESTIONS = [\n {\n id: 'getting-started',\n question: 'How do I get started?',\n answer:

,\n video: 'fb9731195c7c4b61861a99cad95aec1f',\n },\n {\n id: 'upload-images',\n question: 'How do I upload images to Shopify?',\n answer: (\n

\n You can follow{' '}\n \n this Shopify guide\n {' '}\n on how to upload any files to Shopify. You can then simply copy the URL\n from your image in{' '}\n \n Files\n {' '}\n and paste it to the corresponding field in the meja app. We recommend\n compressing the images before uploading them to Shopify.\n

\n ),\n video: 'e84c1a88e76b4710a6d1336f2577bbd0',\n },\n {\n id: 'what-is-a-project',\n question: 'What’s a project and how do I create one?',\n answer:

,\n video: '04e27670ae1145a1836837446631cc7b',\n },\n {\n id: 'what-are-pages',\n question: 'What’s the purpose of the pages and how do I adjust them?',\n answer:

,\n video: 'b57b4591013348dea5e2ac8301c35d1f',\n },\n {\n id: 'how-to-create-questions',\n question: 'How can I create a question an match the products?',\n answer:

,\n video: '45645d3c5a75461993644904404ff850',\n },\n {\n id: 'product-selection-options',\n question: 'Can I select entire Collections instead of single Products?',\n answer:

,\n video: null,\n },\n {\n id: 'look-and-feel',\n question: 'Can I change the look & feel of my projects?',\n answer:

,\n video: 'c8129003bc5e47c5bb6008518ef74734',\n },\n {\n id: 'recommendations',\n question: 'Where are the collected e-mail addresses displayed?',\n answer:

,\n video: 'd9ce393ed05d40238b5650c3ff10dd96',\n },\n {\n id: 'klaviyo',\n question: 'How do I connect meja with my Klavyio account?',\n answer:

,\n video: null,\n },\n {\n id: 'cancel-subscription',\n question: 'How do I cancel my subscription?',\n answer: (\n \n

\n You can cancel your subscription by uninstalling the app from your{' '}\n \n Shopify admin app settings\n \n . To do so, follow the following steps:\n

\n \n \n From your Shopify admin, click{' '}\n \n Settings {'>'} Apps and sales channels\n \n .\n \n\n \n In the row of the app that you want to uninstall, click{' '}\n Delete.\n \n\n \n In the message that appears, click{' '}\n Delete.\n \n \n

\n or check the corresponding{' '}\n \n Shopify help article\n \n

\n
\n ),\n video: null,\n },\n];\n\nfunction AnalyticsPage() {\n return (\n \n \n \n \n {QUESTIONS.map((q, k) => (\n \n ))}\n \n \n \n \n Any other questions? Get in touch at{' '}\n \n hello@meja.io\n \n \n \n \n \n );\n}\n\nexport default AnalyticsPage;\n","import React from 'react';\nimport { Card, Frame, Layout, Page, TextContainer } from '@shopify/polaris';\n\nimport AdminTopBar from './AdminTopBar';\n\nfunction AdminFrame() {\n return (\n }>\n \n \n \n \n \n To Login to any store use the search bar in the top bar to\n select the store.\n \n \n \n \n \n \n );\n}\n\nexport default AdminFrame;\n","import React, { useEffect } from 'react';\nimport {\n Page,\n Layout,\n Modal,\n Stack,\n Spinner,\n DisplayText,\n} from '@shopify/polaris';\nimport { Redirect } from 'react-router-dom';\nimport { useQueryClient } from 'react-query';\nimport useBilling from '../../../hooks/useBilling';\n\nfunction BillingSuccessPage() {\n const queryClient = useQueryClient();\n\n useEffect(() => {\n queryClient.invalidateQueries(['checkBilling']);\n }, [queryClient]);\n\n const { isLoading, billingStatus, billingRedirectURL } = useBilling();\n\n if (isLoading)\n return (\n \n \n \n \n \n \n \n \n Subscription activated successfully\n \n \n \n \n \n \n \n );\n\n if (billingStatus === 'active') return ;\n\n if (billingStatus === 'pending') window.location.href = billingRedirectURL;\n\n return (\n \n \n \n \n \n \n \n \n Something went wrong. Redirecting to Shopify...\n \n \n \n \n \n \n \n );\n}\n\nexport default BillingSuccessPage;\n","import React, { useCallback, useContext, useState } from 'react';\nimport { Switch, Route, useRouteMatch } from 'react-router';\nimport { Frame } from '@shopify/polaris';\n\nimport AppTopBar from './AppTopBar';\nimport AppNavigation from './AppNavigation';\nimport HomePage from './home/HomePage';\nimport SettingsPage from './settings/SettingsPage';\nimport CampaignsPage from './campaigns/CampaignsPage';\nimport CustomersPage from './customers/CustomersPage';\nimport FAQPage from './faq/FAQPage';\nimport StoreContext from '../../providers/StoreContext';\nimport AdminFrame from '../admin/AdminFrame';\nimport BillingSuccessPage from '../shopify/billing/BillingSuccessPage';\n\n// TODO: Using children instead of component prop is recommended\n\nfunction AppFrame() {\n const [mobileNavigationActive, setMobileNavigationActive] = useState(false);\n\n const toggleMobileNavigationActive = useCallback(\n () =>\n setMobileNavigationActive(\n (mobileNavigationActive) => !mobileNavigationActive,\n ),\n [],\n );\n\n // 2-nd level, path = /app\n const { path } = useRouteMatch();\n\n const { store, isLoading } = useContext(StoreContext) || {};\n\n return isLoading ? (\n <>\n ) : store ? (\n }\n navigation={store && }\n showMobileNavigation={mobileNavigationActive}\n onNavigationDismiss={toggleMobileNavigationActive}\n >\n \n {/* TODO: Replace HomePage with appropriate component (except in $path/) */}\n \n \n \n \n \n \n \n \n {/* 404 handler */}\n \n \n ) : (\n \n );\n}\n\nexport default AppFrame;\n","import { postAuth } from './common';\n\nexport async function authorize(shop, timestamp, hmac) {\n const result = await postAuth('api/v2/oauth/authorize', {\n shop,\n timestamp,\n hmac,\n });\n return result.data;\n}\n\nexport async function callback(payload) {\n const result = await postAuth('api/v2/oauth/return', payload);\n return result.data;\n}\n","import React from 'react';\nimport { Layout, Stack, DisplayText, Spinner, Modal } from '@shopify/polaris';\n\nfunction AccessLayout() {\n return (\n \n \n \n \n \n \n logging in to meja.io\n \n \n \n \n \n );\n}\n\nexport default AccessLayout;\n","import React, { useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { Page } from '@shopify/polaris';\n\nimport { useQuery } from 'react-query';\n\nimport { authorize } from '../../../api/oauth';\n\nimport AccessLayout from './AccessLayout';\n\nimport config from '../../../config';\n\nfunction AccessPage() {\n const history = useHistory();\n\n const params = new URLSearchParams(history.location.search);\n const hmac = params.get('hmac');\n const shop = params.get('shop');\n const timestamp = params.get('timestamp');\n const { isSuccess, data } = useQuery('authorize', () =>\n authorize(shop, timestamp, hmac),\n );\n\n useEffect(() => {\n if (isSuccess) {\n const auth_str = JSON.stringify({ token: data.token });\n localStorage.setItem(config.env + '_auth', auth_str);\n window.location.href = data.authorize_url;\n }\n }, [isSuccess, data]);\n\n return (\n \n \n \n );\n}\n\nexport default AccessPage;\n","import React from 'react';\nimport { Layout, Stack, DisplayText, Spinner, Modal } from '@shopify/polaris';\n\nfunction ReturnLayout() {\n return (\n \n \n \n \n \n \n gathering shopify data\n \n \n \n \n \n );\n}\n\nexport default ReturnLayout;\n","import React, { useEffect, useContext } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { Page } from '@shopify/polaris';\n\nimport { useQuery } from 'react-query';\n\nimport config from '../../../config';\n\nimport { AuthContext } from '../../../providers/AuthContext';\n\nimport { callback } from '../../../api/oauth';\nimport ReturnLayout from './ReturnLayout';\n\nfunction ReturnPage() {\n const history = useHistory();\n\n const { setAuth } = useContext(AuthContext);\n\n const params = new URLSearchParams(history.location.search);\n const payload = {\n hmac: params.get('hmac'),\n shop: params.get('shop'),\n timestamp: params.get('timestamp'),\n code: params.get('code'),\n state: params.get('state'),\n token: JSON.parse(localStorage.getItem(config.env + '_auth')).token,\n };\n\n const { isLoading, data } = useQuery('callback', () => callback(payload));\n\n useEffect(() => {\n if (!isLoading) {\n setAuth(data);\n history.push('/app');\n }\n }, [history, data, isLoading, setAuth]);\n\n return (\n \n \n \n );\n}\n\nexport default ReturnPage;\n","import React from 'react';\nimport {\n Page,\n Layout,\n DisplayText,\n Modal,\n TextContainer,\n List,\n TextStyle,\n} from '@shopify/polaris';\n\nfunction LoginPage() {\n return (\n \n \n \n \n \n \n Please log in to meja.io\n \n \n Go to your stores'{' '}\n \n Shopify admin panel\n \n \n \n Select Apps in the\n navigation\n \n \n Select the meja.io{' '}\n app\n \n \n \n \n \n \n \n \n );\n}\n\nexport default LoginPage;\n","import React from 'react';\nimport { Redirect, Switch, Route, useRouteMatch } from 'react-router';\nimport { Frame, TopBar } from '@shopify/polaris';\n\nimport AccessPage from './access/AccessPage';\nimport ReturnPage from './return/ReturnPage';\nimport LoginPage from './login/LoginPage';\n\nfunction ShopifyFrame(props) {\n // 2-nd level, path = /app\n const { path } = useRouteMatch();\n\n return (\n }>\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default ShopifyFrame;\n","import React from 'react';\nimport { TopBar } from '@shopify/polaris';\n\n// TODO: Should contain a login button and a register call to action button\n\nfunction AppTopBar(props) {\n return ;\n}\n\nexport default AppTopBar;\n","import React from 'react';\nimport {\n Page,\n Layout,\n Card,\n Heading,\n FooterHelp,\n Link,\n TextContainer,\n List,\n TextStyle,\n} from '@shopify/polaris';\n\nfunction PrivacyPage() {\n return (\n \n \n \n \n \n \n I. Processor Details\n

\n Meja is the responsible party for the processing of personal\n data collected through your use of our website\n https://meja.io/ as per applicable data protection laws, in\n particular the Swiss Data Protection Act (DPA) and – if\n applicable to your personal data – the European General Data\n Protection Regulation (GDPR).\n

\n

\n We have our registered domicile at Friedbergstrasse 3a, 9240\n Uzwil, Switzerland. For any queries regarding your personal\n data, contact us at the following address: hello@meja.io\n

\n
\n
\n\n \n \n \n II. How we process your personal data\n \n 1. Scope\n

\n We only process your personal data if this is necessary to\n provide a functional website or to provide you with our\n contents and services. The processing of personal data only\n takes place based on the appropriate legal basis and as\n permitted by law.\n

\n \n 2. Legal Basis for Processing under GDPR\n \n

\n Insofar as we are required to obtain the consent of the data\n subject for the processing of personal data, we will obtain\n your prior consent and Art. 6 para. 1 lit. a GDPR serves as\n the legal basis for the processing of the corresponding data.\n

\n

\n If the processing of personal data required for the\n performance of a contract to which you are a party, Art. 6\n para. 1 lit. b GDPR serves as the legal basis. This also\n applies to processing operations that are necessary to carry\n out pre-contractual services or measures.\n

\n

\n Insofar as the processing of personal data is required to\n fulfil a legal obligation to which our company is subject,\n Art. 6 para. 1 lit. c GDPR serves as the legal basis.\n

\n

\n In the event that the vital interests of the data subject or\n another natural person require the processing of personal\n data, Article 6 para 1lit. d GDPR serves as the legal basis.\n

\n

\n If processing is necessary to safeguard a legitimate interest\n of our company or a third party and if the interests,\n fundamental rights and freedoms of the data subject do not\n outweigh the first-mentioned interest, Art. 6 para. 1 lit. f\n GDRP serves as the legal basis.\n

\n 3. Duration of Processing\n

\n We only store your personal data for as long as necessary to\n serve the purpose of the processing and we delete personal\n data or block access to it as soon as such purpose ceases to\n apply.\n

\n

\n Furthermore, personal data may be stored if this has been\n provided for by the applicable law (for example for book\n keeping or mandatory archiving purposes). The data will also\n be blocked or deleted if a storage period prescribed by the\n applicable law expires, unless there is a need for further\n storage of the data for the conclusion or fulfilment of a\n contract.\n

\n
\n
\n\n \n \n III. Website Access and Logfiles\n 1. Automated Data Processing\n

\n Every time you visit our website, our system automatically\n collects data and information about the computer system you\n used to access our website.\n

\n

The following data is collected:

\n \n Browser information (type and version)\n Operating system\n Your internet service provider\n Your IP address\n Date and time of access\n \n Websites from which your system reaches our website\n \n \n Websites accessed by the user’s system via our website\n \n \n

\n The data is also stored in the log files of our system. This\n data is not stored together with your other personal data.\n

\n

\n For data processing subject to GDPR, the legal basis for the\n temporary storage of data and log files is Art. 6 para. 1 lit.\n f GDPR.\n

\n \n 2. Cookies, tracking and technologies relating to the use of\n our website\n \n

\n We use cookies on our site. Cookies are small files that your\n browser automatically creates and that are stored on your\n device (laptop, tablet, smartphone, etc.) when you visit our\n site. Information is stored in the cookie that results in each\n case in connection with the specifically used terminal device.\n However, this does not mean that we immediately become aware\n of your identity. The use of cookies primarily serves the\n purpose of making your use of our websites more pleasant for\n you. For example, we use so-called session cookies to\n recognize that you have already visited individual pages of\n our website.\n

\n

\n In addition, we also use temporary cookies that are stored on\n your end device for a specified period of time to optimize\n user-friendliness. If you visit our site again to use our\n services, it will automatically recognize that you have\n already been with us and what entries and settings you have\n made so that you do not have to enter them again.\n

\n

\n Furthermore, we use cookies to statistically record the use of\n our website and to evaluate it for you for optimising our\n websites. These cookies enable us to automatically recognize\n when you return to our site that you have already been with\n us. These cookies are automatically deleted after a defined\n period of time.\n

\n

\n Within the scope of the GDPR, the data processed by cookies\n for the aforementioned purposes is justified in order to\n protect our legitimate interests and those of third parties\n pursuant to Art. 6 para. 1 sentence 1 letter f GDPR.\n

\n

\n Most browsers automatically accept cookies. However, you can\n configure your browser so that no cookies are stored on your\n computer or a message always appears before a new cookie is\n created. However, the complete deactivation of cookies can\n lead to the fact that you cannot use all functions of our\n website.\n

\n

\n We use Google Analytics on our website. These are services\n services provided by third parties, which may be located in\n any country (in the case of Google Analytics, Google LLC is\n based in the US but Google Ireland Ltd. is the data controller\n for customers based in the EU and Switzerland, for more\n information visit https://policies.google.com/?hl=en) and\n allow us to measure and evaluate the use of our website\n (without identifying individuals). Permanent cookies, which\n are placed by the service provider, are also used for this\n purpose. Although such service providers do not receive\n personal data from us (and do not retain any IP addresses),\n they may track your use of the website, combine this\n information with data from other websites you have visited,\n which are also tracked by service providers, and use this\n information for their own purposes (e.g. to manage\n advertising). If you have registered with the service provider\n concerned, the service provider will also know your identity.\n The service provider concerned will then be responsible for\n processing your personal data in accordance with the\n applicable data protection provisions. Service providers only\n provide information on how a particular website is used (but\n not any personal details).\n

\n

\n We also use plugins from social networks such as Facebook,\n Twitter, YouTube, Google+, LinkedIn, Xing or Instagram on our\n websites. This will be evident to you, as the relevant symbol\n will typically be displayed. We have configured these elements\n to be disabled by default. If you enable these (by clicking on\n them), the social network operators may register that you are\n on our website and where you are on our website, and may use\n this information for their own purposes. The operator\n concerned will then be responsible for processing your\n personal data in accordance with the applicable data\n protection provisions. We will not receive any information\n regarding you from the operator concerned.\n

\n 3. Purpose of Processing\n

\n The data is stored in log files to ensure the functionality of\n the website. In addition, the data serves us to optimize the\n website and to ensure the security of our information\n technology systems. An evaluation of the data for marketing\n purposes does not take place in this context.\n

\n

\n For data processing subject to GDPR, these purposes are our\n legitimate interest pursuant to Art. 6 para. 1 lit. f GDPR.\n

\n 4. Duration of Processing\n

\n The data will be deleted as soon as they are no longer\n necessary to achieve the purpose for which they were\n collected. In the case of the collection of data for the\n provision of the website, this is the case when the respective\n session has ended. If the data is stored in log files,\n deletion occurs after seven days at the latest. Further\n storage is possible. In this case, the IP addresses of the\n users are deleted or anonymized.\n

\n 5. No Objection\n

\n The collection of data for the provision of the website and\n the storage of data in log files is absolutely necessary for\n the operation of the website. Consequently, there is no\n possibility of objection on your part.\n

\n
\n
\n \n \n IV. Your Rights\n\n

\n You have the following rights under the applicable data\n protection laws:\n

\n 1. Right of Information\n

\n You can request us to confirm whether personal data concerning\n you is being processed by us\n

\n

\n If such processing has taken place, you can request the\n following information from us:\n

\n \n \n The purposes for which the personal data are processed;\n \n \n the categories of personal data being processed;\n \n \n the recipients or categories of recipients to whom the\n personal data concerning you have been or are still being\n disclosed;\n \n \n the planned duration of the storage of the personal data\n concerning you or, if specific information on this is not\n possible, criteria for determining the storage period;\n \n \n the existence of a right to rectification or deletion of\n personal data concerning you, a right to limitation of\n processing by the controller or a right to object to such\n processing;\n \n \n the existence of a right of appeal to a supervisory\n authority;\n \n \n any available information on the origin of the data if the\n personal data are not collected from the data subject;\n \n \n if the processing is subject to GDPR, the existence of\n automated decision-making including profiling in accordance\n with Art. 22 para. 1 and 4 GDPR and – at least in these\n cases – meaningful information on the logic involved and the\n scope and intended effects of such processing for the data\n subject.\n \n \n

\n You have the right to request information as to whether the\n personal data concerning you is transferred to a third country\n or to an international organisation. In this context, you may\n request to be informed of the appropriate guarantees in\n connection with the transmission.\n

\n 2. Right to Rectification\n

\n You have a right of rectification and/or completion if the\n personal data processed concerning you are incorrect or\n incomplete. We shall make the correction without delay.\n

\n 3. Right of Restriction\n

\n Under the following conditions, you may request that the\n processing of your personal data be restricted:\n

\n \n \n if you dispute the accuracy of the personal data concerning\n you for a period that enables us to verify the accuracy of\n the personal data;\n \n \n the processing is unlawful and you refuse to delete the\n personal data and instead request that the use of the\n personal data be restricted;\n \n \n we no longer need the personal data for the purposes of the\n processing, but you do need them to assert, exercise or\n defend legal claims; or\n \n \n if you have filed an objection to the processing pursuant to\n Art. 21 para. 1 GDPR and it has not yet been determined\n whether the legitimate reasons of the person responsible\n outweigh your reasons.\n \n \n

\n If the processing of personal data concerning you has been\n restricted, such data may only be processed – apart from being\n stored – with your consent or for the purpose of asserting,\n exercising or defending rights or protecting the rights of\n another natural or legal person or on grounds of an important\n public interest.\n

\n 4. Right to Deletion\n \n a) Obligation to Delete Personal Data\n \n

\n You may request us to delete the personal data relating to you\n without delay and we are obliged to delete this data without\n delay if one of the following reasons applies:\n

\n \n \n The personal data concerning you are no longer necessary for\n the purposes for which they were collected or otherwise\n processed.\n \n \n You revoke your consent, on which the processing was based\n pursuant to Art. 6 para. 1 lit. a or Art. 9 para. 2 lit. a\n GDPR, and there is no other legal basis for the processing.\n \n \n You file an objection against the processing pursuant to\n Art. 21 para. 1 GDPR and there are no overriding legitimate\n reasons for the processing, or you file an objection against\n the processing pursuant to Art. 21 para. 2 GDPR.\n \n \n The personal data concerning you have been processed\n unlawfully.\n \n \n The deletion of personal data relating to you is necessary\n to fulfil a legal obligation to which we are subject.\n \n \n The personal data concerning you were collected in relation\n to information society services offered pursuant to Art. 8\n para. 1 GDPR.\n \n \n

\n If we have made your personal data public and are obliged to\n delete it pursuant to Art. 17 para. 1 GDPR, we shall take\n appropriate measures, including technical measures, taking\n into account the available technology and the implementation\n costs, to inform those responsible for data processing who\n process the personal data that you as the data subject have\n requested the deletion of all links to this personal data or\n of copies or replications of this personal data.\n

\n b) Exceptions\n

\n The right to deletion does not exist insofar as the processing\n is necessary\n

\n \n \n to exercise freedom of expression and information;\n \n \n for the performance of a legal obligation required for\n processing under the applicable law or for the performance\n of a task in the public interest or in the exercise of\n official authority conferred on the controller;\n \n \n for reasons of public interest in the field of public health\n pursuant to Art. 9 para. 2 lit. h and i and Art. 9 para. 3\n GDPR;\n \n \n for archiving purposes in the public interest, scientific or\n historical research purposes or for statistical purposes\n pursuant to Art. 89 para. 1 GDPR, insofar as the right\n mentioned under a) is likely to make it impossible or\n seriously impair the attainment of the objectives of such\n processing, or\n \n \n to assert, exercise or defend legal claims.\n \n \n 5. Right to Notification\n

\n If you have exercised your right to have us correct, delete or\n limit the processing, we are obliged to inform all recipients\n to whom the personal data concerning you have been disclosed\n of this correction or deletion of the data or restriction on\n processing, unless this proves impossible or involves a\n disproportionate effort.\n

\n 6. Data Portability\n

\n You have the right to receive the personal data concerning you\n that you have provided to us in a structured, common and\n machine-readable format. In addition, you have the right to\n pass this data on to another person in charge without\n obstruction by us, provided that\n

\n \n \n processing is based on consent pursuant to Art. 6 para. 1\n lit a GDPR or Art. 9 para. 2 lit. GDPR or on a contract\n pursuant to Art. 6 para. 1 lit. b GDPR and\n \n \n processing is carried out by means of automated methods.\n \n \n

\n In exercising this right, you also have the right to request\n that the personal data concerning you be transferred directly\n from us to another data controller, insofar as this is\n technically feasible. The freedoms and rights of other persons\n must not be affected by this.\n

\n 7. Right to Objection\n

\n You have the right to object at any time, for reasons arising\n from your particular situation, to the processing of your\n personal data based on Article 6 para 1 lit. e or f GDPR; this\n also applies to profiling based on these provisions.\n

\n

\n In such case we shall no longer process the personal data\n concerning you, unless we can prove compelling reasons worthy\n of protection for the processing, which outweigh your\n interests, rights and freedoms, or the processing serves to\n assert, exercise or defend legal claims.\n

\n

\n If the personal data concerning you are processed for direct\n marketing purposes, you have the right to object at any time\n to the processing of the personal data concerning you for the\n purpose of such advertising; this also applies to profiling,\n insofar as it is associated with such direct marketing. If you\n object to the processing for direct marketing purposes, the\n personal data concerning you will no longer be processed for\n these purposes.\n

\n 8. Right to Withdraw Consent\n

\n You have the right to revoke your declaration of consent at\n any time. The revocation of consent shall not affect the\n legality of the processing carried out on the basis of the\n consent until revocation.\n

\n \n 9. Right of Appeal to Supervisory Authority\n \n

\n Without prejudice to any other administrative or judicial\n remedy, you have the right of appeal to a supervisory\n authority, if you believe that the processing of personal data\n concerning you is contrary to the applicable law.\n

\n
\n
\n \n \n

\n \n Privacy Notice - November 2021\n \n

\n
\n
\n
\n
\n \n \n We are always here to help! Get in touch at{' '}\n \n hello@meja.io\n \n \n \n
\n
\n );\n}\n\nexport default PrivacyPage;\n","import React, { useCallback, useState } from 'react';\nimport { Frame } from '@shopify/polaris';\nimport { Switch, Route } from 'react-router';\n\nimport PublicTopBar from './PublicTopBar';\nimport PrivacyPage from './privacy/PrivacyPage';\n\nfunction PublicFrame() {\n const [mobileNavigationActive, setMobileNavigationActive] = useState(false);\n\n const toggleMobileNavigationActive = useCallback(\n () =>\n setMobileNavigationActive(\n (mobileNavigationActive) => !mobileNavigationActive,\n ),\n [],\n );\n\n return (\n \n }\n showMobileNavigation={mobileNavigationActive}\n onNavigationDismiss={toggleMobileNavigationActive}\n >\n \n \n \n \n \n \n );\n}\n\nexport default PublicFrame;\n","import React, { useContext, useState } from 'react';\nimport { Route } from 'react-router';\n\nimport { AuthContext } from '../providers/AuthContext';\n\nimport { useForm, FormProvider } from 'react-hook-form';\n\nimport { useMutation } from 'react-query';\nimport { login } from '../api/auth';\n\nimport {\n Form,\n FormLayout,\n Modal,\n Button,\n InlineError,\n Stack,\n} from '@shopify/polaris';\nimport { TextField } from './common/input';\n\nfunction AdminRoute({ children, component, ...rest }) {\n const [invalidLogin, setInvalidLogin] = useState(false);\n const { auth, setAuth } = useContext(AuthContext);\n const { token_is_admin: isAdmin } = auth || {};\n\n const mutation = useMutation(\n ({ username, password }) => login(username, password),\n {\n onSuccess: (res) => setAuth(res.data),\n onError: () => setInvalidLogin(true),\n },\n );\n\n const form = useForm();\n const onSubmit = (data) => mutation.mutate(data);\n\n if (isAdmin) return {children};\n return (\n \n \n \n
\n \n \n \n \n \n {invalidLogin && (\n \n )}\n \n \n \n \n \n \n
\n
\n
\n
\n );\n}\n\nexport default AdminRoute;\n","import React from 'react';\nimport { Switch, Route, Redirect } from 'react-router';\nimport { BrowserRouter } from 'react-router-dom';\n\nimport PrivateRoute from './PrivateRoute';\nimport AppFrame from './app/AppFrame';\nimport ShopifyFrame from './shopify/ShopifyFrame';\nimport PublicFrame from './public/PublicFrame';\nimport AdminRoute from './AdminRoute';\n\nconst RootRouter = () => (\n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n\n \n \n \n);\n\nexport default RootRouter;\n","export default {\n colors: {\n topBar: {\n background: '#ffffff',\n backgroundLighter: '#888888', // TODO: Put correct color\n color: '#000000', // TODO: Check with Severin\n },\n /*\n surface: '#000000', // The surface role is used for the backgrounds of the UI. With a light color scheme, surface colors are nearly white, while in a dark color scheme, surface colors are nearly black. The color passed to the surface role impacts the rest of the color roles and their variants, adjusting them for light or dark contexts.\n onSurface: '#000000', // The onSurface role is made up of elements which appear on top of a surface, including borders, secondary icons, and text. When a light surface is provided, onSurface values will be dark. When a dark surface is provided, onSurface values will be light.\n interactive: '#000000', // The interactive role is used to express interactivity in components. It is used in links, as an indicator of focus, and as an indicator of selected interactive states.\n secondary: '#000000', // A secondary interactive color role, for use in secondary and tertiary buttons as a background color, as well as in form elements as a background color.\n primary: '#000000', // A primary interactive color, for use in primary buttons as a background color. Also used in navigation and tabs for icons, and for a surface color when in a selected state.\n critical: '#000000', // Used to communicate destructive outcomes on interactive elements, for communicating errors, and to indicate a critical event in inert elements that requires immediate merchant action.\n warning: '#000000', // For use as an indicator that action should be taken by merchants in components including badges, banners, and exception lists.\n highlight: '#000000', // Used to highlight elements of the UI that are important for merchants, but do not require immediate action. Used in information banners and badges, indicators that draw attention to new information, bars that indicate loading or progress, and in data visualization.\n success: '#000000', // Used to indicate the result of a successful action taken by a merchant, to indicate a positive event, or to illustrate growth.\n decorative: '#000000', // Used to decorate elements where color does convey a specific meaning in components like avatars\n */\n },\n logo: {\n width: 124,\n topBarSource: '/TODOmeja_logo_sketh.jpg',\n url: '/app', // TODO: Route to public or app depending on where you are\n accessibilityLabel: 'meja',\n },\n};\n","import React from 'react';\nimport { QueryClient, QueryClientProvider } from 'react-query';\nimport { AppProvider } from '@shopify/polaris';\nimport { Link as ReactRouterLink } from 'react-router-dom';\nimport Router from './components/Router';\n\nimport theme from './theme';\nimport enTranslations from '@shopify/polaris/locales/en.json';\n\nimport { AuthProvider } from './providers/AuthContext';\n\nimport '@shopify/polaris/dist/styles.css';\nimport './App.css';\nimport { APIProvider } from './providers/APIContext';\n\nimport { ReactQueryDevtools } from 'react-query/devtools';\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n },\n },\n});\n\nfunction App() {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nconst IS_EXTERNAL_LINK_REGEX = /^(?:[a-z][a-z\\d+.-]*:|\\/\\/)/;\n\nfunction Link({ children, url = '', external, ref, ...rest }) {\n // react-router only supports links to pages it can handle itself. It does not\n // support arbirary links, so anything that is not a path-based link should\n // use a reglar old `a` tag\n if (external || IS_EXTERNAL_LINK_REGEX.test(url)) {\n rest.target = '_blank';\n rest.rel = 'noopener noreferrer';\n return (\n \n {children}\n \n );\n }\n\n return (\n \n {children}\n \n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/,\n ),\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA',\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.',\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.',\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nimport './index.css';\n\n//Supress certain warnings\nconst backup = console.warn;\nconsole.warn = function filterWarnings(msg) {\n const supressedWarnings = [\n ' renderItem function should return a .',\n ' is deprecated.', //Sheet is still used in the react-polaris Filter component\n ];\n if (!supressedWarnings.some((entry) => msg.includes(entry))) {\n backup.apply(console, arguments);\n }\n};\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root'),\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"ColorsPreview_container__1-zTb\",\"primary\":\"ColorsPreview_primary__3MWI_\",\"secondary\":\"ColorsPreview_secondary__3ejjV\",\"color\":\"ColorsPreview_color__Nur6c\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"ResultsPreview_container__31Nhw\",\"header\":\"ResultsPreview_header__2XHQM\",\"results\":\"ResultsPreview_results__1rjnF\",\"subheader\":\"ResultsPreview_subheader__2CrfG\",\"restart\":\"ResultsPreview_restart__2IEO1\",\"tile\":\"ResultsPreview_tile__208-d\",\"image\":\"ResultsPreview_image__3AMsl\",\"title\":\"ResultsPreview_title__3RMY0\",\"price\":\"ResultsPreview_price__2Epm-\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"EmailPreview_container__1-du1\",\"imagecontainer\":\"EmailPreview_imagecontainer__2vxlD\",\"image\":\"EmailPreview_image__1NLJR\",\"content\":\"EmailPreview_content__3mDf3\",\"header\":\"EmailPreview_header__qZcQC\",\"subheader\":\"EmailPreview_subheader__29xMy\",\"button\":\"EmailPreview_button__35t-w\",\"input\":\"EmailPreview_input__3K_Nw\",\"input-error\":\"EmailPreview_input-error__1NYCk\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"header\":\"TextPreview_header__N6Uhj\",\"subheader\":\"TextPreview_subheader__3Dem2\",\"text\":\"TextPreview_text__3MBr4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"container\":\"WelcomePreview_container__3461C\",\"imagecontainer\":\"WelcomePreview_imagecontainer__3iBpq\",\"image\":\"WelcomePreview_image__2CbzW\",\"content\":\"WelcomePreview_content__Em_5g\",\"header\":\"WelcomePreview_header__2MPx4\",\"subheader\":\"WelcomePreview_subheader__8fy8z\",\"button\":\"WelcomePreview_button__co2Tv\"};"],"sourceRoot":""}