Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

wylib

Package Overview
Dependencies
Maintainers
1
Versions
33
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

wylib

WyattERP Application Builder Library

  • 1.0.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
39
increased by550%
Maintainers
1
Weekly downloads
 
Created
Source

Wylib: WyattERP component library

Introduction:

This library was originally created in TCL/TK, starting in about 1998. The idea was to create a mega-widget set that allowed one to quickly build ERP applications to interact with a PostgreSQL backend.

The primary problem with Wylib was, it was not operable over the Internet (at least without a remote desktop product of some kind). Early incarnations of HTML were not particularly friendly to the GUI concepts stressed by Wylib so, short of JAVA or some kind of binary plugin, there didn't seem any good way to replicate it until the advent of HTML 5 and reactive frameworks.

The idea is counter to the notion of "screens" so prevalent in traditional HTML programming. In such systems, the user must navigate through a maze of pre-defined, pre-conceived screens in order to find the correct spot to interact with the model in the way he wants. In other words, if the programmer didn't anticipate what you want to do, you're not going to be able to do it. And you are at the mercy of the forethought of the programmer as to how you are going to get to the right spot in the program to perform the desired function.

Wylib uses the notion of an exposed model. The idea is to give the user more visibility into the way the database stores the information and its relational links. You open a viewer into the database view you will be working in, and then use a series of add, update, delete commands to make the changes you want. The application programmer crafts each module in such a way to make it as friendly as possible to get done what you need to do.

This typically makes it a little slower to learn how to use a Wylib application. The learning curve is a bit slower. However, once you get the hang of the basic data access components, you can easily surpass the productivity you might find in a traditional screens-based GUI.

Wylib strives to allow you access to multiple, simultaneous screens or views. You should be able to open any number of views at once, and interact with them as you like. You query the data according to your own needs so you get just the view you want for your particular need.

Component Frontend Model

Wylib supports a Model-View-Control design. However, the divisions between these layers are not always perfectly obvious.

The original Wylib was mostly responsible for View and Control functions. The The PostgreSQL backend contained nearly all the model and some additional Control functions.

The javascript version of Wylib enjoys a greater degree of separation, responsible solely for View functionality. The backend middleware is handled by Wyseman, which also manages the PostgreSQL schema. So between the two, they handle all Control and Model functionality.

Having said that, the Wylib GUI itself has its own "model," in the sense of storing the information it needs to manage how it presents the View. This model consists of four aspects: State, Data, Preference, and Layout.

State: State data has to do with the way components are configured on the screen, and how they will interact with the data they display. Examples include: the size and relative locations of windows and subwindows on the screen, settings of which data fields will be visible, the order in which fields display, how data will be sorted, a history of queries, and so forth.

Data: This is what is stored in the Model, and is completely independent of the View, or method in which the data is viewed or accessed. Examples, include: customer names and addresses, invoice totals and inventory items. The GUI may save information about its state, but it should never retain information about the Model data. That must come fresh from the backend every time it is accessed.

Layout: This is currently hard-coded into Wylib (i.e. not reactive).
The containers are a function of the way the Vue components work.
Much of the layout can be changed by judicious use of the CSS settings, but they would have to be pulled out of the Vue component files and joined into a separate, consolidated location so the GUI could run with a choice of layouts.

Right now, the layout is optimized for a desktop environment.  This
is done in order to create the most efficient work environment
possible.  Mobile layouts are certainly desirable, but whether that
is done by an alternate application of CSS rules to this existing
set of components, or an entirely separate mobile interface, is yet 
to be seen.

Preferences: These are things the user likes to be a certain way--generally across the application or even the suite. These fall into two basic categories: CSS and Language.

It is notable that CSS is referenced in both preferences and Layout.
It is a bit of a judgement call whether a particular style is one
or the other.  But typically, things like colors and border shapes
are a matter of preference.  Something like the order of buttons in 
a container is more a matter of layout.

Language is not a CSS issue, but will specify how the components
explain themselves to the user.

State and Preferences should be entirely reactive, so a change at the root level will propagate through the entire DOM hierarchy, on the fly. That should happen fairly automatically for CSS based preferences, but components may be responsible for refetching metadata if/when the language changes.

Components need to get their own data direct from the database, or from a parent that may be managing it.

Preferences are managed by a global object each component can tap into as it requires, binding styles to any applicable properties. Typically, preferences will be modified through a GUI provided by the preferences module itself. But it is conceivable that some components might have preferences that apply only to themselves or their progeny.

State is manged by a reactive prop passed down from parent to child in the component hierarchy. If a component sees insufficient data in the state object to describe its state, it should choose reasonable defaults and apply them back into the state object. This goes a bit against Vue's religion, but then rules are made to be broken. In short, state can be changed from with a widget, or from on high. This allows a higher-up to save, and/or restore state at will for all or a part of the application.

To the degree possible, changes should be able to occur to State, Preferences, or Data, without disrupting any of the others' condition. In other words, a component should not have to clear its data, simply because its State or its Preferences changes.

Keywords

FAQs

Package last updated on 06 Dec 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc