├── README.md ├── theme ├── assets │ ├── css │ │ ├── custom.scss │ │ ├── page.scss │ │ └── cart.scss │ ├── images │ │ ├── logo.png │ │ ├── slide7.jpg │ │ ├── slide8.jpg │ │ ├── slide9.jpg │ │ ├── icons │ │ │ ├── icon-128.png │ │ │ ├── icon-16.png │ │ │ ├── icon-256.png │ │ │ ├── icon-32.png │ │ │ └── icon-512.png │ │ ├── arrow_down.svg │ │ ├── arrow_right.svg │ │ ├── search.svg │ │ ├── payment │ │ │ ├── diners.svg │ │ │ └── visa.svg │ │ ├── close.svg │ │ ├── arrow_back.svg │ │ ├── thin_arrow_right.svg │ │ └── success.svg │ └── manifest.json ├── src │ ├── lib │ │ ├── api.js │ │ └── settings.js │ ├── components │ │ ├── pageList │ │ │ ├── list.js │ │ │ ├── item.js │ │ │ └── index.js │ │ ├── productList │ │ │ ├── itemTags.js │ │ │ ├── itemImage.js │ │ │ └── loadMore.js │ │ ├── productDetails │ │ │ ├── tags.js │ │ │ ├── breadcrumbs.js │ │ │ ├── attributes.js │ │ │ └── relatedProducts.js │ │ ├── categoryBreadcrumbs.js │ │ ├── sort.js │ │ ├── cartIndicator.js │ │ ├── head │ │ │ └── cartIndicator.js │ │ └── header │ │ │ └── cartIndicator.js │ ├── containers │ │ ├── notfound.js │ │ ├── shared.js │ │ └── checkout.js │ └── index.js └── package.json ├── logs └── README.md ├── public ├── content │ └── README.md ├── admin-assets │ ├── images │ │ ├── shortcut.png │ │ └── apps │ │ │ ├── facebook.png │ │ │ ├── jivosite.png │ │ │ ├── messenger.png │ │ │ ├── google_analytics.png │ │ │ ├── site_verification.png │ │ │ └── facebook-customer-chat-plugin.png │ ├── tinymce │ │ ├── plugins │ │ │ ├── example_dependency │ │ │ │ └── plugin.min.js │ │ │ ├── media │ │ │ │ └── moxieplayer.swf │ │ │ ├── emoticons │ │ │ │ ├── img │ │ │ │ │ ├── smiley-cool.gif │ │ │ │ │ ├── smiley-cry.gif │ │ │ │ │ ├── smiley-kiss.gif │ │ │ │ │ ├── smiley-wink.gif │ │ │ │ │ ├── smiley-yell.gif │ │ │ │ │ ├── smiley-frown.gif │ │ │ │ │ ├── smiley-sealed.gif │ │ │ │ │ ├── smiley-smile.gif │ │ │ │ │ ├── smiley-innocent.gif │ │ │ │ │ ├── smiley-laughing.gif │ │ │ │ │ ├── smiley-surprised.gif │ │ │ │ │ ├── smiley-undecided.gif │ │ │ │ │ ├── smiley-embarassed.gif │ │ │ │ │ ├── smiley-money-mouth.gif │ │ │ │ │ ├── smiley-tongue-out.gif │ │ │ │ │ └── smiley-foot-in-mouth.gif │ │ │ │ └── plugin.min.js │ │ │ ├── example │ │ │ │ ├── dialog.html │ │ │ │ └── plugin.min.js │ │ │ ├── print │ │ │ │ └── plugin.min.js │ │ │ ├── hr │ │ │ │ └── plugin.min.js │ │ │ ├── anchor │ │ │ │ └── plugin.min.js │ │ │ ├── nonbreaking │ │ │ │ └── plugin.min.js │ │ │ ├── code │ │ │ │ └── plugin.min.js │ │ │ ├── directionality │ │ │ │ └── plugin.min.js │ │ │ ├── wordcount │ │ │ │ └── plugin.min.js │ │ │ ├── contextmenu │ │ │ │ └── plugin.min.js │ │ │ ├── noneditable │ │ │ │ └── plugin.min.js │ │ │ ├── save │ │ │ │ └── plugin.min.js │ │ │ ├── visualblocks │ │ │ │ └── plugin.min.js │ │ │ ├── colorpicker │ │ │ │ └── plugin.min.js │ │ │ ├── pagebreak │ │ │ │ └── plugin.min.js │ │ │ ├── visualchars │ │ │ │ └── plugin.min.js │ │ │ ├── tabfocus │ │ │ │ └── plugin.min.js │ │ │ └── advlist │ │ │ │ └── plugin.min.js │ │ ├── skins │ │ │ └── lightgray │ │ │ │ ├── img │ │ │ │ ├── anchor.gif │ │ │ │ ├── loader.gif │ │ │ │ ├── object.gif │ │ │ │ └── trans.gif │ │ │ │ └── fonts │ │ │ │ ├── tinymce.eot │ │ │ │ ├── tinymce.ttf │ │ │ │ ├── tinymce.woff │ │ │ │ ├── tinymce-small.eot │ │ │ │ ├── tinymce-small.ttf │ │ │ │ └── tinymce-small.woff │ │ └── langs │ │ │ └── readme.md │ └── manifest.json ├── robots.template └── sw.js ├── src ├── admin │ └── client │ │ ├── lib │ │ ├── text.js │ │ ├── settings.js │ │ ├── data.js │ │ ├── api.js │ │ └── events.js │ │ ├── modules │ │ ├── shared │ │ │ ├── tinymce │ │ │ │ ├── index.js │ │ │ │ └── helpers │ │ │ │ │ ├── ucFirst.js │ │ │ │ │ └── uuid.js │ │ │ ├── imageUpload │ │ │ │ └── style.css │ │ │ ├── imageUploadMultiple │ │ │ │ ├── item.js │ │ │ │ └── style.css │ │ │ └── form │ │ │ │ └── index.js │ │ ├── products │ │ │ ├── listFilter │ │ │ │ ├── components │ │ │ │ │ └── style.css │ │ │ │ └── index.js │ │ │ ├── edit │ │ │ │ ├── inventory │ │ │ │ │ ├── components │ │ │ │ │ │ └── style.css │ │ │ │ │ └── index.js │ │ │ │ ├── general │ │ │ │ │ ├── components │ │ │ │ │ │ └── style.css │ │ │ │ │ └── index.js │ │ │ │ ├── attributes │ │ │ │ │ ├── components │ │ │ │ │ │ └── style.css │ │ │ │ │ └── index.js │ │ │ │ ├── additional │ │ │ │ │ └── index.js │ │ │ │ ├── images │ │ │ │ │ └── components │ │ │ │ │ │ └── images.js │ │ │ │ ├── option │ │ │ │ │ └── components │ │ │ │ │ │ └── style.css │ │ │ │ └── variants │ │ │ │ │ └── components │ │ │ │ │ └── style.css │ │ │ ├── listHead │ │ │ │ ├── components │ │ │ │ │ └── search.js │ │ │ │ └── index.js │ │ │ ├── editHead │ │ │ │ └── index.js │ │ │ └── list │ │ │ │ └── components │ │ │ │ ├── head.js │ │ │ │ └── style.css │ │ ├── orders │ │ │ ├── listFilter │ │ │ │ └── components │ │ │ │ │ └── style.css │ │ │ ├── list │ │ │ │ ├── components │ │ │ │ │ ├── style.css │ │ │ │ │ └── head.js │ │ │ │ └── index.js │ │ │ ├── listHead │ │ │ │ ├── components │ │ │ │ │ └── search.js │ │ │ │ └── index.js │ │ │ └── editHead │ │ │ │ └── index.js │ │ ├── customers │ │ │ ├── filter │ │ │ │ ├── components │ │ │ │ │ └── style.css │ │ │ │ └── index.js │ │ │ ├── list │ │ │ │ ├── components │ │ │ │ │ ├── style.css │ │ │ │ │ └── head.js │ │ │ │ └── index.js │ │ │ ├── listHead │ │ │ │ ├── components │ │ │ │ │ └── search.js │ │ │ │ └── index.js │ │ │ └── actionTypes.js │ │ ├── settings │ │ │ ├── paymentGateway │ │ │ │ ├── components │ │ │ │ │ └── style.css │ │ │ │ ├── availablePaymentGateways.js │ │ │ │ └── index.js │ │ │ ├── smtp │ │ │ │ ├── components │ │ │ │ │ └── style.css │ │ │ │ └── index.js │ │ │ ├── paymentsEdit │ │ │ │ ├── components │ │ │ │ │ └── style.css │ │ │ │ └── head.js │ │ │ ├── shippingEdit │ │ │ │ ├── components │ │ │ │ │ └── style.css │ │ │ │ └── head.js │ │ │ ├── tokens │ │ │ │ ├── edit │ │ │ │ │ ├── components │ │ │ │ │ │ └── style.css │ │ │ │ │ └── index.js │ │ │ │ └── list │ │ │ │ │ ├── head.js │ │ │ │ │ ├── index.js │ │ │ │ │ └── components │ │ │ │ │ └── headButtons.js │ │ │ ├── theme │ │ │ │ ├── components │ │ │ │ │ └── style.css │ │ │ │ └── index.js │ │ │ ├── general │ │ │ │ ├── components │ │ │ │ │ └── style.css │ │ │ │ └── index.js │ │ │ ├── checkoutFields │ │ │ │ ├── components │ │ │ │ │ └── style.css │ │ │ │ └── index.js │ │ │ ├── emailTemplates │ │ │ │ ├── components │ │ │ │ │ └── style.css │ │ │ │ └── index.js │ │ │ ├── payments │ │ │ │ ├── head.js │ │ │ │ ├── index.js │ │ │ │ └── components │ │ │ │ │ └── headButtons.js │ │ │ ├── shipping │ │ │ │ ├── head.js │ │ │ │ ├── index.js │ │ │ │ └── components │ │ │ │ │ └── headButtons.js │ │ │ ├── email │ │ │ │ └── index.js │ │ │ ├── checkout │ │ │ │ └── index.js │ │ │ ├── generalLogo │ │ │ │ ├── index.js │ │ │ │ └── components │ │ │ │ │ └── form.js │ │ │ └── themeSettings │ │ │ │ ├── components │ │ │ │ ├── style.css │ │ │ │ └── imageEditor.js │ │ │ │ └── index.js │ │ ├── pages │ │ │ ├── edit │ │ │ │ ├── components │ │ │ │ │ └── style.css │ │ │ │ ├── head.js │ │ │ │ └── index.js │ │ │ ├── actionTypes.js │ │ │ ├── list │ │ │ │ ├── head.js │ │ │ │ ├── index.js │ │ │ │ └── components │ │ │ │ │ └── headButtons.js │ │ │ └── reducer.js │ │ ├── files │ │ │ ├── actionTypes.js │ │ │ ├── list │ │ │ │ ├── components │ │ │ │ │ ├── headButtons.js │ │ │ │ │ ├── fileUploader │ │ │ │ │ │ └── style.css │ │ │ │ │ └── style.css │ │ │ │ ├── head.js │ │ │ │ └── index.js │ │ │ ├── reducer.js │ │ │ └── actions.js │ │ ├── customerGroups │ │ │ ├── edit │ │ │ │ ├── components │ │ │ │ │ └── style.css │ │ │ │ └── index.js │ │ │ ├── select │ │ │ │ └── index.js │ │ │ ├── actionTypes.js │ │ │ ├── list │ │ │ │ └── index.js │ │ │ └── head │ │ │ │ └── index.js │ │ ├── orderStatuses │ │ │ ├── edit │ │ │ │ ├── components │ │ │ │ │ └── style.css │ │ │ │ └── index.js │ │ │ ├── select │ │ │ │ └── index.js │ │ │ ├── actionTypes.js │ │ │ ├── list │ │ │ │ └── index.js │ │ │ └── head │ │ │ │ └── index.js │ │ ├── productCategories │ │ │ ├── edit │ │ │ │ ├── components │ │ │ │ │ └── style.css │ │ │ │ └── index.js │ │ │ ├── select │ │ │ │ └── index.js │ │ │ ├── list │ │ │ │ └── index.js │ │ │ ├── actionTypes.js │ │ │ └── head │ │ │ │ └── index.js │ │ ├── apps │ │ │ ├── services │ │ │ │ ├── components │ │ │ │ │ ├── appItem.js │ │ │ │ │ ├── style.css │ │ │ │ │ └── serviceItem.js │ │ │ │ └── index.js │ │ │ ├── head │ │ │ │ ├── index.js │ │ │ │ └── components │ │ │ │ │ └── buttons.js │ │ │ ├── account │ │ │ │ ├── components │ │ │ │ │ ├── style.css │ │ │ │ │ └── details.js │ │ │ │ └── index.js │ │ │ ├── actionTypes.js │ │ │ ├── appDetails │ │ │ │ └── index.js │ │ │ ├── serviceDetails │ │ │ │ └── components │ │ │ │ │ └── logs.js │ │ │ └── reducer.js │ │ └── head │ │ │ └── index.js │ │ ├── routes │ │ ├── orders │ │ │ ├── edit.js │ │ │ ├── statuses │ │ │ │ └── index.js │ │ │ └── index.js │ │ ├── customers │ │ │ ├── edit.js │ │ │ ├── index.js │ │ │ └── groups │ │ │ │ └── index.js │ │ ├── home.js │ │ ├── logout.js │ │ ├── notFound.js │ │ ├── files.js │ │ ├── pages │ │ │ ├── index.js │ │ │ └── edit.js │ │ ├── products │ │ │ ├── categories │ │ │ │ └── index.js │ │ │ ├── index.js │ │ │ └── edit.js │ │ └── apps │ │ │ └── index.js │ │ ├── apps │ │ └── index.js │ │ ├── rootReducer.js │ │ └── index.js ├── store │ ├── client │ │ ├── settings.js │ │ ├── api.js │ │ └── index.js │ ├── server │ │ ├── settings.js │ │ ├── readIndexHtml.js │ │ ├── api.js │ │ ├── themeLocales.js │ │ ├── robotsRendering.js │ │ └── sitemapRendering.js │ └── shared │ │ ├── text.js │ │ ├── pageTypes.js │ │ ├── containers │ │ ├── index.js │ │ ├── page.js │ │ ├── search.js │ │ ├── shared.js │ │ ├── category.js │ │ ├── notfound.js │ │ ├── product.js │ │ ├── checkoutSuccess.js │ │ └── checkout.js │ │ └── components │ │ ├── checkoutForm │ │ └── index.js │ │ └── stepPayment │ │ └── index.js └── api │ └── server │ ├── lib │ ├── settings.js │ ├── mongo.js │ ├── events.js │ └── utils.js │ ├── services │ ├── data.js │ ├── orders │ │ ├── paymentMethodsLight.js │ │ └── shippingMethodsLight.js │ ├── apps │ │ └── settings.js │ └── settings │ │ └── paymentGateways.js │ ├── routes │ ├── notifications.js │ ├── sitemap.js │ ├── paymentGateways.js │ ├── apps.js │ └── files.js │ └── controllers │ ├── notifications.js │ ├── data.js │ ├── sitemap.js │ ├── paymentGateways.js │ ├── apps.js │ └── files.js ├── .DS_Store ├── .gitattributes ├── config ├── store.js └── admin.js ├── scripts ├── theme-export.sh └── theme-install.sh ├── docs ├── README.md └── structure.md ├── process.json ├── locales └── store │ ├── zh_CN.json │ ├── en.json │ ├── uk.json │ └── ru.json └── LICENSE /README.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /theme/assets/css/custom.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /logs/README.md: -------------------------------------------------------------------------------- 1 | Folder must exists 2 | -------------------------------------------------------------------------------- /public/content/README.md: -------------------------------------------------------------------------------- 1 | Folder must exists 2 | -------------------------------------------------------------------------------- /src/admin/client/lib/text.js: -------------------------------------------------------------------------------- 1 | module.exports = APPLICATION_TEXT; 2 | -------------------------------------------------------------------------------- /src/admin/client/lib/settings.js: -------------------------------------------------------------------------------- 1 | module.exports = APPLICATION_CONFIG; 2 | -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/.DS_Store -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /src/admin/client/modules/shared/tinymce/index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./components/TinyMCE'); 2 | -------------------------------------------------------------------------------- /src/admin/client/modules/products/listFilter/components/style.css: -------------------------------------------------------------------------------- 1 | .filter { 2 | padding: 0 16px; 3 | } 4 | -------------------------------------------------------------------------------- /src/store/client/settings.js: -------------------------------------------------------------------------------- 1 | import settings from '../../../config/store' 2 | export default settings 3 | -------------------------------------------------------------------------------- /src/store/server/settings.js: -------------------------------------------------------------------------------- 1 | import settings from '../../../config/server' 2 | export default settings 3 | -------------------------------------------------------------------------------- /theme/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/theme/assets/images/logo.png -------------------------------------------------------------------------------- /src/api/server/lib/settings.js: -------------------------------------------------------------------------------- 1 | const settings = require('../../../../config/server'); 2 | module.exports = settings; 3 | -------------------------------------------------------------------------------- /theme/assets/images/slide7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/theme/assets/images/slide7.jpg -------------------------------------------------------------------------------- /theme/assets/images/slide8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/theme/assets/images/slide8.jpg -------------------------------------------------------------------------------- /theme/assets/images/slide9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/theme/assets/images/slide9.jpg -------------------------------------------------------------------------------- /src/admin/client/modules/orders/listFilter/components/style.css: -------------------------------------------------------------------------------- 1 | .filter { 2 | padding: 0 16px; 3 | } 4 | 5 | .select {} 6 | -------------------------------------------------------------------------------- /theme/assets/images/icons/icon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/theme/assets/images/icons/icon-128.png -------------------------------------------------------------------------------- /theme/assets/images/icons/icon-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/theme/assets/images/icons/icon-16.png -------------------------------------------------------------------------------- /theme/assets/images/icons/icon-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/theme/assets/images/icons/icon-256.png -------------------------------------------------------------------------------- /theme/assets/images/icons/icon-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/theme/assets/images/icons/icon-32.png -------------------------------------------------------------------------------- /theme/assets/images/icons/icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/theme/assets/images/icons/icon-512.png -------------------------------------------------------------------------------- /public/admin-assets/images/shortcut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/images/shortcut.png -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/example_dependency/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("example_dependency",function(){},["example"]); -------------------------------------------------------------------------------- /public/admin-assets/images/apps/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/images/apps/facebook.png -------------------------------------------------------------------------------- /public/admin-assets/images/apps/jivosite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/images/apps/jivosite.png -------------------------------------------------------------------------------- /public/admin-assets/images/apps/messenger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/images/apps/messenger.png -------------------------------------------------------------------------------- /src/admin/client/modules/customers/filter/components/style.css: -------------------------------------------------------------------------------- 1 | .filter { 2 | padding: 0 16px; 3 | } 4 | 5 | .toggle { 6 | margin-bottom: 16px; 7 | } 8 | -------------------------------------------------------------------------------- /src/admin/client/routes/orders/edit.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import OrderDetails from 'modules/orders/edit'; 3 | 4 | export default OrderDetails; 5 | -------------------------------------------------------------------------------- /src/admin/client/modules/shared/tinymce/helpers/ucFirst.js: -------------------------------------------------------------------------------- 1 | export default function ucFirst(str) { 2 | return str[0].toUpperCase() + str.substring(1); 3 | } 4 | -------------------------------------------------------------------------------- /src/admin/client/modules/shared/tinymce/helpers/uuid.js: -------------------------------------------------------------------------------- 1 | let count = 0; 2 | module.exports = function uuid() { 3 | return 'react-tinymce-' + count++; 4 | }; 5 | -------------------------------------------------------------------------------- /public/admin-assets/images/apps/google_analytics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/images/apps/google_analytics.png -------------------------------------------------------------------------------- /public/admin-assets/images/apps/site_verification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/images/apps/site_verification.png -------------------------------------------------------------------------------- /src/admin/client/routes/customers/edit.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import CustomerDetails from 'modules/customers/edit'; 3 | 4 | export default CustomerDetails; 5 | -------------------------------------------------------------------------------- /src/store/shared/text.js: -------------------------------------------------------------------------------- 1 | import clientSettings from '../client/settings' 2 | module.exports = require('../../../locales/store/' + clientSettings.language + '.json'); 3 | -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/media/moxieplayer.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/media/moxieplayer.swf -------------------------------------------------------------------------------- /public/admin-assets/tinymce/skins/lightgray/img/anchor.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/skins/lightgray/img/anchor.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/skins/lightgray/img/loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/skins/lightgray/img/loader.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/skins/lightgray/img/object.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/skins/lightgray/img/object.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/skins/lightgray/img/trans.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/skins/lightgray/img/trans.gif -------------------------------------------------------------------------------- /config/store.js: -------------------------------------------------------------------------------- 1 | // config used by store client side only 2 | module.exports = { 3 | // store UI language 4 | language: 'en', 5 | ajaxBaseUrl: 'http://localhost:3001/ajax' 6 | } 7 | -------------------------------------------------------------------------------- /public/admin-assets/tinymce/skins/lightgray/fonts/tinymce.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/skins/lightgray/fonts/tinymce.eot -------------------------------------------------------------------------------- /public/admin-assets/tinymce/skins/lightgray/fonts/tinymce.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/skins/lightgray/fonts/tinymce.ttf -------------------------------------------------------------------------------- /public/admin-assets/tinymce/skins/lightgray/fonts/tinymce.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/skins/lightgray/fonts/tinymce.woff -------------------------------------------------------------------------------- /public/admin-assets/images/apps/facebook-customer-chat-plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/images/apps/facebook-customer-chat-plugin.png -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-cool.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-cool.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-cry.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-cry.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-kiss.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-kiss.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-wink.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-wink.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-yell.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-yell.gif -------------------------------------------------------------------------------- /src/admin/client/lib/data.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | countries: APPLICATION_DATA_COUNTRIES, 3 | currencies: APPLICATION_DATA_CURRENCIES, 4 | timezones: APPLICATION_DATA_TIMEZONES 5 | } 6 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/paymentGateway/components/style.css: -------------------------------------------------------------------------------- 1 | .buttons{ 2 | text-align: right; 3 | margin-top: 20px; 4 | } 5 | 6 | .error { 7 | color: rgb(244, 67, 54); 8 | } 9 | -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-frown.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-frown.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-sealed.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-sealed.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-smile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-smile.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/skins/lightgray/fonts/tinymce-small.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/skins/lightgray/fonts/tinymce-small.eot -------------------------------------------------------------------------------- /public/admin-assets/tinymce/skins/lightgray/fonts/tinymce-small.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/skins/lightgray/fonts/tinymce-small.ttf -------------------------------------------------------------------------------- /public/admin-assets/tinymce/skins/lightgray/fonts/tinymce-small.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/skins/lightgray/fonts/tinymce-small.woff -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-innocent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-innocent.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-laughing.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-laughing.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-surprised.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-surprised.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-undecided.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-undecided.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/langs/readme.md: -------------------------------------------------------------------------------- 1 | This is where language files should be placed. 2 | 3 | Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/ 4 | -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-embarassed.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-embarassed.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-money-mouth.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-money-mouth.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-tongue-out.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-tongue-out.gif -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webdevstar/React-Ecommerce/HEAD/public/admin-assets/tinymce/plugins/emoticons/img/smiley-foot-in-mouth.gif -------------------------------------------------------------------------------- /src/admin/client/modules/pages/edit/components/style.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin-left: 12px; 3 | } 4 | 5 | .innerBox { 6 | padding: 30px; 7 | } 8 | 9 | .error { 10 | color: rgb(244, 67, 54); 11 | } 12 | -------------------------------------------------------------------------------- /config/admin.js: -------------------------------------------------------------------------------- 1 | // config used by dashboard client side only 2 | module.exports = { 3 | // dashboard UI language 4 | language: 'en', 5 | apiBaseUrl: 'http://localhost:3001/api/v1', 6 | developerMode: true 7 | } 8 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/smtp/components/style.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin-left: 12px; 3 | } 4 | 5 | .innerBox { 6 | padding: 30px; 7 | } 8 | 9 | .error { 10 | color: rgb(244, 67, 54); 11 | } 12 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/paymentsEdit/components/style.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin-left: 12px; 3 | } 4 | 5 | .innerBox { 6 | padding: 30px; 7 | } 8 | 9 | .error { 10 | color: rgb(244, 67, 54); 11 | } 12 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/shippingEdit/components/style.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin-left: 12px; 3 | } 4 | 5 | .innerBox { 6 | padding: 30px; 7 | } 8 | 9 | .error { 10 | color: rgb(244, 67, 54); 11 | } 12 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/tokens/edit/components/style.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin-left: 12px; 3 | } 4 | 5 | .innerBox { 6 | padding: 30px; 7 | } 8 | 9 | .error { 10 | color: rgb(244, 67, 54); 11 | } 12 | -------------------------------------------------------------------------------- /src/admin/client/modules/products/edit/inventory/components/style.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin-left: 12px; 3 | } 4 | 5 | .innerBox { 6 | padding: 30px; 7 | } 8 | 9 | .error { 10 | color: rgb(244, 67, 54); 11 | } 12 | -------------------------------------------------------------------------------- /src/store/shared/pageTypes.js: -------------------------------------------------------------------------------- 1 | export const PAGE = 'page' 2 | export const PRODUCT_CATEGORY = 'product-category' 3 | export const PRODUCT = 'product' 4 | export const RESERVED = 'reserved' 5 | export const SEARCH = 'search' 6 | -------------------------------------------------------------------------------- /src/admin/client/modules/pages/actionTypes.js: -------------------------------------------------------------------------------- 1 | export const PAGES_REQUEST = 'PAGES_REQUEST' 2 | export const PAGES_RECEIVE = 'PAGES_RECEIVE' 3 | 4 | export const PAGE_REQUEST = 'PAGE_REQUEST' 5 | export const PAGE_RECEIVE = 'PAGE_RECEIVE' 6 | -------------------------------------------------------------------------------- /src/admin/client/modules/products/edit/general/components/style.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin-left: 12px; 3 | } 4 | 5 | .innerBox { 6 | padding: 30px 30px 50px 30px; 7 | } 8 | 9 | .error { 10 | color: rgb(244, 67, 54); 11 | } 12 | -------------------------------------------------------------------------------- /src/store/client/api.js: -------------------------------------------------------------------------------- 1 | import CezerinClient from 'cezerin-client' 2 | import clientSettings from './settings' 3 | 4 | const api = new CezerinClient({ 5 | ajaxBaseUrl: clientSettings.ajaxBaseUrl || '/ajax' 6 | }); 7 | 8 | export default api; 9 | -------------------------------------------------------------------------------- /theme/src/lib/api.js: -------------------------------------------------------------------------------- 1 | import CezerinClient from 'cezerin-client' 2 | import clientSettings from '../../../config/store' 3 | 4 | const api = new CezerinClient({ 5 | ajaxBaseUrl: clientSettings.ajaxBaseUrl || '/ajax' 6 | }); 7 | 8 | export default api; 9 | -------------------------------------------------------------------------------- /src/admin/client/modules/files/actionTypes.js: -------------------------------------------------------------------------------- 1 | export const FILES_REQUEST = 'FILES_REQUEST' 2 | export const FILES_RECEIVE = 'FILES_RECEIVE' 3 | 4 | export const FILES_UPLOAD_START = 'FILES_UPLOAD_START' 5 | export const FILES_UPLOAD_END = 'FILES_UPLOAD_END' 6 | -------------------------------------------------------------------------------- /theme/assets/images/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /theme/assets/images/arrow_right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/admin/client/routes/home.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default() => ( 4 |
5 |
6 |
7 |
8 |
9 |
10 | ) 11 | -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/example/dialog.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

Custom dialog

5 | Input some text: 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/admin/client/routes/logout.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import * as auth from 'lib/auth' 3 | 4 | export default class Logout extends React.Component { 5 | componentWillMount() { 6 | auth.removeToken(); 7 | } 8 | 9 | render() { 10 | return null; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/store/server/readIndexHtml.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | import path from 'path' 3 | 4 | const FILE_PATH = path.resolve('theme/assets/index.html'); 5 | export let indexHtml = null; 6 | 7 | fs.readFile(FILE_PATH, 'utf8', (err, data) => { 8 | indexHtml = err ? err : data; 9 | }); 10 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/paymentGateway/availablePaymentGateways.js: -------------------------------------------------------------------------------- 1 | export const AVAILABLE_PAYMENT_GATEWAYS = [ 2 | { 3 | 'key': 'paypal-checkout', 4 | 'name': 'PayPal Express Checkout' 5 | }, 6 | { 7 | 'key': 'liqpay', 8 | 'name': 'LiqPay' 9 | } 10 | ]; 11 | -------------------------------------------------------------------------------- /src/admin/client/routes/notFound.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import messages from 'lib/text' 3 | 4 | export default() => ( 5 |
6 |
404
7 |
{messages.pageNotFound}
8 |
9 | ) 10 | -------------------------------------------------------------------------------- /src/admin/client/routes/files.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import List from 'modules/files/list'; 3 | 4 | export default () => ( 5 |
6 |
7 | 8 |
9 |
10 | ) 11 | -------------------------------------------------------------------------------- /src/admin/client/routes/pages/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import List from 'modules/pages/list'; 3 | 4 | export default () => ( 5 |
6 |
7 | 8 |
9 |
10 | ) 11 | -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/print/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("print",function(a){a.addCommand("mcePrint",function(){a.getWin().print()}),a.addButton("print",{title:"Print",cmd:"mcePrint"}),a.addShortcut("Meta+P","","mcePrint"),a.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Meta+P",context:"file"})}); -------------------------------------------------------------------------------- /src/admin/client/modules/files/list/components/headButtons.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Link } from 'react-router-dom' 3 | import messages from 'lib/text' 4 | import FontIcon from 'material-ui/FontIcon' 5 | import IconButton from 'material-ui/IconButton' 6 | 7 | const Buttons = () => null; 8 | 9 | export default Buttons; 10 | -------------------------------------------------------------------------------- /public/robots.template: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: /api 3 | Disallow: /admin 4 | Disallow: /cart 5 | Disallow: /checkout 6 | Disallow: /checkout-success 7 | Disallow: /register 8 | Disallow: /login 9 | Disallow: /logout 10 | Disallow: /account 11 | Disallow: /settings 12 | Disallow: /search 13 | Sitemap: {domain}/sitemap.xml 14 | Host: {domain} 15 | -------------------------------------------------------------------------------- /src/admin/client/modules/customerGroups/edit/components/style.css: -------------------------------------------------------------------------------- 1 | .shortBox { 2 | max-width: 300px; 3 | } 4 | 5 | .button { 6 | margin-left: 12px; 7 | } 8 | 9 | .toggle { 10 | margin-top: 12px; 11 | margin-bottom: 22px; 12 | } 13 | 14 | .innerBox { 15 | padding: 30px; 16 | } 17 | 18 | .error { 19 | color: rgb(244, 67, 54); 20 | } 21 | -------------------------------------------------------------------------------- /src/admin/client/modules/orderStatuses/edit/components/style.css: -------------------------------------------------------------------------------- 1 | .shortBox { 2 | max-width: 300px; 3 | } 4 | 5 | .button { 6 | margin-left: 12px; 7 | } 8 | 9 | .toggle { 10 | margin-top: 12px; 11 | margin-bottom: 22px; 12 | } 13 | 14 | .innerBox { 15 | padding: 30px; 16 | } 17 | 18 | .error { 19 | color: rgb(244, 67, 54); 20 | } 21 | -------------------------------------------------------------------------------- /src/store/shared/containers/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {connect} from 'react-redux' 3 | import {withRouter} from 'react-router' 4 | import {mapStateToProps, mapDispatchToProps} from '../containerProps' 5 | import {IndexContainer} from 'theme' 6 | 7 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(IndexContainer)); 8 | -------------------------------------------------------------------------------- /src/store/shared/containers/page.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {connect} from 'react-redux' 3 | import {withRouter} from 'react-router' 4 | import {mapStateToProps, mapDispatchToProps} from '../containerProps' 5 | import {PageContainer} from 'theme' 6 | 7 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(PageContainer)); 8 | -------------------------------------------------------------------------------- /src/admin/client/modules/productCategories/edit/components/style.css: -------------------------------------------------------------------------------- 1 | .shortBox { 2 | max-width: 300px; 3 | } 4 | 5 | .button { 6 | margin-left: 12px; 7 | } 8 | 9 | .toggle { 10 | margin-top: 12px; 11 | margin-bottom: 22px; 12 | } 13 | 14 | .innerBox { 15 | padding: 30px; 16 | } 17 | 18 | .error { 19 | color: rgb(244, 67, 54); 20 | } 21 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/theme/components/style.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin-left: 12px; 3 | } 4 | 5 | .toggle { 6 | margin-top: 12px; 7 | margin-bottom: 22px; 8 | } 9 | 10 | .innerBox { 11 | padding: 30px; 12 | } 13 | 14 | .childrenBox { 15 | padding: 0 30px 30px 30px; 16 | } 17 | 18 | .error { 19 | color: rgb(244, 67, 54); 20 | } 21 | -------------------------------------------------------------------------------- /src/store/shared/containers/search.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {connect} from 'react-redux' 3 | import {withRouter} from 'react-router' 4 | import {mapStateToProps, mapDispatchToProps} from '../containerProps' 5 | import {SearchContainer} from 'theme' 6 | 7 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(SearchContainer)); 8 | -------------------------------------------------------------------------------- /src/store/shared/containers/shared.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {connect} from 'react-redux' 3 | import {withRouter} from 'react-router' 4 | import {mapStateToProps, mapDispatchToProps} from '../containerProps' 5 | import {SharedContainer} from 'theme' 6 | 7 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(SharedContainer)); 8 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/general/components/style.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin-left: 12px; 3 | } 4 | 5 | .toggle { 6 | margin-top: 12px; 7 | margin-bottom: 22px; 8 | } 9 | 10 | .innerBox { 11 | padding: 30px; 12 | } 13 | 14 | .childrenBox { 15 | padding: 0 30px 30px 30px; 16 | } 17 | 18 | .error { 19 | color: rgb(244, 67, 54); 20 | } 21 | -------------------------------------------------------------------------------- /src/store/shared/containers/category.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {connect} from 'react-redux' 3 | import {withRouter} from 'react-router' 4 | import {mapStateToProps, mapDispatchToProps} from '../containerProps' 5 | import {CategoryContainer} from 'theme' 6 | 7 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(CategoryContainer)); 8 | -------------------------------------------------------------------------------- /src/store/shared/containers/notfound.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {connect} from 'react-redux' 3 | import {withRouter} from 'react-router' 4 | import {mapStateToProps, mapDispatchToProps} from '../containerProps' 5 | import {NotFoundContainer} from 'theme' 6 | 7 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(NotFoundContainer)); 8 | -------------------------------------------------------------------------------- /src/store/shared/containers/product.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {connect} from 'react-redux' 3 | import {withRouter} from 'react-router' 4 | import {mapStateToProps, mapDispatchToProps} from '../containerProps' 5 | import {ProductContainer} from 'theme' 6 | 7 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(ProductContainer)); 8 | -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/hr/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("hr",function(a){a.addCommand("InsertHorizontalRule",function(){a.execCommand("mceInsertContent",!1,"
")}),a.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),a.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})}); -------------------------------------------------------------------------------- /src/admin/client/modules/apps/services/components/appItem.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Item from './item' 3 | 4 | const ServiceItem = ({ app }) => { 5 | return ( 6 | 11 | ) 12 | } 13 | 14 | export default ServiceItem; 15 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/checkoutFields/components/style.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin-left: 12px; 3 | } 4 | 5 | .toggle { 6 | margin-top: 12px; 7 | margin-bottom: 22px; 8 | } 9 | 10 | .innerBox { 11 | padding: 30px; 12 | } 13 | 14 | .childrenBox { 15 | padding: 0 30px 30px 30px; 16 | } 17 | 18 | .error { 19 | color: rgb(244, 67, 54); 20 | } 21 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/emailTemplates/components/style.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin-left: 12px; 3 | } 4 | 5 | .toggle { 6 | margin-top: 12px; 7 | margin-bottom: 22px; 8 | } 9 | 10 | .innerBox { 11 | padding: 30px; 12 | } 13 | 14 | .childrenBox { 15 | padding: 0 30px 30px 30px; 16 | } 17 | 18 | .error { 19 | color: rgb(244, 67, 54); 20 | } 21 | -------------------------------------------------------------------------------- /src/store/shared/containers/checkoutSuccess.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {connect} from 'react-redux' 3 | import {withRouter} from 'react-router' 4 | import {mapStateToProps, mapDispatchToProps} from '../containerProps' 5 | import {CheckoutSuccessContainer} from 'theme' 6 | 7 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(CheckoutSuccessContainer)); 8 | -------------------------------------------------------------------------------- /src/admin/client/modules/apps/services/components/style.css: -------------------------------------------------------------------------------- 1 | .servicesCover { 2 | width: 280px; 3 | height: 160px; 4 | background-size: cover; 5 | background-position: center; 6 | border-radius: 2px 2px 0 0; 7 | } 8 | 9 | .more { 10 | padding: 40px 0; 11 | text-align: center; 12 | } 13 | 14 | .card:hover { 15 | box-shadow: 0 2px 2px 0 rgba(0,0,0,0.2), 0 6px 10px 0 rgba(0,0,0,0.3) !important; 16 | } 17 | -------------------------------------------------------------------------------- /src/admin/client/apps/index.js: -------------------------------------------------------------------------------- 1 | import * as GoogleAnalyticsApp from './google-analytics' 2 | import * as SiteVerificationApp from './site-verification' 3 | import * as JivositeApp from './jivosite' 4 | import * as FacebookSDKApp from './facebook-sdk' 5 | import * as FacebookCustomerChatApp from './facebook-customer-chat' 6 | 7 | export default [GoogleAnalyticsApp, SiteVerificationApp, JivositeApp, FacebookSDKApp, FacebookCustomerChatApp]; 8 | -------------------------------------------------------------------------------- /src/admin/client/modules/files/list/head.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { withRouter } from 'react-router' 3 | import Buttons from './components/headButtons' 4 | 5 | const mapStateToProps = (state, ownProps) => { 6 | return {} 7 | } 8 | 9 | const mapDispatchToProps = (dispatch, ownProps) => { 10 | return {} 11 | } 12 | 13 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Buttons)); 14 | -------------------------------------------------------------------------------- /src/admin/client/modules/pages/list/head.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { withRouter } from 'react-router' 3 | import Buttons from './components/headButtons' 4 | 5 | const mapStateToProps = (state, ownProps) => { 6 | return {} 7 | } 8 | 9 | const mapDispatchToProps = (dispatch, ownProps) => { 10 | return {} 11 | } 12 | 13 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Buttons)); 14 | -------------------------------------------------------------------------------- /public/sw.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | importScripts('/sw-toolbox.js'); 3 | toolbox.router.get('/images/*', toolbox.cacheFirst); 4 | toolbox.router.get('/assets/*', toolbox.cacheFirst); 5 | toolbox.router.get('/admin-assets/*', toolbox.cacheFirst); 6 | toolbox.router.get('/api/*', toolbox.networkOnly); 7 | toolbox.router.get('/ajax/payment_form_settings', toolbox.networkOnly); 8 | toolbox.router.get('/*', toolbox.networkFirst, { networkTimeoutSeconds: 5}); 9 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/payments/head.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { withRouter } from 'react-router' 3 | import Buttons from './components/headButtons' 4 | 5 | const mapStateToProps = (state, ownProps) => { 6 | return {} 7 | } 8 | 9 | const mapDispatchToProps = (dispatch, ownProps) => { 10 | return {} 11 | } 12 | 13 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Buttons)); 14 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/shipping/head.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { withRouter } from 'react-router' 3 | import Buttons from './components/headButtons' 4 | 5 | const mapStateToProps = (state, ownProps) => { 6 | return {} 7 | } 8 | 9 | const mapDispatchToProps = (dispatch, ownProps) => { 10 | return {} 11 | } 12 | 13 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Buttons)); 14 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/tokens/list/head.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { withRouter } from 'react-router' 3 | import Buttons from './components/headButtons' 4 | 5 | const mapStateToProps = (state, ownProps) => { 6 | return {} 7 | } 8 | 9 | const mapDispatchToProps = (dispatch, ownProps) => { 10 | return {} 11 | } 12 | 13 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Buttons)); 14 | -------------------------------------------------------------------------------- /src/admin/client/modules/apps/head/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { connect } from 'react-redux' 3 | import { withRouter } from 'react-router' 4 | import Buttons from './components/buttons' 5 | 6 | const mapStateToProps = (state, ownProps) => { 7 | return {} 8 | } 9 | 10 | const mapDispatchToProps = (dispatch, ownProps) => { 11 | return {} 12 | } 13 | 14 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Buttons)); 15 | -------------------------------------------------------------------------------- /src/admin/client/routes/pages/edit.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Route } from 'react-router-dom' 3 | import PageEdit from 'modules/pages/edit' 4 | 5 | const ProductDetails = (props) => { 6 | return ( 7 |
8 |
9 | 10 |
11 |
12 | ) 13 | } 14 | 15 | export default ProductDetails; 16 | -------------------------------------------------------------------------------- /src/admin/client/modules/apps/account/components/style.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin-left: 12px; 3 | } 4 | 5 | .toggle { 6 | margin-top: 12px; 7 | margin-bottom: 22px; 8 | } 9 | 10 | .innerBox { 11 | padding: 30px; 12 | } 13 | 14 | .childrenBox { 15 | padding: 0 30px 30px 30px; 16 | } 17 | 18 | .error { 19 | color: rgb(244, 67, 54); 20 | } 21 | 22 | .detailsContainer { 23 | display: flex; 24 | flex-direction: column; 25 | align-items: center; 26 | } 27 | -------------------------------------------------------------------------------- /src/admin/client/modules/apps/services/components/serviceItem.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Item from './item' 3 | 4 | const ServiceItem = ({ service }) => { 5 | return ( 6 | 13 | ) 14 | } 15 | 16 | export default ServiceItem; 17 | -------------------------------------------------------------------------------- /theme/src/components/pageList/list.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { themeSettings, text } from '../../lib/settings' 3 | import PageListItem from './item' 4 | 5 | const PageList = ({pages}) => { 6 | const items = pages ? pages.map((page, index) => ( 7 | 8 | )) : null; 9 | 10 | return ( 11 |
12 | {items} 13 |
14 | ) 15 | } 16 | 17 | export default PageList 18 | -------------------------------------------------------------------------------- /public/admin-assets/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Cezerin", 3 | "short_name": "Cezerin", 4 | "start_url": "/admin", 5 | "display": "standalone", 6 | "background_color": "#F9F9F9", 7 | "theme_color": "#1976D2", 8 | "icons": [{ 9 | "src": "/admin-assets/images/shortcut.png", 10 | "sizes": "96x96", 11 | "type": "image/png" 12 | },{ 13 | "src": "/admin-assets/images/shortcut.png", 14 | "sizes": "192x192", 15 | "type": "image/png" 16 | }] 17 | } 18 | -------------------------------------------------------------------------------- /src/admin/client/modules/customers/list/components/style.css: -------------------------------------------------------------------------------- 1 | .customerName { 2 | text-decoration: none; 3 | font-weight: 400; 4 | color: rgb(0,142,180); 5 | } 6 | 7 | .customerName small { 8 | color: rgba(0, 0, 0, 0.4); 9 | } 10 | 11 | .location { 12 | color: rgba(0, 0, 0, 0.4); 13 | } 14 | 15 | .price { 16 | word-break: break-all; 17 | text-align: right; 18 | margin-right: 10px; 19 | } 20 | 21 | .more { 22 | padding: 40px 0; 23 | text-align: center; 24 | } 25 | -------------------------------------------------------------------------------- /src/admin/client/modules/pages/reducer.js: -------------------------------------------------------------------------------- 1 | import * as t from './actionTypes' 2 | 3 | const initialState = { 4 | pages: [], 5 | pageEdit: null 6 | }; 7 | 8 | export default(state = initialState, action) => { 9 | switch (action.type) { 10 | case t.PAGES_RECEIVE: 11 | return Object.assign({}, state, {pages: action.pages}) 12 | case t.PAGE_RECEIVE: 13 | return Object.assign({}, state, {pageEdit: action.pageEdit}) 14 | default: 15 | return state 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/admin/client/modules/orders/list/components/style.css: -------------------------------------------------------------------------------- 1 | .number { 2 | text-decoration: none; 3 | font-weight: 400; 4 | color: rgb(0,142,180); 5 | } 6 | 7 | .small { 8 | color: rgba(0, 0, 0, 0.4); 9 | } 10 | 11 | .price { 12 | word-break: break-all; 13 | text-align: right; 14 | } 15 | 16 | .shipping { 17 | font-size: 14px; 18 | } 19 | 20 | .status { 21 | text-align: right; 22 | font-size: 14px; 23 | } 24 | 25 | .more { 26 | padding: 40px 0; 27 | text-align: center; 28 | } 29 | -------------------------------------------------------------------------------- /src/admin/client/modules/pages/list/index.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { fetchPages } from '../actions' 3 | import Form from './components/form' 4 | 5 | const mapStateToProps = (state) => { 6 | return { 7 | pages: state.pages.pages 8 | } 9 | } 10 | 11 | const mapDispatchToProps = (dispatch) => { 12 | return { 13 | onLoad: () => { 14 | dispatch(fetchPages()) 15 | } 16 | } 17 | } 18 | 19 | export default connect(mapStateToProps, mapDispatchToProps)(Form); 20 | -------------------------------------------------------------------------------- /src/store/server/api.js: -------------------------------------------------------------------------------- 1 | import jwt from 'jsonwebtoken' 2 | import CezerinClient from 'cezerin-client' 3 | import serverSettings from './settings' 4 | 5 | const TOKEN_PAYLOAD = {email: 'store', scopes: ['admin']}; 6 | const STORE_ACCESS_TOKEN = jwt.sign(TOKEN_PAYLOAD, serverSettings.jwtSecretKey); 7 | 8 | const api = new CezerinClient({ 9 | apiBaseUrl: serverSettings.apiBaseUrl, 10 | ajaxBaseUrl: serverSettings.ajaxBaseUrl, 11 | apiToken: STORE_ACCESS_TOKEN 12 | }); 13 | 14 | export default api; 15 | -------------------------------------------------------------------------------- /theme/src/components/productList/itemTags.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { themeSettings, text } from '../../lib/settings' 3 | import * as helper from '../../lib/helper' 4 | 5 | const ItemTags = ({ tags }) => { 6 | if(tags && tags.length > 0){ 7 | return
8 | {tags.map((tag, index) => ( 9 | {tag} 10 | ))} 11 |
12 | } else { 13 | return null; 14 | } 15 | } 16 | 17 | export default ItemTags 18 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/tokens/list/index.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { fetchTokens } from '../../actions' 3 | import Form from './components/form' 4 | 5 | const mapStateToProps = (state) => { 6 | return { 7 | tokens: state.settings.tokens 8 | } 9 | } 10 | 11 | const mapDispatchToProps = (dispatch) => { 12 | return { 13 | onLoad: () => { 14 | dispatch(fetchTokens()) 15 | } 16 | } 17 | } 18 | 19 | export default connect(mapStateToProps, mapDispatchToProps)(Form); 20 | -------------------------------------------------------------------------------- /src/api/server/services/data.js: -------------------------------------------------------------------------------- 1 | // 'use strict'; 2 | // 3 | // const fs = require('fs') 4 | // const path = require('path') 5 | // const countriesArray = require('../../../../data/countries.json'); 6 | // const currenciesArray = require('../../../../data/currencies.json'); 7 | // 8 | // class DataService { 9 | // getCountries() { 10 | // return countriesArray; 11 | // } 12 | // 13 | // getCurrencies() { 14 | // return currenciesArray; 15 | // } 16 | // } 17 | // 18 | // module.exports = new DataService(); 19 | -------------------------------------------------------------------------------- /theme/src/components/productDetails/tags.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import * as helper from '../../lib/helper' 3 | import { themeSettings, text } from '../../lib/settings' 4 | 5 | const Tags = ({ tags }) => { 6 | if(tags && tags.length > 0){ 7 | return ( 8 |
9 | {tags.map((tag, index) => ( 10 | {tag} 11 | ))} 12 |
13 | ) 14 | } else { 15 | return null; 16 | } 17 | } 18 | 19 | export default Tags; 20 | -------------------------------------------------------------------------------- /src/admin/client/routes/orders/statuses/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Edit from 'modules/orderStatuses/edit'; 3 | import List from 'modules/orderStatuses/list'; 4 | 5 | export default () => ( 6 |
7 |
8 | 9 |
10 |
11 | 12 |
13 |
14 | ) 15 | -------------------------------------------------------------------------------- /src/admin/client/modules/customerGroups/select/index.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { fetchGroupsIfNeeded } from '../actions' 3 | import List from '../components/list' 4 | 5 | const mapStateToProps = (state) => { 6 | return { 7 | items: state.customerGroups.items 8 | } 9 | } 10 | 11 | const mapDispatchToProps = (dispatch) => { 12 | return { 13 | onLoad: () => { 14 | dispatch(fetchGroupsIfNeeded()); 15 | } 16 | } 17 | } 18 | 19 | export default connect(mapStateToProps, mapDispatchToProps)(List); 20 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/email/index.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { fetchEmailSettings } from '../actions' 3 | import Form from './components/form' 4 | 5 | const mapStateToProps = (state) => { 6 | return { 7 | emailSettings: state.settings.emailSettings 8 | } 9 | } 10 | 11 | const mapDispatchToProps = (dispatch) => { 12 | return { 13 | onLoad: () => { 14 | dispatch(fetchEmailSettings()) 15 | } 16 | } 17 | } 18 | 19 | export default connect(mapStateToProps, mapDispatchToProps)(Form); 20 | -------------------------------------------------------------------------------- /src/admin/client/modules/orderStatuses/select/index.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { fetchStatusesIfNeeded } from '../actions' 3 | import List from '../components/list' 4 | 5 | const mapStateToProps = (state) => { 6 | return { 7 | items: state.orderStatuses.items 8 | } 9 | } 10 | 11 | const mapDispatchToProps = (dispatch) => { 12 | return { 13 | onLoad: () => { 14 | dispatch(fetchStatusesIfNeeded()); 15 | } 16 | } 17 | } 18 | 19 | export default connect(mapStateToProps, mapDispatchToProps)(List); 20 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/checkout/index.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { fetchCheckoutFields } from '../actions' 3 | import Form from './components/form' 4 | 5 | const mapStateToProps = (state) => { 6 | return { 7 | checkoutFields: state.settings.checkoutFields 8 | } 9 | } 10 | 11 | const mapDispatchToProps = (dispatch) => { 12 | return { 13 | onLoad: () => { 14 | dispatch(fetchCheckoutFields()) 15 | } 16 | } 17 | } 18 | 19 | export default connect(mapStateToProps, mapDispatchToProps)(Form); 20 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/payments/index.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { fetchPaymentMethods } from '../actions' 3 | import Form from './components/form' 4 | 5 | const mapStateToProps = (state) => { 6 | return { 7 | paymentMethods: state.settings.paymentMethods 8 | } 9 | } 10 | 11 | const mapDispatchToProps = (dispatch) => { 12 | return { 13 | onLoad: () => { 14 | dispatch(fetchPaymentMethods()) 15 | } 16 | } 17 | } 18 | 19 | export default connect(mapStateToProps, mapDispatchToProps)(Form); 20 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/shipping/index.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { fetchShippingMethods } from '../actions' 3 | import Form from './components/form' 4 | 5 | const mapStateToProps = (state) => { 6 | return { 7 | shippingMethods: state.settings.shippingMethods 8 | } 9 | } 10 | 11 | const mapDispatchToProps = (dispatch) => { 12 | return { 13 | onLoad: () => { 14 | dispatch(fetchShippingMethods()) 15 | } 16 | } 17 | } 18 | 19 | export default connect(mapStateToProps, mapDispatchToProps)(Form); 20 | -------------------------------------------------------------------------------- /src/store/shared/containers/checkout.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {connect} from 'react-redux' 3 | import {withRouter} from 'react-router' 4 | import {mapStateToProps, mapDispatchToProps} from '../containerProps' 5 | import {CheckoutContainer} from 'theme' 6 | import CheckoutForm from '../components/checkoutForm' 7 | 8 | const ConnectedCheckoutContainer = withRouter(connect(mapStateToProps, mapDispatchToProps)(CheckoutContainer)); 9 | 10 | export default() => { 11 | return } /> 12 | } 13 | -------------------------------------------------------------------------------- /src/admin/client/routes/customers/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import CustomersList from 'modules/customers/list'; 3 | import Groups from 'modules/customerGroups/list'; 4 | 5 | export default () => ( 6 |
7 |
8 | 9 |
10 |
11 | 12 |
13 |
14 | ) 15 | -------------------------------------------------------------------------------- /src/admin/client/routes/customers/groups/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import GroupEdit from 'modules/customerGroups/edit'; 3 | import Groups from 'modules/customerGroups/list'; 4 | 5 | export default () => ( 6 |
7 |
8 | 9 |
10 |
11 | 12 |
13 |
14 | ) 15 | -------------------------------------------------------------------------------- /scripts/theme-export.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # first argument is *.zip file name 5 | fileName="theme.zip" 6 | 7 | # 1. change fileName if arg passed 8 | if [ $# -ne 0 ]; then 9 | fileName=$1 10 | fi 11 | 12 | # 2. delete zip if exists 13 | if [ -f "public/content/$fileName" ]; then 14 | rm public/content/$fileName 15 | fi 16 | 17 | # 3. zip current theme 18 | cd theme 19 | zip -rq9 ../public/content/$fileName . -x node_modules\* dist\* assets/index.html assets/js/bundle-\* assets/css/bundle-\* 20 | 21 | # 4. show success message 22 | echo success 23 | -------------------------------------------------------------------------------- /src/api/server/routes/notifications.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const PaymentGateways = require('../paymentGateways'); 4 | 5 | class NotificationsRoute { 6 | constructor(router) { 7 | this.router = router; 8 | this.registerRoutes(); 9 | } 10 | 11 | registerRoutes() { 12 | this.router.post('/v1/notifications/:gateway', this.paymentNotification.bind(this)); 13 | } 14 | 15 | paymentNotification(req, res, next) { 16 | PaymentGateways.paymentNotification(req, res, req.params.gateway); 17 | } 18 | } 19 | 20 | module.exports = NotificationsRoute; 21 | -------------------------------------------------------------------------------- /src/admin/client/routes/products/categories/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import CategoryEdit from 'modules/productCategories/edit'; 3 | import Categories from 'modules/productCategories/list'; 4 | 5 | export default () => ( 6 |
7 |
8 | 9 |
10 |
11 | 12 |
13 |
14 | ) 15 | -------------------------------------------------------------------------------- /src/api/server/controllers/notifications.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | const PaymentGateways = require('../paymentGateways'); 4 | 5 | class NotificationsController { 6 | constructor(router) { 7 | this.router = router; 8 | this.registerRoutes(); 9 | } 10 | 11 | registerRoutes() { 12 | this.router.post('/v1/notifications/:gateway', this.paymentNotification.bind(this)); 13 | } 14 | 15 | paymentNotification(req, res, next) { 16 | PaymentGateways.paymentNotification(req, res, req.params.gateway); 17 | } 18 | } 19 | 20 | module.exports = NotificationsController; 21 | -------------------------------------------------------------------------------- /src/admin/client/lib/api.js: -------------------------------------------------------------------------------- 1 | import CezerinClient from 'cezerin-client' 2 | import settings from 'lib/settings' 3 | 4 | let api = null; 5 | let dashboardToken = localStorage.getItem('dashboard_token'); 6 | let webstoreToken = localStorage.getItem('webstore_token'); 7 | 8 | const DEVELOPER_MODE = settings.developerMode === true; 9 | 10 | if(dashboardToken || DEVELOPER_MODE === true) { 11 | api = new CezerinClient({ 12 | apiBaseUrl: settings.apiBaseUrl || '/api/v1', 13 | apiToken: dashboardToken, 14 | webstoreToken: webstoreToken 15 | }); 16 | } 17 | 18 | export default api; 19 | -------------------------------------------------------------------------------- /src/admin/client/modules/productCategories/select/index.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { selectCategory, fetchCategoriesIfNeeded, createCategory } from '../actions' 3 | import List from '../components/list' 4 | 5 | const mapStateToProps = (state) => { 6 | return { 7 | items: state.productCategories.items 8 | } 9 | } 10 | 11 | const mapDispatchToProps = (dispatch) => { 12 | return { 13 | onLoad: () => { 14 | dispatch(fetchCategoriesIfNeeded()); 15 | } 16 | } 17 | } 18 | 19 | export default connect(mapStateToProps, mapDispatchToProps)(List); 20 | -------------------------------------------------------------------------------- /theme/src/lib/settings.js: -------------------------------------------------------------------------------- 1 | export let themeSettings = {}; 2 | export let text = {}; 3 | 4 | // Client - from Redux state 5 | if(typeof window !== 'undefined'){ 6 | const appText = window.__APP_TEXT__; 7 | const appState = window.__APP_STATE__; 8 | 9 | if(appState.app.themeSettings){ 10 | themeSettings = appState.app.themeSettings; 11 | } 12 | 13 | if(appText){ 14 | text = appText; 15 | } 16 | } 17 | 18 | // Server - from render page method 19 | export const updateThemeSettings = options => { 20 | themeSettings = options.settings; 21 | text = options.text; 22 | } 23 | -------------------------------------------------------------------------------- /src/store/shared/components/checkoutForm/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {connect} from 'react-redux' 3 | import {withRouter} from 'react-router' 4 | import Form from './form' 5 | 6 | const mapStateToProps = (state, ownProps) => { 7 | return { 8 | cart: state.app.cart, 9 | settings: state.app.settings, 10 | themeSettings: state.app.themeSettings 11 | } 12 | } 13 | 14 | const mapDispatchToProps = (dispatch, ownProps) => { 15 | return { 16 | onLoad: () => {} 17 | } 18 | } 19 | 20 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Form)); 21 | -------------------------------------------------------------------------------- /src/api/server/services/orders/paymentMethodsLight.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var mongo = require('../../lib/mongo'); 4 | 5 | class PaymentMethodsLightService { 6 | constructor() {} 7 | 8 | getMethods(filter = {}) { 9 | return mongo.db.collection('paymentMethods').find(filter).toArray().then(items => items.map(item => this.changeProperties(item))) 10 | } 11 | 12 | changeProperties(item) { 13 | if (item) { 14 | item.id = item._id.toString(); 15 | delete item._id; 16 | } 17 | return item; 18 | } 19 | } 20 | 21 | module.exports = new PaymentMethodsLightService(); 22 | -------------------------------------------------------------------------------- /theme/assets/images/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | ## Documentation 2 | 3 | ### General 4 | * [Getting Started](./getting-started.md) 5 | * [Developer Install Guide](./developer.md) 6 | * [Application Structure](./structure.md) 7 | * [Initialize MongoDB](.initialize-mongodb.md) 8 | * Theme customization 9 | * [API](https://apidocs.cezerin.com) 10 | * [API Client](https://github.com/cezerin/client) 11 | * Localization 12 | * Payment Gateway 13 | * Web Service 14 | 15 | ### Questions 16 | 17 | * How to change language 18 | 19 | ### Recipes 20 | 21 | * How to Integrate Disqus 22 | 23 | -------------------------------------------------------------------------------- /src/admin/client/routes/orders/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import OrdersList from 'modules/orders/list'; 3 | import OrdersFilter from 'modules/orders/listFilter'; 4 | import Statuses from 'modules/orderStatuses/list'; 5 | 6 | export default () => ( 7 |
8 |
9 | 10 | 11 |
12 |
13 | 14 |
15 |
16 | ) 17 | -------------------------------------------------------------------------------- /src/admin/client/modules/pages/list/components/headButtons.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Link } from 'react-router-dom' 3 | import messages from 'lib/text' 4 | import FontIcon from 'material-ui/FontIcon' 5 | import IconButton from 'material-ui/IconButton' 6 | 7 | const Buttons = () => ( 8 | 9 | 10 | 11 | add 12 | 13 | 14 | 15 | ) 16 | 17 | export default Buttons; 18 | -------------------------------------------------------------------------------- /src/admin/client/modules/customerGroups/actionTypes.js: -------------------------------------------------------------------------------- 1 | export const GROUPS_REQUEST = 'GROUPS_REQUEST' 2 | export const GROUPS_RECEIVE = 'GROUPS_RECEIVE' 3 | export const GROUPS_FAILURE = 'GROUPS_FAILURE' 4 | 5 | export const GROUPS_SELECT = 'GROUPS_SELECT' 6 | export const GROUPS_DESELECT = 'GROUPS_DESELECT' 7 | 8 | export const GROUP_UPDATE_REQUEST = 'GROUP_UPDATE_REQUEST' 9 | export const GROUP_UPDATE_SUCCESS = 'GROUP_UPDATE_SUCCESS' 10 | export const GROUP_UPDATE_FAILURE = 'GROUP_UPDATE_FAILURE' 11 | 12 | export const GROUP_CREATE_SUCCESS = 'GROUP_CREATE_SUCCESS' 13 | export const GROUP_DELETE_SUCCESS = 'GROUP_DELETE_SUCCESS' 14 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/general/index.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { fetchSettings, updateSettings } from '../actions' 3 | import Form from './components/form' 4 | 5 | const mapStateToProps = (state) => { 6 | return { 7 | initialValues: state.settings.settings 8 | } 9 | } 10 | 11 | const mapDispatchToProps = (dispatch) => { 12 | return { 13 | onLoad: () => { 14 | dispatch(fetchSettings()) 15 | }, 16 | onSubmit: (values) => { 17 | dispatch(updateSettings(values)); 18 | } 19 | } 20 | } 21 | 22 | export default connect(mapStateToProps, mapDispatchToProps)(Form); 23 | -------------------------------------------------------------------------------- /src/admin/client/modules/files/reducer.js: -------------------------------------------------------------------------------- 1 | import * as t from './actionTypes' 2 | 3 | const initialState = { 4 | files: [], 5 | uploading: false 6 | }; 7 | 8 | export default(state = initialState, action) => { 9 | switch (action.type) { 10 | case t.FILES_RECEIVE: 11 | return Object.assign({}, state, {files: action.files}) 12 | case t.FILES_UPLOAD_START: 13 | return Object.assign({}, state, { 14 | uploading: true 15 | }) 16 | case t.FILES_UPLOAD_END: 17 | return Object.assign({}, state, { 18 | uploading: false 19 | }) 20 | default: 21 | return state 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/api/server/lib/mongo.js: -------------------------------------------------------------------------------- 1 | const settings = require('./settings'); 2 | const winston = require('winston'); 3 | const mongo = require('mongodb').MongoClient; 4 | const mongodbConnection = settings.mongodbServerUrl; 5 | 6 | const CONNECT_OPTIONS = { 7 | reconnectTries: 3600, 8 | reconnectInterval: 1000 9 | } 10 | 11 | // Initialize connection once 12 | mongo.connect(mongodbConnection, CONNECT_OPTIONS, (err, database) => { 13 | if(err){ 14 | winston.error('Failed connecting to MongoDB', err.message); 15 | } else { 16 | module.exports.db = database; 17 | winston.info('Successfully connected to MongoDB') 18 | } 19 | }); 20 | -------------------------------------------------------------------------------- /theme/src/containers/notfound.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { themeSettings, text } from '../lib/settings' 3 | import MetaTags from '../components/metaTags' 4 | const Fragment = React.Fragment; 5 | 6 | const NotFoundContainer = (props) => ( 7 | 8 | 11 |
12 |
13 |
14 |

{text.title404}

15 | {text.text404} 16 |
17 |
18 |
19 |
20 | ) 21 | 22 | export default NotFoundContainer 23 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/tokens/list/components/headButtons.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Link } from 'react-router-dom' 3 | import messages from 'lib/text' 4 | import FontIcon from 'material-ui/FontIcon' 5 | import IconButton from 'material-ui/IconButton' 6 | 7 | const Buttons = () => ( 8 | 9 | 10 | 11 | add 12 | 13 | 14 | 15 | ) 16 | 17 | export default Buttons; 18 | -------------------------------------------------------------------------------- /src/admin/client/routes/products/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ProductsList from 'modules/products/list'; 3 | import ProductsFilter from 'modules/products/listFilter'; 4 | import Categories from 'modules/productCategories/list'; 5 | 6 | export default () => ( 7 |
8 |
9 | 10 | 11 |
12 |
13 | 14 |
15 |
16 | ) 17 | -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/anchor/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("anchor",function(a){function b(){var b=a.selection.getNode(),c="",d="A"==b.tagName&&""===a.dom.getAttrib(b,"href");d&&(c=b.name||b.id||""),a.windowManager.open({title:"Anchor",body:{type:"textbox",name:"name",size:40,label:"Name",value:c},onsubmit:function(c){var e=c.data.name;d?b.id=e:(a.selection.collapse(!0),a.execCommand("mceInsertContent",!1,a.dom.createHTML("a",{id:e})))}})}a.addCommand("mceAnchor",b),a.addButton("anchor",{icon:"anchor",tooltip:"Anchor",onclick:b,stateSelector:"a:not([href])"}),a.addMenuItem("anchor",{icon:"anchor",text:"Anchor",context:"insert",onclick:b})}); -------------------------------------------------------------------------------- /src/admin/client/modules/pages/edit/head.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { withRouter } from 'react-router' 3 | import { deletePage } from '../actions' 4 | import Buttons from './components/headButtons' 5 | 6 | const mapStateToProps = (state, ownProps) => { 7 | return { 8 | page: state.pages.pageEdit 9 | } 10 | } 11 | 12 | const mapDispatchToProps = (dispatch, ownProps) => { 13 | return { 14 | onDelete: (id) => { 15 | dispatch(deletePage(id)); 16 | ownProps.history.push('/admin/pages'); 17 | } 18 | } 19 | } 20 | 21 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Buttons)); 22 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/payments/components/headButtons.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Link } from 'react-router-dom' 3 | import messages from 'lib/text' 4 | import FontIcon from 'material-ui/FontIcon' 5 | import IconButton from 'material-ui/IconButton' 6 | 7 | const Buttons = () => ( 8 | 9 | 10 | 11 | add 12 | 13 | 14 | 15 | ) 16 | 17 | export default Buttons; 18 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/shipping/components/headButtons.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Link } from 'react-router-dom' 3 | import messages from 'lib/text' 4 | import FontIcon from 'material-ui/FontIcon' 5 | import IconButton from 'material-ui/IconButton' 6 | 7 | const Buttons = () => ( 8 | 9 | 10 | 11 | add 12 | 13 | 14 | 15 | ) 16 | 17 | export default Buttons; 18 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/smtp/index.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { fetchEmailSettings, updateEmailSettings } from '../actions' 3 | import Form from './components/form' 4 | 5 | const mapStateToProps = (state) => { 6 | return { 7 | initialValues: state.settings.emailSettings 8 | } 9 | } 10 | 11 | const mapDispatchToProps = (dispatch) => { 12 | return { 13 | onLoad: () => { 14 | dispatch(fetchEmailSettings()) 15 | }, 16 | onSubmit: (values) => { 17 | dispatch(updateEmailSettings(values)); 18 | } 19 | } 20 | } 21 | 22 | export default connect(mapStateToProps, mapDispatchToProps)(Form); 23 | -------------------------------------------------------------------------------- /src/store/server/themeLocales.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | import path from 'path' 3 | 4 | const THEME_LOCALES_PATH = 'theme/locales/'; 5 | let text = null; 6 | 7 | export const getText = (locale) => { 8 | if(text) { 9 | return Promise.resolve(text); 10 | } else { 11 | const filePath = path.resolve(THEME_LOCALES_PATH + locale + '.json'); 12 | return new Promise((resolve, reject) => { 13 | fs.readFile(filePath, 'utf8', (err, data) => { 14 | if(err){ 15 | reject(err) 16 | } else { 17 | text = JSON.parse(data); 18 | resolve(text); 19 | } 20 | }); 21 | }); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/admin/client/modules/orderStatuses/actionTypes.js: -------------------------------------------------------------------------------- 1 | export const STATUSES_REQUEST = 'STATUSES_REQUEST' 2 | export const STATUSES_RECEIVE = 'STATUSES_RECEIVE' 3 | export const STATUSES_FAILURE = 'STATUSES_FAILURE' 4 | 5 | export const STATUSES_SELECT = 'STATUSES_SELECT' 6 | export const STATUSES_DESELECT = 'STATUSES_DESELECT' 7 | 8 | export const STATUS_UPDATE_REQUEST = 'STATUS_UPDATE_REQUEST' 9 | export const STATUS_UPDATE_SUCCESS = 'STATUS_UPDATE_SUCCESS' 10 | export const STATUS_UPDATE_FAILURE = 'STATUS_UPDATE_FAILURE' 11 | 12 | export const STATUS_CREATE_SUCCESS = 'STATUS_CREATE_SUCCESS' 13 | export const STATUS_DELETE_SUCCESS = 'STATUS_DELETE_SUCCESS' 14 | -------------------------------------------------------------------------------- /scripts/theme-install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # first argument is *.zip file name 5 | fileName=$1 6 | 7 | if [ $# -eq 0 ]; then 8 | echo "No arguments supplied" 9 | exit 1 10 | fi 11 | 12 | # 1. check file exists 13 | if [ ! -f "public/content/$fileName" ]; then 14 | echo "File not found!" 15 | exit 1 16 | fi 17 | 18 | # 3. remove all the contents of theme folder 19 | rm -rf theme/* 20 | 21 | # 4. unzip to current theme 22 | unzip -q "public/content/$fileName" -d "theme" 23 | 24 | # 5. build theme 25 | npm run theme:build:prod 26 | 27 | # 6. show success message 28 | echo -e '\e[1;92m'Theme $fileName successfully installed'\e[0m' 29 | -------------------------------------------------------------------------------- /src/admin/client/modules/products/listHead/components/search.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import messages from 'lib/text' 3 | import TextField from 'material-ui/TextField'; 4 | 5 | export default ({ value, setSearch }) => { 6 | return ( 7 | 16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /src/admin/client/routes/products/edit.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Route } from 'react-router-dom' 3 | import ProductEdit from 'modules/products/edit' 4 | import ProductOption from 'modules/products/edit/option' 5 | 6 | const ProductDetails = (props) => { 7 | return ( 8 |
9 |
10 | 11 | 12 |
13 |
14 | ) 15 | } 16 | 17 | export default ProductDetails; 18 | -------------------------------------------------------------------------------- /theme/assets/css/page.scss: -------------------------------------------------------------------------------- 1 | .page-list { 2 | margin: 40px 0 0 0; 3 | } 4 | .page-item { 5 | margin: 0 0 30px 0; 6 | border-bottom: 1px solid #e5e5e5; 7 | } 8 | .page-item h2 { 9 | font-size: 1.5rem; 10 | margin: 0 0 10px 0; 11 | } 12 | .page-item h2 a:hover { 13 | text-decoration: underline; 14 | } 15 | .page-item .date { 16 | font-size: small; 17 | color: #aaa; 18 | margin: 0 0 10px 0; 19 | } 20 | .page-item .description { 21 | margin: 0 0 10px 0; 22 | } 23 | .page-item div:last-of-type { 24 | margin: 0 0 40px 0; 25 | } 26 | .page-list div:last-of-type { 27 | border-bottom: none; 28 | } 29 | .page-content a { 30 | text-decoration: underline; 31 | } 32 | -------------------------------------------------------------------------------- /src/admin/client/modules/orders/listHead/components/search.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import messages from 'lib/text' 3 | import TextField from 'material-ui/TextField'; 4 | 5 | export default ({ value, setSearch }) => { 6 | return ( 7 | { setSearch(v); }} 10 | hintText={messages.orders_search} 11 | underlineShow={false} 12 | style={{ float: 'left', marginRight: 10 }} 13 | hintStyle={{ color: 'rgba(255,255,255,0.4)', textIndent: '16px' }} 14 | inputStyle={{ color:'#fff', backgroundColor: 'rgba(255,255,255,0.2)', borderRadius: '4px', textIndent: '16px' }} 15 | /> 16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /src/store/server/robotsRendering.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | import path from 'path' 3 | import api from './api' 4 | 5 | const ROBOTS_TEMPLATE_PATH = 'public/robots.template'; 6 | 7 | const robotsRendering = (req, res) => { 8 | api.settings.retrieve().then(settingsResponse => { 9 | fs.readFile(path.resolve(ROBOTS_TEMPLATE_PATH), 'utf8', (err, data) => { 10 | if(err) { 11 | res.status(500).end(); 12 | } else { 13 | const robots = data.replace(/{domain}/g, settingsResponse.json.domain) 14 | res.header('Content-Type', 'text/plain'); 15 | res.send(robots); 16 | } 17 | }); 18 | }) 19 | } 20 | 21 | export default robotsRendering; 22 | -------------------------------------------------------------------------------- /theme/src/components/productDetails/breadcrumbs.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { NavLink } from 'react-router-dom' 3 | import { themeSettings, text } from '../../lib/settings' 4 | import * as helper from '../../lib/helper' 5 | 6 | const ProductBreadcrumbs = ({ product, categories }) => { 7 | const items = helper.getProductBreadcrumbs(product, categories); 8 | return ( 9 | 17 | ) 18 | } 19 | 20 | export default ProductBreadcrumbs; 21 | -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/example/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("example",function(a,b){a.addButton("example",{text:"My button",icon:!1,onclick:function(){a.windowManager.open({title:"Example plugin",body:[{type:"textbox",name:"title",label:"Title"}],onsubmit:function(b){a.insertContent("Title: "+b.data.title)}})}}),a.addMenuItem("example",{text:"Example plugin",context:"tools",onclick:function(){a.windowManager.open({title:"TinyMCE site",url:b+"/dialog.html",width:600,height:400,buttons:[{text:"Insert",onclick:function(){var b=a.windowManager.getWindows()[0];a.insertContent(b.getContentWindow().document.getElementById("content").value),b.close()}},{text:"Close",onclick:"close"}]})}})}); -------------------------------------------------------------------------------- /public/admin-assets/tinymce/plugins/nonbreaking/plugin.min.js: -------------------------------------------------------------------------------- 1 | tinymce.PluginManager.add("nonbreaking",function(a){var b=a.getParam("nonbreaking_force_tab");if(a.addCommand("mceNonBreaking",function(){a.insertContent(a.plugins.visualchars&&a.plugins.visualchars.state?' ':" "),a.dom.setAttrib(a.dom.select("span.mce-nbsp"),"data-mce-bogus","1")}),a.addButton("nonbreaking",{title:"Nonbreaking space",cmd:"mceNonBreaking"}),a.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),b){var c=+b>1?+b:3;a.on("keydown",function(b){if(9==b.keyCode){if(b.shiftKey)return;b.preventDefault();for(var d=0;c>d;d++)a.execCommand("mceNonBreaking")}})}}); -------------------------------------------------------------------------------- /src/admin/client/modules/customers/listHead/components/search.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import messages from 'lib/text' 3 | import TextField from 'material-ui/TextField'; 4 | 5 | export default ({ value, setSearch }) => { 6 | return ( 7 | { setSearch(v); }} 10 | hintText={messages.customers_search} 11 | underlineShow={false} 12 | style={{ float: 'left', marginRight: 10 }} 13 | hintStyle={{ color: 'rgba(255,255,255,0.4)', textIndent: '16px' }} 14 | inputStyle={{ color:'#fff', backgroundColor: 'rgba(255,255,255,0.2)', borderRadius: '4px', textIndent: '16px' }} 15 | /> 16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /src/api/server/controllers/data.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var DataService = require('../services/data'); 4 | 5 | class DataController { 6 | constructor(router) { 7 | this.router = router; 8 | this.registerRoutes(); 9 | } 10 | 11 | registerRoutes() { 12 | // this.router.get('/countries', this.getCountries.bind(this)); 13 | // this.router.get('/currencies', this.getCurrencies.bind(this)); 14 | } 15 | 16 | // getCountries(req, res, next) { 17 | // res.send(DataService.getCountries()) 18 | // } 19 | // 20 | // getCurrencies(req, res, next) { 21 | // res.send(DataService.getCurrencies()) 22 | // } 23 | } 24 | 25 | module.exports = DataController; 26 | -------------------------------------------------------------------------------- /theme/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "theme", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "dist/index.js", 6 | "scripts": { 7 | "build": "babel src -d dist --quiet" 8 | }, 9 | "author": "", 10 | "license": "MIT", 11 | "dependencies": { 12 | "babel-cli": "^6.26.0", 13 | "babel-core": "^6.26.0", 14 | "babel-loader": "^7.1.2", 15 | "babel-plugin-transform-class-properties": "^6.24.1", 16 | "babel-preset-latest": "^6.24.1", 17 | "babel-preset-react": "^6.24.1", 18 | "bulma": "^0.6.1", 19 | "rc-slider": "^8.4.1", 20 | "react-image-gallery": "^0.8.6", 21 | "react-image-lightbox": "^4.3.0", 22 | "react-lazyload": "^2.3.0" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/admin/client/modules/products/editHead/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { connect } from 'react-redux' 3 | import { withRouter } from 'react-router' 4 | import { deleteCurrentProduct } from '../actions' 5 | import Buttons from './components/buttons' 6 | 7 | const mapStateToProps = (state, ownProps) => { 8 | return { 9 | product: state.products.editProduct 10 | } 11 | } 12 | 13 | const mapDispatchToProps = (dispatch, ownProps) => { 14 | return { 15 | onDelete: () => { 16 | dispatch(deleteCurrentProduct()); 17 | ownProps.history.push('/admin/products'); 18 | } 19 | } 20 | } 21 | 22 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Buttons)); 23 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/generalLogo/index.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { fetchSettings, deleteLogo, uploadLogo } from '../actions' 3 | import Form from './components/form' 4 | 5 | const mapStateToProps = (state) => { 6 | return { 7 | settings: state.settings.settings 8 | } 9 | } 10 | 11 | const mapDispatchToProps = (dispatch) => { 12 | return { 13 | onLoad: () => { 14 | dispatch(fetchSettings()) 15 | }, 16 | onImageDelete: () => { 17 | dispatch(deleteLogo()); 18 | }, 19 | onImageUpload: (form) => { 20 | dispatch(uploadLogo(form)); 21 | } 22 | } 23 | } 24 | 25 | export default connect(mapStateToProps, mapDispatchToProps)(Form); 26 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/paymentsEdit/head.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { withRouter } from 'react-router' 3 | import { deletePaymentMethod } from '../actions' 4 | import Buttons from './components/headButtons' 5 | 6 | const mapStateToProps = (state, ownProps) => { 7 | return { 8 | paymentMethod: state.settings.paymentMethodEdit 9 | } 10 | } 11 | 12 | const mapDispatchToProps = (dispatch, ownProps) => { 13 | return { 14 | onDelete: (id) => { 15 | dispatch(deletePaymentMethod(id)); 16 | ownProps.history.push('/admin/settings/payments'); 17 | } 18 | } 19 | } 20 | 21 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Buttons)); 22 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/themeSettings/components/style.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin-left: 12px; 3 | } 4 | 5 | .innerBox { 6 | padding: 30px; 7 | } 8 | 9 | .arrayInnerBox { 10 | padding: 0 30px 20px 30px; 11 | } 12 | 13 | .arrayTitle{ 14 | margin: 40px 0 0 0; 15 | display: flex; 16 | align-items: center; 17 | } 18 | 19 | .arrayItemHead { 20 | padding: 4px; 21 | } 22 | 23 | .colorInput { 24 | padding-top: 16px; 25 | padding-bottom: 16px; 26 | } 27 | 28 | .colorInput label { 29 | margin-right: 20px; 30 | } 31 | 32 | .sectionTitle { 33 | font-size: 24px; 34 | font-weight: 400; 35 | margin: 40px -30px 0px -30px; 36 | padding: 15px 30px; 37 | background-color: #f1f1f1; 38 | } 39 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/shippingEdit/head.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { withRouter } from 'react-router' 3 | import { deleteShippingMethod } from '../actions' 4 | import Buttons from './components/headButtons' 5 | 6 | const mapStateToProps = (state, ownProps) => { 7 | return { 8 | shippingMethod: state.settings.shippingMethodEdit 9 | } 10 | } 11 | 12 | const mapDispatchToProps = (dispatch, ownProps) => { 13 | return { 14 | onDelete: (id) => { 15 | dispatch(deleteShippingMethod(id)); 16 | ownProps.history.push('/admin/settings/shipping'); 17 | } 18 | } 19 | } 20 | 21 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Buttons)); 22 | -------------------------------------------------------------------------------- /src/admin/client/modules/files/list/components/fileUploader/style.css: -------------------------------------------------------------------------------- 1 | .dropzone { 2 | margin: 20px; 3 | opacity: 1; 4 | transition: opacity .2s ease-in-out; 5 | } 6 | .uploading { 7 | opacity: 0; 8 | } 9 | .dropzoneEmpty { 10 | color: #a1a1a1; 11 | font-size: 16px; 12 | border: 2px dashed rgba(0,0,0,0.1); 13 | padding: 80px 0; 14 | text-align: center; 15 | } 16 | .dropzoneActive { 17 | background-color: rgba(18,179,117, 0.4); 18 | } 19 | .dropzoneReject { 20 | background-color: rgba(244,67,54,0.8); 21 | } 22 | .dropzoneReject .list, 23 | .dropzoneActive .list { 24 | opacity: 0.3 25 | } 26 | .dropzoneActive .button { 27 | opacity: 0; 28 | } 29 | .button { 30 | margin-left: 10px !important; 31 | } 32 | -------------------------------------------------------------------------------- /src/admin/client/modules/settings/themeSettings/index.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { fetchThemeSettings, updateThemeSettings } from '../actions' 3 | import Form from './components/form' 4 | 5 | const mapStateToProps = (state) => { 6 | return { 7 | initialValues: state.settings.themeSettings, 8 | settingsSchema: state.settings.themeSettingsSchema 9 | } 10 | } 11 | 12 | const mapDispatchToProps = (dispatch) => { 13 | return { 14 | onLoad: () => { 15 | dispatch(fetchThemeSettings()) 16 | }, 17 | onSubmit: (values) => { 18 | dispatch(updateThemeSettings(values)); 19 | } 20 | } 21 | } 22 | 23 | export default connect(mapStateToProps, mapDispatchToProps)(Form); 24 | -------------------------------------------------------------------------------- /src/store/shared/components/stepPayment/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {connect} from 'react-redux' 3 | import {withRouter} from 'react-router' 4 | import {checkout} from '../../actions' 5 | import Form from './form' 6 | 7 | const mapStateToProps = (state, ownProps) => { 8 | return { 9 | cart: state.app.cart, 10 | settings: state.app.settings, 11 | processingCheckout: state.app.processingCheckout 12 | } 13 | } 14 | 15 | const mapDispatchToProps = (dispatch, ownProps) => { 16 | return { 17 | finishCheckout: () => { 18 | dispatch(checkout(null, ownProps.history)); 19 | } 20 | } 21 | } 22 | 23 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(Form)); 24 | -------------------------------------------------------------------------------- /theme/src/components/pageList/item.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { NavLink } from 'react-router-dom' 3 | import { themeSettings, text } from '../../lib/settings' 4 | 5 | const pad = number => number < 10 ? ('0' + number) : number; 6 | const formatDate = date => `${pad(date.getDate())}.${pad(date.getMonth() + 1)}.${date.getFullYear()}`; 7 | 8 | const PageListItem = ({page}) => ( 9 |
10 |

{page.meta_title}

11 |
12 | {formatDate(new Date(page.date_created))} 13 |
14 |
15 | {page.meta_description} 16 |
17 |
18 | ) 19 | 20 | export default PageListItem 21 | -------------------------------------------------------------------------------- /src/admin/client/modules/products/edit/attributes/components/style.css: -------------------------------------------------------------------------------- 1 | .button { 2 | margin-left: 12px; 3 | } 4 | 5 | .innerBox { 6 | padding: 30px; 7 | } 8 | 9 | .childrenBox { 10 | padding: 0 30px 30px 30px; 11 | } 12 | 13 | .error { 14 | color: rgb(244, 67, 54); 15 | } 16 | 17 | .head { 18 | background-color: rgba(0, 0, 0, 0.05); 19 | color: #a1a1a1; 20 | padding: 18px 0 18px 30px !important; 21 | } 22 | 23 | .input { 24 | width: 100%; 25 | margin: 0; 26 | padding: 0; 27 | border: none; 28 | outline: none; 29 | background-color: transparent; 30 | font-size: 15px; 31 | height: 60px; 32 | text-indent: 30px; 33 | } 34 | 35 | .input:hover, 36 | .input:focus { 37 | background-color: rgba(0, 0, 0, 0.05); 38 | } 39 | -------------------------------------------------------------------------------- /src/admin/client/modules/products/edit/attributes/index.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import { withRouter } from 'react-router' 3 | import { updateProduct } from '../../actions' 4 | import ProductAttributesForm from './components/form' 5 | 6 | const mapStateToProps = (state, ownProps) => { 7 | return { 8 | initialValues: state.products.editProduct 9 | } 10 | } 11 | 12 | const mapDispatchToProps = (dispatch, ownProps) => { 13 | return { 14 | onSubmit: (values) => { 15 | dispatch(updateProduct({ 16 | id: values.id, 17 | attributes: values.attributes 18 | })); 19 | } 20 | } 21 | } 22 | 23 | export default withRouter(connect(mapStateToProps, mapDispatchToProps)(ProductAttributesForm)); 24 | -------------------------------------------------------------------------------- /theme/src/containers/shared.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { themeSettings, text } from '../lib/settings' 3 | import Header from '../components/header' 4 | import Footer from '../components/footer' 5 | const Fragment = React.Fragment; 6 | 7 | const SharedContainer = (props) => { 8 | const {currentPage, settings} = props.state; 9 | let hideFooter = (currentPage.path === '/checkout-success' || currentPage.path === '/checkout') && themeSettings.hide_footer_on_checkout === true; 10 | 11 | return ( 12 | 13 |
14 | {props.children} 15 | {!hideFooter && 16 |