Coder Social home page Coder Social logo

us-cbp / ngx-cbp-theme Goto Github PK

View Code? Open in Web Editor NEW
12.0 11.0 5.0 4.08 MB

Angular 5/6/7 library based on the CBP Theme

Home Page: https://us-cbp.github.io/ngx-cbp-theme/

License: Creative Commons Zero v1.0 Universal

JavaScript 4.15% TypeScript 65.73% HTML 15.29% SCSS 14.82%
angular-cli cbp-theme material2 cbp scss angular material typescript angular6 angular7

ngx-cbp-theme's Introduction

ngx-cbp-theme

npm version build Status dependencies Status devDependencies Status

Deprecated

This package is deprecated and no long maintained since Angular 7.

Angular native artifacts for consuming CBP Theme for Angular 5/6/7/next applications.


Kitchen Sink


Goals

  • Provides abstraction for CBP Theme so that other Angular CBP applications do not have to repeat this gap-bridging between CBP Theme and Angular Material.
  • Deliver styling from CBP Theme to other CBP Angular applications so that CBP Theme can evolve and styling changes are delivered with simple upgrade in most cases.
  • Provides for progression from Bootstrap to Material specifications as CBP Theme evolves. (This should cause shrinking of this library.)

Target Applications

Library Development Goals and Guidelines

  • Consumption of this library should require minimal setup i.e. most complexity and difficulties must be fought and absorbed in here keeping angular-cli spirit.
  • Must inherit certain (see styles below) styles from US-CBP/cbp-theme
  • Must not mix any other UI libraries than Angular/Material
  • Expose SCSS artifacts.
  • Provide angular native components only when styling overriding is not an option OR consuming a material component requires more effort to comply with CBP Style Guide.
  • Provide angular native component ony when Angular/Material does not have equivalent component.
  • Styles
    • Styles should be prefixed with cbp and mat when overriding.
    • Markups should not use any other namespaces than the ones specified.
    • Must expose individual styles for further customization.

Getting Started - How To Use

Note: For Windows users we recommend git-bash shell. Also check the node engine version.

Use @angular/cli global install version matching the version inside package.json

  • Install angular-cli globally making sure we use same version as we have in @angular/cli inside package.json.

Quick Start

  • For Quick Start up you could just clone my-app and npm install however we recommend you to understand what is happening in here and follow the following steps.

Start From Scratch

  • For new apps follow angular-cli and create your application with styles = SCSS. Minimal e.g.

    ng new my-app --style scss --skip-install
  • Ensure polyfills.ts is correct by following instructions in your src/polyfills.ts to enable all IE11 and web-animations-js polyfills.

  • Ensure that you have exact version matches as per package.json. This is because angular-cli has more relaxed versioning scheme which promotes early adoption which can be problematic with Material/RxJS/angular-flex combination.

  • Install Material, CDK, FlexLayout

    $ npm install @angular/material@~6  @angular/cdk@^6 --save
  • Ensure that it builds and runs correctly i.e. ng start runs fine.

  • Stop any of running processes/scripts against your project and then run:

    $ npm install ngx-cbp-theme --save
  • In your styles.scss add

    @import '~ngx-cbp-theme/styles/ngx-cbp-theme';
  • In your angular.json add to your build options for @angular-devkit/build-angular:browser

    "stylePreprocessorOptions": {
      "includePaths": ["./node_modules"]
    },
    
  • Implement required services:

    ngx-cbp-theme requires implementation of some services provided by the consuming application since those services are beyond the scope of theme.

    Ideally these will be provided by other projects hosted in the enterprise. Please check common framework team or other Angular teams withing CBP.

    However for the sake of this exercise we will provide implementation of some of these services (CBPUserService, CBPApplicationsService) before we start our application.

    Since this is just a guide we will create my-user.service (to fake User) and my-applications.service (to fake basic set of applications for header menu).

    Lets go ahead and create those using angular-cli.

    ng g s my-user
    ng g s my-applications

    Modify MyUserService to implement CBPUserService from ngx-cbp-theme. Make sure we implement all the abstract methods.

    Similarly MyApplicationsService must implement CBPApplicationsService and its methods.

    Both class declaration signature looks as below (implementation omitted for brevity).

    // inside my-user-service.ts
    import {CBPUserService, CBPUser} from 'ngx-cbp-theme';
    @Injectable()
    export class MyUserService extends CBPUserService { 
    ...
    }
    // inside my-applications-service.ts
    
    import {CBPApplicationsService} from 'ngx-cbp-theme';
    @Injectable()
    export class MyApplicationsService extends CBPApplicationsService { 
    ...
  • Import following minimal modules in your AppModule (app.module.ts):

    import {
        CBPRootModule, 
        CBPHeaderModule, 
        CBPAppHeaderModule,     // this is optional 
        CBP_USER_SERVICE,           // must be provided to fetch CBP user logged in to display user name on CBP Header
        CBP_APPLICATIONS_SERVICE    // must be provided to get CBP applications (recent) for Applications menu on the CBP Header
    } from 'ngx-cbp-theme' ;

    Import in @NgModule

      imports: [
          BrowserModule,
          CBPRootModule,
          CBPAppHeaderModule
        ],

    Provide implementation for these services like USER_SERVICE and APPLICATIONS_SERVICE by implementing respective interfaces and declare providers in AppModule's @NgModule as follows:-

      providers: [
        { provide: CBP_USER_SERVICE,          useClass: MyUserService },
        { provide: CBP_APPLICATIONS_SERVICE,  useClass: MyApplicationsService }
      ]

Full code is available here in another github repo my-app. Checkout the progression by loking at the commit history as these steps.

  • Markup Requirement

Your app.component.html should be changed to following minimal structure:-

<cbp-root layout="'fluid'">
  <cbp-header></cbp-header>
  <cbp-app-header>
    <cbp-app-title>
      <h1 class="app-title"> Product<small> create</small></h1>
    </cbp-app-title>
  </cbp-app-header>
  <div class="app-content">
    <p>My markup here...</p>
  </div>
</cbp-root>

Customizing

Customizable cbp-header:- e.g. shows cbpAppsMenuExclude is excluded, cbp-feedback-link has custom action, cbp-user-menu has additional menu item Preference.

     <cbp-header [cbpAppsMenuExclude]="true">
         <cbp-feedback-link (click)="myFeedbackAction()"></cbp-feedback-link>
         <cbp-user-menu>
             <div class="mat-menu-item" (click)="myPreferences()" cbp-user-menu-item>Preferences</div>
         </cbp-user-menu>
     </cbp-header>

Contributing

We welcome contributions, please see our Contribution Policy

To get started developing, see contributing readme here.

License

Please refer to CBP Open Source License

ngx-cbp-theme's People

Contributors

dave-r avatar yogeshgadge avatar

Stargazers

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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ngx-cbp-theme's Issues

bootstrap vs material

Has any thought been given to using bootstrap as the base vs material? Essentially, instead of using material2, use ngx-bootstrap? While I think the material stuff is probably nicer, it seems like cbp-theme is a bootstrap theme with changes for material. By using Material as the base, it's hard to reuse much of the cbp-theme at all. You have to redo it to make it work for material. I wonder if we used bootsrap as the base, if we'd be able to use more of the base cbp-theme.

Once cbp-theme moved to a material theme, we could then make the same change, and hopefully again be able to reuse most of the cbp-theme. Thoughts?

No longer works with Angular CLI

I'm getting a ton of "Cannot find module '@angular/core'" messages. Is it possible that this is caused by the library being built on a release candidate version? Tried cloning my-app and got similar errors.

material tabindex imported incorrectly causing build failures downstream

Incorrect import @angular/material/core/typings/common-behaviors/tabindex' causing issues on downstream applications.

Module not found: Error: Can't resolve '@angular/material/core/typings/common-behaviors/tabindex' in 'C:\Users\yyy\projs\ief\ief-mobile\node_modules\ngx-cbp-theme'chunk {
inlineresolve '@angular/material/core/typings/common-behaviors/tabindex' in 'C:\Users\yy\projs\ief\ief-mobile\node_modules\ngx-cbp-theme'
} inline.bundle.js, inline.bundle.js.map  Parsed request is a module (inline) 5.83 kB 
[entry] [rendered]  using description file: C:\Users\yy\projs\ief\ief-mobile\node_modules\ngx-cbp-theme\package.json (relative path: .)

Use <header> for cbp-header

Can cbp-header be changed from an md-toolbar to a simple header tag? Seems like it would be more semantic as well as accessible to use the standard html5 tag. Is md-toolbar providing some sort of functionality?

Simplify header

Should some of the component features of the header be abstracted out so that users can include only the ones necessary? For instance, If I don't want the Feedback link, then I simply don't include it. Some like the following?

<cbp-header>
    <cbp-apps-menu></cbp-apps-menu>
    <cbp-feedback-link></cbp-feedback-link>
    <cbp-user-menu></cbp-user-menu>
</cbp-header>

The header itself would only provide the branding and the toggle button.

Is accordian necessary?

Do we need an accordion component, or would it be better to rely on the HTML5 details/summary tags? Polyfills exist for IE support. Seems like simplicity and accessibility, using the HTML5 tags would be preferable.

Need e2e tests for each component

e2e tests are barely testing much. We need the following at the minimum:-

  • e2e for Applications Menu
  • e2e test for cbp-header - high level - responsiveness.

Toggle Switches component as per cbp-theme

Material Toggle Switches look way off when look at a form. We need a new simple toggle switch where we can customize the label.. The ON and OFF contents and that provides easier model changes while providing the same styling.

Recommend Projects

  • React photo React

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

  • Vue.js photo Vue.js

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

  • Typescript photo Typescript

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

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

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

  • web

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

  • server

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

  • Machine learning

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

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

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

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.