#### Tl;dr
- Closes: enso-org/cloud-v2#1338
This PR fixes bugs with opened projects. Now all projects close/open properly and list of opened projects stored in the single place
---
#### Context:
Few sentences on the high level context for the change. Link to relevant design docs or discussion.
#### This Change:
What this change does in the larger context. Specific details to highlight for review:
1. Removes a bunch of useEffects across the Dashboard page
2. Project status now a react-query state, can be reused across the app
3. Eliminated the need of `waitIntilProjectIsOpened`
---
- Fix some of https://github.com/enso-org/cloud-v2/issues/1350
- Move close icon back to right hand side of tabs
- Change icon for Local category to a computer
- Fix rendering of buttons in the delete pop up
- Remove "Versions" and "Sessions" buttons in Local mode from properties sidebar
- Also remove "Shared with" and "Labels" in Local mode
- Show real path of all assets in properties sidebar when in Local mode
- Opening Settings properly closes the user menu again
- "Export" tooltip changed to "Download"
- "Open help chat" button removed for now
Notes:
- re: Download within a folder doesn't work - this is due to the frontend using a PM endpoint that doesn't support specifying the parent directory
close#9257
Changelog:
- update: Store in the file only the subset of IdMap containing the IDs used in the metadata section on the 2nd line. The full IdMap is transmitted as a parameter of the `text/applyEdit` request.
Buttons were switched to `variant="custom"` as low hanging fruit in order to remove `UnstyledButton` (which was strictly inferior UX wise).
- Switch buttons to use `variant="submit"` or `variant="cancel"` as appropriate
- Replace both `ButtonBar` and `HorizontalMenuBar` with `ButtonGroup`
# Important Notes
None
Fixes#10197
# Important Notes
From now on, package installation will be using `pnpm install`. Installing it globally is fine for convenience, but it can also be used as `corepack pnpm install` without having to install anything other than node. For now, all other scripts are still invoked using `npm`, so we can still invoke them with usual `--workspace` setting. As far as I can tell that doesn't really have any other side effects and is identical as running the script through `pnpm run` in respective workspace project subdirectory.
- Rename `Location.Start` to `Location.Left`.
- Rename `Location.End` to `Location.Right`.
- Use auto-scoping for `Location`.
- Tune widgets for `Text.trim`.
- Correct signature of `Text.split`.
- Adjist `generateLocallyUniqueIdent` to not fail on bad signature.
Dock improvements:
- Right and bottom docks are toggled with buttons.
- Bottom dock:
- Fills available width.
- Height resize handle behaves like right dock's.
- Documentation editor: Top toolbar is outside scrollable area.
- Extended menu: Entries have icons.
- Add component button: Now in bottom-right.
https://github.com/enso-org/enso/assets/1047859/19d64fed-74ab-48c2-af0e-48f140fa8474Closes#10385, #10386.
# Important Notes
- `unrefElement`: Fixed a type-safety bug in; documented a reactivity limitation.
- `keyboardBusy`: Fixed a bug where shortcuts were ignored after clicking any button.
- Fixed right-dock slide-in animation.
- Fix https://github.com/enso-org/cloud-v2/issues/1337
- Fix#10381 (same issue)
- This was caused by queued execution context tasks delaying the disposal of the WebSocket connections - I guess because the WebSocket is closed, either the queue never reaches that point, or retries take too long to reach that point?
- There was also another issue caused by the Dashboard incorrectly caching the `project`, causing the endpoint URLs to become outdated.
Misc changes:
- Change `Editor.tsx` to not return two different component trees. This avoids React unmounting and re-mounting the GUI app.
# Important Notes
None
When copying from AG Grid, include additional information in the clipboard to enable the data to be pasted into the graph as a new Table component.
Closes#10275.
# Important Notes
- Data copied from the table visualization now include headers.
- Close https://github.com/enso-org/cloud-v2/issues/1198
- Add search bar for settings
- Note that, *unlike* the asset search bar, it has neither suggestions nor tags (name:, description:) - I don't think those add any value here (and definitely would complicate the implementation by a lot)
- Convert settings objects to JS so that they can be filtered by search
UX changes required for this PR:
- Switched `MembersSettingsSection` to use `react-query` to avoid loading the members list every time a user types into the search bar
Incidental changes added to make this PR simpler:
- Refactor search bar to be provided by a React Context so that state no longer needs to be hoisted all the way up into `Dashboard` and back down to `TopBar`
# Important Notes
- While I think highlighting the tab of the currently visible section would be a nice UX upgrade, I think it might be a bit complex for at least this initial PR.
- It's definitely possible, but almost certainly requires Intersection Observers, plus a new constant to map each Settings Section ID back to its parent Settings Tab ID
- Frontend side of https://github.com/enso-org/cloud-v2/issues/1046
- Add endpoint to list project sessions
- Add button to project sessions to view logs associated with a specific project session
# Important Notes
None
- Add close button to Editor tab
- Convert Settings page into a modal (not guaranteed to be the final design, but it makes sense to change it to a modal for now at least)
# Important Notes
None
close#10240
Changelog:
- add: `desktop-environment` Java module to detect user environment configuration
- add: `ProjectsMigration` module containing the migration logic of the enso projects directory
- update: updated and cleaned up unused settings from the storage config
- add: `desktopEnvironment` TS module to detect user environment configuration in the `project-manager-shim`
- update: `project-manager-shim` with the new user projects directory
Fixes#10185
Fixed two bugs from above issue: multiple arrows and being unable to change value from numeric input. The first was just lack of implementation; the second was caused by WidgetNumeric not handling its edit handler properly - the numeric input blur was finishing edit before click at entry could be interpreted.
# Important Notes
There is still one issue with drop-down filtering; will file a bug report soon.
#### Tl;dr
Closes: enso-org/cloud-v2#1283
This PR significantly reimplements Offline mode
<details><summary>Demo Presentation</summary>
<p>
https://github.com/enso-org/enso/assets/61194245/752d0423-9c0a-43ba-91e3-4a6688f77034
</p>
</details>
---
#### Context:
Offline mode is one of the core features of the dashboard. Unfortunately, after adding new features and a few refactoring, we lost the ability to work offline.
This PR should bring this functionality back, with a few key differences:
1. We require users to sign in before using the dashboard even in local mode.
2. Once a user is logged in, we allow him to work with local files
3. If a user closes the dashboard, and then open it, he can continue using it in offline mode
#### This Change:
What does this change do in the larger context? Specific details to highlight for review:
1. Reimplements `<AuthProvider />` functionality, now it implemented on top of `<Suspense />` and ReactQuery
2. Reimplements Backend module flow, now remote backend is always created, You no longer need to check if the RemoteBackend is present
3. Introduces new `<Suspense />` component, which is aware of offline status
4. Introduce new offline-related hooks
5. Add a banner to the form if it's unable to submit it offline
6. Refactor `InviteUserDialog` to the new `<Form />` component
7. Fixes redirect bug when the app doesn't redirect a user to the dashboard after logging in
8. Fixes strange behavior when `/users/me` could stuck into infinite refetch
9. Redesign the Cloud table for offline mode.
10. Adds blocking UI dialog when a user clicks "log out" button
#### Test Plan:
This PR requires thorough QA on the login flow across the browser and IDE. All redirect logic must stay unchanged.
---
- Fix React DevTools not working in Firefox
- Fix selection of asset names when editing them, not working at all in Firefox
- Convert tick/cross buttons when editing assets, and the "plus" and "reload" buttons on the "shared with" column, "labels" column, and keyboard shortcuts table, to match more with the rest of the design
- Update clip path when the container resizes, so that the icons for hidden columns never overlap the actual table header
- Fix#10184
- Fix renames being committed even when cancelling
- Fix duplicate name detection - previously, all asset types only checked folders with the same name, not assets with the same name
- I'm not 100% sure this is the correct behavior still
- Stop using `kbd` (`aria.Keyboard`) to display keyboard shortcuts, since they should not be displayed in a monospace font.
- Fix "plus" and "reload" buttons going past the right side of their parent table cell
- Limit length of `PermissionDisplay` - if the username of a user with permission is too long, it uses a tooltip instead
- Update the username dynamically for all permissions owned by self, when changing username in the settings.
- This avoids having to fully invalidate the directory tree every time the username changes, given that nothing changes about the assets' metadata themselves.
- Cache children in the Drive tree
- This avoids loading spinners when closing a folder and immediately reopening it.
- Note that children are still re-fetched on reopen to ensure freshness
# Important Notes
- This MAY be split into multiple smaller PRs. However, I think it's better to QA as a single PR, to avoid duplicating work checking behavior that may be changed by a sibling PR (assuming the PR was split into multiple).
- PARTIALLY implements https://github.com/enso-org/cloud-v2/issues/1232
- Partially refactor E2E test actions into a state machine.
- The main goal of this is to _disallow_ invalid actions - for example going from a page to itself, which will fail at runtime, or trying to create a new Data Link on a page where that button is not accessible.
- An auxiliary goal is to have better namespacing of actions and better clarity:
- Previously, everything was a locator at the top level of a single module. This makes it very difficult to comprehend what kinds of actions are available.
- Note: There is also older `namespace`-based namespacing for the User and Organization settings pages, which were added before this refactor. They SHOULD be refactored to the new API, but I'm not sure whether it's worth spending the time right now.
- Add E2E tests for every input on the "user" settings page and the "organization" settings page.
- A skeletal E2E test for the Datalink modal has also been added - it does not actually test anything currently but should be sufficient for building upon.
# Important Notes
None
Panning or zooming "captures" wheel events. While events are captured, further
events of the same type will continue the pan/zoom action. The capture expires
if no events are received for 250ms. A trackpad capture also expires if any
pointer movement occurs.
⚠️ This PR depends on #9896 and MUST NOT be merged before that one.
- Close#9898
- Move right menu to Drive View
- Use new icon for toggling the menu
- Move Search Bar into Drive View
- both of these changes come with free simplifications to the code.
- Refactor entire Top Bar to show pages as tabs
- Fix https://github.com/enso-org/cloud-v2/issues/1301
- Remove grey background from arrow icon visible when hovering over directory rows
# Important Notes
- Fonts containing slight variants have been added to make it match more closely with the Figma design. HOWEVER:
- They have been added in `app/gui2` instead of the Dashboard codebase, because that is where the existing Enso font is located.
- While it's definitely possible to put them in the Dashboard codebase, I think it's preferable to avoid that, otherwise we will have two separate mechanisms for loading/packaging fonts.
- However, this problem SHOULD go away if (if not when) the entrypoints for the desktop app (in `app/gui2`) and cloud.enso.org (in `app/ide-desktop/lib/dashboard`) are merged.
Fixes#10238
Updated the way we construct `get_widget_json` visualization configuration to take into account cases when there is no known self argument.
As this is a bit of logic, I moved parts of WidgetFunction to a separate composable for easier testing. Most if it was just moved: meaningful changes were only in selfArgumentExternalId and visualizationConfig.
Added missing test for `usePropagateScopesToAllRoots` that was added in #10172.
Also testing against the default Vue behavior, since it is possible that a future update will make the workaround obsolete.
- remove legacy matrix and object types from vue component and any further code relating to those
- remove the index and index header being sent in the json for tables
- add has_index_col flag for json hat previously sent 'indicies_header' and 'indicies' so that index/# column is still rendered where required
This PR introduces:
1. Set of Paywall components: PaywallButton, PaywallDialog
2. Adds Devtools
3. Implement Paywall Configuration
This PR partially depends on https://github.com/enso-org/enso/pull/10199
- Fix the appearance of the `tertiary` button variant
- Fix spinner for projects that are opening being misaligned by 1px
- Fix appearance of "Login with Google" and "Login with GitHub" icons in the Login page
- Fix#10279
- Switch to Local tab when on desktop app and user does not have an active plan
# Important Notes
None
* Add an option to profile AppImage
Add `-debug.profile` on startup to turn on the profiler on a local
machine and dump data to `profiling.npss` file. Previously not possible
in a standalone setup.
Useful for #9789.
* fix linter
* fix linter warning
* more linting
* lint
Change grab cursors:
- Node has grab/grabbed icons for only halo and icon.
Fix bugs:
- Empty part of top bar no longer blocks mouse events.
- JSON viz: Clickable parts of inline elements now use pointer cursor when hovered.
- Doc panel breadcrumbs: Icon can be clicked (behavior now consistent with cursor shown).
https://github.com/enso-org/enso/assets/1047859/3e48a6c1-3f43-497f-82ad-eb787e9c9643Closes#10166.
# Important Notes
- New global `clickable` class replaces `cursor: pointer`; the class can be applied closer to the event handler.
- Refactor: Extracted `GraphNode` output port logic to a new component.
- Close#9886
- Update style of buttons in Drive Bar
- Move "Home" page into a "Start" dialog
- Remove icons that are no longer needed
- Remove Backend Switcher in top bar - they have now been converted to categories
- Incidental changes
- Refactor Backend provider so that both Remote and Local backends are available.
- This was done because both Cloud and Local backends are now easily accessible by switching tabs - the Local backend no longer has its own views with the hidden category switcher
# Important Notes
None
Render markdown image syntax in documentation. Relative URLs are fetched from the project directory; absolute URLs are hotlinked from wherever they point.
Syntax and URL resolution:
```
# In New_Project27/src/Main.enso
## Main method docs
- Image at `New_Project27/src/image.jpg`: ![Image](image.jpg)
- Image at `New_Project27/image.png`: ![Image](../image.png)
- Image at `New_Project27/src/image.jpg`: ![Image](/src/image.jpg)
- Image at `New_Project27/image.png`: ![Image](/image.png)
main =
42
```
https://github.com/enso-org/enso/assets/1047859/3f873f3f-31b1-44bf-ae3e-2f467f2d546dCloses#10058.
# Important Notes
Stacked on #10064.
In this PR:
1. We added support to declaratively invalidate queries after making a mutation
2. We pull ReactQueryDevtools up in the component tree to make it available during dashboard loading
Also, this PR removes some rules in eslint
In this PR:
1. Now button has proper sized icons, size of the button is also alighned with the grid
2. Migrate ResizableTextContentEditableInput to Text component
3. Migrate Dialog to variants API
4. Did another attemt to make text more reusable. Now instead of using paddings, we use ::before and ::after to make text better aligned inside a grid
Fixes#10088, #10154
Implemented figma tooltip design through Vue components and store. Attached tooltips to all existing SVG buttons, based on assigned label property.
https://github.com/enso-org/enso/assets/919491/85f5fef7-c6df-471b-b544-b45f45f4f51e
# Important Notes
Removed all usages of `v-bind` in styles due to issues during hot reloading when updating stores. The internal CSS binding composable sometimes crashes when the component is being unmounted due to hot reload.
This PR improves intergration with Stripe functionality:
1. Moves Stripe into a separate provider
2. Add bakn card component extracted into a separate component
This PR:
1. Improves typography across the components
2. Refactors Terms of service modal to `<Field />` component
3. Changes the way we render background for modals (we no longer need ::before and relative hacks)
4. Adds ability to nest `<Text />` components and remove paddings of the nested text elements. this is helpful if we want to change styling of a particular word inside the text or we want to display 2 text nodes closer to each other
5. Remove timeot before showing a tooltip on button elements.
This PR improves the DX and UX of dialogs/popovers:
1. Now the content is wrapped in `<Suspense />` and `<ErrorBoundary />`
2. Dialogs no longer close if they are underlay below the other dialogs
3. Provides an ability to close the dialog underlay component using dialog context