Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(form): add (auto)save and local schema repo #87

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 21 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ Formule consists of the following main components:

It also exports the following functions:

- **`initFormuleSchema`**: Inits the JSONSchema, **_needs_** to be run on startup.
- **`initFormuleSchema`**: Inits or resets the JSONSchema. You can also load an existing schema by passing it as an argument.
- **`getFormuleState`**: Formule has its own internal redux state. You can retrieve it at any moment if you so require for more advanced use cases. If you want to continuosly synchronize the Formule state in your app, you can pass a callback function to FormuleContext instead (see below), which will be called every time the form state changes.

And the following utilities:
Expand All @@ -52,6 +52,16 @@ And the following utilities:
- **`CodeViewer`**: Useful if you want to visualize the JSON schemas that are being generated (as you can see in the demo).
- **`CodeDiffViewer`**: Useful if you want to compare two different JSON schemas, for example to see the changes since the last save.

As well as the following utility functions to handle saving and loading schemas from local storage if you need and for unsaved change detection:

- `getAllFromLocalStorage`
- `saveToLocalStorage`
- `deleteFromLocalStorage`
- `loadFromLocalStorage`
- `isUnsaved`

Have a look at `src/index.ts` to see all exported components and functions. You can also have a look at `formule-demo` to see how they are used there.

### Field types

Formule includes a variety of predefined field types, grouped in three categories:
Expand Down Expand Up @@ -83,20 +93,19 @@ yarn add react-formule

```jsx
import {
FormuleContext,
SelectOrEdit,
SchemaPreview,
FormPreview,
initFormuleSchema
FormuleContext,
SelectOrEdit,
SchemaPreview,
FormPreview,
} from "react-formule";

const useEffect(() => initFormuleSchema(), []);

<FormuleContext>
return (
<FormuleContext>
<SelectOrEdit />
<SchemaPreview />
<FormPreview />
</FormuleContext>
</FormuleContext>
);
```

### Customizing and adding new field types
Expand Down Expand Up @@ -168,8 +177,8 @@ const handleFormuleStateChange = (newState) => {
Alternatively, you can pull the current state on demand by calling `getFormuleState` at any moment.

> [!TIP]
> For more examples, feel free to browse around the [CERN Analysis Preservation](https://github.com/cernanalysispreservation/analysispreservation.cern.ch) repository, where we use all the features mentioned above.
> For more examples, feel free to browse around formule-demo and the [CERN Analysis Preservation](https://github.com/cernanalysispreservation/analysispreservation.cern.ch) repository, where we use all the features mentioned above.

## :space_invader: Local demo & how to contribute

Apart from trying the online [demo](https://cern-sis.github.io/react-formule/) you can clone the repo and run `formule-demo` to play around. Follow the instructions in its [README](./formule-demo/README.md): it will explain how to install `react-formule` as a local dependency so that you can modify Formule and test the changes live in your host app, which will be ideal if you want to troubleshoot or contribute to the project.
Apart from trying the online [demo](https://cern-sis.github.io/react-formule/) you can clone the repo and run `formule-demo` to play around. Follow the instructions in its [README](./formule-demo/README.md): it will explain how to install `react-formule` as a local dependency so that you can modify Formule and test the changes live in your host app, which will be ideal if you want to troubleshoot or contribute to the project. Your contributions are welcome! :rocket:
2 changes: 1 addition & 1 deletion formule-demo/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ This is a small application that serves as a playground to test react-formule.

### The easy way

Simply run `yarn install` and `yarn dev` in react-formule and visit `localhost:3030`. You will see any changes in react-formule immediately in the demo app.
Simply run `yarn install` in react-formule, `yarn install` and `yarn dev` in formule-demo and visit `localhost:3030`. You will see any changes in react-formule immediately in the demo app.

**Note:** If you look at `formule-demo/vite.config.local.ts` you will see an alias for `react-formule`. What this does is essentially equivalent to using `yarn link` with `./src/index.ts` as entry point.

Expand Down
2 changes: 2 additions & 0 deletions formule-demo/cypress/e2e/builder.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const SEP = "\\:\\:";
describe("test basic functionality", () => {
beforeEach(() => {
cy.visit("localhost:3030");
// Collapse the float buttons to avoid visibility issues
cy.getByDataCy("floatButtons").click();
});

it("allows drag and drop to the SchemaTree", () => {
Expand Down
Loading
Loading