diff --git a/SchrodingersGat/inventree-brother-plugin.html b/SchrodingersGat/inventree-brother-plugin.html index 0f0a440a..2011143e 100644 --- a/SchrodingersGat/inventree-brother-plugin.html +++ b/SchrodingersGat/inventree-brother-plugin.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"SchrodingersGat"},"dateModified":"2023-08-28T02:32:21+00:00","datePublished":"2023-08-28T02:32:21+00:00","description":"Brother label printer plugin for InvenTree","headline":"Inventree Brother Plugin","mainEntityOfPage":{"@type":"WebPage","@id":"/SchrodingersGat/inventree-brother-plugin"},"url":"/SchrodingersGat/inventree-brother-plugin"} diff --git a/SchrodingersGat/inventree-wireviz.html b/SchrodingersGat/inventree-wireviz.html index 1c7435b7..8d2e0ad5 100644 --- a/SchrodingersGat/inventree-wireviz.html +++ b/SchrodingersGat/inventree-wireviz.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"SchrodingersGat"},"dateModified":"2023-08-28T02:32:21+00:00","datePublished":"2023-08-28T02:32:21+00:00","description":"Wireviz Extension for InvenTree","headline":"Inventree Wireviz","mainEntityOfPage":{"@type":"WebPage","@id":"/SchrodingersGat/inventree-wireviz"},"url":"/SchrodingersGat/inventree-wireviz"} diff --git a/SergeoLacruz.html b/SergeoLacruz.html index dd430f72..04d6e085 100644 --- a/SergeoLacruz.html +++ b/SergeoLacruz.html @@ -30,11 +30,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2023-08-28T02:32:21+00:00","datePublished":"2023-08-28T02:32:21+00:00","description":"Hardware engineer in Germany and vintage fan.","headline":"Sergeolacruz","mainEntityOfPage":{"@type":"WebPage","@id":"/SergeoLacruz"},"url":"/SergeoLacruz"} diff --git a/SergeoLacruz/inventree-supplier-panel.html b/SergeoLacruz/inventree-supplier-panel.html index c00722ef..c5e5683f 100644 --- a/SergeoLacruz/inventree-supplier-panel.html +++ b/SergeoLacruz/inventree-supplier-panel.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"SergeoLacruz"},"dateModified":"2023-08-28T02:32:21+00:00","datePublished":"2023-08-28T02:32:21+00:00","description":"Create Mouser shopping cart from purchase order","headline":"Inventree Supplier Panel","mainEntityOfPage":{"@type":"WebPage","@id":"/SergeoLacruz/inventree-supplier-panel"},"url":"/SergeoLacruz/inventree-supplier-panel"} diff --git a/SergeoLacruz/inventree-zebra-plugin.html b/SergeoLacruz/inventree-zebra-plugin.html index 0493d8d2..43e24cab 100644 --- a/SergeoLacruz/inventree-zebra-plugin.html +++ b/SergeoLacruz/inventree-zebra-plugin.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"SergeoLacruz"},"dateModified":"2023-08-28T02:32:21+00:00","datePublished":"2023-08-28T02:32:21+00:00","description":"Zebra Label Printer Plugin for Inventree","headline":"Inventree Zebra Plugin","mainEntityOfPage":{"@type":"WebPage","@id":"/SergeoLacruz/inventree-zebra-plugin"},"url":"/SergeoLacruz/inventree-zebra-plugin"} diff --git a/blog.html b/blog.html index f0b03d55..6b79415a 100644 --- a/blog.html +++ b/blog.html @@ -67,6 +67,16 @@ +
+

+ User Interface Refactor +

+ The InvenTree development team is thrilled to share some exciting news about the ongoing efforts to significantly overhaul our user interface. To provide... + 28 Aug 2023 | + +Oliver +
+

0.12.0 Stable Release diff --git a/blog/2023/08/28/react.html b/blog/2023/08/28/react.html new file mode 100644 index 00000000..e8d90611 --- /dev/null +++ b/blog/2023/08/28/react.html @@ -0,0 +1,278 @@ + + + + + + + + + + + + + + + + + +InvenTree - User Interface Refactor + + + +User Interface Refactor | InvenTree + + + + + + + + + + + + + + + + + + + + +
+
+
+ + logo + InvenTree + + +
+ + + + +
+
+ + + go back + Back + + +
+ +
+

User Interface Refactor

+

+ 28 Aug 2023 + + +Oliver +

+

The InvenTree development team is thrilled to share some exciting news about the ongoing efforts to significantly overhaul our user interface. To provide a major facelift to InvenTree, we are migrating our entire user interface to the React framework.

+ +

A Brief History

+ +

The InvenTree software project started as a pure server-side app, with the pages rendered on the server using html template files, via the Django template engine. As the amount of data handled by InvenTree increased, this approach very quickly became untenable, with page loading times slowing noticeably.

+ +

A significant milestone came with the introduction of the REST API (we use the Django Rest Framework). Now, the user interface could be separated from the data, which allowed some great improvements to the user experience. Now, content could be loaded dynamically via the API, and rendered on the client side using javascript.

+ +

While various improvements have been made, and new features implemented, this has been how the InvenTree user interface has functioned for a number of years. Functionality (and code) has grown somewhat organically, and without much in the way of an overarching design strategy.

+ +

A lot of the user interface is still dynamically rendered on the server, with the “gaps” filled in by the client (via API calls). This approach has some drawbacks:

+ +
    +
  • +Inconsistent: There is no real guiding strategy as to which parts are rendered by the server or the client
  • +
  • +Inefficient: Rendering UI elements on the server via templates is very slow, and we cannot make use of modern design patterns
  • +
  • +Inscrutable: With a mix of server-side html and client-side javascript, it is very difficult to work out how a certain function works, and how to implement changes.
  • +
+ +

So, it’s time for a clean break! Moving to a modern UI framework is a daunting task, but with some very clear benefits and provides a path into the future.

+ +

Design Goals

+ +

The primary design goal for our refactor is to render the entire user interface dynamically, using React. To achieve this, we have to implement the following:

+ +
    +
  • Update the API
  • +
  • Reimplement the UI
  • +
  • Test everything
  • +
+ +

Update API

+ +

As it stands, the API currently provides the majority of required data to various interfaces, including the web interface, mobile app, and any third party integrations. However there are some data which are not currently accessible via the API, and rendered on-demand by the server. So, we need to ensure that all displayed data are available via API endpoints.

+ +

Reimplement UI

+ +

Every single page / view needs to be rewritten in React. While this is a lot of work, it will be significantly less work than it took to originally write it all in javascript. We can leverage the reusable components and design patterns provided by React to significantly reduce code duplication. Additionally, there are already a lot of “common” interface patterns (such as data tabulation) used in InvenTree which should cut down the required work.

+ +

Test Everything

+ +

A big advantage of moving to a modern UI framework is the ability to enhance our unit testing. Currently, while the server code has good code coverage, the front-end code has very little. Our move to React will include a focus on test driven development, to ensure that our front-end is as bug free as is reasonably possible.

+ +

Advantages

+ +

There are a number of significant advantages that this refactor will afford:

+ +
    +
  • +User Experience: A major driver here is a better user experience. The interface will be more “user friendly”, pages will load more smoothly, and the interface flow (should) feel more intuitive
  • +
  • +Efficiency Gains: As the django server no longer has to render front-end code, it should me much more responsive for API requests
  • +
  • +Improved API: As a necessary requirement, our API will be enhanced. Data availability and response times will be improved.
  • +
  • +Reduce Served Load: By only loading data when necessary, we will drastically reduce the load on the server
  • +
  • +Code Separation: Good separation of code between the server (API) and front-end (UI) will result in cleaner code
  • +
  • +Better for Developers: By moving to a well-known modern framework, we will make it much easier for other developers to contribute to our codebase.
  • +
  • +Future Development: We will have a clear path forward for development of modern, responsive interface features which are not possible with our current toolchain.
  • +
  • +Easier Integrations: Developers can implement responsive integrations with external services or plugins
  • +
+ +

Release Timeline

+ +

Currently, the “master” branch of InvenTree ships with the “legacy” interface, and the new interface (which we have codenamed “platform”). We will be shipping both interfaces side-by-side while we work on the development.

+ +

When the new interface is ready to be released, we will have a clean break, with the old interface removed entirely.

+ +

Our aim is to have the entire user interface rewritten by the end of the year. Ideally, with developer assistance we could have it done sooner!

+ +

You can track the progress of these tasks here - https://github.com/inventree/InvenTree/issues/5212

+ +

Distributing the Interface

+ +

The intent for distributing the UI is to bundle a set of compiled javascript files with the installer. This means that the install / upgrade process is seamless for users:

+ +
    +
  • End users will not need to install node / npm / yarn / etc on their system
  • +
  • UI files are compiled and minified, to reduce download size
  • +
+ +

Developers will need to install the required development packages to build the user interface on their machine. This is managed by our requirements files.

+ +

Interface Preview

+ +

The new interface is currently shipping in the “master” branch of InvenTree, and can be accessed at the /platform/ URL. This is very much a work in progress, but is useful for users or developers who wish to see the progress of the overhaul, or (even better) help us develop it.

+ +

You can see the latest version on the demo site, at https://demo.inventree.org/platform/

+ +

Development Assistance

+ +

One major goal of the refactor is to attract more developers by using a well-established modern framework. If you would like to contribute to the new interface, please raise a PR over on our GitHub page.

+ + +
+
+ +
+
+ +
+ + + \ No newline at end of file diff --git a/blog/feed.atom b/blog/feed.atom index 846d6615..1316eb97 100644 --- a/blog/feed.atom +++ b/blog/feed.atom @@ -1 +1 @@ -Jekyll2023-08-28T00:51:04+00:00/blog/feed.atomInvenTreeInvenTree is an open-source inventory management system which provides intuitive parts management and stock control. It is at the center of an ecosystem of addins for EDA tools, API wrapper, deeply integrated plugins and 3rd party tools.0.12.0 Stable Release2023-06-26T00:00:00+00:002023-06-26T00:00:00+00:00/blog/2023/06/26/0.12.0SchrodingersGat0.11.0 Stable Release2023-04-17T00:00:00+00:002023-04-17T00:00:00+00:00/blog/2023/04/17/0.11.0SchrodingersGat0.10.1 Bugfix Release2023-02-25T00:00:00+00:002023-02-25T00:00:00+00:00/blog/2023/02/25/0.10.1SchrodingersGat0.10.0 Stable Release2023-02-06T00:00:00+00:002023-02-06T00:00:00+00:00/blog/2023/02/06/0.10.0SchrodingersGatStarting the Plugin List2023-01-30T00:00:00+00:002023-01-30T00:00:00+00:00/blog/2023/01/30/plugin-listmatmair2022 in Review2023-01-02T00:00:00+00:002023-01-02T00:00:00+00:00/blog/2023/01/02/upcomingSchrodingersGat0.9.0 Stable Release2022-12-12T00:00:00+00:002022-12-12T00:00:00+00:00/blog/2022/12/12/0.9.0SchrodingersGatTranslating InvenTree2021-11-22T00:00:00+00:002021-11-22T00:00:00+00:00/blog/2021/11/22/translationSchrodingersGatStarting with templates2021-10-25T00:00:00+00:002021-10-25T00:00:00+00:00/blog/2021/10/25/startingmatmair \ No newline at end of file +Jekyll2023-08-28T02:32:21+00:00/blog/feed.atomInvenTreeInvenTree is an open-source inventory management system which provides intuitive parts management and stock control. It is at the center of an ecosystem of addins for EDA tools, API wrapper, deeply integrated plugins and 3rd party tools.User Interface Refactor2023-08-28T00:00:00+00:002023-08-28T00:00:00+00:00/blog/2023/08/28/reactSchrodingersGat0.12.0 Stable Release2023-06-26T00:00:00+00:002023-06-26T00:00:00+00:00/blog/2023/06/26/0.12.0SchrodingersGat0.11.0 Stable Release2023-04-17T00:00:00+00:002023-04-17T00:00:00+00:00/blog/2023/04/17/0.11.0SchrodingersGat0.10.1 Bugfix Release2023-02-25T00:00:00+00:002023-02-25T00:00:00+00:00/blog/2023/02/25/0.10.1SchrodingersGat0.10.0 Stable Release2023-02-06T00:00:00+00:002023-02-06T00:00:00+00:00/blog/2023/02/06/0.10.0SchrodingersGatStarting the Plugin List2023-01-30T00:00:00+00:002023-01-30T00:00:00+00:00/blog/2023/01/30/plugin-listmatmair2022 in Review2023-01-02T00:00:00+00:002023-01-02T00:00:00+00:00/blog/2023/01/02/upcomingSchrodingersGat0.9.0 Stable Release2022-12-12T00:00:00+00:002022-12-12T00:00:00+00:00/blog/2022/12/12/0.9.0SchrodingersGatTranslating InvenTree2021-11-22T00:00:00+00:002021-11-22T00:00:00+00:00/blog/2021/11/22/translationSchrodingersGatStarting with templates2021-10-25T00:00:00+00:002021-10-25T00:00:00+00:00/blog/2021/10/25/startingmatmair \ No newline at end of file diff --git a/matmair.html b/matmair.html index ab08c577..3cfa777c 100644 --- a/matmair.html +++ b/matmair.html @@ -30,11 +30,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2023-08-28T02:32:21+00:00","datePublished":"2023-08-28T02:32:21+00:00","description":"I try to build an ecosystem of reusable plugins and integrations for InvenTree. Code once and KISS!","headline":"Matmair","mainEntityOfPage":{"@type":"WebPage","@id":"/matmair"},"url":"/matmair"} diff --git a/matmair/inventree-apprise.html b/matmair/inventree-apprise.html index 30a68319..f58ed870 100644 --- a/matmair/inventree-apprise.html +++ b/matmair/inventree-apprise.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"matmair"},"dateModified":"2023-08-28T02:32:21+00:00","datePublished":"2023-08-28T02:32:21+00:00","description":"Send notifications from InvenTree via Apprise","headline":"Inventree Apprise","mainEntityOfPage":{"@type":"WebPage","@id":"/matmair/inventree-apprise"},"url":"/matmair/inventree-apprise"} diff --git a/matmair/inventree-rapidoc.html b/matmair/inventree-rapidoc.html index 6946bfc5..1bbc1443 100644 --- a/matmair/inventree-rapidoc.html +++ b/matmair/inventree-rapidoc.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"matmair"},"dateModified":"2023-08-28T02:32:21+00:00","datePublished":"2023-08-28T02:32:21+00:00","description":"Use RapiDoc for Inventree API docs.","headline":"Inventree Rapidoc","mainEntityOfPage":{"@type":"WebPage","@id":"/matmair/inventree-rapidoc"},"url":"/matmair/inventree-rapidoc"} diff --git a/matmair/inventree-zapier.html b/matmair/inventree-zapier.html index 619b8082..4e4b0243 100644 --- a/matmair/inventree-zapier.html +++ b/matmair/inventree-zapier.html @@ -31,11 +31,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"matmair"},"dateModified":"2023-08-28T02:32:21+00:00","datePublished":"2023-08-28T02:32:21+00:00","description":"Integrate Zapier into InvenTree","headline":"Inventree Zapier","mainEntityOfPage":{"@type":"WebPage","@id":"/matmair/inventree-zapier"},"url":"/matmair/inventree-zapier"} diff --git a/news/feed.atom b/news/feed.atom index 4c9c7062..ca473037 100644 --- a/news/feed.atom +++ b/news/feed.atom @@ -1 +1 @@ -Jekyll2023-08-28T00:51:04+00:00/news/feed.atomInvenTree | NewsInvenTree is an open-source inventory management system which provides intuitive parts management and stock control. It is at the center of an ecosystem of addins for EDA tools, API wrapper, deeply integrated plugins and 3rd party tools.0.12.1 Release2023-07-13T00:00:00+00:002023-07-13T00:00:00+00:00/news/2023/07/13/0.12.1SchrodingersGat0.12.0 Release2023-06-26T00:00:00+00:002023-06-26T00:00:00+00:00/news/2023/06/26/0.12.0SchrodingersGatIntroducing the Plugin List2023-01-30T00:00:00+00:002023-01-30T00:00:00+00:00/news/2023/01/30/introducing-the-plugin-listmatmair0.9.0 Release2022-12-12T00:00:00+00:002022-12-12T00:00:00+00:00/news/2022/12/12/0.9.0SchrodingersGatNew Website2022-11-14T00:00:00+00:002022-11-14T00:00:00+00:00/news/2022/11/14/websiteSchrodingersGatWe have news now!2022-04-23T00:00:00+00:002022-04-23T00:00:00+00:00/news/2022/04/23/news-are-startingmatmair \ No newline at end of file +Jekyll2023-08-28T02:32:21+00:00/news/feed.atomInvenTree | NewsInvenTree is an open-source inventory management system which provides intuitive parts management and stock control. It is at the center of an ecosystem of addins for EDA tools, API wrapper, deeply integrated plugins and 3rd party tools.0.12.1 Release2023-07-13T00:00:00+00:002023-07-13T00:00:00+00:00/news/2023/07/13/0.12.1SchrodingersGat0.12.0 Release2023-06-26T00:00:00+00:002023-06-26T00:00:00+00:00/news/2023/06/26/0.12.0SchrodingersGatIntroducing the Plugin List2023-01-30T00:00:00+00:002023-01-30T00:00:00+00:00/news/2023/01/30/introducing-the-plugin-listmatmair0.9.0 Release2022-12-12T00:00:00+00:002022-12-12T00:00:00+00:00/news/2022/12/12/0.9.0SchrodingersGatNew Website2022-11-14T00:00:00+00:002022-11-14T00:00:00+00:00/news/2022/11/14/websiteSchrodingersGatWe have news now!2022-04-23T00:00:00+00:002022-04-23T00:00:00+00:00/news/2022/04/23/news-are-startingmatmair \ No newline at end of file diff --git a/schrodingersgat.html b/schrodingersgat.html index 856d2024..30fecdaf 100644 --- a/schrodingersgat.html +++ b/schrodingersgat.html @@ -30,11 +30,11 @@ - + +{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2023-08-28T02:32:21+00:00","datePublished":"2023-08-28T02:32:21+00:00","description":"Maintainer of InvenTree.","headline":"Schrodingersgat","mainEntityOfPage":{"@type":"WebPage","@id":"/schrodingersgat"},"url":"/schrodingersgat"} @@ -97,6 +97,9 @@

Posts