api posts post worked
This commit is contained in:
parent
240684bbfb
commit
2d122560d8
|
|
@ -0,0 +1,100 @@
|
|||
<?php namespace AhmadFatoni\ApiGenerator\Controllers\API;
|
||||
|
||||
use Cms\Classes\Controller;
|
||||
use BackendMenu;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use AhmadFatoni\ApiGenerator\Helpers\Helpers;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use RainLab\Blog\Models\Category;
|
||||
class categoriesController extends Controller
|
||||
{
|
||||
protected $Category;
|
||||
|
||||
protected $helpers;
|
||||
|
||||
public function __construct(Category $Category, Helpers $helpers)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->Category = $Category;
|
||||
$this->helpers = $helpers;
|
||||
}
|
||||
|
||||
public function index(){
|
||||
// $data = $this->Post::with(['translations:locale,model_id,attribute_data','categories'])->get();
|
||||
// $data = $this->Category->all()->toArray();
|
||||
$data = $this->Category::with(['translations:locale,model_id,attribute_data','posts'])->get();
|
||||
|
||||
return $this->helpers->apiArrayResponseBuilder(200, 'success', $data);
|
||||
}
|
||||
|
||||
public function show($id){
|
||||
// $data = $this->Post::with(['translations:locale,model_id,attribute_data','categories'])->get();
|
||||
$data = $this->Category::with(['translations:locale,model_id,attribute_data','posts.featured_images'])->find($id);
|
||||
|
||||
if ($data){
|
||||
return $this->helpers->apiArrayResponseBuilder(200, 'success', [$data]);
|
||||
} else {
|
||||
$this->helpers->apiArrayResponseBuilder(404, 'not found', ['error' => 'Resource id=' . $id . ' could not be found']);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function store(Request $request){
|
||||
|
||||
$arr = $request->all();
|
||||
|
||||
while ( $data = current($arr)) {
|
||||
$this->Category->{key($arr)} = $data;
|
||||
next($arr);
|
||||
}
|
||||
|
||||
$validation = Validator::make($request->all(), $this->Category->rules);
|
||||
|
||||
if( $validation->passes() ){
|
||||
$this->Category->save();
|
||||
return $this->helpers->apiArrayResponseBuilder(201, 'created', ['id' => $this->Category->id]);
|
||||
}else{
|
||||
return $this->helpers->apiArrayResponseBuilder(400, 'fail', $validation->errors() );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function update($id, Request $request){
|
||||
|
||||
$status = $this->Category->where('id',$id)->update($data);
|
||||
|
||||
if( $status ){
|
||||
|
||||
return $this->helpers->apiArrayResponseBuilder(200, 'success', 'Data has been updated successfully.');
|
||||
|
||||
}else{
|
||||
|
||||
return $this->helpers->apiArrayResponseBuilder(400, 'bad request', 'Error, data failed to update.');
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public function delete($id){
|
||||
|
||||
$this->Category->where('id',$id)->delete();
|
||||
|
||||
return $this->helpers->apiArrayResponseBuilder(200, 'success', 'Data has been deleted successfully.');
|
||||
}
|
||||
|
||||
public function destroy($id){
|
||||
|
||||
$this->Category->where('id',$id)->delete();
|
||||
|
||||
return $this->helpers->apiArrayResponseBuilder(200, 'success', 'Data has been deleted successfully.');
|
||||
}
|
||||
|
||||
|
||||
public static function getAfterFilters() {return [];}
|
||||
public static function getBeforeFilters() {return [];}
|
||||
public static function getMiddleware() {return [];}
|
||||
public function callAction($method, $parameters=false) {
|
||||
return call_user_func_array(array($this, $method), $parameters);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
<?php namespace AhmadFatoni\ApiGenerator\Controllers\API;
|
||||
|
||||
use Cms\Classes\Controller;
|
||||
use BackendMenu;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use AhmadFatoni\ApiGenerator\Helpers\Helpers;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use RainLab\Blog\Models\Post;
|
||||
class postsController extends Controller
|
||||
{
|
||||
protected $Post;
|
||||
|
||||
protected $helpers;
|
||||
|
||||
public function __construct(Post $Post, Helpers $helpers)
|
||||
{
|
||||
parent::__construct();
|
||||
$this->Post = $Post;
|
||||
$this->helpers = $helpers;
|
||||
}
|
||||
|
||||
public function index(){
|
||||
|
||||
// $data = $this->Post->all()->toArray();
|
||||
|
||||
$data = $this->Post::with(['translations:locale,model_id,attribute_data','categories','featured_images'])->get();
|
||||
|
||||
return $this->helpers->apiArrayResponseBuilder(200, 'success', $data);
|
||||
}
|
||||
|
||||
public function show($slug){
|
||||
|
||||
$data = $this->Post::where('slug', $slug)->with(['translations:locale,model_id,attribute_data','featured_images'])->get();
|
||||
|
||||
// $data = $this->Post::with(['translations:locale,model_id,attribute_data','categories'])->find($id);
|
||||
|
||||
if ($data){
|
||||
return $this->helpers->apiArrayResponseBuilder(200, 'success', [$data]);
|
||||
} else {
|
||||
$this->helpers->apiArrayResponseBuilder(404, 'not found', ['error' => 'Resource id=' . $id . ' could not be found']);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function store(Request $request){
|
||||
|
||||
$arr = $request->all();
|
||||
|
||||
while ( $data = current($arr)) {
|
||||
$this->Post->{key($arr)} = $data;
|
||||
next($arr);
|
||||
}
|
||||
|
||||
$validation = Validator::make($request->all(), $this->Post->rules);
|
||||
|
||||
if( $validation->passes() ){
|
||||
$this->Post->save();
|
||||
return $this->helpers->apiArrayResponseBuilder(201, 'created', ['id' => $this->Post->id]);
|
||||
}else{
|
||||
return $this->helpers->apiArrayResponseBuilder(400, 'fail', $validation->errors() );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function update($id, Request $request){
|
||||
|
||||
$status = $this->Post->where('id',$id)->update($data);
|
||||
|
||||
if( $status ){
|
||||
|
||||
return $this->helpers->apiArrayResponseBuilder(200, 'success', 'Data has been updated successfully.');
|
||||
|
||||
}else{
|
||||
|
||||
return $this->helpers->apiArrayResponseBuilder(400, 'bad request', 'Error, data failed to update.');
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public function delete($id){
|
||||
|
||||
$this->Post->where('id',$id)->delete();
|
||||
|
||||
return $this->helpers->apiArrayResponseBuilder(200, 'success', 'Data has been deleted successfully.');
|
||||
}
|
||||
|
||||
public function destroy($id){
|
||||
|
||||
$this->Post->where('id',$id)->delete();
|
||||
|
||||
return $this->helpers->apiArrayResponseBuilder(200, 'success', 'Data has been deleted successfully.');
|
||||
}
|
||||
|
||||
|
||||
public static function getAfterFilters() {return [];}
|
||||
public static function getBeforeFilters() {return [];}
|
||||
public static function getMiddleware() {return [];}
|
||||
public function callAction($method, $parameters=false) {
|
||||
return call_user_func_array(array($this, $method), $parameters);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -8,3 +8,9 @@ Route::resource('api/v1/reestr', 'AhmadFatoni\ApiGenerator\Controllers\API\reest
|
|||
Route::get('api/v1/reestr/{id}/delete', ['as' => 'api/v1/reestr.delete', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\API\reestrController@destroy']);
|
||||
Route::resource('api/v1/slider', 'AhmadFatoni\ApiGenerator\Controllers\API\sliderController', ['except' => ['destroy', 'create', 'edit']]);
|
||||
Route::get('api/v1/slider/{id}/delete', ['as' => 'api/v1/slider.delete', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\API\sliderController@destroy']);
|
||||
Route::resource('api/v1/posts', 'AhmadFatoni\ApiGenerator\Controllers\API\postsController', ['except' => ['destroy', 'create', 'edit','show']]);
|
||||
Route::get('api/v1/posts/{slug}', ['as' => 'api/v1/posts.show', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\API\postsController@show']);
|
||||
Route::get('api/v1/posts/{id}/delete', ['as' => 'api/v1/posts.delete', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\API\postsController@destroy']);
|
||||
Route::resource('api/v1/categories', 'AhmadFatoni\ApiGenerator\Controllers\API\categoriesController', ['except' => ['destroy', 'create', 'edit','show']]);
|
||||
Route::get('api/v1/categories/{id}', ['as' => 'api/v1/categories.show', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\API\categoriesController@show']);
|
||||
Route::get('api/v1/categories/{id}/delete', ['as' => 'api/v1/categories.delete', 'uses' => 'AhmadFatoni\ApiGenerator\Controllers\API\categoriesController@destroy']);
|
||||
|
|
@ -16,6 +16,7 @@
|
|||
"react-router-dom": "^5.3.0",
|
||||
"react-scripts": "4.0.3",
|
||||
"redux": "^4.1.2",
|
||||
"source-map-loader": "^3.0.1",
|
||||
"uuid": "^8.3.2",
|
||||
"uuidv4": "^6.2.12",
|
||||
"web-vitals": "^1.1.2"
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
"use strict";(self.webpackChunkreact_etalon=self.webpackChunkreact_etalon||[]).push([[791],{3791:function(e,t,n){n.r(t),n.d(t,{getCLS:function(){return v},getFCP:function(){return S},getFID:function(){return k},getLCP:function(){return F},getTTFB:function(){return C}});var i,a,r,o,u=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:"v1-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},c=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},f=function(e,t){var n=function n(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(e(i),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},s=function(e){addEventListener("pageshow",(function(t){t.persisted&&e(t)}),!0)},m="function"==typeof WeakSet?new WeakSet:new Set,p=function(e,t,n){var i;return function(){t.value>=0&&(n||m.has(t)||"hidden"===document.visibilityState)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},v=function(e,t){var n,i=u("CLS",0),a=function(e){e.hadRecentInput||(i.value+=e.value,i.entries.push(e),n())},r=c("layout-shift",a);r&&(n=p(e,i,t),f((function(){r.takeRecords().map(a),n()})),s((function(){i=u("CLS",0),n=p(e,i,t)})))},d=-1,l=function(){return"hidden"===document.visibilityState?0:1/0},h=function(){f((function(e){var t=e.timeStamp;d=t}),!0)},g=function(){return d<0&&(d=l(),h(),s((function(){setTimeout((function(){d=l(),h()}),0)}))),{get timeStamp(){return d}}},S=function(e,t){var n,i=g(),a=u("FCP"),r=function(e){"first-contentful-paint"===e.name&&(f&&f.disconnect(),e.startTime<i.timeStamp&&(a.value=e.startTime,a.entries.push(e),m.add(a),n()))},o=performance.getEntriesByName("first-contentful-paint")[0],f=o?null:c("paint",r);(o||f)&&(n=p(e,a,t),o&&r(o),s((function(i){a=u("FCP"),n=p(e,a,t),requestAnimationFrame((function(){requestAnimationFrame((function(){a.value=performance.now()-i.timeStamp,m.add(a),n()}))}))})))},y={passive:!0,capture:!0},E=new Date,w=function(e,t){i||(i=t,a=e,r=new Date,b(removeEventListener),L())},L=function(){if(a>=0&&a<r-E){var e={entryType:"first-input",name:i.type,target:i.target,cancelable:i.cancelable,startTime:i.timeStamp,processingStart:i.timeStamp+a};o.forEach((function(t){t(e)})),o=[]}},T=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){w(e,t),a()},i=function(){a()},a=function(){removeEventListener("pointerup",n,y),removeEventListener("pointercancel",i,y)};addEventListener("pointerup",n,y),addEventListener("pointercancel",i,y)}(t,e):w(t,e)}},b=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,T,y)}))},k=function(e,t){var n,r=g(),v=u("FID"),d=function(e){e.startTime<r.timeStamp&&(v.value=e.processingStart-e.startTime,v.entries.push(e),m.add(v),n())},l=c("first-input",d);n=p(e,v,t),l&&f((function(){l.takeRecords().map(d),l.disconnect()}),!0),l&&s((function(){var r;v=u("FID"),n=p(e,v,t),o=[],a=-1,i=null,b(addEventListener),r=d,o.push(r),L()}))},F=function(e,t){var n,i=g(),a=u("LCP"),r=function(e){var t=e.startTime;t<i.timeStamp&&(a.value=t,a.entries.push(e)),n()},o=c("largest-contentful-paint",r);if(o){n=p(e,a,t);var v=function(){m.has(a)||(o.takeRecords().map(r),o.disconnect(),m.add(a),n())};["keydown","click"].forEach((function(e){addEventListener(e,v,{once:!0,capture:!0})})),f(v,!0),s((function(i){a=u("LCP"),n=p(e,a,t),requestAnimationFrame((function(){requestAnimationFrame((function(){a.value=performance.now()-i.timeStamp,m.add(a),n()}))}))}))}},C=function(e){var t,n=u("TTFB");t=function(){try{var t=performance.getEntriesByType("navigation")[0]||function(){var e=performance.timing,t={entryType:"navigation",startTime:0};for(var n in e)"navigationStart"!==n&&"toJSON"!==n&&(t[n]=Math.max(e[n]-e.navigationStart,0));return t}();if(n.value=n.delta=t.responseStart,n.value<0)return;n.entries=[t],e(n)}catch(e){}},"complete"===document.readyState?setTimeout(t,0):addEventListener("pageshow",t)}}}]);
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<!-- <meta charset="utf-8" />
|
||||
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
|
|
@ -15,12 +15,12 @@
|
|||
href="https://fonts.googleapis.com/css2?family=Open+Sans&display=swap"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" /> -->
|
||||
<!--
|
||||
manifest.json provides metadata used when your web app is installed on a
|
||||
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||
-->
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||
<!-- <link rel="manifest" href="%PUBLIC_URL%/manifest.json" /> -->
|
||||
<!--
|
||||
Notice the use of %PUBLIC_URL% in the tags above.
|
||||
It will be replaced with the URL of the `public` folder during the build.
|
||||
|
|
@ -45,6 +45,6 @@
|
|||
To begin the development, run `npm start` or `yarn start`.
|
||||
To create a production bundle, use `npm run build` or `yarn build`.
|
||||
-->
|
||||
<script src="./bundle.js"></script>
|
||||
<script src="/bundle.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
"use strict";
|
||||
/*
|
||||
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
|
||||
* This devtool is neither made for production nor for readable output files.
|
||||
* It uses "eval()" calls to create a separate source file in the browser devtools.
|
||||
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
||||
* or disable the default devtool with "devtool: false".
|
||||
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
||||
*/
|
||||
(self["webpackChunkreact_etalon"] = self["webpackChunkreact_etalon"] || []).push([["node_modules_web-vitals_dist_web-vitals_js"],{
|
||||
|
||||
/***/ "./node_modules/web-vitals/dist/web-vitals.js":
|
||||
/*!****************************************************!*\
|
||||
!*** ./node_modules/web-vitals/dist/web-vitals.js ***!
|
||||
\****************************************************/
|
||||
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getCLS\": function() { return /* binding */ s; },\n/* harmony export */ \"getFCP\": function() { return /* binding */ l; },\n/* harmony export */ \"getFID\": function() { return /* binding */ L; },\n/* harmony export */ \"getLCP\": function() { return /* binding */ T; },\n/* harmony export */ \"getTTFB\": function() { return /* binding */ b; }\n/* harmony export */ });\nvar e,t,n,i,a=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:\"v1-\".concat(Date.now(),\"-\").concat(Math.floor(8999999999999*Math.random())+1e12)}},r=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if(\"first-input\"===e&&!(\"PerformanceEventTiming\"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},o=function(e,t){var n=function n(i){\"pagehide\"!==i.type&&\"hidden\"!==document.visibilityState||(e(i),t&&(removeEventListener(\"visibilitychange\",n,!0),removeEventListener(\"pagehide\",n,!0)))};addEventListener(\"visibilitychange\",n,!0),addEventListener(\"pagehide\",n,!0)},c=function(e){addEventListener(\"pageshow\",(function(t){t.persisted&&e(t)}),!0)},u=\"function\"==typeof WeakSet?new WeakSet:new Set,f=function(e,t,n){var i;return function(){t.value>=0&&(n||u.has(t)||\"hidden\"===document.visibilityState)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},s=function(e,t){var n,i=a(\"CLS\",0),u=function(e){e.hadRecentInput||(i.value+=e.value,i.entries.push(e),n())},s=r(\"layout-shift\",u);s&&(n=f(e,i,t),o((function(){s.takeRecords().map(u),n()})),c((function(){i=a(\"CLS\",0),n=f(e,i,t)})))},m=-1,p=function(){return\"hidden\"===document.visibilityState?0:1/0},v=function(){o((function(e){var t=e.timeStamp;m=t}),!0)},d=function(){return m<0&&(m=p(),v(),c((function(){setTimeout((function(){m=p(),v()}),0)}))),{get timeStamp(){return m}}},l=function(e,t){var n,i=d(),o=a(\"FCP\"),s=function(e){\"first-contentful-paint\"===e.name&&(p&&p.disconnect(),e.startTime<i.timeStamp&&(o.value=e.startTime,o.entries.push(e),u.add(o),n()))},m=performance.getEntriesByName(\"first-contentful-paint\")[0],p=m?null:r(\"paint\",s);(m||p)&&(n=f(e,o,t),m&&s(m),c((function(i){o=a(\"FCP\"),n=f(e,o,t),requestAnimationFrame((function(){requestAnimationFrame((function(){o.value=performance.now()-i.timeStamp,u.add(o),n()}))}))})))},h={passive:!0,capture:!0},S=new Date,y=function(i,a){e||(e=a,t=i,n=new Date,w(removeEventListener),g())},g=function(){if(t>=0&&t<n-S){var a={entryType:\"first-input\",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+t};i.forEach((function(e){e(a)})),i=[]}},E=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;\"pointerdown\"==e.type?function(e,t){var n=function(){y(e,t),a()},i=function(){a()},a=function(){removeEventListener(\"pointerup\",n,h),removeEventListener(\"pointercancel\",i,h)};addEventListener(\"pointerup\",n,h),addEventListener(\"pointercancel\",i,h)}(t,e):y(t,e)}},w=function(e){[\"mousedown\",\"keydown\",\"touchstart\",\"pointerdown\"].forEach((function(t){return e(t,E,h)}))},L=function(n,s){var m,p=d(),v=a(\"FID\"),l=function(e){e.startTime<p.timeStamp&&(v.value=e.processingStart-e.startTime,v.entries.push(e),u.add(v),m())},h=r(\"first-input\",l);m=f(n,v,s),h&&o((function(){h.takeRecords().map(l),h.disconnect()}),!0),h&&c((function(){var r;v=a(\"FID\"),m=f(n,v,s),i=[],t=-1,e=null,w(addEventListener),r=l,i.push(r),g()}))},T=function(e,t){var n,i=d(),s=a(\"LCP\"),m=function(e){var t=e.startTime;t<i.timeStamp&&(s.value=t,s.entries.push(e)),n()},p=r(\"largest-contentful-paint\",m);if(p){n=f(e,s,t);var v=function(){u.has(s)||(p.takeRecords().map(m),p.disconnect(),u.add(s),n())};[\"keydown\",\"click\"].forEach((function(e){addEventListener(e,v,{once:!0,capture:!0})})),o(v,!0),c((function(i){s=a(\"LCP\"),n=f(e,s,t),requestAnimationFrame((function(){requestAnimationFrame((function(){s.value=performance.now()-i.timeStamp,u.add(s),n()}))}))}))}},b=function(e){var t,n=a(\"TTFB\");t=function(){try{var t=performance.getEntriesByType(\"navigation\")[0]||function(){var e=performance.timing,t={entryType:\"navigation\",startTime:0};for(var n in e)\"navigationStart\"!==n&&\"toJSON\"!==n&&(t[n]=Math.max(e[n]-e.navigationStart,0));return t}();if(n.value=n.delta=t.responseStart,n.value<0)return;n.entries=[t],e(n)}catch(e){}},\"complete\"===document.readyState?setTimeout(t,0):addEventListener(\"pageshow\",t)};\n\n\n//# sourceURL=webpack://react-etalon/./node_modules/web-vitals/dist/web-vitals.js?");
|
||||
|
||||
/***/ })
|
||||
|
||||
}]);
|
||||
|
|
@ -37,8 +37,8 @@ function App() {
|
|||
<Route path="/news" exact>
|
||||
<News />
|
||||
</Route>
|
||||
<Route path="/news/novelty/1" exact>
|
||||
<Novelty />
|
||||
<Route path="/blog/:slug" component={Novelty} exact>
|
||||
{/* <Novelty /> */}
|
||||
</Route>
|
||||
<Route path="/etalons" exact>
|
||||
<Etalons />
|
||||
|
|
|
|||
|
|
@ -1,24 +1,52 @@
|
|||
// IMPORT MODULES
|
||||
import React, { useState, useEffect } from "react";
|
||||
import { Link } from "react-router-dom";
|
||||
|
||||
import axios from "axios";
|
||||
// IMPORT COMPONENTS
|
||||
import Breadcrumb from "../components/Global/Breadcrumb";
|
||||
|
||||
// TAB_1
|
||||
import RightArrowBlue from "../svg/rightArrowBlue.svg";
|
||||
import TabIMG1 from "../img/tabImg_1.jpg";
|
||||
import TabIMG2 from "../img/tabImg_2.jpg";
|
||||
import TabIMG3 from "../img/tabImg_3.jpg";
|
||||
import PrevButton from "../svg/buttonPrev.svg";
|
||||
import NextButton from "../svg/buttonNext.svg";
|
||||
// import RightArrowBlue from "../svg/rightArrowBlue.svg";
|
||||
// import TabIMG1 from "../img/tabImg_1.jpg";
|
||||
|
||||
const News = () => {
|
||||
useEffect(() => {
|
||||
window.scrollTo(0, 0);
|
||||
}, []);
|
||||
|
||||
class News extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
items: [],
|
||||
DataisLoaded: false
|
||||
};
|
||||
}
|
||||
// useEffect(() => {
|
||||
// window.scrollTo(0, 0);
|
||||
// }, []);
|
||||
// STATE
|
||||
const [pageIndex, setPageIndex] = useState(1);
|
||||
// const [pageIndex, setPageIndex] = useState(1);
|
||||
|
||||
componentDidMount() {
|
||||
this.getTodos();
|
||||
// console.log(this.state.items);
|
||||
}
|
||||
|
||||
async getTodos() {
|
||||
axios.get('http://127.0.0.1:8000/api/v1/categories/3')
|
||||
.then(res => {
|
||||
const items = res.data;
|
||||
this.setState({
|
||||
items: items,
|
||||
DataisLoaded: true
|
||||
});
|
||||
})
|
||||
// console.log(this.state.items);
|
||||
}
|
||||
|
||||
render() {
|
||||
const { DataisLoaded, items } = this.state;
|
||||
if (!DataisLoaded) return <div>
|
||||
<h1> Pleses wait some time.... </h1> </div> ;
|
||||
// console.log(this.state.items);
|
||||
return (
|
||||
<section className="news">
|
||||
<Breadcrumb path_1="Новости" currentUrl="./news" />;
|
||||
|
|
@ -32,233 +60,47 @@ const News = () => {
|
|||
<div className="tab-header-line"></div>
|
||||
</div>
|
||||
<div className="tab-wrapper">
|
||||
<div className="tab">
|
||||
|
||||
|
||||
|
||||
{
|
||||
items['data'][0]['posts'].map((item) => (
|
||||
|
||||
|
||||
<div className="tab" key={item.id}>
|
||||
<div className="tab-top">
|
||||
<div>
|
||||
<img src={TabIMG1} alt="Turkmen carpets" />
|
||||
<img src={ item['featured_images'][0]['path'] } alt="Turkmen carpets" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab-bottom">
|
||||
<span className="tab-date">30.05.2021</span>
|
||||
<h2 className="tab-name">
|
||||
Состоялись мероприятия, приуроченные к Празднику
|
||||
туркменского ковра
|
||||
{ item.title }
|
||||
</h2>
|
||||
<div className="tab-header-link tab-link">
|
||||
<Link to="/news/novelty/1">
|
||||
<Link to={`/blog/${item.slug}`}>
|
||||
<span>Подробнее</span>
|
||||
<div>
|
||||
<img src={RightArrowBlue} alt="RIGHTARROW" />
|
||||
<img src={ item.featured_images.path } alt="RIGHTARROW" />
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab">
|
||||
<div className="tab-top">
|
||||
<div>
|
||||
<img src={TabIMG2} alt="Turkmen students" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab-bottom">
|
||||
<span className="tab-date">25.05.2021</span>
|
||||
<h2 className="tab-name">
|
||||
Состоялись мероприятия, приуроченные к Празднику
|
||||
туркменского ковра
|
||||
</h2>
|
||||
<div className="tab-header-link tab-link">
|
||||
<Link to="/news/novelty/2">
|
||||
<span>Подробнее</span>
|
||||
<div>
|
||||
<img src={RightArrowBlue} alt="RIGHTARROW" />
|
||||
</div>
|
||||
</Link>
|
||||
|
||||
|
||||
))}
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab">
|
||||
<div className="tab-top">
|
||||
<div>
|
||||
<img src={TabIMG3} alt="Turkmen mothers" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab-bottom">
|
||||
<span className="tab-date">25.05.2021</span>
|
||||
<h2 className="tab-name">
|
||||
Родителям первых детей, рождённых в день юбилея Ашхабада,
|
||||
вручены подарки...
|
||||
</h2>
|
||||
<div className="tab-header-link tab-link">
|
||||
<Link to="/news/novelty/3">
|
||||
<span>Подробнее</span>
|
||||
<div>
|
||||
<img src={RightArrowBlue} alt="RIGHTARROW" />
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab">
|
||||
<div className="tab-top">
|
||||
<div>
|
||||
<img src={TabIMG1} alt="Turkmen carpets" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab-bottom">
|
||||
<span className="tab-date">30.05.2021</span>
|
||||
<h2 className="tab-name">
|
||||
Состоялись мероприятия, приуроченные к Празднику
|
||||
туркменского ковра
|
||||
</h2>
|
||||
<div className="tab-header-link tab-link">
|
||||
<Link to="/news/novelty/4">
|
||||
<span>Подробнее</span>
|
||||
<div>
|
||||
<img src={RightArrowBlue} alt="RIGHTARROW" />
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab">
|
||||
<div className="tab-top">
|
||||
<div>
|
||||
<img src={TabIMG2} alt="Turkmen students" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab-bottom">
|
||||
<span className="tab-date">25.05.2021</span>
|
||||
<h2 className="tab-name">
|
||||
Состоялись мероприятия, приуроченные к Празднику
|
||||
туркменского ковра
|
||||
</h2>
|
||||
<div className="tab-header-link tab-link">
|
||||
<Link to="/news/novelty/5">
|
||||
<span>Подробнее</span>
|
||||
<div>
|
||||
<img src={RightArrowBlue} alt="RIGHTARROW" />
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab">
|
||||
<div className="tab-top">
|
||||
<div>
|
||||
<img src={TabIMG3} alt="Turkmen mothers" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab-bottom">
|
||||
<span className="tab-date">25.05.2021</span>
|
||||
<h2 className="tab-name">
|
||||
Родителям первых детей, рождённых в день юбилея Ашхабада,
|
||||
вручены подарки...
|
||||
</h2>
|
||||
<div className="tab-header-link tab-link">
|
||||
<Link to="/news/novelty/6">
|
||||
<span>Подробнее</span>
|
||||
<div>
|
||||
<img src={RightArrowBlue} alt="RIGHTARROW" />
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab">
|
||||
<div className="tab-top">
|
||||
<div>
|
||||
<img src={TabIMG1} alt="Turkmen carpets" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab-bottom">
|
||||
<span className="tab-date">30.05.2021</span>
|
||||
<h2 className="tab-name">
|
||||
Состоялись мероприятия, приуроченные к Празднику
|
||||
туркменского ковра
|
||||
</h2>
|
||||
<div className="tab-header-link tab-link">
|
||||
<Link to="/news/novelty/7">
|
||||
<span>Подробнее</span>
|
||||
<div>
|
||||
<img src={RightArrowBlue} alt="RIGHTARROW" />
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab">
|
||||
<div className="tab-top">
|
||||
<div>
|
||||
<img src={TabIMG2} alt="Turkmen students" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab-bottom">
|
||||
<span className="tab-date">25.05.2021</span>
|
||||
<h2 className="tab-name">
|
||||
Состоялись мероприятия, приуроченные к Празднику
|
||||
туркменского ковра
|
||||
</h2>
|
||||
<div className="tab-header-link tab-link">
|
||||
<Link to="/news/novelty/8">
|
||||
<span>Подробнее</span>
|
||||
<div>
|
||||
<img src={RightArrowBlue} alt="RIGHTARROW" />
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab">
|
||||
<div className="tab-top">
|
||||
<div>
|
||||
<img src={TabIMG3} alt="Turkmen mothers" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="tab-bottom">
|
||||
<span className="tab-date">25.05.2021</span>
|
||||
<h2 className="tab-name">
|
||||
Родителям первых детей, рождённых в день юбилея Ашхабада,
|
||||
вручены подарки...
|
||||
</h2>
|
||||
<div className="tab-header-link tab-link">
|
||||
<Link to="/news/novelty/9">
|
||||
<span>Подробнее</span>
|
||||
<div>
|
||||
<img src={RightArrowBlue} alt="RIGHTARROW" />
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="news-page-control">
|
||||
<button
|
||||
className="prev-button"
|
||||
type="button"
|
||||
onClick={() => {
|
||||
if (pageIndex !== 1) {
|
||||
setPageIndex(pageIndex - 1);
|
||||
}
|
||||
}}
|
||||
>
|
||||
<img src={PrevButton} alt="Back" />
|
||||
</button>
|
||||
<span className="page-index">{pageIndex}</span>
|
||||
<button
|
||||
className="next-button"
|
||||
type="button"
|
||||
onClick={() => {
|
||||
setPageIndex(pageIndex + 1);
|
||||
}}
|
||||
>
|
||||
<img src={NextButton} alt="Forward" />
|
||||
</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export default News;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
// IMPORT MODULES
|
||||
import React, { useEffect } from "react";
|
||||
import axios from "axios";
|
||||
|
||||
// IMPORT COMPONENTS
|
||||
import Breadcrumb from "../components/Global/Breadcrumb";
|
||||
|
|
@ -7,77 +8,78 @@ import Breadcrumb from "../components/Global/Breadcrumb";
|
|||
// IMPORT IMAGES
|
||||
import NoveltyIMG from "../img/noveltyImg.jpg";
|
||||
|
||||
const Novelty = () => {
|
||||
useEffect(() => {
|
||||
window.scrollTo(0, 0);
|
||||
}, []);
|
||||
class Novelty extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
// let { slug } = useParams();
|
||||
// const { slug } = this.props.match.params;
|
||||
|
||||
this.state = {
|
||||
items: [],
|
||||
DataisLoaded: false
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.getTodos();
|
||||
// console.log(this.state.items);
|
||||
}
|
||||
|
||||
async getTodos() {
|
||||
axios.get('http://127.0.0.1:8000/api/v1/posts/'+this.props.match.params.slug)
|
||||
.then(res => {
|
||||
const items = res.data;
|
||||
this.setState({
|
||||
items: items,
|
||||
DataisLoaded: true
|
||||
});
|
||||
})
|
||||
// console.log(this.state.items);
|
||||
}
|
||||
|
||||
// useEffect(() => {
|
||||
// window.scrollTo(0, 0);
|
||||
// }, []);
|
||||
|
||||
render() {
|
||||
// console.log(this.state.items);
|
||||
// console.log(this.state.items.data);
|
||||
const { DataisLoaded, items } = this.state;
|
||||
if (!DataisLoaded) return <div>
|
||||
<h1> Pleses wait some time.... </h1> </div> ;
|
||||
return (
|
||||
// {items['data'][0].map((item) => (
|
||||
<section className="novelty">
|
||||
<Breadcrumb
|
||||
path_1="Новости"
|
||||
link_1="/news"
|
||||
path_2="Очередная видеовстреча с зарубежными партнёрами"
|
||||
path_2={this.props.match.params.slug}
|
||||
currentUrl="../news/novelty"
|
||||
/>
|
||||
<div className="container">
|
||||
<div className="novelty-inner">
|
||||
|
||||
|
||||
|
||||
{items['data'][0].map((item) => (
|
||||
<div className="novelty-inner" key={item.id}>
|
||||
<div className="novelty-head">
|
||||
<div className="novelty-img">
|
||||
<img src={NoveltyIMG} alt="Novelty" />
|
||||
<img src={ item['featured_images'][0]['path'] } alt="Novelty" />
|
||||
</div>
|
||||
<h4 className="novelty-title">
|
||||
Очередная видеовстреча с зарубежными партнёрами
|
||||
{ item.title }
|
||||
</h4>
|
||||
</div>
|
||||
<div className="novelty-text">
|
||||
<span>
|
||||
<span className="pgraph">
|
||||
Поддержка женского предпринимательства, обеспечение гендерного
|
||||
баланса и создание равных условий труда стали главной темой
|
||||
обсуждения Международного онлайн-форума «Расширение
|
||||
экономических прав и возможностей женщин для устойчивого
|
||||
развития в Центральной Азии и Афганистане», организованного
|
||||
сегодня Олий Мажлисом Республики Узбекистан и Программой
|
||||
развития ООН.
|
||||
</span>
|
||||
<span className="pgraph">
|
||||
В многосторонней встрече, проходящей под эгидой Диалога
|
||||
женщин-лидеров Центральной Азии, с туркменской стороны приняли
|
||||
участие председатель Меджлиса Милли Генгеша и представители
|
||||
Союза промышленников и предпринимателей.
|
||||
</span>
|
||||
<span className="pgraph">
|
||||
Начало форума предварил видеообзор выставки продукции
|
||||
женщин-предпринимателей Центральной Азии, проведённой в столице
|
||||
каждой из стран-участниц.
|
||||
</span>
|
||||
<span className="pgraph">
|
||||
Выражая поддержку усилиям правительств государств региона в
|
||||
вопросах обеспечения гендерного равенства и повышения роли
|
||||
женщин в достижении Целей устойчивого развития, участники
|
||||
видеоконференции подчеркнули необходимость более полной
|
||||
реализации предпринимательского потенциала женщин, дальнейшего
|
||||
совершенствования законодательной базы и экономической политики
|
||||
в целях расширения их присутствия на рынке труда и активного
|
||||
продвижения в государственном и частном секторах.
|
||||
</span>
|
||||
<span className="pgraph">
|
||||
В рамках форума была согласована и принята «Дорожная карта» по
|
||||
развитию сотрудничества в сфере устойчивого развития между
|
||||
женщинами-предпринимателями Центральной Азии и Афганистана, а
|
||||
также принят Итоговый документ – Совместное заявление, в
|
||||
котором участники форума выразили уверенность, что практическая
|
||||
реализация запланированных мероприятий будет способствовать
|
||||
развитию женского предпринимательства, дальнейшему укреплению
|
||||
взаимовыгодного сотрудничества и делового партнёрства между
|
||||
женщинами-предпринимателями региона.
|
||||
</span>
|
||||
</span>
|
||||
{ item.created_at }
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
export default Novelty;
|
||||
|
|
|
|||
|
|
@ -9,11 +9,19 @@ module.exports = {
|
|||
},
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.js$/,
|
||||
enforce: "pre",
|
||||
use: ["source-map-loader"],
|
||||
},
|
||||
{
|
||||
test: /\.(js|jsx)$/,
|
||||
exclude: /node_modules/,
|
||||
use: [{
|
||||
loader: 'babel-loader',
|
||||
// query: {
|
||||
// presets: ['es2015','react']
|
||||
// },
|
||||
options: {
|
||||
cacheDirectory: true,
|
||||
plugins: ['@babel/plugin-transform-runtime']
|
||||
|
|
@ -50,10 +58,10 @@ module.exports = {
|
|||
|
||||
devServer: {
|
||||
contentBase: path.resolve(__dirname, './public'),
|
||||
// publicPath: "/src/pages/",
|
||||
// historyApiFallback: true,
|
||||
|
||||
writeToDisk: true,
|
||||
historyApiFallback: true,
|
||||
inline:true,
|
||||
// inline:true,
|
||||
|
||||
port: 8001
|
||||
// contentBase: './',
|
||||
|
|
|
|||
Loading…
Reference in New Issue