├── .browserslistrc ├── .editorconfig ├── .github └── workflows │ └── node.js.yml ├── .gitignore ├── .vscode └── settings.json ├── CONTRIBUTING.md ├── README.md ├── angular.json ├── e2e ├── protractor.conf.js ├── src │ ├── app.e2e-spec.ts │ └── app.po.ts └── tsconfig.json ├── karma.conf.js ├── package-lock.json ├── package.json ├── src ├── app │ ├── app-routing.module.ts │ ├── app.component.css │ ├── app.component.html │ ├── app.component.spec.ts │ ├── app.component.ts │ ├── app.module.ts │ ├── components │ │ ├── common │ │ │ ├── event-preview │ │ │ │ ├── event-preview.component.css │ │ │ │ ├── event-preview.component.html │ │ │ │ ├── event-preview.component.spec.ts │ │ │ │ └── event-preview.component.ts │ │ │ ├── footer │ │ │ │ ├── footer.component.css │ │ │ │ ├── footer.component.html │ │ │ │ ├── footer.component.spec.ts │ │ │ │ └── footer.component.ts │ │ │ ├── group-item │ │ │ │ ├── group-item.component.css │ │ │ │ ├── group-item.component.html │ │ │ │ ├── group-item.component.spec.ts │ │ │ │ └── group-item.component.ts │ │ │ └── nav │ │ │ │ ├── nav.component.css │ │ │ │ ├── nav.component.html │ │ │ │ ├── nav.component.spec.ts │ │ │ │ └── nav.component.ts │ │ ├── events │ │ │ ├── events.component.css │ │ │ ├── events.component.html │ │ │ ├── events.component.spec.ts │ │ │ └── events.component.ts │ │ ├── groups │ │ │ ├── groups.component.css │ │ │ ├── groups.component.html │ │ │ ├── groups.component.spec.ts │ │ │ └── groups.component.ts │ │ ├── home │ │ │ ├── home.component.css │ │ │ ├── home.component.html │ │ │ ├── home.component.spec.ts │ │ │ └── home.component.ts │ │ ├── login │ │ │ ├── login.component.css │ │ │ ├── login.component.html │ │ │ ├── login.component.spec.ts │ │ │ └── login.component.ts │ │ ├── new-group │ │ │ ├── new-group.component.css │ │ │ ├── new-group.component.html │ │ │ ├── new-group.component.spec.ts │ │ │ └── new-group.component.ts │ │ ├── profile │ │ │ ├── profile.component.css │ │ │ ├── profile.component.html │ │ │ ├── profile.component.spec.ts │ │ │ └── profile.component.ts │ │ └── signup │ │ │ ├── signup.component.css │ │ │ ├── signup.component.html │ │ │ ├── signup.component.spec.ts │ │ │ └── signup.component.ts │ ├── core │ │ └── core.module.ts │ ├── models │ │ ├── admin.model.ts │ │ ├── event.model.ts │ │ ├── group.model.ts │ │ ├── topic.model.ts │ │ └── user.model.ts │ └── shared │ │ ├── services │ │ ├── events.service.spec.ts │ │ ├── events.service.ts │ │ ├── profile.service.spec.ts │ │ └── profile.service.ts │ │ └── shared.module.ts ├── assets │ ├── .gitkeep │ └── images │ │ ├── home.png │ │ ├── home2.png │ │ └── signin.png ├── environments │ ├── environment.dev.ts │ ├── environment.prod.ts │ ├── environment.qa.ts │ └── environment.ts ├── favicon.ico ├── index.html ├── main.ts ├── polyfills.ts ├── styles.css └── test.ts ├── tsconfig.app.json ├── tsconfig.json ├── tsconfig.spec.json └── tslint.json /.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # You can see what browsers were selected by your queries by running: 6 | # npx browserslist 7 | 8 | > 0.5% 9 | last 2 versions 10 | Firefox ESR 11 | not dead 12 | not IE 9-11 # For IE 9-11 support, remove 'not'. -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: Node.js CI 5 | 6 | on: 7 | push: 8 | branches: [ master ] 9 | pull_request: 10 | branches: [ master ] 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | strategy: 18 | matrix: 19 | node-version: [12.x] 20 | 21 | steps: 22 | - uses: actions/checkout@v2 23 | - name: Use Node.js ${{ matrix.node-version }} 24 | uses: actions/setup-node@v1 25 | with: 26 | node-version: ${{ matrix.node-version }} 27 | - run: npm ci 28 | - run: npm run build --if-present 29 | # - run: npm test 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | /.idea 4 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "deno.enable": false 3 | } -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contribution Guidelines 2 | 3 | - If you have found any issue or want to suggest any features, Feel free to open a issue and label as `Bug` or `Enhancement`. 4 | - If you want to apply any code level fixes or updates, Please **fork** this repository and apply your changes and send us a **PR**. 5 | - Please make sure that you are following **branching** and **commit** standards and naming conventions. 6 | 7 | 8 | ## We appreciate your valuable contribution ❤️ 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DevHitch 2 | Platform to get all meetups,webinars happening in SL and to provide feedback 3 | 4 | 5 | -------------------------------------------------------------------------------- /angular.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json", 3 | "version": 1, 4 | "newProjectRoot": "projects", 5 | "projects": { 6 | "DevHitch": { 7 | "projectType": "application", 8 | "schematics": {}, 9 | "root": "", 10 | "sourceRoot": "src", 11 | "prefix": "app", 12 | "architect": { 13 | "build": { 14 | "builder": "@angular-devkit/build-angular:browser", 15 | "options": { 16 | "outputPath": "dist/DevHitch", 17 | "index": "src/index.html", 18 | "main": "src/main.ts", 19 | "polyfills": "src/polyfills.ts", 20 | "tsConfig": "tsconfig.app.json", 21 | "aot": true, 22 | "assets": [ 23 | "src/favicon.ico", 24 | "src/assets" 25 | ], 26 | "styles": [ 27 | "src/styles.css" 28 | ], 29 | "scripts": [] 30 | }, 31 | "configurations": { 32 | "production": { 33 | "fileReplacements": [ 34 | { 35 | "replace": "src/environments/environment.ts", 36 | "with": "src/environments/environment.prod.ts" 37 | } 38 | ], 39 | "optimization": true, 40 | "outputHashing": "all", 41 | "sourceMap": false, 42 | "namedChunks": false, 43 | "extractLicenses": true, 44 | "vendorChunk": false, 45 | "buildOptimizer": true, 46 | "budgets": [ 47 | { 48 | "type": "initial", 49 | "maximumWarning": "2mb", 50 | "maximumError": "5mb" 51 | }, 52 | { 53 | "type": "anyComponentStyle", 54 | "maximumWarning": "6kb", 55 | "maximumError": "10kb" 56 | } 57 | ] 58 | }, 59 | "qa": { 60 | "fileReplacements": [ 61 | { 62 | "replace": "src/environments/environment.ts", 63 | "with": "src/environments/environment.qa.ts" 64 | } 65 | ], 66 | "optimization": true, 67 | "outputHashing": "all", 68 | "sourceMap": false, 69 | "namedChunks": false, 70 | "extractLicenses": true, 71 | "vendorChunk": false, 72 | "buildOptimizer": true, 73 | "budgets": [ 74 | { 75 | "type": "initial", 76 | "maximumWarning": "2mb", 77 | "maximumError": "5mb" 78 | }, 79 | { 80 | "type": "anyComponentStyle", 81 | "maximumWarning": "6kb", 82 | "maximumError": "10kb" 83 | } 84 | ] 85 | }, 86 | "dev": { 87 | "fileReplacements": [ 88 | { 89 | "replace": "src/environments/environment.ts", 90 | "with": "src/environments/environment.dev.ts" 91 | } 92 | ], 93 | "optimization": true, 94 | "outputHashing": "all", 95 | "sourceMap": false, 96 | "namedChunks": false, 97 | "extractLicenses": true, 98 | "vendorChunk": false, 99 | "buildOptimizer": true, 100 | "budgets": [ 101 | { 102 | "type": "initial", 103 | "maximumWarning": "2mb", 104 | "maximumError": "5mb" 105 | }, 106 | { 107 | "type": "anyComponentStyle", 108 | "maximumWarning": "6kb", 109 | "maximumError": "10kb" 110 | } 111 | ] 112 | } 113 | } 114 | }, 115 | "serve": { 116 | "builder": "@angular-devkit/build-angular:dev-server", 117 | "options": { 118 | "browserTarget": "DevHitch:build" 119 | }, 120 | "configurations": { 121 | "production": { 122 | "browserTarget": "DevHitch:build:production" 123 | } 124 | } 125 | }, 126 | "extract-i18n": { 127 | "builder": "@angular-devkit/build-angular:extract-i18n", 128 | "options": { 129 | "browserTarget": "DevHitch:build" 130 | } 131 | }, 132 | "test": { 133 | "builder": "@angular-devkit/build-angular:karma", 134 | "options": { 135 | "main": "src/test.ts", 136 | "polyfills": "src/polyfills.ts", 137 | "tsConfig": "tsconfig.spec.json", 138 | "karmaConfig": "karma.conf.js", 139 | "assets": [ 140 | "src/favicon.ico", 141 | "src/assets" 142 | ], 143 | "styles": [ 144 | "src/styles.css" 145 | ], 146 | "scripts": [] 147 | } 148 | }, 149 | "lint": { 150 | "builder": "@angular-devkit/build-angular:tslint", 151 | "options": { 152 | "tsConfig": [ 153 | "tsconfig.app.json", 154 | "tsconfig.spec.json", 155 | "e2e/tsconfig.json" 156 | ], 157 | "exclude": [ 158 | "**/node_modules/**" 159 | ] 160 | } 161 | }, 162 | "e2e": { 163 | "builder": "@angular-devkit/build-angular:protractor", 164 | "options": { 165 | "protractorConfig": "e2e/protractor.conf.js", 166 | "devServerTarget": "DevHitch:serve" 167 | }, 168 | "configurations": { 169 | "production": { 170 | "devServerTarget": "DevHitch:serve:production" 171 | } 172 | } 173 | } 174 | } 175 | } 176 | }, 177 | "defaultProject": "DevHitch", 178 | "cli": { 179 | "analytics": "6d9caa45-76bb-452e-8ae5-a9a1f724237a" 180 | } 181 | } -------------------------------------------------------------------------------- /e2e/protractor.conf.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | // Protractor configuration file, see link for more information 3 | // https://github.com/angular/protractor/blob/master/lib/config.ts 4 | 5 | const { SpecReporter } = require('jasmine-spec-reporter'); 6 | 7 | /** 8 | * @type { import("protractor").Config } 9 | */ 10 | exports.config = { 11 | allScriptsTimeout: 11000, 12 | specs: [ 13 | './src/**/*.e2e-spec.ts' 14 | ], 15 | capabilities: { 16 | browserName: 'chrome' 17 | }, 18 | directConnect: true, 19 | baseUrl: 'http://localhost:4200/', 20 | framework: 'jasmine', 21 | jasmineNodeOpts: { 22 | showColors: true, 23 | defaultTimeoutInterval: 30000, 24 | print: function() {} 25 | }, 26 | onPrepare() { 27 | require('ts-node').register({ 28 | project: require('path').join(__dirname, './tsconfig.json') 29 | }); 30 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); 31 | } 32 | }; -------------------------------------------------------------------------------- /e2e/src/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { AppPage } from './app.po'; 2 | import { browser, logging } from 'protractor'; 3 | 4 | describe('workspace-project App', () => { 5 | let page: AppPage; 6 | 7 | beforeEach(() => { 8 | page = new AppPage(); 9 | }); 10 | 11 | it('should display welcome message', () => { 12 | page.navigateTo(); 13 | expect(page.getTitleText()).toEqual('DevHitch app is running!'); 14 | }); 15 | 16 | afterEach(async () => { 17 | // Assert that there are no errors emitted from the browser 18 | const logs = await browser.manage().logs().get(logging.Type.BROWSER); 19 | expect(logs).not.toContain(jasmine.objectContaining({ 20 | level: logging.Level.SEVERE, 21 | } as logging.Entry)); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /e2e/src/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, by, element } from 'protractor'; 2 | 3 | export class AppPage { 4 | navigateTo(): Promise { 5 | return browser.get(browser.baseUrl) as Promise; 6 | } 7 | 8 | getTitleText(): Promise { 9 | return element(by.css('app-root .content span')).getText() as Promise; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../out-tsc/e2e", 5 | "module": "commonjs", 6 | "target": "es2018", 7 | "types": [ 8 | "jasmine", 9 | "jasminewd2", 10 | "node" 11 | ] 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage-istanbul-reporter'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client: { 16 | clearContext: false // leave Jasmine Spec Runner output visible in browser 17 | }, 18 | coverageIstanbulReporter: { 19 | dir: require('path').join(__dirname, './coverage/DevHitch'), 20 | reports: ['html', 'lcovonly', 'text-summary'], 21 | fixWebpackSourcePaths: true 22 | }, 23 | reporters: ['progress', 'kjhtml'], 24 | port: 9876, 25 | colors: true, 26 | logLevel: config.LOG_INFO, 27 | autoWatch: true, 28 | browsers: ['Chrome'], 29 | singleRun: false, 30 | restartOnFileChange: true 31 | }); 32 | }; 33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dev-hitch", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "ng": "ng", 6 | "start": "ng serve", 7 | "build": "ng build", 8 | "test": "ng test", 9 | "lint": "ng lint", 10 | "e2e": "ng e2e" 11 | }, 12 | "private": true, 13 | "dependencies": { 14 | "@angular/animations": "~11.0.4", 15 | "@angular/common": "~11.0.4", 16 | "@angular/compiler": "~11.0.4", 17 | "@angular/core": "~11.0.4", 18 | "@angular/forms": "~11.0.4", 19 | "@angular/platform-browser": "~11.0.4", 20 | "@angular/platform-browser-dynamic": "~11.0.4", 21 | "@angular/router": "~11.0.4", 22 | "@ngrx/store": "^10.1.1", 23 | "rxjs": "~6.5.4", 24 | "tslib": "^2.0.0", 25 | "zone.js": "~0.10.2" 26 | }, 27 | "devDependencies": { 28 | "@angular-devkit/build-angular": "~0.1100.4", 29 | "@angular/cli": "~11.0.4", 30 | "@angular/compiler-cli": "~11.0.4", 31 | "@types/jasmine": "~3.6.0", 32 | "@types/jasminewd2": "~2.0.3", 33 | "@types/node": "^12.11.1", 34 | "codelyzer": "^6.0.0", 35 | "husky": "^4.3.6", 36 | "jasmine-core": "~3.6.0", 37 | "jasmine-spec-reporter": "~5.0.0", 38 | "karma": "~5.1.1", 39 | "karma-chrome-launcher": "~3.1.0", 40 | "karma-coverage-istanbul-reporter": "~3.0.2", 41 | "karma-jasmine": "~4.0.0", 42 | "karma-jasmine-html-reporter": "^1.5.0", 43 | "prettier": "^2.2.1", 44 | "pretty-quick": "^3.1.0", 45 | "protractor": "~7.0.0", 46 | "ts-node": "~8.3.0", 47 | "tslint": "~6.1.0", 48 | "typescript": "~4.0.5" 49 | }, 50 | "husky": { 51 | "hooks": { 52 | "pre-commit": "pretty-quick --staged", 53 | "pre-push": "ng build --aot true" 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/app/app-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { Routes, RouterModule } from '@angular/router'; 3 | import { HomeComponent } from './components/home/home.component'; 4 | import { LoginComponent } from './components/login/login.component'; 5 | import { SignupComponent } from './components/signup/signup.component'; 6 | import { ProfileComponent } from './components/profile/profile.component'; 7 | import { NewGroupComponent } from './components/new-group/new-group.component'; 8 | import { GroupsComponent } from './components/groups/groups.component'; 9 | import { EventsComponent } from './components/events/events.component'; 10 | 11 | const routes: Routes = [ 12 | { path: '', component: HomeComponent }, 13 | { path: 'login', component: LoginComponent }, 14 | { path: 'signup', component: SignupComponent }, 15 | { path: 'profile', component: ProfileComponent }, 16 | { path: 'events', component: EventsComponent }, 17 | { path: 'groups', component: GroupsComponent }, 18 | { path: 'new-group', component: NewGroupComponent }, 19 | ]; 20 | 21 | @NgModule({ 22 | imports: [RouterModule.forRoot(routes, { relativeLinkResolution: 'corrected' })], 23 | exports: [RouterModule], 24 | }) 25 | export class AppRoutingModule {} 26 | -------------------------------------------------------------------------------- /src/app/app.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Stackoverflow-SL/DevHitch/33aee018aee84d2a1d070f6c3b1870cbf8699bf7/src/app/app.component.css -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 5 |
6 |
7 | 8 | -------------------------------------------------------------------------------- /src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, waitForAsync } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | import { AppComponent } from './app.component'; 4 | 5 | describe('AppComponent', () => { 6 | beforeEach(waitForAsync(() => { 7 | TestBed.configureTestingModule({ 8 | imports: [ 9 | RouterTestingModule 10 | ], 11 | declarations: [ 12 | AppComponent 13 | ], 14 | }).compileComponents(); 15 | })); 16 | 17 | it('should create the app', () => { 18 | const fixture = TestBed.createComponent(AppComponent); 19 | const app = fixture.componentInstance; 20 | expect(app).toBeTruthy(); 21 | }); 22 | 23 | it(`should have as title 'DevHitch'`, () => { 24 | const fixture = TestBed.createComponent(AppComponent); 25 | const app = fixture.componentInstance; 26 | expect(app.title).toEqual('DevHitch'); 27 | }); 28 | 29 | it('should render title', () => { 30 | const fixture = TestBed.createComponent(AppComponent); 31 | fixture.detectChanges(); 32 | const compiled = fixture.nativeElement; 33 | expect(compiled.querySelector('.content span').textContent).toContain('DevHitch app is running!'); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-root', 5 | templateUrl: './app.component.html', 6 | styleUrls: ['./app.component.css'] 7 | }) 8 | export class AppComponent { 9 | title = 'DevHitch'; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/app.module.ts: -------------------------------------------------------------------------------- 1 | import { BrowserModule } from '@angular/platform-browser'; 2 | import { NgModule } from '@angular/core'; 3 | 4 | import { AppRoutingModule } from './app-routing.module'; 5 | import { AppComponent } from './app.component'; 6 | import { HomeComponent } from './components/home/home.component'; 7 | import { NavComponent } from './components/common/nav/nav.component'; 8 | import { FooterComponent } from './components/common/footer/footer.component'; 9 | import { EventPreviewComponent } from './components/common/event-preview/event-preview.component'; 10 | import { LoginComponent } from './components/login/login.component'; 11 | import { SignupComponent } from './components/signup/signup.component'; 12 | import { ProfileComponent } from './components/profile/profile.component'; 13 | import { NewGroupComponent } from './components/new-group/new-group.component'; 14 | import { GroupsComponent } from './components/groups/groups.component'; 15 | import { EventsComponent } from './components/events/events.component'; 16 | import { GroupItemComponent } from './components/common/group-item/group-item.component'; 17 | import { StoreModule } from '@ngrx/store'; 18 | import { ReactiveFormsModule } from '@angular/forms'; 19 | import { HttpClientModule } from '@angular/common/http'; 20 | 21 | @NgModule({ 22 | declarations: [ 23 | AppComponent, 24 | HomeComponent, 25 | NavComponent, 26 | FooterComponent, 27 | EventPreviewComponent, 28 | LoginComponent, 29 | SignupComponent, 30 | ProfileComponent, 31 | NewGroupComponent, 32 | GroupsComponent, 33 | EventsComponent, 34 | GroupItemComponent, 35 | ], 36 | imports: [ 37 | BrowserModule, 38 | ReactiveFormsModule, 39 | AppRoutingModule, 40 | HttpClientModule, 41 | StoreModule.forRoot({}, {}) 42 | ], 43 | providers: [], 44 | bootstrap: [AppComponent], 45 | }) 46 | export class AppModule {} 47 | -------------------------------------------------------------------------------- /src/app/components/common/event-preview/event-preview.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Stackoverflow-SL/DevHitch/33aee018aee84d2a1d070f6c3b1870cbf8699bf7/src/app/components/common/event-preview/event-preview.component.css -------------------------------------------------------------------------------- /src/app/components/common/event-preview/event-preview.component.html: -------------------------------------------------------------------------------- 1 |
2 | {{ event?.title }} 3 |
4 | {{ event?.dateTime }} 5 |
6 |
7 | {{ event?.title }} 8 |
9 |
10 | {{ event?.organizer }} 11 |
12 |
13 | 14 | 15 |
16 |
-------------------------------------------------------------------------------- /src/app/components/common/event-preview/event-preview.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { EventPreviewComponent } from './event-preview.component'; 4 | 5 | describe('EventPreviewComponent', () => { 6 | let component: EventPreviewComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ EventPreviewComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(EventPreviewComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/common/event-preview/event-preview.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-event-preview', 5 | templateUrl: './event-preview.component.html', 6 | styleUrls: ['./event-preview.component.css'] 7 | }) 8 | export class EventPreviewComponent implements OnInit { 9 | 10 | @Input() event: any; 11 | 12 | constructor() { } 13 | 14 | ngOnInit(): void { 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/app/components/common/footer/footer.component.css: -------------------------------------------------------------------------------- 1 | .footer{ 2 | color: whitesmoke; 3 | height: 300px; 4 | } 5 | 6 | a{ 7 | color: white; 8 | } 9 | 10 | a:hover { 11 | color: white; 12 | } 13 | 14 | .footer-col { 15 | color: white; 16 | } -------------------------------------------------------------------------------- /src/app/components/common/footer/footer.component.html: -------------------------------------------------------------------------------- 1 | 49 | -------------------------------------------------------------------------------- /src/app/components/common/footer/footer.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { FooterComponent } from './footer.component'; 4 | 5 | describe('FooterComponent', () => { 6 | let component: FooterComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ FooterComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(FooterComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/common/footer/footer.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-footer', 5 | templateUrl: './footer.component.html', 6 | styleUrls: ['./footer.component.css'] 7 | }) 8 | export class FooterComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/components/common/group-item/group-item.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Stackoverflow-SL/DevHitch/33aee018aee84d2a1d070f6c3b1870cbf8699bf7/src/app/components/common/group-item/group-item.component.css -------------------------------------------------------------------------------- /src/app/components/common/group-item/group-item.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{ group?.name }} 5 |
6 |
7 |
8 |
{{ group?.name }}
9 |

10 | This is a wider card with supporting text below as a natural lead-in 11 | to additional content. This content is a little bit longer. 12 |

13 |

14 | Last updated 3 mins ago 15 |

16 |
17 |
18 |
19 |
20 | -------------------------------------------------------------------------------- /src/app/components/common/group-item/group-item.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { GroupItemComponent } from './group-item.component'; 4 | 5 | describe('GroupItemComponent', () => { 6 | let component: GroupItemComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ GroupItemComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(GroupItemComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/common/group-item/group-item.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit, Input } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-group-item', 5 | templateUrl: './group-item.component.html', 6 | styleUrls: ['./group-item.component.css'] 7 | }) 8 | export class GroupItemComponent implements OnInit { 9 | 10 | @Input() group: any; 11 | 12 | constructor() { } 13 | 14 | ngOnInit(): void { 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/app/components/common/nav/nav.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Stackoverflow-SL/DevHitch/33aee018aee84d2a1d070f6c3b1870cbf8699bf7/src/app/components/common/nav/nav.component.css -------------------------------------------------------------------------------- /src/app/components/common/nav/nav.component.html: -------------------------------------------------------------------------------- 1 | 39 | -------------------------------------------------------------------------------- /src/app/components/common/nav/nav.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { NavComponent } from './nav.component'; 4 | 5 | describe('NavComponent', () => { 6 | let component: NavComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ NavComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(NavComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/common/nav/nav.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-nav', 5 | templateUrl: './nav.component.html', 6 | styleUrls: ['./nav.component.css'], 7 | }) 8 | export class NavComponent implements OnInit { 9 | isLoggedIn: Boolean; 10 | 11 | constructor() { 12 | this.isLoggedIn = false; 13 | } 14 | 15 | ngOnInit(): void {} 16 | } 17 | -------------------------------------------------------------------------------- /src/app/components/events/events.component.css: -------------------------------------------------------------------------------- 1 | .title { 2 | text-align: center; 3 | padding-top: 1%; 4 | } -------------------------------------------------------------------------------- /src/app/components/events/events.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Events around your area and interest

4 |
5 | 6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | {{event?.title}} 16 |
17 |
18 |
19 |
{{event?.title}}
20 |

21 | This is a wider card with supporting text below as a 22 | natural lead-in to additional content. This content is a 23 | little bit longer. 24 |

25 |

26 | Last updated 3 mins ago 27 |

28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | -------------------------------------------------------------------------------- /src/app/components/events/events.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { EventsComponent } from './events.component'; 4 | 5 | describe('EventsComponent', () => { 6 | let component: EventsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ EventsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(EventsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/events/events.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { error } from 'protractor'; 3 | import { Event } from 'src/app/models/event.model'; 4 | import { EventsService } from 'src/app/shared/services/events.service'; 5 | 6 | @Component({ 7 | selector: 'app-events', 8 | templateUrl: './events.component.html', 9 | styleUrls: ['./events.component.css'], 10 | }) 11 | export class EventsComponent implements OnInit { 12 | events: Event[]; 13 | 14 | constructor(public eventService: EventsService) { 15 | } 16 | 17 | ngOnInit(): void { 18 | this.eventService.getAllEventsData().subscribe((allEventData: Event[]) => { 19 | this.events = allEventData; 20 | 21 | }, error => { 22 | console.log(error) 23 | }); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/app/components/groups/groups.component.css: -------------------------------------------------------------------------------- 1 | .title { 2 | text-align: center; 3 | padding-top: 1%; 4 | } 5 | 6 | .button-container { 7 | text-align: right; 8 | } 9 | 10 | .groups-container { 11 | margin: auto; 12 | } 13 | -------------------------------------------------------------------------------- /src/app/components/groups/groups.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Groups around your area and interest

4 |
5 | 6 |
7 | 10 |
11 | 12 |
13 |
My Groups
14 | 15 | 16 | 17 |
18 | 19 |
20 |
21 | 22 | 23 | 26 | 27 |
28 |
29 | -------------------------------------------------------------------------------- /src/app/components/groups/groups.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { GroupsComponent } from './groups.component'; 4 | 5 | describe('GroupsComponent', () => { 6 | let component: GroupsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ GroupsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(GroupsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/groups/groups.component.ts: -------------------------------------------------------------------------------- 1 | import {Component, OnInit} from '@angular/core'; 2 | import {Group} from 'src/app/models/group.model'; 3 | 4 | @Component({ 5 | selector: 'app-groups', 6 | templateUrl: './groups.component.html', 7 | styleUrls: ['./groups.component.css'], 8 | }) 9 | export class GroupsComponent implements OnInit { 10 | isMyGroupsAvailable: boolean; 11 | groups: Group[]; 12 | 13 | constructor() { 14 | this.isMyGroupsAvailable = true; 15 | 16 | this.groups = [ 17 | new Group( 18 | '1', 19 | 'Golang Sri Lanka', 20 | 'Colombo,SL', 21 | '', 22 | [], 23 | 'https://www.thedigitaltransformationpeople.com/wp-content/uploads/2019/03/tech-conference-networking-tips-640x400-c-default.jpg' 24 | ), 25 | new Group( 26 | '1', 27 | 'Golang Sri Lanka', 28 | 'Colombo,SL', 29 | '', 30 | [], 31 | 'https://www.thedigitaltransformationpeople.com/wp-content/uploads/2019/03/tech-conference-networking-tips-640x400-c-default.jpg' 32 | ), 33 | new Group( 34 | '1', 35 | 'Golang Sri Lanka', 36 | 'Colombo,SL', 37 | '', 38 | [], 39 | 'https://www.thedigitaltransformationpeople.com/wp-content/uploads/2019/03/tech-conference-networking-tips-640x400-c-default.jpg' 40 | ), 41 | new Group( 42 | '1', 43 | 'Golang Sri Lanka', 44 | 'Colombo,SL', 45 | '', 46 | [], 47 | 'https://www.thedigitaltransformationpeople.com/wp-content/uploads/2019/03/tech-conference-networking-tips-640x400-c-default.jpg' 48 | ), 49 | new Group( 50 | '1', 51 | 'Golang Sri Lanka', 52 | 'Colombo,SL', 53 | '', 54 | [], 55 | 'https://www.thedigitaltransformationpeople.com/wp-content/uploads/2019/03/tech-conference-networking-tips-640x400-c-default.jpg' 56 | ), 57 | ]; 58 | } 59 | 60 | ngOnInit(): void { 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /src/app/components/home/home.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Stackoverflow-SL/DevHitch/33aee018aee84d2a1d070f6c3b1870cbf8699bf7/src/app/components/home/home.component.css -------------------------------------------------------------------------------- /src/app/components/home/home.component.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |
5 |

Discover events for all the things you love!

6 | 12 |
13 |
14 | Hi to DevHitch 19 |
20 |
21 |
22 | 23 | 24 |
25 |
26 |
27 |

Upcoming Events

28 |
29 |
30 |
31 |
32 | 33 |
34 |
35 |
36 |
37 |
38 | -------------------------------------------------------------------------------- /src/app/components/home/home.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { HomeComponent } from './home.component'; 4 | 5 | describe('HomeComponent', () => { 6 | let component: HomeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ HomeComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(HomeComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/home/home.component.ts: -------------------------------------------------------------------------------- 1 | import {Component, OnInit} from '@angular/core'; 2 | import {Event} from '../../models/event.model'; 3 | 4 | @Component({ 5 | selector: 'app-home', 6 | templateUrl: './home.component.html', 7 | styleUrls: ['./home.component.css'], 8 | }) 9 | export class HomeComponent implements OnInit { 10 | tempEvents: Event[]; 11 | 12 | constructor() { 13 | this.tempEvents = [ 14 | new Event( 15 | '1', 16 | 'GoLang Sri Lanka - June', 17 | 'Mon, Jun 29, 4:50 PM', 18 | 'https://secure-content.meetupstatic.com/images/classic-events/491000108/375x210.jpg', 19 | 'GoLang Sri Lanka Community', 20 | [], 21 | 'Online' 22 | ), 23 | new Event( 24 | '2', 25 | 'Power BI Community: #002', 26 | 'Tue, Jun 30, 5:00 PM', 27 | 'https://secure-content.meetupstatic.com/images/classic-events/491024724/500x280.jpg', 28 | 'Sri Lankan Power BI Community', 29 | [], 30 | 'Online' 31 | ), 32 | 33 | new Event( 34 | '3', 35 | 'Flutter Layout`s Design Secrets', 36 | 'Tue, Jun 30, 5:00 PM', 37 | 'https://secure-content.meetupstatic.com/images/classic-events/490906389/500x280.jpg', 38 | 'Colombo Flutter Community', 39 | [], 40 | 'Online' 41 | ), 42 | new Event( 43 | '4', 44 | 'Scaffolding for a React Application', 45 | 'Tue, Jun 30, 5:00 PM', 46 | 'https://secure-content.meetupstatic.com/images/classic-events/490705895/500x280.jpg', 47 | 'Colombo React Native Meetup Group', 48 | [], 49 | 'Online' 50 | ), 51 | ]; 52 | } 53 | 54 | 55 | ngOnInit(): void { 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/app/components/login/login.component.css: -------------------------------------------------------------------------------- 1 | .login-form { 2 | padding-top: 15%; 3 | } 4 | 5 | .form-title { 6 | padding-left: 25%; 7 | } -------------------------------------------------------------------------------- /src/app/components/login/login.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | Sign In to DevHitch 8 |
9 |
10 | 41 | 42 |
43 | 44 |
45 | 49 | 53 | 57 |
58 |
59 |
60 | -------------------------------------------------------------------------------- /src/app/components/login/login.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { LoginComponent } from './login.component'; 4 | 5 | describe('LoginComponent', () => { 6 | let component: LoginComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ LoginComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(LoginComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/login/login.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-login', 5 | templateUrl: './login.component.html', 6 | styleUrls: ['./login.component.css'] 7 | }) 8 | export class LoginComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/components/new-group/new-group.component.css: -------------------------------------------------------------------------------- 1 | .title { 2 | text-align: center; 3 | padding-top: 3%; 4 | } 5 | -------------------------------------------------------------------------------- /src/app/components/new-group/new-group.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Create a New DevHitch Group

4 | 5 |

Set Your Group Location First

6 |

7 | DevHitch groups meet locally, in person and online. We'll connect you with 8 | people in your area, and more can join you online. 9 |

10 |
11 |
12 | {{ getCurrentLocation() }} 13 | 14 |
15 | 16 |
17 | 18 |

Choose few topics that's describe your interest

19 |
20 | 27 | 28 |
29 | {{ 30 | topic?.name 31 | }} 32 |
33 |
34 |
35 |
36 | 43 |
44 |
45 |
46 | -------------------------------------------------------------------------------- /src/app/components/new-group/new-group.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { NewGroupComponent } from './new-group.component'; 4 | 5 | describe('NewGroupComponent', () => { 6 | let component: NewGroupComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ NewGroupComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(NewGroupComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/new-group/new-group.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { Topic } from '../../models/topic.model'; 3 | 4 | @Component({ 5 | selector: 'app-new-group', 6 | templateUrl: './new-group.component.html', 7 | styleUrls: ['./new-group.component.css'], 8 | }) 9 | export class NewGroupComponent implements OnInit { 10 | topics: Topic[]; 11 | 12 | constructor() { 13 | this.topics = [ 14 | new Topic('1', 'Computer Science'), 15 | new Topic('2', 'DevOps'), 16 | new Topic('3', 'Software Engineering'), 17 | new Topic('4', 'Beginner'), 18 | new Topic('5', 'IT'), 19 | new Topic('6', 'Computer Science'), 20 | ]; 21 | } 22 | 23 | ngOnInit(): void {} 24 | 25 | getCurrentLocation(): string { 26 | return 'Horana, Sri Lanka'; 27 | } 28 | 29 | getInterestedTopic(): string { 30 | return 'Software Engineering'; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/app/components/profile/profile.component.css: -------------------------------------------------------------------------------- 1 | .profile-section { 2 | padding-top: 5%; 3 | } 4 | 5 | .profile-cover { 6 | width: 100%; 7 | height: 200px; 8 | } 9 | 10 | .profile-container { 11 | background-color: white; 12 | border-radius: 15px; 13 | border-color: grey; 14 | margin: 0 auto; 15 | /* box-shadow: 0 15px 15px 0 grey; */ 16 | } 17 | 18 | .center { 19 | text-align: center; 20 | padding-top: 5%; 21 | } 22 | 23 | /* .box { 24 | position: relative; 25 | /* width: 70%; */ 26 | /* height: 185px; */ 27 | /* background: #fff; */ 28 | /* margin: 40px auto; */ 29 | /* } */ 30 | /* .shadow3 { 31 | position: relative; 32 | } 33 | .shadow3:before { 34 | z-index: -1; 35 | position: absolute; 36 | content: ""; 37 | bottom: 15px; 38 | left: 10px; 39 | width: 50%; 40 | top: 80%; 41 | max-width: 300px; 42 | background: #555; 43 | -webkit-box-shadow: 0 15px 10px #555; 44 | -moz-box-shadow: 0 15px 10px #555; 45 | box-shadow: 0 15px 10px #555; 46 | -webkit-transform: rotate(-3deg); 47 | -moz-transform: rotate(-3deg); 48 | -o-transform: rotate(-3deg); 49 | -ms-transform: rotate(-3deg); 50 | transform: rotate(-3deg); 51 | } */ 52 | -------------------------------------------------------------------------------- /src/app/components/profile/profile.component.html: -------------------------------------------------------------------------------- 1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 | 11 | 12 |
{{user ? user.firstName + user.lastName :''}}
13 |

Platformer

14 |
15 |
16 |
17 |
18 |
19 |

Profile

20 |
21 |
22 |
23 | 24 | 26 |
27 |
28 |
29 |
30 | 31 | 33 |
34 |
35 | 36 |
37 |
38 |
39 | 40 | 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 |
-------------------------------------------------------------------------------- /src/app/components/profile/profile.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { ProfileComponent } from './profile.component'; 4 | 5 | describe('ProfileComponent', () => { 6 | let component: ProfileComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ ProfileComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ProfileComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/profile/profile.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { FormBuilder, FormGroup, Validators } from '@angular/forms'; 3 | import { ProfileService } from 'src/app/shared/services/profile.service'; 4 | import { User } from '../../models/user.model'; 5 | 6 | @Component({ 7 | selector: 'app-profile', 8 | templateUrl: './profile.component.html', 9 | styleUrls: ['./profile.component.css'], 10 | }) 11 | export class ProfileComponent implements OnInit { 12 | user: User; 13 | public profileForm: FormGroup; 14 | 15 | constructor(private fb: FormBuilder, public profileService: ProfileService) { 16 | this.generateProfileForm(); 17 | } 18 | 19 | ngOnInit(): void { 20 | this.fetchUserProfileData(); 21 | } 22 | 23 | 24 | 25 | /** 26 | * Generate profile form 27 | */ 28 | public generateProfileForm() { 29 | this.profileForm = this.fb.group({ 30 | email: ['', [Validators.required, Validators.email]], 31 | bio: ['', [Validators.required]], 32 | name: ['', [Validators.required]], 33 | location: ['', [Validators.required]], 34 | image: ['', []] 35 | }) 36 | } 37 | 38 | 39 | /** 40 | * Fetches user data for the profile template 41 | */ 42 | public fetchUserProfileData() { 43 | this.profileService.getProfileData('U001').subscribe((userData) => { 44 | if (userData) { 45 | this.user = userData; 46 | this.profileForm.patchValue({ 47 | name: userData.firstName + userData.lastName, 48 | location: userData.location, 49 | email: userData.email, 50 | bio: userData.bio 51 | }) 52 | } 53 | }, error => { 54 | console.log('error occurred while fetching user data.') 55 | }) 56 | } 57 | 58 | /** 59 | *TODO : Submit profile update 60 | */ 61 | public updateProfile() { 62 | let user = this.profileForm.value; 63 | this.profileService.updateProfileData(user).subscribe((response) => { 64 | 65 | }, 66 | error => { 67 | console.log('error occurred while updating user') 68 | }) 69 | } 70 | 71 | /** 72 | * TODO : Handles password change event 73 | */ 74 | public changePassword() { 75 | this.profileService.updatePassword().subscribe((response) => { 76 | 77 | }, error => { 78 | console.log('error occurred while updating user password') 79 | }) 80 | } 81 | 82 | /** 83 | * TODO : Handles account delete event. 84 | */ 85 | public deleteAccount() { 86 | this.profileService.deleteAccount('U001').subscribe((response) => { 87 | 88 | }, error => { 89 | console.log('error occurred while deleting user account') 90 | }) 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /src/app/components/signup/signup.component.css: -------------------------------------------------------------------------------- 1 | .login-form { 2 | padding-top: 15%; 3 | } 4 | 5 | .form-title { 6 | padding-left: 25%; 7 | } 8 | 9 | @media only screen and (max-width: 767px) { 10 | .heading-vector { 11 | display: none; 12 | } 13 | } ; 14 | -------------------------------------------------------------------------------- /src/app/components/signup/signup.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | Sign Up to DevHitch 8 |
9 |
10 | 46 | 47 |
48 | 49 |
50 | 54 | 58 | 62 |
63 |
64 |
-------------------------------------------------------------------------------- /src/app/components/signup/signup.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; 2 | 3 | import { SignupComponent } from './signup.component'; 4 | 5 | describe('SignupComponent', () => { 6 | let component: SignupComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(waitForAsync(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ SignupComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(SignupComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /src/app/components/signup/signup.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { FormBuilder, FormGroup, Validators } from '@angular/forms'; 3 | 4 | @Component({ 5 | selector: 'app-signup', 6 | templateUrl: './signup.component.html', 7 | styleUrls: ['./signup.component.css'] 8 | }) 9 | export class SignupComponent implements OnInit { 10 | public signUpForm: FormGroup; 11 | constructor(private fb: FormBuilder) { } 12 | 13 | ngOnInit(): void { 14 | this.signUpForm = this.fb.group({ 15 | email: ['', [Validators.required, Validators.email]], 16 | password: ['', [Validators.required]], 17 | name: ['', [Validators.required]] 18 | }) 19 | } 20 | 21 | public signUpFormHandler() { 22 | console.log(this.signUpForm.value); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/app/core/core.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | 5 | 6 | @NgModule({ 7 | declarations: [], 8 | imports: [ 9 | CommonModule 10 | ] 11 | }) 12 | export class CoreModule { } 13 | -------------------------------------------------------------------------------- /src/app/models/admin.model.ts: -------------------------------------------------------------------------------- 1 | export class Admin { 2 | id: string; 3 | firstName: string; 4 | lastName: string; 5 | email: string; 6 | password: string; 7 | 8 | constructor(id: string, firstName: string, lastName: string, email: string, password: string) { 9 | this.id = id; 10 | this.firstName = firstName; 11 | this.lastName = lastName; 12 | this.email = email; 13 | this.password = password; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/app/models/event.model.ts: -------------------------------------------------------------------------------- 1 | export class Event { 2 | id: string; 3 | title: string; 4 | dateTime: string; 5 | image: string; 6 | organizer: string; 7 | participants: string[]; 8 | type: string; 9 | 10 | constructor( 11 | id: string, 12 | title: string, 13 | dateTime: string, 14 | image: string, 15 | organizer: string, 16 | participants: string[], 17 | type: string 18 | ) { 19 | this.id = id; 20 | this.title = title; 21 | this.dateTime = dateTime; 22 | this.image = image; 23 | this.organizer = organizer; 24 | this.participants = participants; 25 | this.type = type; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/app/models/group.model.ts: -------------------------------------------------------------------------------- 1 | export class Group { 2 | id: string; 3 | name: string; 4 | location: string; 5 | organizer: string; 6 | coOrganizers: string[]; 7 | image: string; 8 | 9 | 10 | constructor(id: string, name: string, location: string, organizer: string, coOrganizers: string[], image: string) { 11 | this.id = id; 12 | this.name = name; 13 | this.location = location; 14 | this.organizer = organizer; 15 | this.coOrganizers = coOrganizers; 16 | this.image = image; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/app/models/topic.model.ts: -------------------------------------------------------------------------------- 1 | export class Topic { 2 | id: string; 3 | name: string; 4 | 5 | constructor(id: string, name: string) { 6 | this.id = id; 7 | this.name = name; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/app/models/user.model.ts: -------------------------------------------------------------------------------- 1 | export class User { 2 | id: string; 3 | firstName: string; 4 | lastName: string; 5 | email: string; 6 | password: string; 7 | image: string; 8 | location: string; 9 | joinedGroups: string[]; 10 | bio: string; 11 | 12 | constructor(id: string, firstName: string, lastName: string, email: string, password: string, image: string, location: string, joinedGroups: string[], bio: string) { 13 | this.id = id; 14 | this.firstName = firstName; 15 | this.lastName = lastName; 16 | this.email = email; 17 | this.password = password; 18 | this.image = image; 19 | this.location = location; 20 | this.joinedGroups = joinedGroups; 21 | this.bio = bio; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/app/shared/services/events.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { EventsService } from './events.service'; 4 | 5 | describe('EventsService', () => { 6 | let service: EventsService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(EventsService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/shared/services/events.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { environment } from 'src/environments/environment'; 3 | import { HttpClient } from '@angular/common/http' 4 | import { Observable } from 'rxjs'; 5 | import { Event } from './../../models/event.model'; 6 | 7 | @Injectable({ 8 | providedIn: 'root' 9 | }) 10 | export class EventsService { 11 | public baseUrl: string; 12 | public apiPath: string; 13 | public fullUrl: string; 14 | constructor(private http: HttpClient) { 15 | this.baseUrl = environment.baseUrl; 16 | this.apiPath = environment.eventApiPath; 17 | this.fullUrl = `${this.baseUrl}/${this.apiPath}`; 18 | console.log(this.fullUrl); 19 | } 20 | 21 | 22 | /** 23 | * Returns all event data 24 | */ 25 | public getAllEventsData(): Observable { 26 | const url = `${this.fullUrl}`; 27 | return Observable.create((observer: any) => { 28 | setTimeout(() => { 29 | observer.next(events); 30 | }, 1000); 31 | }); 32 | } 33 | } 34 | 35 | 36 | export const events: Event[] = [ 37 | new Event( 38 | '1', 39 | 'GoLang Sri Lanka - June', 40 | 'Mon, Jun 29, 4:50 PM', 41 | 'https://secure-content.meetupstatic.com/images/classic-events/491000108/375x210.jpg', 42 | 'GoLang Sri Lanka Community', 43 | [], 44 | 'Online' 45 | ), 46 | new Event( 47 | '2', 48 | 'Power BI Community: #002', 49 | 'Tue, Jun 30, 5:00 PM', 50 | 'https://secure-content.meetupstatic.com/images/classic-events/491024724/500x280.jpg', 51 | 'Sri Lankan Power BI Community', 52 | [], 53 | 'Online' 54 | ), 55 | 56 | new Event( 57 | '3', 58 | 'Flutter Layout`s Design Secrets', 59 | 'Tue, Jun 30, 5:00 PM', 60 | 'https://secure-content.meetupstatic.com/images/classic-events/490906389/500x280.jpg', 61 | 'Colombo Flutter Community', 62 | [], 63 | 'Online' 64 | ), 65 | new Event( 66 | '4', 67 | 'Scaffolding for a React Application', 68 | 'Tue, Jun 30, 5:00 PM', 69 | 'https://secure-content.meetupstatic.com/images/classic-events/490705895/500x280.jpg', 70 | 'Colombo React Native Meetup Group', 71 | [], 72 | 'Online' 73 | ), 74 | ]; 75 | -------------------------------------------------------------------------------- /src/app/shared/services/profile.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { ProfileService } from './profile.service'; 4 | 5 | describe('ProfileService', () => { 6 | let service: ProfileService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(ProfileService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/shared/services/profile.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { HttpClient } from '@angular/common/http' 3 | import { Observable } from 'rxjs'; 4 | import { User } from 'src/app/models/user.model'; 5 | import { environment } from 'src/environments/environment'; 6 | 7 | @Injectable({ 8 | providedIn: 'root' 9 | }) 10 | export class ProfileService { 11 | public baseUrl: string; 12 | public apiPath: string; 13 | public fullUrl: string; 14 | constructor(private http: HttpClient) { 15 | this.baseUrl = environment.baseUrl; 16 | this.apiPath = environment.userApiPath; 17 | this.fullUrl = `${this.baseUrl}/${this.apiPath}`; 18 | console.log(this.fullUrl); 19 | } 20 | 21 | 22 | /** 23 | * Returns user object 24 | */ 25 | public getProfileData(id: string): Observable { 26 | const url = `${this.fullUrl}/${id}`; 27 | return Observable.create((observer: any) => { 28 | setTimeout(() => { 29 | observer.next(userObject); 30 | }, 1000); 31 | }); 32 | } 33 | 34 | /** 35 | * Updates users object 36 | */ 37 | public updateProfileData(user: User): Observable { 38 | const url = `${this.fullUrl}/update`; 39 | return Observable.create((observer: any) => { 40 | setTimeout(() => { 41 | observer.next(true); 42 | }, 1000); 43 | }); 44 | } 45 | 46 | /** 47 | * Delete user account 48 | */ 49 | public deleteAccount(id: string): Observable { 50 | const url = `${this.fullUrl}/delete/${id}`; 51 | return Observable.create((observer: any) => { 52 | setTimeout(() => { 53 | observer.next(true); 54 | }, 1000); 55 | }); 56 | } 57 | 58 | /** 59 | * Updates user password 60 | */ 61 | public updatePassword(): Observable { 62 | return Observable.create((observer: any) => { 63 | setTimeout(() => { 64 | observer.next(true); 65 | }, 1000); 66 | }); 67 | } 68 | 69 | /** 70 | * Get users list 71 | */ 72 | public getAllProfiles(): Observable { 73 | const url = `${this.fullUrl}/list`; 74 | return Observable.create((observer: any) => { 75 | setTimeout(() => { 76 | observer.next(true); 77 | }, 1000); 78 | }); 79 | } 80 | 81 | } 82 | 83 | export const userObject: User = new User( 84 | 'U001', 85 | 'Chamod', 86 | 'Perera', 87 | 'hcsperera@gmail.com', 88 | '', 89 | 'https://avatars1.githubusercontent.com/u/19349315?s=460&u=0c5e235d9529fccdbfb37a31ed69655a6cd8dbb0&v=4', 90 | 'Horana', 91 | [], 92 | 'GCE' 93 | ); -------------------------------------------------------------------------------- /src/app/shared/shared.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { ProfileService } from './services/profile.service'; 4 | 5 | 6 | 7 | @NgModule({ 8 | declarations: [], 9 | imports: [ 10 | CommonModule 11 | ] 12 | }) 13 | export class SharedModule { } 14 | -------------------------------------------------------------------------------- /src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Stackoverflow-SL/DevHitch/33aee018aee84d2a1d070f6c3b1870cbf8699bf7/src/assets/.gitkeep -------------------------------------------------------------------------------- /src/assets/images/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Stackoverflow-SL/DevHitch/33aee018aee84d2a1d070f6c3b1870cbf8699bf7/src/assets/images/home.png -------------------------------------------------------------------------------- /src/assets/images/home2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Stackoverflow-SL/DevHitch/33aee018aee84d2a1d070f6c3b1870cbf8699bf7/src/assets/images/home2.png -------------------------------------------------------------------------------- /src/assets/images/signin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Stackoverflow-SL/DevHitch/33aee018aee84d2a1d070f6c3b1870cbf8699bf7/src/assets/images/signin.png -------------------------------------------------------------------------------- /src/environments/environment.dev.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: false, 3 | environmentName: 'dev', 4 | baseUrl: 'http://localhost:4000/api/v1', 5 | adminApiPath: 'admin', 6 | eventApiPath: 'event', 7 | groupApiPath: 'group', 8 | userApiPath: 'user' 9 | 10 | }; 11 | -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true, 3 | environmentName: 'prod', 4 | baseUrl: 'https://devhitch-api.azurewebsites.net/api/v1', 5 | adminApiPath: 'admin', 6 | eventApiPath: 'event', 7 | groupApiPath: 'group', 8 | userApiPath: 'user', 9 | }; 10 | -------------------------------------------------------------------------------- /src/environments/environment.qa.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: false, 3 | environmentName: 'qa', 4 | baseUrl: 'https://devhitch-api.azurewebsites.net/api/v1', 5 | adminApiPath: 'admin', 6 | eventApiPath: 'event', 7 | groupApiPath: 'group', 8 | userApiPath: 'user', 9 | }; 10 | -------------------------------------------------------------------------------- /src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. 3 | // The list of file replacements can be found in `angular.json`. 4 | 5 | export const environment = { 6 | production: false, 7 | environmentName: 'dev', 8 | baseUrl: 'https://devhitch-api.azurewebsites.net/api/v1', 9 | adminApiPath: 'admin', 10 | eventApiPath: 'event', 11 | groupApiPath: 'group', 12 | userApiPath: 'user', 13 | }; 14 | 15 | /* 16 | * For easier debugging in development mode, you can import the following file 17 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 18 | * 19 | * This import should be commented out in production mode because it will have a negative impact 20 | * on performance if an error is thrown. 21 | */ 22 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI. 23 | -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Stackoverflow-SL/DevHitch/33aee018aee84d2a1d070f6c3b1870cbf8699bf7/src/favicon.ico -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 12 | 13 | 14 | 15 | 16 | DevHitch | Platform to get all meetups,webinars happening in SL and to 17 | provide feedback 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 31 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule) 12 | .catch(err => console.error(err)); 13 | -------------------------------------------------------------------------------- /src/polyfills.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This file includes polyfills needed by Angular and is loaded before the app. 3 | * You can add your own extra polyfills to this file. 4 | * 5 | * This file is divided into 2 sections: 6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. 7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main 8 | * file. 9 | * 10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that 11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), 12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. 13 | * 14 | * Learn more in https://angular.io/guide/browser-support 15 | */ 16 | 17 | /*************************************************************************************************** 18 | * BROWSER POLYFILLS 19 | */ 20 | 21 | /** IE10 and IE11 requires the following for NgClass support on SVG elements */ 22 | // import 'classlist.js'; // Run `npm install --save classlist.js`. 23 | 24 | /** 25 | * Web Animations `@angular/platform-browser/animations` 26 | * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. 27 | * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). 28 | */ 29 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`. 30 | 31 | /** 32 | * By default, zone.js will patch all possible macroTask and DomEvents 33 | * user can disable parts of macroTask/DomEvents patch by setting following flags 34 | * because those flags need to be set before `zone.js` being loaded, and webpack 35 | * will put import in the top of bundle, so user need to create a separate file 36 | * in this directory (for example: zone-flags.ts), and put the following flags 37 | * into that file, and then add the following code before importing zone.js. 38 | * import './zone-flags'; 39 | * 40 | * The flags allowed in zone-flags.ts are listed here. 41 | * 42 | * The following flags will work for all browsers. 43 | * 44 | * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame 45 | * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick 46 | * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames 47 | * 48 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js 49 | * with the following flag, it will bypass `zone.js` patch for IE/Edge 50 | * 51 | * (window as any).__Zone_enable_cross_context_check = true; 52 | * 53 | */ 54 | 55 | /*************************************************************************************************** 56 | * Zone JS is required by default for Angular itself. 57 | */ 58 | import 'zone.js/dist/zone'; // Included with Angular CLI. 59 | 60 | 61 | /*************************************************************************************************** 62 | * APPLICATION IMPORTS 63 | */ 64 | -------------------------------------------------------------------------------- /src/styles.css: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | * { 3 | font-family: 'Ubuntu', sans-serif; 4 | } 5 | 6 | .edge-lg { 7 | border-radius: 120px; 8 | } 9 | 10 | .color-brown { 11 | color: #695419; 12 | } 13 | 14 | .font-14 { 15 | font-size: 14px; 16 | } 17 | 18 | .tag-tray .tag:not(:first-child){ 19 | margin-left: 5px; 20 | } 21 | 22 | .tag { 23 | padding: 5px 10px; 24 | margin-top: 10px; 25 | font-size: 13px; 26 | } 27 | 28 | .tag-pink { 29 | background-color: #ff6a59; 30 | color:#fff; 31 | } 32 | 33 | .tag-yellow { 34 | background-color: #ffc107; 35 | color:#000; 36 | } -------------------------------------------------------------------------------- /src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/dist/zone-testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | declare const require: { 11 | context(path: string, deep?: boolean, filter?: RegExp): { 12 | keys(): string[]; 13 | (id: string): T; 14 | }; 15 | }; 16 | 17 | // First, initialize the Angular testing environment. 18 | getTestBed().initTestEnvironment( 19 | BrowserDynamicTestingModule, 20 | platformBrowserDynamicTesting() 21 | ); 22 | // Then we find all the tests. 23 | const context = require.context('./', true, /\.spec\.ts$/); 24 | // And load the modules. 25 | context.keys().map(context); 26 | -------------------------------------------------------------------------------- /tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "./out-tsc/app", 5 | "types": [], 6 | }, 7 | "files": ["src/main.ts", "src/polyfills.ts"], 8 | "include": ["src/**/*.d.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "outDir": "./dist/out-tsc", 6 | "sourceMap": true, 7 | "declaration": false, 8 | "downlevelIteration": true, 9 | "experimentalDecorators": true, 10 | "module": "esnext", 11 | "moduleResolution": "node", 12 | "importHelpers": true, 13 | "target": "es2015", 14 | "lib": [ 15 | "es2018", 16 | "dom" 17 | ] 18 | }, 19 | "angularCompilerOptions": { 20 | "fullTemplateTypeCheck": true, 21 | "strictInjectionParameters": true 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "./out-tsc/spec", 5 | "types": [ 6 | "jasmine", 7 | "node" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts", 12 | "src/polyfills.ts" 13 | ], 14 | "include": [ 15 | "src/**/*.spec.ts", 16 | "src/**/*.d.ts" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tslint:recommended", 3 | "rules": { 4 | "align": { 5 | "options": [ 6 | "parameters", 7 | "statements" 8 | ] 9 | }, 10 | "array-type": false, 11 | "arrow-return-shorthand": true, 12 | "curly": true, 13 | "deprecation": { 14 | "severity": "warning" 15 | }, 16 | "component-class-suffix": true, 17 | "contextual-lifecycle": true, 18 | "directive-class-suffix": true, 19 | "directive-selector": [ 20 | true, 21 | "attribute", 22 | "app", 23 | "camelCase" 24 | ], 25 | "component-selector": [ 26 | true, 27 | "element", 28 | "app", 29 | "kebab-case" 30 | ], 31 | "eofline": true, 32 | "import-blacklist": [ 33 | true, 34 | "rxjs/Rx" 35 | ], 36 | "import-spacing": true, 37 | "indent": { 38 | "options": [ 39 | "spaces" 40 | ] 41 | }, 42 | "max-classes-per-file": false, 43 | "max-line-length": [ 44 | true, 45 | 140 46 | ], 47 | "member-ordering": [ 48 | true, 49 | { 50 | "order": [ 51 | "static-field", 52 | "instance-field", 53 | "static-method", 54 | "instance-method" 55 | ] 56 | } 57 | ], 58 | "no-console": [ 59 | true, 60 | "debug", 61 | "info", 62 | "time", 63 | "timeEnd", 64 | "trace" 65 | ], 66 | "no-empty": false, 67 | "no-inferrable-types": [ 68 | true, 69 | "ignore-params" 70 | ], 71 | "no-non-null-assertion": true, 72 | "no-redundant-jsdoc": true, 73 | "no-switch-case-fall-through": true, 74 | "no-var-requires": false, 75 | "object-literal-key-quotes": [ 76 | true, 77 | "as-needed" 78 | ], 79 | "quotemark": [ 80 | true, 81 | "single" 82 | ], 83 | "semicolon": { 84 | "options": [ 85 | "always" 86 | ] 87 | }, 88 | "space-before-function-paren": { 89 | "options": { 90 | "anonymous": "never", 91 | "asyncArrow": "always", 92 | "constructor": "never", 93 | "method": "never", 94 | "named": "never" 95 | } 96 | }, 97 | "typedef-whitespace": { 98 | "options": [ 99 | { 100 | "call-signature": "nospace", 101 | "index-signature": "nospace", 102 | "parameter": "nospace", 103 | "property-declaration": "nospace", 104 | "variable-declaration": "nospace" 105 | }, 106 | { 107 | "call-signature": "onespace", 108 | "index-signature": "onespace", 109 | "parameter": "onespace", 110 | "property-declaration": "onespace", 111 | "variable-declaration": "onespace" 112 | } 113 | ] 114 | }, 115 | "variable-name": { 116 | "options": [ 117 | "ban-keywords", 118 | "check-format", 119 | "allow-pascal-case" 120 | ] 121 | }, 122 | "whitespace": { 123 | "options": [ 124 | "check-branch", 125 | "check-decl", 126 | "check-operator", 127 | "check-separator", 128 | "check-type", 129 | "check-typecast" 130 | ] 131 | }, 132 | "no-conflicting-lifecycle": true, 133 | "no-host-metadata-property": true, 134 | "no-input-rename": true, 135 | "no-inputs-metadata-property": true, 136 | "no-output-native": true, 137 | "no-output-on-prefix": true, 138 | "no-output-rename": true, 139 | "no-outputs-metadata-property": true, 140 | "template-banana-in-box": true, 141 | "template-no-negated-async": true, 142 | "use-lifecycle-interface": true, 143 | "use-pipe-transform-interface": true 144 | }, 145 | "rulesDirectory": [ 146 | "codelyzer" 147 | ] 148 | } --------------------------------------------------------------------------------