├── .env.development ├── .env.production ├── .env.staging ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── babel.config.js ├── package-lock.json ├── package.json ├── public ├── favicon.ico └── index.html ├── src ├── App.vue ├── assets │ ├── grid.css │ ├── img │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ └── background.png │ ├── logo.png │ ├── logo.svg │ └── logo2.png ├── components │ ├── AppBar.vue │ ├── Card.vue │ ├── Dashboard.vue │ ├── Filter.vue │ ├── Login.vue │ ├── Mentee.vue │ ├── ProfileCard.vue │ ├── ProfileNavigation.vue │ └── Register.vue ├── layout │ ├── empty.vue │ └── index.vue ├── locales │ ├── en │ │ ├── base.js │ │ ├── error.js │ │ ├── index.js │ │ └── pages.js │ ├── index.js │ └── tr │ │ ├── base.js │ │ ├── error.js │ │ ├── index.js │ │ └── pages.js ├── main.js ├── plugins │ ├── entity │ │ └── baseEntity.js │ ├── fontawesome │ │ └── fontAwesome.js │ └── vuetify.js ├── router │ ├── index.js │ └── modules │ │ ├── base.js │ │ └── userAction.js ├── services │ ├── TokenService.js │ └── apiService.js ├── store │ ├── actions.type.js │ ├── index.js │ ├── modules │ │ └── user.module.js │ └── mutations.type.js └── views │ ├── Home.vue │ ├── Login.vue │ ├── Mentors.vue │ └── Profile.vue └── vue.config.js /.env.development: -------------------------------------------------------------------------------- 1 | # just a flag 2 | ENV = 'development' 3 | NODE_ENV = 'development' 4 | 5 | # base api 6 | VUE_APP_BASE_API = 'https://mentor-api.devnot.com' -------------------------------------------------------------------------------- /.env.production: -------------------------------------------------------------------------------- 1 | # just a flag 2 | ENV = 'production' 3 | NODE_ENV = 'production' 4 | 5 | # base api 6 | VUE_APP_BASE_API = 'http://localhost:3000/api' -------------------------------------------------------------------------------- /.env.staging: -------------------------------------------------------------------------------- 1 | # just a flag 2 | ENV = 'staging' 3 | NODE_ENV = 'staging' 4 | 5 | # base api 6 | VUE_APP_BASE_API = 'http://localhost:3000/api' -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | 6 | # local env files 7 | .env.local 8 | .env.*.local 9 | 10 | # Log files 11 | npm-debug.log* 12 | yarn-debug.log* 13 | yarn-error.log* 14 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Devnot Mentor Projesine Katkı 2 | ============================= 3 | İletişim kanalları 4 | ------------ 5 | 6 | 7 | - Hata (Bug) bildirimi, özellik (feature) önerisi veya proje kaynak kodu için [GitHub](https://github.com/passwall/passwall-server/issues). 8 | - Konu tartışmaları için [Discord](https://discord.com/invite/P8VAPDnB). 9 | 10 | 11 | Katkıda bulunacak bir şeyi nasıl bulabilirim ? 12 | ------------ 13 | 1. Öncelikle katkıda bulunulacak her konunun bir issue'su olması gerektiğini unutmayın. Bunun için [issue](https://github.com/devnotcom/devnot-mentor-front-end/issues) sayfasına bakabilirsiniz. 14 | 15 | 1. Issue sayfasında öncelikle [help wanted](https://github.com/devnotcom/devnot-mentor-front-end/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) issue'larına bakın. 16 | 17 | 1. Sonrasında koddaki [// TODO:](https://github.com/devnotcom/devnot-mentor-front-end/search?q=TODO&unscoped_q=TODO) kısımlarını düzeltmeyi deneyebilirsiniz. 18 | 19 | 1. Eğer yeni bir özellik (feature) olarak iyi bir fikriniz varsa veya bir hata (bug) bulursanız bu konuda bir konu (issue) açmaktan çekinmeyin ve eğer konu üzerinde çalışmak istiyorsanız mutlaka belirtin. 20 | 21 | Görevlendirmeler 22 | ------------ 23 | 24 | Katkıda bulunucak bir şey bulduğunuzda; 25 | 1. Eğer henüz açılmamışsa onunla ilgili bir issue açın, 26 | 27 | 1. Bu issue için kimsenin görevlendirilmediğinden emin olun, 28 | 29 | 1. Issue üzerinde çalışmak istediğinizi açmış olduğunuz issue'nun sonunda belirtin. 30 | 31 | Bu işlemler sonrasında ilgili issue için görevlendirilirsisniz (assign). 32 | 33 | Commit'ler ve Pull Request'ler 34 | ------------ 35 | 36 | Nitelikli pull request'ler - yamalar, iyileştirmeler, yeni özellikler - bizim için harika yardımlardır. Bu yamalar, iyileştirmeler, yeni özellikler için pull request'ler yapılırken konuya (issue) odaklanılmalı ve konu ile ilgilisi olmayan commit atmaktan kaçınılmalıdır. 37 | 38 | Lütfen büyük kapsamlı ve ciddi pull request yapmadan önce bilgilendirme yapın (yeni özellikleri uygulama, kod düzenleme gibi). Aksi takdirde proje geliştiricilerinin değişiklik yapılmasını istemeyebileceği bir feature vb. üzerinde çalışmak için gereksiz zaman harcama riskiyle karşı karşıya kalabilirsiniz. 39 | 40 | ### Branch adlandırma politikası 41 | Devnot Mentor aşağıdaki branch adlandırma politikasını kullanır. 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 |
InstanceBranchDescription, Instructions, Notes
StablestableAccepts merges from Working and Hotfixes
WorkingmasterAccepts merges from Features/Issues and Hotfixes
Features/Issuestopic-*Always branch off HEAD of Working
Hotfixhotfix-*Always branch off Stable
74 | 75 | Branch ve workflow hakkında daha fazla bilgi [burada](https://gist.github.com/digitaljhelms/4287848) 76 | 77 | ### Yeni Contributor'lar için 78 | 79 | Eğer daha önce hiç pull request yapmadıysanız aramıza hoşgeldiniz :tada: :smile:. 80 | 81 | 1. Projeyi öncelikle fork'layın yani kendi alanınıza alın. ([Fork](http://help.github.com/fork-a-repo/)) ve remote'ları yapılandırın: 82 | 83 | ```bash 84 | # Repo forkunuzu geçerli dizin üzerine klonlayın 85 | git clone https://github.com// 86 | # Klonlanan dizine gidin 87 | cd 88 | # Orjinal repoyu "upstream" adlı bir remote called'a atayın 89 | git remote add upstream https://github.com/hoodiehq/ 90 | ``` 91 | 92 | 2. Eğer daha önce fork yaptıysanız, upstream üzerinden en son değişiklikleri alın: 93 | 94 | ```bash 95 | git checkout master 96 | git pull upstream master 97 | ``` 98 | 99 | 3. Feature, fix ve değişiklikleriniz için yeni bir branch oluşturun (ana projenin development branch'ı olan master dışında): 100 | 101 | ```bash 102 | git checkout -b 103 | ``` 104 | 105 | 4. Uygun olduğunda testleri güncellediğinizden veya yeni bir test eklediğinizden emin olun. Patch'ler ve feature'lar test olmadan kabul edilmeyecektir. 106 | 107 | 5. Eklediğiniz veya değişiklik yaptığınız düzenlemelerin belgelendirmesini `README.md` dosyası üzerinde yapmayı unutmayın. 108 | 109 | 6. Kendi oluşturduğunuz branch'ınız üzerinden fork'unuza push edin: 110 | 111 | ```bash 112 | git push origin 113 | ``` 114 | 115 | 7. Net, anlaşılır bir başlık ve açıklama ile pull request açın. [Konu hakkında yardımcı döküman](https://help.github.com/articles/using-pull-requests/) 116 | 117 | Açık kaynak projeye nasıl katkıda bulunulabileceğini anlatan daha detaylı bir dokümana [şuradan](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github) ulaşabilirsiniz. 118 | 119 | Hata bildirimi (Bug report) 120 | ------------ 121 | 122 | Bir hata bildirimi için issue açarken aşağıdaki beş soruya cevap verdiğinizden emin olun. 123 | 1. Kullanılan Vue sürümü nedir? 124 | 2. Hangi işletim sistemi ve işlemci mimarisi kullanıyorsunuz? 125 | 3. Ne yaptın? 126 | 4. Ne görmeyi bekliyordun? 127 | 5. Onun yerine ne gördün? -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Devnot 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 | 5 | 6 | 7 | # Devnot Nedir? 8 | 9 | Güncel yazılım konularıyla ilgili yazılar yayınlayan, yazılım konferansları, buluşmalar ve kamplar düzenleyen yazılım geliştirici topluluğudur. 10 | 11 | 12 | 13 | # Devnot Mentor Projesi Nedir? 14 | 15 | Yazılım alanında kendini geliştirmek isteyen öğrencilerin(mentilerin) kendilerinden daha tecrübeli yazılımcılar(mentorlar) bulmalarını, onlarla tanışmalarını ve düzenli görüşmeler yapmalarını sağlayacak açık kaynak kod bir topluluk projesidir. 16 | 17 | 18 | 19 | Yazılımcı olmayı veya mesleğinde daha iyi noktalara gelmeyi hedefleyen kişileri(öğrenci) bu program kapsamında bir mentorle eşleştirerek düzenli görüşmeler yapmalarını amaçlamaktayız. Bu görüşmelerde öğrenciler mentorlerine sorular sorabilecek, çözmekte zorlandıkları konularda yardım isteyebilecek, gelişimleri için uygun kaynak önerilerini dinleyebilecekler. 20 | 21 | 22 | 23 | 24 | # Başlarken 25 | 26 | devnot-mentor-front-end projesini çalıştırabilmek için bilgisayarınıza [Node.js](https://nodejs.org/) yüklemelisiniz. 27 | 28 | Bağımlılıkları yükleme ve dev ortamı üzerinde çalıştırma. 29 | 30 | ```sh 31 | $ cd devnot-mentor-frontend 32 | $ npm install 33 | $ npm run dev 34 | ``` 35 | 36 | Prod veya staging ortamında çalıştırmak için... 37 | 38 | ```sh 39 | $ npm run staging 40 | $ npm run production 41 | ``` 42 | 43 | Tüm ortamlarda build ve minify işlemleri. 44 | ```sh 45 | $ npm run build-dev 46 | $ npm run build-staging 47 | $ npm run build-production 48 | ``` 49 | 50 | # Paketler 51 | 52 | devnot-mentor-front-end bir dizi açık kaynak projesi kullanır; 53 | 54 | * [VueJS](https://vuejs.org/) - Kullanıcı arayüzlerini oluşturduğumuz framework. 55 | * [Vuetify](https://vuetifyjs.com/) - Material Componentlere sahip bir Vue UI kütüphanesidir. 56 | * [Axios](https://github.com/imcvampire/vue-axios) - HTTP istekleri (GET , POST , PUT , DELETE) için kullanılan kütüphane. 57 | * [Vuex](https://vuex.vuejs.org/) - Vuex kütüphanesi ile state yönetimi. 58 | * [i18n](https://kazupon.github.io/vue-i18n/) - Çoklu dil desteği kütüphanesi 59 | * [FontAwesome](https://github.com/FortAwesome/vue-fontawesome) - Vektör ikonlar 60 | 61 | # Dökümantasyon 62 | 63 | ### Mimari 64 | 65 | 📁 Assets - Fotoğraf ve stillerimizi sakladığımız klasör 66 | 67 | 📁 Services - JWT yada API servislerini tanımladığımız klasör 68 | 69 | 📁 Components - Sayfa bileşenlerinin bulunduğu klasör(Appbar, Sidebar, Cards etc.). 70 | 71 | 📁 Entities - Form elemanları için tanımlanan entitiler. 72 | 73 | 📁 Plugins - Fontawesome Vuetify gibi eklentilerin yönetildiği klasör 74 | 75 | 📁 Layout - Sayfa yerleşimleri. 76 | 77 | 📁 Locales - Çoklu dil desteği 78 | 79 | 📁 Router - Projede kullanılacak routeların tanımlamaları. 80 | 81 | 📁 Store - Store yönetimi 82 | 83 | 📁 Views - Bunu zaten biliyorsun. 84 | 85 | ### Routing, layout ve views 86 | 87 | Sayfalarımızı doğrudan App.vue'ye göndermek yerine bir ara katman oluşturduk. Böylece Vue sayfalarımız için farklı içerik yer tutucularını tanımlayabiliriz. Kullanımı gerçekten çok kolay. Öğreneceksiniz. 88 | 89 | ##### - Layout 90 | 91 | Layout bir vue sayfasıdır. İçerik yer tutucunuzu oluşturabilirsiniz. 92 | 93 | ```html 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | ``` 103 | 104 | ##### - Route tanımlamaları 105 | 106 | **/router/modules** içerinde bir modül oluşturun . 107 | 108 | ```javascript 109 | import Layout from "@/layout/index.vue"; 110 | const base = { 111 | path: "/View", 112 | name: "View", 113 | component: Layout, 114 | children: [ 115 | { 116 | path: "/", 117 | name: "", 118 | component: () => import("@/views/base/View"), 119 | }, 120 | ], 121 | }; 122 | export default base; 123 | ``` 124 | 125 | Layoutunuzu /layout klasöründen **Import** edin. Kök route tanımlayın ve layoutunuzu component olarak ekleyin. Children dizininin içerisindeki componentler sayfalarınız olmalı. 126 | 127 | Modüllerinizi **index.js** içerisinde import edin. 128 | 129 | ```javascript 130 | import base from "@/router/modules/base"; 131 | const routes = [ 132 | base 133 | ]; 134 | const router = new VueRouter({ 135 | mode: "history", 136 | base: process.env.BASE_URL, 137 | routes, 138 | }); 139 | 140 | ``` 141 | 142 | ### State Yönetimi 143 | 144 | Vuex, Vue.js uygulamaları için bir durum yönetimi modeli/kitaplığıdır. action.type ve mutasyons.type öğelerinizi store klasöründe bir **MAGIC STRING** olarak tanımlayın. 145 | 146 | **actions.tpye.js** içerisinde 147 | 148 | ```javascript 149 | //#region Base 150 | export const BASE_GET_METHOD = "baseGetMethod"; 151 | export const BASE_POST_METHOD = "basePostMethod"; 152 | export const BASE_PUT_METHOD = "basePutMethod"; 153 | export const BASE_DELETE_METHOD = "baseDeleteMethod"; 154 | //#endregion 155 | 156 | ``` 157 | 158 | **mutations.type.js** içerisinde 159 | 160 | ```javascript 161 | //#region Base 162 | export const BASE_SET_METHOD = "baseSetMethod"; 163 | //#endregion 164 | ``` 165 | 166 | **modules** klasöründe yeni bir modül tanımlayın. Api servisini, action ve mutation tanımlamalarınızı import edin. 167 | 168 | ```javascript 169 | import apiService from "@/services/api.service"; 170 | import { BASE_GET_METHOD,} from "@/store/actions.type"; 171 | import { BASE_SET_METHOD } from "@/store/mutations.type"; 172 | ``` 173 | 174 | **actions** sabitini tanımlayın. 175 | 176 | ```javascript 177 | const actions = { 178 | [BASE_GET_METHOD](context) { 179 | return new Promise((resolve, reject) => { 180 | apiService.get("/users") 181 | .then((response) => { 182 | context.commit(BASE_SET_METHOD, response); 183 | resolve(response); 184 | }) 185 | .catch((err) => { 186 | reject(err); 187 | }); 188 | 189 | }); 190 | } 191 | } 192 | ``` 193 | 194 | API'den bir data döndüğünde mutation'a commit atın. 195 | 196 | ```javascript 197 | const mutations = { 198 | [BASE_SET_METHOD](state, payload) { 199 | state.data = payload.data; 200 | }, 201 | }; 202 | ``` 203 | 204 | **state** ve **getters** sabitlerini tanımlayın 205 | 206 | ```javascript 207 | const state = { 208 | data: [], 209 | }; 210 | const getters = { 211 | getData: (state) => { 212 | return state.data; 213 | }, 214 | }; 215 | ``` 216 | 217 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "devnot-mentor", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "lint": "vue-cli-service lint", 7 | "build-dev": "vue-cli-service build --mode development", 8 | "build-production": "vue-cli-service build --mode production", 9 | "build-staging": "vue-cli-service build --mode staging", 10 | "dev": "vue-cli-service serve --mode development", 11 | "production": "vue-cli-service serve --mode production", 12 | "stagging": "vue-cli-service serve --mode stagging" 13 | }, 14 | "dependencies": { 15 | "@fortawesome/fontawesome-svg-core": "^1.2.35", 16 | "@fortawesome/free-brands-svg-icons": "^5.15.3", 17 | "@fortawesome/free-solid-svg-icons": "^5.15.3", 18 | "@fortawesome/vue-fontawesome": "^2.0.2", 19 | "axios": "^0.21.1", 20 | "core-js": "^3.6.5", 21 | "vue": "^2.6.11", 22 | "vue-axios": "^3.2.4", 23 | "vue-i18n": "^8.24.4", 24 | "vue-router": "^3.5.1", 25 | "vuetify": "^2.4.0", 26 | "vuex": "^3.6.2" 27 | }, 28 | "devDependencies": { 29 | "@vue/cli-plugin-babel": "~4.5.0", 30 | "@vue/cli-plugin-eslint": "~4.5.0", 31 | "@vue/cli-service": "~4.5.0", 32 | "babel-eslint": "^10.1.0", 33 | "eslint": "^6.7.2", 34 | "eslint-plugin-vue": "^6.2.2", 35 | "sass": "~1.32.0", 36 | "sass-loader": "^10.0.0", 37 | "vue-cli-plugin-vuetify": "~2.4.1", 38 | "vue-template-compiler": "^2.6.11", 39 | "vuetify-loader": "^1.7.0" 40 | }, 41 | "eslintConfig": { 42 | "root": true, 43 | "env": { 44 | "node": true 45 | }, 46 | "extends": [ 47 | "plugin:vue/essential", 48 | "eslint:recommended" 49 | ], 50 | "parserOptions": { 51 | "parser": "babel-eslint" 52 | }, 53 | "rules": {} 54 | }, 55 | "browserslist": [ 56 | "> 1%", 57 | "last 2 versions", 58 | "not dead" 59 | ] 60 | } 61 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devnotcom/devnot-mentor-front-end/a130f5086bc2c869935a52861ec92765a02cf267/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= htmlWebpackPlugin.options.title %> 9 | 10 | 11 | 12 | 13 | 16 |
17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | -------------------------------------------------------------------------------- /src/assets/grid.css: -------------------------------------------------------------------------------- 1 | .container { 2 | margin-left: auto; 3 | margin-right: auto; 4 | padding-left: 15px; 5 | padding-right: 15px; 6 | } 7 | .container-fluid { 8 | width: 100%; 9 | } 10 | 11 | @media (min-width: 768px) { 12 | .container { 13 | width: 750px; 14 | } 15 | } 16 | 17 | @media (min-width: 992px) { 18 | .container { 19 | width: 970px; 20 | } 21 | } 22 | 23 | @media (min-width: 1200px) { 24 | .container { 25 | width: 1170px; 26 | } 27 | } 28 | 29 | .row { 30 | display: grid; 31 | grid-template-columns: repeat(12, 1fr); 32 | grid-gap: 20px; 33 | } 34 | 35 | .col-xs-12 { 36 | grid-column: span 12; 37 | } 38 | 39 | .col-xs-11 { 40 | grid-column: span 11; 41 | } 42 | 43 | .col-xs-10 { 44 | grid-column: span 10; 45 | } 46 | 47 | .col-xs-9 { 48 | grid-column: span 9; 49 | } 50 | 51 | .col-xs-8 { 52 | grid-column: span 8; 53 | } 54 | 55 | .col-xs-7 { 56 | grid-column: span 7; 57 | } 58 | 59 | .col-xs-6 { 60 | grid-column: span 6; 61 | } 62 | 63 | .col-xs-5 { 64 | grid-column: span 5; 65 | } 66 | 67 | .col-xs-4 { 68 | grid-column: span 4; 69 | } 70 | 71 | .col-xs-3 { 72 | grid-column: span 3; 73 | } 74 | 75 | .col-xs-2 { 76 | grid-column: span 2; 77 | } 78 | 79 | .col-xs-1 { 80 | grid-column: span 1; 81 | } 82 | 83 | @media (min-width: 768px) { 84 | .col-sm-12 { 85 | grid-column: span 12; 86 | } 87 | 88 | .col-sm-11 { 89 | grid-column: span 11; 90 | } 91 | 92 | .col-sm-10 { 93 | grid-column: span 10; 94 | } 95 | 96 | .col-sm-9 { 97 | grid-column: span 9; 98 | } 99 | 100 | .col-sm-8 { 101 | grid-column: span 8; 102 | } 103 | 104 | .col-sm-7 { 105 | grid-column: span 7; 106 | } 107 | 108 | .col-sm-6 { 109 | grid-column: span 6; 110 | } 111 | 112 | .col-sm-5 { 113 | grid-column: span 5; 114 | } 115 | 116 | .col-sm-4 { 117 | grid-column: span 4; 118 | } 119 | 120 | .col-sm-3 { 121 | grid-column: span 3; 122 | } 123 | 124 | .col-sm-2 { 125 | grid-column: span 2; 126 | } 127 | 128 | .col-sm-1 { 129 | grid-column: span 1; 130 | } 131 | } 132 | 133 | @media (min-width: 992px) { 134 | .col-md-12 { 135 | grid-column: span 12; 136 | } 137 | 138 | .col-md-11 { 139 | grid-column: span 11; 140 | } 141 | 142 | .col-md-10 { 143 | grid-column: span 10; 144 | } 145 | 146 | .col-md-9 { 147 | grid-column: span 9; 148 | } 149 | 150 | .col-md-8 { 151 | grid-column: span 8; 152 | } 153 | 154 | .col-md-7 { 155 | grid-column: span 7; 156 | } 157 | 158 | .col-md-6 { 159 | grid-column: span 6; 160 | } 161 | 162 | .col-md-5 { 163 | grid-column: span 5; 164 | } 165 | 166 | .col-md-4 { 167 | grid-column: span 4; 168 | } 169 | 170 | .col-md-3 { 171 | grid-column: span 3; 172 | } 173 | 174 | .col-md-2 { 175 | grid-column: span 2; 176 | } 177 | 178 | .col-md-1 { 179 | grid-column: span 1; 180 | } 181 | } 182 | 183 | @media (min-width: 1200px) { 184 | .col-lg-12 { 185 | grid-column: span 12; 186 | } 187 | 188 | .col-lg-11 { 189 | grid-column: span 11; 190 | } 191 | 192 | .col-lg-10 { 193 | grid-column: span 10; 194 | } 195 | 196 | .col-lg-9 { 197 | grid-column: span 9; 198 | } 199 | 200 | .col-lg-8 { 201 | grid-column: span 8; 202 | } 203 | 204 | .col-lg-7 { 205 | grid-column: span 7; 206 | } 207 | 208 | .col-lg-6 { 209 | grid-column: span 6; 210 | } 211 | 212 | .col-lg-5 { 213 | grid-column: span 5; 214 | } 215 | 216 | .col-lg-4 { 217 | grid-column: span 4; 218 | } 219 | 220 | .col-lg-3 { 221 | grid-column: span 3; 222 | } 223 | 224 | .col-lg-2 { 225 | grid-column: span 2; 226 | } 227 | 228 | .col-lg-1 { 229 | grid-column: span 1; 230 | } 231 | } 232 | -------------------------------------------------------------------------------- /src/assets/img/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devnotcom/devnot-mentor-front-end/a130f5086bc2c869935a52861ec92765a02cf267/src/assets/img/1.png -------------------------------------------------------------------------------- /src/assets/img/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devnotcom/devnot-mentor-front-end/a130f5086bc2c869935a52861ec92765a02cf267/src/assets/img/2.png -------------------------------------------------------------------------------- /src/assets/img/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devnotcom/devnot-mentor-front-end/a130f5086bc2c869935a52861ec92765a02cf267/src/assets/img/3.png -------------------------------------------------------------------------------- /src/assets/img/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devnotcom/devnot-mentor-front-end/a130f5086bc2c869935a52861ec92765a02cf267/src/assets/img/background.png -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devnotcom/devnot-mentor-front-end/a130f5086bc2c869935a52861ec92765a02cf267/src/assets/logo.png -------------------------------------------------------------------------------- /src/assets/logo.svg: -------------------------------------------------------------------------------- 1 | Artboard 46 2 | -------------------------------------------------------------------------------- /src/assets/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devnotcom/devnot-mentor-front-end/a130f5086bc2c869935a52861ec92765a02cf267/src/assets/logo2.png -------------------------------------------------------------------------------- /src/components/AppBar.vue: -------------------------------------------------------------------------------- 1 | 197 | 198 | 246 | 247 | 258 | -------------------------------------------------------------------------------- /src/components/Card.vue: -------------------------------------------------------------------------------- 1 | 115 | 116 | 127 | 128 | 134 | -------------------------------------------------------------------------------- /src/components/Dashboard.vue: -------------------------------------------------------------------------------- 1 | 53 | 54 | 81 | -------------------------------------------------------------------------------- /src/components/Filter.vue: -------------------------------------------------------------------------------- 1 | 79 | 80 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /src/components/Login.vue: -------------------------------------------------------------------------------- 1 | 49 | 50 | 81 | 82 | 92 | -------------------------------------------------------------------------------- /src/components/Mentee.vue: -------------------------------------------------------------------------------- 1 | 98 | 99 | 149 | 150 | 155 | -------------------------------------------------------------------------------- /src/components/ProfileCard.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 61 | 62 | 67 | -------------------------------------------------------------------------------- /src/components/ProfileNavigation.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /src/components/Register.vue: -------------------------------------------------------------------------------- 1 | 59 | 60 | 77 | 78 | 92 | -------------------------------------------------------------------------------- /src/layout/empty.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/layout/index.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/locales/en/base.js: -------------------------------------------------------------------------------- 1 | export default { 2 | base: "DEVNOT MENTOR", 3 | }; -------------------------------------------------------------------------------- /src/locales/en/error.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devnotcom/devnot-mentor-front-end/a130f5086bc2c869935a52861ec92765a02cf267/src/locales/en/error.js -------------------------------------------------------------------------------- /src/locales/en/index.js: -------------------------------------------------------------------------------- 1 | import base from "./base"; 2 | import pages from "./pages"; 3 | import error from "./error"; 4 | 5 | export default { 6 | base, 7 | pages, 8 | error, 9 | }; 10 | -------------------------------------------------------------------------------- /src/locales/en/pages.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devnotcom/devnot-mentor-front-end/a130f5086bc2c869935a52861ec92765a02cf267/src/locales/en/pages.js -------------------------------------------------------------------------------- /src/locales/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import VueI18n from "vue-i18n"; 3 | 4 | import en from "./en/index"; 5 | import tr from "./tr/index"; 6 | 7 | Vue.use(VueI18n); 8 | 9 | const messages = { 10 | en: en, 11 | tr: tr, 12 | }; 13 | 14 | export default new VueI18n({ 15 | locale: "tr", // set locale 16 | messages, // set locale messages 17 | }); -------------------------------------------------------------------------------- /src/locales/tr/base.js: -------------------------------------------------------------------------------- 1 | export default { 2 | base: "DEVNOT MENTOR", 3 | }; -------------------------------------------------------------------------------- /src/locales/tr/error.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devnotcom/devnot-mentor-front-end/a130f5086bc2c869935a52861ec92765a02cf267/src/locales/tr/error.js -------------------------------------------------------------------------------- /src/locales/tr/index.js: -------------------------------------------------------------------------------- 1 | import base from "./base"; 2 | import pages from "./pages"; 3 | import error from "./error"; 4 | 5 | export default { 6 | base, 7 | pages, 8 | error, 9 | }; 10 | -------------------------------------------------------------------------------- /src/locales/tr/pages.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devnotcom/devnot-mentor-front-end/a130f5086bc2c869935a52861ec92765a02cf267/src/locales/tr/pages.js -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import App from "./App.vue"; 3 | import router from "./router"; 4 | import store from "./store"; 5 | import i18n from "./locales/index"; 6 | import ApiService from "./services/apiService"; 7 | import { FontawesomeServe } from "./plugins/fontawesome/fontAwesome"; 8 | import vuetify from './plugins/vuetify' 9 | FontawesomeServe(Vue); 10 | 11 | ApiService.init(); 12 | Vue.config.productionTip = false; 13 | 14 | 15 | 16 | 17 | new Vue({ 18 | i18n, 19 | store, 20 | router, 21 | vuetify, 22 | render: (h) => h(App) 23 | }).$mount("#app"); 24 | -------------------------------------------------------------------------------- /src/plugins/entity/baseEntity.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/devnotcom/devnot-mentor-front-end/a130f5086bc2c869935a52861ec92765a02cf267/src/plugins/entity/baseEntity.js -------------------------------------------------------------------------------- /src/plugins/fontawesome/fontAwesome.js: -------------------------------------------------------------------------------- 1 | import { library } from "@fortawesome/fontawesome-svg-core"; 2 | import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"; 3 | import {} from "@fortawesome/free-solid-svg-icons"; 4 | import { 5 | faFacebook, 6 | faGithub, 7 | faLinkedin, 8 | } from "@fortawesome/free-brands-svg-icons"; 9 | import { faFilter, faImages } from "@fortawesome/free-solid-svg-icons"; 10 | 11 | export function FontawesomeServe(Vue) { 12 | Vue.component("faIcon", FontAwesomeIcon); 13 | library.add(faFilter); 14 | library.add(faImages); 15 | library.add(faFacebook); 16 | library.add(faGithub); 17 | library.add(faLinkedin); 18 | } 19 | -------------------------------------------------------------------------------- /src/plugins/vuetify.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue'; 2 | import Vuetify from 'vuetify/lib/framework'; 3 | 4 | Vue.use(Vuetify); 5 | 6 | export default new Vuetify({ 7 | }); 8 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import VueRouter from "vue-router"; 3 | 4 | Vue.use(VueRouter); 5 | 6 | import base from "./modules/base"; 7 | import userAction from "./modules/userAction"; 8 | 9 | const routes = [base , userAction]; 10 | 11 | const router = new VueRouter({ 12 | mode: "history", 13 | base: process.env.BASE_URL, 14 | routes, 15 | }); 16 | 17 | export default router; 18 | -------------------------------------------------------------------------------- /src/router/modules/base.js: -------------------------------------------------------------------------------- 1 | import Layout from "../../layout/index.vue"; 2 | const base = { 3 | path: "/", 4 | name: "Home", 5 | component: Layout, 6 | children: [ 7 | { 8 | path: "", 9 | name: "", 10 | component: () => import("../../views/Home.vue"), 11 | }, 12 | { 13 | path: "Profile", 14 | name: "Profile", 15 | component: () => import("../../views/Profile.vue"), 16 | }, 17 | { 18 | path: "Mentors", 19 | name: "Mentors", 20 | component: () => import("../../views/Mentors.vue"), 21 | }, 22 | ], 23 | }; 24 | 25 | export default base; 26 | -------------------------------------------------------------------------------- /src/router/modules/userAction.js: -------------------------------------------------------------------------------- 1 | import Layout from "../../layout/empty.vue"; 2 | const userAction = { 3 | path: "/Login", 4 | name: "Login", 5 | component: Layout, 6 | children: [ 7 | { 8 | path: "", 9 | name: "", 10 | component: () => import("../../views/Login.vue"), 11 | }, 12 | 13 | 14 | ], 15 | }; 16 | 17 | export default userAction; 18 | -------------------------------------------------------------------------------- /src/services/TokenService.js: -------------------------------------------------------------------------------- 1 | /// token service to localstorage -------------------------------------------------------------------------------- /src/services/apiService.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import axios from "axios"; 3 | import VueAxios from "vue-axios"; 4 | 5 | Vue.use(VueAxios, axios); 6 | const ApiService = { 7 | init() { 8 | Vue.axios.defaults.baseURL = process.env.VUE_APP_BASE_API; 9 | }, 10 | get(resource) { 11 | return Vue.axios.get(`${resource}`); 12 | }, 13 | 14 | post(resource, params) { 15 | return Vue.axios.post(`${resource}`, params); 16 | }, 17 | 18 | put(resource, params) { 19 | return Vue.axios.put(`${resource}`, params); 20 | }, 21 | 22 | delete(resource, params) { 23 | return Vue.axios.delete(`${resource}`, params); 24 | }, 25 | }; 26 | 27 | export default ApiService; 28 | -------------------------------------------------------------------------------- /src/store/actions.type.js: -------------------------------------------------------------------------------- 1 | //#region User 2 | export const USER_LOGIN = "userLogin" -------------------------------------------------------------------------------- /src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import Vuex from "vuex"; 3 | 4 | Vue.use(Vuex); 5 | 6 | import user from "./modules/user.module"; 7 | 8 | export default new Vuex.Store({ 9 | state: {}, 10 | mutations: {}, 11 | actions: {}, 12 | modules: { user }, 13 | }); 14 | -------------------------------------------------------------------------------- /src/store/modules/user.module.js: -------------------------------------------------------------------------------- 1 | import ApiService from "@/services/apiService"; 2 | import { USER_LOGIN } from "@/store/actions.type"; 3 | import { SET_USER } from "@/store/mutations.type"; 4 | 5 | const state = { 6 | isAuth : false, 7 | }; 8 | const getters = {}; 9 | const actions = { 10 | [USER_LOGIN](context, payload) { 11 | return new Promise((resolve, reject) => { 12 | ApiService.post("/users/login", payload) 13 | .then((response) => { 14 | context.commit(SET_USER, response.data); 15 | resolve(response); 16 | }) 17 | .catch((err) => { 18 | reject(err); 19 | }); 20 | }); 21 | }, 22 | }; 23 | const mutations = { 24 | [SET_USER](state, payload) { 25 | state.isAuth = true; 26 | window.localStorage.setItem( 27 | "user-token", 28 | JSON.stringify(payload.data.token) 29 | ); 30 | window.localStorage.setItem( 31 | "user-profile", 32 | JSON.stringify(payload.data.user) 33 | ); 34 | }, 35 | }; 36 | 37 | export default { 38 | state, 39 | actions, 40 | mutations, 41 | getters, 42 | }; 43 | -------------------------------------------------------------------------------- /src/store/mutations.type.js: -------------------------------------------------------------------------------- 1 | //#region User 2 | export const SET_USER = "setUser" -------------------------------------------------------------------------------- /src/views/Home.vue: -------------------------------------------------------------------------------- 1 | 49 | 50 | 90 | 91 | 115 | -------------------------------------------------------------------------------- /src/views/Login.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 39 | 40 | 72 | -------------------------------------------------------------------------------- /src/views/Mentors.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 172 | 173 | 174 | -------------------------------------------------------------------------------- /src/views/Profile.vue: -------------------------------------------------------------------------------- 1 | 65 | 66 | 99 | 100 | 105 | -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | transpileDependencies: [ 3 | 'vuetify' 4 | ] 5 | } 6 | --------------------------------------------------------------------------------