From 61c863b3b42023ca8a75a5909980cab315514504 Mon Sep 17 00:00:00 2001 From: RobertSenkel Date: Mon, 27 Jan 2025 10:42:50 +0100 Subject: [PATCH 1/4] added location filter for meetups page --- projects/utils/src/lib/post-metadata.ts | 1 + src/app/app.routes.ts | 7 ++ .../locations/locations.component.html | 12 +++ .../locations/locations.component.scss | 4 + .../locations/locations.component.spec.ts | 22 ++++++ .../locations/locations.component.ts | 23 ++++++ .../meetup-footer.component.html | 7 ++ .../meetup-footer.component.scss | 26 +++++++ .../meetup-footer.component.spec.ts | 22 ++++++ .../meetup-footer/meetup-footer.component.ts | 13 ++++ .../locations-tab.component.html | 6 ++ .../locations-tab.component.scss | 0 .../locations-tab.component.spec.ts | 22 ++++++ .../locations-tab/locations-tab.component.ts | 33 ++++++++ src/app/core/model/locations.model.ts | 5 ++ src/app/core/model/post.model.ts | 2 + src/app/core/services/posts.service.ts | 22 ++++++ .../features/location/location.component.html | 42 +++++++++++ .../features/location/location.component.scss | 0 .../location/location.component.spec.ts | 22 ++++++ .../features/location/location.component.ts | 71 ++++++++++++++++++ .../features/meetups/meetups.component.html | 10 ++- src/app/features/meetups/meetups.component.ts | 41 +++++++--- src/assets/email-banner.png | Bin 0 -> 56411 bytes 24 files changed, 402 insertions(+), 11 deletions(-) create mode 100644 src/app/components/locations/locations.component.html create mode 100644 src/app/components/locations/locations.component.scss create mode 100644 src/app/components/locations/locations.component.spec.ts create mode 100644 src/app/components/locations/locations.component.ts create mode 100644 src/app/components/meetup-footer/meetup-footer.component.html create mode 100644 src/app/components/meetup-footer/meetup-footer.component.scss create mode 100644 src/app/components/meetup-footer/meetup-footer.component.spec.ts create mode 100644 src/app/components/meetup-footer/meetup-footer.component.ts create mode 100644 src/app/core/layout/locations-tab/locations-tab.component.html create mode 100644 src/app/core/layout/locations-tab/locations-tab.component.scss create mode 100644 src/app/core/layout/locations-tab/locations-tab.component.spec.ts create mode 100644 src/app/core/layout/locations-tab/locations-tab.component.ts create mode 100644 src/app/core/model/locations.model.ts create mode 100644 src/app/features/location/location.component.html create mode 100644 src/app/features/location/location.component.scss create mode 100644 src/app/features/location/location.component.spec.ts create mode 100644 src/app/features/location/location.component.ts create mode 100644 src/assets/email-banner.png diff --git a/projects/utils/src/lib/post-metadata.ts b/projects/utils/src/lib/post-metadata.ts index 17b5aa65..fc7e327d 100644 --- a/projects/utils/src/lib/post-metadata.ts +++ b/projects/utils/src/lib/post-metadata.ts @@ -11,6 +11,7 @@ export function extractPostMetaData(post: string, metaonly: boolean = false) { ?.split(',') .map(n => n.trim()) || [], category: header.match(/^Category: ([^\n]+)/im)?.[1] || '', + location: header.match(/^Location: ([^\n]+)/im)?.[1] || '', tags: header .match(/^Tags: ([^\n]+)/im)?.[1] ?.split(',') diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index 3c02a3c6..26d4cf4c 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -44,6 +44,13 @@ export const routes: Routes = [ m => m.CategoryComponent ), }, + { + path: 'location/:loc', + loadComponent: () => + import('./features/location/location.component').then( + m => m.LocationComponent + ), + }, { path: 'principles', loadComponent: () => diff --git a/src/app/components/locations/locations.component.html b/src/app/components/locations/locations.component.html new file mode 100644 index 00000000..17094741 --- /dev/null +++ b/src/app/components/locations/locations.component.html @@ -0,0 +1,12 @@ +
+ + + @for (category of locations; track $index) { + + } + +
diff --git a/src/app/components/locations/locations.component.scss b/src/app/components/locations/locations.component.scss new file mode 100644 index 00000000..ee671236 --- /dev/null +++ b/src/app/components/locations/locations.component.scss @@ -0,0 +1,4 @@ +:host { + background: var(--blog-palette-neutral); + display: block; +} diff --git a/src/app/components/locations/locations.component.spec.ts b/src/app/components/locations/locations.component.spec.ts new file mode 100644 index 00000000..4de0cfa5 --- /dev/null +++ b/src/app/components/locations/locations.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LocationsComponent } from './locations.component'; + +describe('LocationsComponent', () => { + let component: LocationsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [LocationsComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(LocationsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/locations/locations.component.ts b/src/app/components/locations/locations.component.ts new file mode 100644 index 00000000..739a123b --- /dev/null +++ b/src/app/components/locations/locations.component.ts @@ -0,0 +1,23 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MatTabChangeEvent, MatTabsModule } from '@angular/material/tabs'; +import { Location } from '../../core/model/locations.model'; + +@Component({ + selector: 'blog-locations', + standalone: true, + imports: [CommonModule, MatTabsModule], + templateUrl: './locations.component.html', + styleUrl: './locations.component.scss', +}) +export class LocationsComponent { + @Input() locations!: Location[]; + @Input() active!: Location | null; + @Output() selected = new EventEmitter(); + + Location = Object.fromEntries(Object.entries(Location)); + + onChange(event: MatTabChangeEvent) { + this.selected.emit(event.tab.labelClass); + } +} diff --git a/src/app/components/meetup-footer/meetup-footer.component.html b/src/app/components/meetup-footer/meetup-footer.component.html new file mode 100644 index 00000000..2210dd53 --- /dev/null +++ b/src/app/components/meetup-footer/meetup-footer.component.html @@ -0,0 +1,7 @@ +
+ +
+ +
+
+
diff --git a/src/app/components/meetup-footer/meetup-footer.component.scss b/src/app/components/meetup-footer/meetup-footer.component.scss new file mode 100644 index 00000000..3d2571ed --- /dev/null +++ b/src/app/components/meetup-footer/meetup-footer.component.scss @@ -0,0 +1,26 @@ +@use 'breakpoints' as responsive; + +mat-card { + display: flex; + flex-direction: row; + padding: 1rem; + + .title { + margin: 0; + padding: 0 1rem; + flex-wrap: wrap; + display: flex; + align-content: center; + } +} + +img { + width: 100%; +} + +[data-role='button'] { + transition: 0.15s ease-out transform; + &:hover { + transform: scale(1.02); + } +} diff --git a/src/app/components/meetup-footer/meetup-footer.component.spec.ts b/src/app/components/meetup-footer/meetup-footer.component.spec.ts new file mode 100644 index 00000000..7b26ead1 --- /dev/null +++ b/src/app/components/meetup-footer/meetup-footer.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { MeetupFooterComponent } from './meetup-footer.component'; + +describe('MeetupFooterComponent', () => { + let component: MeetupFooterComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [MeetupFooterComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(MeetupFooterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/meetup-footer/meetup-footer.component.ts b/src/app/components/meetup-footer/meetup-footer.component.ts new file mode 100644 index 00000000..de87daca --- /dev/null +++ b/src/app/components/meetup-footer/meetup-footer.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { MatCardModule } from '@angular/material/card'; +import { MatRippleModule } from '@angular/material/core'; + +@Component({ + selector: 'blog-meetup-footer', + standalone: true, + imports: [MatCardModule, MatRippleModule], + templateUrl: './meetup-footer.component.html', + styleUrl: './meetup-footer.component.scss', +}) +export class MeetupFooterComponent { +} diff --git a/src/app/core/layout/locations-tab/locations-tab.component.html b/src/app/core/layout/locations-tab/locations-tab.component.html new file mode 100644 index 00000000..e555483a --- /dev/null +++ b/src/app/core/layout/locations-tab/locations-tab.component.html @@ -0,0 +1,6 @@ +@if (locations$ | async; as locations) { + +} diff --git a/src/app/core/layout/locations-tab/locations-tab.component.scss b/src/app/core/layout/locations-tab/locations-tab.component.scss new file mode 100644 index 00000000..e69de29b diff --git a/src/app/core/layout/locations-tab/locations-tab.component.spec.ts b/src/app/core/layout/locations-tab/locations-tab.component.spec.ts new file mode 100644 index 00000000..b68e93a2 --- /dev/null +++ b/src/app/core/layout/locations-tab/locations-tab.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LocationsTabComponent } from './locations-tab.component'; + +describe('LocationsTabComponent', () => { + let component: LocationsTabComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [LocationsTabComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(LocationsTabComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/core/layout/locations-tab/locations-tab.component.ts b/src/app/core/layout/locations-tab/locations-tab.component.ts new file mode 100644 index 00000000..c029fb43 --- /dev/null +++ b/src/app/core/layout/locations-tab/locations-tab.component.ts @@ -0,0 +1,33 @@ +import { Component } from '@angular/core'; +import { Observable, map } from 'rxjs'; +import { AsyncPipe } from '@angular/common'; +import { ActivatedRoute, Router } from '@angular/router'; +import { PostsService } from '../../services/posts.service'; +import { Location } from '../../model/locations.model'; +import { LocationsComponent } from "../../../components/locations/locations.component"; + +@Component({ + selector: 'blog-locations-tab', + standalone: true, + imports: [AsyncPipe, LocationsComponent], + templateUrl: './locations-tab.component.html', + styleUrl: './locations-tab.component.scss', +}) +export class LocationsTabComponent { + locations$: Observable = this.postsService + .getLocations(); + + selectedLocation$ = this.activatedRoute.paramMap.pipe( + map(params => params.get('loc') as Location) + ); + + constructor( + private postsService: PostsService, + private router: Router, + private activatedRoute: ActivatedRoute + ) {} + + navigate(selected: string | string[]) { + this.router.navigate(['location', selected]); + } +} diff --git a/src/app/core/model/locations.model.ts b/src/app/core/model/locations.model.ts new file mode 100644 index 00000000..4bdf70b6 --- /dev/null +++ b/src/app/core/model/locations.model.ts @@ -0,0 +1,5 @@ +export enum Location { + 'Krakow' = 'Krakow', + 'Hyderabad' = 'Hyderabad', + 'Amsterdam' = 'Amsterdam', +} diff --git a/src/app/core/model/post.model.ts b/src/app/core/model/post.model.ts index ebe8a2dc..fdabe6d4 100644 --- a/src/app/core/model/post.model.ts +++ b/src/app/core/model/post.model.ts @@ -1,6 +1,7 @@ import { Author } from './author.model'; import { Category } from './categories.model'; import { ProcessedAsset } from './content.model'; +import { Location } from './locations.model'; export interface Post { title: string; @@ -11,6 +12,7 @@ export interface Post { authors: Array; featured?: boolean; category: Category; + location?: Location; tags: string[]; readingTime: string; specialCategory: boolean; diff --git a/src/app/core/services/posts.service.ts b/src/app/core/services/posts.service.ts index 8fd46f72..a4d3f8f3 100644 --- a/src/app/core/services/posts.service.ts +++ b/src/app/core/services/posts.service.ts @@ -10,6 +10,7 @@ import { AssetsService } from './assets.service'; import { MarkdownService } from 'ngx-markdown'; import { SPECIAL_CATEGORIES } from '../config/configuration-tokens'; import { AuthorsList } from '../model/author.model'; +import { Location } from '../model/locations.model'; const POSTS_PER_PAGE = 8; @@ -111,6 +112,27 @@ export class PostsService { ); } + getLocations(): Observable { + return this.getAllPosts().pipe( + map(posts => { + const locations = posts.reduce( + (acc: { [location: string]: number }, curr: Post) => { + if (curr.location) { + acc[curr.location] = (acc[curr.location] || 0) + 1; + } + return acc; + }, + {} + ); + + const entries = Object.entries(locations); + return entries + .sort(([_, countA], [__, countB]) => countB - countA) + .map(([location]) => location as Location); + }) + ); + } + private decoratePost(post: Post | PostContent, authors: AuthorsList): Post | PostContent { return { ...post, diff --git a/src/app/features/location/location.component.html b/src/app/features/location/location.component.html new file mode 100644 index 00000000..c0c11371 --- /dev/null +++ b/src/app/features/location/location.component.html @@ -0,0 +1,42 @@ + + +@if (posts$ | async; as posts) { + @if (posts.posts.length) { +
+ +
+ +
+ + +
+ } @else { +
+ +
+ } +} + +@defer (on viewport) { + + + + + + +} @placeholder { +
+ + +
+} diff --git a/src/app/features/location/location.component.scss b/src/app/features/location/location.component.scss new file mode 100644 index 00000000..e69de29b diff --git a/src/app/features/location/location.component.spec.ts b/src/app/features/location/location.component.spec.ts new file mode 100644 index 00000000..72e5e9cf --- /dev/null +++ b/src/app/features/location/location.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LocationComponent } from './location.component'; + +describe('LocationComponent', () => { + let component: LocationComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [LocationComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(LocationComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/features/location/location.component.ts b/src/app/features/location/location.component.ts new file mode 100644 index 00000000..179271aa --- /dev/null +++ b/src/app/features/location/location.component.ts @@ -0,0 +1,71 @@ +import { Component } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { PostsListComponent } from '../../components/posts-list/posts-list.component'; +import { NavigationService } from '../../core/services/navigation.service'; +import { Observable, combineLatest, map, switchMap } from 'rxjs'; +import { Post, Posts } from '../../core/model/post.model'; +import { AuthorsList } from '../../core/model/author.model'; +import { PostsService } from '../../core/services/posts.service'; +import { AuthorsService } from '../../core/services/authors.service'; +import { MatPaginatorModule, PageEvent } from '@angular/material/paginator'; +import { DividerComponent } from '../../components/divider/divider.component'; +import { JobsComponent } from '../../components/jobs/jobs.component'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { ActivatedRoute } from '@angular/router'; +import { NotFoundComponent } from '../not-found/not-found.component'; +import { TransitionComponent } from '../../components/transition/transition.component'; +import { LocationsTabComponent } from '../../core/layout/locations-tab/locations-tab.component'; +import { MeetupFooterComponent } from '../../components/meetup-footer/meetup-footer.component'; + +@Component({ + selector: 'blog-location', + standalone: true, + imports: [ + CommonModule, + LocationsTabComponent, + PostsListComponent, + MatPaginatorModule, + DividerComponent, + MeetupFooterComponent, + JobsComponent, + MatProgressSpinnerModule, + NotFoundComponent, + TransitionComponent, + ], + templateUrl: './location.component.html', + styleUrl: './location.component.scss', + providers: [NavigationService], +}) +export class LocationComponent { + location$ = this.activatedRoute.paramMap.pipe( + map(params => params.get('loc')) + ); + + currentPage$ = this.navigationService.currentPage$; + posts$: Observable = combineLatest([ + this.currentPage$, + this.location$, + ]).pipe( + switchMap(([page, location]) => + this.postsService.getPosts( + page, + undefined, + false, + (post: Post) => post.location === location + ) + ) + ); + authors$: Observable = this.authorsService.getAuthors(); + locations$: Observable = this.postsService.getLocations(); + + constructor( + private postsService: PostsService, + private authorsService: AuthorsService, + private navigationService: NavigationService, + private activatedRoute: ActivatedRoute + ) {} + + navigate(page: PageEvent) { + this.navigationService.navigate(page.pageIndex); + } +} diff --git a/src/app/features/meetups/meetups.component.html b/src/app/features/meetups/meetups.component.html index 17dc155e..f69f437b 100644 --- a/src/app/features/meetups/meetups.component.html +++ b/src/app/features/meetups/meetups.component.html @@ -5,7 +5,12 @@ } - + @if (locations$ | async; as locations) { + + }
@@ -21,4 +26,7 @@ aria-label="Select page">
+ + + } diff --git a/src/app/features/meetups/meetups.component.ts b/src/app/features/meetups/meetups.component.ts index 5d058937..46df7866 100644 --- a/src/app/features/meetups/meetups.component.ts +++ b/src/app/features/meetups/meetups.component.ts @@ -8,18 +8,25 @@ import { AsyncPipe } from '@angular/common'; import { MeetupsHeaderComponent } from '../../components/meetups-header/meetups-header.component'; import { MatPaginator, PageEvent } from '@angular/material/paginator'; import { NavigationService } from '../../core/services/navigation.service'; -import { map, switchMap } from 'rxjs'; +import { map, Observable, switchMap } from 'rxjs'; +import { Category } from '../../core/model/categories.model'; +import { ActivatedRoute, Router } from '@angular/router'; +import { LocationsComponent } from '../../components/locations/locations.component'; +import { Location } from '../../core/model/locations.model'; +import { MeetupFooterComponent } from '../../components/meetup-footer/meetup-footer.component'; @Component({ selector: 'blog-meetups', standalone: true, imports: [ - DividerComponent, GradientComponent, PostsListComponent, AsyncPipe, MeetupsHeaderComponent, + LocationsComponent, + DividerComponent, + MeetupFooterComponent, MatPaginator, ], providers: [NavigationService], @@ -27,27 +34,41 @@ import { map, switchMap } from 'rxjs'; styleUrl: './meetups.component.scss', }) export class MeetupsComponent { + locations$: Observable = this.postsService + .getLocations(); + + selectedCategory$ = this.activatedRoute.paramMap.pipe( + map(params => params.get('loc') as Location) + ); currentPage$ = this.navigationService.currentPage$; newestMeetup$ = this.findNewestMeetup$(); allMeetups$ = this.getAllMeetups$(); constructor( private postsService: PostsService, - private navigationService: NavigationService + private navigationService: NavigationService, + private activatedRoute: ActivatedRoute, + private router: Router, ) {} navigate(page: PageEvent) { this.navigationService.navigate(page.pageIndex); } + navigateToLocation(selected: string | string[]) { + this.router.navigate(['location', selected]); + } + private findNewestMeetup$() { - return this.postsService.getPosts( - undefined, - undefined, - false, - post => this.isMeetupCategory(post), - (a, b) => this.compareByDate(a, b) - ).pipe(map(result => result.posts[0])); + return this.postsService + .getPosts( + undefined, + undefined, + false, + post => this.isMeetupCategory(post), + (a, b) => this.compareByDate(a, b) + ) + .pipe(map(result => result.posts[0])); } private getAllMeetups$() { diff --git a/src/assets/email-banner.png b/src/assets/email-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..8029d5d1fe0cdac75390f296c71877105fddb241 GIT binary patch literal 56411 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 Date: Mon, 27 Jan 2025 12:31:56 +0100 Subject: [PATCH 2/4] update posts with location --- .../posts/meetups/arduino-weather-station-on-azure-iot/post.md | 2 ++ content/posts/meetups/challenges-of-machine-learning/post.md | 2 ++ content/posts/meetups/easy-debugging-in-playwright/post.md | 2 ++ content/posts/meetups/friends-of-figma-x-backbase/post.md | 2 ++ content/posts/meetups/generative-ai-friend-or-foe-/post.md | 2 ++ content/posts/meetups/github-actions/post.md | 2 ++ .../meetups/how-fintech-is-changing-financial-sector/post.md | 2 ++ content/posts/meetups/impact-of-using-new-ai-tools/post.md | 2 ++ .../posts/meetups/innersourcing-on-backbase-customer/post.md | 2 ++ content/posts/meetups/learn-and-play-cybergames-meetup/post.md | 2 ++ .../posts/meetups/memory-management-for-data-structures/post.md | 2 ++ .../meetups/methods-and-tools-for-effective-learning/post.md | 2 ++ content/posts/meetups/new-features-of-java/post.md | 2 ++ .../meetups/new-trends-in-ai-your-ticket-to-the-states/post.md | 2 ++ .../meetups/preventing-cross-site-scripting-attacks/post.md | 2 ++ content/posts/meetups/taking-care-of-mental-health/post.md | 2 ++ .../posts/meetups/zero-trust-principles-for-developers/post.md | 2 ++ 17 files changed, 34 insertions(+) diff --git a/content/posts/meetups/arduino-weather-station-on-azure-iot/post.md b/content/posts/meetups/arduino-weather-station-on-azure-iot/post.md index 2a71f2ec..475cf0dd 100644 --- a/content/posts/meetups/arduino-weather-station-on-azure-iot/post.md +++ b/content/posts/meetups/arduino-weather-station-on-azure-iot/post.md @@ -10,6 +10,8 @@ Category: meetups tags: krakow, meetup, Arduino, IoT, Azure +Location: Krakow + --- ## ✅ Book your spot diff --git a/content/posts/meetups/challenges-of-machine-learning/post.md b/content/posts/meetups/challenges-of-machine-learning/post.md index a91f284b..2cd7ac25 100644 --- a/content/posts/meetups/challenges-of-machine-learning/post.md +++ b/content/posts/meetups/challenges-of-machine-learning/post.md @@ -9,6 +9,8 @@ Date: 2023-10-01T07:09:11.368Z Category: meetups tags: krakow, meetup, Machine Learning + +Location: Krakow --- diff --git a/content/posts/meetups/easy-debugging-in-playwright/post.md b/content/posts/meetups/easy-debugging-in-playwright/post.md index 752a0e0a..fb731f98 100644 --- a/content/posts/meetups/easy-debugging-in-playwright/post.md +++ b/content/posts/meetups/easy-debugging-in-playwright/post.md @@ -10,6 +10,8 @@ Category: meetups tags: krakow, meetup, Playwright, debugging +Location: Krakow + --- ## ✅ Book your spot diff --git a/content/posts/meetups/friends-of-figma-x-backbase/post.md b/content/posts/meetups/friends-of-figma-x-backbase/post.md index 1498c631..8aceaddb 100644 --- a/content/posts/meetups/friends-of-figma-x-backbase/post.md +++ b/content/posts/meetups/friends-of-figma-x-backbase/post.md @@ -9,6 +9,8 @@ Date: 2025-01-07T07:18:14.406Z Category: meetups tags: krakow, meetup, UX + +Location: Krakow --- diff --git a/content/posts/meetups/generative-ai-friend-or-foe-/post.md b/content/posts/meetups/generative-ai-friend-or-foe-/post.md index 6080db94..b3e64b40 100644 --- a/content/posts/meetups/generative-ai-friend-or-foe-/post.md +++ b/content/posts/meetups/generative-ai-friend-or-foe-/post.md @@ -9,6 +9,8 @@ Date: 2024-02-01T07:15:19.654Z Category: meetups tags: krakow, meetup, AI + +Location: Krakow --- diff --git a/content/posts/meetups/github-actions/post.md b/content/posts/meetups/github-actions/post.md index c7cc9f46..0f2bee40 100644 --- a/content/posts/meetups/github-actions/post.md +++ b/content/posts/meetups/github-actions/post.md @@ -10,6 +10,8 @@ Category: meetups tags: krakow, meetup, Github, GitHub Actions +Location: Krakow + --- ## ✅ Book your spot diff --git a/content/posts/meetups/how-fintech-is-changing-financial-sector/post.md b/content/posts/meetups/how-fintech-is-changing-financial-sector/post.md index dcf95cbb..d7c11dc5 100644 --- a/content/posts/meetups/how-fintech-is-changing-financial-sector/post.md +++ b/content/posts/meetups/how-fintech-is-changing-financial-sector/post.md @@ -9,6 +9,8 @@ Date: 2023-05-01T07:03:38.357Z Category: meetups tags: krakow, meetup, FinTech + +Location: Krakow --- diff --git a/content/posts/meetups/impact-of-using-new-ai-tools/post.md b/content/posts/meetups/impact-of-using-new-ai-tools/post.md index e389c341..9eb6556c 100644 --- a/content/posts/meetups/impact-of-using-new-ai-tools/post.md +++ b/content/posts/meetups/impact-of-using-new-ai-tools/post.md @@ -10,6 +10,8 @@ Category: meetups tags: krakow, meetup, AI, OpenAI +Location: Krakow + --- ## ✅ Book your spot diff --git a/content/posts/meetups/innersourcing-on-backbase-customer/post.md b/content/posts/meetups/innersourcing-on-backbase-customer/post.md index 5f9d28c0..8b738e25 100644 --- a/content/posts/meetups/innersourcing-on-backbase-customer/post.md +++ b/content/posts/meetups/innersourcing-on-backbase-customer/post.md @@ -9,6 +9,8 @@ Date: 2023-06-01T07:05:04.716Z Category: meetups tags: krakow, meetup, iOS + +Location: Krakow --- diff --git a/content/posts/meetups/learn-and-play-cybergames-meetup/post.md b/content/posts/meetups/learn-and-play-cybergames-meetup/post.md index 0cd001cc..794857fb 100644 --- a/content/posts/meetups/learn-and-play-cybergames-meetup/post.md +++ b/content/posts/meetups/learn-and-play-cybergames-meetup/post.md @@ -9,6 +9,8 @@ Date: 2024-07-01T08:56:49.711Z Category: meetups tags: krakow, meetup, Cybergames + +Location: Krakow --- diff --git a/content/posts/meetups/memory-management-for-data-structures/post.md b/content/posts/meetups/memory-management-for-data-structures/post.md index 6f4dc153..b20c2873 100644 --- a/content/posts/meetups/memory-management-for-data-structures/post.md +++ b/content/posts/meetups/memory-management-for-data-structures/post.md @@ -9,6 +9,8 @@ Date: 2024-11-01T08:59:33.493Z Category: meetups tags: krakow, meetup, Backend + +Location: Krakow --- diff --git a/content/posts/meetups/methods-and-tools-for-effective-learning/post.md b/content/posts/meetups/methods-and-tools-for-effective-learning/post.md index a6b38365..d2a21f78 100644 --- a/content/posts/meetups/methods-and-tools-for-effective-learning/post.md +++ b/content/posts/meetups/methods-and-tools-for-effective-learning/post.md @@ -9,6 +9,8 @@ Date: 2023-12-01T07:11:29.876Z Category: meetups tags: krakow, meetup, Learning + +Location: Krakow --- diff --git a/content/posts/meetups/new-features-of-java/post.md b/content/posts/meetups/new-features-of-java/post.md index 6bb51d74..2ffa4f46 100644 --- a/content/posts/meetups/new-features-of-java/post.md +++ b/content/posts/meetups/new-features-of-java/post.md @@ -9,6 +9,8 @@ Date: 2023-11-01T07:10:03.011Z Category: meetups tags: krakow, meetup, Java, Back-end + +Location: Krakow --- diff --git a/content/posts/meetups/new-trends-in-ai-your-ticket-to-the-states/post.md b/content/posts/meetups/new-trends-in-ai-your-ticket-to-the-states/post.md index 96b1fe7e..df22b3c4 100644 --- a/content/posts/meetups/new-trends-in-ai-your-ticket-to-the-states/post.md +++ b/content/posts/meetups/new-trends-in-ai-your-ticket-to-the-states/post.md @@ -9,6 +9,8 @@ Date: 2024-12-01T09:00:11.276Z Category: meetups tags: krakow, meetup, AI, Travel + +Location: Krakow --- diff --git a/content/posts/meetups/preventing-cross-site-scripting-attacks/post.md b/content/posts/meetups/preventing-cross-site-scripting-attacks/post.md index 5e5df539..8e44e987 100644 --- a/content/posts/meetups/preventing-cross-site-scripting-attacks/post.md +++ b/content/posts/meetups/preventing-cross-site-scripting-attacks/post.md @@ -9,6 +9,8 @@ Date: 2023-09-01T07:06:24.046Z Category: meetups tags: krakow, meetup, hacking, backend + +Location: Krakow --- diff --git a/content/posts/meetups/taking-care-of-mental-health/post.md b/content/posts/meetups/taking-care-of-mental-health/post.md index d91e908e..179068e9 100644 --- a/content/posts/meetups/taking-care-of-mental-health/post.md +++ b/content/posts/meetups/taking-care-of-mental-health/post.md @@ -9,6 +9,8 @@ Date: 2024-06-01T08:56:12.211Z Category: meetups tags: krakow, meetup, Health + +Location: Krakow --- diff --git a/content/posts/meetups/zero-trust-principles-for-developers/post.md b/content/posts/meetups/zero-trust-principles-for-developers/post.md index eb35679b..32d5f341 100644 --- a/content/posts/meetups/zero-trust-principles-for-developers/post.md +++ b/content/posts/meetups/zero-trust-principles-for-developers/post.md @@ -9,6 +9,8 @@ Date: 2024-01-01T07:14:28.488Z Category: meetups tags: krakow, meetup, Zero-Trust + +Location: Krakow --- From f981dc3bb5c74f697b951cc5f1e5f98d3420fe0f Mon Sep 17 00:00:00 2001 From: RobertSenkel Date: Tue, 28 Jan 2025 22:23:10 +0100 Subject: [PATCH 3/4] fix comments --- src/app/app.routes.ts | 2 +- src/app/features/meetups/meetups.component.ts | 2 +- tools/meetup-scaffolder/src/meetup-scaffolder/schema.json | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index 26d4cf4c..4e94d8a0 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -45,7 +45,7 @@ export const routes: Routes = [ ), }, { - path: 'location/:loc', + path: 'meetups/:loc', loadComponent: () => import('./features/location/location.component').then( m => m.LocationComponent diff --git a/src/app/features/meetups/meetups.component.ts b/src/app/features/meetups/meetups.component.ts index 46df7866..e227e3df 100644 --- a/src/app/features/meetups/meetups.component.ts +++ b/src/app/features/meetups/meetups.component.ts @@ -56,7 +56,7 @@ export class MeetupsComponent { } navigateToLocation(selected: string | string[]) { - this.router.navigate(['location', selected]); + this.router.navigate(['meetups', selected]); } private findNewestMeetup$() { diff --git a/tools/meetup-scaffolder/src/meetup-scaffolder/schema.json b/tools/meetup-scaffolder/src/meetup-scaffolder/schema.json index 2c3c71b4..b5124ef7 100644 --- a/tools/meetup-scaffolder/src/meetup-scaffolder/schema.json +++ b/tools/meetup-scaffolder/src/meetup-scaffolder/schema.json @@ -22,6 +22,10 @@ "meetups" ], "x-prompt": "In which of these categories your post fits best?" + }, + "location": { + "type": "string", + "x-prompt": "Enter in which place new meetup will appear?" } }, "required": ["title", "excerpt", "tags" ], From b85deb0a4481d1bfa0186446215f154d7f59dc1e Mon Sep 17 00:00:00 2001 From: RobertSenkel Date: Wed, 29 Jan 2025 11:33:41 +0100 Subject: [PATCH 4/4] update meetup-scaffold --- .../meetup-scaffolder/src/meetup-scaffolder/files/post.md | 2 ++ tools/meetup-scaffolder/src/meetup-scaffolder/schema.json | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/meetup-scaffolder/src/meetup-scaffolder/files/post.md b/tools/meetup-scaffolder/src/meetup-scaffolder/files/post.md index e4e247b4..475942b1 100644 --- a/tools/meetup-scaffolder/src/meetup-scaffolder/files/post.md +++ b/tools/meetup-scaffolder/src/meetup-scaffolder/files/post.md @@ -9,6 +9,8 @@ Date: <%= currentDate %> Category: meetups tags: <%= tags %> + +Location: <%= location %> --- diff --git a/tools/meetup-scaffolder/src/meetup-scaffolder/schema.json b/tools/meetup-scaffolder/src/meetup-scaffolder/schema.json index b5124ef7..38e08544 100644 --- a/tools/meetup-scaffolder/src/meetup-scaffolder/schema.json +++ b/tools/meetup-scaffolder/src/meetup-scaffolder/schema.json @@ -25,7 +25,12 @@ }, "location": { "type": "string", - "x-prompt": "Enter in which place new meetup will appear?" + "enum": [ + "Krakow", + "Amsterdam", + "Hyderabad" + ], + "x-prompt": "In which of these locations your post fits best?" } }, "required": ["title", "excerpt", "tags" ],