diff --git a/angular.json b/angular.json index c1e4699e4..efd8ce391 100644 --- a/angular.json +++ b/angular.json @@ -880,6 +880,55 @@ "common-docs" ] }, + "route-pages-coral-page": { + "projectType": "library", + "root": "libs/route-pages/coral-page", + "sourceRoot": "libs/route-pages/coral-page/src", + "prefix": "valor-software-site-base", + "targets": { + "build": { + "executor": "@nrwl/angular:ng-packagr-lite", + "outputs": [ + "dist/libs/route-pages/coral-page" + ], + "options": { + "project": "libs/route-pages/coral-page/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "libs/route-pages/coral-page/tsconfig.lib.prod.json" + }, + "development": { + "tsConfig": "libs/route-pages/coral-page/tsconfig.lib.json" + } + }, + "defaultConfiguration": "production" + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": [ + "coverage/libs/route-pages/coral-page" + ], + "options": { + "jestConfig": "libs/route-pages/coral-page/jest.config.js", + "passWithNoTests": true + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "options": { + "lintFilePatterns": [ + "libs/route-pages/coral-page/src/**/*.ts", + "libs/route-pages/coral-page/src/**/*.html" + ] + } + } + }, + "tags": [], + "implicitDependencies": [ + "common-docs" + ] + }, "valor-software-site": { "projectType": "application", "root": "apps/valor-software-site", diff --git a/apps/valor-software-site/src/assets/img/bg-img/coral_page/bg_header.png b/apps/valor-software-site/src/assets/img/bg-img/coral_page/bg_header.png new file mode 100644 index 000000000..330e0283a Binary files /dev/null and b/apps/valor-software-site/src/assets/img/bg-img/coral_page/bg_header.png differ diff --git a/apps/valor-software-site/src/assets/img/bg-img/coral_page/cover_1.png b/apps/valor-software-site/src/assets/img/bg-img/coral_page/cover_1.png new file mode 100644 index 000000000..6f4fcdb46 Binary files /dev/null and b/apps/valor-software-site/src/assets/img/bg-img/coral_page/cover_1.png differ diff --git a/apps/valor-software-site/src/assets/img/bg-img/coral_page/logo.png b/apps/valor-software-site/src/assets/img/bg-img/coral_page/logo.png new file mode 100644 index 000000000..d1aa713e7 Binary files /dev/null and b/apps/valor-software-site/src/assets/img/bg-img/coral_page/logo.png differ diff --git a/apps/valor-software-site/src/assets/img/bg-img/coral_page/onboarding_1.png b/apps/valor-software-site/src/assets/img/bg-img/coral_page/onboarding_1.png new file mode 100644 index 000000000..9fbac05bd Binary files /dev/null and b/apps/valor-software-site/src/assets/img/bg-img/coral_page/onboarding_1.png differ diff --git a/apps/valor-software-site/src/assets/img/bg-img/coral_page/onboarding_2.png b/apps/valor-software-site/src/assets/img/bg-img/coral_page/onboarding_2.png new file mode 100644 index 000000000..029b68df7 Binary files /dev/null and b/apps/valor-software-site/src/assets/img/bg-img/coral_page/onboarding_2.png differ diff --git a/apps/valor-software-site/src/assets/img/technologies/others/graph_ql.png b/apps/valor-software-site/src/assets/img/technologies/others/graph_ql.png new file mode 100644 index 000000000..b494d5b0e Binary files /dev/null and b/apps/valor-software-site/src/assets/img/technologies/others/graph_ql.png differ diff --git a/apps/valor-software-site/src/assets/img/technologies/svg/graph_ql.svg b/apps/valor-software-site/src/assets/img/technologies/svg/graph_ql.svg new file mode 100644 index 000000000..3f97312b7 --- /dev/null +++ b/apps/valor-software-site/src/assets/img/technologies/svg/graph_ql.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/valor-software-site/src/assets/img/technologies/svg/nest_js.svg b/apps/valor-software-site/src/assets/img/technologies/svg/nest_js.svg new file mode 100644 index 000000000..ac390e777 --- /dev/null +++ b/apps/valor-software-site/src/assets/img/technologies/svg/nest_js.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/valor-software-site/src/assets/img/technologies/svg/react_clean.svg b/apps/valor-software-site/src/assets/img/technologies/svg/react_clean.svg index a5459e41e..225842b82 100644 --- a/apps/valor-software-site/src/assets/img/technologies/svg/react_clean.svg +++ b/apps/valor-software-site/src/assets/img/technologies/svg/react_clean.svg @@ -1,4 +1,4 @@ - - - + + + diff --git a/apps/valor-software-site/src/assets/portfolio/clients/coral.json b/apps/valor-software-site/src/assets/portfolio/clients/coral.json new file mode 100644 index 000000000..92a52f632 --- /dev/null +++ b/apps/valor-software-site/src/assets/portfolio/clients/coral.json @@ -0,0 +1,12 @@ +{ + "name": "Coral", + "description": "A mobile coach that helps you enjoy solo and partnered connection. Coral is a one-of-a-kind app that provides guided exercises to increase your confidence and reduce performance anxiety through games and fun!", + "previewImg": "assets/img/bg-img/coral_page/cover_1.png", + "headerImg": "assets/img/bg-img/coral_page/bg_header.png", + "sortServices": ["web"], + "sortTechnologies": ["react_native", "nest_js", "graph_ql"], + "aspects": { + "technology_stack": ["react_native", "nest_js", "native_script", "graph_ql"], + "services_provided": ["mobile"] + } +} \ No newline at end of file diff --git a/apps/valor-software-site/src/assets/portfolio/portfolio.list.ts b/apps/valor-software-site/src/assets/portfolio/portfolio.list.ts index ac92ff651..b3d1a7cb7 100644 --- a/apps/valor-software-site/src/assets/portfolio/portfolio.list.ts +++ b/apps/valor-software-site/src/assets/portfolio/portfolio.list.ts @@ -1,4 +1,5 @@ export const projectsList = [ + 'Coral', 'Booking', 'Ashes of Creation', 'Terminus', diff --git a/libs/common-docs/src/common-docs.module.ts b/libs/common-docs/src/common-docs.module.ts index fe8d05df8..35a63dd78 100644 --- a/libs/common-docs/src/common-docs.module.ts +++ b/libs/common-docs/src/common-docs.module.ts @@ -31,6 +31,7 @@ import { UtilService } from './services/utils.service'; import { TechnologiesCardComponent } from './components/technologies-card/technologies-card.component'; import { TechnologiesComponent } from './components/technologies/technologies.component'; import { CookieConsentBannerComponent } from './components/cookie-consent-banner/cookie-consent-banner.component'; +import { DeliverableCardComponent } from './components/deliverable-card/deliverable-card.component'; export { PopoverComponent } from './components/popover/popover.component'; export { TopMenuComponent } from './components/top-menu/top-menu.component'; @@ -65,6 +66,8 @@ export { ITechnologiesCard } from './components/technologies-card/technologies-c export { UtilService } from './services/utils.service'; export { technologiesAndServices } from './components/technologies/technologies-and-services'; export { CookieConsentBannerComponent } from './components/cookie-consent-banner/cookie-consent-banner.component'; +export { DeliverableCardComponent } from './components/deliverable-card/deliverable-card.component'; +export { DeliverableCard } from './components/deliverable-card/deliverable-card.component'; @NgModule({ declarations: [ @@ -87,7 +90,8 @@ export { CookieConsentBannerComponent } from './components/cookie-consent-banner ChallengeCardComponent, TechnologiesCardComponent, TechnologiesComponent, - CookieConsentBannerComponent + CookieConsentBannerComponent, + DeliverableCardComponent ], imports: [ CommonModule, @@ -116,7 +120,8 @@ export { CookieConsentBannerComponent } from './components/cookie-consent-banner ChallengeCardComponent, TechnologiesCardComponent, TechnologiesComponent, - CookieConsentBannerComponent + CookieConsentBannerComponent, + DeliverableCardComponent ], providers: [ ModalService, diff --git a/libs/route-pages/breethe-page/src/deliverable-card.component.html b/libs/common-docs/src/components/deliverable-card/deliverable-card.component.html similarity index 93% rename from libs/route-pages/breethe-page/src/deliverable-card.component.html rename to libs/common-docs/src/components/deliverable-card/deliverable-card.component.html index e0d672f0e..6dde02cc5 100644 --- a/libs/route-pages/breethe-page/src/deliverable-card.component.html +++ b/libs/common-docs/src/components/deliverable-card/deliverable-card.component.html @@ -4,8 +4,7 @@

{{deliverable.title}}

- {{description}}

+ [style.margin-bottom]=" i !== (deliverable.descriptions.length + 1) ? '16px' : '0'" [innerHtml]="description">

diff --git a/libs/route-pages/breethe-page/src/deliverable-card.component.ts b/libs/common-docs/src/components/deliverable-card/deliverable-card.component.ts similarity index 100% rename from libs/route-pages/breethe-page/src/deliverable-card.component.ts rename to libs/common-docs/src/components/deliverable-card/deliverable-card.component.ts diff --git a/libs/common-docs/src/components/impact-card/impact-card.component.html b/libs/common-docs/src/components/impact-card/impact-card.component.html index 03a175464..fc7f3038a 100644 --- a/libs/common-docs/src/components/impact-card/impact-card.component.html +++ b/libs/common-docs/src/components/impact-card/impact-card.component.html @@ -5,7 +5,9 @@ Impact

diff --git a/libs/route-pages/blog-portfolio/src/routes.ts b/libs/route-pages/blog-portfolio/src/routes.ts index b7318ef6b..360fc2285 100644 --- a/libs/route-pages/blog-portfolio/src/routes.ts +++ b/libs/route-pages/blog-portfolio/src/routes.ts @@ -40,6 +40,10 @@ export const routes: Routes = [ path: 'breethe', loadChildren: () => import('@valor-software/breethe-page').then(m => m.BreethePageModule) }, + { + path: 'coral', + loadChildren: () => import('@valor-software/coral-page').then(m => m.CoralPageModule) + }, { path: ':id', component: GeneralItemComponent diff --git a/libs/route-pages/breethe-page/src/breethe-page.component.ts b/libs/route-pages/breethe-page/src/breethe-page.component.ts index a086fc2e1..e1df350b5 100644 --- a/libs/route-pages/breethe-page/src/breethe-page.component.ts +++ b/libs/route-pages/breethe-page/src/breethe-page.component.ts @@ -1,7 +1,6 @@ import { Component, OnInit } from '@angular/core'; -import { ITechnologiesCard } from '@valor-software/common-docs'; +import { DeliverableCard, ITechnologiesCard } from '@valor-software/common-docs'; import SwiperCore, { Pagination, SwiperOptions } from "swiper"; -import { DeliverableCard } from './deliverable-card.component'; SwiperCore.use([Pagination]); diff --git a/libs/route-pages/breethe-page/src/breethe-page.module.ts b/libs/route-pages/breethe-page/src/breethe-page.module.ts index db094e41f..213f0ae01 100644 --- a/libs/route-pages/breethe-page/src/breethe-page.module.ts +++ b/libs/route-pages/breethe-page/src/breethe-page.module.ts @@ -5,13 +5,12 @@ import { routes } from "./routes"; import { RouterModule, Routes } from "@angular/router"; import { CommonDocsModule } from '@valor-software/common-docs'; import { SwiperModule } from "swiper/angular"; -import { DeliverableCardComponent } from './deliverable-card.component'; import { FeedbackModule } from '@valor-software/feedback'; export { BreethePageComponent } from "./breethe-page.component"; @NgModule({ - declarations: [BreethePageComponent, DeliverableCardComponent], + declarations: [BreethePageComponent], imports: [ CommonModule, RouterModule.forChild(routes), diff --git a/libs/route-pages/coral-page/.eslintrc.json b/libs/route-pages/coral-page/.eslintrc.json new file mode 100644 index 000000000..e919e2ddf --- /dev/null +++ b/libs/route-pages/coral-page/.eslintrc.json @@ -0,0 +1,46 @@ +{ + "extends": [ + "../../../.eslintrc.json" + ], + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "extends": [ + "plugin:@nrwl/nx/angular", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "valorSoftwareSiteBase", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "valor-software-site-base", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "extends": [ + "plugin:@nrwl/nx/angular-template" + ], + "rules": {} + } + ] +} diff --git a/libs/route-pages/coral-page/README.md b/libs/route-pages/coral-page/README.md new file mode 100644 index 000000000..babead781 --- /dev/null +++ b/libs/route-pages/coral-page/README.md @@ -0,0 +1,9 @@ +# route-pages-coral-page + +This library was generated with [Nx](https://nx.dev). + + +## Running unit tests + +Run `nx test route-pages-coral-page` to execute the unit tests. + diff --git a/libs/route-pages/coral-page/jest.config.js b/libs/route-pages/coral-page/jest.config.js new file mode 100644 index 000000000..a74bb1e39 --- /dev/null +++ b/libs/route-pages/coral-page/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + displayName: 'route-pages-coral-page', + preset: '../../../jest.preset.js', + setupFilesAfterEnv: ['/src/test-setup.ts'], + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + stringifyContentPathRegex: '\\.(html|svg)$', + } + }, + coverageDirectory: '../../../coverage/libs/route-pages/coral-page', + transform: { + '^.+\\.(ts|js|html)$': 'jest-preset-angular' + }, + snapshotSerializers: [ + 'jest-preset-angular/build/serializers/no-ng-attributes', + 'jest-preset-angular/build/serializers/ng-snapshot', + 'jest-preset-angular/build/serializers/html-comment', + ] +}; diff --git a/libs/route-pages/coral-page/ng-package.json b/libs/route-pages/coral-page/ng-package.json new file mode 100644 index 000000000..51f0d1cb0 --- /dev/null +++ b/libs/route-pages/coral-page/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/libs/route-pages/coral-page", + "lib": { + "entryFile": "src/index.ts" + } +} diff --git a/libs/route-pages/coral-page/package.json b/libs/route-pages/coral-page/package.json new file mode 100644 index 000000000..417eb62ac --- /dev/null +++ b/libs/route-pages/coral-page/package.json @@ -0,0 +1,11 @@ +{ + "name": "@valor-software/coral-page", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^12.2.0", + "@angular/core": "^12.2.0" + }, + "dependencies": { + "tslib": "^2.3.0" + } +} diff --git a/libs/route-pages/coral-page/src/coral-page.component.html b/libs/route-pages/coral-page/src/coral-page.component.html new file mode 100644 index 000000000..950585d34 --- /dev/null +++ b/libs/route-pages/coral-page/src/coral-page.component.html @@ -0,0 +1,192 @@ +
+
+ +
+ + + +

+ Coral +

+

+ A mobile coach that helps you enjoy solo and partnered connection. Coral is a one-of-a-kind app that + provides guided exercises to increase your confidence and reduce performance anxiety through games and + fun! +

+ + +
+ +
+
+ +
+

Background

+
+
+ background +
+

+ Coral is a science-backed app that helps couples and individuals improve their connections. Its + engineers, who have been using the app for some time, know it better than anyone. With their + exceptional knowledge and supervision, you won't be alone on your intimate journey. Coral gets to + know you better and offers valuable insights from professors and practitioners +

+

+ We started working with Lewis when his team already had a functional mobile app and web version. + However, the current version went outdated a year after it saw the world. Valor took on the task of + bug fixing. Eventually, we were up to server reconsideration when the real story begins :) +

+

+ What we had there was a Cordova-based app built more than a year before we took it over and the web + version using Vue.js. The main challenge we faced was with the admin system and its controls. We + also worked on the web and mobile versions from time to time before releasing them on the App Store + and Google Play Android Store. +

+
+
+
+
+ +
+

Solutions

+
+
+
+

+ {{drawbacks.title}}

+
+
+
+

{{role}}

+
+
+
+ +

+ {{drawbacks.subtitle}}

+

+ {{description}}

+
+
+
+ +
+

Deliverables

+
+
+
+

+ {{deliverable.title}}

+

+ {{description}}

+
+ +
+
+
+

{{role}}

+
+
+
+
+
+ + +
+
+

+ Technologies: +

+ +
+
+ +
+

Features

+
+
+

+ The onboarding process is a breeze – just download the app, register, and take a quick survey (8-10 + questions) that will help us create custom content for you based on your preferences, gender, and any + possible sexual traumas you may have experienced. +

+ +

+ After that, you'll get personalized lessons, practices, and tasks. These "journeys" consist of a series + of steps, with texts, audio, and questionnaires to help you learn and grow. And the best part is, you + can either pay for a subscription (60 bucks a year) or stick with the free version of the app. The free + version doesn't have all the content, but it's still pretty cool. +

+
+
+ + + +
+ +
+

Feedback

+
+
+

+ Hi! I'm Max, an engineer that solved the caching issue, and I just wanted to share some feedback on the + development process. This is the best team I have ever worked with! We all worked together seamlessly, + and no one was too opinionated or egotistical. Everyone's experience and knowledge was valued and + helpful. +

+ +

+ We were able to solve problems quickly and efficiently, and it was always encouraged to ask questions.We + had great communication and the team was chosen based on their soft skills, which I think is the secret + to our success. Special shoutout to Denis, Alex Bolshakov, Max, Alexandra Nadtochiy, and Slava Chub – + amazing team on the Valor side! +

+
+
+
+

+ Impact

+
+

+ Coral's initial goal is to educate and promote knowledge sharing, which sets us apart from the + competition, and makes us a unique and safe app for years to come. Our forums are filled with + sexologists and experts from various fields and universities, so you can get reliable advice and + information. Plus, you can connect with your partner in the app, which offers a different + experience and content. +

+

+ And if you buy a subscription, your partner gets access for free – sharing deepens connections, + and that's what Coral aims to do for you! :) +

+
+
+
+
+ +
+ + + \ No newline at end of file diff --git a/libs/route-pages/coral-page/src/coral-page.component.ts b/libs/route-pages/coral-page/src/coral-page.component.ts new file mode 100644 index 000000000..ba2ca9e7c --- /dev/null +++ b/libs/route-pages/coral-page/src/coral-page.component.ts @@ -0,0 +1,118 @@ +import { Component } from '@angular/core'; +import { DeliverableCard, ITechnologiesCard } from '@valor-software/common-docs'; +import { IFeaturesCard } from './features-card.component'; + +@Component({ + // eslint-disable-next-line @angular-eslint/component-selector + selector: 'coral-page', + templateUrl: './coral-page.component.html' +}) + +export class CoralPageComponent { + + + + technologiesCard: ITechnologiesCard[] = [ + { + smJustify: 'evenly', + lgJustify: 'start', + technologies: [ + { + src: "assets/img/technologies/svg/react_clean.svg", + title: "React Native" + }, + { + src: "assets/img/technologies/svg/nest_js.svg", + title: "Nest.js" + }, + { + src: "assets/img/technologies/svg/graph_ql.svg", + title: "GraphQL" + } + ] + } + ]; + + changeBreadCrumbTitle: { path: string, title: string, excludePath?: boolean }[] = [ + { + path: 'projects', + title: 'Portfolio', + }, + { + path: 'coral', + title: 'coral' + } + ]; + + deliverable: { title: string, descriptions: string[], roles: string[] } = + { + title: "Coral V 2. A new reconsidered and blossoming cross-platform mobile app.", + descriptions: [ + `We used Nest.js and GraphQL to create a new server that acts as an intermediary between the frontend and the existing server. We kept the old server for two reasons: the admin panel was tightly connected to it, and it was also used for the web part. Later on, we gave the admin panel independence from this "construction" but still kept the old server for the web. This made sense because we needed to prioritize value for our users and provide them with the features they needed, just as the client has been doing it since Coral was created.`, + `Max and Denis started from scratch on this project. They were the ones doing the heavy lifting, while Valor provided some tech solutions and suggestions, the client's team made the final call.` + ], + roles: + [ + 'Backend - Maxim Ugnichenko', + 'Frontend - Alexander Bolshakov', + 'Design - mostly Coral Team, then - Alexandra Nadtochiy', + ] + }; + + // drawbacks: string[] = [ + // 'Tricky code', + // 'Lack of functionality and code docs', + // 'Admin panel, web, and mobile parts needed help' + // ]; + + // drawbacksSolution: string[] = [ + // 'The chat prompts were a big hit with users because they provided helpful suggestions. We also added analytics to provide even deeper assistance. These suggestions covered a wide range of topics, not just sex. At one point, we had 30,000 partners and the system crashed because we tried to send all the messages at once.', + // 'To fix this issue, we had to look at caching. Caches can be different, almost unchangeable, changeable, and 100% static. So we used caching mostly instead of the server and protected the distances (PD(t)) of each thread. This greatly reduced the time it took to send messages from two hours to just 10 minutes. Max was the one who came up with the new logic and flow that made this possible.', + // 'In the end, it was all worth it because our users were thrilled with the improvements. As they say, "Good things come to those who wait... and have a good cache system in place!" And, as always, huge thanks to Max for being a coding wizard and making it all happen.' + // ]; + + drawbacks: { title: string, subtitle: string; solutions: string[], drawbacks: string[] } = + { + title: "Drawbacks", + subtitle: "Solutions", + solutions: [ + 'The chat prompts were a big hit with users because they provided helpful suggestions. We also added analytics to provide even deeper assistance. These suggestions covered a wide range of topics, not just sex. At one point, we had 30,000 partners and the system crashed because we tried to send all the messages at once.', + 'To fix this issue, we had to look at caching. Caches can be different, almost unchangeable, changeable, and 100% static. So we used caching mostly instead of the server and protected the distances (PD(t)) of each thread. This greatly reduced the time it took to send messages from two hours to just 10 minutes. Max was the one who came up with the new logic and flow that made this possible.', + 'In the end, it was all worth it because our users were thrilled with the improvements. As they say, "Good things come to those who wait... and have a good cache system in place!" And, as always, huge thanks to Max for being a coding wizard and making it all happen.' + ], + drawbacks: + [ + 'Tricky code', + 'Lack of functionality and code docs', + 'Admin panel, web, and mobile parts needed help' + ] + }; + + + features: IFeaturesCard[] = [ + { + title: 'Join our forum and get social!', + description: `In addition to our app that analyzes your answers and gives advice, we've also created a blog and social platform where people can share, support, and help each other through discussions.`, + img: 'assets/img/bg-img/coral_page/onboarding_1.png', + }, + { + title: 'Chat', + description: `We've also added a chat feature for partners, complete with photos and audio messages (scripting coming soon)."`, + img: 'assets/img/bg-img/coral_page/onboarding_2.png', + }, + { + title: 'Gifts – merch!', + description: `We also offer gifts and badges to users who have completed certain achievements or shown bravery in sharing their experiences on the forum.` + }, + { + title: 'Survey', + description: `Once a month, we ask users what they like and what they would like to see improved. This is how we came up with chat prompts. We also have plans to add gamification features like badges, but we need to secure the necessary budget first.` + }, + { + title: 'Analytics', + description: `A designated person reviews all forum comments using a Slack integration, so the Coral team knows which users are happy and which ones are not. A lot of analytics goes into the app to the extent that the frontend is 75% analytics.` + } + ]; + + +} \ No newline at end of file diff --git a/libs/route-pages/coral-page/src/coral-page.module.spec.ts b/libs/route-pages/coral-page/src/coral-page.module.spec.ts new file mode 100644 index 000000000..a1563ad61 --- /dev/null +++ b/libs/route-pages/coral-page/src/coral-page.module.spec.ts @@ -0,0 +1,21 @@ + + import { async, TestBed } from '@angular/core/testing'; + import { CoralPageModule } from './coral-page.module'; + + describe('CoralPageModule', () => { + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ CoralPageModule ] + }) + .compileComponents(); + })); + + // TODO: Add real tests here. + // + // NB: This particular test does not do anything useful. + // It does NOT check for correct instantiation of the module. + it('should have a module definition', () => { + expect(CoralPageModule).toBeDefined(); + }); + }); + \ No newline at end of file diff --git a/libs/route-pages/coral-page/src/coral-page.module.ts b/libs/route-pages/coral-page/src/coral-page.module.ts new file mode 100644 index 000000000..37b2f52e9 --- /dev/null +++ b/libs/route-pages/coral-page/src/coral-page.module.ts @@ -0,0 +1,25 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { CoralPageComponent } from "./coral-page.component"; +import { routes } from "./routes"; +import { RouterModule, Routes } from "@angular/router"; +import { CommonDocsModule } from '@valor-software/common-docs'; +import { SwiperModule } from "swiper/angular"; +import { FeedbackModule } from '@valor-software/feedback'; +import { FeaturesCardComponent } from './features-card.component'; + +export { CoralPageComponent } from "./coral-page.component"; + +@NgModule({ + declarations: [CoralPageComponent, FeaturesCardComponent], + imports: [ + CommonModule, + RouterModule.forChild(routes), + CommonDocsModule, + SwiperModule, + FeedbackModule + ] +}) +export class CoralPageModule { + static routes: Routes = routes; +} diff --git a/libs/route-pages/coral-page/src/features-card.component.html b/libs/route-pages/coral-page/src/features-card.component.html new file mode 100644 index 000000000..bc7870767 --- /dev/null +++ b/libs/route-pages/coral-page/src/features-card.component.html @@ -0,0 +1,24 @@ + +
+
+
+ + + +
+
+ +
+

+ {{card.title}}

+
+

+

+ + +
+
+
+
\ No newline at end of file diff --git a/libs/route-pages/coral-page/src/features-card.component.ts b/libs/route-pages/coral-page/src/features-card.component.ts new file mode 100644 index 000000000..d11c08670 --- /dev/null +++ b/libs/route-pages/coral-page/src/features-card.component.ts @@ -0,0 +1,16 @@ +import { Component, Input } from '@angular/core'; + +export interface IFeaturesCard { + title: string; + description: string; + img?: string; +} + +@Component({ + // eslint-disable-next-line @angular-eslint/component-selector + selector: 'features-card', + templateUrl: './features-card.component.html' +}) +export class FeaturesCardComponent { + @Input() featureCard?: IFeaturesCard[]; +} \ No newline at end of file diff --git a/libs/route-pages/coral-page/src/index.ts b/libs/route-pages/coral-page/src/index.ts new file mode 100644 index 000000000..c8afc4667 --- /dev/null +++ b/libs/route-pages/coral-page/src/index.ts @@ -0,0 +1,3 @@ + + export * from './coral-page.module'; + \ No newline at end of file diff --git a/libs/route-pages/coral-page/src/routes.ts b/libs/route-pages/coral-page/src/routes.ts new file mode 100644 index 000000000..451076a99 --- /dev/null +++ b/libs/route-pages/coral-page/src/routes.ts @@ -0,0 +1,4 @@ +import {CoralPageComponent} from "./coral-page.component"; + +export const routes = [{ path: '', component: CoralPageComponent }]; + diff --git a/libs/route-pages/coral-page/src/test-setup.ts b/libs/route-pages/coral-page/src/test-setup.ts new file mode 100644 index 000000000..1100b3e8a --- /dev/null +++ b/libs/route-pages/coral-page/src/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular/setup-jest'; diff --git a/libs/route-pages/coral-page/tsconfig.json b/libs/route-pages/coral-page/tsconfig.json new file mode 100644 index 000000000..53583765d --- /dev/null +++ b/libs/route-pages/coral-page/tsconfig.json @@ -0,0 +1,24 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "angularCompilerOptions": { + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/libs/route-pages/coral-page/tsconfig.lib.json b/libs/route-pages/coral-page/tsconfig.lib.json new file mode 100644 index 000000000..6f92f8401 --- /dev/null +++ b/libs/route-pages/coral-page/tsconfig.lib.json @@ -0,0 +1,23 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "target": "es2015", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [], + "lib": [ + "dom", + "es2018" + ] + }, + "exclude": [ + "src/test-setup.ts", + "**/*.spec.ts", + "**/*.test.ts" + ], + "include": [ + "**/*.ts" + ] +} diff --git a/libs/route-pages/coral-page/tsconfig.lib.prod.json b/libs/route-pages/coral-page/tsconfig.lib.prod.json new file mode 100644 index 000000000..06de549e1 --- /dev/null +++ b/libs/route-pages/coral-page/tsconfig.lib.prod.json @@ -0,0 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial" + } +} diff --git a/libs/route-pages/coral-page/tsconfig.spec.json b/libs/route-pages/coral-page/tsconfig.spec.json new file mode 100644 index 000000000..796ce9aad --- /dev/null +++ b/libs/route-pages/coral-page/tsconfig.spec.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": [ + "**/*.test.ts", + "**/*.spec.ts", + "**/*.d.ts" +] +} diff --git a/tsconfig.base.json b/tsconfig.base.json index e2726e314..42dedff22 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -74,6 +74,9 @@ ], "@valor-software/terminus-page": [ "libs/route-pages/terminus-page/src/index.ts" + ], + "@valor-software/coral-page": [ + "libs/route-pages/coral-page/src/index.ts" ] } },