├── .gitignore
├── README.md
├── images
└── codelayout.png
├── package.json
├── public
├── 404.jpg
├── favicon.ico
├── fonts
│ ├── DancingScript-Regular.ttf
│ └── DarkerGrotesque-Regular.ttf
├── index.html
├── logo.svg
├── logo192.png
├── logo512.png
├── m1.png
├── m2.png
├── m3.png
├── m4.png
├── manifest.json
├── media1.png
├── media2.png
├── media3.png
├── person.png
├── public-private-ssh.png
└── robots.txt
└── src
├── App.js
├── App.test.js
├── assets
└── images
│ ├── akn.png
│ ├── bg1.png
│ ├── bg2.png
│ ├── bgforrent.jpg
│ ├── bgforrent.png
│ ├── bgforsale.png
│ ├── forrentbg.jpg
│ ├── forsale-background.png
│ ├── forsalebg.jpg
│ ├── home-banner-background.png
│ ├── media1.png
│ ├── yangon.jpg
│ └── yangon1.jpg
├── classes
├── ChunkArray.js
└── Database.js
├── components
├── Items
│ ├── ListItem.jsx
│ ├── ListItemSmall.jsx
│ ├── MobileItem.jsx
│ ├── RelatedItem.jsx
│ └── index.jsx
├── config.jsx
├── down-arrow.svg
├── enflag.svg
├── icons
│ ├── FontIcon.jsx
│ ├── Icon.jsx
│ └── index.jsx
├── logo.svg
├── logoonly.svg
├── mmflag.svg
└── routers
│ ├── RouteWithLayout.jsx
│ └── index.jsx
├── index.css
├── index.js
├── layouts
├── index.jsx
├── login
│ └── LoginLayout.jsx
└── main
│ ├── MainLayout.jsx
│ ├── MainLayoutController.jsx
│ ├── MainLayoutCss.css
│ └── MainLayoutElement.jsx
├── logo.svg
├── pages
├── ItemsByCategory
│ ├── ItemsByCategoryPage.jsx
│ ├── ItemsByCategoryPageController.jsx
│ └── ItemsByCategoryPageElement.jsx
├── article
│ ├── Article.css
│ ├── ArticlePage.jsx
│ ├── ArticlePageController.jsx
│ └── ArticlePageElement.jsx
├── error
│ ├── NotFoundPage.jsx
│ └── Particles.js
├── home
│ ├── HomePage.jsx
│ ├── HomePageController.jsx
│ └── HomePageElement.jsx
├── index.jsx
└── login
│ └── LogInPage.jsx
├── reportWebVitals.js
└── setupTests.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | node_modules
6 |
7 | /.pnp
8 | .pnp.js
9 |
10 | # testing
11 | /coverage
12 | package-lock.json
13 | # production
14 | /build
15 |
16 | # misc
17 | .DS_Store
18 | .DS_Store?
19 | yarn.lock
20 | package-lock.json
21 | .env.local
22 | .env.development.local
23 | .env.test.local
24 | .env.production.local
25 |
26 | npm-debug.log*
27 | yarn-debug.log*
28 | yarn-error.log*
29 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # react js frontend and api integration.
2 |
3 | This project is for my aungkyawnyunt.com. you can study reactjs frontend by walking through in this repo.
4 |
5 | ## Install moduels and Run the application
6 |
7 | ### Install modules(package)
8 | `nmp install`
9 | after installation you can start run the application
10 | ### Runn the application
11 | `nmp start`
12 | after app stared, you can visit to [localhost:8080](http://localhost:8080)
13 |
14 | ## Additional Modules
15 | [react-gist](https://www.npmjs.com/package/react-gist)
16 | to descripte code snippets on web page. especially i use it on article page.
17 | [styled-components](https://styled-components.com/)
18 | styled-components is for the html element and similar to react-native.
19 | I use styled-componets rather than pure html and style as the class.
20 |
21 | ## Code Flow
22 | 
--------------------------------------------------------------------------------
/images/codelayout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/images/codelayout.png
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "dashboard",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@fortawesome/fontawesome-svg-core": "^1.2.36",
7 | "@fortawesome/free-solid-svg-icons": "^5.15.4",
8 | "@fortawesome/react-fontawesome": "^0.1.16",
9 | "@testing-library/jest-dom": "^5.11.4",
10 | "@testing-library/react": "^11.1.0",
11 | "@testing-library/user-event": "^12.1.10",
12 | "react": "^17.0.2",
13 | "react-dom": "^17.0.2",
14 | "react-gist": "^1.2.4",
15 | "react-router-dom": "^5.3.0",
16 | "react-scripts": "4.0.3",
17 | "styled-components": "^5.3.3",
18 | "web-vitals": "^1.0.1"
19 | },
20 | "scripts": {
21 | "start": "PORT=8080 react-scripts start",
22 | "build": "react-scripts build",
23 | "test": "react-scripts test",
24 | "eject": "react-scripts eject"
25 | },
26 | "eslintConfig": {
27 | "extends": [
28 | "react-app",
29 | "react-app/jest"
30 | ]
31 | },
32 | "browserslist": {
33 | "production": [
34 | ">0.2%",
35 | "not dead",
36 | "not op_mini all"
37 | ],
38 | "development": [
39 | "last 1 chrome version",
40 | "last 1 firefox version",
41 | "last 1 safari version"
42 | ]
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/public/404.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/404.jpg
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/favicon.ico
--------------------------------------------------------------------------------
/public/fonts/DancingScript-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/fonts/DancingScript-Regular.ttf
--------------------------------------------------------------------------------
/public/fonts/DarkerGrotesque-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/fonts/DarkerGrotesque-Regular.ttf
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
21 |
27 |
28 |
32 |
33 |
42 |
47 |
48 | App
49 |
50 |
51 |
52 | You need to enable JavaScript to run this app.
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/public/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/logo192.png
--------------------------------------------------------------------------------
/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/logo512.png
--------------------------------------------------------------------------------
/public/m1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/m1.png
--------------------------------------------------------------------------------
/public/m2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/m2.png
--------------------------------------------------------------------------------
/public/m3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/m3.png
--------------------------------------------------------------------------------
/public/m4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/m4.png
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/public/media1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/media1.png
--------------------------------------------------------------------------------
/public/media2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/media2.png
--------------------------------------------------------------------------------
/public/media3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/media3.png
--------------------------------------------------------------------------------
/public/person.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/person.png
--------------------------------------------------------------------------------
/public/public-private-ssh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/public/public-private-ssh.png
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/src/App.js:
--------------------------------------------------------------------------------
1 | import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
2 |
3 |
4 | import {RouteWithLayout} from './components/routers';
5 | import {MainLayout} from './layouts';
6 | import {
7 | HomePage,
8 | ItemsByCategoryPage,
9 | ArticlePage,
10 |
11 | NotFoundPage
12 | } from './pages';
13 |
14 | //ArticlePage
15 | function Dashboard(){
16 | return(
17 |
18 |
19 |
20 |
27 |
28 |
35 |
36 |
43 |
44 |
45 |
46 |
47 |
48 | );
49 | }
50 |
51 | function App() {
52 | return (
53 | <>
54 |
55 | >
56 | );
57 | }
58 |
59 | export default App;
60 |
--------------------------------------------------------------------------------
/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import App from './App';
3 |
4 | test('renders learn react link', () => {
5 | render( );
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------
/src/assets/images/akn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/assets/images/akn.png
--------------------------------------------------------------------------------
/src/assets/images/bg1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/assets/images/bg1.png
--------------------------------------------------------------------------------
/src/assets/images/bg2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/assets/images/bg2.png
--------------------------------------------------------------------------------
/src/assets/images/bgforrent.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/assets/images/bgforrent.jpg
--------------------------------------------------------------------------------
/src/assets/images/bgforrent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/assets/images/bgforrent.png
--------------------------------------------------------------------------------
/src/assets/images/bgforsale.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/assets/images/bgforsale.png
--------------------------------------------------------------------------------
/src/assets/images/forrentbg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/assets/images/forrentbg.jpg
--------------------------------------------------------------------------------
/src/assets/images/forsale-background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/assets/images/forsale-background.png
--------------------------------------------------------------------------------
/src/assets/images/forsalebg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/assets/images/forsalebg.jpg
--------------------------------------------------------------------------------
/src/assets/images/home-banner-background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/assets/images/home-banner-background.png
--------------------------------------------------------------------------------
/src/assets/images/media1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/assets/images/media1.png
--------------------------------------------------------------------------------
/src/assets/images/yangon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/assets/images/yangon.jpg
--------------------------------------------------------------------------------
/src/assets/images/yangon1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/assets/images/yangon1.jpg
--------------------------------------------------------------------------------
/src/classes/ChunkArray.js:
--------------------------------------------------------------------------------
1 | // function chunkArray(myArray, chunk_size){
2 | // var results = [];
3 |
4 | // while (myArray.length) {
5 | // results.push(myArray.splice(0, chunk_size));
6 | // }
7 |
8 | // return results;
9 | // }
10 |
11 | function chunkArray(arr, len) {
12 | var chunks = [], i = 0, n = arr.length;
13 | while (i < n) {
14 | chunks.push(arr.slice(i, i += len));
15 | }
16 | return chunks;
17 | }
18 |
19 | export{
20 | chunkArray
21 | }
--------------------------------------------------------------------------------
/src/classes/Database.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/classes/Database.js
--------------------------------------------------------------------------------
/src/components/Items/ListItem.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import styled from "styled-components";
3 |
4 | import {Icon} from '../icons';
5 |
6 | import { DefaultColor } from "../config";
7 |
8 | export const MainContainer = styled.div`
9 | display:flex;
10 | flex-direction:column;
11 | justify-content:${props=>props.justifyContent?props.justifyContent:'flex-start'};
12 | align-items:${props=>props.alignItems?props.alignItems:'center'};
13 | width:${props=>props.width?props.width:'47%'};
14 | height:39vw;
15 | background-color:${props=>props.bgColor?props.bgColor:DefaultColor};
16 | border: 1.01587px solid ${DefaultColor};
17 | border-radius:10px;
18 | @media screen and (max-width: 400px) {
19 | & {
20 | display:flex;
21 | }
22 | }
23 | `;
24 |
25 | export const ImageContainer = styled.div`
26 | width:100%;
27 | height:50%;
28 | background-color:silver;
29 | border-top-right-radius:10px;
30 | border-top-left-radius:10px;
31 | background-color:#000000;
32 | overflow:hidden;
33 | `;
34 | export const BodyContainer = styled.div`
35 | width:100%;
36 | height:48%;
37 | background-color:#33333C;
38 | display:flex;
39 | flex-direction:row;
40 | justify-content:center;
41 | `;
42 | export const BodyContainerInner = styled.div`
43 | width:90%;
44 | height:100%;
45 | `;
46 |
47 | export const HeadContainer = styled.div`
48 | width:100%;
49 | height:24%;
50 | display:flex;
51 | flex-direction:row;
52 | `;
53 | const AButton = styled.a`
54 | font-family:"Cuprum";
55 | font-size:16px;
56 | color:#ffffff;
57 | cursor:pointer;
58 | background-color:${DefaultColor};
59 | padding:5px 10px 5px 10px;
60 | border-radius:50px;
61 | margin-left:${props=>props.marginLeft?props.marginLeft:0};
62 |
63 | display:flex;
64 | flex-direction:row;
65 | justify-content:flex-start;
66 | align-items:center;
67 |
68 | &:hover{
69 | color:${DefaultColor};
70 | background-color:#ffffff;
71 | }
72 | `;
73 | const ALink = styled.a`
74 | font-family:"Cuprum";
75 | font-size:20px;
76 | color:${DefaultColor};
77 | cursor:pointer;
78 | &:hover{
79 | color:#ffffff;
80 | }
81 | `;
82 | const Paragraph = styled.p`
83 | font-family:"Cuprum";
84 | font-size:16px;
85 | color:#ffffff;
86 | `;
87 | const HeadContainerLeft = styled.div`
88 | width:70%;
89 | height:100%;
90 | display:flex;
91 | flex-direction:row;
92 | justify-content:flex-start;
93 | align-items:center;
94 | `;
95 |
96 | export const HeadContainerRight = styled.div`
97 | width:30%;
98 | height:100%;
99 | display:flex;
100 | flex-direction:row;
101 | justify-content:flex-end;
102 | align-items:center;
103 | `;
104 | export const ReleaseDate = styled.label`
105 | font-family:"Cutive";
106 | font-size:14px;
107 | color:${DefaultColor};
108 | `;
109 | export const TitleContainer = styled.div`
110 | width:100%;
111 | height:12%;
112 | display:flex;
113 | flex-direction:row;
114 | justify-content:flex-start;
115 | align-items:center;
116 | `;
117 | export const Contentontainer = styled.div`
118 | width:100%;
119 | height:39%;
120 | overflow:hidden;
121 | `;
122 | export const FooterContainer = styled.div`
123 | width:100%;
124 | height:24%;
125 | display:flex;
126 | flex-direction:row;
127 | justify-content:flex-end;
128 | align-items:center;
129 | `;
130 |
131 | export class ListItem extends Component{
132 |
133 | constructor(props){
134 | super(props);
135 | this.state ={
136 |
137 | }
138 | }
139 |
140 | render(){
141 |
142 | return (
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 | Docker
152 | DevOps
153 | Server
154 |
155 |
156 | March, 22, 2022
157 |
158 |
159 |
160 | Docker Tutorial from zero to advance
161 |
162 |
163 |
164 | Docker Desktop delivers the speed, choice and security you need for designing and delivering these containerized applications on your desktop.
165 | Docker is a container management service. The keywords of Docker ...
166 |
167 |
168 |
169 | Read
170 |
171 |
172 |
173 |
174 | );
175 | }
176 |
177 | }
--------------------------------------------------------------------------------
/src/components/Items/ListItemSmall.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import styled from "styled-components";
3 |
4 | import {Icon} from '../icons';
5 |
6 | import { DefaultColor,ImageUrl } from "../config";
7 |
8 | export const MainContainer = styled.div`
9 | display:flex;
10 | flex-direction:column;
11 | justify-content:${props=>props.justifyContent?props.justifyContent:'flex-start'};
12 | align-items:${props=>props.alignItems?props.alignItems:'center'};
13 | width:${props=>props.width?props.width:'30%'};
14 | height:25vw;
15 | background-color:${props=>props.bgColor?props.bgColor:DefaultColor};
16 | border: 1.01587px solid ${DefaultColor};
17 | border-radius:10px;
18 | @media screen and (max-width: 400px) {
19 | & {
20 | display:flex;
21 | }
22 | }
23 | `;
24 |
25 | export const ImageContainer = styled.div`
26 | width:100%;
27 | height:50%;
28 | background-color:silver;
29 | border-top-right-radius:10px;
30 | border-top-left-radius:10px;
31 | background-color:#000000;
32 |
33 | overflow:hidden;
34 | `;
35 | export const BodyContainer = styled.div`
36 | width:100%;
37 | height:48%;
38 | background-color:#33333C;
39 | display:flex;
40 | flex-direction:row;
41 | justify-content:center;
42 | `;
43 | export const BodyContainerInner = styled.div`
44 | width:90%;
45 | height:100%;
46 | `;
47 |
48 | export const HeadContainer = styled.div`
49 | width:100%;
50 | height:24%;
51 | display:flex;
52 | flex-direction:row;
53 |
54 | justify-content:flex-start;
55 | align-items:center;
56 |
57 | `;
58 |
59 |
60 | const AButton = styled.a`
61 | font-family:"Cuprum";
62 | font-size:16px;
63 | color:#ffffff;
64 | cursor:pointer;
65 | background-color:${DefaultColor};
66 | padding:5px 10px 5px 10px;
67 | border-radius:50px;
68 | margin-left:${props=>props.marginLeft?props.marginLeft:0};
69 |
70 | display:flex;
71 | flex-direction:row;
72 | justify-content:flex-start;
73 | align-items:center;
74 |
75 | text-decoration:none;
76 | &:hover{
77 | color:${DefaultColor};
78 | background-color:#ffffff;
79 | }
80 | &:hover .clsIcon{
81 | color:${DefaultColor};
82 | }
83 | `;
84 | const ALink = styled.a`
85 | font-family:"Cuprum";
86 | font-size:16px;
87 | color:${DefaultColor};
88 | cursor:pointer;
89 | &:hover{
90 | color:#ffffff;
91 | }
92 | `;
93 | const Paragraph = styled.div`
94 | font-family:"Cuprum";
95 | font-size:16px;
96 | color:#ffffff;
97 | `;
98 |
99 |
100 | export const HeadContainerRight = styled.div`
101 | width:30%;
102 | height:100%;
103 | display:flex;
104 | flex-direction:row;
105 | justify-content:flex-end;
106 | align-items:center;
107 | `;
108 | export const ReleaseDate = styled.label`
109 | font-family:"Cutive";
110 | font-size:14px;
111 | color:${DefaultColor};
112 | `;
113 | export const TitleContainer = styled.div`
114 | width:100%;
115 | height:12%;
116 | display:flex;
117 | flex-direction:row;
118 | justify-content:flex-start;
119 | align-items:center;
120 | `;
121 | export const Contentontainer = styled.div`
122 | width:100%;
123 | height:39%;
124 | overflow:hidden;
125 | `;
126 | export const FooterContainer = styled.div`
127 | width:100%;
128 | height:24%;
129 | display:flex;
130 | flex-direction:row;
131 | justify-content:space-between;
132 | align-items:center;
133 | `;
134 |
135 | export class ListItemSmall extends Component{
136 |
137 |
138 | render(){
139 | let item = this.props.item;
140 | // console.log(item);
141 | let categories = item.categories.map((element,index)=>{
142 | return (index===0?{element.name} :{element.name} );
143 | });
144 | return (
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 | {categories}
153 |
154 |
155 | {item.title}
156 |
157 |
158 |
163 |
164 |
165 |
166 | {item.created_at}
167 | Read
168 |
169 |
170 |
171 |
172 | );
173 | }
174 |
175 | }
--------------------------------------------------------------------------------
/src/components/Items/MobileItem.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled from "styled-components";
3 |
4 | import { DefaultColor,ImageUrl } from "../config";
5 |
6 | export const MainContainer = styled.div`
7 | display:flex;
8 | flex-direction:column;
9 | justify-content:${props=>props.justifyContent?props.justifyContent:'flex-start'};
10 | align-items:${props=>props.alignItems?props.alignItems:'center'};
11 | width:${props=>props.width?props.width:'20vw'};
12 | margin-left:${props=>props.marginLeft?props.marginLeft:'5px'};
13 | flex:none;
14 | @media screen and (max-width: 400px) {
15 | & {
16 | display:flex;
17 | }
18 | }
19 | `;
20 |
21 | export const ImageContainer = styled.div`
22 | width:100%;
23 | height:50%;
24 | display:flex;
25 | justify-content:center;
26 | align-items:center;
27 | overflow:hidden;
28 | `;
29 | export const BodyContainer = styled.div`
30 | width:100%;
31 | display:flex;
32 | flex-direction:column;
33 | justify-content:center;
34 | `;
35 | export const BodyContainerInner = styled.div`
36 | width:90%;
37 | height:100%;
38 | `;
39 |
40 | export const HeadContainer = styled.div`
41 | width:100%;
42 | height:24%;
43 | display:flex;
44 | flex-direction:row;
45 | `;
46 |
47 | const ALink = styled.a`
48 | font-family:"Cuprum";
49 | font-size:20px;
50 | color:${DefaultColor};
51 | cursor:pointer;
52 | &:hover{
53 | color:#ffffff;
54 | }
55 | `;
56 | const Paragraph = styled.p`
57 | font-family:"Cuprum";
58 | font-size:16px;
59 | color:#ffffff;
60 | `;
61 |
62 | export const HeadContainerRight = styled.div`
63 | width:30%;
64 | height:100%;
65 | display:flex;
66 | flex-direction:row;
67 | justify-content:flex-end;
68 | align-items:center;
69 | `;
70 | export const ReleaseDate = styled.label`
71 | font-family:"Cutive";
72 | font-size:14px;
73 | color:${DefaultColor};
74 | `;
75 | export const TitleContainer = styled.div`
76 | width:100%;
77 | height:12%;
78 | display:flex;
79 | flex-direction:row;
80 | justify-content:flex-start;
81 | align-items:center;
82 | `;
83 | export const Contentontainer = styled.div`
84 | width:100%;
85 | height:39%;
86 | overflow:hidden;
87 | `;
88 | export const FooterContainer = styled.div`
89 | width:100%;
90 | height:24%;
91 | display:flex;
92 | flex-direction:row;
93 | justify-content:flex-end;
94 | align-items:center;
95 | `;
96 |
97 | export function MobileItem ({
98 | ...props
99 | }) {
100 | let item = props.item;
101 | return (
102 |
103 |
104 |
105 |
106 |
107 |
110 |
111 | {item.description}
112 |
113 |
114 |
Available On
115 |
116 |
Google PlayStore
117 |
118 |
119 |
120 |
121 | );
122 | }
--------------------------------------------------------------------------------
/src/components/Items/RelatedItem.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import styled from "styled-components";
3 |
4 | import {Icon} from '../icons';
5 |
6 | import { DefaultColor,ImageUrl } from "../config";
7 |
8 | export const MainContainer = styled.div`
9 | display:flex;
10 | flex-direction:column;
11 | justify-content:${props=>props.justifyContent?props.justifyContent:'flex-start'};
12 | align-items:${props=>props.alignItems?props.alignItems:'center'};
13 | width:${props=>props.width?props.width:'60%'};
14 | height:25vw;
15 | background-color:${props=>props.bgColor?props.bgColor:DefaultColor};
16 | border: 1.01587px solid ${DefaultColor};
17 | border-radius:10px;
18 | margin-top:20px;
19 | margin-left:20px;
20 | @media screen and (max-width: 400px) {
21 | & {
22 | display:flex;
23 | }
24 | }
25 | `;
26 |
27 | export const ImageContainer = styled.div`
28 | width:100%;
29 | height:50%;
30 | background-color:silver;
31 | border-top-right-radius:10px;
32 | border-top-left-radius:10px;
33 | background-color:#000000;
34 | overflow:hidden;
35 | `;
36 | export const BodyContainer = styled.div`
37 | width:100%;
38 | height:48%;
39 | background-color:#33333C;
40 | display:flex;
41 | flex-direction:row;
42 | justify-content:center;
43 | `;
44 | export const BodyContainerInner = styled.div`
45 | width:90%;
46 | height:100%;
47 | `;
48 |
49 | export const HeadContainer = styled.div`
50 | width:100%;
51 | height:24%;
52 | display:flex;
53 | flex-direction:row;
54 |
55 | justify-content:flex-start;
56 | align-items:center;
57 |
58 | `;
59 |
60 |
61 | const AButton = styled.a`
62 | font-family:"Cuprum";
63 | font-size:16px;
64 | color:#ffffff;
65 | cursor:pointer;
66 | background-color:${DefaultColor};
67 | padding:5px 10px 5px 10px;
68 | border-radius:50px;
69 | margin-left:${props=>props.marginLeft?props.marginLeft:0};
70 |
71 | display:flex;
72 | flex-direction:row;
73 | justify-content:flex-start;
74 | align-items:center;
75 |
76 | text-decoration:none;
77 | &:hover{
78 | color:${DefaultColor};
79 | background-color:#ffffff;
80 | }
81 | &:hover .clsIcon{
82 | color:${DefaultColor};
83 | }
84 | `;
85 | const ALink = styled.a`
86 | font-family:"Cuprum";
87 | font-size:16px;
88 | color:${DefaultColor};
89 | cursor:pointer;
90 | &:hover{
91 | color:#ffffff;
92 | }
93 | `;
94 | const Paragraph = styled.p`
95 | font-family:"Cuprum";
96 | font-size:16px;
97 | color:#ffffff;
98 | `;
99 |
100 |
101 | export const HeadContainerRight = styled.div`
102 | width:30%;
103 | height:100%;
104 | display:flex;
105 | flex-direction:row;
106 | justify-content:flex-end;
107 | align-items:center;
108 | `;
109 | export const ReleaseDate = styled.label`
110 | font-family:"Cutive";
111 | font-size:14px;
112 | color:${DefaultColor};
113 | `;
114 | export const TitleContainer = styled.div`
115 | width:100%;
116 | height:12%;
117 | display:flex;
118 | flex-direction:row;
119 | justify-content:flex-start;
120 | align-items:center;
121 | `;
122 | export const Contentontainer = styled.div`
123 | width:100%;
124 | height:39%;
125 | overflow:hidden;
126 | `;
127 | export const FooterContainer = styled.div`
128 | width:100%;
129 | height:24%;
130 | display:flex;
131 | flex-direction:row;
132 | justify-content:space-between;
133 | align-items:center;
134 | `;
135 |
136 | export class RelatedItem extends Component{
137 |
138 |
139 | render(){
140 | let item = this.props.item;
141 | // console.log(item);
142 | let categories = item.categories.map((element,index)=>{
143 | return (index===0?{element.name} :{element.name} );
144 | });
145 | return (
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 | {categories}
154 |
155 |
156 | {item.title}
157 |
158 |
159 |
160 | {item.intro}
161 |
162 |
163 |
164 | {item.created_at}
165 | Read
166 |
167 |
168 |
169 |
170 | );
171 | }
172 |
173 | }
--------------------------------------------------------------------------------
/src/components/Items/index.jsx:
--------------------------------------------------------------------------------
1 | import {ListItem} from './ListItem';
2 | import {MobileItem} from './MobileItem';
3 | import {ListItemSmall} from './ListItemSmall';
4 | import {RelatedItem} from './RelatedItem';
5 |
6 | export {
7 | ListItem,
8 | MobileItem,
9 | ListItemSmall,
10 | RelatedItem
11 | };
--------------------------------------------------------------------------------
/src/components/config.jsx:
--------------------------------------------------------------------------------
1 | //let OrangeColor = "#C35023";
2 | //let BlueColor = "#416DDD";
3 | let LightBlueColor = "#788EBA";
4 | //let GreenColor = "#597D75";
5 | export const DefaultColor = LightBlueColor;
6 | export const ImageUrl = "http://localhost:8080/";
--------------------------------------------------------------------------------
/src/components/down-arrow.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/components/enflag.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/components/icons/FontIcon.jsx:
--------------------------------------------------------------------------------
1 | /*
2 | example
3 |
4 | */
5 |
6 | import styled from "styled-components";
7 |
8 | export const MainContainer = styled.div.attrs(props => ({
9 |
10 | }))`
11 | display:flex;
12 | flex-direction:column;
13 | width:100px;
14 | height:100px;
15 | justify-content:center;
16 | align-items:center;
17 | cursor:pointer;
18 |
19 |
20 | &:hover .something{
21 | background-color:#6DAEC2;
22 | color:green;
23 | }
24 | &:hover .lab{
25 | color:#ffffff;
26 | }
27 | &:hover .caption{
28 | color:#1F3351;
29 | }
30 | `;
31 | export const Caption = styled.div`
32 | font-size:14px;
33 | font-family:Fjord;
34 | cursor:pointer;
35 | color:${props=>props.active?"#1F3351":"#6DAEC2"};
36 | padding-top:10px;
37 |
38 | `;
39 | export const IconContainer = styled.div`
40 | display:flex;
41 | flex-direction:row;
42 | width:50%;
43 | height:50%;
44 | background-color:${props=>props.active?"#6DAEC2":"#F0F6F8"};
45 | justify-content:center;
46 | align-items:center;
47 | border-radius: 10px;
48 | cursor:pointer;
49 |
50 | `;
51 | export const Ico = styled.i`
52 | color:${props=>props.active?"#ffffff":"#6DAEC2"};
53 | font-size:20px;
54 |
55 | `;
56 |
57 | export function FontIcon({
58 | ...props
59 | }) {
60 | return (
61 |
62 |
63 |
64 |
65 | {props.caption}
66 |
67 | );
68 | }
--------------------------------------------------------------------------------
/src/components/icons/Icon.jsx:
--------------------------------------------------------------------------------
1 | /*
2 | example
3 |
4 | */
5 | import {DefaultColor} from '../config';
6 | export function Icon({
7 | ...props
8 | }) {
9 | return (
10 |
11 | );
12 | }
--------------------------------------------------------------------------------
/src/components/icons/index.jsx:
--------------------------------------------------------------------------------
1 | import {FontIcon} from './FontIcon';
2 | import {Icon} from './Icon';
3 |
4 | export {FontIcon,Icon};
--------------------------------------------------------------------------------
/src/components/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/components/logoonly.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/components/mmflag.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/components/routers/RouteWithLayout.jsx:
--------------------------------------------------------------------------------
1 |
2 | import { Route } from "react-router-dom";
3 |
4 | // export function RouteWithLayout({
5 | // component: Component,
6 | // layout: Layout,
7 | // ...properties
8 | // }) {
9 | // return (
10 | //
11 | //
12 | //
13 | //
14 | // } />
15 | // );
16 | // }
17 |
18 | export function RouteWithLayout({
19 | component: Component,
20 | layout: Layout,
21 | ...properties
22 | }) {
23 | return (
24 |
25 |
26 | } />
27 | );
28 | }
--------------------------------------------------------------------------------
/src/components/routers/index.jsx:
--------------------------------------------------------------------------------
1 | import {RouteWithLayout} from './RouteWithLayout';
2 | export {RouteWithLayout};
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 |
2 |
3 | body {
4 | margin: 0;
5 | width:100vw;
6 | height:100vh;
7 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
8 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
9 | sans-serif;
10 | -webkit-font-smoothing: antialiased;
11 | -moz-osx-font-smoothing: grayscale;
12 | }
13 |
14 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import reportWebVitals from './reportWebVitals';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById("root")
12 | //document.body
13 | );
14 |
15 | // If you want to start measuring performance in your app, pass a function
16 | // to log results (for example: reportWebVitals(console.log))
17 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
18 | reportWebVitals();
19 |
--------------------------------------------------------------------------------
/src/layouts/index.jsx:
--------------------------------------------------------------------------------
1 | import {LoginLayout} from './login/LoginLayout';
2 | import {MainLayout} from './main/MainLayout';
3 | export {LoginLayout, MainLayout};
--------------------------------------------------------------------------------
/src/layouts/login/LoginLayout.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 |
3 | class LoginLayout extends Component {
4 | state = {
5 |
6 | }
7 |
8 | render() {
9 | return (
10 |
11 |
Войти
12 |
17 |
18 | );
19 | }
20 | }
21 |
22 | export {LoginLayout};
--------------------------------------------------------------------------------
/src/layouts/main/MainLayout.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import "./MainLayoutCss.css";
4 |
5 | import {MainLayoutController} from './MainLayoutController';
6 | import
7 | {
8 | DefaultColor,
9 |
10 | MainContainer,
11 | MenuContainer,
12 | MenuSmall,
13 | MenuInner,MenuFloat,
14 | MenuBig,
15 | MenuLine,
16 | Alink,
17 | MainBody,DivFloat,
18 | MainFooter,
19 | MainFooterInner,
20 | GetInTouchCaption,
21 | WebsiteLink
22 | }
23 | from './MainLayoutElement';
24 |
25 | //import logo from '../../logo.svg';
26 | import logo from '../../components/logo.svg';
27 | import {Icon} from '../../components/icons';
28 |
29 | // =============================== VARIABLE ==================================
30 |
31 |
32 |
33 | // =============================== END VARIABLE ==============================
34 |
35 | class MainLayout extends MainLayoutController {
36 |
37 |
38 | render(){
39 | // alertconsole.log('main state');
40 | // console.log(this.state);
41 | // console.log('end main state');
42 | let menuData = this.state.menu.map((element,index)=>{
43 | return ({element.name} );
44 | });
45 |
46 | let Component = this.props.component;
47 | let props = this.props;
48 | return(
49 |
50 |
51 |
52 |
53 |
54 | GitHub
55 | UpWork
56 | Linkedin
57 | Facebook
58 |
59 |
60 | #Green
61 | #Orange
62 | #Blue
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 | application.net
72 |
73 |
74 |
75 | Home
76 | {menuData}
77 |
78 |
79 |
80 |
81 |
82 |
83 | {/* --- Begin MainBody */}
84 |
85 |
86 |
87 | {/* --- End MainBody */}
88 |
89 | {/* --- Begin Footer */}
90 |
91 |
97 |
98 |
99 |
100 |
101 | © All right Reserved. Inspired Codes...
102 |
103 |
104 |
105 |
106 |
107 | Get In Touch
108 |
109 |
116 |
122 |
123 |
124 |
125 |
126 |
133 |
134 |
135 | +95 9763764572
136 |
137 |
138 | aungkyawnyunt2004@gmail.com
139 |
140 |
141 | Facebook ,
142 | Twitter ,
143 | Linkedin
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 | {/* --- END Footer */}
153 |
154 | )
155 | }
156 | }
157 | export {MainLayout};
158 |
--------------------------------------------------------------------------------
/src/layouts/main/MainLayoutController.jsx:
--------------------------------------------------------------------------------
1 | import { Component } from 'react';
2 |
3 | class MainLayoutController extends Component {
4 | constructor(props) {
5 | super(props);
6 |
7 | this.state = {
8 | menu: [],
9 | }
10 | // Variables
11 |
12 | // end Variable
13 |
14 | this.setParentMenuCallBack = this.setParentMenuCallBack.bind(this);
15 | }
16 |
17 |
18 |
19 |
20 | setParentMenuCallBack = (childData) =>{
21 | this.setState({menu: childData})
22 | }
23 |
24 | }
25 |
26 | export {MainLayoutController};
--------------------------------------------------------------------------------
/src/layouts/main/MainLayoutCss.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/helloakn/reactjs-frontend-SSG-with-NodeJs/d47eb49ea20eed692b5380328510a55b0b79dd7f/src/layouts/main/MainLayoutCss.css
--------------------------------------------------------------------------------
/src/layouts/main/MainLayoutElement.jsx:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 |
3 |
4 | import {DefaultColor} from '../../components/config';
5 | export {DefaultColor};
6 | export const MainContainer = styled.div`
7 | display:flex;
8 | flex-direction:column;
9 | justify-content:flex-start;
10 | align-items:center;
11 | width: 100%;
12 | overflow:auto;
13 | background-color:red;
14 | background-color:rgba(65, 81, 139, 0.54);
15 | background-color:#262628;
16 | @media screen and (max-width: 400px) {
17 | & {
18 | display:flex;
19 | }
20 | }
21 | `;
22 | export const MenuContainer = styled.div`
23 | display:flex;
24 | flex-direction:column;
25 | justify-content:flex-start;
26 | align-items:flex-start;
27 | width: 100%;
28 | height:100px;
29 | position:fixed;
30 | @media screen and (max-width: 400px) {
31 | & {
32 | display:flex;
33 | }
34 | }
35 | `;
36 | export const MenuSmall = styled.div`
37 | display:flex;
38 | flex-direction:row;
39 | justify-content:center;
40 | align-items:flex-start;
41 | width: 100%;
42 | height:30%;
43 | background-color:${DefaultColor};
44 | @media screen and (max-width: 400px) {
45 | & {
46 | display:flex;
47 | }
48 | }
49 | `;
50 | export const MenuInner = styled.div`
51 | display:flex;
52 | flex-direction:row;
53 | justify-content:space-between;
54 | align-items:flex-start;
55 | width: 80%;
56 | height:100%;
57 | @media screen and (max-width: 400px) {
58 | & {
59 | display:flex;
60 | }
61 | }
62 | `;
63 | export const MenuFloat = styled.div`
64 | display:flex;
65 | flex-direction:row;
66 | justify-content:space-between;
67 | align-items:center;
68 | width: ${props=>props.width};
69 | height:100%;
70 | background-color:${props=>props.bgColor};
71 | @media screen and (max-width: 400px) {
72 | & {
73 | display:flex;
74 | }
75 | }
76 | `;
77 | export const MenuBig = styled.div`
78 | display:flex;
79 | flex-direction:row;
80 | justify-content:center;
81 | align-items:flex-start;
82 | width: 100%;
83 | height:65%;;
84 | background-color:rgba(38, 38, 40, 0.58);
85 | @media screen and (max-width: 400px) {
86 | & {
87 | display:flex;
88 | }
89 | }
90 | `;
91 | export const MenuLine = styled.div`
92 | display:flex;
93 | flex-direction:row;
94 | justify-content:flex-start;
95 | align-items:flex-start;
96 | width: 100%;
97 | height:5%;
98 | background: linear-gradient(90deg, ${DefaultColor} 0%, #000000 100%);
99 |
100 | @media screen and (max-width: 400px) {
101 | & {
102 | display:flex;
103 | }
104 | }
105 | `;
106 |
107 | export const Alink = styled.a`
108 | display:flex;
109 | flex-direction:row;
110 | justify-content:space-between;
111 | align-items:flex-start;
112 | color:#ffffff;
113 | font-family:"Eczar";
114 | font-size:${props=>props.fontSize?props.fontSize:"12px"};
115 | text-decoration:none;
116 | `;
117 | export const MainBody = styled.div`
118 | display:flex;
119 | flex-direction:row;
120 | justify-content:center;
121 | align-items:flex-start;
122 | width:100%;
123 | margin-top:100px;
124 | `;
125 |
126 |
127 | export const MainFooter = styled.div`
128 | display:flex;
129 | flex-direction:${props=>props.flexDirection?props.flexDirection:'row'};;
130 | justify-content:${props=>props.justifyContent?props.justifyContent:'space-between'};
131 | align-items:${props=>props.alignItems?props.alignItems:'center'};
132 | width:${props=>props.width?props.width:'100%'};
133 | margin-top:${props=>props.marginTop?props.marginTop:'0'};
134 | margin-bottom:${props=>props.marginBottom?props.marginBottom:'0'};
135 | background-color:${props=>props.bgColor};
136 |
137 | justify-content:center;
138 | background-color:#262628;
139 | width:100%;
140 | height:200px;
141 |
142 |
143 | @media screen and (max-width: 400px) {
144 | & {
145 | display:flex;
146 | }
147 | }
148 | `;
149 |
150 | export const MainFooterInner = styled.div`
151 | display:flex;
152 | flex-direction:${props=>props.flexDirection?props.flexDirection:'row'};;
153 | justify-content:${props=>props.justifyContent?props.justifyContent:'space-between'};
154 | align-items:${props=>props.alignItems?props.alignItems:'center'};
155 | width:${props=>props.width?props.width:'100%'};
156 | margin-top:${props=>props.marginTop?props.marginTop:'0'};
157 | margin-bottom:${props=>props.marginBottom?props.marginBottom:'0'};
158 | background-color:${props=>props.bgColor};
159 |
160 | justify-content:center;
161 | background-color:#262628;
162 | width:100%;
163 | height:200px;
164 |
165 |
166 | @media screen and (max-width: 400px) {
167 | & {
168 | display:flex;
169 | }
170 | }
171 | `;
172 |
173 | export const DivFloat = styled.div`
174 | display:flex;
175 | flex-direction:${props=>props.flexDirection?props.flexDirection:'row'};;
176 | justify-content:${props=>props.justifyContent?props.justifyContent:'space-between'};
177 | align-items:${props=>props.alignItems?props.alignItems:'center'};
178 | width:${props=>props.width?props.width:'100%'};
179 | height:${props=>props.height?props.height:'100%'};
180 | margin-top:${props=>props.marginTop?props.marginTop:'0'};
181 | margin-bottom:${props=>props.marginBottom?props.marginBottom:'0'};
182 | background-color:${props=>props.bgColor};
183 | @media screen and (max-width: 400px) {
184 | & {
185 | display:flex;
186 | }
187 | }
188 | `;
189 |
190 | export const GetInTouchCaption = styled.div`
191 | color:#FFFFFF;
192 | fontSize:20px;
193 | font-family:"Darker Grotesque";
194 | display:flex;
195 | flex-direction:row;
196 | `;
197 |
198 | export const WebsiteLink = styled.div`
199 | color:#ffffff;
200 | font-family:"Eczar";
201 | font-size:20px;
202 | `;
--------------------------------------------------------------------------------
/src/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/src/pages/ItemsByCategory/ItemsByCategoryPage.jsx:
--------------------------------------------------------------------------------
1 |
2 | import React from 'react';
3 |
4 | import {ItemsByCategoryPageController} from './ItemsByCategoryPageController';
5 | import {
6 | DivMainContainer,
7 | DivFloat,Header,ListItemRow
8 | }
9 | from './ItemsByCategoryPageElement';
10 |
11 | import {DefaultColor} from '../../components/config';
12 | import {chunkArray} from '../../classes/ChunkArray';
13 | import {ListItemSmall} from '../../components/Items';
14 |
15 |
16 | class ItemsByCategoryPage extends ItemsByCategoryPageController {
17 |
18 | render() {
19 | let detail = this.state.detail;
20 | let articleData = chunkArray(this.state.articles,3);
21 | let datas = articleData.map((element,index)=>{
22 | return (
23 | {
24 | element.map((elm,i)=>{
25 | return ( )
26 | })
27 | }
28 |
29 | );
30 | });
31 |
32 | return (
33 |
34 |
35 |
59 |
65 | {datas}
66 |
67 |
68 |
69 |
70 | );
71 | }
72 | }
73 |
74 |
75 |
76 | export {ItemsByCategoryPage};
--------------------------------------------------------------------------------
/src/pages/ItemsByCategory/ItemsByCategoryPageController.jsx:
--------------------------------------------------------------------------------
1 | import { Component } from 'react';
2 |
3 | // import img1 from '../../assets/images/property/img1.jpg';
4 | // import img2 from '../../assets/images/property/img2.jpg';
5 | // import img3 from '../../assets/images/property/img3.jpg';
6 |
7 | class ItemsByCategoryPageController extends Component {
8 | constructor(props) {
9 | super(props);
10 | this.state ={
11 | detail:{
12 | id:"1",
13 | name:"name",
14 | description:"description",
15 | image:"image",
16 | created_at:"created_at",
17 | },
18 | articles : [
19 |
20 | ],
21 | categoryLink:this.props.match.params.categorylink,
22 | };
23 |
24 | // Variables
25 |
26 | // end Variable
27 | document.title = "Application Library";
28 |
29 |
30 | }
31 | componentDidMount() {
32 | let categoryLink = "http://localhost:8000/www/getcategorydetail/" + this.state.categoryLink;
33 | fetch(categoryLink)
34 | .then(res => res.json())
35 | .then(
36 | (result) => {
37 | //me.setState({
38 | // "latestArticles":result.data.latestArticles
39 | // });
40 | this.setState({
41 | "detail" : result.data.categoryDetail,
42 | "articles":result.data.articles
43 | });
44 | this.props.parentmenucallback(result.data.category);
45 | },
46 | // Note: it's important to handle errors here
47 | // instead of a catch() block so that we don't swallow
48 | // exceptions from actual bugs in components.
49 | (error) => {
50 | this.setState({
51 | isLoaded: true,
52 | });
53 | }
54 | )
55 | }
56 |
57 | }
58 |
59 | export {ItemsByCategoryPageController};
--------------------------------------------------------------------------------
/src/pages/ItemsByCategory/ItemsByCategoryPageElement.jsx:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 |
3 |
4 | import latestArticle from '../../assets/images/bg1.png';
5 |
6 | import {DefaultColor} from '../../components/config';
7 |
8 | export const DivMainContainer = styled.div`
9 | display:flex;
10 | flex-direction:column;
11 | width: 100%;
12 | justify-content:center;
13 | align-items:center;
14 | background-image:url(${latestArticle});
15 | background-position:fixed;
16 | background-size: cover;
17 | background-attachment: fixed !important;
18 | background-color:red;
19 | `;
20 |
21 | export const DivFloat = styled.div`
22 | display:flex;
23 | flex-direction:${props=>props.flexDirection?props.flexDirection:'row'};;
24 | justify-content:${props=>props.justifyContent?props.justifyContent:'space-between'};
25 | align-items:${props=>props.alignItems?props.alignItems:'center'};
26 | width:${props=>props.width?props.width:'100%'};
27 | height:${props=>props.height?props.height:'100%'};
28 | margin-top:${props=>props.marginTop?props.marginTop:'0'};
29 | margin-bottom:${props=>props.marginBottom?props.marginBottom:'0'};
30 | background-color:${props=>props.bgColor};
31 | @media screen and (max-width: 400px) {
32 | & {
33 | display:flex;
34 | }
35 | }
36 | `;
37 |
38 | export const Header = styled.div`
39 |
40 | background-color:#2A2A32;
41 | width:100%;
42 | height:100%;
43 | display:flex;
44 | justify-content:center;
45 | `;
46 |
47 |
48 | /**
49 | * color:#ffffff;
50 | font-family:"Darker Grotesque";
51 | font-size:16px;
52 | */
53 | export const ULContainer = styled.ul`
54 | list-style: none;
55 | `;
56 | export const LIElement = styled.li`
57 | color:#ffffff;
58 | padding:5px;
59 | font-family:"Darker Grotesque";
60 | font-size:16px;
61 | &::before{
62 | content: "♥";
63 | color:${DefaultColor};
64 | font-weight: bold;
65 | display: inline-block;
66 | width: 1em;
67 | margin-left: -45px;
68 | }
69 | `;
70 |
71 | export const Alink = styled.a`
72 | color:${DefaultColor};
73 | cursor:pointer;
74 | &:hover{
75 | color:#ffffff;
76 | }
77 | `;
78 |
79 | export const HorizonalScrollContainer = styled.div`
80 | width:100%;
81 | display:flex;
82 | marginTop:50;
83 | marginBottom:20;
84 | overflow-x: auto;
85 | `;
86 |
87 |
88 | export const ListItemRow = styled.div`
89 | width:100%;
90 | display:flex;
91 | flex-direction:row;
92 | justify-content:space-between;
93 | align-items:flex-start;
94 | margin-top:50px;
95 | margin-bottom:20px;
96 | `;
97 |
98 |
--------------------------------------------------------------------------------
/src/pages/article/Article.css:
--------------------------------------------------------------------------------
1 | .divContent{
2 | display:flex;
3 | flex-direction:column;
4 | }
5 | .divContent div{
6 | width:100%;
7 | }
8 | .divContent code{
9 | padding:10px;
10 | margin-top:5px;
11 | margin-bottom:5px;
12 | background-color:#ffffff;
13 | color:#2B2847;
14 | width:90%;
15 | overflow-x:auto;
16 | }
17 | .divContent pre{
18 | padding:10px;
19 | margin-top:5px;
20 | margin-bottom:5px;
21 | background-color:#ffffff;
22 | color:#2B2847;
23 | width:90%;
24 | overflow-x:auto;
25 | }
--------------------------------------------------------------------------------
/src/pages/article/ArticlePage.jsx:
--------------------------------------------------------------------------------
1 |
2 | import React from 'react';
3 |
4 | import './Article.css';
5 | import {ArticlePageController} from './ArticlePageController';
6 | import {
7 | DivMainContainer,
8 | DivMainContainerInner,
9 | DivMainBody,
10 | DivMainLeft,DivMainLeftInner,
11 | DivMainRight,
12 | Header,HeaderImage,HeaderContent,
13 | DivAuthorContainer,DivAuthorImage,DivAuthorInfo,ReleaseDate,
14 |
15 | Title,Caption,
16 | CategoryContainer,
17 | AButton,
18 |
19 | DivMainContainerBody,
20 | DivCodeContainer,
21 | DivCode
22 |
23 | }
24 | from './ArticlePageElement';
25 |
26 | import {RelatedItem} from '../../components/Items';
27 |
28 | import Gist from "react-gist";
29 |
30 | const ArticleDetailElements=(props)=>{
31 | let _element = props.element;
32 | let _key = props.keyid;
33 | /*
34 | _element.type =>
35 | 1 for image,
36 | 2 for code,
37 | 3 for single code.
38 | 4 for text,
39 | 5 for movie.
40 |
41 | */
42 | //console.log('ArticleDetailElements');
43 | //console.log(_element);
44 | // console.log(_key);
45 | switch(_element.type){
46 | case '1': // image
47 | return (
48 |
49 |
{_element.title}
50 |
51 |
52 | );
53 | case '2': // gist code
54 | return (
55 |
56 |
{_element.title}
57 |
58 |
59 |
60 | );
61 | case '3': // single code
62 | return (
63 |
64 | {_element.title}
65 |
68 |
69 |
70 | );
71 | case '4': // text
72 | return (
73 |
74 |
{_element.title}
75 |
78 |
79 |
80 | );
81 |
82 | default :
83 | return
84 | }
85 |
86 | }
87 | class ArticlePage extends ArticlePageController {
88 |
89 | render() {
90 |
91 | let article = this.state.article;
92 | let categories = article.categories.map((element,index)=>{
93 | return (index===0?{element.name} :{element.name} );
94 | });
95 |
96 | let latestArticles = this.state.latestArticles.map((element,i)=>{
97 | return ( );
98 | });
99 |
100 | let articleDetails = this.state.articleDetail.map((element,i)=>{
101 | // type => 1 for image, 2 for code, 3 for text, 4 for movie.
102 | return ( );
103 | });
104 |
105 | return (
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 | {article.title}
114 |
115 | {categories}
116 |
117 |
118 |
119 |
120 |
121 |
122 | Author : {article.author_name}
123 | {article.created_at}
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
139 |
142 |
143 |
144 |
148 | {articleDetails}
149 |
150 |
151 |
152 | {latestArticles}
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 | );
161 | }
162 | }
163 |
164 |
165 |
166 | export {ArticlePage};
--------------------------------------------------------------------------------
/src/pages/article/ArticlePageController.jsx:
--------------------------------------------------------------------------------
1 |
2 |
3 | import { Component } from 'react';
4 |
5 | // import img1 from '../../assets/images/property/img1.jpg';
6 | // import img2 from '../../assets/images/property/img2.jpg';
7 | // import img3 from '../../assets/images/property/img3.jpg';
8 |
9 | class ArticlePageController extends Component {
10 | constructor(props) {
11 | super(props);
12 | this.state ={
13 | article : {
14 | id:1,
15 | title:'this is title',
16 | image:'this is image',
17 | intro:'this is intro',
18 | link:'this is link',
19 | description:'this is description',
20 | categories:[]
21 | },
22 | articleDetail :[],
23 | articlelink:this.props.match.params.articlelink,
24 | latestArticles : [],
25 | categories : []
26 | };
27 |
28 | // Variables
29 |
30 | // end Variable
31 | document.title = "Application Library";
32 |
33 | }
34 |
35 | componentDidMount() {
36 | let articlelink = "http://localhost:8000/www/getarticledetail/" + this.state.articlelink;
37 | fetch(articlelink)
38 | .then(res => res.json())
39 | .then(
40 | (result) => {
41 | // console.log(result.data.latestArticles);
42 | //me.setState({
43 | // "latestArticles":result.data.latestArticles
44 | // });
45 | this.setState({
46 | detail:result.data.detail,
47 | "article":result.data.article,
48 | "articleDetail":result.data.articleDetail,
49 | "latestArticles" : result.data.latestArticles,
50 | "categories" : result.data.category,
51 | });
52 | this.props.parentmenucallback(result.data.category);
53 | },
54 | // Note: it's important to handle errors here
55 | // instead of a catch() block so that we don't swallow
56 | // exceptions from actual bugs in components.
57 | (error) => {
58 | this.setState({
59 | isLoaded: true,
60 | });
61 | }
62 | )
63 | }
64 | }
65 |
66 | export {ArticlePageController};
--------------------------------------------------------------------------------
/src/pages/article/ArticlePageElement.jsx:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 |
3 |
4 | import latestArticle from '../../assets/images/bg1.png';
5 |
6 | import {DefaultColor} from '../../components/config';
7 |
8 | export const DivMainContainer = styled.div`
9 | display:flex;
10 | flex-direction:column;
11 | width: 100%;
12 | justify-content:center;
13 | align-items:center;
14 |
15 | `;
16 | export const DivMainContainerInner = styled.div`
17 | display:flex;
18 | flex-direction:column;
19 | justify-content:center;
20 | align-items:center;
21 | width: 100%;
22 | background-image:url(${latestArticle});
23 | background-position:fixed;
24 | background-size: cover;
25 | background-attachment: fixed !important;
26 |
27 | `;
28 |
29 |
30 |
31 | export const Header = styled.div`
32 | width:80%;
33 |
34 | display:flex;
35 | flex-direction:row;
36 | justify-content:space-between;
37 | align-items:center;
38 | margin-top:30px;
39 | margin-bottom:30px;
40 | `;
41 |
42 | export const HeaderImage = styled.div`
43 | width:50%;
44 | display:flex;
45 | flex-direction:row;
46 | justify-content:center;
47 | align-items:center;
48 | margin-bottom:10px;
49 | `;
50 |
51 | export const HeaderContent = styled.div`
52 | width:45%;
53 | display:flex;
54 | flex-direction:column;
55 | justify-content:flex-start;
56 |
57 | `;
58 |
59 | export const DivAuthorContainer = styled.div`
60 | width:100%;
61 | margin-top:10px;
62 | display:flex;
63 | flex-direction:row;
64 | justify-content:flex-start;
65 |
66 | `;
67 | export const DivAuthorImage = styled.div`
68 | width:100px;
69 | height:100px;
70 | `;
71 | export const DivAuthorInfo = styled.div`
72 | display:flex;
73 | flex-direction:column;
74 | justify-content:space-around;
75 | margin-left:20px;
76 | color:#788EBA;
77 | `;
78 | export const ReleaseDate = styled.label`
79 |
80 | `;
81 | /**
82 | * color:#ffffff;
83 | font-family:"Darker Grotesque";
84 | font-size:16px;
85 | */
86 | export const Title = styled.h1`
87 | font-family:"Cuprum";
88 | font-size:30px;
89 | color:#788EBA;
90 | `
91 | export const Caption = styled.h2`
92 | font-family:"Cuprum";
93 | font-size:20px;
94 | color:#788EBA;
95 | `
96 |
97 | export const CategoryContainer = styled.div`
98 | width:100%;
99 | display:flex;
100 | flex-direction:row;
101 | margin-bottom:10px;
102 | `
103 |
104 | export const Alink = styled.a`
105 | color:${DefaultColor};
106 | cursor:pointer;
107 | &:hover{
108 | color:#ffffff;
109 | }
110 | `;
111 |
112 | export const AButton = styled.a`
113 | font-family:"Cuprum";
114 | font-size:16px;
115 | color:#ffffff;
116 | cursor:pointer;
117 | background-color:${DefaultColor};
118 | padding:5px 10px 5px 10px;
119 | border-radius:50px;
120 | margin-left:${props=>props.marginLeft?props.marginLeft:0};
121 |
122 | display:flex;
123 | flex-direction:row;
124 | justify-content:flex-start;
125 | align-items:center;
126 |
127 | text-decoration:none;
128 |
129 | &:hover{
130 | color:${DefaultColor};
131 | background-color:#ffffff;
132 | }
133 | &:hover .clsIcon{
134 | color:${DefaultColor};
135 | }
136 | `;
137 |
138 | export const HorizonalScrollContainer = styled.div`
139 | width:100%;
140 | display:flex;
141 | marginTop:50;
142 | marginBottom:20;
143 | overflow-x: auto;
144 | `;
145 |
146 |
147 | export const ListItemRow = styled.div`
148 | width:100%;
149 | display:flex;
150 | flex-direction:row;
151 | justify-content:space-between;
152 | align-items:flex-start;
153 | margin-top:50px;
154 | margin-bottom:20px;
155 | `;
156 |
157 |
158 | export const DivMainContainerBody = styled.div`
159 | width:100%;
160 | display:flex;
161 | flex-direction:row;
162 | justify-content:center;
163 | align-items:flex-start;
164 | background-color:#3A3D46;
165 | `;
166 |
167 |
168 | export const DivMainBody = styled.div`
169 | width:100%;
170 | display:flex;
171 | flex-direction:row;
172 | `;
173 | export const DivMainLeft = styled.div`
174 | width:65%;
175 | background-color:#3A3D46;
176 | display:flex;
177 | flex-direction:column;
178 | justify-content:flex-start;
179 | align-items:flex-end;
180 | `;
181 | export const DivMainLeftInner = styled.div`
182 | width:83%;
183 | margin-right:2%;
184 | color:#ffffff;
185 | font-family:"Darker Grotesque";
186 | font-size:20px;
187 | margin-top:20px;
188 | `;
189 | export const DivMainRight = styled.div`
190 | width:35%;
191 | background-color:#43454D;
192 | `;
193 |
194 | export const DivCodeContainer = styled.div`
195 | display:flex;
196 | flex-direction:column;
197 | justify-content:flex-start;
198 | align-items:flex-start;
199 | margin-bottom:5px;
200 | `;
201 |
202 | export const DivCode = styled.div`
203 | display:flex;
204 | flex-direction:row;
205 | background-color:#EAEBF0;
206 | font-family:"ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace";
207 | font-size:14px;
208 | font-weight:bold;
209 | color:#24292f;
210 | padding:10px;
211 | width:90% !important;
212 | border-radius:5px;
213 | `;
--------------------------------------------------------------------------------
/src/pages/error/NotFoundPage.jsx:
--------------------------------------------------------------------------------
1 |
2 | import styled from "styled-components";
3 |
4 | export const DivMainContainer = styled.div`
5 | display:flex;
6 | flex-direction:column;
7 | width: 100%;
8 | height:100vh;
9 | background-color:#3c3c3c;
10 | justify-content:center;
11 | align-items:center;
12 | color:#788EBA;
13 |
14 | font-family:"Cuprum";
15 | font-size:30px;
16 | & h1{
17 | color:#ffffff;
18 | }
19 | & label{
20 | font-size:20px;
21 | }
22 | & a{
23 | color:gray;
24 | cursor:pointer;
25 | }
26 | & a:hover{
27 | color:#ffffff;
28 | }
29 | `;
30 |
31 | export const DivMsg = styled.div`
32 |
33 | font-size:30px;
34 |
35 | `;
36 |
37 |
38 |
39 | function NotFoundPage (){
40 |
41 | return (
42 |
43 |
44 |
45 | 4 zero 4
46 | What you're looking for may have been misplaced in long Term Memory!
47 | Mama is waiting you at home.
48 | SO, Let's go to the home!
49 |
50 |
51 | );
52 | }
53 |
54 |
55 |
56 | export {NotFoundPage};
--------------------------------------------------------------------------------
/src/pages/error/Particles.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import Particles from "react-particles-js";
3 |
4 | class Canvas extends Component {
5 | state = { width: "100vh", height: "100vh" };
6 |
7 | render() {
8 | const { width, height } = this.state;
9 | console.log(width, height);
10 | return (
11 |
34 | );
35 | }
36 | }
37 |
38 | export default Canvas;
39 |
--------------------------------------------------------------------------------
/src/pages/home/HomePage.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import {HomePageController} from './HomePageController';
4 | import {
5 | DivMainContainer,
6 | DivFloat,DivFloatBgImage,
7 | ULContainer,
8 | LIElement,
9 | HorizonalScrollContainer,
10 | ListItemContainer,
11 | ListItemRow,
12 |
13 | BannerContainer,BannerContainerLeft,
14 | DivMessage,DivAboutMe,
15 | ALink
16 | }
17 | from './HomePageElement';
18 |
19 | import {Icon} from '../../components/icons';
20 |
21 | import akn from '../../assets/images/akn.png';
22 | import logo from '../../components/logo.svg';
23 | import {DefaultColor} from '../../components/config';
24 |
25 | import {ListItemSmall} from '../../components/Items';
26 | import {MobileItem} from '../../components/Items';
27 |
28 | import {chunkArray} from '../../classes/ChunkArray';
29 |
30 | class HomePage extends HomePageController {
31 |
32 | render() {
33 | let articleData = chunkArray(this.state.articles,3);
34 |
35 | let datas = articleData.map((element,index)=>{
36 | return (
37 | {
38 | element.map((elm,i)=>{
39 | return ( )
40 | })
41 | }
42 | );
43 | });
44 | // let articles = this.state.articles;
45 | // //articles = chunkArray(articles,3);
46 | // let datas = articles.map((element,index)=>{
47 | // return( );
48 | // });
49 |
50 | let mobileApplicationsElements = this.state.mobileApplications.map((element,index)=>{
51 | return( index===0? : );
52 | });
53 |
54 | return (
55 |
56 |
57 |
58 |
59 |
66 | {//comments
67 | /*
68 | left
69 | */
70 | }
71 |
77 |
78 |
79 |
85 |
88 | Hello!
89 |
90 |
93 | I’m Aung Kyaw Nyunt ( AKN ).
94 |
97 | Software Engineer, DevOps/DevSecOps Engineer,
98 | Cloud Solution Architect as a freelancer.
99 |
100 |
101 |
102 |
103 |
110 | {//comments
111 | /*
112 | contact information
113 | */
114 | }
115 |
121 |
122 |
123 |
124 |
125 |
126 |
132 |
135 | No(26), Than Lan Street, Hlaing Township,Yangon City, Myanmar.
136 |
137 |
140 | +95 9763764572
141 |
142 |
145 | aungkyawnyunt2004@gmail.com
146 |
147 |
150 | https://www.applix.net
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
166 | {//comments
167 | /*
168 | left
169 | */
170 | }
171 |
177 |
178 |
179 |
185 |
191 |
194 | Download CV
195 |
196 |
201 | Hire Me
202 |
203 |
204 |
205 |
208 | My attitude is to deliver high quality work by honest for either small or huge.
209 |
210 |
211 |
212 |
213 |
214 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 | About Me
229 |
230 |
231 | I'm a Software Engineer, DevOps Engineer, Cloud Solution Architect as a freelancer.
232 | AWS Cloud Services and a background as above Project Management with over 5 years of intensive work experience in an Agile environment and worked the Senior Engineer level with over 10 yers.
233 | Before my journey of freelance, I worked in Zote By Focus Innovation as Chief Technology Office position.
234 | In my free time, I write article for my applix.net .
235 |
236 |
237 |
238 |
239 | My Mission Statement
240 |
241 | I Would ...
242 |
243 | Provide Schedule and Delivery On Time.
244 | Provide Impact Analystic (To provide "Pros and Cons")
245 | Provide Option ( example: I will provide two examples and give you the suggestions as well as "Pros and Cons", so you will have the right choice.)
246 | Provide Documentation. ( PDF format from me or you provide me confluence or something ...)
247 | I would provide future support for free. (depend on projects)
248 |
249 |
250 |
251 |
252 |
253 |
254 |
261 |
262 |
263 |
264 |
272 |
273 |
274 |
275 |
276 |
277 | Latest
278 |
279 |
280 | Article
281 |
282 |
283 |
284 | {datas}
285 |
286 |
287 |
288 |
289 |
290 |
299 |
300 |
301 |
302 |
303 | Mobile
304 |
305 |
306 | Applications
307 |
308 |
309 |
310 |
317 |
320 | {mobileApplicationsElements}
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 | );
331 | }
332 | }
333 |
334 |
335 |
336 | export {HomePage};
--------------------------------------------------------------------------------
/src/pages/home/HomePageController.jsx:
--------------------------------------------------------------------------------
1 | import { Component } from 'react';
2 |
3 |
4 | class HomePageController extends Component {
5 | constructor(props) {
6 | super(props);
7 | this.state ={
8 | isOpenSlider:true,
9 | activeBannerTab : 'forsale',
10 | articles : [
11 |
12 | ],
13 | mobileApplications : [
14 |
15 | ],
16 | };
17 |
18 | // Variables
19 |
20 | // end Variable
21 | document.title = "Application Library";
22 |
23 |
24 |
25 | }
26 |
27 | componentDidMount() {
28 | fetch("http://localhost:8000/www/gethomedata/")
29 | .then(res => res.json())
30 | .then(
31 | (result) => {
32 | //me.setState({
33 | // "latestArticles":result.data.latestArticles
34 | // });
35 | this.setState({
36 | "articles":result.data.latestArticles,
37 | "mobileApplications":result.data.mobileAppLists
38 | });
39 | this.props.parentmenucallback(result.data.category);
40 | },
41 | // Note: it's important to handle errors here
42 | // instead of a catch() block so that we don't swallow
43 | // exceptions from actual bugs in components.
44 | (error) => {
45 | this.setState({
46 | isLoaded: true,
47 | });
48 | }
49 | )
50 | }
51 |
52 |
53 | }
54 |
55 | export {HomePageController};
--------------------------------------------------------------------------------
/src/pages/home/HomePageElement.jsx:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 |
3 |
4 | import latestArticle from '../../assets/images/bg1.png';
5 | import mobileAppImg from '../../assets/images/bg2.png';
6 |
7 | import {DefaultColor} from '../../components/config';
8 |
9 | export const DivMainContainer = styled.div`
10 | display:flex;
11 | flex-direction:column;
12 | width: 100%;
13 | justify-content:center;
14 | align-items:center;
15 | background-color:#2A2A32;
16 | background-attachment: fixed !important;
17 |
18 | `;
19 |
20 | export const BannerContainer = styled.div`
21 | display:flex;
22 | justify-content:center;
23 | background-color:#2A2A32;
24 | width:80%;
25 | height:100%;
26 |
27 | padding-top:50px;
28 | @media screen and (max-width: 400px) {
29 | & {
30 | display:flex;
31 | }
32 | }
33 | `;
34 |
35 | export const BannerContainerLeft = styled.div`
36 | display:flex;
37 | flex-direction:column;
38 | justify-content:center;
39 | align-items:flex-start;
40 | width:60%;
41 | @media screen and (max-width: 400px) {
42 | & {
43 | display:flex;
44 | }
45 | }
46 | `;
47 |
48 | export const DivMessage = styled.div`
49 | display:flex;
50 | flex-direction:column;
51 | justify-content:center;
52 | align-items:center;
53 | width:100%;
54 |
55 | background-image:url(${mobileAppImg});
56 | background-position:fixed;
57 | background-size: contain;
58 | background-attachment: fixed !important;
59 |
60 | @media screen and (max-width: 400px) {
61 | & {
62 | display:flex;
63 | }
64 | }
65 | `;
66 |
67 | export const DivAboutMe = styled.div`
68 | display:flex;
69 | flex-direction:column;
70 | justify-content:center;
71 | align-items:flex-start;
72 | width:80%;
73 | @media screen and (max-width: 400px) {
74 | & {
75 | display:flex;
76 | }
77 | }
78 | `;
79 |
80 | export const DivFloat = styled.div`
81 | display:flex;
82 | flex-direction:${props=>props.flexDirection?props.flexDirection:'row'};;
83 | justify-content:${props=>props.justifyContent?props.justifyContent:'space-between'};
84 | align-items:${props=>props.alignItems?props.alignItems:'center'};
85 | width:${props=>props.width?props.width:'100%'};
86 | height:${props=>props.height?props.height:'100%'};
87 | margin-top:${props=>props.marginTop?props.marginTop:'0'};
88 | margin-bottom:${props=>props.marginBottom?props.marginBottom:'0'};
89 | background-color:${props=>props.bgColor};
90 | @media screen and (max-width: 400px) {
91 | & {
92 | display:flex;
93 | }
94 | }
95 | `;
96 |
97 | export const DivFloatBgImage = styled.div`
98 | display:flex;
99 | flex-direction:${props=>props.flexDirection?props.flexDirection:'row'};;
100 | justify-content:${props=>props.justifyContent?props.justifyContent:'space-between'};
101 | align-items:${props=>props.alignItems?props.alignItems:'center'};
102 | width:${props=>props.width?props.width:'100%'};
103 | height:${props=>props.height?props.height:'100%'};
104 | background-color:${props=>props.bgColor};
105 |
106 | background-image:url(${latestArticle});
107 | background-position:fixed;
108 | background-size: contain;
109 | background-attachment: fixed !important;
110 |
111 | `;
112 |
113 | export const ULContainer = styled.ul`
114 | list-style: none;
115 | `;
116 |
117 | export const LIElement = styled.li`
118 | color:#ffffff;
119 | padding:5px;
120 | font-family:"Darker Grotesque";
121 | font-size:16px;
122 | &::before{
123 | content: "♥";
124 | color:${DefaultColor};
125 | font-weight: bold;
126 | display: inline-block;
127 | width: 1em;
128 | margin-left: -45px;
129 | }
130 | `;
131 |
132 | export const HorizonalScrollContainer = styled.div`
133 | width:100%;
134 | display:flex;
135 | marginTop:50;
136 | marginBottom:20;
137 | overflow-x: auto;
138 | `;
139 |
140 | export const ListItemContainer = styled.div`
141 | display:flex;
142 | flex-direction:column;
143 | justify-content:flex-start;
144 | align-items:flex-start;
145 | width:80%;
146 | `;
147 |
148 | export const ListItemRow = styled.div`
149 | width:100%;
150 | display:flex;
151 | flex-direction:row;
152 | justify-content:space-between;
153 | align-items:flex-start;
154 | margin-top:50px;
155 | margin-bottom:20px;
156 | `;
157 |
158 | export const ALink = styled.a`
159 | background-color:${props=>props.bgColor?props.bgColor:"#000000"};
160 | border:1px solid ${props=>props.borderColor?props.borderColor:DefaultColor};
161 | color:#ffffff;
162 | padding:10px;
163 | border-radius:10px;
164 | text-decoration:none;
165 | `;
166 |
167 |
168 |
--------------------------------------------------------------------------------
/src/pages/index.jsx:
--------------------------------------------------------------------------------
1 | import {HomePage} from './home/HomePage';
2 | import {ItemsByCategoryPage} from './ItemsByCategory/ItemsByCategoryPage';
3 | import {ArticlePage} from './article/ArticlePage';
4 |
5 | // ### ### ### ### Error pages
6 | import {NotFoundPage} from './error/NotFoundPage';
7 |
8 | export {
9 | HomePage,
10 | ItemsByCategoryPage,
11 |
12 | ArticlePage,
13 |
14 |
15 | NotFoundPage
16 | }
--------------------------------------------------------------------------------
/src/pages/login/LogInPage.jsx:
--------------------------------------------------------------------------------
1 | import React, { Component } from 'react';
2 | class LogInPage extends Component {
3 | state = {
4 |
5 | }
6 |
7 | render() {
8 | return (
9 | this is login page
10 | );
11 | }
12 | }
13 |
14 |
15 |
16 | export {LogInPage};
--------------------------------------------------------------------------------
/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------