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.
A simplified Jira clone built with Angular, Akita and ng-zorro
Thank you for your support! -> https://jira.trungk18.com/project/issue/2020
Check out the live demo -> https://jira.trungk18.com
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.
This is the collection of components that I wrote for jira.trungk18.com, includes:
Check out the storybook demo -> https://jira-storybook.trungk18.com/
If you like my work, feel free to:
Thanks a bunch for stopping by and supporting me!
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.
tooltip
, modal
, select
, icon
and more.As requested by @eric_cart, I draw a simple high-level design for the application.
I have an AppModule that will import:
BrowserModule
and any module that need to run forRoot
.AuthModule
that need to available on the whole platform.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
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
)
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.
I set the tentative deadline for motivating myself to finish the work on time. Otherwise, It will take forever to complete :)
June 13 - 27, 2020
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:
I will take two weeks break to:
TBD
View the current work in progress branch
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 |
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.
There are missing features from the live demo which should exist in a real product. All of them will be finished on Phase 2:
I built a very simple NestJS API to send a fixed data structure to the client. All of your interactivity with data will only be saved on the memory. If you refresh the page, it will be gone. Phase 2 will bring the application to live by saving the data into a database.
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.
Not all components have properly defined aria attributes, visual focus indicators, etc.
git clone https://github.com/trungk18/jira-clone-angular.git
cd jira-clone-angular
npm run start:front
for angular web applicationhttp://localhost:4200/
Update August 02, 2020: I changed the the API to use two simple JSON files for project and user. The API on heroku will go to sleep after sometimes idle. Therefore, if you open the webpage after a while without anyone using before, it will be very slow for the first load.
If you still want to use the API, you should follow those steps:
npm run start:back
for the APIhttp://localhost:3000
environment.ts
and environment.prod.ts
and uncomment the actual URL.auth.service.ts
, changethis._http.get<JUser>(`${this.baseUrl}/auth.json`);
to
this._http.post<JUser>(`${this.baseUrl}/auth`, { email, password });
project.service.ts
and changethis._http.get<JProject>(`${this.baseUrl}/project.json`);
to
this._http.get<JProject>(`${this.baseUrl}/project`);
I skipped writing test for this project. I might do it for the proper backend GraphQL API.
It was being tested on IE 11, Chrome and Firefox. For Safari, there are some minor alignment issues.
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.
Inspired by oldboyxx/jira_clone and Datlyfe/jira_clone.
I reused part of the HTML and CSS code from these projects.
Feel free to use my code on your project. It would be great if you put a reference to this repository.
Git introduces --filter option to git clone command, which filters out large files and objects (such as blobs) to create partial clone of a repo. Clone filters are especially useful for large repo and
描述 (Description) clone( )方法克隆匹配的DOM元素并选择克隆。 这对于将元素的副本移动到DOM中的另一个位置非常有用。 语法 (Syntax) 以下是使用此方法的简单语法 - <i>selector</i>.clone( ) 参数 (Parameters) 以下是此方法使用的所有参数的说明 - NA 例子 (Example) 以下是一个简单的例子,简单地显示了这种方法的用
描述 (Description) 它返回具有相同模型列表的集合的新实例。 语法 (Syntax) collection.clone() 例子 (Example) <!DOCTYPE html> <html> <head> <title>Collection Example</title> <script src = "https://code.jquery.com/
描述 (Description) 模型克隆用于创建模型的深层副本或将一个模型对象复制到另一个对象。 语法 (Syntax) model.clone() 例子 (Example) <!DOCTYPE html> <html> <head> <title> Model Example</title> <script src = "https://code.jquery.
JIRA是集项目计划、任务分配、需求管理、错误跟踪于一体的商业软件。JIRA创建的问题类型包括New Feature、Bug、Task和Improvement四种,还可以自己定义,所以它也一是过程管理系统。Jira融合了项目管理、任务管理和缺陷管理,许多著名的开源项目都采用了JIRA。 JIRA 是目前比较流行的基于Java架构的管理系统,由于Atlassian公 司对很多开源项目实行免费提供缺陷
git clone ,能把远程仓库完整地复制一份,放到本地的某个目录的下面。 练习 1,克隆一个远程仓库。我们之前创建了一个公开的远程仓库,也就是任何人都可以把这个仓库内容 clone 到他们自己的电脑上。这里我们假装自己是另外一个人,打开电脑上的命令行工具,进入到桌面上,然后再去 clone 一份自己创建的远程仓库。 cd ~/desktop git clone https://github.c