From 4829e9e5cd615aab0ea1817db74bca929d5847f9 Mon Sep 17 00:00:00 2001 From: Anthony Talarico Date: Tue, 15 Oct 2019 20:58:18 -0400 Subject: [PATCH] adding ajax actions for updating and retrieving theme options from the database --- admin/defines.php | 1 + admin/dist/js/glm-options.js | 8 ++-- admin/glm-theme-options.php | 52 ++++++++++++---------- admin/js/components/Sidebar.js | 4 +- admin/js/components/fields/Toggle.js | 1 - admin/js/store/index.js | 10 +++-- admin/js/store/reducers/optionsReducers.js | 34 +++++++++++--- admin/utility.php | 2 +- 8 files changed, 71 insertions(+), 41 deletions(-) diff --git a/admin/defines.php b/admin/defines.php index dafb25e..ec00506 100644 --- a/admin/defines.php +++ b/admin/defines.php @@ -3,6 +3,7 @@ namespace Glm\GlmThemeOptions\Defines; if(!class_exists('Defines')){ class Defines{ public static $glm_options_url; + public static $glm_theme_options = "glm_theme_options"; function __construct(){ $this::$glm_options_url = get_template_directory_uri().'/admin'; } diff --git a/admin/dist/js/glm-options.js b/admin/dist/js/glm-options.js index 8448dff..a76efd9 100644 --- a/admin/dist/js/glm-options.js +++ b/admin/dist/js/glm-options.js @@ -164,7 +164,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var reac /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var _manifests__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../manifests */ \"./js/manifests/index.js\");\n/* harmony import */ var _styles_Sidebar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../styles/Sidebar */ \"./js/styles/Sidebar.js\");\n/* harmony import */ var _assets_images_glm_logo_png__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../assets/images/glm-logo.png */ \"../assets/images/glm-logo.png\");\n/* harmony import */ var _assets_images_glm_logo_png__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_assets_images_glm_logo_png__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\n\nvar Sidebar = function Sidebar(props) {\n var mounted = react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"];\n var updated = react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"];\n var firstRender = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(true);\n mounted(function () {\n return function cleanup() {// clean up logic\n };\n }, []);\n updated(function () {\n if (firstRender.current) {\n firstRender.current = false;\n return;\n }\n });\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n id: \"glmto-sidebar\",\n style: _styles_Sidebar__WEBPACK_IMPORTED_MODULE_4__[\"default\"].container\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n id: \"glmto-sidebar-logo\",\n style: _styles_Sidebar__WEBPACK_IMPORTED_MODULE_4__[\"default\"].logo\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"img\", {\n src: _assets_images_glm_logo_png__WEBPACK_IMPORTED_MODULE_5___default.a,\n alt: \"\"\n })), _manifests__WEBPACK_IMPORTED_MODULE_3__[\"options\"].map(function (option, index) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"NavLink\"], {\n key: \"sidebar-\".concat(option.label),\n to: {\n pathname: \"/dashboard\",\n state: {\n option: option\n }\n },\n style: {\n display: \"block\",\n padding: \"8px\"\n }\n }, \" \", option.label, \" \");\n }));\n};\n\nvar mapStatetoProps = function mapStatetoProps(state) {\n return state;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(mapStatetoProps, null)(Sidebar));\n\n//# sourceURL=webpack:///./js/components/Sidebar.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ \"./node_modules/react-router-dom/esm/react-router-dom.js\");\n/* harmony import */ var _manifests__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../manifests */ \"./js/manifests/index.js\");\n/* harmony import */ var _styles_Sidebar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../styles/Sidebar */ \"./js/styles/Sidebar.js\");\n/* harmony import */ var _assets_images_glm_logo_png__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../assets/images/glm-logo.png */ \"../assets/images/glm-logo.png\");\n/* harmony import */ var _assets_images_glm_logo_png__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_assets_images_glm_logo_png__WEBPACK_IMPORTED_MODULE_5__);\n\n\n\n\n\n\n\nvar Sidebar = function Sidebar(props) {\n var mounted = react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"];\n var updated = react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"];\n var firstRender = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(true);\n mounted(function () {\n return function cleanup() {// clean up logic\n };\n }, []);\n updated(function () {\n if (firstRender.current) {\n firstRender.current = false;\n return;\n }\n });\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n id: \"glmto-sidebar\",\n style: _styles_Sidebar__WEBPACK_IMPORTED_MODULE_4__[\"default\"].container\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n id: \"glmto-sidebar-logo\",\n style: _styles_Sidebar__WEBPACK_IMPORTED_MODULE_4__[\"default\"].logo\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"img\", {\n src: _assets_images_glm_logo_png__WEBPACK_IMPORTED_MODULE_5___default.a,\n alt: \"\"\n })), _manifests__WEBPACK_IMPORTED_MODULE_3__[\"options\"].map(function (option, index) {\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react_router_dom__WEBPACK_IMPORTED_MODULE_2__[\"Link\"], {\n key: \"sidebar-\".concat(option.label),\n to: {\n pathname: \"/dashboard\",\n state: {\n option: option\n }\n },\n style: {\n display: \"block\",\n padding: \"8px\"\n }\n }, \" \", option.label, \" \");\n }));\n};\n\nvar mapStatetoProps = function mapStatetoProps(state) {\n return state;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(mapStatetoProps, null)(Sidebar));\n\n//# sourceURL=webpack:///./js/components/Sidebar.js?"); /***/ }), @@ -236,7 +236,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var reac /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var _store_actionCreators_system__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../store/actionCreators/system */ \"./js/store/actionCreators/system.js\");\n/* harmony import */ var _store_actionCreators_themeOptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../store/actionCreators/themeOptions */ \"./js/store/actionCreators/themeOptions.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n\n\n\n\nvar Toggle = function Toggle(props) {\n var mounted = react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"];\n var updated = react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"];\n var firstRender = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(true);\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])({\n checked: props.themeOptions.sticky_header\n }),\n _useState2 = _slicedToArray(_useState, 2),\n toggleState = _useState2[0],\n updateToggleState = _useState2[1];\n\n mounted(function () {\n return function cleanup() {// clean up logic\n };\n }, []);\n updated(function () {\n if (firstRender.current) {\n firstRender.current = false;\n return;\n }\n\n console.log(props);\n return function cleanup() {};\n });\n\n var handleChange = function handleChange(e) {\n var target = event.target;\n var value = target.type === 'checkbox' ? target.checked : target.value;\n updateToggleState(_objectSpread({}, toggleState, {\n checked: value\n }));\n props.updateThemeOptions({\n state: _defineProperty({}, props.option, value)\n });\n }; // this.props.updateGameData({scrap: 1000, robots: 5}).then(console.log(this.props.gameDataReducer));\n\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"switch small\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", {\n className: \"switch-input\",\n id: props.option,\n type: \"checkbox\",\n name: props.option,\n onChange: handleChange,\n checked: props.themeOptions.sticky_header\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n className: \"switch-paddle\",\n htmlFor: props.option\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"switch-active\",\n \"aria-hidden\": \"true\"\n }, \"On\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"switch-inactive\",\n \"aria-hidden\": \"true\"\n }, \"Off\"))));\n};\n\nvar mapDispatchToProps = {\n updateThemeOptions: _store_actionCreators_themeOptions__WEBPACK_IMPORTED_MODULE_3__[\"updateThemeOptions\"],\n toggleDrawerState: _store_actionCreators_system__WEBPACK_IMPORTED_MODULE_2__[\"toggleDrawerState\"]\n};\n\nvar mapStateToProps = function mapStateToProps(state) {\n return state;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(mapStateToProps, mapDispatchToProps)(Toggle));\n\n//# sourceURL=webpack:///./js/components/fields/Toggle.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ \"./node_modules/react-redux/es/index.js\");\n/* harmony import */ var _store_actionCreators_system__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../store/actionCreators/system */ \"./js/store/actionCreators/system.js\");\n/* harmony import */ var _store_actionCreators_themeOptions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../store/actionCreators/themeOptions */ \"./js/store/actionCreators/themeOptions.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\n\n\n\n\n\nvar Toggle = function Toggle(props) {\n var mounted = react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"];\n var updated = react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"];\n var firstRender = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(true);\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])({\n checked: props.themeOptions.sticky_header\n }),\n _useState2 = _slicedToArray(_useState, 2),\n toggleState = _useState2[0],\n updateToggleState = _useState2[1];\n\n mounted(function () {\n return function cleanup() {// clean up logic\n };\n }, []);\n updated(function () {\n if (firstRender.current) {\n firstRender.current = false;\n return;\n }\n\n return function cleanup() {};\n });\n\n var handleChange = function handleChange(e) {\n var target = event.target;\n var value = target.type === 'checkbox' ? target.checked : target.value;\n updateToggleState(_objectSpread({}, toggleState, {\n checked: value\n }));\n props.updateThemeOptions({\n state: _defineProperty({}, props.option, value)\n });\n }; // this.props.updateGameData({scrap: 1000, robots: 5}).then(console.log(this.props.gameDataReducer));\n\n\n return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"switch small\"\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", {\n className: \"switch-input\",\n id: props.option,\n type: \"checkbox\",\n name: props.option,\n onChange: handleChange,\n checked: props.themeOptions.sticky_header\n }), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n className: \"switch-paddle\",\n htmlFor: props.option\n }, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"switch-active\",\n \"aria-hidden\": \"true\"\n }, \"On\"), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"switch-inactive\",\n \"aria-hidden\": \"true\"\n }, \"Off\"))));\n};\n\nvar mapDispatchToProps = {\n updateThemeOptions: _store_actionCreators_themeOptions__WEBPACK_IMPORTED_MODULE_3__[\"updateThemeOptions\"],\n toggleDrawerState: _store_actionCreators_system__WEBPACK_IMPORTED_MODULE_2__[\"toggleDrawerState\"]\n};\n\nvar mapStateToProps = function mapStateToProps(state) {\n return state;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Object(react_redux__WEBPACK_IMPORTED_MODULE_1__[\"connect\"])(mapStateToProps, mapDispatchToProps)(Toggle));\n\n//# sourceURL=webpack:///./js/components/fields/Toggle.js?"); /***/ }), @@ -380,7 +380,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"store\", function() { return store; });\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! redux */ \"./node_modules/redux/es/redux.js\");\n/* harmony import */ var redux_thunk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux-thunk */ \"./node_modules/redux-thunk/es/index.js\");\n/* harmony import */ var _reducers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reducers */ \"./js/store/reducers/index.js\");\n/* harmony import */ var _saveState__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../saveState */ \"./js/saveState.js\");\n/* harmony import */ var lodash_throttle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash/throttle */ \"./node_modules/lodash/throttle.js\");\n/* harmony import */ var lodash_throttle__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_throttle__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _utility__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utility */ \"./js/utility.js\");\n\n\n\n\n\n\nvar store = Object(redux__WEBPACK_IMPORTED_MODULE_0__[\"createStore\"])(_reducers__WEBPACK_IMPORTED_MODULE_2__[\"rootReducer\"], Object(redux__WEBPACK_IMPORTED_MODULE_0__[\"applyMiddleware\"])(redux_thunk__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\nstore.subscribe(lodash_throttle__WEBPACK_IMPORTED_MODULE_4___default()(function () {\n var state = Object(_saveState__WEBPACK_IMPORTED_MODULE_3__[\"serializeState\"])(store.getState().themeOptions);\n console.log(_utility__WEBPACK_IMPORTED_MODULE_5__[\"ajax_url\"]);\n var data = {\n action: \"glm_theme_options\",\n theme_options: state\n };\n $.ajax({\n type: \"POST\",\n url: _utility__WEBPACK_IMPORTED_MODULE_5__[\"ajax_url\"],\n data: data,\n success: function success() {}\n });\n}, 1000));\n\n//# sourceURL=webpack:///./js/store/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"store\", function() { return store; });\n/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! redux */ \"./node_modules/redux/es/redux.js\");\n/* harmony import */ var redux_thunk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! redux-thunk */ \"./node_modules/redux-thunk/es/index.js\");\n/* harmony import */ var _reducers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./reducers */ \"./js/store/reducers/index.js\");\n/* harmony import */ var _saveState__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../saveState */ \"./js/saveState.js\");\n/* harmony import */ var lodash_throttle__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash/throttle */ \"./node_modules/lodash/throttle.js\");\n/* harmony import */ var lodash_throttle__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_throttle__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _utility__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utility */ \"./js/utility.js\");\n\n\n\n\n\n\nvar store = Object(redux__WEBPACK_IMPORTED_MODULE_0__[\"createStore\"])(_reducers__WEBPACK_IMPORTED_MODULE_2__[\"rootReducer\"], Object(redux__WEBPACK_IMPORTED_MODULE_0__[\"applyMiddleware\"])(redux_thunk__WEBPACK_IMPORTED_MODULE_1__[\"default\"]));\nstore.subscribe(lodash_throttle__WEBPACK_IMPORTED_MODULE_4___default()(function () {\n var state = Object(_saveState__WEBPACK_IMPORTED_MODULE_3__[\"serializeState\"])(store.getState().themeOptions);\n console.log(state);\n var data = {\n action: \"glm_update_theme_options\",\n theme_options: state\n };\n $.ajax({\n type: \"POST\",\n url: _utility__WEBPACK_IMPORTED_MODULE_5__[\"ajax_url\"],\n data: data,\n success: function success() {\n console.log(\"done\");\n }\n });\n}, 1000));\n\n//# sourceURL=webpack:///./js/store/index.js?"); /***/ }), @@ -404,7 +404,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"themeOptionsReducer\", function() { return themeOptionsReducer; });\n/* harmony import */ var _actionTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../actionTypes */ \"./js/store/actionTypes.js\");\n/* harmony import */ var _actionCreators__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../actionCreators */ \"./js/store/actionCreators/index.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\nvar initialThemeOptionsState = {\n sticky_header: false\n};\nvar themeOptionsReducer = function themeOptionsReducer() {\n var themeOptionsState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialThemeOptionsState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n\n switch (action.type) {\n case _actionTypes__WEBPACK_IMPORTED_MODULE_0__[\"UPDATE_THEME_OPTIONS_DATA\"]:\n console.log(action);\n return Object.assign({}, themeOptionsState, _objectSpread({}, action.state));\n }\n\n return themeOptionsState;\n};\n\n//# sourceURL=webpack:///./js/store/reducers/optionsReducers.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"themeOptionsReducer\", function() { return themeOptionsReducer; });\n/* harmony import */ var _actionTypes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../actionTypes */ \"./js/store/actionTypes.js\");\n/* harmony import */ var _utility__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utility */ \"./js/utility.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../index */ \"./js/store/index.js\");\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\n\n\nvar initialThemeOptionsState = {\n sticky_header: false\n};\n$.ajax({\n type: \"POST\",\n url: _utility__WEBPACK_IMPORTED_MODULE_1__[\"ajax_url\"],\n data: {\n action: \"glm_get_theme_options\"\n },\n success: function success(data) {\n var updatedState = JSON.parse(data);\n _index__WEBPACK_IMPORTED_MODULE_2__[\"store\"].dispatch({\n type: \"UPDATE_THEME_OPTIONS_DATA\",\n state: _objectSpread({}, initialThemeOptionsState, {}, updatedState)\n });\n },\n error: function error(_error) {\n console.log(_error); // initialThemeOptionsState \n }\n});\nvar themeOptionsReducer = function themeOptionsReducer() {\n var themeOptionsState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialThemeOptionsState;\n var action = arguments.length > 1 ? arguments[1] : undefined;\n\n switch (action.type) {\n case _actionTypes__WEBPACK_IMPORTED_MODULE_0__[\"UPDATE_THEME_OPTIONS_DATA\"]:\n return Object.assign({}, themeOptionsState, _objectSpread({}, action.state));\n }\n\n return themeOptionsState;\n};\n\n//# sourceURL=webpack:///./js/store/reducers/optionsReducers.js?"); /***/ }), diff --git a/admin/glm-theme-options.php b/admin/glm-theme-options.php index 64e7a28..6db081f 100644 --- a/admin/glm-theme-options.php +++ b/admin/glm-theme-options.php @@ -14,21 +14,26 @@ minimum PHP Version : 5.4 if ( ! defined( 'ABSPATH' ) ) { die(); } +require_once 'defines.php'; +use Glm\GlmThemeOptions\Defines; require_once 'utility.php'; -$theme_utility = new GlmThemeUtility(); + if(!class_exists('GlmThemOptions')){ class GlmThemOptions{ - + private $defines; + private $glm_theme_options; private static $instance = null; - private $theme_utility; - + private $utility; + private $log; + function __construct(){ - $this->theme_utility = new GlmThemeUtility(); + $this->utility = new GlmThemeUtility(); + $this->defines = new Glm\GlmThemeOptions\Defines\Defines(); + $this->glm_theme_options = $this->defines::$glm_theme_options; } public function get_instance(){ - $this->theme_utility::write_log(" GET INSTANCE"); if (self::$instance === null){ self::$instance = new GlmThemOptions(); }else{ @@ -37,35 +42,34 @@ if(!class_exists('GlmThemOptions')){ return self::$instance; } private function set_options(){ - $this->theme_utility::write_log(" SET OPTIONS"); - if( !get_option("glm_theme_options") ){ - $this->theme_utility::write_log(get_option("glm_theme_options") ); - update_option("glm_theme_options", ''); - }else{ - $this->theme_utility::write_log("NO NEW THEME OPTIONS"); + if( !get_option( $this->glm_theme_options ) ){ + update_option( $this->glm_theme_options, 'default options'); } } public function glm_update_theme_options() { $data = $_REQUEST['theme_options']; - $this->theme_utility::write_log($data); + if( get_option( $this->glm_theme_options ) ){ + update_option( $this->glm_theme_options , $data ); + } + // $this->utility::log( get_option($this->glm_theme_options )); + } + public function glm_get_theme_options() { + + if( get_option( $this->glm_theme_options ) ){ - // if( get_option('glm_theme_options') ){ - // $this->theme_utility::write_log("THEME OPTIONS"); - // update_option('glm_theme_options', $data ); - // }else{ - // $this->theme_utility::write_log("NO THEME OPTIONS"); - // } + $data = get_option( $this->glm_theme_options ); + echo stripslashes($data); + } + wp_die(); + // $this->utility::log( get_option($this->glm_theme_options )); } private function create_ajax_actions(){ - add_action( 'wp_ajax_glm_theme_options', array($this,'glm_update_theme_options') ); + add_action( 'wp_ajax_glm_update_theme_options', array($this,'glm_update_theme_options') ); + add_action( 'wp_ajax_glm_get_theme_options', array($this,'glm_get_theme_options') ); // add_action( 'wp_ajax_nopriv_glm_theme_options', 'glm_update_theme_options' ); - - } public function init(){ - $this->theme_utility::write_log("FIRE ME"); - require_once 'defines.php'; require_once 'enqueue.php'; require_once 'menus.php'; $this->set_options(); diff --git a/admin/js/components/Sidebar.js b/admin/js/components/Sidebar.js index 8c5632a..2f1b856 100644 --- a/admin/js/components/Sidebar.js +++ b/admin/js/components/Sidebar.js @@ -1,6 +1,6 @@ import React, { useState, useEffect, useRef } from 'react'; import { connect } from 'react-redux'; -import { NavLink } from 'react-router-dom'; +import { Link } from 'react-router-dom'; import * as SidebarItems from '../manifests'; import SidebarStyles from '../styles/Sidebar'; import logo from '../../../assets/images/glm-logo.png'; @@ -28,7 +28,7 @@ const Sidebar = (props) => { {SidebarItems.options.map( (option,index) => { - return {option.label} + return {option.label} })} ) diff --git a/admin/js/components/fields/Toggle.js b/admin/js/components/fields/Toggle.js index c289464..45a9fe1 100644 --- a/admin/js/components/fields/Toggle.js +++ b/admin/js/components/fields/Toggle.js @@ -22,7 +22,6 @@ const Toggle = (props) => { firstRender.current = false; return; } - console.log(props) return function cleanup(){ } diff --git a/admin/js/store/index.js b/admin/js/store/index.js index 4e71b9f..4289aa4 100644 --- a/admin/js/store/index.js +++ b/admin/js/store/index.js @@ -9,15 +9,19 @@ export const store = createStore(rootReducer, applyMiddleware(thunkMiddleware)); store.subscribe(throttle(()=>{ const state = serializeState(store.getState().themeOptions); - console.log(ajax_url); + console.log(state) const data = { - action: "glm_theme_options", + action: "glm_update_theme_options", theme_options : state } + $.ajax({ type: "POST", url: ajax_url, data: data, - success: function(){} + success: function(){ + console.log("done") + } }); + }, 1000)); \ No newline at end of file diff --git a/admin/js/store/reducers/optionsReducers.js b/admin/js/store/reducers/optionsReducers.js index b105a7e..faa817a 100644 --- a/admin/js/store/reducers/optionsReducers.js +++ b/admin/js/store/reducers/optionsReducers.js @@ -1,14 +1,36 @@ import { UPDATE_THEME_OPTIONS_DATA } from '../actionTypes'; -import { updateStore } from '../actionCreators'; +import { ajax_url } from '../../utility'; +import { store } from '../index'; -const initialThemeOptionsState = { - sticky_header : false -} +let initialThemeOptionsState = { + sticky_header: false +}; + +$.ajax({ + type: "POST", + url: ajax_url, + data: {action : "glm_get_theme_options"}, + success: function(data){ + + const updatedState = JSON.parse(data); + store.dispatch({ + type: "UPDATE_THEME_OPTIONS_DATA", + state: { + ...initialThemeOptionsState, + ...updatedState + } + }); + }, + error : function(error){ + console.log(error); + // initialThemeOptionsState + } + +}); export const themeOptionsReducer = (themeOptionsState = initialThemeOptionsState, action) => { switch(action.type){ - case UPDATE_THEME_OPTIONS_DATA: - console.log(action); + case UPDATE_THEME_OPTIONS_DATA : return Object.assign({}, themeOptionsState,{ ...action.state }) diff --git a/admin/utility.php b/admin/utility.php index ca3da0d..073fdc8 100644 --- a/admin/utility.php +++ b/admin/utility.php @@ -5,7 +5,7 @@ if(!class_exists('GlmThemeUtility')){ function __construct(){ } - public static function write_log($log){ + public static function log($log){ if ( true === WP_DEBUG ) { if ( is_array( $log ) || is_object( $log ) ) { error_log( print_r( $log, true ) ); -- 2.17.1