Repository files navigation

Angular RxJS Chat

Angular RxJS Chat Join the chat at https://gitter.im/ng-book/ng-book

An Angular chat app using Angular, RxJS, Angular CLI, Webpack, TypeScript, Services, Injectables, Karma, Forms, and tslint by the ng-book 2 team

This repo shows an example chat application using RxJS and Angular. The goal is to show how to use the Observables data architecture pattern within Angular. It also features:

  • Angular CLI, which configures Webpack with TypeScript, Karma, and tslint
  • Writing async components that work with RxJS
  • How to write injectable services in Angular
  • And much more

Angular RxJS Chat

Updated to Angular 10.1

This is just an updated version of the following repo: https://github.com/ng-book/angular2-rxjs-chat

Please buy their book if you like to learn how this app works.

Quick start

# clone the repo
git clone https://github.com/thorstenhirsch/angular-rxjs-chat.git
# change into the repo directorycd angular-rxjs-chat
# install
npm install
# run
npm start

Then visit http://localhost:4200 in your browser.

Architecture

The app has three models:

  • Message - holds individual chat messages
  • Thread - holds metadata for a group of Messages
  • User - holds data about an individual user

Model Diagram

And there are three services, one for each model:

There are also three top-level components:

  • ChatNavBar - for the top navigation bar and unread messages count
  • ChatThreads - for our clickable list of threads
  • ChatWindow - where we hold our current conversation

Angular RxJS Chat

Services Manage Observables

Each service publishes data as RxJS streams. The service clients subscribe to these streams to be notified of changes.

The MessagesService is the backbone of the application. All new messages are added to the newMessages stream and, more or less, all streams are derived from listening to newMessages. Even the Threads exposed by the ThreadsService are created by listening to the stream of Messages.

There are several other helpful streams that the services expose:

For example, the MessagesService exposes the messages stream which is a stream of the list of the all current messages. That is, messages emits an array for each record.

Similarly, the ThreadsService exposes a list of the chronologically-ordered threads in orderedThreads and so on.

Understanding how RxJS streams can be tricky, but this code is heavily commented. One strategy to grokking this code is to start at the components and see how they use the services. The other strategy is to get a copy of ng-book 2 where we explain each line in detail over ~60 pages.

Bots

This app implements a few simple chat bots. For instance:

  • Echo bot
  • Reversing bot
  • Waiting bot

Angular RxJS Chat Bots

Detailed Installation

Step 1: Install Node.js from the Node Website.

We recommend Node version 4.1 or above. You can check your node version by running this:

$ node -v
vv4.1...

Step 2: Install Dependencies

npm install

Running the App

npm run go

Then visit http://localhost:4200 in your browser.

Running the Tests

You can run the unit tests with:

npm run test

Future Plans

There are two big changes we plan to make to this repo:

1. Add HTTP Requests

Currently the bots are all client-side and there are no HTTP requests involved in the chats.

We will move the chat bots to a server and integrate API requests into this project once the Angular HTTP client development has settled down.

2. ON_PUSH change detection

Because we're using observables, we can improve the performance of these components by using ON_PUSH change detection. Again, once Angular development stabilizes, we'll be making this change.

Contributing

There are lots of other little things that need cleaned up such as:

  • More tests
  • Cleaning up the vendor scripts / typings
  • Simplifying the unread messages count

If you'd like to contribute, feel free to submit a pull request and we'll likely merge it in.

License

MIT

About

Example Chat Application using RxJS and Angular 2

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Angular RxJS Chat

Angular RxJS Chat Join the chat at https://gitter.im/ng-book/ng-book

An Angular chat app using Angular, RxJS, Angular CLI, Webpack, TypeScript, Services, Injectables, Karma, Forms, and tslint by the ng-book 2 team

This repo shows an example chat application using RxJS and Angular. The goal is to show how to use the Observables data architecture pattern within Angular. It also features:

  • Angular CLI, which configures Webpack with TypeScript, Karma, and tslint
  • Writing async components that work with RxJS
  • How to write injectable services in Angular
  • And much more

Angular RxJS Chat

Updated to Angular 10.1

This is just an updated version of the following repo: https://github.com/ng-book/angular2-rxjs-chat

Please buy their book if you like to learn how this app works.

Quick start

# clone the repo
git clone https://github.com/thorstenhirsch/angular-rxjs-chat.git
# change into the repo directorycd angular-rxjs-chat
# install
npm install
# run
npm start

Then visit http://localhost:4200 in your browser.

Architecture

The app has three models:

  • Message - holds individual chat messages
  • Thread - holds metadata for a group of Messages
  • User - holds data about an individual user

Model Diagram

And there are three services, one for each model:

There are also three top-level components:

  • ChatNavBar - for the top navigation bar and unread messages count
  • ChatThreads - for our clickable list of threads
  • ChatWindow - where we hold our current conversation

Angular RxJS Chat

Services Manage Observables

Each service publishes data as RxJS streams. The service clients subscribe to these streams to be notified of changes.

The MessagesService is the backbone of the application. All new messages are added to the newMessages stream and, more or less, all streams are derived from listening to newMessages. Even the Threads exposed by the ThreadsService are created by listening to the stream of Messages.

There are several other helpful streams that the services expose:

For example, the MessagesService exposes the messages stream which is a stream of the list of the all current messages. That is, messages emits an array for each record.

Similarly, the ThreadsService exposes a list of the chronologically-ordered threads in orderedThreads and so on.

Understanding how RxJS streams can be tricky, but this code is heavily commented. One strategy to grokking this code is to start at the components and see how they use the services. The other strategy is to get a copy of ng-book 2 where we explain each line in detail over ~60 pages.

Bots

This app implements a few simple chat bots. For instance:

  • Echo bot
  • Reversing bot
  • Waiting bot

Angular RxJS Chat Bots

Detailed Installation

Step 1: Install Node.js from the Node Website.

We recommend Node version 4.1 or above. You can check your node version by running this:

$ node -v
vv4.1...

Step 2: Install Dependencies

npm install

Running the App

npm run go

Then visit http://localhost:4200 in your browser.

Running the Tests

You can run the unit tests with:

npm run test

Future Plans

There are two big changes we plan to make to this repo:

1. Add HTTP Requests

Currently the bots are all client-side and there are no HTTP requests involved in the chats.

We will move the chat bots to a server and integrate API requests into this project once the Angular HTTP client development has settled down.

2. ON_PUSH change detection

Because we're using observables, we can improve the performance of these components by using ON_PUSH change detection. Again, once Angular development stabilizes, we'll be making this change.

Contributing

There are lots of other little things that need cleaned up such as:

  • More tests
  • Cleaning up the vendor scripts / typings
  • Simplifying the unread messages count

If you'd like to contribute, feel free to submit a pull request and we'll likely merge it in.

License

MIT

About

Example Chat Application using RxJS and Angular 2

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Angular RxJS Chat

Angular RxJS Chat Join the chat at https://gitter.im/ng-book/ng-book

An Angular chat app using Angular, RxJS, Angular CLI, Webpack, TypeScript, Services, Injectables, Karma, Forms, and tslint by the ng-book 2 team

This repo shows an example chat application using RxJS and Angular. The goal is to show how to use the Observables data architecture pattern within Angular. It also features:

  • Angular CLI, which configures Webpack with TypeScript, Karma, and tslint
  • Writing async components that work with RxJS
  • How to write injectable services in Angular
  • And much more

Angular RxJS Chat

Updated to Angular 10.1

This is just an updated version of the following repo: https://github.com/ng-book/angular2-rxjs-chat

Please buy their book if you like to learn how this app works.

Quick start

# clone the repo
git clone https://github.com/thorstenhirsch/angular-rxjs-chat.git
# change into the repo directorycd angular-rxjs-chat
# install
npm install
# run
npm start

Then visit http://localhost:4200 in your browser.

Architecture

The app has three models:

  • Message - holds individual chat messages
  • Thread - holds metadata for a group of Messages
  • User - holds data about an individual user

Model Diagram

And there are three services, one for each model:

There are also three top-level components:

  • ChatNavBar - for the top navigation bar and unread messages count
  • ChatThreads - for our clickable list of threads
  • ChatWindow - where we hold our current conversation

Angular RxJS Chat

Services Manage Observables

Each service publishes data as RxJS streams. The service clients subscribe to these streams to be notified of changes.

The MessagesService is the backbone of the application. All new messages are added to the newMessages stream and, more or less, all streams are derived from listening to newMessages. Even the Threads exposed by the ThreadsService are created by listening to the stream of Messages.

There are several other helpful streams that the services expose:

For example, the MessagesService exposes the messages stream which is a stream of the list of the all current messages. That is, messages emits an array for each record.

Similarly, the ThreadsService exposes a list of the chronologically-ordered threads in orderedThreads and so on.

Understanding how RxJS streams can be tricky, but this code is heavily commented. One strategy to grokking this code is to start at the components and see how they use the services. The other strategy is to get a copy of ng-book 2 where we explain each line in detail over ~60 pages.

Bots

This app implements a few simple chat bots. For instance:

  • Echo bot
  • Reversing bot
  • Waiting bot

Angular RxJS Chat Bots

Detailed Installation

Step 1: Install Node.js from the Node Website.

We recommend Node version 4.1 or above. You can check your node version by running this:

$ node -v
vv4.1...

Step 2: Install Dependencies

npm install

Running the App

npm run go

Then visit http://localhost:4200 in your browser.

Running the Tests

You can run the unit tests with:

npm run test

Future Plans

There are two big changes we plan to make to this repo:

1. Add HTTP Requests

Currently the bots are all client-side and there are no HTTP requests involved in the chats.

We will move the chat bots to a server and integrate API requests into this project once the Angular HTTP client development has settled down.

2. ON_PUSH change detection

Because we're using observables, we can improve the performance of these components by using ON_PUSH change detection. Again, once Angular development stabilizes, we'll be making this change.

Contributing

There are lots of other little things that need cleaned up such as:

  • More tests
  • Cleaning up the vendor scripts / typings
  • Simplifying the unread messages count

If you'd like to contribute, feel free to submit a pull request and we'll likely merge it in.

License

MIT

About

Example Chat Application using RxJS and Angular 2

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Angular RxJS Chat

Angular RxJS Chat Join the chat at https://gitter.im/ng-book/ng-book

An Angular chat app using Angular, RxJS, Angular CLI, Webpack, TypeScript, Services, Injectables, Karma, Forms, and tslint by the ng-book 2 team

This repo shows an example chat application using RxJS and Angular. The goal is to show how to use the Observables data architecture pattern within Angular. It also features:

  • Angular CLI, which configures Webpack with TypeScript, Karma, and tslint
  • Writing async components that work with RxJS
  • How to write injectable services in Angular
  • And much more

Angular RxJS Chat

Updated to Angular 10.1

This is just an updated version of the following repo: https://github.com/ng-book/angular2-rxjs-chat

Please buy their book if you like to learn how this app works.

Quick start

# clone the repo
git clone https://github.com/thorstenhirsch/angular-rxjs-chat.git
# change into the repo directorycd angular-rxjs-chat
# install
npm install
# run
npm start

Then visit http://localhost:4200 in your browser.

Architecture

The app has three models:

  • Message - holds individual chat messages
  • Thread - holds metadata for a group of Messages
  • User - holds data about an individual user

Model Diagram

And there are three services, one for each model:

There are also three top-level components:

  • ChatNavBar - for the top navigation bar and unread messages count
  • ChatThreads - for our clickable list of threads
  • ChatWindow - where we hold our current conversation

Angular RxJS Chat

Services Manage Observables

Each service publishes data as RxJS streams. The service clients subscribe to these streams to be notified of changes.

The MessagesService is the backbone of the application. All new messages are added to the newMessages stream and, more or less, all streams are derived from listening to newMessages. Even the Threads exposed by the ThreadsService are created by listening to the stream of Messages.

There are several other helpful streams that the services expose:

For example, the MessagesService exposes the messages stream which is a stream of the list of the all current messages. That is, messages emits an array for each record.

Similarly, the ThreadsService exposes a list of the chronologically-ordered threads in orderedThreads and so on.

Understanding how RxJS streams can be tricky, but this code is heavily commented. One strategy to grokking this code is to start at the components and see how they use the services. The other strategy is to get a copy of ng-book 2 where we explain each line in detail over ~60 pages.

Bots

This app implements a few simple chat bots. For instance:

  • Echo bot
  • Reversing bot
  • Waiting bot

Angular RxJS Chat Bots

Detailed Installation

Step 1: Install Node.js from the Node Website.

We recommend Node version 4.1 or above. You can check your node version by running this:

$ node -v
vv4.1...

Step 2: Install Dependencies

npm install

Running the App

npm run go

Then visit http://localhost:4200 in your browser.

Running the Tests

You can run the unit tests with:

npm run test

Future Plans

There are two big changes we plan to make to this repo:

1. Add HTTP Requests

Currently the bots are all client-side and there are no HTTP requests involved in the chats.

We will move the chat bots to a server and integrate API requests into this project once the Angular HTTP client development has settled down.

2. ON_PUSH change detection

Because we're using observables, we can improve the performance of these components by using ON_PUSH change detection. Again, once Angular development stabilizes, we'll be making this change.

Contributing

There are lots of other little things that need cleaned up such as:

  • More tests
  • Cleaning up the vendor scripts / typings
  • Simplifying the unread messages count

If you'd like to contribute, feel free to submit a pull request and we'll likely merge it in.

License

MIT

About

Example Chat Application using RxJS and Angular 2

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Angular RxJS Chat

Angular RxJS Chat Join the chat at https://gitter.im/ng-book/ng-book

An Angular chat app using Angular, RxJS, Angular CLI, Webpack, TypeScript, Services, Injectables, Karma, Forms, and tslint by the ng-book 2 team

This repo shows an example chat application using RxJS and Angular. The goal is to show how to use the Observables data architecture pattern within Angular. It also features:

  • Angular CLI, which configures Webpack with TypeScript, Karma, and tslint
  • Writing async components that work with RxJS
  • How to write injectable services in Angular
  • And much more

Angular RxJS Chat

Updated to Angular 10.1

This is just an updated version of the following repo: https://github.com/ng-book/angular2-rxjs-chat

Please buy their book if you like to learn how this app works.

Quick start

# clone the repo
git clone https://github.com/thorstenhirsch/angular-rxjs-chat.git
# change into the repo directorycd angular-rxjs-chat
# install
npm install
# run
npm start

Then visit http://localhost:4200 in your browser.

Architecture

The app has three models:

  • Message - holds individual chat messages
  • Thread - holds metadata for a group of Messages
  • User - holds data about an individual user

Model Diagram

And there are three services, one for each model:

There are also three top-level components:

  • ChatNavBar - for the top navigation bar and unread messages count
  • ChatThreads - for our clickable list of threads
  • ChatWindow - where we hold our current conversation

Angular RxJS Chat

Services Manage Observables

Each service publishes data as RxJS streams. The service clients subscribe to these streams to be notified of changes.

The MessagesService is the backbone of the application. All new messages are added to the newMessages stream and, more or less, all streams are derived from listening to newMessages. Even the Threads exposed by the ThreadsService are created by listening to the stream of Messages.

There are several other helpful streams that the services expose:

For example, the MessagesService exposes the messages stream which is a stream of the list of the all current messages. That is, messages emits an array for each record.

Similarly, the ThreadsService exposes a list of the chronologically-ordered threads in orderedThreads and so on.

Understanding how RxJS streams can be tricky, but this code is heavily commented. One strategy to grokking this code is to start at the components and see how they use the services. The other strategy is to get a copy of ng-book 2 where we explain each line in detail over ~60 pages.

Bots

This app implements a few simple chat bots. For instance:

  • Echo bot
  • Reversing bot
  • Waiting bot

Angular RxJS Chat Bots

Detailed Installation

Step 1: Install Node.js from the Node Website.

We recommend Node version 4.1 or above. You can check your node version by running this:

$ node -v
vv4.1...

Step 2: Install Dependencies

npm install

Running the App

npm run go

Then visit http://localhost:4200 in your browser.

Running the Tests

You can run the unit tests with:

npm run test

Future Plans

There are two big changes we plan to make to this repo:

1. Add HTTP Requests

Currently the bots are all client-side and there are no HTTP requests involved in the chats.

We will move the chat bots to a server and integrate API requests into this project once the Angular HTTP client development has settled down.

2. ON_PUSH change detection

Because we're using observables, we can improve the performance of these components by using ON_PUSH change detection. Again, once Angular development stabilizes, we'll be making this change.

Contributing

There are lots of other little things that need cleaned up such as:

  • More tests
  • Cleaning up the vendor scripts / typings
  • Simplifying the unread messages count

If you'd like to contribute, feel free to submit a pull request and we'll likely merge it in.

License

MIT

About

Example Chat Application using RxJS and Angular 2

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Angular RxJS Chat

Angular RxJS Chat Join the chat at https://gitter.im/ng-book/ng-book

An Angular chat app using Angular, RxJS, Angular CLI, Webpack, TypeScript, Services, Injectables, Karma, Forms, and tslint by the ng-book 2 team

This repo shows an example chat application using RxJS and Angular. The goal is to show how to use the Observables data architecture pattern within Angular. It also features:

  • Angular CLI, which configures Webpack with TypeScript, Karma, and tslint
  • Writing async components that work with RxJS
  • How to write injectable services in Angular
  • And much more

Angular RxJS Chat

Updated to Angular 10.1

This is just an updated version of the following repo: https://github.com/ng-book/angular2-rxjs-chat

Please buy their book if you like to learn how this app works.

Quick start

# clone the repo
git clone https://github.com/thorstenhirsch/angular-rxjs-chat.git
# change into the repo directorycd angular-rxjs-chat
# install
npm install
# run
npm start

Then visit http://localhost:4200 in your browser.

Architecture

The app has three models:

  • Message - holds individual chat messages
  • Thread - holds metadata for a group of Messages
  • User - holds data about an individual user

Model Diagram

And there are three services, one for each model:

There are also three top-level components:

  • ChatNavBar - for the top navigation bar and unread messages count
  • ChatThreads - for our clickable list of threads
  • ChatWindow - where we hold our current conversation

Angular RxJS Chat

Services Manage Observables

Each service publishes data as RxJS streams. The service clients subscribe to these streams to be notified of changes.

The MessagesService is the backbone of the application. All new messages are added to the newMessages stream and, more or less, all streams are derived from listening to newMessages. Even the Threads exposed by the ThreadsService are created by listening to the stream of Messages.

There are several other helpful streams that the services expose:

For example, the MessagesService exposes the messages stream which is a stream of the list of the all current messages. That is, messages emits an array for each record.

Similarly, the ThreadsService exposes a list of the chronologically-ordered threads in orderedThreads and so on.

Understanding how RxJS streams can be tricky, but this code is heavily commented. One strategy to grokking this code is to start at the components and see how they use the services. The other strategy is to get a copy of ng-book 2 where we explain each line in detail over ~60 pages.

Bots

This app implements a few simple chat bots. For instance:

  • Echo bot
  • Reversing bot
  • Waiting bot

Angular RxJS Chat Bots

Detailed Installation

Step 1: Install Node.js from the Node Website.

We recommend Node version 4.1 or above. You can check your node version by running this:

$ node -v
vv4.1...

Step 2: Install Dependencies

npm install

Running the App

npm run go

Then visit http://localhost:4200 in your browser.

Running the Tests

You can run the unit tests with:

npm run test

Future Plans

There are two big changes we plan to make to this repo:

1. Add HTTP Requests

Currently the bots are all client-side and there are no HTTP requests involved in the chats.

We will move the chat bots to a server and integrate API requests into this project once the Angular HTTP client development has settled down.

2. ON_PUSH change detection

Because we're using observables, we can improve the performance of these components by using ON_PUSH change detection. Again, once Angular development stabilizes, we'll be making this change.

Contributing

There are lots of other little things that need cleaned up such as:

  • More tests
  • Cleaning up the vendor scripts / typings
  • Simplifying the unread messages count

If you'd like to contribute, feel free to submit a pull request and we'll likely merge it in.

License

MIT

About

Example Chat Application using RxJS and Angular 2

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Angular RxJS Chat

Angular RxJS Chat Join the chat at https://gitter.im/ng-book/ng-book

An Angular chat app using Angular, RxJS, Angular CLI, Webpack, TypeScript, Services, Injectables, Karma, Forms, and tslint by the ng-book 2 team

This repo shows an example chat application using RxJS and Angular. The goal is to show how to use the Observables data architecture pattern within Angular. It also features:

  • Angular CLI, which configures Webpack with TypeScript, Karma, and tslint
  • Writing async components that work with RxJS
  • How to write injectable services in Angular
  • And much more

Angular RxJS Chat

Updated to Angular 10.1

This is just an updated version of the following repo: https://github.com/ng-book/angular2-rxjs-chat

Please buy their book if you like to learn how this app works.

Quick start

# clone the repo
git clone https://github.com/thorstenhirsch/angular-rxjs-chat.git
# change into the repo directorycd angular-rxjs-chat
# install
npm install
# run
npm start

Then visit http://localhost:4200 in your browser.

Architecture

The app has three models:

  • Message - holds individual chat messages
  • Thread - holds metadata for a group of Messages
  • User - holds data about an individual user

Model Diagram

And there are three services, one for each model:

There are also three top-level components:

  • ChatNavBar - for the top navigation bar and unread messages count
  • ChatThreads - for our clickable list of threads
  • ChatWindow - where we hold our current conversation

Angular RxJS Chat

Services Manage Observables

Each service publishes data as RxJS streams. The service clients subscribe to these streams to be notified of changes.

The MessagesService is the backbone of the application. All new messages are added to the newMessages stream and, more or less, all streams are derived from listening to newMessages. Even the Threads exposed by the ThreadsService are created by listening to the stream of Messages.

There are several other helpful streams that the services expose:

For example, the MessagesService exposes the messages stream which is a stream of the list of the all current messages. That is, messages emits an array for each record.

Similarly, the ThreadsService exposes a list of the chronologically-ordered threads in orderedThreads and so on.

Understanding how RxJS streams can be tricky, but this code is heavily commented. One strategy to grokking this code is to start at the components and see how they use the services. The other strategy is to get a copy of ng-book 2 where we explain each line in detail over ~60 pages.

Bots

This app implements a few simple chat bots. For instance:

  • Echo bot
  • Reversing bot
  • Waiting bot

Angular RxJS Chat Bots

Detailed Installation

Step 1: Install Node.js from the Node Website.

We recommend Node version 4.1 or above. You can check your node version by running this:

$ node -v
vv4.1...

Step 2: Install Dependencies

npm install

Running the App

npm run go

Then visit http://localhost:4200 in your browser.

Running the Tests

You can run the unit tests with:

npm run test

Future Plans

There are two big changes we plan to make to this repo:

1. Add HTTP Requests

Currently the bots are all client-side and there are no HTTP requests involved in the chats.

We will move the chat bots to a server and integrate API requests into this project once the Angular HTTP client development has settled down.

2. ON_PUSH change detection

Because we're using observables, we can improve the performance of these components by using ON_PUSH change detection. Again, once Angular development stabilizes, we'll be making this change.

Contributing

There are lots of other little things that need cleaned up such as:

  • More tests
  • Cleaning up the vendor scripts / typings
  • Simplifying the unread messages count

If you'd like to contribute, feel free to submit a pull request and we'll likely merge it in.

License

MIT

About

Example Chat Application using RxJS and Angular 2

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Angular RxJS Chat

Angular RxJS Chat Join the chat at https://gitter.im/ng-book/ng-book

An Angular chat app using Angular, RxJS, Angular CLI, Webpack, TypeScript, Services, Injectables, Karma, Forms, and tslint by the ng-book 2 team

This repo shows an example chat application using RxJS and Angular. The goal is to show how to use the Observables data architecture pattern within Angular. It also features:

  • Angular CLI, which configures Webpack with TypeScript, Karma, and tslint
  • Writing async components that work with RxJS
  • How to write injectable services in Angular
  • And much more

Angular RxJS Chat

Updated to Angular 10.1

This is just an updated version of the following repo: https://github.com/ng-book/angular2-rxjs-chat

Please buy their book if you like to learn how this app works.

Quick start

# clone the repo
git clone https://github.com/thorstenhirsch/angular-rxjs-chat.git
# change into the repo directorycd angular-rxjs-chat
# install
npm install
# run
npm start

Then visit http://localhost:4200 in your browser.

Architecture

The app has three models:

  • Message - holds individual chat messages
  • Thread - holds metadata for a group of Messages
  • User - holds data about an individual user

Model Diagram

And there are three services, one for each model:

There are also three top-level components:

  • ChatNavBar - for the top navigation bar and unread messages count
  • ChatThreads - for our clickable list of threads
  • ChatWindow - where we hold our current conversation

Angular RxJS Chat

Services Manage Observables

Each service publishes data as RxJS streams. The service clients subscribe to these streams to be notified of changes.

The MessagesService is the backbone of the application. All new messages are added to the newMessages stream and, more or less, all streams are derived from listening to newMessages. Even the Threads exposed by the ThreadsService are created by listening to the stream of Messages.

There are several other helpful streams that the services expose:

For example, the MessagesService exposes the messages stream which is a stream of the list of the all current messages. That is, messages emits an array for each record.

Similarly, the ThreadsService exposes a list of the chronologically-ordered threads in orderedThreads and so on.

Understanding how RxJS streams can be tricky, but this code is heavily commented. One strategy to grokking this code is to start at the components and see how they use the services. The other strategy is to get a copy of ng-book 2 where we explain each line in detail over ~60 pages.

Bots

This app implements a few simple chat bots. For instance:

  • Echo bot
  • Reversing bot
  • Waiting bot

Angular RxJS Chat Bots

Detailed Installation

Step 1: Install Node.js from the Node Website.

We recommend Node version 4.1 or above. You can check your node version by running this:

$ node -v
vv4.1...

Step 2: Install Dependencies

npm install

Running the App

npm run go

Then visit http://localhost:4200 in your browser.

Running the Tests

You can run the unit tests with:

npm run test

Future Plans

There are two big changes we plan to make to this repo:

1. Add HTTP Requests

Currently the bots are all client-side and there are no HTTP requests involved in the chats.

We will move the chat bots to a server and integrate API requests into this project once the Angular HTTP client development has settled down.

2. ON_PUSH change detection

Because we're using observables, we can improve the performance of these components by using ON_PUSH change detection. Again, once Angular development stabilizes, we'll be making this change.

Contributing

There are lots of other little things that need cleaned up such as:

  • More tests
  • Cleaning up the vendor scripts / typings
  • Simplifying the unread messages count

If you'd like to contribute, feel free to submit a pull request and we'll likely merge it in.

License

MIT

About

Example Chat Application using RxJS and Angular 2

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages