patternfly / virtual-assistant

This repo contains the code for the PatternFly virtual assistant extension
MIT License
0 stars 19 forks source link
hacktoberfest

PatternFly Virtual Assistant

This repo contains React Virtual assistant implementation.


Install

To play with virtual-assistant in your project, run

npm install @patternfly/virtual-assistant --save

Make sure to add the CSS imports as the last import in your index file. The extension is intended to override certain PatternFly component styles. However, if it's not the last import, you may not see these.

import '@patternfly/virtual-assistant/dist/css/main.css';

Contribution guide

To add a new assistant sub-component:

  1. create a folder in src/ matching its name (for example src/MyComponent)
  2. to the new folder add a new .tsx file named after the component (for example src/MyComponent/MyComponent.tsx)
  3. to the same folder include an index.ts which will export the component as a default and then all necessary interfaces
  4. if this file structure is not met, your component won't be exposed correctly

Example component:

import * as React from 'react';
import { Text } from '@patternfly/react-core';

// do not forget to export your component's interface
// always place the component's interface above the component itself in the code
export interface MyComponentProps {
  text: String;

// do not use the named export of your component, just a default one
const MyComponent: React.FunctionComponent<MyComponentProps> = () => {

  return (
    <Text>
      This is my new component
    </Text>
  );
};

export default MyComponent;

Index file example:

export { default } from './MyComponent';
export * from './MyComponent';

Component directory structure example:

src
|- MyComponent
   |- index.ts
   |- MyComponent.tsx

Component's API rules:

Component API definition example:

// when possible, extend available PatternFly types
export interface MyComponentProps extends ButtonProps {
    customLabel: Boolean
};

export const MyComponent: React.FunctionComponent<MyComponentProps> = ({ customLabel, ...props }) => ( ... );

Markdown file example:

---
section: extensions
subsection: Virtual assistant
id: MyComponent
propComponents: ['MyComponent']
---

import MyComponent from "@patternfly/virtual-assistant/dist/dynamic/MyComponent";

## Component usage

MyComponent has been created to demo contributing to this repository.

### MyComponent component example label

```js file="./MyComponentExample.tsx"```

Component usage file example: (MyComponentExample.tsx)

import React from 'react';

const MyComponentExample: React.FunctionComponent = () => (
  <MyComponent customLabel="My label">
);

export default BatteryLowExample;

Sub-components:

When adding a component for which it is advantageous to divide it into several sub-components make sure:

The aim is to enable the user of our "complex" component to use either complete or take advantage of its sub-components and manage their composition independently.

Testing:

When adding/making changes to a component, always make sure your code is tested:

Styling:


Building for production

Development

Testing and Linting

A11y testing

Generating screenshots

From root folder:

npm install
npm run build
cd packages/module
npm run docs:build
npm run docs:serve

Open a new terminal tab while serving; make sure you are in package/module folder:

npm run docs:screenshots

These files will not be picked up by git; you'll have to look for them and add them manually.