Giter Club home page Giter Club logo

jira-clone-angular's Introduction

A simplified Jira clone built with Angular, Akita and ng-zorro

Phase two will not be completed as planned. Both Chau Tran and I was too busy with some other commitments. View our working in progress Graph QL branch.

You can check the storybook collection of components I wrote for Jira Clone ➡ jira-storybook.trungk18.com 📕

Thanks for your continuous support. Stay tuned! 💪

There have been a handful of cool Jira-cloned apps written in React/VueJS, which makes me wonder Why not Angular? And here you go.

This is not only a simplified Jira clone built with Angular, but also an example of a modern, real-world Angular codebase.

Merry Christmas

Thank you for your support! -> https://jira.trungk18.com/project/issue/2020

Jira clone built with Angular and Akita

Working application

Check out the live demo -> https://jira.trungk18.com

Jira clone built with Angular and Akita

Storybook

What is Storybook

Storybook helps you build UI components in isolation from your app's business logic, data, and context. That makes it easy to develop hard-to-reach states. Save these UI states as stories to revisit during development, testing, or QA.

Jira Clone Storybook

This is the collection of components that I wrote for jira.trungk18.com, includes:

  • Avatar
  • Breadcrumbs
  • Button
  • Input
  • More to come...

Check out the storybook demo -> https://jira-storybook.trungk18.com/

Jira clone built with Angular and Akita

Support

If you like my work, feel free to:

  • ⭐ this repository. And we will be happy together :)
  • Tweet about Angular Jira clone
  • Buy Me A Coffee

Thanks a bunch for stopping by and supporting me!

Who is it for 🤷‍♀️

I have been working with Angular for about four years. I built cool stuff at Zyllem but almost all of them are internal apps which is difficult to show.

This is a showcase application I've built in my spare time to experiment the new library that I wanted to try before: Akita, TailwindCSS, ng-zorro.

There are many Angular examples on the web but most of them are way too simple. I like to think that this codebase contains enough complexity to offer valuable insights to Angular developers of all skill levels while still being relatively easy to understand.


This piece of work is also part of our technical series angular-vietnam/100-days-of-angular which aims at enabling everyone, after 100 days of learning Angular with us, to self-build their application with the similar scale. Our desire is to advocate and grow the Angular developer community in Vietnam.

Tech stack

Tech logos

High level design

As requested by @eric_cart, I draw a simple high-level design for the application.

Application architecture

I have an AppModule that will import:

Jira clone built with Angular and Akita - Application architecture

  • Angular needed modules such as BrowserModule and any module that need to run forRoot.
  • The application core modules such as AuthModule that need to available on the whole platform.
  • And I also configured the router to lazy load any modules only when I needed. Otherwise, everything will be loaded when I start the application. For instance, LoginModule when I open the URL at /login and ProjectModule when the URL is /project. Inside each modules, I could import whatever modules that are required. Such as I need the JiraControlModule for some custom UI components for the ProjectModule

Simple data interaction flow

As I am using Akita state management, I follow the Akita documentation for the data flow. I found it is simple to understand comparing with ngrx terms (reducer, selector, effect)

Jira clone built with Angular and Akita - Simple data interaction flow

I set up a project state with initial data. The main heavy lifting part I think is the project service, it contains all the interacting with project store. Such as after fetching the project successfully, I update the store immediately inside the service itself. The last lego block was to expose the data through project query. Any components can start to inject project query and consume data from there.

If you are using ngrx, you have to dispatch an action when you started fetching the project, and then there is an effect somewhere that was detached from your context need to handle the action, send a request to the API server. And finally, the effect will tell whether the data was successfully fetched or not. There is nothing wrong with ngrx approach, it is just too much concept and layer that you need to understand. To be honest, I used to afraid of integrating ngrx in my project because of the unnecessary complexity it would bring.

Features and Roadmap

I set the tentative deadline for motivating myself to finish the work on time. Otherwise, It will take forever to complete :)

Phase 1 - Angular application and simple Nest API

June 13 - 27, 2020

  • Proven, scalable, and easy to understand project structure
  • Simple drag and drop kanban board
  • Add/update issue
  • Search/filtering issues
  • Add comments

Noted: All of your interactions with data such as leave a comment or change the issue detail will not be saved to the persistent database. Currently, the application will serve a fixed structure of data every time you open the app. It means if you reload the browser, all of your changes will be gone.

Phase 2 will bring you a proper API where you can log in and save your work.

While working with this application, I have the opportunity to revisit some of the interesting topics:

  • TailwindCSS configuration - that's awesome
  • Scrollable layout with Flexbox
  • Deploy Angular application to Netlify

I will take two weeks break to:

Phase 2

TBD

  • Refactor the mono repo to use Nx Workspace
  • GraphQL API and store data on the actual database
  • Authentication

View the current work in progress branch

Tutorial

When I look at the application, it is huge. When the task is huge, you usually don't know where and how to start working with them. I started to break the big task into a simple to-do list on notion. Once I know what needs to be done, what I need is to follow the plan. That's my approach.

I learned a lot of stuff. I know you might also have a curiosity about the process of building the same scale app as well. That's why I am writing a tutorial series on how I built Angular Jira clone from scratch. I hope you guys will learn something from that too :)

I will try to be as detailed as possible. Hopefully through the tutorial, you will get the idea and will start working on your own application soon. Please bear with me.

Its series will also be published in Vietnamese as part of our angular-vietnam/100-days-of-angular.

Part Description Status
00 Behind the 900 stars repository - Slide Done
00 Behind a thousand stars repository - Angular Air Done
00 Prerequisites Done
01 Create a new repository and set up a new Angular application with CLI Done
02 Build the application layout with flex and TailwindCSS Done
03 Setup Akita state management Done
04 Build an editable textbox Done
05 Build an interactive drag and drop board Done
06 Build a markdown text editor Done
07 Build a rich text HTML editor Done
08 Create placeholder loading (like Facebook's cards loading) Done

Time spending

It is a side project that I only spent time outside of the office hours to work on. One day, my team and I were fire fighting on PROD until 11 PM. After taking a shower, I continue with Angular Jira clone for another two hours...

According to waka time report, I have spent about 45 hours working on this project. Which is equivalent to watch the whole Stranger Things series twice.

I really enjoyed working on this project. The interactive kanban board took me sometimes, it is challenging but exciting at the same time.

Jira clone built with Angular and Akita - Time spending

What's currently missing?

There are missing features from the live demo which should exist in a real product. All of them will be finished on Phase 2:

Proper authentication system 🔐

I am currently sending the same email and a random password to the server without any check to get the current user back. Phase 2 will also bring a proper authentication system.

Accessibility ♿

Not all components have properly defined aria attributes, visual focus indicators, etc.

Setting up development environment 🛠

  • git clone https://github.com/trungk18/jira-clone-angular.git
  • cd jira-clone-angular
  • npm start for angular web application
  • The app should run on http://localhost:4200/

Unit/Integration tests 🧪

I skipped writing test for this project. I might do it for the proper backend GraphQL API.

Compatibility

It was being tested on IE 11, Chrome and Firefox. For Safari, there are some minor alignment issues.

Author: Trung Vo ✍️

  • A young and passionate front-end engineer. Working with Angular and TypeScript. Like photography, running, cooking, and reading books.
  • Personal blog: https://trungk18.com/
  • Say hello: trungk18 [et] gmail [dot] com

Contributing

If you have any ideas, just open an issue and tell me what you think.

If you'd like to contribute, please fork the repository and make changes as you'd like. Pull requests are warmly welcome.

Credits

Inspired by oldboyxx/jira_clone and Datlyfe/jira_clone.

I reused part of the HTML and CSS code from these projects.

License

Feel free to use my code on your project. It would be great if you put a reference to this repository.

MIT

jira-clone-angular's People

Contributors

darlau avatar darxx avatar dependabot[bot] avatar jordanpowell88 avatar trungvose avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jira-clone-angular's Issues

ng serve is not working

Describe the bug
ng serve is not working when followed the steps in part 1 of your tutorial. :(
I am getting the below error msg.

Schema validation failed with the following errors:
Data path "" should NOT have additional properties(customWebpackConfig).

Failed to setup the tailwind/webpack configuration.... hell its damn confusing whats wrong in it.

Expected behavior
server should start wthout error

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [win 10]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]
  • Angular 11
    Smartphone (please complete the following information):
  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

Business analysis

Không biết có thêm phần phân tích thiết kế back-end ko ạ ?, nếu có thì cho em xin thêm thông để có thể triển khai thiết kết Database và viết API
Chân thành cảm ơn tác giả, e đã start cho tác giả rồi nhé

When adding the new ticket, the assignees dropdown was not render correctly after searching

Describe the bug
When adding the new ticket, the assignees dropdown was not render correctly after search for a certain user.

To Reproduce
Steps to reproduce the behavior:

  1. Open Add new issue modal
  2. Search for an user on the assignee.
  3. Clear the text.

Expected behavior
The user should be render all the time./

Screenshots

It is listed here https://jira.trungk18.com/project/issue/9667

Assignee bug

Desktop (please complete the following information):
Chrome

[Project style] Use Nrwl nx tooling to help manage the project in a mono-repo

Is your feature request related to a problem? Please describe.
It's a bit difficult when building a front and back end project in the same workspace:
Managing things like deployments and common dependencies can become tricky.
Slitting code up into re-usable libraries - that are isolated from the main application

Describe the solution you'd like
I would like to request that you/we make use of the nrwl nx extensions within this project - thus helping to manage a mono-repo styles project like this easier.

Additional context
Nx is an open platform with plugins for many modern tools and frameworks. It has support for TypeScript, Angular, Cypress, Jest, Prettier and Nest.js, among others. With Nx, you get a consistent dev experience regardless of the tools used.

https://nx.dev/angular/getting-started/why-nx

Naturally I would be happy to help - if needs be..?

Cool setup!

Hi just to let u know I was thinking doing the same setup, I think works really well :)

About the guard for fetching into the store, maybe you could use a resolver instead 🤔

Search value didn't get render if you only enter one letter

Describe the bug

On the search drawler box, if you type only one letter. The result won't display.

To Reproduce
Steps to reproduce the behavior:

  1. Go to Project
  2. Click Search
  3. On the search modal, type one letter.
  4. The result didn't display right the way. Instead, display blank.

Expected behavior
The result will display no matter what the length of the input

Screenshots
Search bug

Additional context

Anh Chau Tran suggested it could be potentially causing by *ngIf on the template to render the result only when the searchTerm has some value.
The async was try to subscribe before the template was render.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.