From 08552d1427446270f95a05688113f8b5813671bb Mon Sep 17 00:00:00 2001 From: pilliarunkumar Date: Mon, 15 Feb 2021 15:05:15 +0530 Subject: [PATCH 01/12] fixing the routing issue --- .../my-discussion.component.html | 10 +++---- .../side-pannel/side-pannel.component.ts | 29 +++++++++++-------- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.html b/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.html index c34e373c..483df611 100644 --- a/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.html +++ b/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.html @@ -8,25 +8,25 @@ {{userInitial}}
-
+
{{department}}
{{location}}
- +
- {{data.topiccount || 0 }} + {{data?.topiccount || 0 }} Discussions - {{data.postcount || 0 }} + {{data?.postcount || 0 }} Posts
- +
diff --git a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts index e525dbb7..27792d50 100644 --- a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts +++ b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts @@ -24,7 +24,7 @@ export class SidePannelComponent implements OnInit, OnDestroy { defaultPage = 'categories'; - queryParams: any; + data: any; hideSidePanel: boolean; selectedTab: string; @@ -43,17 +43,17 @@ export class SidePannelComponent implements OnInit, OnDestroy { // TODO: loader or spinner this.hideSidePanel = document.body.classList.contains('widget'); this.telemetryUtils.logImpression(NSDiscussData.IPageName.HOME); - this.paramsSubscription = this.activatedRoute.queryParams.pipe(first()).subscribe((params) => { - this.queryParams = params; - this.discussService.userName = _.get(params, 'userName'); - const rawCategories = JSON.parse(_.get(params, 'categories')); + this.activatedRoute.data.subscribe((data) => { + this.data = data; + this.discussService.userName = _.get(data, 'userName'); + const rawCategories = _.get(data, 'categories'); this.discussService.forumIds = _.get(rawCategories, 'result'); - }); - localStorage.setItem('userName', _.get(this.queryParams, 'userName')); - this.discussService.initializeUserDetails(localStorage.getItem('userName')); - this.activatedRoute.data.subscribe((data) => { - this.menu = data.menuOptions.length > 0 ? data.menuOptions: CONSTANTS.MENUOPTIONS + + localStorage.setItem('userName', _.get(this.data, 'userName')); + this.discussService.initializeUserDetails(this.discussService.userName); + + this.menu = data.menuOptions.length > 0 ? data.menuOptions : CONSTANTS.MENUOPTIONS }) for (let i = 0; i < this.menu.length; i++) { let item = this.menu @@ -71,7 +71,12 @@ export class SidePannelComponent implements OnInit, OnDestroy { isActive(selectedItem) { debugger - if(this.router.url.indexOf(`/${selectedItem}`) > -1 || this.selectedTab === selectedItem){ + if (this.router.url.indexOf(`/${selectedItem}`) > -1 || this.selectedTab === selectedItem) { + if(!this.selectedTab){ + this.selectedTab = selectedItem + } + return true + } else if (selectedItem === 'categories' && !this.selectedTab ) { return true } return false @@ -83,7 +88,7 @@ export class SidePannelComponent implements OnInit, OnDestroy { if (event) { this.telemetryUtils.logInteract(event, NSDiscussData.IPageName.HOME); } - this.router.navigate([`${CONSTANTS.ROUTES.DISCUSSION}${pageName}`], { queryParams: this.queryParams }); + this.router.navigate([`${CONSTANTS.ROUTES.DISCUSSION}${pageName}`]); } ngOnDestroy() { From 3dfe1af38ca8c77db6e6c45b4bdcf44d8d8a7c24 Mon Sep 17 00:00:00 2001 From: pilliarunkumar Date: Tue, 16 Feb 2021 10:55:54 +0530 Subject: [PATCH 02/12] fixing router navigate issue --- .../src/lib/components/side-pannel/side-pannel.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts index 27792d50..7927b231 100644 --- a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts +++ b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts @@ -88,7 +88,7 @@ export class SidePannelComponent implements OnInit, OnDestroy { if (event) { this.telemetryUtils.logInteract(event, NSDiscussData.IPageName.HOME); } - this.router.navigate([`${CONSTANTS.ROUTES.DISCUSSION}${pageName}`]); + this.router.navigate([`${pageName}`], { relativeTo: this.activatedRoute }); } ngOnDestroy() { From 3151fd3b3cfde3b18650a5763c98ed62e58eff26 Mon Sep 17 00:00:00 2001 From: pilliarunkumar Date: Tue, 16 Feb 2021 17:00:29 +0530 Subject: [PATCH 03/12] Task#SB-22655 feat: configure driven menu optinos --- package.json | 1 + .../discussion-ui/assets/styles/global.scss | 52 +- .../discussion-ui/assets/styles/theme.scss | 72 ++ projects/discussion-ui/package.json | 2 +- .../src/lib/common/constants.json | 2 +- .../src/lib/components/components.module.ts | 11 +- .../discuss-category.component.css | 2 + .../discuss-category.component.ts | 11 +- .../discuss-home/discuss-home.component.ts | 5 - .../discuss-start/discuss-start.component.ts | 1 - .../discuss-tags/discuss-tags.component.html | 3 +- .../discuss-tags/discuss-tags.component.scss | 62 +- .../discuss-tags/discuss-tags.component.ts | 29 +- .../discussion-details.component.html | 671 ++++++++---------- .../discussion-details.component.scss | 29 +- .../discussion-details.component.ts | 83 ++- .../lib-entry/lib-entry.component.html | 40 +- .../lib-entry/lib-entry.component.scss | 6 +- .../my-discussion.component.html | 14 +- .../my-discussion/my-discussion.component.ts | 5 +- .../side-pannel/side-pannel.component.html | 7 +- .../side-pannel/side-pannel.component.scss | 8 +- .../side-pannel/side-pannel.component.ts | 35 +- .../src/lib/config/url.config.ts | 9 +- .../discussion-routing.module.ts | 16 +- .../src/lib/elements/elements.module.ts | 17 +- .../post-reply/post-reply.component.css | 51 ++ .../post-reply/post-reply.component.html | 37 + .../post-reply/post-reply.component.spec.ts | 25 + .../post-reply/post-reply.component.ts | 55 ++ .../related-discussion.component.html | 25 + .../related-discussion.component.scss | 60 ++ .../related-discussion.component.spec.ts | 25 + .../related-discussion.component.ts | 24 + .../pipe-relative-time.pipe.spec.ts | 8 + .../pipe-relative-time.pipe.ts | 19 + .../src/lib/pipes/pipes.module.ts | 5 +- .../src/lib/services/config.service.spec.ts | 12 + .../src/lib/services/config.service.ts | 44 ++ .../src/lib/services/discussion.service.ts | 36 +- 40 files changed, 1069 insertions(+), 550 deletions(-) create mode 100644 projects/discussion-ui/assets/styles/theme.scss create mode 100644 projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.css create mode 100644 projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.html create mode 100644 projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.spec.ts create mode 100644 projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.ts create mode 100644 projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.html create mode 100644 projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.scss create mode 100644 projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.spec.ts create mode 100644 projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.ts create mode 100644 projects/discussion-ui/src/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.spec.ts create mode 100644 projects/discussion-ui/src/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.ts create mode 100644 projects/discussion-ui/src/lib/services/config.service.spec.ts create mode 100644 projects/discussion-ui/src/lib/services/config.service.ts diff --git a/package.json b/package.json index b71d4e28..0e67fd06 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "karma-jasmine": "~1.1.2", "karma-jasmine-html-reporter": "^0.2.2", "lodash-es": "^4.17.20", + "moment": "^2.29.1", "ng-packagr": "^4.2.0", "ngx-chips": "2.0.2", "protractor": "~5.4.0", diff --git a/projects/discussion-ui/assets/styles/global.scss b/projects/discussion-ui/assets/styles/global.scss index ad23f529..eb0a0d5c 100644 --- a/projects/discussion-ui/assets/styles/global.scss +++ b/projects/discussion-ui/assets/styles/global.scss @@ -1,28 +1,22 @@ -.background-blue{ - background-color: blueviolet; -} +@import "theme.scss"; :root { font-size: 16px; + // base colors + --blue: #024f9d; + --green: #008840; + --orange: #e55a28; + --red: #ff4558; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --yellow: #ffc107; + --teal: #20c997; + --cyan: #17a2b8; + --black: #000000; + --white: #ffffff; } -//rem calculator -@function calculateRem($size) { - $remSize: $size / 16px; - @return #{$remSize}rem; - } - - @function calculateEm($size) { - $emSize: $size / 16px; - @return #{$emSize}em; - } - - @mixin fontSize($size) { - font-size: $size; //Fallback in px - font-size: calculateRem($size); - } - - .recent-tabs{ transition: box-shadow 280ms cubic-bezier(.4,0,.2,1); display: block; @@ -30,6 +24,7 @@ box-shadow: none!important; border-radius: unset; background: inherit!important; + z-index: 2; } .tabs-content{ display: flex; @@ -52,7 +47,6 @@ user-select: none; cursor: pointer; outline: 0; - -webkit-tap-highlight-color: transparent; display: inline-block; white-space: nowrap; text-decoration: none; @@ -62,20 +56,21 @@ line-height: 40px; padding: 0 4px; overflow: visible; - font-size: 14px; - color: #000; + font-size: 0.875rem; + color: var(--black); } .filter-option:first-child { margin-left: 0; } .filter-option:hover,.tabs-active { - border-bottom: 3px solid #0074b6; + border-bottom: 3px solid var(--blue); font-weight: 700; + text-decoration: none; } .discuss-card-content{ box-shadow: 0 2px 1px -1px rgba(0,0,0,.2), 0 1px 1px 0 rgba(0,0,0,.14), 0 1px 3px 0 rgba(0,0,0,.12); - background: #fff; + background: var(--white); color: rgba(0,0,0,.87); flex: 1; height: auto; @@ -86,6 +81,7 @@ padding: 1.4rem; border-radius: 4px; width: 100%; + z-index: 2; } .tags{ @@ -93,6 +89,8 @@ flex: 1; flex-direction: row; flex-wrap: wrap; + position: relative; + z-index: 2; } .tag { @@ -112,7 +110,7 @@ .count { height: auto; - background: #fff; + background: var(--white); border-radius: 4px; padding: 1px 3px; display: inline-flex; @@ -121,7 +119,7 @@ width: auto; min-width: 16px; margin: 0 0 0 15px; - color: #0074b6; + color: var(--blue); font: 700 14px/21px Lato; } diff --git a/projects/discussion-ui/assets/styles/theme.scss b/projects/discussion-ui/assets/styles/theme.scss new file mode 100644 index 00000000..c3067f65 --- /dev/null +++ b/projects/discussion-ui/assets/styles/theme.scss @@ -0,0 +1,72 @@ +html[layout='joy'] { + --df-primary-bg: #FFD954; + --df-gray-bg: #E9E8D9; + --sbt-bradius: 0.125rem; + --sbt-bradius-xs: calc(var(--sbt-bradius) * 4); /* 8 value */ + --sbt-bradius-sm: calc(var(--sbt-bradius) * 8); /* 16 value */ + --sbt-bradius-md: calc(var(--sbt-bradius) * 12); /* 24 value */ + --sbt-bradius-lg: calc(var(--sbt-bradius) * 16); /* 32 value */ + + .df-back-btn-container { + background: var(--df-gray-bg) !important; + border-radius: var(--sbt-bradius-md); + margin: 1rem; + z-index: 2; + position: relative; + } + + .df-back-btn { + margin-left: 1rem; + } + + .df-main-content { + background: var(--df-primary-bg) !important; + border-radius: var(--sbt-bradius-md); + + @media (max-width: 768px) { + margin: 1.5rem 0; + padding: 1.5rem; + } + } + + .df-side-content { + background: var(--white); + border-radius: var(--sbt-bradius-md); + margin-right: 1.5rem; + + @media (max-width: 768px) { + margin-right: 0; + padding: 1.5rem; + } + } + + .df-filter-option { + background: var(--white); + padding: 0.5rem 1rem; + border-radius: 0.375rem; + box-shadow: var(--sbt-box-shadow-6px); + display: flex; + align-items: center; + cursor: pointer; + white-space: nowrap; + font-weight: bold; + margin-right: 1.5rem; + height: 3rem; + transition: all ease 0.3s; + margin-top: 1rem; + font-size: 0.75rem; + } + + .df-filter-option:hover, + .tabs-active { + color: var(--white) !important; + text-decoration: none; + background-color: var(--primary-color); + } + + .df-sidebar-menu-list:hover, + .menu-active { + background: var(--df-gray-bg) !important; + } + +} \ No newline at end of file diff --git a/projects/discussion-ui/package.json b/projects/discussion-ui/package.json index 0ed0a7dc..e91f66c9 100644 --- a/projects/discussion-ui/package.json +++ b/projects/discussion-ui/package.json @@ -1,6 +1,6 @@ { "name": "@project-sunbird/discussions-ui-v8", - "version": "2.0.13", + "version": "2.0.15", "repository": { "type": "git", "url": "git+https://github.com/Sunbird-Ed/discussions-UI.git" diff --git a/projects/discussion-ui/src/lib/common/constants.json b/projects/discussion-ui/src/lib/common/constants.json index 47852202..def9ec5f 100644 --- a/projects/discussion-ui/src/lib/common/constants.json +++ b/projects/discussion-ui/src/lib/common/constants.json @@ -594,7 +594,7 @@ "route": "All discussions", "enable": true }, - { + { "route": "categories", "enable": true }, diff --git a/projects/discussion-ui/src/lib/components/components.module.ts b/projects/discussion-ui/src/lib/components/components.module.ts index 28822918..03a59c87 100644 --- a/projects/discussion-ui/src/lib/components/components.module.ts +++ b/projects/discussion-ui/src/lib/components/components.module.ts @@ -1,5 +1,6 @@ import { PipesModule } from './../pipes/pipes.module'; import { DiscussionService } from './../services/discussion.service'; +import { ConfigService } from './../services/config.service'; import { HttpClientModule } from '@angular/common/http'; import { ElementsModule } from './../elements/elements.module'; import { NgModule } from '@angular/core'; @@ -13,6 +14,9 @@ import { DiscussionDetailsComponent } from './discussion-details/discussion-deta import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { DiscussStartComponent } from './discuss-start/discuss-start.component'; import { TagInputModule } from 'ngx-chips'; +// TODO: Add this components +// import { DiscussAllComponent } from './discuss-all/discuss-all.component'; +// import { TagAllDiscussionComponent } from './tag-all-discussion/tag-all-discussion.component'; @NgModule({ @@ -24,6 +28,9 @@ import { TagInputModule } from 'ngx-chips'; MyDiscussionComponent, DiscussionDetailsComponent, DiscussStartComponent, + // TODO: Add this components + // DiscussAllComponent, + // TagAllDiscussionComponent, ], imports: [ CommonModule, @@ -42,9 +49,11 @@ import { TagInputModule } from 'ngx-chips'; MyDiscussionComponent, DiscussionDetailsComponent, DiscussStartComponent + // TODO: Add this components + // DiscussAllComponent, TagAllDiscussionComponent ], providers: [ - DiscussionService + DiscussionService, ConfigService ] }) export class ComponentsModule { } diff --git a/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.css b/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.css index c6addba3..bfaac228 100644 --- a/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.css +++ b/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.css @@ -4,6 +4,8 @@ grid-gap: 24px; margin-bottom: 24px; cursor: pointer; + position: relative; + z-index: 2; } @media (max-width: 700px) { diff --git a/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.ts b/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.ts index 58f3b710..7ca42e16 100644 --- a/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.ts +++ b/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.ts @@ -39,7 +39,7 @@ export class DiscussCategoryComponent implements OnInit, OnDestroy { public router: Router, public activatedRoute: ActivatedRoute, private telemetryUtils: TelemetryUtilsService - ) { } + ) { } ngOnInit() { /** It will look for the queryParams, if back button is clicked, @@ -50,7 +50,7 @@ export class DiscussCategoryComponent implements OnInit, OnDestroy { this.telemetryUtils.logImpression(NSDiscussData.IPageName.CATEGORY); this.forumIds = this.discussService.forumIds; this.paramsSubscription = this.activatedRoute.queryParams.subscribe((params) => { - if ( _.get(params, 'cid')) { + if (_.get(params, 'cid')) { this.navigateToDiscussionPage(_.get(params, 'cid')); } else { this.categories = []; @@ -83,14 +83,14 @@ export class DiscussCategoryComponent implements OnInit, OnDestroy { */ navigateToDiscussionPage(cid, slug?) { this.showLoader = true; - this.telemetryUtils.uppendContext({id: cid, type: 'Category'}); + this.telemetryUtils.uppendContext({ id: cid, type: 'Category' }); this.discussService.fetchSingleCategoryDetails(cid).subscribe(response => { this.showLoader = false; - this.categoryId = _.get(response, 'cid') ; + this.categoryId = _.get(response, 'cid'); this.isTopicCreator = _.get(response, 'privileges.topics:create') === true ? true : false; this.showStartDiscussionModal = false; if (_.get(response, 'children').length > 0) { - this.router.navigate([], { relativeTo: this.activatedRoute.parent, queryParams: { cid: this.categoryId }}); + this.router.navigate([], { relativeTo: this.activatedRoute.parent, queryParams: { cid: this.categoryId } }); this.categories = []; _.get(response, 'children').forEach(subCategoryData => { this.categories.push(subCategoryData); @@ -111,7 +111,6 @@ export class DiscussCategoryComponent implements OnInit, OnDestroy { } closeModal(event) { - console.log('event', event); this.showStartDiscussionModal = false; } diff --git a/projects/discussion-ui/src/lib/components/discuss-home/discuss-home.component.ts b/projects/discussion-ui/src/lib/components/discuss-home/discuss-home.component.ts index 43e7881d..5eb6dd09 100644 --- a/projects/discussion-ui/src/lib/components/discuss-home/discuss-home.component.ts +++ b/projects/discussion-ui/src/lib/components/discuss-home/discuss-home.component.ts @@ -34,15 +34,11 @@ export class DiscussHomeComponent implements OnInit { this.route.params.subscribe(params => { this.routeParams = params; this.categoryId = this.discussionService.getContext(CONTEXT_PROPS.cid); - console.log(this.discussionService.getContext(CONTEXT_PROPS.cid)); this.getDiscussionList(_.get(this.routeParams, 'slug')); - console.log(this.routeParams); }); } navigateToDiscussionDetails(discussionData) { - console.log('discussionData', discussionData); - const matchedTopic = _.find(this.telemetryUtils.getContext(), { type: 'Topic' }); if (matchedTopic) { this.telemetryUtils.deleteContext(matchedTopic); @@ -61,7 +57,6 @@ export class DiscussHomeComponent implements OnInit { this.showLoader = false; this.isTopicCreator = _.get(data, 'privileges.topics:create') === true ? true : false; this.discussionList = _.union(_.get(data, 'topics'), _.get(data, 'children')); - console.log('this.discussionList', this.discussionList); }, error => { this.showLoader = false; // TODO: Toaster diff --git a/projects/discussion-ui/src/lib/components/discuss-start/discuss-start.component.ts b/projects/discussion-ui/src/lib/components/discuss-start/discuss-start.component.ts index a731cec6..62a22db4 100644 --- a/projects/discussion-ui/src/lib/components/discuss-start/discuss-start.component.ts +++ b/projects/discussion-ui/src/lib/components/discuss-start/discuss-start.component.ts @@ -57,7 +57,6 @@ export class DiscussStartComponent implements OnInit { initializeData() { this.discussService.fetchAllTag().subscribe(data => { - console.log('all tag from api', data); const tags = _.get(data, 'tags'); this.allTags = _.map(tags, (tag) => tag.value); }); diff --git a/projects/discussion-ui/src/lib/components/discuss-tags/discuss-tags.component.html b/projects/discussion-ui/src/lib/components/discuss-tags/discuss-tags.component.html index ae1abcbc..5a96370c 100644 --- a/projects/discussion-ui/src/lib/components/discuss-tags/discuss-tags.component.html +++ b/projects/discussion-ui/src/lib/components/discuss-tags/discuss-tags.component.html @@ -2,7 +2,8 @@
-
+
diff --git a/projects/discussion-ui/src/lib/components/discuss-tags/discuss-tags.component.scss b/projects/discussion-ui/src/lib/components/discuss-tags/discuss-tags.component.scss index 00336eb8..1bc03704 100644 --- a/projects/discussion-ui/src/lib/components/discuss-tags/discuss-tags.component.scss +++ b/projects/discussion-ui/src/lib/components/discuss-tags/discuss-tags.component.scss @@ -1,43 +1,47 @@ .sb-search-box { - display: flex; - align-items: center; - border: 0px; + display: flex; + align-items: center; + border: 0px; } .sb-search-box .sb-search-input { - width: 100%; - font-size: 14px; - min-height: 2rem; - outline: 0; - border-radius: 0; - line-height: normal; - background: none; - padding: 1em; - border-radius: 5px; - border:0px; + width: 100%; + font-size: 14px; + min-height: 2rem; + outline: 0; + border-radius: 0; + line-height: normal; + background: none; + padding: 1em; + border-radius: 5px; + border: 0px; } -.search-icon{ - width: 18px; - height: 18px; - margin: 16px 0px 16px 16px; +.search-icon { + width: 18px; + height: 18px; + margin: 16px 0px 16px 16px; } .sb-search-box .input-div { - border-radius: 24px; - background: #ffff; - display: flex; - align-items: center; - border: 1px solid #ddd; - width: 100%; + border-radius: 24px; + background: #ffff; + display: flex; + align-items: center; + border: 1px solid #ddd; + width: 100%; } -.sb-search-box .input-div:hover{ - border-color: #0074b6; +.sb-search-box .input-div:hover { + border-color: #0074b6; +} + +.tag { + cursor: pointer; } @media (max-width: 768px) { - .discuss-tags{ - flex-direction: column; - } -} \ No newline at end of file + .discuss-tags { + flex-direction: column; + } +} diff --git a/projects/discussion-ui/src/lib/components/discuss-tags/discuss-tags.component.ts b/projects/discussion-ui/src/lib/components/discuss-tags/discuss-tags.component.ts index dd846df4..831d495d 100644 --- a/projects/discussion-ui/src/lib/components/discuss-tags/discuss-tags.component.ts +++ b/projects/discussion-ui/src/lib/components/discuss-tags/discuss-tags.component.ts @@ -5,6 +5,9 @@ import * as _ from 'lodash' import { DiscussionService } from '../../services/discussion.service'; import { NSDiscussData } from '../../models/discuss.model'; import { TelemetryUtilsService } from './../../telemetry-utils.service'; +import { ActivatedRoute, Router } from '@angular/router'; +import { Subscription } from 'rxjs'; +import { ConfigService } from '../../services/config.service'; /* tslint:enable */ @Component({ @@ -16,14 +19,25 @@ export class DiscussTagsComponent implements OnInit { query: string; filteredTags: NSDiscussData.ITag[]; showLoader = false; + queryParam: any; + paramsSubscription: Subscription; + getParams: any; + cIds: any; constructor( private discussionService: DiscussionService, - private telemetryUtils: TelemetryUtilsService + private telemetryUtils: TelemetryUtilsService, private router: Router, + public activatedRoute: ActivatedRoute, + private configService: ConfigService, ) { } ngOnInit() { this.telemetryUtils.setContext([]); this.telemetryUtils.logImpression(NSDiscussData.IPageName.TAGS); + // this.configService.setConfig(this.activatedRoute) + this.getParams = this.configService.getConfig() + this.cIds = _.get(this.getParams, 'categories') + console.log(this.getParams, this.cIds) + this.fetchAllTags(); } @@ -63,4 +77,17 @@ export class DiscussTagsComponent implements OnInit { getContrast() { return 'rgba(255, 255, 255, 80%)'; } + + getAllDiscussions(tag: { value: any }) { + this.queryParam = tag.value + const tagdata = { + tagname: '', + categories: '', + } + tagdata.categories = JSON.stringify(this.cIds) + tagdata.tagname = tag.value + this.queryParam = tagdata + // this.router.navigate([`/app/discussion-forum/tags/tag-discussions`], { queryParams: this.queryParam }) + } + } diff --git a/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.html b/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.html index 2485596d..280a53fe 100644 --- a/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.html +++ b/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.html @@ -1,396 +1,335 @@ -
+
+
+
- -
- -
- -
- -
- - -
- -
- -

-
- - - - CF - {{'Asked by '}} - - - - -
- - -
- - - {{tag.value}} - - -
-
-
- - - - - - - - - - {{data?.upvotes}} - - - - - - - - - - - {{data?.downvotes}} - - - - - {{data.viewcount}} views - - - - - - - - - - - -
-
- - {{data?.postcount-1}} - comments - - - 0 - comments -
+ +
+ +
+ +
+ + +
+ +
+ +

+
+ + + + CF + {{'Asked by '}} + + + + +
+ + +
+ + + {{tag.value}} + + +
+
+
+ + + + + + + + + + {{data?.upvotes}} + + + + + + + + + + + {{data?.downvotes}} + + + + + {{data.viewcount}} views + + + + + + + + + + +
- -
-

Your answer here

-
- -
- -
- This is mandatory -
-
-
+
+ + {{data?.postcount-1}} + comments + + + 0 + comments
-
- - -
- - - -
- + +
+

Your answer here

+
+
- + + +
- + +
+ - -
-
- + +
+ - - - -
- -
- - -
- CF - - +
+ + + +
+ +
+ + +
+ CF + + +
+
+ {{ post?.timestamp | date: 'dd MMM yyyy hh:mm a'}} + + + +
-
- {{ post?.timestamp | date: 'dd MMM yyyy hh:mm a'}} - - - - - - - - -
+
+ +
+
+
(edited)
- -
-
- -
-
-
-
- -
-
-
- - -
-
-
-
- - - - - - - - - - - - {{post?.upvotes}} - +
+ +
+
+
+ + + + + + + + + + + + {{post?.upvotes}} + - - - - + + + + + + + + + + + + {{post?.downvotes}} + + + +
+ + + +
+
+ + +
+ +
+
+ + +
+ {{post?.replies?.count}} reply(s) + + + + + - - - + + - + + - {{post?.downvotes}} - - - +
+
+
+ Last reply + {{ post?.replies?.timestampISO | date: 'dd MMM yyyy hh:mm a' }}
- - -
-
- +
+
- -
-
- - -
- {{post?.replies?.count}} reply(s) - - - - - - - - - - - - -
-
-
- Last reply - {{ post?.replies?.timestampISO | date: 'dd MMM yyyy hh:mm a' }} -
-
-
- - -
-
-
- +
- - -
- -
- -
-
-
-
- - +
- - + + +
+ +
+
- - - -
-
-
- -
- -
-
-
-
- - -
+
+
+ +
- - - -
- - -
- -
- - + + +
+
-
- CF - - -
- {{ post?.timestamp | date}} + + +
+ +
+
+ + +
+ + +
+ +
+ + + +
+ CF + +
- + {{ post?.timestamp | date}} +
+ - -
-

-
-
- - - - - {{post.upvotes}} - - - - - {{post?.downvotes}} - -
+ +
+

+
+
+ + + + + {{post.upvotes}} + + + + + {{post?.downvotes}} +
- -
- + +
- - -
- - - - \ No newline at end of file + +
+ + +
+ + + + \ No newline at end of file diff --git a/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.scss b/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.scss index a554f351..1a4ce912 100644 --- a/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.scss +++ b/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.scss @@ -2,13 +2,15 @@ box-shadow: 0 2px 1px -1px rgba(0,0,0,.2), 0 1px 1px 0 rgba(0,0,0,.14), 0 1px 3px 0 rgba(0,0,0,.12); background: #fff; color: rgba(0,0,0,.87); - flex: 1; + flex: 3; height: auto; transition: box-shadow 280ms cubic-bezier(.4,0,.2,1); display: block; position: relative; padding: 1.4rem; border-radius: 4px; + justify-content: space-between; + z-index: 2; } .pad-4{ @@ -99,7 +101,7 @@ } .post-btn,.post-reply-btn{ - background-color: #0074b6!important; + background-color: #0074b6; color: #fff; border: 0; vertical-align: baseline; @@ -162,10 +164,15 @@ } .post-time{ color: rgba(0,0,0,.6); - margin-left: 16px; + margin-right: 10px; } .post-labels{ font-size: 12px; + display: -webkit-box; + -webkit-line-clamp: 6; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; } .reply-area{ display: flex; @@ -225,3 +232,19 @@ align-items: start; } } + +.sb-btn-disabled { + background-color: var(--gray-100); + border: solid var(--gray-100); +} + +.edited-text { + padding-left: 8px; + margin-top: 3px; + font-size: 12px; + color: rgba(0,0,0,0.6); +} + +.delete-icon, .edit-icon { + cursor: pointer; +} \ No newline at end of file diff --git a/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.ts b/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.ts index 5d6f480a..01835ee7 100644 --- a/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.ts +++ b/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.ts @@ -3,7 +3,7 @@ import { DiscussionService } from './../../services/discussion.service'; import { ActivatedRoute, Router } from '@angular/router'; import { Component, OnInit, OnDestroy, Input } from '@angular/core'; import { NSDiscussData } from './../../models/discuss.model'; -import { FormGroup, FormBuilder } from '@angular/forms'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; import * as CONSTANTS from '../../common/constants.json'; /* tslint:disable */ import * as _ from 'lodash' @@ -18,13 +18,14 @@ import { Subscription } from 'rxjs'; }) export class DiscussionDetailsComponent implements OnInit, OnDestroy { @Input() topicId: any; + @Input() slug: string; + routeParams: any; currentActivePage = 1; currentFilter = 'timestamp'; // 'recent data: any; paginationData!: any; pager = {}; - @Input() slug: string; postAnswerForm!: FormGroup; UpdatePostAnswerForm: FormGroup; replyForm: FormGroup; @@ -35,6 +36,7 @@ export class DiscussionDetailsComponent implements OnInit, OnDestroy { contentPost: any; editContentIndex: any; mainUid: number; + similarPosts: any[]; constructor( private route: ActivatedRoute, @@ -49,7 +51,6 @@ export class DiscussionDetailsComponent implements OnInit, OnDestroy { if (!this.topicId && !this.slug) { this.route.params.subscribe(params => { this.routeParams = params; - console.log('discuss params', params); this.slug = _.get(this.routeParams, 'slug'); this.topicId = _.get(this.routeParams, 'topicId'); this.refreshPostData(this.currentActivePage); @@ -66,6 +67,20 @@ export class DiscussionDetailsComponent implements OnInit, OnDestroy { }); this.telemetryUtils.logImpression(NSDiscussData.IPageName.DETAILS); } + + fetchSingleCategoryDetails(cid: number) { + this.fetchSingleCategoryLoader = true + this.discussionService.fetchSingleCategoryDetails(cid).subscribe( + (data: NSDiscussData.ICategoryData) => { + this.similarPosts = data.topics + this.fetchSingleCategoryLoader = false + }, + (err: any) => { + // this.openSnackbar(err.error.message.split('|')[1] || this.defaultError) + this.fetchSingleCategoryLoader = false + }) + } + initializeFormFiled() { this.postAnswerForm = this.formBuilder.group({ answer: [], @@ -80,12 +95,13 @@ export class DiscussionDetailsComponent implements OnInit, OnDestroy { refreshPostData(page: any) { if (this.currentFilter === 'timestamp') { - console.log('from component refreshPostData method', this.slug); this.discussionService.fetchTopicById(this.topicId, this.slug, page).subscribe( (data: NSDiscussData.IDiscussionData) => { this.data = data; this.paginationData = _.get(data, 'pagination'); this.mainUid = _.get(data, 'loggedInUser.uid'); + this.fetchSingleCategoryDetails(this.data.cid) + // this.setPagination(); }, (err: any) => { @@ -93,12 +109,13 @@ export class DiscussionDetailsComponent implements OnInit, OnDestroy { // this.openSnackbar(err.error.message.split('|')[1] || this.defaultError); }); } else { - console.log('from component refreshPostData method else', this.slug); this.discussionService.fetchTopicByIdSort(this.topicId, 'voted', page).subscribe( (data: NSDiscussData.IDiscussionData) => { this.data = data; this.paginationData = _.get(data, 'pagination'); this.mainUid = _.get(data, 'loggedInUser.uid'); + this.fetchSingleCategoryDetails(this.data.cid) + // this.setPagination(); }, (err: any) => { @@ -182,12 +199,10 @@ export class DiscussionDetailsComponent implements OnInit, OnDestroy { }); } - postReply(post: NSDiscussData.IDiscussionData) { + postReply(replyContent: string, post: NSDiscussData.IDiscussionData) { const req = { - // tslint:disable-next-line:no-string-literal - content: this.postAnswerForm.controls['answer'].value, + content: replyContent, }; - // tslint:disable-next-line:no-string-literal this.postAnswerForm.controls['answer'].setValue(''); if (post && post.tid) { this.discussionService.replyPost(post.tid, req).subscribe( @@ -204,10 +219,9 @@ export class DiscussionDetailsComponent implements OnInit, OnDestroy { } } - postCommentsReply(post: NSDiscussData.IPosts) { + postCommentsReply(replyContent: string, post: NSDiscussData.IPosts) { const req = { - // tslint:disable-next-line:no-string-literal - content: this.replyForm.controls['reply'].value, + content: replyContent, toPid: post.pid, }; if (post && post.tid) { @@ -281,17 +295,18 @@ export class DiscussionDetailsComponent implements OnInit, OnDestroy { } onEditMode(UpdatePostStatus: boolean) { - if (UpdatePostStatus) { - this.editMode = true; - } else { - this.editMode = false; - } + if (UpdatePostStatus) { + this.editMode = true; + } else { + this.editMode = false; + } } - getRealtimePost(postContent: any, index: any) { + getRealtimePost(post: any, index: any) { this.editMode = true; this.editContentIndex = index; - this.contentPost = postContent.replace(/<[^>]*>/g, ''); + this.contentPost = _.get(post, 'content').replace(/<[^>]*>/g, ''); + post.toggle = false; } updatePost(updatedPostContent: any, pid: number) { @@ -321,6 +336,36 @@ export class DiscussionDetailsComponent implements OnInit, OnDestroy { console.log('e', error); }); } + + editReplyHandler(event, post) { + if (_.get(event, 'action') === 'cancel') { + this.onEditMode(false); + } else if (_.get(event, 'action') === 'edit') { + this.updatePost(_.get(event, 'content'), _.get(post, 'pid')); + this.logTelemetry(event, post); + } + } + + commentReplyHandler(event, post) { + if (_.get(event, 'action') === 'cancel') { + this.togglePost(post); + } else if (_.get(event, 'action') === 'reply') { + this.postCommentsReply(_.get(event, 'content'), post); + this.logTelemetry(event, post); + } + } + + postReplyHandler(event, post) { + if (_.get(event, 'action') === 'reply') { + this.postReply(_.get(event, 'content'), post); + this.logTelemetry(event, post); + } + } + + togglePost(post) { + post.toggle = !post.toggle; + this.onEditMode(false); + } ngOnDestroy() { if (this.paramsSubscription) { this.paramsSubscription.unsubscribe(); diff --git a/projects/discussion-ui/src/lib/components/lib-entry/lib-entry.component.html b/projects/discussion-ui/src/lib/components/lib-entry/lib-entry.component.html index 02940de4..5f57ed22 100644 --- a/projects/discussion-ui/src/lib/components/lib-entry/lib-entry.component.html +++ b/projects/discussion-ui/src/lib/components/lib-entry/lib-entry.component.html @@ -1,22 +1,22 @@ -
-
-
- - -
+
+
+
+ + +
-
-
-
-
- -
-
- -
+
+
+
+ +
+
+ +
+
-
- +
\ No newline at end of file diff --git a/projects/discussion-ui/src/lib/components/lib-entry/lib-entry.component.scss b/projects/discussion-ui/src/lib/components/lib-entry/lib-entry.component.scss index 75177e05..f0adbbeb 100644 --- a/projects/discussion-ui/src/lib/components/lib-entry/lib-entry.component.scss +++ b/projects/discussion-ui/src/lib/components/lib-entry/lib-entry.component.scss @@ -6,9 +6,6 @@ } .row { - width: 90%; - margin-left: auto !important; - margin-right: auto !important; display: flex; flex-direction: row; justify-content: center; @@ -16,6 +13,8 @@ .discuss-left-panel{ padding: 24px; + position: relative; + z-index: 2; } .discuss-main-panel{ @@ -31,7 +30,6 @@ } .row { flex-direction: column; - width: 100%; } .discuss-left-panel{ width: auto; diff --git a/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.html b/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.html index 483df611..458c4b7a 100644 --- a/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.html +++ b/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.html @@ -39,26 +39,26 @@
- Recent posts - - Best posts - Saved posts - - Upvoted - Downvoted diff --git a/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.ts b/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.ts index 7ace4478..b9209040 100644 --- a/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.ts +++ b/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.ts @@ -39,7 +39,6 @@ export class MyDiscussionComponent implements OnInit { if (_.get(this.data, 'posts')) { this.discussionList = _.get(this.data, 'posts').filter(p => (p.isMainPost === true)); } - console.log('>>>>>>>', this.discussionList); // if (this.configSvc.userProfile) { // localStorage.setItem(this.configSvc.userProfile.userId, this.profilePhoto); // } @@ -53,8 +52,8 @@ export class MyDiscussionComponent implements OnInit { ngOnInit() { this.telemetryUtils.setContext([]); this.telemetryUtils.logImpression(NSDiscussData.IPageName.MY_DISCUSSION); - if (localStorage.getItem('userName')) { - this.fetchUserProfile(localStorage.getItem('userName')); + if ( this.discussService.userName) { + this.fetchUserProfile( this.discussService.userName); } } diff --git a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.html b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.html index 04398006..e5e8705f 100644 --- a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.html +++ b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.html @@ -1,8 +1,7 @@ diff --git a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.scss b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.scss index 0b77b70a..d6217217 100644 --- a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.scss +++ b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.scss @@ -15,10 +15,11 @@ color: #333; cursor: pointer; border-left: 0.125rem solid transparent; + cursor: pointer; } -.sb-sidebar-menu li.active { - background-color: #eee; +.sb-sidebar-menu li.menu-active{ + background-color: var(--white); font-weight: 700; border-left: 3px solid #005391; color: #002e50; @@ -26,8 +27,7 @@ } .sb-sidebar-menu li:hover { - cursor: pointer; - background: rgba(0,0,0,.04); + background-color: var(--white); } .openbtn,.overlay-sidebar{ diff --git a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts index 7927b231..1ad15bb7 100644 --- a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts +++ b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts @@ -9,6 +9,7 @@ import * as CONSTANTS from './../../common/constants.json'; /* tslint:disable */ import * as _ from 'lodash' import { first } from 'rxjs/operators'; +import { ConfigService } from '../../services/config.service'; /* tslint:enable */ @Component({ @@ -26,57 +27,51 @@ export class SidePannelComponent implements OnInit, OnDestroy { data: any; hideSidePanel: boolean; - + menu: any; selectedTab: string; showSideMenu: Boolean = true; - menu: any; - constructor( public router: Router, public discussService: DiscussionService, public activatedRoute: ActivatedRoute, private telemetryUtils: TelemetryUtilsService, + private configService: ConfigService ) { } ngOnInit() { // TODO: loader or spinner this.hideSidePanel = document.body.classList.contains('widget'); this.telemetryUtils.logImpression(NSDiscussData.IPageName.HOME); - this.activatedRoute.data.subscribe((data) => { - this.data = data; - this.discussService.userName = _.get(data, 'userName'); - const rawCategories = _.get(data, 'categories'); - this.discussService.forumIds = _.get(rawCategories, 'result'); + this.configService.setConfig(this.activatedRoute) + // this.activatedRoute.data.subscribe((data) => { + this.data = this.configService.getConfig(); + this.discussService.userName = _.get(this.data, 'userName'); + const rawCategories = _.get(this.data, 'categories'); + this.discussService.forumIds = _.get(rawCategories, 'result'); - localStorage.setItem('userName', _.get(this.data, 'userName')); - this.discussService.initializeUserDetails(this.discussService.userName); + this.discussService.initializeUserDetails(this.discussService.userName); - this.menu = data.menuOptions.length > 0 ? data.menuOptions : CONSTANTS.MENUOPTIONS - }) + this.menu = this.data.menuOptions.length > 0 ? this.data.menuOptions : CONSTANTS.MENUOPTIONS + // }) for (let i = 0; i < this.menu.length; i++) { let item = this.menu if (!item[i].enable) { this.menu.splice(i, 1) } } - if (this.discussService.forumIds) { - // this.navigate(this.defaultPage); - } else { - // TODO: Error toast - console.log('forum ids not found'); - } + } isActive(selectedItem) { debugger if (this.router.url.indexOf(`/${selectedItem}`) > -1 || this.selectedTab === selectedItem) { - if(!this.selectedTab){ + if (!this.selectedTab) { this.selectedTab = selectedItem } return true - } else if (selectedItem === 'categories' && !this.selectedTab ) { + } else if (selectedItem === 'categories' && !this.selectedTab) { return true } return false diff --git a/projects/discussion-ui/src/lib/config/url.config.ts b/projects/discussion-ui/src/lib/config/url.config.ts index 48676a8b..ccc62136 100644 --- a/projects/discussion-ui/src/lib/config/url.config.ts +++ b/projects/discussion-ui/src/lib/config/url.config.ts @@ -1,5 +1,6 @@ export const urlConfig = { // endpoint configs...! + // host: 'http://localhost:3002', host: 'https://dev.sunbirded.org', apiSlug: '/discussion', apiBasePath: () => `${urlConfig.host}${urlConfig.apiSlug}`, @@ -8,12 +9,13 @@ export const urlConfig = { getAllCategories: () => `${urlConfig.apiBasePath()}/categories`, getSingleCategoryDetails: (cid: number) => `${urlConfig.apiBasePath()}/category/${cid}`, getAllTags: () => `${urlConfig.apiBasePath()}/tags`, + getTagBasedDiscussion: (tag: string) => `${urlConfig.apiBasePath()}/tags/${tag}`, createPost: () => `${urlConfig.apiBasePath()}/v2/topics`, votePost: (pid: number) => `${urlConfig.apiBasePath()}/v2/posts/${pid}/vote`, replyPost: (tid: number) => `${urlConfig.apiBasePath()}/v2/topics/${tid}`, bookmarkPost: (pid: number) => `${urlConfig.apiBasePath()}/v2/posts/${pid}/bookmark`, - recentPost: () => `${urlConfig.apiBasePath()}/topics/recent`, - popularPost: () => `${urlConfig.apiBasePath()}/topics/popular`, + recentPost: () => `${urlConfig.apiBasePath()}/recent`, + popularPost: () => `${urlConfig.apiBasePath()}/popular`, unread: () => `${urlConfig.apiBasePath()}/topics/unread/total`, getTopic: () => `${urlConfig.apiBasePath()}/topic`, profile: () => `${urlConfig.apiBasePath()}/users/me`, @@ -25,5 +27,6 @@ export const urlConfig = { userDetails: (username: string) => `${urlConfig.apiBasePath()}/user/${username}`, getContextBasedTopics: (slug: string) => `${urlConfig.apiBasePath()}/category/${slug}`, registerUser: () => `${urlConfig.apiBasePath()}/user/v1/create`, - getMenuOptions: () => `${urlConfig.apiBasePath()}/admin/settings/navigation` + getContextBasedDiscussion: () => `${urlConfig.apiBasePath()}/category/list`, + getContextBasedTagDiscussion: () => `${urlConfig.apiBasePath()}/tags/list` }; diff --git a/projects/discussion-ui/src/lib/discussion-routing/discussion-routing.module.ts b/projects/discussion-ui/src/lib/discussion-routing/discussion-routing.module.ts index e7101505..dc213b45 100644 --- a/projects/discussion-ui/src/lib/discussion-routing/discussion-routing.module.ts +++ b/projects/discussion-ui/src/lib/discussion-routing/discussion-routing.module.ts @@ -7,6 +7,9 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { RouterModule, Routes } from '@angular/router'; import { DiscussHomeComponent } from './../components/discuss-home/discuss-home.component'; +// TODO: ADD LATER +// import { DiscussAllComponent } from './../components/discuss-all/discuss-all.component'; +// import { TagAllDiscussionComponent } from './../components/tag-all-discussion/tag-all-discussion.component'; const routes: Routes = [ @@ -14,15 +17,10 @@ const routes: Routes = [ path: '', component: LibEntryComponent, children: [ - { - path: '', - pathMatch: 'full', - redirectTo: 'categories' - }, { path: 'home', pathMatch: 'full', - component: DiscussHomeComponent + // component: DiscussAllComponent }, { path: 'categories', @@ -34,6 +32,12 @@ const routes: Routes = [ pathMatch: 'full', component: DiscussTagsComponent }, + // TODO: ADD LATER + // { + // path: 'tags/tag-discussions', + // pathMatch: 'full', + // component: TagAllDiscussionComponent + // }, { path: 'my-discussion', pathMatch: 'full', diff --git a/projects/discussion-ui/src/lib/elements/elements.module.ts b/projects/discussion-ui/src/lib/elements/elements.module.ts index e1a54907..22f37111 100644 --- a/projects/discussion-ui/src/lib/elements/elements.module.ts +++ b/projects/discussion-ui/src/lib/elements/elements.module.ts @@ -1,24 +1,35 @@ +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { CategoryCardComponent } from './category-card/category-card.component'; import { DiscussCardComponent } from './discuss-card/discuss-card.component'; import { AvatarPhotoComponent } from './avatar-photo/avatar-photo.component'; import { AppLoaderComponent } from './app-loader/app-loader.component'; +import { RelatedDiscussionComponent } from './related-discussion/related-discussion.component'; +import { PipesModule } from './../pipes/pipes.module'; + +import { PostReplyComponent } from './post-reply/post-reply.component'; @NgModule({ declarations: [ + PostReplyComponent, CategoryCardComponent, DiscussCardComponent, AvatarPhotoComponent, - AppLoaderComponent + AppLoaderComponent, + RelatedDiscussionComponent ], imports: [ - CommonModule, + CommonModule, PipesModule, + FormsModule, + ReactiveFormsModule ], exports: [ CategoryCardComponent, DiscussCardComponent, AvatarPhotoComponent, - AppLoaderComponent + AppLoaderComponent, RelatedDiscussionComponent, + AppLoaderComponent, + PostReplyComponent ] }) export class ElementsModule { } diff --git a/projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.css b/projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.css new file mode 100644 index 00000000..c5ddf87f --- /dev/null +++ b/projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.css @@ -0,0 +1,51 @@ +.text-form-field{ + display: flex; + flex-direction: column; + /* width: 97.6%; */ +} + +.text-content{ + min-height: 108px; + max-height: 540px; + /* width: 97.6%; */ + border: 1.5px solid #ccc2c2; + border-radius: 4px; + margin: 16px 0; + cursor: pointer; + padding: 16px; +} + +.edit-field { + min-height: 40px; +} + +.updatePostActions { + display: flex; + justify-content: flex-end; + padding-bottom: 15px +} + +.post-btn,.post-reply-btn{ + background-color: #0074b6; + color: #fff; + border: 0; + vertical-align: baseline; + text-align: center; + margin: 0; + min-width: 64px; + line-height: 36px; + padding: 0 16px; + border-radius: 4px; + font-size: 14px; + font-weight: 700; + cursor: pointer; +} + +.cancel-update-post { + margin-right: 20px; +} + +.sb-btn-disabled { + background-color: var(--gray-100); + border: solid var(--gray-100); +} \ No newline at end of file diff --git a/projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.html b/projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.html new file mode 100644 index 00000000..905b00f8 --- /dev/null +++ b/projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.html @@ -0,0 +1,37 @@ +
+
+ +
+
+
+ + + +
\ No newline at end of file diff --git a/projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.spec.ts b/projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.spec.ts new file mode 100644 index 00000000..8e7c0498 --- /dev/null +++ b/projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PostReplyComponent } from './post-reply.component'; + +describe('PostReplyComponent', () => { + let component: PostReplyComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PostReplyComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PostReplyComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.ts b/projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.ts new file mode 100644 index 00000000..7ef4db37 --- /dev/null +++ b/projects/discussion-ui/src/lib/elements/post-reply/post-reply.component.ts @@ -0,0 +1,55 @@ +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; +import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; + +@Component({ + selector: 'lib-post-reply', + templateUrl: './post-reply.component.html', + styleUrls: ['./post-reply.component.css'] +}) +export class PostReplyComponent implements OnInit { + @Input() showCancel = true; + @Input() mode = 'add'; + @Input() content: string; + + @Output() actionEvent = new EventEmitter(); + + replyForm!: FormGroup; + + isButtonEnabled = false; + + constructor( + private formBuilder: FormBuilder + ) { } + + ngOnInit() { + console.log('conent came', this.content); + this.initializeFormFields(); + } + + initializeFormFields() { + this.replyForm = this.formBuilder.group({ + replyContent: ['', Validators.required] + }); + this.replyForm.valueChanges.subscribe(val => { + this.isButtonEnabled = this.validateForm(); + }); + } + + validateForm() { + if (this.replyForm.status === 'VALID') { + return true; + } else { + return false; + } + } + + onReplyClick(mode: string) { + // tslint:disable-next-line:no-string-literal + this.actionEvent.emit({action: mode, content: this.replyForm.controls['replyContent'].value.trim()}); + } + + onCancelClick() { + this.actionEvent.emit({action: 'cancel'}); + } + +} diff --git a/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.html b/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.html new file mode 100644 index 00000000..dc734608 --- /dev/null +++ b/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.html @@ -0,0 +1,25 @@ +
+

Related discussions

+ +
+ +
+ +
+
+
+
+
+
{{ discussion.timestamp | pipeRelativeTime }}
+
+
+
+
+
+
\ No newline at end of file diff --git a/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.scss b/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.scss new file mode 100644 index 00000000..4c7b79f0 --- /dev/null +++ b/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.scss @@ -0,0 +1,60 @@ +// @import 'ws-common'; +// @import 'ws-vars'; +// @import 'ws-mixins'; + +.tag { + display: flex; + min-width: 276px; + height: 100px; + + // height: 32px; + border-radius: 4px; + // justify-content: space-between; + // margin: $size-m 0; + // background-color: red; + // align-items: center; + + // @include breakpoint-xs { + // width: auto; + // } + + // @include breakpoint-s { + // width: auto; + + // } +} + +// .f-medium { +// // font-family: "Poppins-Medium"; +// } + +.example-header-image { + background-size: cover; +} + +.discuss-card-subtitle { + margin: 0px; + color: #000; + cursor: pointer; + font-size: 15px; + font-weight: 700; + text-transform: capitalize; +} + + + +.separator-dot { + display: inline-block; + height: 5px; + width: 5px; + border-radius: 50%; + background-color: rgba(0, 0, 0, 0.4); +} + +.title { + color: #000 !important; +} + +.time { + color: rgba(0, 0, 0, 0.4); +} diff --git a/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.spec.ts b/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.spec.ts new file mode 100644 index 00000000..f31de03d --- /dev/null +++ b/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RelatedDiscussionComponent } from './related-discussion.component'; + +describe('RelatedDiscussionComponent', () => { + let component: RelatedDiscussionComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ RelatedDiscussionComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(RelatedDiscussionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.ts b/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.ts new file mode 100644 index 00000000..b4d0bda7 --- /dev/null +++ b/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.ts @@ -0,0 +1,24 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { Router } from '@angular/router' +import * as CONSTANTS from './../../common/constants.json'; + +@Component({ + selector: 'lib-related-discussion', + templateUrl: './related-discussion.component.html', + styleUrls: ['./related-discussion.component.scss'], + host: { class: 'margin-left-l' }, +}) +export class RelatedDiscussionComponent implements OnInit { + @Input() + relatedDiscussions!: [] + + constructor(private router: Router) { } + + ngOnInit() { + } + + getDiscussion(discuss) { + this.router.navigate([`${CONSTANTS.ROUTES.DISCUSSION}topic/${discuss.slug}`]); + } + +} diff --git a/projects/discussion-ui/src/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.spec.ts b/projects/discussion-ui/src/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.spec.ts new file mode 100644 index 00000000..62b2d1a3 --- /dev/null +++ b/projects/discussion-ui/src/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.spec.ts @@ -0,0 +1,8 @@ +import { PipeRelativeTimePipe } from './pipe-relative-time.pipe'; + +describe('PipeRelativeTimePipe', () => { + it('create an instance', () => { + const pipe = new PipeRelativeTimePipe(); + expect(pipe).toBeTruthy(); + }); +}); diff --git a/projects/discussion-ui/src/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.ts b/projects/discussion-ui/src/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.ts new file mode 100644 index 00000000..f1c70968 --- /dev/null +++ b/projects/discussion-ui/src/lib/pipes/pipe-relative-time/pipe-relative-time.pipe.ts @@ -0,0 +1,19 @@ + + + + +import { Pipe, PipeTransform } from '@angular/core' +import moment from 'moment' + +@Pipe({ + name: 'pipeRelativeTime', +}) +export class PipeRelativeTimePipe implements PipeTransform { + transform(value: number): string { + if (value) { + return moment((new Date(value))).fromNow() + } + return moment().startOf('hour').fromNow() + } +} + diff --git a/projects/discussion-ui/src/lib/pipes/pipes.module.ts b/projects/discussion-ui/src/lib/pipes/pipes.module.ts index 06830890..e50cd46a 100644 --- a/projects/discussion-ui/src/lib/pipes/pipes.module.ts +++ b/projects/discussion-ui/src/lib/pipes/pipes.module.ts @@ -2,14 +2,15 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { PipeFilterPipe } from './pipe-filter/pipe-filter.pipe'; import { SortByPipe } from './sort-by/sort-by.pipe'; +import { PipeRelativeTimePipe } from './pipe-relative-time/pipe-relative-time.pipe'; @NgModule({ - declarations: [ PipeFilterPipe, SortByPipe ], + declarations: [PipeFilterPipe, SortByPipe, PipeRelativeTimePipe], imports: [ CommonModule ], - exports: [ PipeFilterPipe, SortByPipe ] + exports: [PipeFilterPipe, SortByPipe, PipeRelativeTimePipe] }) export class PipesModule { } diff --git a/projects/discussion-ui/src/lib/services/config.service.spec.ts b/projects/discussion-ui/src/lib/services/config.service.spec.ts new file mode 100644 index 00000000..c8fff3dd --- /dev/null +++ b/projects/discussion-ui/src/lib/services/config.service.spec.ts @@ -0,0 +1,12 @@ +import { TestBed } from '@angular/core/testing'; + +import { ConfigService } from './config.service'; + +describe('ConfigService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: ConfigService = TestBed.get(ConfigService); + expect(service).toBeTruthy(); + }); +}); diff --git a/projects/discussion-ui/src/lib/services/config.service.ts b/projects/discussion-ui/src/lib/services/config.service.ts new file mode 100644 index 00000000..b35d0136 --- /dev/null +++ b/projects/discussion-ui/src/lib/services/config.service.ts @@ -0,0 +1,44 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { Subscription } from 'rxjs'; +import * as _ from 'lodash' + +@Injectable({ + providedIn: 'root' +}) +export class ConfigService { + + paramsSubscription: Subscription; + private _config: any; + public checkContext: boolean + + + constructor( + public activatedRoute: ActivatedRoute, + ) { } + + ngOnInit() { + + } + + setConfig(activatedRoute) { + activatedRoute.data.subscribe((data) => { + debugger + this._config = data; + }) + + } + + public getConfig() { + return this._config; + } + + + + + // if (_.get(this._config, 'cid')) { + // // this.checkContext = true + // } else { + // // this.checkContext = false; + // } +} diff --git a/projects/discussion-ui/src/lib/services/discussion.service.ts b/projects/discussion-ui/src/lib/services/discussion.service.ts index e26fcf54..d8dcb722 100644 --- a/projects/discussion-ui/src/lib/services/discussion.service.ts +++ b/projects/discussion-ui/src/lib/services/discussion.service.ts @@ -79,10 +79,6 @@ export class DiscussionService { // return this.http.post(urlConfig.createPost(), data); return this.csDiscussionService.createPost(data); } - - getMenuOptions(){ - return this.http.get(urlConfig.getMenuOptions()); - } /** * @description To get all the categories */ @@ -154,15 +150,29 @@ export class DiscussionService { } fetchRecentD(page?: any) { - // const url = this.appendPage(page, urlConfig.recentPost()); - // return this.http.get(url); - return this.csDiscussionService.fetchRecentD(page); + const url = this.appendPage(page, urlConfig.recentPost()); + return this.http.get(url); + // return this.csDiscussionService.fetchRecentD(page); + } + + getTagBasedDiscussion(tag?: string, page?: any) { + const url = this.appendPage(page, urlConfig.getTagBasedDiscussion(tag)); + return this.http.get(url); + } + + getContextBasedDiscussion(data) { + return this.http.post(urlConfig.getContextBasedDiscussion(), data); + } + + getContextBasedTagDiscussion(data) { + return this.http.post(urlConfig.getContextBasedTagDiscussion(), data); + } + + fetchPopularD(page?: any) { + const url = this.appendPage(page, urlConfig.popularPost()); + return this.http.get(url); + // return this.csDiscussionService.fetchPopularD(page); } - // fetchPopularD(page?: any) { - // // const url = this.appendPage(page, urlConfig.popularPost()); - // // return this.http.get(url); - // return this.csDiscussionService.fetchPopularD(page); - // } fetchTopicById(topicId: number, slug?: any, page?: any) { // let url = urlConfig.getTopic() + '/' + topicId.toString() + '/' + slug; @@ -260,6 +270,6 @@ export class DiscussionService { deletePost(pid: number, uid: number) { return this.csDiscussionService.deletePost(pid, uid); - } + } } From 876298e4d0c5387064969457a25e540f2c5ba4c0 Mon Sep 17 00:00:00 2001 From: pilliarunkumar Date: Tue, 16 Feb 2021 17:13:17 +0530 Subject: [PATCH 04/12] Task#SB-22655 feat: removing /app from constants.json --- projects/discussion-ui/src/lib/common/constants.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/discussion-ui/src/lib/common/constants.json b/projects/discussion-ui/src/lib/common/constants.json index def9ec5f..722fe6ea 100644 --- a/projects/discussion-ui/src/lib/common/constants.json +++ b/projects/discussion-ui/src/lib/common/constants.json @@ -585,9 +585,9 @@ } ], "ROUTES": { - "TOPIC": "/app/discussion-forum/topic/", - "DISCUSSION": "/app/discussion-forum/", - "CATEGORY": "/app/discussion-forum/category/" + "TOPIC": "/discussion-forum/topic/", + "DISCUSSION": "/discussion-forum/", + "CATEGORY": "/discussion-forum/category/" }, "MENUOPTIONS":[ { From a961e2777f9681989d67d86ddfdc20e9d3e4d276 Mon Sep 17 00:00:00 2001 From: pilliarunkumar Date: Wed, 17 Feb 2021 11:06:20 +0530 Subject: [PATCH 05/12] Task#SB-22655 fix: fixed the default eouting --- .../side-pannel/side-pannel.component.ts | 16 ++++++++-------- .../discussion-routing.module.ts | 5 +++++ projects/discussion-ui/src/public-api.ts | 1 + 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts index b30367b0..a4a74108 100644 --- a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts +++ b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts @@ -10,6 +10,7 @@ import * as CONSTANTS from './../../common/constants.json'; import * as _ from 'lodash' import { first } from 'rxjs/operators'; import { ConfigService } from '../../services/config.service'; +import { IdiscussionConfig, IMenuOptions } from '../../models/discussion-config.model'; /* tslint:enable */ @Component({ @@ -25,9 +26,9 @@ export class SidePannelComponent implements OnInit, OnDestroy { defaultPage = 'categories'; - data: any; + data: IdiscussionConfig; hideSidePanel: boolean; - menu: any; + menu: Array; selectedTab: string; showSideMenu: Boolean = true; @@ -65,7 +66,6 @@ export class SidePannelComponent implements OnInit, OnDestroy { } isActive(selectedItem) { - debugger if (this.router.url.indexOf(`/${selectedItem}`) > -1 || this.selectedTab === selectedItem) { if (!this.selectedTab) { this.selectedTab = selectedItem @@ -94,10 +94,10 @@ export class SidePannelComponent implements OnInit, OnDestroy { showMenuButton() { this.showSideMenu = this.showSideMenu ? false : true; - } + } + + closeNav() { + this.showSideMenu = this.showSideMenu ? false : true; + } - closeNav(){ - this.showSideMenu = this.showSideMenu ? false : true; - } - } diff --git a/projects/discussion-ui/src/lib/discussion-routing/discussion-routing.module.ts b/projects/discussion-ui/src/lib/discussion-routing/discussion-routing.module.ts index dc213b45..634d2199 100644 --- a/projects/discussion-ui/src/lib/discussion-routing/discussion-routing.module.ts +++ b/projects/discussion-ui/src/lib/discussion-routing/discussion-routing.module.ts @@ -17,6 +17,11 @@ const routes: Routes = [ path: '', component: LibEntryComponent, children: [ + { + path: '', + pathMatch: 'full', + component: DiscussCategoryComponent + }, { path: 'home', pathMatch: 'full', diff --git a/projects/discussion-ui/src/public-api.ts b/projects/discussion-ui/src/public-api.ts index fb62d476..ba9d1a6d 100644 --- a/projects/discussion-ui/src/public-api.ts +++ b/projects/discussion-ui/src/public-api.ts @@ -4,3 +4,4 @@ export * from './lib/discussion-ui.module'; export * from './lib/discussion-events.service'; +export * from './lib/models/discussion-config.model'; From 826309d1160d9bc966c9948e39933c5457a00ca8 Mon Sep 17 00:00:00 2001 From: pilliarunkumar Date: Wed, 17 Feb 2021 11:20:41 +0530 Subject: [PATCH 06/12] Task#SB-22655 feat: removed debugger --- projects/discussion-ui/src/lib/services/config.service.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/discussion-ui/src/lib/services/config.service.ts b/projects/discussion-ui/src/lib/services/config.service.ts index b35d0136..3cf24693 100644 --- a/projects/discussion-ui/src/lib/services/config.service.ts +++ b/projects/discussion-ui/src/lib/services/config.service.ts @@ -23,7 +23,6 @@ export class ConfigService { setConfig(activatedRoute) { activatedRoute.data.subscribe((data) => { - debugger this._config = data; }) From a33566a78a0f367a6305130d3066767ce18428f0 Mon Sep 17 00:00:00 2001 From: pilliarunkumar Date: Wed, 17 Feb 2021 18:00:20 +0530 Subject: [PATCH 07/12] Task#SB-22655 feat: change in configure service --- projects/discussion-ui/src/lib/services/config.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/discussion-ui/src/lib/services/config.service.ts b/projects/discussion-ui/src/lib/services/config.service.ts index 3cf24693..677eb2d6 100644 --- a/projects/discussion-ui/src/lib/services/config.service.ts +++ b/projects/discussion-ui/src/lib/services/config.service.ts @@ -22,8 +22,8 @@ export class ConfigService { } setConfig(activatedRoute) { - activatedRoute.data.subscribe((data) => { - this._config = data; + activatedRoute.data.subscribe((config) => { + this._config = config.data; }) } From 67d4b15b15dcf9369e15db7ac34e089c6e2f5c13 Mon Sep 17 00:00:00 2001 From: pilliarunkumar Date: Wed, 17 Feb 2021 18:34:38 +0530 Subject: [PATCH 08/12] Task#SB-22655 feat: Configure router slug from config options --- .../discuss-category/discuss-category.component.ts | 4 +++- .../components/discuss-home/discuss-home.component.ts | 4 +++- .../discussion-details.component.ts | 4 +++- .../my-discussion/my-discussion.component.ts | 4 +++- .../components/side-pannel/side-pannel.component.ts | 11 +++++------ .../related-discussion.component.ts | 7 +++++-- .../discussion-ui/src/lib/services/config.service.ts | 3 ++- 7 files changed, 24 insertions(+), 13 deletions(-) diff --git a/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.ts b/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.ts index 7ca42e16..c8ead408 100644 --- a/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.ts +++ b/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.ts @@ -8,6 +8,7 @@ import { TelemetryUtilsService } from './../../telemetry-utils.service'; import * as CONSTANTS from './../../common/constants.json'; /* tslint:disable */ import * as _ from 'lodash' +import { ConfigService } from '../../services/config.service'; /* tslint:enable */ @Component({ @@ -36,6 +37,7 @@ export class DiscussCategoryComponent implements OnInit, OnDestroy { constructor( public discussService: DiscussionService, + public configService: ConfigService, public router: Router, public activatedRoute: ActivatedRoute, private telemetryUtils: TelemetryUtilsService @@ -97,7 +99,7 @@ export class DiscussCategoryComponent implements OnInit, OnDestroy { }); } else { this.discussService.setContext(CONTEXT_PROPS.cid, this.categoryId); - this.router.navigate([`${CONSTANTS.ROUTES.CATEGORY}`, `${this.categoryId}`]); + this.router.navigate([`${this.configService.getConfig().routerSlug}${CONSTANTS.ROUTES.CATEGORY}`, `${this.categoryId}`]); } }, error => { this.showLoader = false; diff --git a/projects/discussion-ui/src/lib/components/discuss-home/discuss-home.component.ts b/projects/discussion-ui/src/lib/components/discuss-home/discuss-home.component.ts index 5eb6dd09..d2bf221d 100644 --- a/projects/discussion-ui/src/lib/components/discuss-home/discuss-home.component.ts +++ b/projects/discussion-ui/src/lib/components/discuss-home/discuss-home.component.ts @@ -7,6 +7,7 @@ import * as CONSTANTS from './../../common/constants.json'; /* tslint:disable */ import * as _ from 'lodash' import { NSDiscussData } from '../../models/discuss.model'; +import { ConfigService } from '../../services/config.service'; /* tslint:enable */ @Component({ @@ -27,6 +28,7 @@ export class DiscussHomeComponent implements OnInit { public router: Router, private route: ActivatedRoute, private discussionService: DiscussionService, + private configService: ConfigService, private telemetryUtils: TelemetryUtilsService) {} ngOnInit() { @@ -48,7 +50,7 @@ export class DiscussHomeComponent implements OnInit { id: _.get(discussionData, 'tid'), type: 'Topic' }); - this.router.navigate([`${CONSTANTS.ROUTES.TOPIC}${_.trim(_.get(discussionData, 'slug'))}`]); + this.router.navigate([`${this.configService.getConfig().routerSlug}${CONSTANTS.ROUTES.TOPIC}${_.trim(_.get(discussionData, 'slug'))}`]); } getDiscussionList(slug: string) { diff --git a/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.ts b/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.ts index 01835ee7..93e94eb2 100644 --- a/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.ts +++ b/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.ts @@ -8,6 +8,7 @@ import * as CONSTANTS from '../../common/constants.json'; /* tslint:disable */ import * as _ from 'lodash' import { Subscription } from 'rxjs'; +import { ConfigService } from '../../services/config.service'; /* tslint:enable */ @@ -41,6 +42,7 @@ export class DiscussionDetailsComponent implements OnInit, OnDestroy { constructor( private route: ActivatedRoute, private discussionService: DiscussionService, + private configService: ConfigService, private formBuilder: FormBuilder, public router: Router, private telemetryUtils: TelemetryUtilsService, @@ -253,7 +255,7 @@ export class DiscussionDetailsComponent implements OnInit, OnDestroy { navigateWithPage(page: any) { if (page !== this.currentActivePage) { - this.router.navigate([`${CONSTANTS.ROUTES.CATEGORY} ${this.topicId}`], { queryParams: { page } }); + this.router.navigate([`${this.configService.getConfig().routerSlug}${CONSTANTS.ROUTES.CATEGORY} ${this.topicId}`], { queryParams: { page } }); } } diff --git a/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.ts b/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.ts index b9209040..0612d3b8 100644 --- a/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.ts +++ b/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.ts @@ -6,6 +6,7 @@ import { Router } from '@angular/router'; import * as CONSTANTS from '../../common/constants.json'; /* tslint:disable */ import * as _ from 'lodash' +import { ConfigService } from '../../services/config.service'; /* tslint:enable */ @Component({ @@ -25,6 +26,7 @@ export class MyDiscussionComponent implements OnInit { showLoader = false; constructor( private discussService: DiscussionService, + private configService: ConfigService, public router: Router, private telemetryUtils: TelemetryUtilsService) {} @@ -131,7 +133,7 @@ export class MyDiscussionComponent implements OnInit { navigateToDiscussionDetails(discussionData) { console.log('discussionData', discussionData); - this.router.navigate([`${CONSTANTS.ROUTES.TOPIC}${_.get(discussionData, 'topic.slug')}`]); + this.router.navigate([`${this.configService.getConfig().routerSlug}${CONSTANTS.ROUTES.TOPIC}${_.get(discussionData, 'topic.slug')}`]); } logTelemetry(event) { diff --git a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts index a4a74108..7bd7129e 100644 --- a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts +++ b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts @@ -28,7 +28,7 @@ export class SidePannelComponent implements OnInit, OnDestroy { data: IdiscussionConfig; hideSidePanel: boolean; - menu: Array; + menu: Array = []; selectedTab: string; showSideMenu: Boolean = true; @@ -54,12 +54,11 @@ export class SidePannelComponent implements OnInit, OnDestroy { this.discussService.initializeUserDetails(this.discussService.userName); - this.menu = this.data.menuOptions.length > 0 ? this.data.menuOptions : CONSTANTS.MENUOPTIONS + let menuArr = this.data.menuOptions.length > 0 ? this.data.menuOptions : CONSTANTS.MENUOPTIONS // }) - for (let i = 0; i < this.menu.length; i++) { - let item = this.menu - if (!item[i].enable) { - this.menu.splice(i, 1) + for (let i = 0; i < menuArr.length; i++) { + if (menuArr[i].enable) { + this.menu.push(menuArr[i]) } } diff --git a/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.ts b/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.ts index b4d0bda7..309556ea 100644 --- a/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.ts +++ b/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.ts @@ -1,5 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; import { Router } from '@angular/router' +import { ConfigService } from '../../services/config.service'; import * as CONSTANTS from './../../common/constants.json'; @Component({ @@ -12,13 +13,15 @@ export class RelatedDiscussionComponent implements OnInit { @Input() relatedDiscussions!: [] - constructor(private router: Router) { } + constructor(private router: Router, + private configService: ConfigService + ) { } ngOnInit() { } getDiscussion(discuss) { - this.router.navigate([`${CONSTANTS.ROUTES.DISCUSSION}topic/${discuss.slug}`]); + this.router.navigate([`${this.configService.getConfig().routerSlug}${CONSTANTS.ROUTES.DISCUSSION}topic/${discuss.slug}`]); } } diff --git a/projects/discussion-ui/src/lib/services/config.service.ts b/projects/discussion-ui/src/lib/services/config.service.ts index 677eb2d6..986a26f6 100644 --- a/projects/discussion-ui/src/lib/services/config.service.ts +++ b/projects/discussion-ui/src/lib/services/config.service.ts @@ -2,6 +2,7 @@ import { Injectable } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { Subscription } from 'rxjs'; import * as _ from 'lodash' +import { IdiscussionConfig } from '../models/discussion-config.model'; @Injectable({ providedIn: 'root' @@ -9,7 +10,7 @@ import * as _ from 'lodash' export class ConfigService { paramsSubscription: Subscription; - private _config: any; + private _config: IdiscussionConfig; public checkContext: boolean From 60a1975089be79fd7dd3c170ada0984f3b471eaf Mon Sep 17 00:00:00 2001 From: pilliarunkumar Date: Thu, 18 Feb 2021 11:29:05 +0530 Subject: [PATCH 09/12] Task#SB-22655 feat: added discussion model --- .../src/lib/models/discussion-config.model.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 projects/discussion-ui/src/lib/models/discussion-config.model.ts diff --git a/projects/discussion-ui/src/lib/models/discussion-config.model.ts b/projects/discussion-ui/src/lib/models/discussion-config.model.ts new file mode 100644 index 00000000..ccf23132 --- /dev/null +++ b/projects/discussion-ui/src/lib/models/discussion-config.model.ts @@ -0,0 +1,18 @@ +export interface IdiscussionConfig { + menuOptions?: Array + userName: string + context: Object + categories: Array + path: string + routerSlug: string + } + + export interface Icontext { + id: number + } + + export interface IMenuOptions { + route: string + enable: boolean + } + \ No newline at end of file From 214a54ec2fd746a602b1c186dfa2c621b7f6440c Mon Sep 17 00:00:00 2001 From: pilliarunkumar Date: Thu, 18 Feb 2021 12:32:07 +0530 Subject: [PATCH 10/12] Task#SB-22655 feat: Addressed code comments --- .../discuss-category.component.ts | 3 ++- .../discuss-home/discuss-home.component.ts | 5 +++-- .../discussion-details.component.ts | 3 ++- .../components/lib-entry/lib-entry.component.ts | 15 ++++++++++++++- .../my-discussion/my-discussion.component.ts | 9 +++++---- .../side-pannel/side-pannel.component.ts | 11 +---------- .../related-discussion.component.ts | 5 +++-- 7 files changed, 30 insertions(+), 21 deletions(-) diff --git a/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.ts b/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.ts index c8ead408..0b72cbcf 100644 --- a/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.ts +++ b/projects/discussion-ui/src/lib/components/discuss-category/discuss-category.component.ts @@ -99,7 +99,8 @@ export class DiscussCategoryComponent implements OnInit, OnDestroy { }); } else { this.discussService.setContext(CONTEXT_PROPS.cid, this.categoryId); - this.router.navigate([`${this.configService.getConfig().routerSlug}${CONSTANTS.ROUTES.CATEGORY}`, `${this.categoryId}`]); + let routerSlug = this.configService.getConfig().routerSlug ? this.configService.getConfig().routerSlug : '' + this.router.navigate([`${routerSlug}${CONSTANTS.ROUTES.CATEGORY}`, `${this.categoryId}`]); } }, error => { this.showLoader = false; diff --git a/projects/discussion-ui/src/lib/components/discuss-home/discuss-home.component.ts b/projects/discussion-ui/src/lib/components/discuss-home/discuss-home.component.ts index d2bf221d..957ff3b2 100644 --- a/projects/discussion-ui/src/lib/components/discuss-home/discuss-home.component.ts +++ b/projects/discussion-ui/src/lib/components/discuss-home/discuss-home.component.ts @@ -29,7 +29,7 @@ export class DiscussHomeComponent implements OnInit { private route: ActivatedRoute, private discussionService: DiscussionService, private configService: ConfigService, - private telemetryUtils: TelemetryUtilsService) {} + private telemetryUtils: TelemetryUtilsService) { } ngOnInit() { this.telemetryUtils.logImpression(NSDiscussData.IPageName.HOME); @@ -50,7 +50,8 @@ export class DiscussHomeComponent implements OnInit { id: _.get(discussionData, 'tid'), type: 'Topic' }); - this.router.navigate([`${this.configService.getConfig().routerSlug}${CONSTANTS.ROUTES.TOPIC}${_.trim(_.get(discussionData, 'slug'))}`]); + let routerSlug = this.configService.getConfig().routerSlug ? this.configService.getConfig().routerSlug : '' + this.router.navigate([`${routerSlug}${CONSTANTS.ROUTES.TOPIC}${_.trim(_.get(discussionData, 'slug'))}`]); } getDiscussionList(slug: string) { diff --git a/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.ts b/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.ts index 93e94eb2..47d54626 100644 --- a/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.ts +++ b/projects/discussion-ui/src/lib/components/discussion-details/discussion-details.component.ts @@ -255,7 +255,8 @@ export class DiscussionDetailsComponent implements OnInit, OnDestroy { navigateWithPage(page: any) { if (page !== this.currentActivePage) { - this.router.navigate([`${this.configService.getConfig().routerSlug}${CONSTANTS.ROUTES.CATEGORY} ${this.topicId}`], { queryParams: { page } }); + let routerSlug = this.configService.getConfig().routerSlug ? this.configService.getConfig().routerSlug : '' + this.router.navigate([`${routerSlug}${CONSTANTS.ROUTES.CATEGORY} ${this.topicId}`], { queryParams: { page } }); } } diff --git a/projects/discussion-ui/src/lib/components/lib-entry/lib-entry.component.ts b/projects/discussion-ui/src/lib/components/lib-entry/lib-entry.component.ts index 20c1d009..ba1a8c43 100644 --- a/projects/discussion-ui/src/lib/components/lib-entry/lib-entry.component.ts +++ b/projects/discussion-ui/src/lib/components/lib-entry/lib-entry.component.ts @@ -5,6 +5,8 @@ import { Location } from '@angular/common'; /* tslint:disable */ import * as _ from 'lodash' +import { IdiscussionConfig } from '../../models/discussion-config.model'; +import { ConfigService } from '../../services/config.service'; /* tslint:enable */ @Component({ selector: 'lib-lib-entry', @@ -13,13 +15,24 @@ import * as _ from 'lodash' }) export class LibEntryComponent implements OnInit { + data: IdiscussionConfig; + constructor( public activatedRoute: ActivatedRoute, private discussionService: DiscussionService, + private configService: ConfigService, private location: Location ) { } - ngOnInit() { } + ngOnInit() { + this.configService.setConfig(this.activatedRoute) + // this.activatedRoute.data.subscribe((data) => { + this.data = this.configService.getConfig(); + this.discussionService.userName = _.get(this.discussionService, 'userName'); + const rawCategories = _.get(this.data, 'categories'); + this.discussionService.forumIds = _.get(rawCategories, 'result'); + this.discussionService.initializeUserDetails(this.discussionService.userName); + } goBack() { this.location.back(); diff --git a/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.ts b/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.ts index 0612d3b8..7dd1f534 100644 --- a/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.ts +++ b/projects/discussion-ui/src/lib/components/my-discussion/my-discussion.component.ts @@ -28,7 +28,7 @@ export class MyDiscussionComponent implements OnInit { private discussService: DiscussionService, private configService: ConfigService, public router: Router, - private telemetryUtils: TelemetryUtilsService) {} + private telemetryUtils: TelemetryUtilsService) { } /** To fetch user details */ fetchUserProfile(userName) { @@ -54,8 +54,8 @@ export class MyDiscussionComponent implements OnInit { ngOnInit() { this.telemetryUtils.setContext([]); this.telemetryUtils.logImpression(NSDiscussData.IPageName.MY_DISCUSSION); - if ( this.discussService.userName) { - this.fetchUserProfile( this.discussService.userName); + if (this.discussService.userName) { + this.fetchUserProfile(this.discussService.userName); } } @@ -133,7 +133,8 @@ export class MyDiscussionComponent implements OnInit { navigateToDiscussionDetails(discussionData) { console.log('discussionData', discussionData); - this.router.navigate([`${this.configService.getConfig().routerSlug}${CONSTANTS.ROUTES.TOPIC}${_.get(discussionData, 'topic.slug')}`]); + let routerSlug = this.configService.getConfig().routerSlug ? this.configService.getConfig().routerSlug : '' + this.router.navigate([`${routerSlug}${CONSTANTS.ROUTES.TOPIC}${_.get(discussionData, 'topic.slug')}`]); } logTelemetry(event) { diff --git a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts index 7bd7129e..096e2cb4 100644 --- a/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts +++ b/projects/discussion-ui/src/lib/components/side-pannel/side-pannel.component.ts @@ -44,16 +44,7 @@ export class SidePannelComponent implements OnInit, OnDestroy { // TODO: loader or spinner this.hideSidePanel = document.body.classList.contains('widget'); this.telemetryUtils.logImpression(NSDiscussData.IPageName.HOME); - this.configService.setConfig(this.activatedRoute) - // this.activatedRoute.data.subscribe((data) => { - this.data = this.configService.getConfig(); - this.discussService.userName = _.get(this.data, 'userName'); - const rawCategories = _.get(this.data, 'categories'); - this.discussService.forumIds = _.get(rawCategories, 'result'); - - - this.discussService.initializeUserDetails(this.discussService.userName); - + this.data = this.configService.getConfig() let menuArr = this.data.menuOptions.length > 0 ? this.data.menuOptions : CONSTANTS.MENUOPTIONS // }) for (let i = 0; i < menuArr.length; i++) { diff --git a/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.ts b/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.ts index 309556ea..58ac1fcd 100644 --- a/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.ts +++ b/projects/discussion-ui/src/lib/elements/related-discussion/related-discussion.component.ts @@ -15,13 +15,14 @@ export class RelatedDiscussionComponent implements OnInit { constructor(private router: Router, private configService: ConfigService - ) { } + ) { } ngOnInit() { } getDiscussion(discuss) { - this.router.navigate([`${this.configService.getConfig().routerSlug}${CONSTANTS.ROUTES.DISCUSSION}topic/${discuss.slug}`]); + let routerSlug = this.configService.getConfig().routerSlug ? this.configService.getConfig().routerSlug : '' + this.router.navigate([`${routerSlug}${CONSTANTS.ROUTES.DISCUSSION}topic/${discuss.slug}`]); } } From 14c519c23cb1411e630dd9c7ed3cc6919665803b Mon Sep 17 00:00:00 2001 From: pilliarunkumar Date: Thu, 18 Feb 2021 12:52:50 +0530 Subject: [PATCH 11/12] Task#SB-22655 feat: changing categories type to object --- .../discussion-ui/src/lib/models/discussion-config.model.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/discussion-ui/src/lib/models/discussion-config.model.ts b/projects/discussion-ui/src/lib/models/discussion-config.model.ts index ccf23132..e5fe45b0 100644 --- a/projects/discussion-ui/src/lib/models/discussion-config.model.ts +++ b/projects/discussion-ui/src/lib/models/discussion-config.model.ts @@ -2,7 +2,7 @@ export interface IdiscussionConfig { menuOptions?: Array userName: string context: Object - categories: Array + categories: Object path: string routerSlug: string } From 8d412233a2d0ddf2905677b0bac1f0be0baeef5a Mon Sep 17 00:00:00 2001 From: pilliarunkumar Date: Thu, 18 Feb 2021 15:19:24 +0530 Subject: [PATCH 12/12] Task#SB-22655 feat: changing data type for category --- .../discussion-ui/src/lib/models/discussion-config.model.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/projects/discussion-ui/src/lib/models/discussion-config.model.ts b/projects/discussion-ui/src/lib/models/discussion-config.model.ts index e5fe45b0..7b856e82 100644 --- a/projects/discussion-ui/src/lib/models/discussion-config.model.ts +++ b/projects/discussion-ui/src/lib/models/discussion-config.model.ts @@ -2,7 +2,7 @@ export interface IdiscussionConfig { menuOptions?: Array userName: string context: Object - categories: Object + categories: Icategory path: string routerSlug: string } @@ -15,4 +15,8 @@ export interface IdiscussionConfig { route: string enable: boolean } + + export interface Icategory { + result : Array + } \ No newline at end of file