Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/chanda-abdul/angular-galleria-slideshow

This is a solution to the Galleria Slideshow Challenge on Frontend Mentor using Angular.
https://github.com/chanda-abdul/angular-galleria-slideshow

angular dynamic-components observables rxjs

Last synced: about 1 month ago
JSON representation

This is a solution to the Galleria Slideshow Challenge on Frontend Mentor using Angular.

Awesome Lists containing this project

README

        

# Frontend Mentor - Galleria slideshow site solution
![Design preview for the Galleria slideshow site coding challenge](/src/assets/images/preview.jpg)

This is a solution to the [Galleria slideshow site challenge on Frontend Mentor](https://www.frontendmentor.io/challenges/galleria-slideshow-site-tEA4pwsa6). Frontend Mentor challenges help you improve your coding skills by building realistic projects.

## Table of contents

- [Overview](#overview)
- [The challenge](#the-challenge)
- [Screenshots](#screenshots)
- [Links](#links)
- [My process](#my-process)
- [Built with](#built-with)
- [What I learned](#what-i-learned)
- [Continued development](#continued-development)
- [Useful resources](#useful-resources)
- [Author](#author)
# Overview

## The challenge

Users should be able to:
- [x] View the optimal layout for the app depending on their device's screen size
- [x] Mobile @ 375px
- [x] Tablet @ 768px
- [x] Desktop @ 1440px
- [x] See hover states for all interactive elements on the page
- [x] Navigate the slideshow and view each painting in a lightbox

## Screenshots

Mobile Screenshots @ 375px

- Home - Main Gallery


- Individual Slide during slideshow


- Individual Slide expanded into Lightbox

Tablet View @ 768px

- Home - Main Gallery


- Individual Slide during slideshow


- Individual Slide expanded into Lightbox

Desktop View @ 1440px

- Home - Main Gallery


- Individual Slide during slideshow


- Individual Slide expanded into Lightbox

## Links
- Solution URL: [Click for Solution](https://github.com/Chanda-Abdul/Angular-Galleria-Slideshow)
- Live Site URL:[Click for Live Site](https://legendary-maamoul-0b4a74.netlify.app/)

## My process
- basic structure, components
- basic css
- functionality
- polish css
- fix bugs
- deploy
### Project Structure

- `/` `Home` Component
- masonry gallery view of all available images for slideshow
- `/slide/:id` `SlideDetails` Component
- select one image from gallery view to see slide details, but slideshow does not start
- `/slideshow` `Slideshow` Component
- `SlideDetails` Component, starting with first slide
- `/slideshow/:id` || `/lightbox`Slideshow Component
- `SlideDetails` Component, starting with slide `:id`

# Approach
## Built with

[Angular icon](https://angular.io/)
- [RxJs(Reactive Extensions for JavaScript)](https://rxjs.dev/guide/overview) - a library for composing async and event-based programs by using observable sequences(think of RxJS as [Lodash](https://lodash.com/) for events.)
- [Observables
]()
- [Routing]()
- [Dynamic Components](https://angular.io/guide/dynamic-component-loader)
- [Services](https://angular.io/guide/creating-injectable-service)

[Material UI icon](https://material.angular.io/)
- [Image lists
](https://m2.material.io/components/image-lists#types) - display a collection of images in an organized grid. Image list was used to create the Masonry layout
- [Progress bar](https://material.angular.io/components/progress-bar/overview) - a horizontal progress-bar for indicating progress and activity.

[TypeScript icon](https://www.typescriptlang.org/)[JavaScript icon](https://www.javascript.com/)


[Sass icon](https://sass-lang.com/)CSS icon
- Mobile-first workflow
- Flexbox
- CSS Grid

[HTML icon ]()


[Figma icon](https://www.figma.com/)


[Netlify icon]()

## What I learned

- Observables❗️
- Observable Life Cycle🤔
- Subject
- Subscriptions
- `.pipe()`
- `.take()`
- `.takeUntil()`
- `.interval()`

- Masonry Layouts 🤦🏽‍♀️
- [Angular Material Image lists
](https://m2.material.io/components/image-lists#types) - Image lists display a collection of images in an organized grid. Image list was used to create Masonry layout
- using `get()`ers

- [Dynamic Components]()

- [Services]() - for cross component communication
- Routing
- child routes
- wildcard routes

## Continued development
### Features to Add

Update masonry layout
- [ ] change from vertical to horizontal masonry layout, using a different library?

⏸ button to pause slideshow

Animations

Option to view/add more artwork
- [ ] allow user to view more artwork by incorprating an API like [Artsy](https://developers.artsy.net/) and categories/collections selection?

Infinite Scroll
- [ ] after adding [Artsy (/genes)](https://developers.artsy.net/v2/docs/genes) API, add infinite scroll?
(✨[Implementing Infinite Scrolling Using Angular](https://levelup.gitconnected.com/implementing-infinite-scrolling-using-angular-82c66f27e817))

Add landing page?
- [ ] maybe combine this project with [Frontend Mentor - Modern Art Gallery Website Solution](https://github.com/Chanda-Abdul/Modern-Art-Gallery-Website). Create some kind of "view virtual gallery" option

## Useful resources
- [Youtube icon What is Observable | Observables | Angular 12+](https://youtu.be/V4iMyVnQPqM) - This is an amazing article which helped me finally understand XYZ. I'd recommend it to anyone still learning this concept.
- [Youtube icon Unsubscribe to an Observable | Observables | Angular 12+](https://youtu.be/8j5kvLddNwM) - This is an amazing article which helped me finally understand XYZ. I'd recommend it to anyone still learning this concept.
- [Youtube icon Flexbox or grid - How to decide?](https://youtu.be/3elGSZSWTbM) - This helped me for XYZ reason. I really liked this pattern and will use it going forward.
- [Material UI icon Material Design Image Lists for Masonry Layout](https://material.io/components/image-lists) 💁🏽‍♀️ 🧱 - This is an amazing article which helped me finally understand XYZ. I'd recommend it to anyone still learning this concept.
- [pluralsight icon RxJS in Angular: Reactive Development
by Deborah Kurata ](https://www.pluralsight.com/courses/rxjs-angular-reactive-development) - This helped me for XYZ reason. I really liked this pattern and will use it going forward.
- [Learn RxJs](https://www.learnrxjs.io/) - This is an amazing article which helped me finally understand XYZ. I'd recommend it to anyone still learning this concept.
- [Udemy icon Angular - The Complete Guide (2023 Edition) by Maximilian Schwarzmüller => Dynamic Components
](https://www.udemy.com/course/the-complete-guide-to-angular-2/) - This helped me for XYZ reason. I really liked this pattern and will use it going forward.
- [Example resource 2](https://www.example.com) - This is an amazing article which helped me finally understand XYZ. I'd recommend it to anyone still learning this concept.

## Author
- Frontend Mentor - [@Chanda-Abdul](https://www.frontendmentor.io/profile/Chanda-Abdul)
- Website - [Chanda Codes](https://chandacodes.com/)
- GitHub - [github.com/Chanda-Abdul](https://github.com/Chanda-Abdul)