Skip to content

Conversation

@rjose
Copy link
Collaborator

@rjose rjose commented Apr 9, 2023

Merges changes from the v3 branch onto main

rjose and others added 29 commits April 8, 2023 20:28
* Use create-react-app to create first version
* Add initial Makefile
* Specify homepage in package.json
* Install npm modules
* Build and install the react bundle
* Can render arbitrary JSX from Forthic!
* Use functional React components and can set css
* Use ReactRouter
* Can build routes with dynamic elements
* Can render ForthicPage
* Can hook up a Button
    * Can specify a Forthic callback
    * Can update page state
* Implement <<CLASSNAME
* Can make server calls from React Forthic
* Add error handling support to ForthicPage
* Code cleanup
* Add Forthic Python versions
* Added version support to forthic-react
* Got the Forthic v2 unit tests to pass
* v3 Tokenizer and Interpreter tests are passing
* Got Forthic v3 global module tests working
* Implement/test GROUP-BY, MAP, FOREACH, FLATTEN
* Add support for "flag words" that change the behavior of words
    * Add !DEPTH to MAP to apply Forthic at a certain record/array depth
    * Add !DEPTH to FLATTEN so we can flatten arrays to a specified depth
* Extend REC@ to work with nested arrays/records
* React Forthic: Add tokenizer test
* Add interpreter tests
* Also fix jest error with axios
* Add MESSAGE-BROKER and PUBLISH-MESSAGE to allow the UI to update
  ForthicPage state
* Modify SERVER-INTERPRET to use !PUSH-ERROR in order to remove need to
  add exception handler as a global window variable
* Fix bug in ForthicPage page state update

Also:
* Made BY-FIELD and SORT more resilient to NULLs
* Split Forthic React example into 3 simpler examples
* Add make targets for Forthic React tests
* Add recharts module to Forthic React v1
* Add elements for React Bootstrap
* Add UserNav elements to Forthic React
* Add RecordsTable
global module changes
=====================
* Add RANGE word to global module (Forthic v2/v3, Forthic React v1)
* Add MARKDOWN>HTML to global module
* Fix bug when accessing comparator flag
* Rename |ASCII to ASCII
* Add unit test that uses !DEPTH with FLATTEN
* Rename Forthic py tests for Forthic v3
* Update documentation to include new words and remove old ones

org module changes
==================
* Add !WITH-LEAD
* Add ROOT-MANAGERS
* Update unit tests
* Update docs

datasets module changes
=======================
* Redesign Forthic v3 datasets module to make it simpler by using a
  record as the mental model for storage

Document Forthic React
======================
* Added initial documentation for forthic-react
    * ForthicPage: Render a page that reacts to query param changes
    * RecordsTable: Render an array of records into a table
    * TicketsModal: Show a modal dialog with ticket details
    * UserNav: Render a control for navigating an org hierarchy
    * global module: Documented global words, particularly ones specific to Forthic React
    * recharts module: Documented words used with Recharts
* RecordsTable: Replace wrapper_style and header_style with wrapper_className and header_className
* Add TicketsModal element
* global_module changes
    * Remove obsolete words
    * Add MESSAGE-BROKER and PUBLISH-MESSAGE to allow Forthic to
      interact with useState hooks
    * Add window.open word to open a URL in a new tab
    * Fix modularize_forthic function so it refers to the correct module
* Update index.css with RecordsTable and TicketsModal styles
Forthic py and Forthic React
============================
* Add ARRAY? word to test if a value is an array
* Add STR>TIMESTAMP to convert a date string into a unix timestamp
* Add MEAN to average an array of numbers

Forthic React
=============
* Import Typeahead, AsyncTypeahead
* Import CSVLink
* Add a !DELAY flag word
* Used !DELAY with QPARAM_bang to delay the setting of query params.
  This gives the user the opportunity to select multiple things without
  constantly causing the page to reload
* Fix bug where setting multiple params at once was only setting one
* Add <QPARAMS to add a query param string to the end of a specified URL
* The `total_info` prop now has the following fields:
    * col_fclick: For clicking on a total column
    * row_fclick: For clicking on a total row
    * grand_fclick: For clicking on the grand total cell

Fixed bugs
==========
* Use !COMPARATOR with SORT
* Don't overwrite className when handling different cases
* Add a default limit of 1000 tickets returned by a Jira search
* Allow ticket limit to be overridden using a !MAX-TICKETS flag word
* Add support for custom fields with duplicate names. The essential idea
  is that we map a custom field name into all IDs that it could match
  and then return only the non-NULL versions of it. The assumption is
  that a ticket can have at most one of these duplicate custom fields in
  it.
This module can be used to specify different Forthic React bundles from
each Forthic app.
== Forthic React changes
* Add `fformat_rec` prop to RecordsTable to allow formatting of a field
  using the entire record rather than just the value. This takes
  precedence over `fformat`
* Add option to select tickets for EmailCampaign from TicketsModal if
  email is configured
* Add TITLE! to global module so we can set the page title

== Forthic py changes
* FIX: default items and leads to empty lists in `group_by_leads`
* RecordsTable: Add `format_rec` option to format table cells using a javascript
  function
* TicketSelector: Takes a `select_field` to indicate which field should
  indicate ticket selection. Also takes `toggle_selected` callback
  function to update ticket selection state
* TicketsModal: Use updated TicketSelector for ticket selection column.
  Also allow records to be sorted by selected tickets
* Don't send gsheet updates if there are none
* Use flag words to change behavior of module words
* Added following words
    * PUSH-CONTEXT!: Sets gsheet context
    * POP-CONTEXT!: Pops a gsheet context
    * SPREADSHEET: Get a spreadsheet from url
    * TAB: Get a tab from url
    * TAB@: Get a tab from a spreadsheet
    * ENSURE-TAB!: Ensure that a tab exists within a spreadsheet
    * ROWS: Returns the rows of a tab
    * ROWS!: Writes array of rows to a tab
    * CLEAR!: Clears a tab
    * RECORDS: Returns the rows of a tab as records (given a header)
    * RECORDS!: Writes records to a tab
    * BATCH-UPDATE-TAB!: Low-level access to gsheets API
    * !RANGE: Specifies a range to use for a word
    * !TRANSPOSE: Indicates that data should be read/written as columns
      instead of rows
    * !CELL-FORMAT: Indicates that data is in a cell structure rather
      than a string
    * INDEX>COL-NAME: Converts a column index into an alphabetical name
    * COL-NAME>INDEX: Converts an alphabetical column name to an index
* Add gsheet module v3 documentation

* Global module and cache module change
    * Use a default serializer to handle datetime values
* Fix bug in RE-REPLACE: Explicitly use the flags argument
* Fix typo bug in word_plus
This module is currently under development. The initial use case is
rendering SVG charts that can be emailed
* Created server directory and moved Flask server there
    * Handle storing of username/password
    * Handle storing of app creds
    * Handle Forthic screens
    * Handle SERVER-INTERPRET
* Moved apps directory to server/apps
* Added smoke-test app
* Added ForthicReact smoke test
* Add initial home page for sample apps

Also:
* Add Python 3.10 to tox.ini
* Add initial stats module to Forthic v3
* Update EXAMPLES.md based on new examples
* Styled password pages
@rjose rjose merged commit d599af6 into main Apr 9, 2023
@rjose rjose deleted the rjose/merge-v3 branch April 9, 2023 03:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants