Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement declarative pattern for "fab-" components #3

Open
bengry opened this issue Aug 12, 2018 · 0 comments
Open

Implement declarative pattern for "fab-" components #3

bengry opened this issue Aug 12, 2018 · 0 comments
Labels

Comments

@bengry
Copy link
Contributor

bengry commented Aug 12, 2018

From @benfeely on July 12, 2018 18:20

The initial effort to create wrappers for Fabric components is targeted at closely following the React Fabric API. This means implementing a largely imperative pattern, particularly for scenarios such as defining "items" within a "CommandBar". Following the react pattern, these items are defined by passing in an object as a property. Although this is a valid pattern, the Angular community tends to lean more towards a declarative model...

Imperative

This is the initial implementation which follows the React Fabric API for the component closely.
Component

commandBarItems: ICommandBarItemOptions[] = [
  {
    key: 'run',
    text: 'Run',
    iconProps: {
      iconName: 'CaretRight',
    },
    disabled: true,
  },
  {
    key: 'custom-element',
    onClick: () => {
      console.log('custom element clicked');
    },
    render: this._customCbItemRef/* this.customCbItemTemplate */,
  },
];

Template

<fab-command-bar #commandBar [items]="commandBarItems" [farItems]="commandBarFarItems">
</fab-command-bar>

Declarative

This is the proposed implementation to add to the extend the API and allow for declarative syntax (preferred by many Angular teams).

<fab-command-bar #commandBar [items]="commandBarItems" [farItems]="commandBarFarItems">
  <items>
    <fab-action-button [iconProps]="{ iconName: 'AddFriend' }" text="Compound" [secondaryText]="'Loren ipsum dolor sit amet'" (onClick)="onActionButtonClicked($event)"></fab-action-button>

    <fab-compound-button [iconProps]="{ iconName: 'AddFriend' }" [secondaryText]="'Loren ipsum dolor sit amet'" (onClick)="onCompoundButtonClicked($event)" text="Compound"></fab-compound-button>
  <items>
  <far-items>
    ...
  <far-items>
</fab-command-bar>

Note: This proposal is based on Commercial Store's implementation of BSX-List (which is patterned after the Angular Material list and other components). Please see BSX-List source for implementation examples.

Copied from original issue: benfeely/angular-react#11

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant