Giter VIP home page Giter VIP logo

template-spreadsheet-rxjs's Introduction

Template Spreadsheet RxJS

Um template básico que pode ser utilizado para a atividade em laboratório que consiste em construir um spreadsheet remoto.

Estado Atual

O arquivo spreadsheet.html provê atualmente um spreadsheet com dimensões 26x26 que é construído dinamicamente ao carregar a página. Cada célula possui 2 elementos de input HTML do tipo texto, ambos dividindo a mesma célula. Sem qualquer interação com a célula, o valor renderizado corresponde ao valor de um dos inputs que modela o valor computado para a célula. Para este input o chamaremos de valInput (input de valor). O segundo input possuí o atributo hidden (escondido) e apenas torna-se visível (hidden == false) no momento em que há interação com a célula (isto é, quando há um click numa célula); neste momento o valInput torna-se hidden. Para esse segundo input chamaremos de expInput (input de expressão) que corresponde a expressão que deverá ser utilizada para computar o valor a ser mostrado no valInput. Todo esse mecanismo está disponível no arquivo js/rxjs.js nas funções buildEnterExitStreams e buildBussinessLogicStream que são executadas quando o template é construído (arquivo js/main.js). Como ponto de partida, você pode utilizar a função buildBussinessLogicStream que tem acesso tanto a valInput como a expInput e é chamada durante a construção da tabela (spreadsheet).

Importante: Todos os valInput possuem atributo id de acordo com sua posição na tabela. Isto serve por exemplo para facilitar a construção de dependências (criar referências) entre células.

RxJS

RxJS já está disponível no projeto e pode ser acessado da seguinte forma (por exemplo):

const { from, fromEvent, of } = rxjs; //funções factory
const { filter, map, tap, startWith, flatMap } = rxjs.operators; //operadores de pipeline

CellParser

Para facilitar e fazer com que vocês possam se concentrar na lógica de negócios, o template já disponibiliza um objeto global (CellParser) que poderá ser utilizado para fazer o parse da expressão fornecida por expInput. Através do uso do método parse no qual recebe uma string, um objeto é retornado com o formato geral de acordo com o seguinte esquema:

{
  value: string | number | object,
  isEmptyString: () => boolean,
  isNumber: () => boolean,
  isReference: () => boolean,
  isOperation: () => boolean,
  isError: () => boolean
}

Cada método desse objeto construído pode ser usado para entender o tipo de expressão passada (string vindo do expInput) e assim estruturar a lógica de negócios. O campo value pode conter até três tipos de dados dependendo da expressão passada como argumento:

  • string: Se for um refência a outra célula ou se a expressão foi mal formatada (nesse caso o value terá uma string ERROR)
  • number: Se for um número
  • object: Se foi uma operação do tipo ADD(parâmetros), SUB(parâmetros), MUL(parâmetros) ou DIV(parâmetros)

O objeto contido em value (para os casos mencionados acima) seguem o seguinte esquema:

{
  opeartion: string,
  params: [object]
}

O campo operation contém o tipo de operação solicitada (ADD, SUB, MUL ou DIV). Já o campo params contém um array de objetos seguindo o mesma esquema quando analisadas pelo método CellParser.parse; isto é, cada parâmetro é analisado de forma recursiva chamando parse.

Exemplos de Formatos Válidos

  • "1", "1.23", "", "A1", "ADD(1, A1)", "ERROR"

Exemplos de Formatos Inválidos

  • "a", "add(1,A1)", "A29", "ADD()"

Todas essas entradas resultariam em value com valor "ERROR" e método isError() retornando true.

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.