fenestra

Uma API de janelas para react/redux

Fenestra

Fenestra é uma biblioteca para implementação de um Desktop baseado em janelas. Construído sobre React/Redux, você poderá fornecer seus próprios redutores para integrar a Store do Desktop. A interface do usuário se baseia nos ícones do Font Awesome 4.7. A Biblioteca também produz um design responsivo, bastante adaptado para dispositivos móveis.

Live Demo

Captura de tela de 2019-08-04 11-20-41

Como utilizar esta biblioteca?

Instale a partir do npm:

$ npm i fenestra

Importe a API para o seu projeto

import Fenestra from 'fenestra';

ou

const Fenestra = require('fenestra');

Adicione a folha de estilo do Fenestra

import 'fenestra/css/base.css';
import 'fenestra/css/theme.css'; //Opcional

Adicione uma carga inicial de dados

const data = {
  windows: [
    {
      props:{
        title: "Janela 1"
      },
      template: MinhaClasseReact1,
      templateProps: { mensagem: "Um novo começo!" }
    }
  ],
  icons: [
    {
      icon: 'fa fa-check',
      title: 'Abrir janela',
      window: {
        props:{
          title: "Janela 2"
        },
        template: MinhaClasseReact2,
        templateProps: { ...propriedades }
      }
   ]
 }

### Instancie sua aplicação com os dados iniciais

 ReactDOM.render(<Fenestra data={data} />, document.getElementById("root"));

Pronto, você terá um aplicação como a mostrada a seguir:

import React from 'react';
import ReactDOM from 'react-dom';
import Fenestra from 'fenestra';

import 'font-awesome/css/font-awesome.css';
import 'fenestra/build/css/base.css';
import 'fenestra/build/css/theme.css'; //Opcional

const MinhaClasseReact1 = (props) => <h1>{props.mensagem}</h1>;
const MinhaClasseReact2 = (props) => <h1>Apenas uma janela</h1>;

const data = {
    windows: [
        {
            props: {
                title: "Janela 1"
            },
            template: MinhaClasseReact1,
            templateProps: {
              mensagem: "Um novo começo!"
            }
        }
    ],
    icons: [
        {
            icon: 'fa fa-check',
            title: 'Abrir janela',
            window: {
                props: {
                    title: "Janela 2"
                },
                template: MinhaClasseReact2,
            }
        }
    ]
};

ReactDOM.render(<Fenestra data={data} />, document.getElementById("root"));

Os templates especificados na carga de dados receberão as seguintes propriedades:

O que é um template Fenestra?

Template é apenas um componente React injetado em uma Janela. Formulários, páginas, listas, tabelas ou qualquer tipo de conteúdo renderizável pelo React pode ser injetado como Template. Após inserido na janela, o componente receberá as propriedades definidas em templateProps, além das ações definidas para controle da janela. Também são inseridos métodos para controle da sessão (open e setData).

Posso utilizar um template conectado ao redux?

Boas notícias. Sim! Os dados da API Fenestra estão disponíveis no namespace fenestra e podem ser acessado através da função connect do react-redux:

...
class MyComponent extends React.Component {
  ...
}

const mapStateToProps = (state) => {
  fenestra: state.fenestra
}

export default connect(mapStateToProps)(MyComponent);

Você ainda pode usar sua própria Store, observando a utilização do redutor do Fenestra e o componente Desktop:

...
import myReducer from './reducers';
import { Actions as fenestraActions, Components, Reducer as fenestraReducer } from 'fenestra';
import {createStore, combineReducers} from 'redux';
import {Provider} from 'react-redux';
...
const store = createStore(combineReducers({myReducer, fenestraReducer}));
store.dispatch(fenestraActions.setData({...}));
...
ReactDOM.render(
  <Provider store={store}>
    <Components.Desktop />
  </Provider>, document.getElementById('root'));

Posso mudar a cor do tema ou colocar uma imagem de background no desktop?

O fenestra utiliza duas folhas de estilos:

O quê mais posso configurar no Desktop?

Você poderá passar na inicialização do Desktop os seguintes atributos da variável data:

Como faço para modificar os textos do diálogo e botões para minha língua?

Você poderá passar as suas próprias traduções para o fenestra através do objeto msgs, dentro da propriedade data repassada ao fenestra. Há uma tradução em Português (Brasil) que pode ser utilizada da seguinte forma:

...
import ptbr from 'fenestra/build/js/messages/pt-br';
...
const data = {
  ...
  options: {
    ...
    msgs: ptbr
  }
};

ReactDOM.render(<Fenestra data={data} />, document.getElementById("root"));